@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,180 @@
|
|
|
1
|
+
import { f as computeFileEtag, p as parseProfileYaml, d as deriveEffectivePermissions, n as normalizeSafety, h as validateProfileValue, j as renderProfileYaml, a as containsSecretLikeLiteral } from './projectContext-fk5wtjwg.js';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { diffLines, createTwoFilesPatch } from 'diff';
|
|
5
|
+
|
|
6
|
+
//#region src/lib/server/profileApiHelpers.ts
|
|
7
|
+
/**
|
|
8
|
+
* Shared helpers for the Phase 8 profile API routes:
|
|
9
|
+
* GET /api/profile
|
|
10
|
+
* POST /api/profile/plan
|
|
11
|
+
* POST /api/profile/apply
|
|
12
|
+
*/
|
|
13
|
+
var PROFILE_FILENAME = "ai-profile.yaml";
|
|
14
|
+
var MAX_PAYLOAD_BYTES = 128 * 1024;
|
|
15
|
+
var UTF8_DECODER = new TextDecoder("utf-8", { fatal: true });
|
|
16
|
+
async function readDiskProfile(rootDir) {
|
|
17
|
+
const profilePath = path.join(rootDir, PROFILE_FILENAME);
|
|
18
|
+
let bytes;
|
|
19
|
+
try {
|
|
20
|
+
bytes = await readFile(profilePath);
|
|
21
|
+
} catch (err) {
|
|
22
|
+
if (isNodeError(err) && err.code === "ENOENT") return {
|
|
23
|
+
ok: false,
|
|
24
|
+
reason: "not_found",
|
|
25
|
+
issues: [],
|
|
26
|
+
unsupportedEditing: false
|
|
27
|
+
};
|
|
28
|
+
throw err;
|
|
29
|
+
}
|
|
30
|
+
const source = bytes.toString("utf8");
|
|
31
|
+
const etag = computeFileEtag(bytes);
|
|
32
|
+
const result = parseProfileYaml(source, { sourcePath: PROFILE_FILENAME });
|
|
33
|
+
if (!result.ok) {
|
|
34
|
+
const hasUnknown = result.issues.some((i) => i.code === "schema_validation_error" && i.expected === "no additional properties");
|
|
35
|
+
return {
|
|
36
|
+
ok: false,
|
|
37
|
+
reason: "invalid",
|
|
38
|
+
issues: result.issues,
|
|
39
|
+
unsupportedEditing: hasUnknown,
|
|
40
|
+
etag
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
ok: true,
|
|
45
|
+
bytes,
|
|
46
|
+
etag,
|
|
47
|
+
source,
|
|
48
|
+
profile: result.profile,
|
|
49
|
+
safety: normalizeSafety(result.profile),
|
|
50
|
+
effectivePermissions: deriveEffectivePermissions(result.profile),
|
|
51
|
+
unsupportedEditing: false
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
async function readJsonRequestBody(request, maxBytes = MAX_PAYLOAD_BYTES) {
|
|
55
|
+
const contentLengthHeader = request.headers.get("content-length");
|
|
56
|
+
if (contentLengthHeader !== null) {
|
|
57
|
+
const contentLength = Number(contentLengthHeader);
|
|
58
|
+
if (!Number.isFinite(contentLength) || contentLength < 0) return {
|
|
59
|
+
ok: false,
|
|
60
|
+
status: 400,
|
|
61
|
+
error: "invalid_request",
|
|
62
|
+
message: "Invalid content-length header."
|
|
63
|
+
};
|
|
64
|
+
if (contentLength > maxBytes) return {
|
|
65
|
+
ok: false,
|
|
66
|
+
status: 413,
|
|
67
|
+
error: "payload_too_large"
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const bytes = new Uint8Array(await request.arrayBuffer());
|
|
71
|
+
if (bytes.byteLength > maxBytes) return {
|
|
72
|
+
ok: false,
|
|
73
|
+
status: 413,
|
|
74
|
+
error: "payload_too_large"
|
|
75
|
+
};
|
|
76
|
+
if (bytes.includes(0)) return {
|
|
77
|
+
ok: false,
|
|
78
|
+
status: 400,
|
|
79
|
+
error: "invalid_encoding",
|
|
80
|
+
message: "Request body contains a NUL byte."
|
|
81
|
+
};
|
|
82
|
+
let text;
|
|
83
|
+
try {
|
|
84
|
+
text = UTF8_DECODER.decode(bytes);
|
|
85
|
+
} catch {
|
|
86
|
+
return {
|
|
87
|
+
ok: false,
|
|
88
|
+
status: 400,
|
|
89
|
+
error: "invalid_encoding",
|
|
90
|
+
message: "Request body is not valid UTF-8."
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
return {
|
|
95
|
+
ok: true,
|
|
96
|
+
body: JSON.parse(text)
|
|
97
|
+
};
|
|
98
|
+
} catch {
|
|
99
|
+
return {
|
|
100
|
+
ok: false,
|
|
101
|
+
status: 400,
|
|
102
|
+
error: "invalid_request",
|
|
103
|
+
message: "Body is not valid JSON."
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function validateCandidate(candidate) {
|
|
108
|
+
const result = validateProfileValue(candidate);
|
|
109
|
+
if (!result.ok) return {
|
|
110
|
+
ok: false,
|
|
111
|
+
reason: "invalid",
|
|
112
|
+
issues: result.issues
|
|
113
|
+
};
|
|
114
|
+
const nulPaths = findNulStringPaths(result.profile);
|
|
115
|
+
if (nulPaths.length > 0) return {
|
|
116
|
+
ok: false,
|
|
117
|
+
reason: "invalid_encoding",
|
|
118
|
+
paths: nulPaths
|
|
119
|
+
};
|
|
120
|
+
const secretPaths = findSecretLikePaths(result.profile);
|
|
121
|
+
if (secretPaths.length > 0) return {
|
|
122
|
+
ok: false,
|
|
123
|
+
reason: "secret_like",
|
|
124
|
+
paths: secretPaths
|
|
125
|
+
};
|
|
126
|
+
const yaml = renderProfileYaml(result.profile);
|
|
127
|
+
return {
|
|
128
|
+
ok: true,
|
|
129
|
+
yaml,
|
|
130
|
+
etag: computeFileEtag(Buffer.from(yaml, "utf8"))
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
function findNulStringPaths(profile) {
|
|
134
|
+
const paths = [];
|
|
135
|
+
if (profile.profile.name.includes("\0")) paths.push("/profile/name");
|
|
136
|
+
if (profile.profile.description.includes("\0")) paths.push("/profile/description");
|
|
137
|
+
for (const [i, lang] of profile.stack.languages.entries()) if (lang.includes("\0")) paths.push(`/stack/languages/${i}`);
|
|
138
|
+
for (const [i, fw] of profile.stack.frameworks.entries()) if (fw.includes("\0")) paths.push(`/stack/frameworks/${i}`);
|
|
139
|
+
for (const [i, pm] of profile.stack.packageManagers.entries()) if (pm.includes("\0")) paths.push(`/stack/packageManagers/${i}`);
|
|
140
|
+
for (const [i, t] of profile.stack.testing.entries()) if (t.includes("\0")) paths.push(`/stack/testing/${i}`);
|
|
141
|
+
return paths;
|
|
142
|
+
}
|
|
143
|
+
function findSecretLikePaths(profile) {
|
|
144
|
+
const paths = [];
|
|
145
|
+
if (containsSecretLikeLiteral(profile.profile.name)) paths.push("/profile/name");
|
|
146
|
+
if (containsSecretLikeLiteral(profile.profile.description)) paths.push("/profile/description");
|
|
147
|
+
for (const [i, lang] of profile.stack.languages.entries()) if (containsSecretLikeLiteral(lang)) paths.push(`/stack/languages/${i}`);
|
|
148
|
+
for (const [i, fw] of profile.stack.frameworks.entries()) if (containsSecretLikeLiteral(fw)) paths.push(`/stack/frameworks/${i}`);
|
|
149
|
+
for (const [i, pm] of profile.stack.packageManagers.entries()) if (containsSecretLikeLiteral(pm)) paths.push(`/stack/packageManagers/${i}`);
|
|
150
|
+
for (const [i, t] of profile.stack.testing.entries()) if (containsSecretLikeLiteral(t)) paths.push(`/stack/testing/${i}`);
|
|
151
|
+
return paths;
|
|
152
|
+
}
|
|
153
|
+
function computeProfileDiff(oldText, newText) {
|
|
154
|
+
if (oldText === newText) return {
|
|
155
|
+
text: "",
|
|
156
|
+
added: 0,
|
|
157
|
+
removed: 0,
|
|
158
|
+
changed: false
|
|
159
|
+
};
|
|
160
|
+
let added = 0;
|
|
161
|
+
let removed = 0;
|
|
162
|
+
for (const change of diffLines(oldText, newText)) if (change.added) added += change.count ?? countLines(change.value);
|
|
163
|
+
else if (change.removed) removed += change.count ?? countLines(change.value);
|
|
164
|
+
return {
|
|
165
|
+
text: createTwoFilesPatch(PROFILE_FILENAME, PROFILE_FILENAME, oldText, newText, "", "", { context: 3 }),
|
|
166
|
+
added,
|
|
167
|
+
removed,
|
|
168
|
+
changed: true
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function countLines(value) {
|
|
172
|
+
if (value.length === 0) return 0;
|
|
173
|
+
return value.endsWith("\n") ? value.slice(0, -1).split("\n").length : value.split("\n").length;
|
|
174
|
+
}
|
|
175
|
+
function isNodeError(err) {
|
|
176
|
+
return err instanceof Error && "code" in err;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export { readJsonRequestBody as a, computeProfileDiff as c, readDiskProfile as r, validateCandidate as v };
|
|
180
|
+
//# sourceMappingURL=profileApiHelpers-CUuQdn1G.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profileApiHelpers-CUuQdn1G.js","sources":["../../../.svelte-kit/adapter-node/chunks/profileApiHelpers.js"],"sourcesContent":["import { _ as validateProfileValue, a as deriveEffectivePermissions, g as renderProfileYaml, h as parseProfileYaml, p as normalizeSafety, t as containsSecretLikeLiteral } from \"./src.js\";\nimport { o as computeFileEtag } from \"./projectContext.js\";\nimport { readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createTwoFilesPatch, diffLines } from \"diff\";\n//#region src/lib/server/profileApiHelpers.ts\n/**\n* Shared helpers for the Phase 8 profile API routes:\n* GET /api/profile\n* POST /api/profile/plan\n* POST /api/profile/apply\n*/\nvar PROFILE_FILENAME = \"ai-profile.yaml\";\nvar MAX_PAYLOAD_BYTES = 128 * 1024;\nvar UTF8_DECODER = new TextDecoder(\"utf-8\", { fatal: true });\nasync function readDiskProfile(rootDir) {\n\tconst profilePath = path.join(rootDir, PROFILE_FILENAME);\n\tlet bytes;\n\ttry {\n\t\tbytes = await readFile(profilePath);\n\t} catch (err) {\n\t\tif (isNodeError(err) && err.code === \"ENOENT\") return {\n\t\t\tok: false,\n\t\t\treason: \"not_found\",\n\t\t\tissues: [],\n\t\t\tunsupportedEditing: false\n\t\t};\n\t\tthrow err;\n\t}\n\tconst source = bytes.toString(\"utf8\");\n\tconst etag = computeFileEtag(bytes);\n\tconst result = parseProfileYaml(source, { sourcePath: PROFILE_FILENAME });\n\tif (!result.ok) {\n\t\tconst hasUnknown = result.issues.some((i) => i.code === \"schema_validation_error\" && i.expected === \"no additional properties\");\n\t\treturn {\n\t\t\tok: false,\n\t\t\treason: \"invalid\",\n\t\t\tissues: result.issues,\n\t\t\tunsupportedEditing: hasUnknown,\n\t\t\tetag\n\t\t};\n\t}\n\treturn {\n\t\tok: true,\n\t\tbytes,\n\t\tetag,\n\t\tsource,\n\t\tprofile: result.profile,\n\t\tsafety: normalizeSafety(result.profile),\n\t\teffectivePermissions: deriveEffectivePermissions(result.profile),\n\t\tunsupportedEditing: false\n\t};\n}\nasync function readJsonRequestBody(request, maxBytes = MAX_PAYLOAD_BYTES) {\n\tconst contentLengthHeader = request.headers.get(\"content-length\");\n\tif (contentLengthHeader !== null) {\n\t\tconst contentLength = Number(contentLengthHeader);\n\t\tif (!Number.isFinite(contentLength) || contentLength < 0) return {\n\t\t\tok: false,\n\t\t\tstatus: 400,\n\t\t\terror: \"invalid_request\",\n\t\t\tmessage: \"Invalid content-length header.\"\n\t\t};\n\t\tif (contentLength > maxBytes) return {\n\t\t\tok: false,\n\t\t\tstatus: 413,\n\t\t\terror: \"payload_too_large\"\n\t\t};\n\t}\n\tconst bytes = new Uint8Array(await request.arrayBuffer());\n\tif (bytes.byteLength > maxBytes) return {\n\t\tok: false,\n\t\tstatus: 413,\n\t\terror: \"payload_too_large\"\n\t};\n\tif (bytes.includes(0)) return {\n\t\tok: false,\n\t\tstatus: 400,\n\t\terror: \"invalid_encoding\",\n\t\tmessage: \"Request body contains a NUL byte.\"\n\t};\n\tlet text;\n\ttry {\n\t\ttext = UTF8_DECODER.decode(bytes);\n\t} catch {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tstatus: 400,\n\t\t\terror: \"invalid_encoding\",\n\t\t\tmessage: \"Request body is not valid UTF-8.\"\n\t\t};\n\t}\n\ttry {\n\t\treturn {\n\t\t\tok: true,\n\t\t\tbody: JSON.parse(text)\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tstatus: 400,\n\t\t\terror: \"invalid_request\",\n\t\t\tmessage: \"Body is not valid JSON.\"\n\t\t};\n\t}\n}\nfunction validateCandidate(candidate) {\n\tconst result = validateProfileValue(candidate);\n\tif (!result.ok) return {\n\t\tok: false,\n\t\treason: \"invalid\",\n\t\tissues: result.issues\n\t};\n\tconst nulPaths = findNulStringPaths(result.profile);\n\tif (nulPaths.length > 0) return {\n\t\tok: false,\n\t\treason: \"invalid_encoding\",\n\t\tpaths: nulPaths\n\t};\n\tconst secretPaths = findSecretLikePaths(result.profile);\n\tif (secretPaths.length > 0) return {\n\t\tok: false,\n\t\treason: \"secret_like\",\n\t\tpaths: secretPaths\n\t};\n\tconst yaml = renderProfileYaml(result.profile);\n\treturn {\n\t\tok: true,\n\t\tyaml,\n\t\tetag: computeFileEtag(Buffer.from(yaml, \"utf8\"))\n\t};\n}\nfunction findNulStringPaths(profile) {\n\tconst paths = [];\n\tif (profile.profile.name.includes(\"\\0\")) paths.push(\"/profile/name\");\n\tif (profile.profile.description.includes(\"\\0\")) paths.push(\"/profile/description\");\n\tfor (const [i, lang] of profile.stack.languages.entries()) if (lang.includes(\"\\0\")) paths.push(`/stack/languages/${i}`);\n\tfor (const [i, fw] of profile.stack.frameworks.entries()) if (fw.includes(\"\\0\")) paths.push(`/stack/frameworks/${i}`);\n\tfor (const [i, pm] of profile.stack.packageManagers.entries()) if (pm.includes(\"\\0\")) paths.push(`/stack/packageManagers/${i}`);\n\tfor (const [i, t] of profile.stack.testing.entries()) if (t.includes(\"\\0\")) paths.push(`/stack/testing/${i}`);\n\treturn paths;\n}\nfunction findSecretLikePaths(profile) {\n\tconst paths = [];\n\tif (containsSecretLikeLiteral(profile.profile.name)) paths.push(\"/profile/name\");\n\tif (containsSecretLikeLiteral(profile.profile.description)) paths.push(\"/profile/description\");\n\tfor (const [i, lang] of profile.stack.languages.entries()) if (containsSecretLikeLiteral(lang)) paths.push(`/stack/languages/${i}`);\n\tfor (const [i, fw] of profile.stack.frameworks.entries()) if (containsSecretLikeLiteral(fw)) paths.push(`/stack/frameworks/${i}`);\n\tfor (const [i, pm] of profile.stack.packageManagers.entries()) if (containsSecretLikeLiteral(pm)) paths.push(`/stack/packageManagers/${i}`);\n\tfor (const [i, t] of profile.stack.testing.entries()) if (containsSecretLikeLiteral(t)) paths.push(`/stack/testing/${i}`);\n\treturn paths;\n}\nfunction computeProfileDiff(oldText, newText) {\n\tif (oldText === newText) return {\n\t\ttext: \"\",\n\t\tadded: 0,\n\t\tremoved: 0,\n\t\tchanged: false\n\t};\n\tlet added = 0;\n\tlet removed = 0;\n\tfor (const change of diffLines(oldText, newText)) if (change.added) added += change.count ?? countLines(change.value);\n\telse if (change.removed) removed += change.count ?? countLines(change.value);\n\treturn {\n\t\ttext: createTwoFilesPatch(PROFILE_FILENAME, PROFILE_FILENAME, oldText, newText, \"\", \"\", { context: 3 }),\n\t\tadded,\n\t\tremoved,\n\t\tchanged: true\n\t};\n}\nfunction countLines(value) {\n\tif (value.length === 0) return 0;\n\treturn value.endsWith(\"\\n\") ? value.slice(0, -1).split(\"\\n\").length : value.split(\"\\n\").length;\n}\nfunction isNodeError(err) {\n\treturn err instanceof Error && \"code\" in err;\n}\n//#endregion\nexport { validateCandidate as i, readDiskProfile as n, readJsonRequestBody as r, computeProfileDiff as t };\n"],"names":[],"mappings":"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"}
|