@agent-profile/web 0.1.5 → 0.3.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/build/client/_app/immutable/assets/9.BDcQmxob.css +1 -0
- package/build/client/_app/immutable/assets/9.BDcQmxob.css.br +0 -0
- package/build/client/_app/immutable/assets/9.BDcQmxob.css.gz +0 -0
- package/build/client/_app/immutable/chunks/BcMnim1Z.js +2 -0
- package/build/client/_app/immutable/chunks/BcMnim1Z.js.br +0 -0
- package/build/client/_app/immutable/chunks/BcMnim1Z.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D5fBh0I2.js +1 -0
- package/build/client/_app/immutable/chunks/D5fBh0I2.js.br +2 -0
- package/build/client/_app/immutable/chunks/D5fBh0I2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DJ5W1vn7.js +3 -0
- package/build/client/_app/immutable/chunks/DJ5W1vn7.js.br +0 -0
- package/build/client/_app/immutable/chunks/DJ5W1vn7.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DTBN031P.js +1 -0
- package/build/client/_app/immutable/chunks/DTBN031P.js.br +2 -0
- package/build/client/_app/immutable/chunks/DTBN031P.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D_wMLkFK.js +1 -0
- package/build/client/_app/immutable/chunks/D_wMLkFK.js.br +2 -0
- package/build/client/_app/immutable/chunks/D_wMLkFK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/m4VeB-e-.js +3 -0
- package/build/client/_app/immutable/chunks/m4VeB-e-.js.br +0 -0
- package/build/client/_app/immutable/chunks/m4VeB-e-.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.DMWpO7sJ.js +2 -0
- package/build/client/_app/immutable/entry/app.DMWpO7sJ.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DMWpO7sJ.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BBaMgJ1R.js +1 -0
- package/build/client/_app/immutable/entry/start.BBaMgJ1R.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BBaMgJ1R.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.Dv0k2Jqi.js +1 -0
- package/build/client/_app/immutable/nodes/0.Dv0k2Jqi.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.Dv0k2Jqi.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.E6HqFVj7.js +1 -0
- package/build/client/_app/immutable/nodes/1.E6HqFVj7.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.E6HqFVj7.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.DorD5wKe.js +3 -0
- package/build/client/_app/immutable/nodes/10.DorD5wKe.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.DorD5wKe.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{10.Bhdlxk-S.js → 11.3lkgWYOd.js} +2 -2
- package/build/client/_app/immutable/nodes/11.3lkgWYOd.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.3lkgWYOd.js.gz +0 -0
- package/build/client/_app/immutable/nodes/12.p6ol8gkx.js +1 -0
- package/build/client/_app/immutable/nodes/12.p6ol8gkx.js.br +0 -0
- package/build/client/_app/immutable/nodes/12.p6ol8gkx.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.CI-wpOC8.js → 2.DMK5rlQk.js} +2 -2
- package/build/client/_app/immutable/nodes/2.DMK5rlQk.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DMK5rlQk.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.BBvN4Erf.js +2 -0
- package/build/client/_app/immutable/nodes/3.BBvN4Erf.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.BBvN4Erf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.3VL8fZOS.js +4 -0
- package/build/client/_app/immutable/nodes/4.3VL8fZOS.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.3VL8fZOS.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.CiNtblYV.js +2 -0
- package/build/client/_app/immutable/nodes/5.CiNtblYV.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.CiNtblYV.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BRCCYakl.js +5 -0
- package/build/client/_app/immutable/nodes/6.BRCCYakl.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BRCCYakl.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.Bn-YL1OM.js +4 -0
- package/build/client/_app/immutable/nodes/7.Bn-YL1OM.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.Bn-YL1OM.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.CkQQuOBs.js +1 -0
- package/build/client/_app/immutable/nodes/8.CkQQuOBs.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.CkQQuOBs.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.6KxRZbKJ.js +9 -0
- package/build/client/_app/immutable/nodes/9.6KxRZbKJ.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.6KxRZbKJ.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/server/chunks/{0-DWEpTDaF.js → 0-D1xG012U.js} +8 -8
- package/build/server/chunks/{0-DWEpTDaF.js.map → 0-D1xG012U.js.map} +1 -1
- package/build/server/chunks/1-B1kTzRNn.js +9 -0
- package/build/server/chunks/{1-B68UkVTE.js.map → 1-B1kTzRNn.js.map} +1 -1
- package/build/server/chunks/{9-tHCipeiW.js → 10-DahfOzGu.js} +7 -7
- package/build/server/chunks/10-DahfOzGu.js.map +1 -0
- package/build/server/chunks/11-mzYblRmm.js +9 -0
- package/build/server/chunks/11-mzYblRmm.js.map +1 -0
- package/build/server/chunks/{11-Ms74wtl9.js → 12-Dw1Y6Xen.js} +5 -5
- package/build/server/chunks/{11-Ms74wtl9.js.map → 12-Dw1Y6Xen.js.map} +1 -1
- package/build/server/chunks/{2-bmpngDVe.js → 2-Cbd6Pglj.js} +3 -3
- package/build/server/chunks/{2-bmpngDVe.js.map → 2-Cbd6Pglj.js.map} +1 -1
- package/build/server/chunks/3-DjAsck26.js +9 -0
- package/build/server/chunks/{3-BkezOAX7.js.map → 3-DjAsck26.js.map} +1 -1
- package/build/server/chunks/{4-CSfQwQwV.js → 4-CKQYCTZo.js} +5 -5
- package/build/server/chunks/{4-CSfQwQwV.js.map → 4-CKQYCTZo.js.map} +1 -1
- package/build/server/chunks/5-BDp1sX0Q.js +9 -0
- package/build/server/chunks/{5-D_pZV4fS.js.map → 5-BDp1sX0Q.js.map} +1 -1
- package/build/server/chunks/6-CUIuzy6O.js +9 -0
- package/build/server/chunks/{6-DcbRMrH1.js.map → 6-CUIuzy6O.js.map} +1 -1
- package/build/server/chunks/{7-BsMFIBGU.js → 7-BDv5_nF1.js} +6 -6
- package/build/server/chunks/{7-BsMFIBGU.js.map → 7-BDv5_nF1.js.map} +1 -1
- package/build/server/chunks/8-CspJz0xl.js +9 -0
- package/build/server/chunks/{8-DWleYW_e.js.map → 8-CspJz0xl.js.map} +1 -1
- package/build/server/chunks/9-BpgaO-rd.js +33 -0
- package/build/server/chunks/9-BpgaO-rd.js.map +1 -0
- package/build/server/chunks/{Badge-BYK3z3lr.js → Badge-DCQxSQCS.js} +2 -2
- package/build/server/chunks/{Badge-BYK3z3lr.js.map → Badge-DCQxSQCS.js.map} +1 -1
- package/build/server/chunks/{SafetyBadge-BXNCgLE-.js → SafetyBadge-BxEGojgX.js} +2 -2
- package/build/server/chunks/{SafetyBadge-BXNCgLE-.js.map → SafetyBadge-BxEGojgX.js.map} +1 -1
- package/build/server/chunks/{_layout.svelte-Cv35k3JT.js → _layout.svelte-6X0-Uv9x.js} +15 -5
- package/build/server/chunks/_layout.svelte-6X0-Uv9x.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BftcSD3f.js → _page.svelte-1wUrXGW-.js} +3 -3
- package/build/server/chunks/{_page.svelte-BftcSD3f.js.map → _page.svelte-1wUrXGW-.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-B-Kaw1RF.js → _page.svelte-B3CasgD8.js} +2 -2
- package/build/server/chunks/{_page.svelte-B-Kaw1RF.js.map → _page.svelte-B3CasgD8.js.map} +1 -1
- package/build/server/chunks/_page.svelte-BEU4JrAd.js +433 -0
- package/build/server/chunks/_page.svelte-BEU4JrAd.js.map +1 -0
- package/build/server/chunks/{_page.svelte-Cat8tEeF.js → _page.svelte-Bi4xsxv7.js} +4 -4
- package/build/server/chunks/{_page.svelte-Cat8tEeF.js.map → _page.svelte-Bi4xsxv7.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-CIEY8g8A.js → _page.svelte-BikYFdJv.js} +4 -4
- package/build/server/chunks/{_page.svelte-CIEY8g8A.js.map → _page.svelte-BikYFdJv.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-CmuUQI4Y.js → _page.svelte-Bx-fv-rO.js} +43 -20
- package/build/server/chunks/_page.svelte-Bx-fv-rO.js.map +1 -0
- package/build/server/chunks/{_page.svelte-DZX4Bixr.js → _page.svelte-CveCaqpY.js} +5 -5
- package/build/server/chunks/{_page.svelte-DZX4Bixr.js.map → _page.svelte-CveCaqpY.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DyI46sDh.js → _page.svelte-D8ffqrO3.js} +3 -3
- package/build/server/chunks/{_page.svelte-DyI46sDh.js.map → _page.svelte-D8ffqrO3.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DLQqGym0.js → _page.svelte-DNmC-yjw.js} +4 -4
- package/build/server/chunks/{_page.svelte-DLQqGym0.js.map → _page.svelte-DNmC-yjw.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DHNevyzi.js → _page.svelte-wL3fdD1l.js} +4 -4
- package/build/server/chunks/{_page.svelte-DHNevyzi.js.map → _page.svelte-wL3fdD1l.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-CUnw0pLx.js → _page.svelte-xTZOj1o8.js} +3 -3
- package/build/server/chunks/{_page.svelte-CUnw0pLx.js.map → _page.svelte-xTZOj1o8.js.map} +1 -1
- package/build/server/chunks/_server.ts-BBDD0W6t.js +167 -0
- package/build/server/chunks/_server.ts-BBDD0W6t.js.map +1 -0
- package/build/server/chunks/_server.ts-BkOJmVFg.js +101 -0
- package/build/server/chunks/_server.ts-BkOJmVFg.js.map +1 -0
- package/build/server/chunks/{_server.ts-BUQYdxPs.js → _server.ts-BkcLO56D.js} +2 -2
- package/build/server/chunks/{_server.ts-BUQYdxPs.js.map → _server.ts-BkcLO56D.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Dq1jAomo.js → _server.ts-C2WpZqPW.js} +4 -4
- package/build/server/chunks/{_server.ts-Dq1jAomo.js.map → _server.ts-C2WpZqPW.js.map} +1 -1
- package/build/server/chunks/{_server.ts-5396UuLQ.js → _server.ts-CKn8ym8s.js} +2 -2
- package/build/server/chunks/{_server.ts-5396UuLQ.js.map → _server.ts-CKn8ym8s.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DHt1bGpF.js → _server.ts-CaVH9FSD.js} +4 -4
- package/build/server/chunks/{_server.ts-DHt1bGpF.js.map → _server.ts-CaVH9FSD.js.map} +1 -1
- package/build/server/chunks/_server.ts-D7iLlRbM.js +337 -0
- package/build/server/chunks/_server.ts-D7iLlRbM.js.map +1 -0
- package/build/server/chunks/_server.ts-DPqZOGG_.js +18 -0
- package/build/server/chunks/_server.ts-DPqZOGG_.js.map +1 -0
- package/build/server/chunks/{_server.ts-sMKRiXFg.js → _server.ts-Dz9oKgWc.js} +5 -5
- package/build/server/chunks/{_server.ts-sMKRiXFg.js.map → _server.ts-Dz9oKgWc.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CvdpZfED.js → _server.ts-fVP0SuTW.js} +2 -2
- package/build/server/chunks/{_server.ts-CvdpZfED.js.map → _server.ts-fVP0SuTW.js.map} +1 -1
- package/build/server/chunks/{client-92HF3fc9.js → client-CydontyB.js} +3 -3
- package/build/server/chunks/{client-92HF3fc9.js.map → client-CydontyB.js.map} +1 -1
- package/build/server/chunks/{dev-Duv_-rxF.js → dev-BdIdjvaY.js} +216 -82
- package/build/server/chunks/dev-BdIdjvaY.js.map +1 -0
- package/build/server/chunks/{doctorSummary-Bm0dY6PW.js → doctorSummary-BOtGdd9z.js} +3 -3
- package/build/server/chunks/{doctorSummary-Bm0dY6PW.js.map → doctorSummary-BOtGdd9z.js.map} +1 -1
- package/build/server/chunks/{error.svelte-BEI8QxGW.js → error.svelte-_CDx8UPv.js} +4 -4
- package/build/server/chunks/{error.svelte-BEI8QxGW.js.map → error.svelte-_CDx8UPv.js.map} +1 -1
- package/build/server/chunks/{hooks.server-BKavEpqC.js → hooks.server-Dva4z7fv.js} +35 -1
- package/build/server/chunks/hooks.server-Dva4z7fv.js.map +1 -0
- package/build/server/chunks/{internal-DBeni9My.js → internal-DyPeC3rk.js} +21 -16
- package/build/server/chunks/internal-DyPeC3rk.js.map +1 -0
- package/build/server/chunks/{marketingSeo-Do5o0grg.js → marketingSeo-CugwK52J.js} +2 -2
- package/build/server/chunks/{marketingSeo-Do5o0grg.js.map → marketingSeo-CugwK52J.js.map} +1 -1
- package/build/server/chunks/migrationReport-f6NoxAVZ.js +40 -0
- package/build/server/chunks/migrationReport-f6NoxAVZ.js.map +1 -0
- package/build/server/chunks/{profileApiHelpers-BFzohffv.js → profileApiHelpers-DCoI7zMU.js} +3 -3
- package/build/server/chunks/{profileApiHelpers-BFzohffv.js.map → profileApiHelpers-DCoI7zMU.js.map} +1 -1
- package/build/server/chunks/{projectContext-Cxsfz84C.js → projectContext-B1D-bieW.js} +2439 -127
- package/build/server/chunks/projectContext-B1D-bieW.js.map +1 -0
- package/build/server/chunks/{src2-DNqJAXv6.js → src2-BtraGDB1.js} +2 -2
- package/build/server/chunks/src2-BtraGDB1.js.map +1 -0
- package/build/server/chunks/{src3-jm480tTA.js → src3-BXch_OaJ.js} +347 -10
- package/build/server/chunks/src3-BXch_OaJ.js.map +1 -0
- package/build/server/chunks/{tokenStore-DQfTa-N3.js → tokenStore-CTHhmHsk.js} +30 -2
- package/build/server/chunks/tokenStore-CTHhmHsk.js.map +1 -0
- package/build/server/index.js +4 -5
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +58 -22
- package/build/server/manifest.js.map +1 -1
- package/package.json +7 -7
- package/build/client/_app/immutable/chunks/6SrQtk22.js +0 -3
- package/build/client/_app/immutable/chunks/6SrQtk22.js.br +0 -0
- package/build/client/_app/immutable/chunks/6SrQtk22.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B1X0Iqjr.js +0 -3
- package/build/client/_app/immutable/chunks/B1X0Iqjr.js.br +0 -0
- package/build/client/_app/immutable/chunks/B1X0Iqjr.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BN4Ca4cJ.js +0 -1
- package/build/client/_app/immutable/chunks/BN4Ca4cJ.js.br +0 -0
- package/build/client/_app/immutable/chunks/BN4Ca4cJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BYeYmN2n.js +0 -1
- package/build/client/_app/immutable/chunks/BYeYmN2n.js.br +0 -2
- package/build/client/_app/immutable/chunks/BYeYmN2n.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D0_SwbnT.js +0 -2
- package/build/client/_app/immutable/chunks/D0_SwbnT.js.br +0 -0
- package/build/client/_app/immutable/chunks/D0_SwbnT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DRoN73NW.js +0 -1
- package/build/client/_app/immutable/chunks/DRoN73NW.js.br +0 -2
- package/build/client/_app/immutable/chunks/DRoN73NW.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.B45QQayJ.js +0 -2
- package/build/client/_app/immutable/entry/app.B45QQayJ.js.br +0 -0
- package/build/client/_app/immutable/entry/app.B45QQayJ.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BIlQ_snM.js +0 -1
- package/build/client/_app/immutable/entry/start.BIlQ_snM.js.br +0 -0
- package/build/client/_app/immutable/entry/start.BIlQ_snM.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.JRffyfUR.js +0 -1
- package/build/client/_app/immutable/nodes/0.JRffyfUR.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.JRffyfUR.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.56EgwKsF.js +0 -1
- package/build/client/_app/immutable/nodes/1.56EgwKsF.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.56EgwKsF.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.Bhdlxk-S.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.Bhdlxk-S.js.gz +0 -0
- package/build/client/_app/immutable/nodes/11.DAqRx2TI.js +0 -1
- package/build/client/_app/immutable/nodes/11.DAqRx2TI.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.DAqRx2TI.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.CI-wpOC8.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.CI-wpOC8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.Bphawycs.js +0 -2
- package/build/client/_app/immutable/nodes/3.Bphawycs.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.Bphawycs.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.BGFkNM65.js +0 -4
- package/build/client/_app/immutable/nodes/4.BGFkNM65.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.BGFkNM65.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.VTs5grF0.js +0 -2
- package/build/client/_app/immutable/nodes/5.VTs5grF0.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.VTs5grF0.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.CndSdLIk.js +0 -5
- package/build/client/_app/immutable/nodes/6.CndSdLIk.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.CndSdLIk.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.DpFk4StA.js +0 -4
- package/build/client/_app/immutable/nodes/7.DpFk4StA.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.DpFk4StA.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.Y7A99ODL.js +0 -1
- package/build/client/_app/immutable/nodes/8.Y7A99ODL.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.Y7A99ODL.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.DF3LeTGi.js +0 -3
- package/build/client/_app/immutable/nodes/9.DF3LeTGi.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.DF3LeTGi.js.gz +0 -0
- package/build/server/chunks/1-B68UkVTE.js +0 -9
- package/build/server/chunks/10-D7op0myD.js +0 -9
- package/build/server/chunks/10-D7op0myD.js.map +0 -1
- package/build/server/chunks/3-BkezOAX7.js +0 -9
- package/build/server/chunks/5-D_pZV4fS.js +0 -9
- package/build/server/chunks/6-DcbRMrH1.js +0 -9
- package/build/server/chunks/8-DWleYW_e.js +0 -9
- package/build/server/chunks/9-tHCipeiW.js.map +0 -1
- package/build/server/chunks/_layout.svelte-Cv35k3JT.js.map +0 -1
- package/build/server/chunks/_page.svelte-CmuUQI4Y.js.map +0 -1
- package/build/server/chunks/dev-Duv_-rxF.js.map +0 -1
- package/build/server/chunks/hooks.server-BKavEpqC.js.map +0 -1
- package/build/server/chunks/internal-DBeni9My.js.map +0 -1
- package/build/server/chunks/projectContext-Cxsfz84C.js.map +0 -1
- package/build/server/chunks/src2-DNqJAXv6.js.map +0 -1
- package/build/server/chunks/src3-jm480tTA.js.map +0 -1
- package/build/server/chunks/tokenStore-DQfTa-N3.js.map +0 -1
- /package/build/client/_app/immutable/assets/{9.BsbC-D7w.css → 10.BsbC-D7w.css} +0 -0
- /package/build/client/_app/immutable/assets/{9.BsbC-D7w.css.br → 10.BsbC-D7w.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{9.BsbC-D7w.css.gz → 10.BsbC-D7w.css.gz} +0 -0
- /package/build/client/_app/immutable/chunks/{I8rQr1kY.js → CP97kCR3.js} +0 -0
- /package/build/client/_app/immutable/chunks/{I8rQr1kY.js.br → CP97kCR3.js.br} +0 -0
- /package/build/client/_app/immutable/chunks/{I8rQr1kY.js.gz → CP97kCR3.js.gz} +0 -0
- /package/build/client/_app/immutable/chunks/{BFYQcBYR.js → O6-aNYLC.js} +0 -0
- /package/build/client/_app/immutable/chunks/{BFYQcBYR.js.br → O6-aNYLC.js.br} +0 -0
- /package/build/client/_app/immutable/chunks/{BFYQcBYR.js.gz → O6-aNYLC.js.gz} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { p as parseProfileYaml } from './projectContext-
|
|
1
|
+
import { p as parseProfileYaml } from './projectContext-B1D-bieW.js';
|
|
2
2
|
import 'node:fs/promises';
|
|
3
3
|
import 'process';
|
|
4
4
|
import 'buffer';
|
|
@@ -9,4 +9,4 @@ import 'node:crypto';
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
export { parseProfileYaml };
|
|
12
|
-
//# sourceMappingURL=src2-
|
|
12
|
+
//# sourceMappingURL=src2-BtraGDB1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"src2-BtraGDB1.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { p as parseProfileYaml, c as compileProfile, s as safeOutputPath,
|
|
2
|
-
import { readFile, readdir } from 'node:fs/promises';
|
|
1
|
+
import { p as parseProfileYaml, c as compileProfile, t as toLockfileV2View, d as deriveEffectivePermissions, s as safeOutputPath, e as containsSecretLikeLiteral, v as validateLockfileText, h as hasAllRegionMarkers, f as hasAnyRegionMarker, g as parseMixedFile, i as hasLegacyGeneratedMarker, j as createLockfileFile, k as sha256Hex, n as normalizeSafety, l as getEnabledSubagents, m as isSubagentBuiltinNameCollision } from './projectContext-B1D-bieW.js';
|
|
2
|
+
import { lstat, readFile, readdir } from 'node:fs/promises';
|
|
3
3
|
import path from 'node:path';
|
|
4
4
|
|
|
5
5
|
//#region ../../packages/doctor/src/doctor.ts
|
|
@@ -35,15 +35,27 @@ async function runDoctor(request = {}) {
|
|
|
35
35
|
await checkSemanticWarnings(rootDir, compileResult.files, issues);
|
|
36
36
|
await checkGitignoreSecretHygiene(rootDir, issues);
|
|
37
37
|
const lockfile = await readAndValidateLockfile(rootDir, issues);
|
|
38
|
-
|
|
38
|
+
const lockfileV2 = lockfile ? toLockfileV2View(lockfile) : void 0;
|
|
39
|
+
await checkRegionFiles(rootDir, compileResult.files, lockfileV2, issues);
|
|
40
|
+
if (lockfileV2) await checkLockfileDrift({
|
|
39
41
|
rootDir,
|
|
40
42
|
profileBytes: profileBytes.bytes,
|
|
41
43
|
templates: compileResult.templates,
|
|
42
44
|
files: compileResult.files,
|
|
43
|
-
lockfile,
|
|
45
|
+
lockfile: lockfileV2,
|
|
44
46
|
issues
|
|
45
47
|
});
|
|
46
48
|
await checkPermissionPosture(rootDir, profileResult.profile, issues);
|
|
49
|
+
await checkSubagentArtifacts({
|
|
50
|
+
rootDir,
|
|
51
|
+
profile: profileResult.profile,
|
|
52
|
+
effective: deriveEffectivePermissions(profileResult.profile),
|
|
53
|
+
generatedFiles: compileResult.files,
|
|
54
|
+
lockfile: lockfileV2,
|
|
55
|
+
issues
|
|
56
|
+
});
|
|
57
|
+
await checkLocalRuntimeGitignore(rootDir, issues);
|
|
58
|
+
await checkForeignSkillAndSubagentCollisions(rootDir, compileResult.files, lockfileV2, issues);
|
|
47
59
|
return toResult(issues);
|
|
48
60
|
}
|
|
49
61
|
async function checkGeneratedArtifactsExist(rootDir, files, issues) {
|
|
@@ -108,7 +120,8 @@ async function checkLockfileDrift(input) {
|
|
|
108
120
|
const expectedLockfileText = createLockfileFile({
|
|
109
121
|
profileBytes: input.profileBytes,
|
|
110
122
|
templates: input.templates,
|
|
111
|
-
files: input.files
|
|
123
|
+
files: input.files,
|
|
124
|
+
mixedOutputs: collectMixedOutputDescriptorsFromLockfile(input.lockfile)
|
|
112
125
|
});
|
|
113
126
|
const expectedLockfile = JSON.parse(Buffer.from(expectedLockfileText.bytes).toString("utf8"));
|
|
114
127
|
const currentProfileHash = sha256Hex(input.profileBytes);
|
|
@@ -117,16 +130,41 @@ async function checkLockfileDrift(input) {
|
|
|
117
130
|
compareOutputs(input.lockfile.outputs, expectedLockfile.outputs, input.issues);
|
|
118
131
|
const lockOutputsByKey = new Map(input.lockfile.outputs.map((output) => [outputKey(output), output]));
|
|
119
132
|
for (const output of expectedLockfile.outputs) {
|
|
120
|
-
|
|
133
|
+
if (output.ownership === "manual-owned") continue;
|
|
134
|
+
const lockOutput = lockOutputsByKey.get(outputKey(output));
|
|
121
135
|
const current = await readKnownFile(input.rootDir, output.path);
|
|
122
136
|
if (!current.ok) {
|
|
123
|
-
|
|
137
|
+
const isLocalRuntime = LOCAL_RUNTIME_IGNORE_PATHS.some((line) => line.replace(/\/$/u, "") === output.path);
|
|
138
|
+
input.issues.push(issue("LINT-LOCK-006", isLocalRuntime ? "warning" : "error", output.path, "generated file present", "missing", `${output.path} is listed in ai-profile.lock but is missing${isLocalRuntime ? " (local-runtime path; regenerated by compile --write)" : ""}.`, isLocalRuntime ? "Run agent-profile compile --write to materialize the local-runtime file; it is intentionally not committed." : "Run the compiler after reviewing generated file changes."));
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (output.ownership === "mixed") {
|
|
142
|
+
const expectedHash = (lockOutput && lockOutput.ownership === "mixed" ? lockOutput.regions[0] : output.regions[0])?.sha256 ?? output.regions[0]?.sha256 ?? "";
|
|
143
|
+
const parsed = parseMixedFile(Buffer.from(current.bytes));
|
|
144
|
+
if (!parsed.ok) continue;
|
|
145
|
+
if (parsed.generatedInnerHash !== expectedHash) input.issues.push(issue("LINT-REGION-004", "error", output.path, expectedHash, parsed.generatedInnerHash, `${output.path} generated region hash differs from ai-profile.lock.`, "Run the compiler after reviewing the generated region diff."));
|
|
124
146
|
continue;
|
|
125
147
|
}
|
|
148
|
+
const expectedHash = lockOutput && lockOutput.ownership === "generated-owned" ? lockOutput.sha256 : output.sha256;
|
|
126
149
|
const currentHash = sha256Hex(current.bytes);
|
|
127
150
|
if (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."));
|
|
128
151
|
}
|
|
129
152
|
}
|
|
153
|
+
function collectMixedOutputDescriptorsFromLockfile(lockfile) {
|
|
154
|
+
const result = [];
|
|
155
|
+
for (const output of lockfile.outputs) {
|
|
156
|
+
if (output.ownership !== "mixed") continue;
|
|
157
|
+
const region = output.regions[0];
|
|
158
|
+
if (!region) continue;
|
|
159
|
+
result.push({
|
|
160
|
+
path: output.path,
|
|
161
|
+
target: region.target,
|
|
162
|
+
templateId: region.templateId,
|
|
163
|
+
regionHash: region.sha256
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
130
168
|
function compareTemplates(actual, expected, issues) {
|
|
131
169
|
const actualMap = new Map(actual.map((template) => [templateKey(template), template]));
|
|
132
170
|
const expectedMap = new Map(expected.map((template) => [templateKey(template), template]));
|
|
@@ -149,10 +187,20 @@ function compareOutputs(actual, expected, issues) {
|
|
|
149
187
|
issues.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."));
|
|
150
188
|
continue;
|
|
151
189
|
}
|
|
152
|
-
|
|
190
|
+
const expectedSig = describeOutputSignature(expectedOutput);
|
|
191
|
+
const actualSig = describeOutputSignature(actualOutput);
|
|
192
|
+
if (expectedSig !== actualSig) issues.push(issue("LINT-LOCK-005", "error", expectedOutput.path, expectedSig, actualSig, `${expectedOutput.path} lockfile output metadata differs from current compiler output.`, "Regenerate generated outputs and ai-profile.lock after reviewing changes."));
|
|
153
193
|
}
|
|
154
194
|
for (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."));
|
|
155
195
|
}
|
|
196
|
+
function describeOutputSignature(output) {
|
|
197
|
+
if (output.ownership === "mixed") {
|
|
198
|
+
const region = output.regions[0];
|
|
199
|
+
return `mixed/${output.templateId}/${region?.sha256 ?? ""}`;
|
|
200
|
+
}
|
|
201
|
+
if (output.ownership === "manual-owned") return "manual-owned/manual/-";
|
|
202
|
+
return `generated/${output.templateId}/${output.sha256}`;
|
|
203
|
+
}
|
|
156
204
|
async function checkPermissionPosture(rootDir, profile, issues) {
|
|
157
205
|
const safety = normalizeSafety(profile);
|
|
158
206
|
const effective = deriveEffectivePermissions(profile);
|
|
@@ -379,6 +427,130 @@ function reportRuntimeUnverifiable(profile, issues) {
|
|
|
379
427
|
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
428
|
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
429
|
}
|
|
430
|
+
var SUBAGENT_ROOTS = [
|
|
431
|
+
".claude/agents",
|
|
432
|
+
".codex/agents",
|
|
433
|
+
".tabnine/agent/agents"
|
|
434
|
+
];
|
|
435
|
+
var GENERATED_HEADER_MARKER = "Generated by Agent Profile Compiler";
|
|
436
|
+
var TABNINE_UNSAFE_TOOL_NAMES = new Set([
|
|
437
|
+
"run_shell_command",
|
|
438
|
+
"write_file",
|
|
439
|
+
"browser_agent",
|
|
440
|
+
"browser",
|
|
441
|
+
"open_url",
|
|
442
|
+
"fetch_url",
|
|
443
|
+
"http_request",
|
|
444
|
+
"network"
|
|
445
|
+
]);
|
|
446
|
+
var CLAUDE_WRITE_TOOLS = new Set([
|
|
447
|
+
"Edit",
|
|
448
|
+
"Write",
|
|
449
|
+
"NotebookEdit"
|
|
450
|
+
]);
|
|
451
|
+
async function checkSubagentArtifacts(input) {
|
|
452
|
+
const { rootDir, profile, effective, generatedFiles, lockfile, issues } = input;
|
|
453
|
+
const enabled = getEnabledSubagents(profile);
|
|
454
|
+
const generatedSubagentPaths = new Set(generatedFiles.filter((file) => file.target === "claude-subagents" || file.target === "codex-subagents" || file.target === "tabnine-subagents").map((file) => file.path));
|
|
455
|
+
const lockfileSubagentPaths = new Set((lockfile?.outputs ?? []).filter((output) => output.target === "claude-subagents" || output.target === "codex-subagents" || output.target === "tabnine-subagents").map((output) => output.path));
|
|
456
|
+
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."));
|
|
457
|
+
for (const root of SUBAGENT_ROOTS) {
|
|
458
|
+
const files = await collectSubagentFilesUnder(rootDir, root);
|
|
459
|
+
for (const relativePath of files) {
|
|
460
|
+
const file = await readKnownFile(rootDir, relativePath);
|
|
461
|
+
if (!file.ok) continue;
|
|
462
|
+
const text = decodeUtf8(file.bytes);
|
|
463
|
+
const isGenerated = text.includes(GENERATED_HEADER_MARKER);
|
|
464
|
+
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."));
|
|
465
|
+
if (root === ".codex/agents") checkCodexSubagentFile(relativePath, text, effective, issues);
|
|
466
|
+
else if (root === ".claude/agents") checkClaudeSubagentFile(relativePath, text, effective, issues);
|
|
467
|
+
else if (root === ".tabnine/agent/agents") checkTabnineSubagentFile(relativePath, text, effective, issues);
|
|
468
|
+
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."));
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
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."));
|
|
472
|
+
}
|
|
473
|
+
function checkCodexSubagentFile(relativePath, text, effective, issues) {
|
|
474
|
+
const sandboxMode = /^\s*sandbox_mode\s*=\s*"([^"]+)"/mu.exec(text)?.[1];
|
|
475
|
+
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."));
|
|
476
|
+
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."));
|
|
477
|
+
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."));
|
|
478
|
+
}
|
|
479
|
+
function checkClaudeSubagentFile(relativePath, text, effective, issues) {
|
|
480
|
+
const frontmatter = parseMarkdownFrontmatter(text);
|
|
481
|
+
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."));
|
|
482
|
+
const tools = parseClaudeToolList(frontmatter.tools);
|
|
483
|
+
if (tools.includes("Bash") && effective.shell.run === "deny") issues.push(issue("LINT-SUBAGENT-001", "error", relativePath, "tools narrower than effectivePermissions.shell.run=deny", "Bash tool granted", `${relativePath} grants the Bash tool while effectivePermissions.shell.run is deny.`, "Remove Bash from the Claude subagent tools list or relax shell.run from deny."));
|
|
484
|
+
if (tools.some((tool) => CLAUDE_WRITE_TOOLS.has(tool)) && effective.filesystem.write === "deny") issues.push(issue("LINT-SUBAGENT-001", "error", relativePath, "tools narrower than effectivePermissions.filesystem.write=deny", "Edit/Write tool granted", `${relativePath} grants write tools while effectivePermissions.filesystem.write is deny.`, "Remove Edit/Write from the Claude subagent tools list or relax filesystem.write from deny."));
|
|
485
|
+
if (tools.includes("WebFetch") && effective.network.external === "deny") issues.push(issue("LINT-SUBAGENT-001", "error", relativePath, "tools narrower than effectivePermissions.network.external=deny", "WebFetch tool granted", `${relativePath} grants the WebFetch tool while effectivePermissions.network.external is deny.`, "Remove WebFetch from the Claude subagent tools list or relax network.external from deny."));
|
|
486
|
+
}
|
|
487
|
+
function checkTabnineSubagentFile(relativePath, text, effective, issues) {
|
|
488
|
+
const tools = parseTabnineToolList(text, parseMarkdownFrontmatter(text).tools);
|
|
489
|
+
const unsafe = tools.filter((tool) => TABNINE_UNSAFE_TOOL_NAMES.has(tool));
|
|
490
|
+
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."));
|
|
491
|
+
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."));
|
|
492
|
+
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."));
|
|
493
|
+
}
|
|
494
|
+
function parseMarkdownFrontmatter(text) {
|
|
495
|
+
if (!text.startsWith("---\n")) return {};
|
|
496
|
+
const end = text.indexOf("\n---", 4);
|
|
497
|
+
if (end === -1) return {};
|
|
498
|
+
const block = text.slice(4, end);
|
|
499
|
+
const result = {};
|
|
500
|
+
for (const line of block.split("\n")) {
|
|
501
|
+
const match = /^([A-Za-z][A-Za-z0-9_]*)\s*:\s*(.*)$/u.exec(line);
|
|
502
|
+
if (!match) continue;
|
|
503
|
+
const [, key, rawValue] = match;
|
|
504
|
+
if (key === void 0) continue;
|
|
505
|
+
result[key] = (rawValue ?? "").trim();
|
|
506
|
+
}
|
|
507
|
+
return result;
|
|
508
|
+
}
|
|
509
|
+
function parseClaudeToolList(value) {
|
|
510
|
+
if (!value) return [];
|
|
511
|
+
return value.split(",").map((item) => item.trim()).filter((item) => item.length > 0);
|
|
512
|
+
}
|
|
513
|
+
function parseTabnineToolList(text, inlineValue) {
|
|
514
|
+
if (inlineValue && inlineValue.length > 0 && inlineValue !== "") {
|
|
515
|
+
if (inlineValue.startsWith("[") && inlineValue.endsWith("]")) return inlineValue.slice(1, -1).split(",").map((item) => item.trim().replace(/^["']|["']$/gu, "")).filter((item) => item.length > 0);
|
|
516
|
+
}
|
|
517
|
+
if (!text.startsWith("---\n")) return [];
|
|
518
|
+
const end = text.indexOf("\n---", 4);
|
|
519
|
+
if (end === -1) return [];
|
|
520
|
+
const block = text.slice(4, end).split("\n");
|
|
521
|
+
const tools = [];
|
|
522
|
+
let inToolsBlock = false;
|
|
523
|
+
for (const line of block) {
|
|
524
|
+
if (/^tools\s*:\s*$/u.test(line)) {
|
|
525
|
+
inToolsBlock = true;
|
|
526
|
+
continue;
|
|
527
|
+
}
|
|
528
|
+
if (inToolsBlock) {
|
|
529
|
+
const itemMatch = /^\s+-\s+(.+?)\s*$/u.exec(line);
|
|
530
|
+
if (itemMatch && itemMatch[1] !== void 0) {
|
|
531
|
+
tools.push(itemMatch[1].replace(/^["']|["']$/gu, ""));
|
|
532
|
+
continue;
|
|
533
|
+
}
|
|
534
|
+
if (/^\S/u.test(line)) inToolsBlock = false;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
return tools;
|
|
538
|
+
}
|
|
539
|
+
async function collectSubagentFilesUnder(rootDir, relativeRoot) {
|
|
540
|
+
let entries;
|
|
541
|
+
try {
|
|
542
|
+
entries = await readdir(path.join(rootDir, relativeRoot), { withFileTypes: true });
|
|
543
|
+
} catch (error) {
|
|
544
|
+
if (isNodeError(error) && error.code === "ENOENT") return [];
|
|
545
|
+
throw error;
|
|
546
|
+
}
|
|
547
|
+
const results = [];
|
|
548
|
+
for (const entry of entries) {
|
|
549
|
+
if (!entry.isFile()) continue;
|
|
550
|
+
results.push(`${relativeRoot}/${entry.name}`);
|
|
551
|
+
}
|
|
552
|
+
return results.sort();
|
|
553
|
+
}
|
|
382
554
|
async function collectSkillFiles(rootDir) {
|
|
383
555
|
const files = [];
|
|
384
556
|
for (const skillRoot of SKILL_ROOTS) await collectSkillFilesUnder(rootDir, skillRoot, files);
|
|
@@ -401,10 +573,17 @@ async function collectSkillFilesUnder(rootDir, relativeRoot, files) {
|
|
|
401
573
|
async function readKnownFile(rootDir, relativePath) {
|
|
402
574
|
const safePath = safeOutputPath(relativePath);
|
|
403
575
|
if (safePath === ".env" || safePath.startsWith(".env.")) return { ok: false };
|
|
576
|
+
const absolutePath = path.join(rootDir, safePath);
|
|
577
|
+
try {
|
|
578
|
+
if ((await lstat(absolutePath)).isSymbolicLink()) return { ok: false };
|
|
579
|
+
} catch (error) {
|
|
580
|
+
if (isNodeError(error) && error.code === "ENOENT") return { ok: false };
|
|
581
|
+
throw error;
|
|
582
|
+
}
|
|
404
583
|
try {
|
|
405
584
|
return {
|
|
406
585
|
ok: true,
|
|
407
|
-
bytes: await readFile(
|
|
586
|
+
bytes: await readFile(absolutePath)
|
|
408
587
|
};
|
|
409
588
|
} catch (error) {
|
|
410
589
|
if (isNodeError(error) && error.code === "ENOENT") return { ok: false };
|
|
@@ -527,6 +706,164 @@ function decodeUtf8(bytes) {
|
|
|
527
706
|
function isNodeError(error) {
|
|
528
707
|
return error instanceof Error && "code" in error;
|
|
529
708
|
}
|
|
709
|
+
var REGION_FILE_PATHS = ["AGENTS.md", "CLAUDE.md"];
|
|
710
|
+
var LOCAL_RUNTIME_IGNORE_PATHS = [
|
|
711
|
+
".cce/",
|
|
712
|
+
".mcp.json",
|
|
713
|
+
".claude/settings.local.json",
|
|
714
|
+
".claude/worktrees/",
|
|
715
|
+
".codex/config.toml",
|
|
716
|
+
".codex/hooks.json"
|
|
717
|
+
];
|
|
718
|
+
async function checkRegionFiles(rootDir, generatedFiles, lockfile, issues) {
|
|
719
|
+
const ownershipByPath = new Map((lockfile?.outputs ?? []).map((output) => [output.path, output.ownership]));
|
|
720
|
+
for (const relativePath of REGION_FILE_PATHS) {
|
|
721
|
+
const current = await readKnownFile(rootDir, relativePath);
|
|
722
|
+
if (!current.ok) continue;
|
|
723
|
+
const bytes = Buffer.from(current.bytes);
|
|
724
|
+
const ownership = ownershipByPath.get(relativePath);
|
|
725
|
+
const allMarkers = hasAllRegionMarkers(bytes);
|
|
726
|
+
const anyMarkers = hasAnyRegionMarker(bytes);
|
|
727
|
+
const generatedFile = generatedFiles.find((file) => file.path === relativePath);
|
|
728
|
+
if (ownership === "mixed") {
|
|
729
|
+
const parsed = parseMixedFile(bytes);
|
|
730
|
+
if (!parsed.ok) {
|
|
731
|
+
const code = parsed.issues.some((item) => item.code === "duplicate-markers") ? "LINT-REGION-002" : "LINT-REGION-001";
|
|
732
|
+
issues.push(issue(code, "error", relativePath, "valid generated/manual region markers", "invalid region markers", `${relativePath} region markers are not valid for a mixed-ownership file.`, "Move or remove the file and re-run init --import --strategy regions --write."));
|
|
733
|
+
continue;
|
|
734
|
+
}
|
|
735
|
+
if (!parsed.generatedInner.toString("utf8").includes("If generated and manual instructions conflict, follow the manual project instructions unless they would weaken safety, privacy, or permission limits. Safety, privacy, and explicit deny rules always win.")) issues.push(issue("LINT-REGION-003", "warning", relativePath, "required instruction precedence text in generated region", "missing precedence text", `${relativePath} generated region is missing the required precedence sentence.`, "Re-run compile --write to refresh the generated region."));
|
|
736
|
+
continue;
|
|
737
|
+
}
|
|
738
|
+
if (anyMarkers && !allMarkers) {
|
|
739
|
+
issues.push(issue("LINT-REGION-001", "error", relativePath, "valid generated/manual region markers", "partial region markers", `${relativePath} contains partial region markers.`, "Move or remove the file and re-run init --import --strategy regions --write; the compiler will not auto-repair markers."));
|
|
740
|
+
continue;
|
|
741
|
+
}
|
|
742
|
+
if (allMarkers) {
|
|
743
|
+
const parsed = parseMixedFile(bytes);
|
|
744
|
+
if (!parsed.ok) {
|
|
745
|
+
const code = parsed.issues.some((item) => item.code === "duplicate-markers") ? "LINT-REGION-002" : "LINT-REGION-001";
|
|
746
|
+
issues.push(issue(code, "error", relativePath, "valid generated/manual region markers", "invalid region markers", `${relativePath} region markers are not valid.`, "Move or remove the file and re-run init --import --strategy regions --write."));
|
|
747
|
+
}
|
|
748
|
+
continue;
|
|
749
|
+
}
|
|
750
|
+
if (generatedFile && ownership !== "generated-owned" && !allMarkers && hasLegacyGeneratedMarker(bytes)) {
|
|
751
|
+
issues.push(issue("LINT-OWN-002", "warning", relativePath, "lockfile-owned generated file", "generated-looking file without lockfile ownership", `${relativePath} contains the legacy generated marker but is not lockfile-owned.`, "Run init --import --strategy regions --write to adopt the file into mixed ownership, or remove and re-run compile --write."));
|
|
752
|
+
continue;
|
|
753
|
+
}
|
|
754
|
+
if (generatedFile && ownership !== "generated-owned" && !allMarkers) issues.push(issue("LINT-OWN-001", "error", relativePath, "lockfile-owned or mixed ownership", "unknown ownership conflicts with generated output", `${relativePath} exists but ownership cannot be proven; the compiler will refuse to write it.`, "Run init --import --strategy regions --write to adopt the file into mixed ownership."));
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
async function checkLocalRuntimeGitignore(rootDir, issues) {
|
|
758
|
+
const gitignore = await readKnownFile(rootDir, ".gitignore");
|
|
759
|
+
const lines = gitignore.ok ? decodeUtf8(gitignore.bytes).split(/\r?\n/u).map((line) => line.trim()).filter((line) => line !== "" && !line.startsWith("#")) : [];
|
|
760
|
+
for (const recommended of LOCAL_RUNTIME_IGNORE_PATHS) {
|
|
761
|
+
if (!await pathExists(rootDir, recommended.replace(/\/$/u, ""))) continue;
|
|
762
|
+
if (!isIgnoreLinePresent(lines, recommended)) issues.push(issue("LINT-GITIGNORE-002", "warning", ".gitignore", `ignore line for ${recommended}`, "missing", `${recommended} exists locally but is not listed in .gitignore.`, "Run agent-profile init --update-gitignore --write to add recommended ignore lines."));
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
async function pathExists(rootDir, relativePath) {
|
|
766
|
+
try {
|
|
767
|
+
safeOutputPath(relativePath);
|
|
768
|
+
} catch {
|
|
769
|
+
return false;
|
|
770
|
+
}
|
|
771
|
+
try {
|
|
772
|
+
const { lstat } = await import('node:fs/promises');
|
|
773
|
+
await lstat(path.join(rootDir, relativePath));
|
|
774
|
+
return true;
|
|
775
|
+
} catch (error) {
|
|
776
|
+
if (isNodeError(error) && error.code === "ENOENT") return false;
|
|
777
|
+
throw error;
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
function isIgnoreLinePresent(lines, target) {
|
|
781
|
+
const trimmed = target.replace(/\/$/u, "");
|
|
782
|
+
return lines.some((line) => {
|
|
783
|
+
return line.replace(/^\//u, "").replace(/\/$/u, "") === trimmed;
|
|
784
|
+
});
|
|
785
|
+
}
|
|
786
|
+
async function checkForeignSkillAndSubagentCollisions(rootDir, generatedFiles, lockfile, issues) {
|
|
787
|
+
const ownedPaths = new Set((lockfile?.outputs ?? []).map((output) => output.path));
|
|
788
|
+
const generatedSkillByName = /* @__PURE__ */ new Map();
|
|
789
|
+
const generatedSubagentByName = /* @__PURE__ */ new Map();
|
|
790
|
+
const pushByName = (map, name, entry) => {
|
|
791
|
+
const list = map.get(name) ?? [];
|
|
792
|
+
list.push(entry);
|
|
793
|
+
map.set(name, list);
|
|
794
|
+
};
|
|
795
|
+
for (const file of generatedFiles) {
|
|
796
|
+
const name = parseSkillOrSubagentName(decodeUtf8(file.bytes));
|
|
797
|
+
if (!name) continue;
|
|
798
|
+
if (file.target === "codex-workflow-skills" || file.target === "claude-workflow-skills") pushByName(generatedSkillByName, name, {
|
|
799
|
+
path: file.path,
|
|
800
|
+
runtime: pathRuntime(file.path)
|
|
801
|
+
});
|
|
802
|
+
if (file.target === "claude-subagents" || file.target === "codex-subagents" || file.target === "tabnine-subagents") pushByName(generatedSubagentByName, name, {
|
|
803
|
+
path: file.path,
|
|
804
|
+
runtime: pathRuntime(file.path)
|
|
805
|
+
});
|
|
806
|
+
}
|
|
807
|
+
const skillFiles = await collectSkillFiles(rootDir);
|
|
808
|
+
for (const skillPath of skillFiles) {
|
|
809
|
+
if (ownedPaths.has(skillPath)) continue;
|
|
810
|
+
const generatedPath = generatedFiles.find((file) => file.path === skillPath);
|
|
811
|
+
const file = await readKnownFile(rootDir, skillPath);
|
|
812
|
+
if (!file.ok) continue;
|
|
813
|
+
const name = parseSkillOrSubagentName(decodeUtf8(file.bytes));
|
|
814
|
+
if (generatedPath) {
|
|
815
|
+
issues.push(issue("LINT-OWN-001", "error", skillPath, "lockfile-owned generated skill", "foreign skill at generated path", `${skillPath} exists at a generated output path but is not lockfile-owned.`, "Move or rename the existing skill, or run compile --write --force only after reviewing the diff."));
|
|
816
|
+
continue;
|
|
817
|
+
}
|
|
818
|
+
if (name && generatedSkillByName.has(name)) {
|
|
819
|
+
const others = generatedSkillByName.get(name).filter((entry) => entry.path !== skillPath);
|
|
820
|
+
if (others.length > 0) {
|
|
821
|
+
const foreignRuntime = pathRuntime(skillPath);
|
|
822
|
+
const matching = others.find((entry) => entry.runtime !== void 0 && entry.runtime === foreignRuntime);
|
|
823
|
+
const referencePath = (matching ?? others[0]).path;
|
|
824
|
+
const severity = matching ? "error" : "warning";
|
|
825
|
+
issues.push(issue("LINT-SKILL-009", severity, skillPath, "skill name distinct from generated skills", `name collides with generated ${referencePath}`, `${skillPath} declares skill name ${name}, which collides with generated ${referencePath}${matching ? ` for the ${matching.runtime} runtime` : ""}.`, matching ? `Rename the foreign skill; both files target the ${matching.runtime} runtime and would load the same name.` : "Rename the foreign skill or move it to a different name to avoid runtime collision."));
|
|
826
|
+
}
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
const subagentFiles = [];
|
|
830
|
+
for (const root of SUBAGENT_ROOTS) {
|
|
831
|
+
const files = await collectSubagentFilesUnder(rootDir, root);
|
|
832
|
+
for (const file of files) subagentFiles.push(file);
|
|
833
|
+
}
|
|
834
|
+
for (const subagentPath of subagentFiles) {
|
|
835
|
+
if (ownedPaths.has(subagentPath)) continue;
|
|
836
|
+
const generatedPath = generatedFiles.find((file) => file.path === subagentPath);
|
|
837
|
+
const file = await readKnownFile(rootDir, subagentPath);
|
|
838
|
+
if (!file.ok) continue;
|
|
839
|
+
const name = parseSkillOrSubagentName(decodeUtf8(file.bytes));
|
|
840
|
+
if (generatedPath) {
|
|
841
|
+
issues.push(issue("LINT-OWN-001", "error", subagentPath, "lockfile-owned generated subagent", "foreign subagent at generated path", `${subagentPath} exists at a generated output path but is not lockfile-owned.`, "Move or rename the existing subagent, or run compile --write --force only after reviewing the diff."));
|
|
842
|
+
continue;
|
|
843
|
+
}
|
|
844
|
+
if (name && generatedSubagentByName.has(name)) {
|
|
845
|
+
const others = generatedSubagentByName.get(name).filter((entry) => entry.path !== subagentPath);
|
|
846
|
+
if (others.length > 0) {
|
|
847
|
+
const foreignRuntime = pathRuntime(subagentPath);
|
|
848
|
+
const matching = others.find((entry) => entry.runtime !== void 0 && entry.runtime === foreignRuntime);
|
|
849
|
+
const referencePath = (matching ?? others[0]).path;
|
|
850
|
+
const severity = matching ? "error" : "warning";
|
|
851
|
+
issues.push(issue("LINT-SUBAGENT-009", severity, subagentPath, "subagent name distinct from generated subagents", `name collides with generated ${referencePath}`, `${subagentPath} declares subagent name ${name}, which collides with generated ${referencePath}${matching ? ` for the ${matching.runtime} runtime` : ""}.`, matching ? `Rename the foreign subagent; both files target the ${matching.runtime} runtime and would load the same name.` : "Rename the foreign subagent to avoid runtime collision."));
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
function pathRuntime(filePath) {
|
|
857
|
+
if (filePath.startsWith(".agents/skills/") || filePath.startsWith(".codex/agents/")) return "codex";
|
|
858
|
+
if (filePath.startsWith(".claude/skills/") || filePath.startsWith(".claude/agents/")) return "claude";
|
|
859
|
+
if (filePath.startsWith(".tabnine/agent/agents/")) return "tabnine";
|
|
860
|
+
}
|
|
861
|
+
function parseSkillOrSubagentName(text) {
|
|
862
|
+
const fm = parseMarkdownFrontmatter(text);
|
|
863
|
+
if (typeof fm.name === "string" && fm.name.length > 0) return fm.name;
|
|
864
|
+
const tomlMatch = /^\s*name\s*=\s*"([^"]+)"/mu.exec(text);
|
|
865
|
+
if (tomlMatch && tomlMatch[1]) return tomlMatch[1];
|
|
866
|
+
}
|
|
530
867
|
|
|
531
868
|
export { runDoctor as r };
|
|
532
|
-
//# sourceMappingURL=src3-
|
|
869
|
+
//# sourceMappingURL=src3-BXch_OaJ.js.map
|