@agent-profile/web 0.1.3 → 0.2.0
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.md +70 -29
- package/build/client/_app/immutable/assets/{0.BG6jUcBX.css → 0.8hVtEx5X.css} +1 -1
- package/build/client/_app/immutable/assets/0.8hVtEx5X.css.br +0 -0
- package/build/client/_app/immutable/assets/0.8hVtEx5X.css.gz +0 -0
- package/build/client/_app/immutable/assets/9.BsbC-D7w.css +1 -0
- package/build/client/_app/immutable/assets/9.BsbC-D7w.css.br +0 -0
- package/build/client/_app/immutable/assets/9.BsbC-D7w.css.gz +0 -0
- package/build/client/_app/immutable/chunks/4FiW6_9u.js +1 -0
- package/build/client/_app/immutable/chunks/4FiW6_9u.js.br +2 -0
- package/build/client/_app/immutable/chunks/4FiW6_9u.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CF39CcoQ.js +3 -0
- package/build/client/_app/immutable/chunks/CF39CcoQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/CF39CcoQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CRcOA4L4.js +3 -0
- package/build/client/_app/immutable/chunks/CRcOA4L4.js.br +0 -0
- package/build/client/_app/immutable/chunks/CRcOA4L4.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cc9Av3g9.js +2 -0
- package/build/client/_app/immutable/chunks/Cc9Av3g9.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cc9Av3g9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DUEBfJ-c.js +1 -0
- package/build/client/_app/immutable/chunks/DUEBfJ-c.js.br +4 -0
- package/build/client/_app/immutable/chunks/DUEBfJ-c.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DvNNrklS.js +1 -0
- package/build/client/_app/immutable/chunks/DvNNrklS.js.br +2 -0
- package/build/client/_app/immutable/chunks/DvNNrklS.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.ZULfIbKE.js +2 -0
- package/build/client/_app/immutable/entry/app.ZULfIbKE.js.br +0 -0
- package/build/client/_app/immutable/entry/app.ZULfIbKE.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.XwZvWTgq.js +1 -0
- package/build/client/_app/immutable/entry/start.XwZvWTgq.js.br +0 -0
- package/build/client/_app/immutable/entry/start.XwZvWTgq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.BTaKrNnR.js +1 -0
- package/build/client/_app/immutable/nodes/0.BTaKrNnR.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.BTaKrNnR.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.B4GcuHvH.js +1 -0
- package/build/client/_app/immutable/nodes/1.B4GcuHvH.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.B4GcuHvH.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{10.BOQgahuX.js → 10.IHQDAuDz.js} +2 -2
- package/build/client/_app/immutable/nodes/10.IHQDAuDz.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.IHQDAuDz.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.B5APptAv.js +1 -0
- package/build/client/_app/immutable/nodes/11.B5APptAv.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.B5APptAv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.BHUaWFMZ.js +10 -0
- package/build/client/_app/immutable/nodes/2.BHUaWFMZ.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.BHUaWFMZ.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.DIhh3cSh.js +2 -0
- package/build/client/_app/immutable/nodes/3.DIhh3cSh.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.DIhh3cSh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.DjkBBmOF.js +4 -0
- package/build/client/_app/immutable/nodes/4.DjkBBmOF.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.DjkBBmOF.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.BPcSAYs6.js +2 -0
- package/build/client/_app/immutable/nodes/5.BPcSAYs6.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.BPcSAYs6.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.DZa-5yoH.js +5 -0
- package/build/client/_app/immutable/nodes/6.DZa-5yoH.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.DZa-5yoH.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.v6t5o5IK.js +4 -0
- package/build/client/_app/immutable/nodes/7.v6t5o5IK.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.v6t5o5IK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.UWqOmBTc.js +1 -0
- package/build/client/_app/immutable/nodes/8.UWqOmBTc.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.UWqOmBTc.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.xVCOCMfn.js +3 -0
- package/build/client/_app/immutable/nodes/9.xVCOCMfn.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.xVCOCMfn.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/client/marketing.js +105 -0
- package/build/client/marketing.js.br +0 -0
- package/build/client/marketing.js.gz +0 -0
- package/build/server/chunks/{0-aBAedq2p.js → 0-IAeZ4YD5.js} +17 -11
- package/build/server/chunks/0-IAeZ4YD5.js.map +1 -0
- package/build/server/chunks/{1-7SwLsXP7.js → 1--R3gZqoU.js} +3 -3
- package/build/server/chunks/{1-7SwLsXP7.js.map → 1--R3gZqoU.js.map} +1 -1
- package/build/server/chunks/10-B2v4GVik.js +9 -0
- package/build/server/chunks/{10-B1aX7ZZ8.js.map → 10-B2v4GVik.js.map} +1 -1
- package/build/server/chunks/{11-4z6b2WB8.js → 11-DbxvesJH.js} +6 -6
- package/build/server/chunks/{11-4z6b2WB8.js.map → 11-DbxvesJH.js.map} +1 -1
- package/build/server/chunks/2-CHviyPyI.js +21 -0
- package/build/server/chunks/2-CHviyPyI.js.map +1 -0
- package/build/server/chunks/3-CdNRNP5d.js +9 -0
- package/build/server/chunks/{3-CLWhM7Et.js.map → 3-CdNRNP5d.js.map} +1 -1
- package/build/server/chunks/{4-BehBrXcu.js → 4-CCj_Mhpz.js} +6 -6
- package/build/server/chunks/{4-BehBrXcu.js.map → 4-CCj_Mhpz.js.map} +1 -1
- package/build/server/chunks/5-CqBVRlNU.js +9 -0
- package/build/server/chunks/{5-C1YtO2Ru.js.map → 5-CqBVRlNU.js.map} +1 -1
- package/build/server/chunks/{6-DJ03bQJy.js → 6-BHxeFzUE.js} +3 -3
- package/build/server/chunks/{6-DJ03bQJy.js.map → 6-BHxeFzUE.js.map} +1 -1
- package/build/server/chunks/{7-BHefj3jR.js → 7-BUFOaHdC.js} +8 -8
- package/build/server/chunks/{7-BHefj3jR.js.map → 7-BUFOaHdC.js.map} +1 -1
- package/build/server/chunks/8-BbviFV5J.js +9 -0
- package/build/server/chunks/{8-BNb36pCU.js.map → 8-BbviFV5J.js.map} +1 -1
- package/build/server/chunks/9-kCTRECfO.js +67 -0
- package/build/server/chunks/9-kCTRECfO.js.map +1 -0
- package/build/server/chunks/{Badge-BrV_lIru.js → Badge-DCQxSQCS.js} +2 -2
- package/build/server/chunks/{Badge-BrV_lIru.js.map → Badge-DCQxSQCS.js.map} +1 -1
- package/build/server/chunks/{SafetyBadge-BSDbVVMY.js → SafetyBadge-BxEGojgX.js} +2 -2
- package/build/server/chunks/{SafetyBadge-BSDbVVMY.js.map → SafetyBadge-BxEGojgX.js.map} +1 -1
- package/build/server/chunks/{_layout.svelte-C6Ru_7YV.js → _layout.svelte-CQM4xaaq.js} +8 -8
- package/build/server/chunks/_layout.svelte-CQM4xaaq.js.map +1 -0
- package/build/server/chunks/{_page.svelte-Bv-w7cKm.js → _page.svelte-1wUrXGW-.js} +3 -3
- package/build/server/chunks/{_page.svelte-Bv-w7cKm.js.map → _page.svelte-1wUrXGW-.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BS9xpx67.js → _page.svelte-2W3EhlSt.js} +141 -60
- package/build/server/chunks/_page.svelte-2W3EhlSt.js.map +1 -0
- package/build/server/chunks/{_page.svelte-C8HqSRYY.js → _page.svelte-B3CasgD8.js} +2 -2
- package/build/server/chunks/{_page.svelte-C8HqSRYY.js.map → _page.svelte-B3CasgD8.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-QyOMa9Ce.js → _page.svelte-B6d3qwTm.js} +5 -5
- package/build/server/chunks/{_page.svelte-QyOMa9Ce.js.map → _page.svelte-B6d3qwTm.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DRj4L7XZ.js → _page.svelte-BikYFdJv.js} +4 -4
- package/build/server/chunks/{_page.svelte-DRj4L7XZ.js.map → _page.svelte-BikYFdJv.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-r2AHAn4f.js → _page.svelte-D8ffqrO3.js} +3 -3
- package/build/server/chunks/{_page.svelte-r2AHAn4f.js.map → _page.svelte-D8ffqrO3.js.map} +1 -1
- package/build/server/chunks/_page.svelte-DfUc4h7g.js +435 -0
- package/build/server/chunks/_page.svelte-DfUc4h7g.js.map +1 -0
- package/build/server/chunks/{_page.svelte-DYBnVmA8.js → _page.svelte-sygmDxbg.js} +6 -6
- package/build/server/chunks/{_page.svelte-DYBnVmA8.js.map → _page.svelte-sygmDxbg.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DyYKrY-D.js → _page.svelte-wL3fdD1l.js} +4 -4
- package/build/server/chunks/{_page.svelte-DyYKrY-D.js.map → _page.svelte-wL3fdD1l.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DuJcNgye.js → _page.svelte-xTZOj1o8.js} +3 -3
- package/build/server/chunks/{_page.svelte-DuJcNgye.js.map → _page.svelte-xTZOj1o8.js.map} +1 -1
- package/build/server/chunks/_server.ts-B7znNtap.js +100 -0
- package/build/server/chunks/_server.ts-B7znNtap.js.map +1 -0
- package/build/server/chunks/_server.ts-BjPyYUki.js +85 -0
- package/build/server/chunks/_server.ts-BjPyYUki.js.map +1 -0
- package/build/server/chunks/_server.ts-C8Fe0kql.js +8 -0
- package/build/server/chunks/_server.ts-C8Fe0kql.js.map +1 -0
- package/build/server/chunks/_server.ts-D1Ja2hnG.js +8 -0
- package/build/server/chunks/_server.ts-D1Ja2hnG.js.map +1 -0
- package/build/server/chunks/_server.ts-DsbQ4b7x.js +43 -0
- package/build/server/chunks/_server.ts-DsbQ4b7x.js.map +1 -0
- package/build/server/chunks/_server.ts-hEGlXjuB.js +8 -0
- package/build/server/chunks/_server.ts-hEGlXjuB.js.map +1 -0
- package/build/server/chunks/{client-CBew73li.js → client-h6Frgnzt.js} +3 -3
- package/build/server/chunks/{client-CBew73li.js.map → client-h6Frgnzt.js.map} +1 -1
- package/build/server/chunks/{dev-CrqJ3ZR3.js → dev-BdIdjvaY.js} +216 -82
- package/build/server/chunks/dev-BdIdjvaY.js.map +1 -0
- package/build/server/chunks/{doctorSummary-CGjSiyKU.js → doctorSummary-FyoWuR3R.js} +3 -3
- package/build/server/chunks/{doctorSummary-CGjSiyKU.js.map → doctorSummary-FyoWuR3R.js.map} +1 -1
- package/build/server/chunks/{error.svelte-C78Jl1J5.js → error.svelte-DYzh-S9t.js} +5 -5
- package/build/server/chunks/{error.svelte-C78Jl1J5.js.map → error.svelte-DYzh-S9t.js.map} +1 -1
- package/build/server/chunks/hooks.server-BKavEpqC.js +81 -0
- package/build/server/chunks/hooks.server-BKavEpqC.js.map +1 -0
- package/build/server/chunks/index-CLnuRv4X.js +134 -0
- package/build/server/chunks/index-CLnuRv4X.js.map +1 -0
- package/build/server/chunks/index-DBqjc0Yf.js +77 -0
- package/build/server/chunks/index-DBqjc0Yf.js.map +1 -0
- package/build/server/chunks/{internal-WBaPpipk.js → internal-Dz8-ksla.js} +23 -93
- package/build/server/chunks/internal-Dz8-ksla.js.map +1 -0
- package/build/server/chunks/marketingSeo-6Ec8IVzY.js +132 -0
- package/build/server/chunks/marketingSeo-6Ec8IVzY.js.map +1 -0
- package/build/server/chunks/profileApiHelpers-CUuQdn1G.js +180 -0
- package/build/server/chunks/profileApiHelpers-CUuQdn1G.js.map +1 -0
- package/build/server/chunks/{projectContext-C4-xYqFg.js → projectContext-fk5wtjwg.js} +1393 -69
- package/build/server/chunks/projectContext-fk5wtjwg.js.map +1 -0
- package/build/server/chunks/src2-BFardyAd.js +12 -0
- package/build/server/chunks/src2-BFardyAd.js.map +1 -0
- package/build/server/chunks/{dist--t-UlYlZ.js → src3-vKD2iyNK.js} +135 -3
- package/build/server/chunks/src3-vKD2iyNK.js.map +1 -0
- package/build/server/chunks/tokenStore-DQfTa-N3.js +57 -0
- package/build/server/chunks/tokenStore-DQfTa-N3.js.map +1 -0
- package/build/server/index.js +4592 -4
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +57 -15
- package/build/server/manifest.js.map +1 -1
- package/package.json +12 -9
- package/build/client/_app/immutable/assets/0.BG6jUcBX.css.br +0 -0
- package/build/client/_app/immutable/assets/0.BG6jUcBX.css.gz +0 -0
- package/build/client/_app/immutable/chunks/B-io8J2C.js +0 -1
- package/build/client/_app/immutable/chunks/B-io8J2C.js.br +0 -2
- package/build/client/_app/immutable/chunks/B-io8J2C.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BWDgWdtq.js +0 -3
- package/build/client/_app/immutable/chunks/BWDgWdtq.js.br +0 -0
- package/build/client/_app/immutable/chunks/BWDgWdtq.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CBvCQPh1.js +0 -1
- package/build/client/_app/immutable/chunks/CBvCQPh1.js.br +0 -2
- package/build/client/_app/immutable/chunks/CBvCQPh1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DAWBIq3g.js +0 -2
- package/build/client/_app/immutable/chunks/DAWBIq3g.js.br +0 -0
- package/build/client/_app/immutable/chunks/DAWBIq3g.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DCJP-V9E.js +0 -3
- package/build/client/_app/immutable/chunks/DCJP-V9E.js.br +0 -0
- package/build/client/_app/immutable/chunks/DCJP-V9E.js.gz +0 -0
- package/build/client/_app/immutable/chunks/SOrpfga1.js +0 -1
- package/build/client/_app/immutable/chunks/SOrpfga1.js.br +0 -0
- package/build/client/_app/immutable/chunks/SOrpfga1.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.CvfSMy7S.js +0 -2
- package/build/client/_app/immutable/entry/app.CvfSMy7S.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CvfSMy7S.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.nKIgWfXU.js +0 -1
- package/build/client/_app/immutable/entry/start.nKIgWfXU.js.br +0 -0
- package/build/client/_app/immutable/entry/start.nKIgWfXU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.l1JjQQQj.js +0 -1
- package/build/client/_app/immutable/nodes/0.l1JjQQQj.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.l1JjQQQj.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.BzbldZDH.js +0 -1
- package/build/client/_app/immutable/nodes/1.BzbldZDH.js.br +0 -4
- package/build/client/_app/immutable/nodes/1.BzbldZDH.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.BOQgahuX.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.BOQgahuX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.BjwWla8T.js +0 -1
- package/build/client/_app/immutable/nodes/11.BjwWla8T.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.BjwWla8T.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.BDMGSS6l.js +0 -9
- package/build/client/_app/immutable/nodes/2.BDMGSS6l.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.BDMGSS6l.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.NnDkXnSG.js +0 -2
- package/build/client/_app/immutable/nodes/3.NnDkXnSG.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.NnDkXnSG.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.8sZ5zCiS.js +0 -4
- package/build/client/_app/immutable/nodes/4.8sZ5zCiS.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.8sZ5zCiS.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.CSOalQ9R.js +0 -2
- package/build/client/_app/immutable/nodes/5.CSOalQ9R.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.CSOalQ9R.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BMBuGW7y.js +0 -5
- package/build/client/_app/immutable/nodes/6.BMBuGW7y.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BMBuGW7y.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.CKFnFT6B.js +0 -4
- package/build/client/_app/immutable/nodes/7.CKFnFT6B.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.CKFnFT6B.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.Dw5huUXy.js +0 -1
- package/build/client/_app/immutable/nodes/8.Dw5huUXy.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.Dw5huUXy.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.CnkwRoxn.js +0 -5
- package/build/client/_app/immutable/nodes/9.CnkwRoxn.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.CnkwRoxn.js.gz +0 -0
- package/build/server/chunks/0-aBAedq2p.js.map +0 -1
- package/build/server/chunks/10-B1aX7ZZ8.js +0 -9
- package/build/server/chunks/2-BT3hDge_.js +0 -9
- package/build/server/chunks/2-BT3hDge_.js.map +0 -1
- package/build/server/chunks/3-CLWhM7Et.js +0 -9
- package/build/server/chunks/5-C1YtO2Ru.js +0 -9
- package/build/server/chunks/8-BNb36pCU.js +0 -9
- package/build/server/chunks/9-LeS-ldcl.js +0 -57
- package/build/server/chunks/9-LeS-ldcl.js.map +0 -1
- package/build/server/chunks/_layout.svelte-C6Ru_7YV.js.map +0 -1
- package/build/server/chunks/_page.svelte-BS9xpx67.js.map +0 -1
- package/build/server/chunks/_page.svelte-IYyXbXcB.js +0 -424
- package/build/server/chunks/_page.svelte-IYyXbXcB.js.map +0 -1
- package/build/server/chunks/dev-CrqJ3ZR3.js.map +0 -1
- package/build/server/chunks/dist--t-UlYlZ.js.map +0 -1
- package/build/server/chunks/hooks.server-BU12K8IL.js +0 -38
- package/build/server/chunks/hooks.server-BU12K8IL.js.map +0 -1
- package/build/server/chunks/index-CNsiSQmW.js +0 -4727
- package/build/server/chunks/index-CNsiSQmW.js.map +0 -1
- package/build/server/chunks/internal-WBaPpipk.js.map +0 -1
- package/build/server/chunks/projectContext-C4-xYqFg.js.map +0 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { p as parseProfileYaml } from './projectContext-fk5wtjwg.js';
|
|
2
|
+
import 'node:fs/promises';
|
|
3
|
+
import 'process';
|
|
4
|
+
import 'buffer';
|
|
5
|
+
import 'node:util';
|
|
6
|
+
import 'node:path';
|
|
7
|
+
import 'node:crypto';
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
export { parseProfileYaml };
|
|
12
|
+
//# sourceMappingURL=src2-BFardyAd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src2-BFardyAd.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { p as parseProfileYaml, c as compileProfile,
|
|
1
|
+
import { p as parseProfileYaml, c as compileProfile, d as deriveEffectivePermissions, s as safeOutputPath, a as containsSecretLikeLiteral, v as validateLockfileText, b as createLockfileFile, e as sha256Hex, n as normalizeSafety, g as getEnabledSubagents, i as isSubagentBuiltinNameCollision } from './projectContext-fk5wtjwg.js';
|
|
2
2
|
import { readFile, readdir } from 'node:fs/promises';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
|
|
5
|
-
//#region ../../packages/doctor/
|
|
5
|
+
//#region ../../packages/doctor/src/doctor.ts
|
|
6
6
|
var PROFILE_PATH = "ai-profile.yaml";
|
|
7
7
|
var LOCKFILE_PATH = "ai-profile.lock";
|
|
8
8
|
var SKILL_ROOTS = [".agents/skills", ".claude/skills"];
|
|
@@ -44,6 +44,14 @@ async function runDoctor(request = {}) {
|
|
|
44
44
|
issues
|
|
45
45
|
});
|
|
46
46
|
await checkPermissionPosture(rootDir, profileResult.profile, issues);
|
|
47
|
+
await checkSubagentArtifacts({
|
|
48
|
+
rootDir,
|
|
49
|
+
profile: profileResult.profile,
|
|
50
|
+
effective: deriveEffectivePermissions(profileResult.profile),
|
|
51
|
+
generatedFiles: compileResult.files,
|
|
52
|
+
lockfile,
|
|
53
|
+
issues
|
|
54
|
+
});
|
|
47
55
|
return toResult(issues);
|
|
48
56
|
}
|
|
49
57
|
async function checkGeneratedArtifactsExist(rootDir, files, issues) {
|
|
@@ -379,6 +387,130 @@ function reportRuntimeUnverifiable(profile, issues) {
|
|
|
379
387
|
if (profile.clients.codex.enabled) issues.push(permissionIssue("LINT-PERM-006", "info", "codex-runtime", "verified runtime approval and sandbox flags", "not verifiable", "Codex runtime flags or user configuration may override project config.", "Verify the active Codex approval policy and sandbox mode before trusting runtime posture."));
|
|
380
388
|
if (profile.clients.claude.enabled) issues.push(permissionIssue("LINT-PERM-006", "info", "claude-runtime", "verified CLI permission mode and merged user settings", "not verifiable", "Claude CLI flags and user settings may override project settings.", "Verify the active Claude permission mode and settings scopes before trusting runtime posture."));
|
|
381
389
|
}
|
|
390
|
+
var SUBAGENT_ROOTS = [
|
|
391
|
+
".claude/agents",
|
|
392
|
+
".codex/agents",
|
|
393
|
+
".tabnine/agent/agents"
|
|
394
|
+
];
|
|
395
|
+
var GENERATED_HEADER_MARKER = "Generated by Agent Profile Compiler";
|
|
396
|
+
var TABNINE_UNSAFE_TOOL_NAMES = new Set([
|
|
397
|
+
"run_shell_command",
|
|
398
|
+
"write_file",
|
|
399
|
+
"browser_agent",
|
|
400
|
+
"browser",
|
|
401
|
+
"open_url",
|
|
402
|
+
"fetch_url",
|
|
403
|
+
"http_request",
|
|
404
|
+
"network"
|
|
405
|
+
]);
|
|
406
|
+
var CLAUDE_WRITE_TOOLS = new Set([
|
|
407
|
+
"Edit",
|
|
408
|
+
"Write",
|
|
409
|
+
"NotebookEdit"
|
|
410
|
+
]);
|
|
411
|
+
async function checkSubagentArtifacts(input) {
|
|
412
|
+
const { rootDir, profile, effective, generatedFiles, lockfile, issues } = input;
|
|
413
|
+
const enabled = getEnabledSubagents(profile);
|
|
414
|
+
const generatedSubagentPaths = new Set(generatedFiles.filter((file) => file.target === "claude-subagents" || file.target === "codex-subagents" || file.target === "tabnine-subagents").map((file) => file.path));
|
|
415
|
+
const lockfileSubagentPaths = new Set((lockfile?.outputs ?? []).filter((output) => output.target === "claude-subagents" || output.target === "codex-subagents" || output.target === "tabnine-subagents").map((output) => output.path));
|
|
416
|
+
for (const agent of enabled) if (isSubagentBuiltinNameCollision(agent.name)) issues.push(issue("LINT-SUBAGENT-005", "warning", `/capabilities/delegation/subagents/agents/${agent.name}`, "name distinct from built-ins", "collides with built-in after normalization", `Subagent ${agent.name} collides with a documented built-in after hyphen/underscore normalization.`, "Rename the subagent to avoid shadowing client built-ins."));
|
|
417
|
+
for (const root of SUBAGENT_ROOTS) {
|
|
418
|
+
const files = await collectSubagentFilesUnder(rootDir, root);
|
|
419
|
+
for (const relativePath of files) {
|
|
420
|
+
const file = await readKnownFile(rootDir, relativePath);
|
|
421
|
+
if (!file.ok) continue;
|
|
422
|
+
const text = decodeUtf8(file.bytes);
|
|
423
|
+
const isGenerated = text.includes(GENERATED_HEADER_MARKER);
|
|
424
|
+
if (containsSecretLikeLiteral(text)) issues.push(issue("LINT-SUBAGENT-002", "error", relativePath, "no literal secret-like values", "secret-like value present", `${relativePath} contains a literal secret-like value.`, "Remove literal secrets from the subagent file; use environment variable references only."));
|
|
425
|
+
if (root === ".codex/agents") checkCodexSubagentFile(relativePath, text, effective, issues);
|
|
426
|
+
else if (root === ".claude/agents") checkClaudeSubagentFile(relativePath, text, effective, issues);
|
|
427
|
+
else if (root === ".tabnine/agent/agents") checkTabnineSubagentFile(relativePath, text, effective, issues);
|
|
428
|
+
if (isGenerated && !generatedSubagentPaths.has(relativePath) && !lockfileSubagentPaths.has(relativePath)) issues.push(issue("LINT-SUBAGENT-006", "warning", relativePath, "claimed by current compile output or lockfile", "orphan generated subagent", `${relativePath} carries the generated-file header but is not produced by the current profile and not recorded in ai-profile.lock.`, "Remove the orphan generated subagent file or restore the matching profile intent."));
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
if (profile.clients.tabnine.enabled && enabled.some((agent) => agent.toolScope === "read-only")) issues.push(issue("LINT-SUBAGENT-008", "info", ".tabnine/agent/settings.json", "experimental.enableAgents verifiable", "not verifiable", "Tabnine experimental.enableAgents cannot be verified because Agent Profile Compiler does not write .tabnine/agent/settings.json.", "Manually enable experimental.enableAgents in .tabnine/agent/settings.json to use the generated Tabnine subagent files."));
|
|
432
|
+
}
|
|
433
|
+
function checkCodexSubagentFile(relativePath, text, effective, issues) {
|
|
434
|
+
const sandboxMode = /^\s*sandbox_mode\s*=\s*"([^"]+)"/mu.exec(text)?.[1];
|
|
435
|
+
if (sandboxMode === "danger-full-access") issues.push(issue("LINT-SUBAGENT-003", "error", relativePath, "sandboxed Codex subagent", "danger-full-access", `${relativePath} declares danger-full-access, which is never allowed.`, "Remove danger-full-access from the Codex subagent and use read-only or workspace-write instead."));
|
|
436
|
+
if (sandboxMode === "workspace-write" && effective.filesystem.write === "deny") issues.push(issue("LINT-SUBAGENT-001", "error", relativePath, "narrower than effectivePermissions.filesystem.write=deny", "workspace-write", `${relativePath} grants workspace-write while effectivePermissions deny filesystem writes.`, "Set sandbox_mode = \"read-only\" or tighten the subagent intent."));
|
|
437
|
+
if (/^\s*approval_policy\s*=\s*"never"/mu.test(text)) issues.push(issue("LINT-SUBAGENT-001", "error", relativePath, "interactive approval policy", "never", `${relativePath} declares approval_policy = "never", which is never allowed for generated Codex subagents.`, "Remove approval_policy = \"never\" from the Codex subagent."));
|
|
438
|
+
}
|
|
439
|
+
function checkClaudeSubagentFile(relativePath, text, effective, issues) {
|
|
440
|
+
const frontmatter = parseMarkdownFrontmatter(text);
|
|
441
|
+
if (frontmatter.permissionMode === "bypassPermissions") issues.push(issue("LINT-SUBAGENT-004", "error", relativePath, "non-bypass Claude permission mode", "bypassPermissions", `${relativePath} declares permissionMode: bypassPermissions, which is never allowed.`, "Remove bypassPermissions from the Claude subagent and use plan or default mode."));
|
|
442
|
+
const tools = parseClaudeToolList(frontmatter.tools);
|
|
443
|
+
if (tools.includes("Bash") && effective.shell.run !== "allow") issues.push(issue("LINT-SUBAGENT-001", "error", relativePath, "tools narrower than effectivePermissions.shell.run", "Bash tool granted", `${relativePath} grants the Bash tool while effectivePermissions.shell.run is ${effective.shell.run}.`, "Remove Bash from the Claude subagent tools list or tighten effectivePermissions."));
|
|
444
|
+
if (tools.some((tool) => CLAUDE_WRITE_TOOLS.has(tool)) && effective.filesystem.write !== "allow") issues.push(issue("LINT-SUBAGENT-001", "error", relativePath, "tools narrower than effectivePermissions.filesystem.write", "Edit/Write tool granted", `${relativePath} grants write tools while effectivePermissions.filesystem.write is ${effective.filesystem.write}.`, "Remove Edit/Write from the Claude subagent tools list or tighten effectivePermissions."));
|
|
445
|
+
if (tools.includes("WebFetch") && effective.network.external !== "allow") issues.push(issue("LINT-SUBAGENT-001", "error", relativePath, "tools narrower than effectivePermissions.network.external", "WebFetch tool granted", `${relativePath} grants the WebFetch tool while effectivePermissions.network.external is ${effective.network.external}.`, "Remove WebFetch from the Claude subagent tools list or tighten effectivePermissions."));
|
|
446
|
+
}
|
|
447
|
+
function checkTabnineSubagentFile(relativePath, text, effective, issues) {
|
|
448
|
+
const tools = parseTabnineToolList(text, parseMarkdownFrontmatter(text).tools);
|
|
449
|
+
const unsafe = tools.filter((tool) => TABNINE_UNSAFE_TOOL_NAMES.has(tool));
|
|
450
|
+
if (unsafe.length > 0) issues.push(issue("LINT-SUBAGENT-007", "warning", relativePath, "read-only Tabnine subagent tools", `declares ${unsafe.join(", ")}`, `${relativePath} declares write/shell/browser/network-capable tool ${unsafe[0]} while Tabnine subagents are experimental/no-confirmation.`, "Restrict generated Tabnine subagents to read-only tools until safer Tabnine semantics are documented."));
|
|
451
|
+
if (tools.includes("write_file") && effective.filesystem.write !== "allow") issues.push(issue("LINT-SUBAGENT-001", "error", relativePath, "tools narrower than effectivePermissions.filesystem.write", "write_file tool granted", `${relativePath} grants write_file while effectivePermissions.filesystem.write is ${effective.filesystem.write}.`, "Remove write_file from the Tabnine subagent tools list or tighten effectivePermissions."));
|
|
452
|
+
if (tools.includes("run_shell_command") && effective.shell.run !== "allow") issues.push(issue("LINT-SUBAGENT-001", "error", relativePath, "tools narrower than effectivePermissions.shell.run", "run_shell_command tool granted", `${relativePath} grants run_shell_command while effectivePermissions.shell.run is ${effective.shell.run}.`, "Remove run_shell_command from the Tabnine subagent tools list or tighten effectivePermissions."));
|
|
453
|
+
}
|
|
454
|
+
function parseMarkdownFrontmatter(text) {
|
|
455
|
+
if (!text.startsWith("---\n")) return {};
|
|
456
|
+
const end = text.indexOf("\n---", 4);
|
|
457
|
+
if (end === -1) return {};
|
|
458
|
+
const block = text.slice(4, end);
|
|
459
|
+
const result = {};
|
|
460
|
+
for (const line of block.split("\n")) {
|
|
461
|
+
const match = /^([A-Za-z][A-Za-z0-9_]*)\s*:\s*(.*)$/u.exec(line);
|
|
462
|
+
if (!match) continue;
|
|
463
|
+
const [, key, rawValue] = match;
|
|
464
|
+
if (key === void 0) continue;
|
|
465
|
+
result[key] = (rawValue ?? "").trim();
|
|
466
|
+
}
|
|
467
|
+
return result;
|
|
468
|
+
}
|
|
469
|
+
function parseClaudeToolList(value) {
|
|
470
|
+
if (!value) return [];
|
|
471
|
+
return value.split(",").map((item) => item.trim()).filter((item) => item.length > 0);
|
|
472
|
+
}
|
|
473
|
+
function parseTabnineToolList(text, inlineValue) {
|
|
474
|
+
if (inlineValue && inlineValue.length > 0 && inlineValue !== "") {
|
|
475
|
+
if (inlineValue.startsWith("[") && inlineValue.endsWith("]")) return inlineValue.slice(1, -1).split(",").map((item) => item.trim().replace(/^["']|["']$/gu, "")).filter((item) => item.length > 0);
|
|
476
|
+
}
|
|
477
|
+
if (!text.startsWith("---\n")) return [];
|
|
478
|
+
const end = text.indexOf("\n---", 4);
|
|
479
|
+
if (end === -1) return [];
|
|
480
|
+
const block = text.slice(4, end).split("\n");
|
|
481
|
+
const tools = [];
|
|
482
|
+
let inToolsBlock = false;
|
|
483
|
+
for (const line of block) {
|
|
484
|
+
if (/^tools\s*:\s*$/u.test(line)) {
|
|
485
|
+
inToolsBlock = true;
|
|
486
|
+
continue;
|
|
487
|
+
}
|
|
488
|
+
if (inToolsBlock) {
|
|
489
|
+
const itemMatch = /^\s+-\s+(.+?)\s*$/u.exec(line);
|
|
490
|
+
if (itemMatch && itemMatch[1] !== void 0) {
|
|
491
|
+
tools.push(itemMatch[1].replace(/^["']|["']$/gu, ""));
|
|
492
|
+
continue;
|
|
493
|
+
}
|
|
494
|
+
if (/^\S/u.test(line)) inToolsBlock = false;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
return tools;
|
|
498
|
+
}
|
|
499
|
+
async function collectSubagentFilesUnder(rootDir, relativeRoot) {
|
|
500
|
+
let entries;
|
|
501
|
+
try {
|
|
502
|
+
entries = await readdir(path.join(rootDir, relativeRoot), { withFileTypes: true });
|
|
503
|
+
} catch (error) {
|
|
504
|
+
if (isNodeError(error) && error.code === "ENOENT") return [];
|
|
505
|
+
throw error;
|
|
506
|
+
}
|
|
507
|
+
const results = [];
|
|
508
|
+
for (const entry of entries) {
|
|
509
|
+
if (!entry.isFile()) continue;
|
|
510
|
+
results.push(`${relativeRoot}/${entry.name}`);
|
|
511
|
+
}
|
|
512
|
+
return results.sort();
|
|
513
|
+
}
|
|
382
514
|
async function collectSkillFiles(rootDir) {
|
|
383
515
|
const files = [];
|
|
384
516
|
for (const skillRoot of SKILL_ROOTS) await collectSkillFilesUnder(rootDir, skillRoot, files);
|
|
@@ -529,4 +661,4 @@ function isNodeError(error) {
|
|
|
529
661
|
}
|
|
530
662
|
|
|
531
663
|
export { runDoctor as r };
|
|
532
|
-
//# sourceMappingURL=
|
|
664
|
+
//# sourceMappingURL=src3-vKD2iyNK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src3-vKD2iyNK.js","sources":["../../../.svelte-kit/adapter-node/chunks/src3.js"],"sourcesContent":["import { a as deriveEffectivePermissions, d as isSubagentBuiltinNameCollision, h as parseProfileYaml, p as normalizeSafety, s as getEnabledSubagents, t as containsSecretLikeLiteral } from \"./src.js\";\nimport { c as compileProfile, d as safeOutputPath, f as sha256Hex, l as createLockfileFile, u as validateLockfileText } from \"./projectContext.js\";\nimport { readFile, readdir } from \"node:fs/promises\";\nimport path from \"node:path\";\n//#region ../../packages/doctor/src/doctor.ts\nvar PROFILE_PATH = \"ai-profile.yaml\";\nvar LOCKFILE_PATH = \"ai-profile.lock\";\nvar SKILL_ROOTS = [\".agents/skills\", \".claude/skills\"];\nvar SEVERITY_ORDER = {\n\terror: 0,\n\twarning: 1,\n\tinfo: 2\n};\nasync function runDoctor(request = {}) {\n\tconst rootDir = path.resolve(request.rootDir ?? \".\");\n\tconst issues = [];\n\tconst profileBytes = await readKnownFile(rootDir, PROFILE_PATH);\n\tif (!profileBytes.ok) {\n\t\tissues.push(issue(\"LINT-STRUCT-001\", \"error\", PROFILE_PATH, \"readable profile file\", \"missing\", \"ai-profile.yaml was not found.\", \"Create ai-profile.yaml at the repository root before running doctor.\"));\n\t\treturn toResult(issues);\n\t}\n\tconst profileResult = parseProfileYaml(decodeUtf8(profileBytes.bytes), { sourcePath: PROFILE_PATH });\n\tif (!profileResult.ok) {\n\t\tfor (const profileIssue of profileResult.issues) issues.push(issue(\"LINT-STRUCT-002\", \"error\", profileIssue.path, profileIssue.expected, profileIssue.actual, profileIssue.message, \"Fix ai-profile.yaml before running compiler or doctor checks.\"));\n\t\treturn toResult(issues);\n\t}\n\tconst compileResult = compileProfile({ profile: profileResult.profile });\n\tif (!compileResult.ok) {\n\t\tfor (const compileIssue of compileResult.issues) issues.push(issue(\"LINT-STRUCT-002\", \"error\", compileIssue.path, compileIssue.expected, compileIssue.actual, compileIssue.message, \"Fix ai-profile.yaml client and target settings before running doctor.\"));\n\t\treturn toResult(issues);\n\t}\n\tawait checkGeneratedArtifactsExist(rootDir, compileResult.files, issues);\n\tawait checkGeneratedArtifactSecurity(rootDir, compileResult.files, issues);\n\tawait checkSkillFiles(rootDir, issues);\n\tawait checkSemanticWarnings(rootDir, compileResult.files, issues);\n\tawait checkGitignoreSecretHygiene(rootDir, issues);\n\tconst lockfile = await readAndValidateLockfile(rootDir, issues);\n\tif (lockfile) await checkLockfileDrift({\n\t\trootDir,\n\t\tprofileBytes: profileBytes.bytes,\n\t\ttemplates: compileResult.templates,\n\t\tfiles: compileResult.files,\n\t\tlockfile,\n\t\tissues\n\t});\n\tawait checkPermissionPosture(rootDir, profileResult.profile, issues);\n\tawait checkSubagentArtifacts({\n\t\trootDir,\n\t\tprofile: profileResult.profile,\n\t\teffective: deriveEffectivePermissions(profileResult.profile),\n\t\tgeneratedFiles: compileResult.files,\n\t\tlockfile,\n\t\tissues\n\t});\n\treturn toResult(issues);\n}\nasync function checkGeneratedArtifactsExist(rootDir, files, issues) {\n\tfor (const file of files) if (!(await readKnownFile(rootDir, file.path)).ok) issues.push(issue(\"LINT-STRUCT-003\", \"error\", file.path, `generated artifact for ${file.target}`, \"missing\", `${file.path} is missing for enabled target ${file.target}.`, \"Run the compiler after reviewing enabled targets.\"));\n}\nasync function checkGeneratedArtifactSecurity(rootDir, files, issues) {\n\tfor (const file of files) {\n\t\tconst current = await readKnownFile(rootDir, file.path);\n\t\tif (!current.ok) continue;\n\t\tconst text = decodeUtf8(current.bytes);\n\t\tif (containsSecretLikeLiteral(text)) issues.push(issue(\"LINT-SEC-001\", \"error\", file.path, \"no literal secret-like values\", \"secret-like value present\", `${file.path} contains a secret-like literal.`, \"Remove literal secrets and use environment variable names instead.\"));\n\t\tif (containsLiteralEnvValue(file.path, text)) issues.push(issue(\"LINT-SEC-003\", \"error\", file.path, \"environment variable references only\", \"literal env value present\", `${file.path} contains a literal environment value.`, \"Use environment variable names such as $TOKEN instead of literal values.\"));\n\t}\n}\nasync function checkGitignoreSecretHygiene(rootDir, issues) {\n\tconst gitignore = await readKnownFile(rootDir, \".gitignore\");\n\tif (!gitignore.ok) {\n\t\tissues.push(issue(\"LINT-SEC-002\", \"warning\", \".gitignore\", \".env and .env.* ignored\", \"missing .gitignore\", \".gitignore is missing, so doctor cannot verify .env ignore hygiene.\", \"Add .env and .env.* to .gitignore before using generated agent config.\"));\n\t\treturn;\n\t}\n\tconst lines = decodeUtf8(gitignore.bytes).split(/\\r?\\n/u).map((line) => line.trim()).filter((line) => line !== \"\" && !line.startsWith(\"#\"));\n\tconst hasEnv = lines.some((line) => line === \".env\" || line === \"/.env\");\n\tconst hasEnvStar = lines.some((line) => line === \".env.*\" || line === \"/.env.*\" || line === \".env*\" || line === \"/.env*\");\n\tif (!hasEnv || !hasEnvStar) issues.push(issue(\"LINT-SEC-002\", \"warning\", \".gitignore\", \".env and .env.* ignored\", \"incomplete ignore rules\", \".gitignore does not clearly ignore .env and .env.* files.\", \"Add .env and .env.* ignore rules without printing or reading secret files.\"));\n}\nasync function checkSkillFiles(rootDir, issues) {\n\tconst skillFiles = await collectSkillFiles(rootDir);\n\tfor (const skillPath of skillFiles) {\n\t\tconst file = await readKnownFile(rootDir, skillPath);\n\t\tif (!file.ok) continue;\n\t\tconst text = decodeUtf8(file.bytes);\n\t\tconst lineCount = countLines(text);\n\t\tif (lineCount > 500) issues.push(issue(\"LINT-SKILL-001\", \"error\", skillPath, \"500 lines or fewer\", `${lineCount} lines`, `${skillPath} exceeds the hard skill size limit.`, \"Split large skill content into references or narrower skills.\"));\n\t\telse if (lineCount > 300) issues.push(issue(\"LINT-SKILL-001\", \"warning\", skillPath, \"300 lines or fewer recommended\", `${lineCount} lines`, `${skillPath} exceeds the recommended skill size.`, \"Consider moving detailed context into references or narrowing the skill.\"));\n\t\tif (!hasSkillTrigger(text)) issues.push(issue(\"LINT-SKILL-002\", \"warning\", skillPath, \"clear trigger or use-case\", \"missing\", `${skillPath} does not describe when the skill should be used.`, \"Add concise \\\"Use when\\\", \\\"Use before\\\", or \\\"Triggers\\\" language to the skill.\"));\n\t\tif (duplicatesGenericProjectFacts(text)) issues.push(issue(\"LINT-SKILL-003\", \"warning\", skillPath, \"task-specific skill content\", \"generic project facts duplicated\", `${skillPath} appears to duplicate generic project facts.`, \"Keep stack and project facts in generated project instructions rather than every skill.\"));\n\t}\n}\nasync function checkSemanticWarnings(rootDir, files, issues) {\n\tfor (const file of files) {\n\t\tconst current = await readKnownFile(rootDir, file.path);\n\t\tif (!current.ok) continue;\n\t\tconst text = decodeUtf8(current.bytes);\n\t\tif (countOccurrences(text, \"Do not upload source code\") > 1) issues.push(issue(\"LINT-SEM-001\", \"warning\", file.path, \"minimal repeated safety boilerplate\", \"repeated safety statement\", `${file.path} repeats generated safety guidance.`, \"Remove redundant repeated instructions or regenerate from ai-profile.yaml.\"));\n\t\tif (containsContradictionMarker(text)) issues.push(issue(\"LINT-SEM-002\", \"warning\", file.path, \"no direct contradiction markers\", \"contradiction marker present\", `${file.path} contains an obvious contradictory instruction marker.`, \"Review manual edits and regenerate generated instructions if needed.\"));\n\t}\n}\nasync function readAndValidateLockfile(rootDir, issues) {\n\tconst lockfileBytes = await readKnownFile(rootDir, LOCKFILE_PATH);\n\tif (!lockfileBytes.ok) {\n\t\tissues.push(issue(\"LINT-LOCK-001\", \"error\", LOCKFILE_PATH, \"readable lockfile\", \"missing\", \"ai-profile.lock was not found.\", \"Run the compiler after reviewing changes so ai-profile.lock can be generated.\"));\n\t\treturn;\n\t}\n\tconst validation = validateLockfileText(decodeUtf8(lockfileBytes.bytes));\n\tif (!validation.ok) {\n\t\tfor (const lockIssue of validation.issues) issues.push(issue(\"LINT-LOCK-002\", \"error\", lockIssue.path, lockIssue.expected, lockIssue.actual, lockIssue.message, \"Regenerate ai-profile.lock after reviewing the lockfile issue.\"));\n\t\treturn;\n\t}\n\treturn validation.lockfile;\n}\nasync function checkLockfileDrift(input) {\n\tconst expectedLockfileText = createLockfileFile({\n\t\tprofileBytes: input.profileBytes,\n\t\ttemplates: input.templates,\n\t\tfiles: input.files\n\t});\n\tconst expectedLockfile = JSON.parse(Buffer.from(expectedLockfileText.bytes).toString(\"utf8\"));\n\tconst currentProfileHash = sha256Hex(input.profileBytes);\n\tif (input.lockfile.profile.sha256 !== currentProfileHash) input.issues.push(issue(\"LINT-LOCK-003\", \"error\", \"/profile/sha256\", currentProfileHash, input.lockfile.profile.sha256, \"ai-profile.lock profile hash does not match ai-profile.yaml.\", \"Regenerate ai-profile.lock after reviewing profile changes.\"));\n\tcompareTemplates(input.lockfile.templates, expectedLockfile.templates, input.issues);\n\tcompareOutputs(input.lockfile.outputs, expectedLockfile.outputs, input.issues);\n\tconst lockOutputsByKey = new Map(input.lockfile.outputs.map((output) => [outputKey(output), output]));\n\tfor (const output of expectedLockfile.outputs) {\n\t\tconst expectedHash = lockOutputsByKey.get(outputKey(output))?.sha256 ?? output.sha256;\n\t\tconst current = await readKnownFile(input.rootDir, output.path);\n\t\tif (!current.ok) {\n\t\t\tinput.issues.push(issue(\"LINT-LOCK-006\", \"error\", output.path, \"generated file present\", \"missing\", `${output.path} is listed in ai-profile.lock but is missing.`, \"Run the compiler after reviewing generated file changes.\"));\n\t\t\tcontinue;\n\t\t}\n\t\tconst currentHash = sha256Hex(current.bytes);\n\t\tif (currentHash !== expectedHash) input.issues.push(issue(\"LINT-LOCK-007\", \"error\", output.path, expectedHash, currentHash, `${output.path} bytes differ from ai-profile.lock.`, \"Regenerate the file or lockfile after reviewing the generated diff.\"));\n\t}\n}\nfunction compareTemplates(actual, expected, issues) {\n\tconst actualMap = new Map(actual.map((template) => [templateKey(template), template]));\n\tconst expectedMap = new Map(expected.map((template) => [templateKey(template), template]));\n\tfor (const [key, expectedTemplate] of expectedMap) {\n\t\tconst actualTemplate = actualMap.get(key);\n\t\tif (!actualTemplate) {\n\t\t\tissues.push(issue(\"LINT-LOCK-004\", \"error\", `/templates/${expectedTemplate.id}`, \"template recorded in lockfile\", \"missing\", `${expectedTemplate.id} is missing from ai-profile.lock.`, \"Regenerate ai-profile.lock after reviewing template changes.\"));\n\t\t\tcontinue;\n\t\t}\n\t\tif (actualTemplate.version !== expectedTemplate.version || actualTemplate.sha256 !== expectedTemplate.sha256) issues.push(issue(\"LINT-LOCK-004\", \"error\", `/templates/${expectedTemplate.id}`, `${expectedTemplate.version}/${expectedTemplate.sha256}`, `${actualTemplate.version}/${actualTemplate.sha256}`, `${expectedTemplate.id} template metadata differs from the current compiler.`, \"Regenerate ai-profile.lock after reviewing template changes.\"));\n\t}\n\tfor (const [key, actualTemplate] of actualMap) if (!expectedMap.has(key)) issues.push(issue(\"LINT-LOCK-004\", \"error\", `/templates/${actualTemplate.id}`, \"current compiler template\", \"extra lockfile template\", `${actualTemplate.id} is not emitted by the current compiler request.`, \"Regenerate ai-profile.lock after reviewing target changes.\"));\n}\nfunction compareOutputs(actual, expected, issues) {\n\tconst actualMap = new Map(actual.map((output) => [outputKey(output), output]));\n\tconst expectedMap = new Map(expected.map((output) => [outputKey(output), output]));\n\tfor (const [key, expectedOutput] of expectedMap) {\n\t\tconst actualOutput = actualMap.get(key);\n\t\tif (!actualOutput) {\n\t\t\tissues.push(issue(\"LINT-LOCK-005\", \"error\", expectedOutput.path, \"output recorded in lockfile\", \"missing\", `${expectedOutput.path} is missing from ai-profile.lock outputs.`, \"Regenerate ai-profile.lock after reviewing generated output changes.\"));\n\t\t\tcontinue;\n\t\t}\n\t\tif (actualOutput.templateId !== expectedOutput.templateId || actualOutput.sha256 !== expectedOutput.sha256) issues.push(issue(\"LINT-LOCK-005\", \"error\", expectedOutput.path, `${expectedOutput.templateId}/${expectedOutput.sha256}`, `${actualOutput.templateId}/${actualOutput.sha256}`, `${expectedOutput.path} lockfile output metadata differs from current compiler output.`, \"Regenerate generated outputs and ai-profile.lock after reviewing changes.\"));\n\t}\n\tfor (const [key, actualOutput] of actualMap) if (!expectedMap.has(key)) issues.push(issue(\"LINT-LOCK-005\", \"error\", actualOutput.path, \"current compiler output\", \"extra lockfile output\", `${actualOutput.path} is not emitted by the current compiler request.`, \"Regenerate ai-profile.lock after reviewing target changes.\"));\n}\nasync function checkPermissionPosture(rootDir, profile, issues) {\n\tconst safety = normalizeSafety(profile);\n\tconst effective = deriveEffectivePermissions(profile);\n\tconst preset = deriveEffectivePermissions({ safety: profile.safety });\n\tconst autonomousSandbox = safety.mode === \"autonomous\" && safety.requiresSandbox;\n\tif (safety.mode === \"guarded\" && effective.shell.run === \"allow\") issues.push(permissionIssue(\"LINT-PERM-001\", \"error\", \"/permissions/shell/run\", \"ask or deny\", \"allow\", \"Guarded mode cannot default shell execution to allow.\", \"Use shell.run: ask or shell.run: deny for guarded profiles.\"));\n\tif (safety.mode === \"guarded\" && effective.dependencies.install === \"allow\") issues.push(permissionIssue(\"LINT-PERM-002\", \"error\", \"/permissions/dependencies/install\", \"ask or deny\", \"allow\", \"Guarded mode cannot default dependency installation to allow.\", \"Use dependencies.install: ask or dependencies.install: deny for guarded profiles.\"));\n\tif (effective.secrets.access !== \"deny\" || effective.production.access !== \"deny\") issues.push(permissionIssue(\"LINT-PERM-003\", \"error\", \"/permissions\", \"secrets and production access deny\", \"looser access\", \"Secrets and production access must remain denied.\", \"Remove any profile or project setting that grants secrets or production access.\"));\n\tif (safety.mode === \"autonomous\" && !safety.requiresSandbox) issues.push(permissionIssue(\"LINT-PERM-004\", \"error\", \"/safety/requiresSandbox\", \"true\", \"false\", \"Autonomous mode requires explicit sandbox intent.\", \"Set safety.requiresSandbox: true only for isolated environments.\"));\n\tif (hasUnsafeAutoApproval(effective, safety.mode) && !autonomousSandbox) issues.push(permissionIssue(\"LINT-PERM-004\", \"error\", \"/permissions\", \"ask/deny or autonomous sandbox intent\", \"dangerous allow\", \"Dangerous tools cannot default to auto-approval without autonomous sandbox intent.\", \"Use ask/deny permissions or require sandboxed autonomous mode.\"));\n\tfor (const looser of getLooserOverrides(preset, effective)) issues.push(permissionIssue(\"LINT-PERM-005\", \"warning\", looser.path, looser.expected, looser.actual, `${looser.path} is looser than the selected safety preset.`, \"Review the explicit override or wait for an approved policy that allows it.\"));\n\tconst sandboxEvidence = await checkProjectPermissionConfig(rootDir, profile, effective, autonomousSandbox, issues);\n\tif (autonomousSandbox && !sandboxEvidence) issues.push(permissionIssue(\"LINT-PERM-004\", \"warning\", \"/safety/requiresSandbox\", \"verifiable generated sandbox config\", \"not verifiable\", \"Autonomous mode declares sandbox intent, but doctor could not verify generated sandbox config.\", \"Ensure generated Codex or Claude project config enforces sandboxing before using autonomous mode.\"));\n\treportRuntimeUnverifiable(profile, issues);\n}\nasync function checkProjectPermissionConfig(rootDir, profile, effective, autonomousSandbox, issues) {\n\tconst codexSandbox = profile.clients.codex.enabled ? await checkCodexConfig(rootDir, effective, autonomousSandbox, issues) : false;\n\tconst claudeSandbox = profile.clients.claude.enabled ? await checkClaudeConfig(rootDir, effective, autonomousSandbox, issues) : false;\n\treturn codexSandbox || claudeSandbox;\n}\nasync function checkCodexConfig(rootDir, effective, autonomousSandbox, issues) {\n\tconst file = await readKnownFile(rootDir, \".codex/config.toml\");\n\tif (!file.ok) return false;\n\tconst config = parseSimpleToml(decodeUtf8(file.bytes));\n\tconst sandboxMode = config.values.get(\"sandbox_mode\");\n\tconst approvalPolicy = config.values.get(\"approval_policy\");\n\tconst networkAccess = config.values.get(\"sandbox_workspace_write.network_access\");\n\tconst allowLoginShell = config.values.get(\"allow_login_shell\");\n\tconst hasSandbox = sandboxMode === \"workspace-write\" || sandboxMode === \"read-only\";\n\tif (config.unsupportedLines.length > 0) issues.push(permissionIssue(\"LINT-PERM-005\", \"warning\", \".codex/config.toml\", \"supported scalar TOML syntax\", \"unsupported TOML syntax\", \".codex/config.toml contains syntax doctor cannot fully evaluate.\", \"Keep safety-relevant Codex settings on scalar key/value lines or extend doctor parser coverage before relying on this result.\"));\n\tif (sandboxMode === \"danger-full-access\") issues.push(permissionIssue(\"LINT-PERM-004\", \"error\", \".codex/config.toml\", \"sandboxed mode\", \"danger-full-access\", \"Codex danger-full-access is never allowed in generated or project config.\", \"Use workspace-write or read-only sandbox mode.\"));\n\tif (approvalPolicy === \"never\" && !autonomousSandbox) issues.push(permissionIssue(\"LINT-PERM-004\", \"error\", \".codex/config.toml\", \"interactive approval policy\", \"never\", \"Codex approval_policy = never is dangerous without autonomous sandbox intent.\", \"Use on-request for guarded or balanced project config.\"));\n\tif (approvalPolicy === \"on-failure\") issues.push(permissionIssue(\"LINT-PERM-005\", \"warning\", \".codex/config.toml\", \"current approval policy\", \"on-failure\", \"Codex approval_policy = on-failure is deprecated.\", \"Use on-request for interactive runs.\"));\n\tif (allowLoginShell === true && effective.shell.run !== \"allow\") issues.push(configLooserIssue(\".codex/config.toml\", \"non-login shell execution\", \"allow_login_shell = true\"));\n\tif (networkAccess === true && effective.network.external !== \"allow\") issues.push(configLooserIssue(\".codex/config.toml\", \"network ask/deny\", \"network_access = true\"));\n\tif (sandboxMode === \"workspace-write\" && effective.filesystem.write === \"deny\") issues.push(configLooserIssue(\".codex/config.toml\", \"read-only filesystem posture\", \"workspace-write\"));\n\treturn hasSandbox;\n}\nasync function checkClaudeConfig(rootDir, effective, autonomousSandbox, issues) {\n\tconst merged = mergeClaudeSettings(await readJsonObject(rootDir, \".claude/settings.json\", issues), await readJsonObject(rootDir, \".claude/settings.local.json\", issues));\n\tif (!merged) return false;\n\tconst permissions = getRecord(merged.permissions);\n\tconst sandbox = getRecord(merged.sandbox);\n\tconst defaultMode = permissions ? permissions.defaultMode : void 0;\n\tconst disableBypass = permissions ? permissions.disableBypassPermissionsMode : void 0;\n\tconst disableAuto = permissions ? permissions.disableAutoMode : void 0;\n\tif (defaultMode === \"bypassPermissions\") issues.push(permissionIssue(\"LINT-PERM-004\", \"error\", \".claude/settings.json\", \"non-bypass permission mode\", \"bypassPermissions\", \"Claude bypassPermissions cannot be a generated or project default.\", \"Use default or plan mode and keep bypass mode disabled.\"));\n\tif (defaultMode === \"auto\" && !autonomousSandbox) issues.push(permissionIssue(\"LINT-PERM-004\", \"error\", \".claude/settings.json\", \"manual approval mode\", \"auto\", \"Claude auto mode is too loose without autonomous sandbox intent.\", \"Use default mode for guarded or balanced profiles.\"));\n\tif (!autonomousSandbox && disableBypass !== \"disable\") issues.push(permissionIssue(\"LINT-PERM-004\", \"error\", \".claude/settings.json\", \"disableBypassPermissionsMode = \\\"disable\\\"\", describeSetting(disableBypass), \"Claude bypass mode guard is missing or not disabled.\", \"Set permissions.disableBypassPermissionsMode to \\\"disable\\\".\"));\n\tif (!autonomousSandbox && disableAuto !== \"disable\") issues.push(permissionIssue(\"LINT-PERM-004\", \"error\", \".claude/settings.json\", \"disableAutoMode = \\\"disable\\\"\", describeSetting(disableAuto), \"Claude auto mode guard is missing or not disabled.\", \"Set permissions.disableAutoMode to \\\"disable\\\".\"));\n\tconst allowRules = getStringArray(permissions?.allow);\n\tconst askRules = getStringArray(permissions?.ask);\n\tconst effectiveRuleSurface = evaluateClaudeRules(getStringArray(permissions?.deny), askRules, allowRules);\n\tif (effectiveRuleSurface.bash === \"allow\" && effective.shell.run !== \"allow\") issues.push(configLooserIssue(\".claude/settings.json\", \"Bash ask/deny\", \"Bash allow rule\"));\n\tif (effectiveRuleSurface.edit === \"allow\" && effective.filesystem.write !== \"allow\") issues.push(configLooserIssue(\".claude/settings.json\", \"file edits ask/deny\", \"Edit/Write allow rule\"));\n\tif (effectiveRuleSurface.webFetch === \"allow\" && effective.network.external !== \"allow\") issues.push(configLooserIssue(\".claude/settings.json\", \"WebFetch ask/deny\", \"WebFetch allow rule\"));\n\tif (sandbox) {\n\t\tif (sandbox.autoAllowBashIfSandboxed === true && effective.shell.run !== \"allow\") issues.push(configLooserIssue(\".claude/settings.json\", \"Bash ask/deny\", \"autoAllowBashIfSandboxed = true\"));\n\t\tif (sandbox.enableWeakerNestedSandbox === true || sandbox.enableWeakerNetworkIsolation === true) issues.push(configLooserIssue(\".claude/settings.json\", \"strong sandbox isolation\", \"weaker sandbox flag\"));\n\t\tconst filesystem = getRecord(sandbox.filesystem);\n\t\tconst network = getRecord(sandbox.network);\n\t\tif (filesystem && getStringArray(filesystem.allowWrite).length > 0 && effective.filesystem.write !== \"allow\") issues.push(configLooserIssue(\".claude/settings.json\", \"file writes ask/deny\", \"sandbox.filesystem.allowWrite\"));\n\t\tif (network) {\n\t\t\tif ((getStringArray(network.allowedDomains).length > 0 || network.allowAllUnixSockets === true || network.allowLocalBinding === true || network.allowMachLookup === true || typeof network.httpProxyPort === \"number\" || typeof network.socksProxyPort === \"number\") && effective.network.external !== \"allow\") issues.push(configLooserIssue(\".claude/settings.json\", \"network ask/deny\", \"broad sandbox.network setting\"));\n\t\t}\n\t}\n\treturn getRecord(merged.sandbox)?.enabled === true;\n}\nasync function readJsonObject(rootDir, relativePath, issues) {\n\tconst file = await readKnownFile(rootDir, relativePath);\n\tif (!file.ok) return;\n\ttry {\n\t\treturn getRecord(JSON.parse(decodeUtf8(file.bytes)));\n\t} catch {\n\t\tissues.push(permissionIssue(\"LINT-PERM-005\", \"warning\", relativePath, \"valid JSON\", \"parse error\", `${relativePath} could not be parsed for permission checks.`, \"Fix the JSON before relying on doctor permission results.\"));\n\t\treturn;\n\t}\n}\nfunction mergeClaudeSettings(project, local) {\n\tif (!project) return local;\n\tif (!local) return project;\n\treturn mergeRecords(project, local);\n}\nfunction mergeRecords(left, right) {\n\tconst result = { ...left };\n\tfor (const [key, value] of Object.entries(right)) {\n\t\tconst previous = result[key];\n\t\tif (Array.isArray(previous) && Array.isArray(value)) result[key] = Array.from(new Set([...previous, ...value]));\n\t\telse if (getRecord(previous) && getRecord(value)) result[key] = mergeRecords(previous, value);\n\t\telse result[key] = value;\n\t}\n\treturn result;\n}\nfunction evaluateClaudeRules(denyRules, askRules, allowRules) {\n\treturn {\n\t\tbash: evaluateClaudeTool(\"Bash\", denyRules, askRules, allowRules),\n\t\tedit: looserMode(evaluateClaudeTool(\"Edit\", denyRules, askRules, allowRules), evaluateClaudeTool(\"Write\", denyRules, askRules, allowRules)),\n\t\twebFetch: evaluateClaudeTool(\"WebFetch\", denyRules, askRules, allowRules)\n\t};\n}\nfunction evaluateClaudeTool(tool, denyRules, askRules, allowRules) {\n\tif (denyRules.some((rule) => isBareClaudeToolRule(rule, tool))) return \"deny\";\n\tif (askRules.some((rule) => isBareClaudeToolRule(rule, tool))) return \"ask\";\n\tif (allowRules.some((rule) => matchesClaudeTool(rule, tool))) return \"allow\";\n\tif (askRules.some((rule) => matchesClaudeTool(rule, tool))) return \"ask\";\n\treturn \"ask\";\n}\nfunction matchesClaudeTool(rule, tool) {\n\treturn rule === tool || rule.startsWith(`${tool}(`);\n}\nfunction isBareClaudeToolRule(rule, tool) {\n\treturn rule === tool;\n}\nfunction parseSimpleToml(source) {\n\tconst values = /* @__PURE__ */ new Map();\n\tconst unsupportedLines = [];\n\tlet table = \"\";\n\tsource.split(/\\r?\\n/u).forEach((rawLine, index) => {\n\t\tconst line = stripTomlInlineComment(rawLine).trim();\n\t\tif (line === \"\" || line.startsWith(\"#\")) return;\n\t\tconst tableMatch = /^\\[([A-Za-z0-9_.-]+)\\]$/u.exec(line);\n\t\tif (tableMatch) {\n\t\t\ttable = tableMatch[1] ?? \"\";\n\t\t\treturn;\n\t\t}\n\t\tconst assignment = /^([A-Za-z0-9_.-]+)\\s*=\\s*(.+)$/u.exec(line);\n\t\tif (!assignment) {\n\t\t\tunsupportedLines.push(index + 1);\n\t\t\treturn;\n\t\t}\n\t\tconst key = table ? `${table}.${assignment[1]}` : assignment[1];\n\t\tconst scalar = parseTomlScalar(assignment[2] ?? \"\");\n\t\tif (scalar.ok) values.set(key, scalar.value);\n\t\telse unsupportedLines.push(index + 1);\n\t});\n\treturn {\n\t\tvalues,\n\t\tunsupportedLines\n\t};\n}\nfunction parseTomlScalar(value) {\n\tconst trimmed = value.trim();\n\tif (trimmed === \"true\") return {\n\t\tok: true,\n\t\tvalue: true\n\t};\n\tif (trimmed === \"false\") return {\n\t\tok: true,\n\t\tvalue: false\n\t};\n\tif (/^-?\\d+$/u.test(trimmed)) return {\n\t\tok: true,\n\t\tvalue: Number(trimmed)\n\t};\n\tconst stringMatch = /^\"([^\"]*)\"$/u.exec(trimmed);\n\tif (stringMatch) return {\n\t\tok: true,\n\t\tvalue: stringMatch[1] ?? \"\"\n\t};\n\treturn { ok: false };\n}\nfunction stripTomlInlineComment(line) {\n\tlet inString = false;\n\tlet escaped = false;\n\tfor (let index = 0; index < line.length; index += 1) {\n\t\tconst character = line[index];\n\t\tif (character === \"\\\\\" && inString) {\n\t\t\tescaped = !escaped;\n\t\t\tcontinue;\n\t\t}\n\t\tif (character === \"\\\"\" && !escaped) inString = !inString;\n\t\tif (character === \"#\" && !inString) return line.slice(0, index);\n\t\tescaped = false;\n\t}\n\treturn line;\n}\nfunction hasUnsafeAutoApproval(effective, safetyMode) {\n\treturn effective.shell.run === \"allow\" || effective.dependencies.install === \"allow\" || effective.network.external === \"allow\" || safetyMode !== \"balanced\" && effective.filesystem.write === \"allow\";\n}\nfunction getLooserOverrides(preset, effective) {\n\treturn [\n\t\t{\n\t\t\tpath: \"/permissions/filesystem/read\",\n\t\t\texpected: preset.filesystem.read,\n\t\t\tactual: effective.filesystem.read\n\t\t},\n\t\t{\n\t\t\tpath: \"/permissions/filesystem/write\",\n\t\t\texpected: preset.filesystem.write,\n\t\t\tactual: effective.filesystem.write\n\t\t},\n\t\t{\n\t\t\tpath: \"/permissions/shell/run\",\n\t\t\texpected: preset.shell.run,\n\t\t\tactual: effective.shell.run\n\t\t},\n\t\t{\n\t\t\tpath: \"/permissions/dependencies/install\",\n\t\t\texpected: preset.dependencies.install,\n\t\t\tactual: effective.dependencies.install\n\t\t},\n\t\t{\n\t\t\tpath: \"/permissions/network/external\",\n\t\t\texpected: preset.network.external,\n\t\t\tactual: effective.network.external\n\t\t}\n\t].filter((check) => isLooser(check.actual, check.expected));\n}\nfunction isLooser(actual, expected) {\n\treturn permissionRank(actual) > permissionRank(expected);\n}\nfunction looserMode(left, right) {\n\treturn permissionRank(left) >= permissionRank(right) ? left : right;\n}\nfunction permissionRank(mode) {\n\tswitch (mode) {\n\t\tcase \"deny\": return 0;\n\t\tcase \"ask\": return 1;\n\t\tcase \"allow\": return 2;\n\t}\n}\nfunction reportRuntimeUnverifiable(profile, issues) {\n\tif (profile.clients.tabnine.enabled) issues.push(permissionIssue(\"LINT-PERM-006\", \"info\", \"tabnine-runtime\", \"verified IDE Tool Permissions state\", \"not verifiable\", \"Tabnine IDE runtime tool permission state cannot be verified from project files.\", \"Manually verify Tool Permissions in Tabnine IDE settings: Auto-approve, Ask first, or Disable.\"));\n\tif (profile.clients.codex.enabled) issues.push(permissionIssue(\"LINT-PERM-006\", \"info\", \"codex-runtime\", \"verified runtime approval and sandbox flags\", \"not verifiable\", \"Codex runtime flags or user configuration may override project config.\", \"Verify the active Codex approval policy and sandbox mode before trusting runtime posture.\"));\n\tif (profile.clients.claude.enabled) issues.push(permissionIssue(\"LINT-PERM-006\", \"info\", \"claude-runtime\", \"verified CLI permission mode and merged user settings\", \"not verifiable\", \"Claude CLI flags and user settings may override project settings.\", \"Verify the active Claude permission mode and settings scopes before trusting runtime posture.\"));\n}\nvar SUBAGENT_ROOTS = [\n\t\".claude/agents\",\n\t\".codex/agents\",\n\t\".tabnine/agent/agents\"\n];\nvar GENERATED_HEADER_MARKER = \"Generated by Agent Profile Compiler\";\nvar TABNINE_UNSAFE_TOOL_NAMES = new Set([\n\t\"run_shell_command\",\n\t\"write_file\",\n\t\"browser_agent\",\n\t\"browser\",\n\t\"open_url\",\n\t\"fetch_url\",\n\t\"http_request\",\n\t\"network\"\n]);\nvar CLAUDE_WRITE_TOOLS = new Set([\n\t\"Edit\",\n\t\"Write\",\n\t\"NotebookEdit\"\n]);\nasync function checkSubagentArtifacts(input) {\n\tconst { rootDir, profile, effective, generatedFiles, lockfile, issues } = input;\n\tconst enabled = getEnabledSubagents(profile);\n\tconst generatedSubagentPaths = new Set(generatedFiles.filter((file) => file.target === \"claude-subagents\" || file.target === \"codex-subagents\" || file.target === \"tabnine-subagents\").map((file) => file.path));\n\tconst lockfileSubagentPaths = new Set((lockfile?.outputs ?? []).filter((output) => output.target === \"claude-subagents\" || output.target === \"codex-subagents\" || output.target === \"tabnine-subagents\").map((output) => output.path));\n\tfor (const agent of enabled) if (isSubagentBuiltinNameCollision(agent.name)) issues.push(issue(\"LINT-SUBAGENT-005\", \"warning\", `/capabilities/delegation/subagents/agents/${agent.name}`, \"name distinct from built-ins\", \"collides with built-in after normalization\", `Subagent ${agent.name} collides with a documented built-in after hyphen/underscore normalization.`, \"Rename the subagent to avoid shadowing client built-ins.\"));\n\tfor (const root of SUBAGENT_ROOTS) {\n\t\tconst files = await collectSubagentFilesUnder(rootDir, root);\n\t\tfor (const relativePath of files) {\n\t\t\tconst file = await readKnownFile(rootDir, relativePath);\n\t\t\tif (!file.ok) continue;\n\t\t\tconst text = decodeUtf8(file.bytes);\n\t\t\tconst isGenerated = text.includes(GENERATED_HEADER_MARKER);\n\t\t\tif (containsSecretLikeLiteral(text)) issues.push(issue(\"LINT-SUBAGENT-002\", \"error\", relativePath, \"no literal secret-like values\", \"secret-like value present\", `${relativePath} contains a literal secret-like value.`, \"Remove literal secrets from the subagent file; use environment variable references only.\"));\n\t\t\tif (root === \".codex/agents\") checkCodexSubagentFile(relativePath, text, effective, issues);\n\t\t\telse if (root === \".claude/agents\") checkClaudeSubagentFile(relativePath, text, effective, issues);\n\t\t\telse if (root === \".tabnine/agent/agents\") checkTabnineSubagentFile(relativePath, text, effective, issues);\n\t\t\tif (isGenerated && !generatedSubagentPaths.has(relativePath) && !lockfileSubagentPaths.has(relativePath)) issues.push(issue(\"LINT-SUBAGENT-006\", \"warning\", relativePath, \"claimed by current compile output or lockfile\", \"orphan generated subagent\", `${relativePath} carries the generated-file header but is not produced by the current profile and not recorded in ai-profile.lock.`, \"Remove the orphan generated subagent file or restore the matching profile intent.\"));\n\t\t}\n\t}\n\tif (profile.clients.tabnine.enabled && enabled.some((agent) => agent.toolScope === \"read-only\")) issues.push(issue(\"LINT-SUBAGENT-008\", \"info\", \".tabnine/agent/settings.json\", \"experimental.enableAgents verifiable\", \"not verifiable\", \"Tabnine experimental.enableAgents cannot be verified because Agent Profile Compiler does not write .tabnine/agent/settings.json.\", \"Manually enable experimental.enableAgents in .tabnine/agent/settings.json to use the generated Tabnine subagent files.\"));\n}\nfunction checkCodexSubagentFile(relativePath, text, effective, issues) {\n\tconst sandboxMode = /^\\s*sandbox_mode\\s*=\\s*\"([^\"]+)\"/mu.exec(text)?.[1];\n\tif (sandboxMode === \"danger-full-access\") issues.push(issue(\"LINT-SUBAGENT-003\", \"error\", relativePath, \"sandboxed Codex subagent\", \"danger-full-access\", `${relativePath} declares danger-full-access, which is never allowed.`, \"Remove danger-full-access from the Codex subagent and use read-only or workspace-write instead.\"));\n\tif (sandboxMode === \"workspace-write\" && effective.filesystem.write === \"deny\") issues.push(issue(\"LINT-SUBAGENT-001\", \"error\", relativePath, \"narrower than effectivePermissions.filesystem.write=deny\", \"workspace-write\", `${relativePath} grants workspace-write while effectivePermissions deny filesystem writes.`, \"Set sandbox_mode = \\\"read-only\\\" or tighten the subagent intent.\"));\n\tif (/^\\s*approval_policy\\s*=\\s*\"never\"/mu.test(text)) issues.push(issue(\"LINT-SUBAGENT-001\", \"error\", relativePath, \"interactive approval policy\", \"never\", `${relativePath} declares approval_policy = \"never\", which is never allowed for generated Codex subagents.`, \"Remove approval_policy = \\\"never\\\" from the Codex subagent.\"));\n}\nfunction checkClaudeSubagentFile(relativePath, text, effective, issues) {\n\tconst frontmatter = parseMarkdownFrontmatter(text);\n\tif (frontmatter.permissionMode === \"bypassPermissions\") issues.push(issue(\"LINT-SUBAGENT-004\", \"error\", relativePath, \"non-bypass Claude permission mode\", \"bypassPermissions\", `${relativePath} declares permissionMode: bypassPermissions, which is never allowed.`, \"Remove bypassPermissions from the Claude subagent and use plan or default mode.\"));\n\tconst tools = parseClaudeToolList(frontmatter.tools);\n\tif (tools.includes(\"Bash\") && effective.shell.run !== \"allow\") issues.push(issue(\"LINT-SUBAGENT-001\", \"error\", relativePath, \"tools narrower than effectivePermissions.shell.run\", \"Bash tool granted\", `${relativePath} grants the Bash tool while effectivePermissions.shell.run is ${effective.shell.run}.`, \"Remove Bash from the Claude subagent tools list or tighten effectivePermissions.\"));\n\tif (tools.some((tool) => CLAUDE_WRITE_TOOLS.has(tool)) && effective.filesystem.write !== \"allow\") issues.push(issue(\"LINT-SUBAGENT-001\", \"error\", relativePath, \"tools narrower than effectivePermissions.filesystem.write\", \"Edit/Write tool granted\", `${relativePath} grants write tools while effectivePermissions.filesystem.write is ${effective.filesystem.write}.`, \"Remove Edit/Write from the Claude subagent tools list or tighten effectivePermissions.\"));\n\tif (tools.includes(\"WebFetch\") && effective.network.external !== \"allow\") issues.push(issue(\"LINT-SUBAGENT-001\", \"error\", relativePath, \"tools narrower than effectivePermissions.network.external\", \"WebFetch tool granted\", `${relativePath} grants the WebFetch tool while effectivePermissions.network.external is ${effective.network.external}.`, \"Remove WebFetch from the Claude subagent tools list or tighten effectivePermissions.\"));\n}\nfunction checkTabnineSubagentFile(relativePath, text, effective, issues) {\n\tconst tools = parseTabnineToolList(text, parseMarkdownFrontmatter(text).tools);\n\tconst unsafe = tools.filter((tool) => TABNINE_UNSAFE_TOOL_NAMES.has(tool));\n\tif (unsafe.length > 0) issues.push(issue(\"LINT-SUBAGENT-007\", \"warning\", relativePath, \"read-only Tabnine subagent tools\", `declares ${unsafe.join(\", \")}`, `${relativePath} declares write/shell/browser/network-capable tool ${unsafe[0]} while Tabnine subagents are experimental/no-confirmation.`, \"Restrict generated Tabnine subagents to read-only tools until safer Tabnine semantics are documented.\"));\n\tif (tools.includes(\"write_file\") && effective.filesystem.write !== \"allow\") issues.push(issue(\"LINT-SUBAGENT-001\", \"error\", relativePath, \"tools narrower than effectivePermissions.filesystem.write\", \"write_file tool granted\", `${relativePath} grants write_file while effectivePermissions.filesystem.write is ${effective.filesystem.write}.`, \"Remove write_file from the Tabnine subagent tools list or tighten effectivePermissions.\"));\n\tif (tools.includes(\"run_shell_command\") && effective.shell.run !== \"allow\") issues.push(issue(\"LINT-SUBAGENT-001\", \"error\", relativePath, \"tools narrower than effectivePermissions.shell.run\", \"run_shell_command tool granted\", `${relativePath} grants run_shell_command while effectivePermissions.shell.run is ${effective.shell.run}.`, \"Remove run_shell_command from the Tabnine subagent tools list or tighten effectivePermissions.\"));\n}\nfunction parseMarkdownFrontmatter(text) {\n\tif (!text.startsWith(\"---\\n\")) return {};\n\tconst end = text.indexOf(\"\\n---\", 4);\n\tif (end === -1) return {};\n\tconst block = text.slice(4, end);\n\tconst result = {};\n\tfor (const line of block.split(\"\\n\")) {\n\t\tconst match = /^([A-Za-z][A-Za-z0-9_]*)\\s*:\\s*(.*)$/u.exec(line);\n\t\tif (!match) continue;\n\t\tconst [, key, rawValue] = match;\n\t\tif (key === void 0) continue;\n\t\tresult[key] = (rawValue ?? \"\").trim();\n\t}\n\treturn result;\n}\nfunction parseClaudeToolList(value) {\n\tif (!value) return [];\n\treturn value.split(\",\").map((item) => item.trim()).filter((item) => item.length > 0);\n}\nfunction parseTabnineToolList(text, inlineValue) {\n\tif (inlineValue && inlineValue.length > 0 && inlineValue !== \"\") {\n\t\tif (inlineValue.startsWith(\"[\") && inlineValue.endsWith(\"]\")) return inlineValue.slice(1, -1).split(\",\").map((item) => item.trim().replace(/^[\"']|[\"']$/gu, \"\")).filter((item) => item.length > 0);\n\t}\n\tif (!text.startsWith(\"---\\n\")) return [];\n\tconst end = text.indexOf(\"\\n---\", 4);\n\tif (end === -1) return [];\n\tconst block = text.slice(4, end).split(\"\\n\");\n\tconst tools = [];\n\tlet inToolsBlock = false;\n\tfor (const line of block) {\n\t\tif (/^tools\\s*:\\s*$/u.test(line)) {\n\t\t\tinToolsBlock = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (inToolsBlock) {\n\t\t\tconst itemMatch = /^\\s+-\\s+(.+?)\\s*$/u.exec(line);\n\t\t\tif (itemMatch && itemMatch[1] !== void 0) {\n\t\t\t\ttools.push(itemMatch[1].replace(/^[\"']|[\"']$/gu, \"\"));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (/^\\S/u.test(line)) inToolsBlock = false;\n\t\t}\n\t}\n\treturn tools;\n}\nasync function collectSubagentFilesUnder(rootDir, relativeRoot) {\n\tlet entries;\n\ttry {\n\t\tentries = await readdir(path.join(rootDir, relativeRoot), { withFileTypes: true });\n\t} catch (error) {\n\t\tif (isNodeError(error) && error.code === \"ENOENT\") return [];\n\t\tthrow error;\n\t}\n\tconst results = [];\n\tfor (const entry of entries) {\n\t\tif (!entry.isFile()) continue;\n\t\tresults.push(`${relativeRoot}/${entry.name}`);\n\t}\n\treturn results.sort();\n}\nasync function collectSkillFiles(rootDir) {\n\tconst files = [];\n\tfor (const skillRoot of SKILL_ROOTS) await collectSkillFilesUnder(rootDir, skillRoot, files);\n\treturn files.sort();\n}\nasync function collectSkillFilesUnder(rootDir, relativeRoot, files) {\n\tlet entries;\n\ttry {\n\t\tentries = await readdir(path.join(rootDir, relativeRoot), { withFileTypes: true });\n\t} catch (error) {\n\t\tif (isNodeError(error) && error.code === \"ENOENT\") return;\n\t\tthrow error;\n\t}\n\tfor (const entry of entries) {\n\t\tconst relativePath = `${relativeRoot}/${entry.name}`;\n\t\tif (entry.isDirectory()) await collectSkillFilesUnder(rootDir, relativePath, files);\n\t\telse if (entry.isFile() && entry.name === \"SKILL.md\") files.push(relativePath);\n\t}\n}\nasync function readKnownFile(rootDir, relativePath) {\n\tconst safePath = safeOutputPath(relativePath);\n\tif (safePath === \".env\" || safePath.startsWith(\".env.\")) return { ok: false };\n\ttry {\n\t\treturn {\n\t\t\tok: true,\n\t\t\tbytes: await readFile(path.join(rootDir, safePath))\n\t\t};\n\t} catch (error) {\n\t\tif (isNodeError(error) && error.code === \"ENOENT\") return { ok: false };\n\t\tthrow error;\n\t}\n}\nfunction templateKey(template) {\n\treturn `${template.id}\\u0000${template.target}`;\n}\nfunction outputKey(output) {\n\treturn `${output.path}\\u0000${output.target}`;\n}\nfunction configLooserIssue(pathValue, expected, actual) {\n\treturn permissionIssue(\"LINT-PERM-005\", \"warning\", pathValue, expected, actual, `${pathValue} is looser than effectivePermissions.`, \"Review project config or regenerate it from ai-profile.yaml.\");\n}\nfunction permissionIssue(code, severity, pathValue, expected, actual, message, guidance) {\n\treturn issue(code, severity, pathValue, expected, actual, message, guidance);\n}\nfunction issue(code, severity, pathValue, expected, actual, message, guidance) {\n\treturn {\n\t\tcode,\n\t\tseverity,\n\t\tpath: pathValue,\n\t\texpected,\n\t\tactual,\n\t\tmessage,\n\t\tguidance\n\t};\n}\nfunction toResult(issues) {\n\tconst sortedIssues = issues.sort(compareDoctorIssues);\n\tconst status = getStatus(sortedIssues);\n\treturn {\n\t\tok: status !== \"fail\",\n\t\tstatus,\n\t\tissues: sortedIssues\n\t};\n}\nfunction getStatus(issues) {\n\tif (issues.some((item) => item.severity === \"error\")) return \"fail\";\n\tif (issues.some((item) => item.severity === \"warning\")) return \"warn\";\n\treturn \"pass\";\n}\nfunction compareDoctorIssues(left, right) {\n\treturn SEVERITY_ORDER[left.severity] - SEVERITY_ORDER[right.severity] || compareText(left.path, right.path) || compareText(left.code, right.code) || compareText(left.message, right.message);\n}\nfunction compareText(left, right) {\n\tif (left < right) return -1;\n\tif (left > right) return 1;\n\treturn 0;\n}\nfunction getRecord(value) {\n\tif (typeof value === \"object\" && value !== null && !Array.isArray(value)) return value;\n}\nfunction getStringArray(value) {\n\tif (!Array.isArray(value)) return [];\n\treturn value.filter((item) => typeof item === \"string\");\n}\nfunction describeSetting(value) {\n\tif (typeof value === \"string\") return value;\n\tif (value === void 0) return \"missing\";\n\tif (value === null) return \"null\";\n\tif (Array.isArray(value)) return \"array\";\n\treturn typeof value;\n}\nfunction containsLiteralEnvValue(pathValue, text) {\n\tif (pathValue.endsWith(\".json\")) try {\n\t\treturn hasLiteralEnvObjectValue(JSON.parse(text));\n\t} catch {\n\t\treturn false;\n\t}\n\tif (pathValue.endsWith(\".toml\")) return /^\\s*(?:env|env_vars|env_http_headers)\\s*=\\s*\"(?!\\$|\\$\\{)[^\"]+\"/imu.test(text);\n\treturn false;\n}\nfunction hasLiteralEnvObjectValue(value) {\n\tif (Array.isArray(value)) return value.some(hasLiteralEnvObjectValue);\n\tconst record = getRecord(value);\n\tif (!record) return false;\n\tfor (const [key, item] of Object.entries(record)) {\n\t\tconst envRecord = getRecord(item);\n\t\tif (key === \"env\" && envRecord) {\n\t\t\tfor (const envValue of Object.values(envRecord)) if (typeof envValue === \"string\" && envValue !== \"\" && !envValue.startsWith(\"$\") && !envValue.startsWith(\"${\")) return true;\n\t\t}\n\t\tif (hasLiteralEnvObjectValue(item)) return true;\n\t}\n\treturn false;\n}\nfunction countLines(text) {\n\tif (text === \"\") return 0;\n\treturn text.replace(/\\r\\n?/gu, \"\\n\").split(\"\\n\").length;\n}\nfunction hasSkillTrigger(text) {\n\treturn /(^description:\\s+\\S|\\buse\\b.{0,120}\\b(when|before)\\b|\\btriggers?\\b)/imsu.test(text);\n}\nfunction duplicatesGenericProjectFacts(text) {\n\treturn /\\b(Languages|Frameworks|Package managers|Testing):/u.test(text);\n}\nfunction countOccurrences(text, pattern) {\n\tlet count = 0;\n\tlet index = text.indexOf(pattern);\n\twhile (index !== -1) {\n\t\tcount += 1;\n\t\tindex = text.indexOf(pattern, index + pattern.length);\n\t}\n\treturn count;\n}\nfunction containsContradictionMarker(text) {\n\treturn [\n\t\t/ignore\\s+AGENTS\\.md/iu,\n\t\t/ignore\\s+ai-profile\\.yaml/iu,\n\t\t/you\\s+may\\s+upload\\s+source\\s+code/iu,\n\t\t/upload\\s+source\\s+code\\s+to/iu,\n\t\t/skip\\s+final\\s+review/iu,\n\t\t/disable\\s+final\\s+review/iu\n\t].some((pattern) => pattern.test(text));\n}\nfunction decodeUtf8(bytes) {\n\treturn Buffer.from(bytes).toString(\"utf8\");\n}\nfunction isNodeError(error) {\n\treturn error instanceof Error && \"code\" in error;\n}\n//#endregion\nexport { runDoctor as t };\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
|
|
3
|
+
//#region src/lib/server/tokenStore.ts
|
|
4
|
+
var CSRF_TTL_MS = 600 * 1e3;
|
|
5
|
+
var csrfTokens = /* @__PURE__ */ new Map();
|
|
6
|
+
function issueCsrfToken() {
|
|
7
|
+
pruneCsrf();
|
|
8
|
+
const token = randomBytes(16).toString("base64url");
|
|
9
|
+
csrfTokens.set(token, Date.now() + CSRF_TTL_MS);
|
|
10
|
+
return token;
|
|
11
|
+
}
|
|
12
|
+
function verifyCsrfToken(token) {
|
|
13
|
+
if (!token) return false;
|
|
14
|
+
const expiry = csrfTokens.get(token);
|
|
15
|
+
if (expiry === void 0) return false;
|
|
16
|
+
if (Date.now() > expiry) {
|
|
17
|
+
csrfTokens.delete(token);
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
function pruneCsrf() {
|
|
23
|
+
const now = Date.now();
|
|
24
|
+
for (const [token, expiry] of csrfTokens) if (now > expiry) csrfTokens.delete(token);
|
|
25
|
+
}
|
|
26
|
+
var PLAN_TTL_MS = 60 * 1e3;
|
|
27
|
+
var planTokens = /* @__PURE__ */ new Map();
|
|
28
|
+
function storePlan(entry) {
|
|
29
|
+
prunePlans();
|
|
30
|
+
const token = randomBytes(16).toString("base64url");
|
|
31
|
+
planTokens.set(token, {
|
|
32
|
+
...entry,
|
|
33
|
+
expiresAt: Date.now() + PLAN_TTL_MS
|
|
34
|
+
});
|
|
35
|
+
return token;
|
|
36
|
+
}
|
|
37
|
+
function lookupPlan(token) {
|
|
38
|
+
const entry = planTokens.get(token);
|
|
39
|
+
if (!entry) return void 0;
|
|
40
|
+
if (Date.now() > entry.expiresAt) {
|
|
41
|
+
planTokens.delete(token);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
return entry;
|
|
45
|
+
}
|
|
46
|
+
function consumePlan(token) {
|
|
47
|
+
const entry = lookupPlan(token);
|
|
48
|
+
if (entry) planTokens.delete(token);
|
|
49
|
+
return entry;
|
|
50
|
+
}
|
|
51
|
+
function prunePlans() {
|
|
52
|
+
const now = Date.now();
|
|
53
|
+
for (const [token, entry] of planTokens) if (now > entry.expiresAt) planTokens.delete(token);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export { consumePlan as c, issueCsrfToken as i, storePlan as s, verifyCsrfToken as v };
|
|
57
|
+
//# sourceMappingURL=tokenStore-DQfTa-N3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenStore-DQfTa-N3.js","sources":["../../../.svelte-kit/adapter-node/chunks/tokenStore.js"],"sourcesContent":["import { randomBytes } from \"node:crypto\";\n//#region src/lib/server/tokenStore.ts\nvar CSRF_TTL_MS = 600 * 1e3;\nvar csrfTokens = /* @__PURE__ */ new Map();\nfunction issueCsrfToken() {\n\tpruneCsrf();\n\tconst token = randomBytes(16).toString(\"base64url\");\n\tcsrfTokens.set(token, Date.now() + CSRF_TTL_MS);\n\treturn token;\n}\nfunction verifyCsrfToken(token) {\n\tif (!token) return false;\n\tconst expiry = csrfTokens.get(token);\n\tif (expiry === void 0) return false;\n\tif (Date.now() > expiry) {\n\t\tcsrfTokens.delete(token);\n\t\treturn false;\n\t}\n\treturn true;\n}\nfunction pruneCsrf() {\n\tconst now = Date.now();\n\tfor (const [token, expiry] of csrfTokens) if (now > expiry) csrfTokens.delete(token);\n}\nvar PLAN_TTL_MS = 60 * 1e3;\nvar planTokens = /* @__PURE__ */ new Map();\nfunction storePlan(entry) {\n\tprunePlans();\n\tconst token = randomBytes(16).toString(\"base64url\");\n\tplanTokens.set(token, {\n\t\t...entry,\n\t\texpiresAt: Date.now() + PLAN_TTL_MS\n\t});\n\treturn token;\n}\nfunction lookupPlan(token) {\n\tconst entry = planTokens.get(token);\n\tif (!entry) return void 0;\n\tif (Date.now() > entry.expiresAt) {\n\t\tplanTokens.delete(token);\n\t\treturn;\n\t}\n\treturn entry;\n}\nfunction consumePlan(token) {\n\tconst entry = lookupPlan(token);\n\tif (entry) planTokens.delete(token);\n\treturn entry;\n}\nfunction prunePlans() {\n\tconst now = Date.now();\n\tfor (const [token, entry] of planTokens) if (now > entry.expiresAt) planTokens.delete(token);\n}\n//#endregion\nexport { verifyCsrfToken as i, issueCsrfToken as n, storePlan as r, consumePlan as t };\n"],"names":[],"mappings":";;AACA;AACA,IAAI,WAAW,GAAG,GAAG,GAAG,GAAG;AAC3B,IAAI,UAAU,mBAAmB,IAAI,GAAG,EAAE;AAC1C,SAAS,cAAc,GAAG;AAC1B,CAAC,SAAS,EAAE;AACZ,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;AACpD,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC;AAChD,CAAC,OAAO,KAAK;AACb;AACA,SAAS,eAAe,CAAC,KAAK,EAAE;AAChC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,KAAK;AACzB,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACrC,CAAC,IAAI,MAAM,KAAK,MAAM,EAAE,OAAO,KAAK;AACpC,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,EAAE;AAC1B,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;AAC1B,EAAE,OAAO,KAAK;AACd,CAAC;AACD,CAAC,OAAO,IAAI;AACZ;AACA,SAAS,SAAS,GAAG;AACrB,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACvB,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,UAAU,EAAE,IAAI,GAAG,GAAG,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;AACrF;AACA,IAAI,WAAW,GAAG,EAAE,GAAG,GAAG;AAC1B,IAAI,UAAU,mBAAmB,IAAI,GAAG,EAAE;AAC1C,SAAS,SAAS,CAAC,KAAK,EAAE;AAC1B,CAAC,UAAU,EAAE;AACb,CAAC,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;AACpD,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE;AACvB,EAAE,GAAG,KAAK;AACV,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG;AAC1B,EAAE,CAAC;AACH,CAAC,OAAO,KAAK;AACb;AACA,SAAS,UAAU,CAAC,KAAK,EAAE;AAC3B,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;AACpC,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,MAAM;AAC1B,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE;AACnC,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;AAC1B,EAAE;AACF,CAAC;AACD,CAAC,OAAO,KAAK;AACb;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;AAC5B,CAAC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;AAChC,CAAC,IAAI,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,CAAC,OAAO,KAAK;AACb;AACA,SAAS,UAAU,GAAG;AACtB,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACvB,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;AAC7F;;;;"}
|