dorkos 0.126.0 → 0.126.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/cli.js +1226 -561
- package/dist/browser/native/package-manifest.json +1 -1
- package/dist/browser/source-manifest.json +1 -1
- package/dist/client/assets/{AboutPage-2c9n8B32.js → AboutPage-DNd3mwur.js} +1 -1
- package/dist/client/assets/{ActivityErrorState-muwC_jif.js → ActivityErrorState-BlEsDhu6.js} +1 -1
- package/dist/client/assets/{ActivityPage-2aUz3zv0.js → ActivityPage-pJWfDAtq.js} +1 -1
- package/dist/client/assets/{ActivityRow-nQBqDCak.js → ActivityRow-DcMyqIbt.js} +1 -1
- package/dist/client/assets/{AdapterIcon-ChpyilnO.js → AdapterIcon-DQGwQ4aw.js} +1 -1
- package/dist/client/assets/{AdapterSetupWizard-DRKQp5Gh.js → AdapterSetupWizard-ClTTFSN8.js} +2 -2
- package/dist/client/assets/{AgentOptionRow-CeVPhvTq.js → AgentOptionRow-CHrQXa04.js} +1 -1
- package/dist/client/assets/{AgentPicker-D8YX1P_q.js → AgentPicker-BlEBEkwu.js} +1 -1
- package/dist/client/assets/{AgentRequestCard-refCLvuV.js → AgentRequestCard-MwbVsmZC.js} +3 -3
- package/dist/client/assets/{AppearancePage-BDTIp3j0.js → AppearancePage-C2aq_s3x.js} +1 -1
- package/dist/client/assets/ApplyToOverridesDialog-DZOUEUaq.js +1 -0
- package/dist/client/assets/{AttentionSignalRow-Dn4rP542.js → AttentionSignalRow-BlaPCr09.js} +1 -1
- package/dist/client/assets/{BaseTanStackRouterDevtoolsPanel-B-iktbLX-B0sy0nRk.js → BaseTanStackRouterDevtoolsPanel-B-iktbLX-DdbD6Zvu.js} +1 -1
- package/dist/client/assets/{BindingDialog-DMYB-vWm.js → BindingDialog-Cx-Ivbp4.js} +1 -1
- package/dist/client/assets/{BlintzCanvas-D9ZLEDXc.js → BlintzCanvas-Dk4R-tRN.js} +3 -3
- package/dist/client/assets/{CanvasCsvContent-DMqGpNWm.js → CanvasCsvContent-B8JYLp4U.js} +1 -1
- package/dist/client/assets/{CanvasFileContent-Bxhc86lv.js → CanvasFileContent-DAjXJnQu.js} +2 -2
- package/dist/client/assets/{CanvasModel3dContent-D783Ql7m.js → CanvasModel3dContent-DdF3BtnR.js} +2 -2
- package/dist/client/assets/{ChannelComposer-BNlD-d2W.js → ChannelComposer-R4MqXxIw.js} +5 -5
- package/dist/client/assets/{ChatAppsOff-eRAfqzJR.js → ChatAppsOff-lfRbITbe.js} +1 -1
- package/dist/client/assets/{CodeMirrorDiff-CqEUAG6G.js → CodeMirrorDiff-q-jovmzx.js} +1 -1
- package/dist/client/assets/{CodeMirrorEditor-BM1ANude.js → CodeMirrorEditor-C7xgL8qE.js} +1 -1
- package/dist/client/assets/{CommitmentList-C3QvbbGF.js → CommitmentList-gaA4uwIz.js} +1 -1
- package/dist/client/assets/{CommitmentsPage-bmqKNd-Z.js → CommitmentsPage-BJSRJ2-C.js} +1 -1
- package/dist/client/assets/{ComputerResourceView-78falOZG.js → ComputerResourceView-CrT_C0XS.js} +1 -1
- package/dist/client/assets/{ComputerViewer-DZ2RiDbn.js → ComputerViewer-DnD5bw95.js} +1 -1
- package/dist/client/assets/{ConnectionAccessLists-CXsNyR4U.js → ConnectionAccessLists-B0ZoSb-o.js} +1 -1
- package/dist/client/assets/{ConnectionsPage-bpkRfRRK.js → ConnectionsPage-D0UCC0lO.js} +1 -1
- package/dist/client/assets/{ConventionPage-rYtICYjS.js → ConventionPage-BN6W7-LW.js} +1 -1
- package/dist/client/assets/{ExtensionPageRoute-DXTqUrR4.js → ExtensionPageRoute-BiTCSGKw.js} +2 -2
- package/dist/client/assets/{FloatingTanStackRouterDevtools-CqogiFob-CCNB3_Gb.js → FloatingTanStackRouterDevtools-CqogiFob-Bodk_Y7V.js} +1 -1
- package/dist/client/assets/{ForwardConsentHost-BfVnJ6oD.js → ForwardConsentHost-CgfhSAU6.js} +1 -1
- package/dist/client/assets/HandlePage-DCG-qQFm.js +1 -0
- package/dist/client/assets/{HeartbeatPage-DdAfcR81.js → HeartbeatPage-D1G1-DHk.js} +1 -1
- package/dist/client/assets/{KeyEntry-CR7GBqXf.js → KeyEntry-4udAjn0w.js} +1 -1
- package/dist/client/assets/{LexicalField-RAoub3wq.js → LexicalField-gOrkh_4N.js} +1 -1
- package/dist/client/assets/{ManagesPage-CEhYj9ov.js → ManagesPage-B-RoT8ya.js} +1 -1
- package/dist/client/assets/{Marketplace-DtxHDbF4.js → Marketplace-B_NBPebW.js} +1 -1
- package/dist/client/assets/{MarketplaceSourcesView-CSFvFtV_.js → MarketplaceSourcesView-DY3WqXwE.js} +1 -1
- package/dist/client/assets/{McpAppFrame-1mPdRK9p.js → McpAppFrame-D7EnUa4z.js} +2 -2
- package/dist/client/assets/{McpSigninBody--HfjMnE1.js → McpSigninBody-BUUEs-bT.js} +1 -1
- package/dist/client/assets/{Model3dViewer-BT2SY67i.js → Model3dViewer-cLheCoqc.js} +1 -1
- package/dist/client/assets/NamePage-CYVVUDVS.js +1 -0
- package/dist/client/assets/{NewDirectMessageMenu-QUtJTzKI.js → NewDirectMessageMenu-ok_-eb2s.js} +1 -1
- package/dist/client/assets/{NotificationsPage-D3fleW0i.js → NotificationsPage-D-8cloSV.js} +1 -1
- package/dist/client/assets/{OpenMeshSwitch-8WEn0WrA.js → OpenMeshSwitch-D_qdw4sU.js} +2 -2
- package/dist/client/assets/OperatorIdentityForm-ClEW_TUR.js +1 -0
- package/dist/client/assets/{PermissionHistory-5stLHBu8.js → PermissionHistory-CYOX0EOM.js} +1 -1
- package/dist/client/assets/PermissionsPage-ah-JDHZr.js +1 -0
- package/dist/client/assets/{PersonalityPopover-DIbsJ6HP.js → PersonalityPopover-Ciu5HC-v.js} +1 -1
- package/dist/client/assets/PhotoPage-NO6Yrpi-.js +1 -0
- package/dist/client/assets/{PreviewRefusedNotice-CjT7jQ45.js → PreviewRefusedNotice-BxhPcov8.js} +1 -1
- package/dist/client/assets/{ProfileFields-gZNaFBow.js → ProfileFields-BuIUDvpL.js} +1 -1
- package/dist/client/assets/{ProfilePanelContainer-DYf7L8xJ.js → ProfilePanelContainer-BFeuTypW.js} +1 -1
- package/dist/client/assets/{ProfileRolePicker-DclYXFSP.js → ProfileRolePicker-Be4vB80d.js} +1 -1
- package/dist/client/assets/{PromptSuggestionChips-k9HolS90.js → PromptSuggestionChips-bZ_zHQ5j.js} +1 -1
- package/dist/client/assets/{ReportsToPopover-Bh5KrFbJ.js → ReportsToPopover-BqVUWSAd.js} +1 -1
- package/dist/client/assets/{RoomSurface-32U7Wl6Z.js → RoomSurface-DSjUeoAV.js} +1 -1
- package/dist/client/assets/{RoomsPage-sdMZgHla.js → RoomsPage-YtoZPygh.js} +1 -1
- package/dist/client/assets/{RunsOnPopover-B5_Jz7ir.js → RunsOnPopover-BxTUZpOj.js} +1 -1
- package/dist/client/assets/{RuntimeConnectFlow-C_6ozpAK.js → RuntimeConnectFlow-DdhsdAJI.js} +1 -1
- package/dist/client/assets/{RuntimeSetupDialog-BDvzruM4.js → RuntimeSetupDialog-BrSBwG4u.js} +1 -1
- package/dist/client/assets/{SeenDevices-CZ--8ljN.js → SeenDevices-CJ4v3o5k.js} +2 -2
- package/dist/client/assets/{SessionsPage-BKyrJh1O.js → SessionsPage-TT3p1ADx.js} +1 -1
- package/dist/client/assets/{SettingsDialog-E5hPag3F.js → SettingsDialog-CV24vMhr.js} +4 -4
- package/dist/client/assets/{SkillsPage-BeL6zfgw.js → SkillsPage-DMoOe_ed.js} +1 -1
- package/dist/client/assets/{TaskDialogWrapper-B-IP5hYv.js → TaskDialogWrapper-Df3Su6Ao.js} +1 -1
- package/dist/client/assets/{TasksEmptyState-BcftWVbk.js → TasksEmptyState-Bno8iZfM.js} +2 -2
- package/dist/client/assets/{TasksPage-CmroTI1v.js → TasksPage-Cml1MQA0.js} +1 -1
- package/dist/client/assets/{TeamComputerEntry-DbfoZrZz.js → TeamComputerEntry-DqZRmbw6.js} +1 -1
- package/dist/client/assets/{ToolsPage-h-PS45fZ.js → ToolsPage-7ltzJ0Tl.js} +1 -1
- package/dist/client/assets/{TopologyGraph-Bk_0y0Yy.js → TopologyGraph-B2LvNaci.js} +1 -1
- package/dist/client/assets/{TourHost-D4La-1-E.js → TourHost-D0yftrMH.js} +1 -1
- package/dist/client/assets/{UnlinkDialog-CWd4fhT4.js → UnlinkDialog-Bo_AjY1w.js} +1 -1
- package/dist/client/assets/{UnreadDivider-Bvg9QLn9.js → UnreadDivider-WmPtKB4_.js} +1 -1
- package/dist/client/assets/{WidgetErrorCard-DictdlWO.js → WidgetErrorCard-CPcqdG0j.js} +6 -6
- package/dist/client/assets/WithheldExtensionsNotice-pF93YZXc.js +1 -0
- package/dist/client/assets/{WorkView-DxThzZ0w.js → WorkView-hgkQKS3s.js} +1 -1
- package/dist/client/assets/_shell-BrV7uqZF.js +80 -0
- package/dist/client/assets/{_shell._home-CBNsPEH4.js → _shell._home-geuB-5H5.js} +1 -1
- package/dist/client/assets/_shell._home.activity-DPVZ1nh6.js +1 -0
- package/dist/client/assets/_shell._home.index-TWvjPAWy.js +3 -0
- package/dist/client/assets/_shell._home.tasks-ZXMaDkUK.js +1 -0
- package/dist/client/assets/{_shell._home.workspaces-3R3VtH7x.js → _shell._home.workspaces-Df9guoYs.js} +1 -1
- package/dist/client/assets/{_shell.channels-DRslcaiA.js → _shell.channels-Bpp1mkMp.js} +1 -1
- package/dist/client/assets/{_shell.connections-BPQxNUPD.js → _shell.connections-BPwFAyOF.js} +1 -1
- package/dist/client/assets/{_shell.feedback-requests-DkXEk3qm.js → _shell.feedback-requests-BpBQUL2J.js} +2 -2
- package/dist/client/assets/_shell.marketplace-cDEjeXV8.js +1 -0
- package/dist/client/assets/_shell.marketplace_.sources-C8vj4_eL.js +1 -0
- package/dist/client/assets/_shell.session-CsYuj8kc.js +1 -0
- package/dist/client/assets/{_shell.team-CZu-l34d.js → _shell.team-IhRAcCx5.js} +3 -3
- package/dist/client/assets/{_shell.threads-Cz-EZQXr.js → _shell.threads-g5dMzDb-.js} +1 -1
- package/dist/client/assets/_shell.x._extensionId-Cdkx4eoj.js +1 -0
- package/dist/client/assets/_shell.x._extensionId_._-Cdkx4eoj.js +1 -0
- package/dist/client/assets/{abnfDiagram-WEYOIA3C-4hI8_uRi.js → abnfDiagram-WEYOIA3C-DMyEQ0uA.js} +1 -1
- package/dist/client/assets/{access-copy-BegDAoeR.js → access-copy-BPHkp17T.js} +1 -1
- package/dist/client/assets/{arc-DgydwPM5.js → arc-Bick8t6f.js} +1 -1
- package/dist/client/assets/{architectureDiagram-ZHVYKT53-4kexDkbn.js → architectureDiagram-ZHVYKT53-RFf4UrPQ.js} +1 -1
- package/dist/client/assets/{banner-CYV5jQI0.js → banner-7ifL3s-E.js} +1 -1
- package/dist/client/assets/{blockDiagram-RJAE7QA3-BUP4L5_m.js → blockDiagram-RJAE7QA3-D1AK_MVZ.js} +1 -1
- package/dist/client/assets/{c4Diagram-XDPPPE54-B4HK3S3o.js → c4Diagram-XDPPPE54-ljhZv1XJ.js} +1 -1
- package/dist/client/assets/{card-6VNSI3kT.js → card-Dv_Aomu3.js} +1 -1
- package/dist/client/assets/channel-rtfAMlVl.js +1 -0
- package/dist/client/assets/{chunk-2E7WHVMD-Bhw5hCVI.js → chunk-2E7WHVMD-DbW34T1y.js} +1 -1
- package/dist/client/assets/{chunk-2Q5K7J3B-CeUgfCvO.js → chunk-2Q5K7J3B-2rza71Au.js} +1 -1
- package/dist/client/assets/{chunk-4EMNKR2T-DqSZunXx.js → chunk-4EMNKR2T-B4wdt-9S.js} +1 -1
- package/dist/client/assets/{chunk-55XCU76K-Bigp9-bU.js → chunk-55XCU76K-CdGphgDA.js} +1 -1
- package/dist/client/assets/{chunk-5VM5RSS4-DF1L8DrH.js → chunk-5VM5RSS4-B4YPDQYw.js} +1 -1
- package/dist/client/assets/{chunk-JWPE2WC7-lcFap_43.js → chunk-JWPE2WC7-CwQLcazz.js} +1 -1
- package/dist/client/assets/{chunk-VQ5W62QI-Bgmsy9NF.js → chunk-VQ5W62QI-B73o-HC8.js} +1 -1
- package/dist/client/assets/{chunk-XXDRQBXY-DFFzLm_u.js → chunk-XXDRQBXY-Cd57QkHJ.js} +1 -1
- package/dist/client/assets/{chunk-ZCHMQSOR-B4aJwBdo.js → chunk-ZCHMQSOR-BYXpbBGk.js} +2 -2
- package/dist/client/assets/{classDiagram-v2-4MYWR3UA-BdUAMGnS.js → classDiagram-v2-4MYWR3UA-Cp5KSk7m.js} +1 -1
- package/dist/client/assets/{command-Dz2pZLle.js → command-8GHnkf0M.js} +1 -1
- package/dist/client/assets/{cose-bilkent-JH36ORCC-BdJxQmWe.js → cose-bilkent-JH36ORCC-BQ2-jSL1.js} +1 -1
- package/dist/client/assets/{cpu-CjKJ8pVl.js → cpu-DlVEjqG9.js} +1 -1
- package/dist/client/assets/{cynefin-EF2NZ3EQ-BvnDWKe0.js → cynefin-EF2NZ3EQ-BipxprT2.js} +1 -1
- package/dist/client/assets/{cynefinDiagram-WF24UDRP-DKL8UyvS.js → cynefinDiagram-WF24UDRP-BzzsLOi7.js} +1 -1
- package/dist/client/assets/{dagre-NK4GIZVX-CCuJpxlY.js → dagre-NK4GIZVX-Xv2f8ipe.js} +1 -1
- package/dist/client/assets/{diagram-CBK3MWTC-C1jeuv8r.js → diagram-CBK3MWTC-DeSTMYz_.js} +1 -1
- package/dist/client/assets/{diagram-I5XIIV2D-CSnTyOU0.js → diagram-I5XIIV2D-BY785yX3.js} +1 -1
- package/dist/client/assets/{diagram-ODIL2UCW-9w6q1YKi.js → diagram-ODIL2UCW-BYlRM0z6.js} +1 -1
- package/dist/client/assets/{diagram-PFBEJUXE-BMFBmD0P.js → diagram-PFBEJUXE-Dy4p9mkx.js} +1 -1
- package/dist/client/assets/{diagram-RJA3I4VV-D9Utl6qX.js → diagram-RJA3I4VV-Dq8FUki2.js} +1 -1
- package/dist/client/assets/{diagram-TYUNFSNR-u_ogc51l.js → diagram-TYUNFSNR-Dzm6245A.js} +1 -1
- package/dist/client/assets/{ebnfDiagram-V4P3TTPT-Bg_smbFH.js → ebnfDiagram-V4P3TTPT-dIL65PnI.js} +1 -1
- package/dist/client/assets/{elk-QONTBCTQ-CtuwbIK2.js → elk-QONTBCTQ-W6PbkfOO.js} +1 -1
- package/dist/client/assets/{empty-state-CbFKhqwB.js → empty-state-BQbeqUqX.js} +1 -1
- package/dist/client/assets/{erDiagram-KYQIGQAA-MlvYHdZ7.js → erDiagram-KYQIGQAA-Di7NEzZi.js} +1 -1
- package/dist/client/assets/{execution-config-BjNjQoBp.js → execution-config-CievpGFf.js} +1 -1
- package/dist/client/assets/{file-JokR8lB2.js → file-7wx4V3ce.js} +1 -1
- package/dist/client/assets/{file-exclamation-point-sl45DZYe.js → file-exclamation-point-hN_yiJcG.js} +1 -1
- package/dist/client/assets/{file-text-C4PxLfBm.js → file-text-C7UYBoWy.js} +1 -1
- package/dist/client/assets/{find-latest-widget-fence-Bc1LICCy.js → find-latest-widget-fence-BQipW7Cp.js} +5 -5
- package/dist/client/assets/{flowDiagram-IUGLLWBU-BlrKbUnh.js → flowDiagram-IUGLLWBU-BBkZgKdO.js} +1 -1
- package/dist/client/assets/{form-1NlezfMg.js → form-CY71tX5p.js} +1 -1
- package/dist/client/assets/{format-cron-C57sE3sK.js → format-cron-CE_acG1K.js} +1 -1
- package/dist/client/assets/{ganttDiagram-R7GPNTJY-BhCCQ-d7.js → ganttDiagram-R7GPNTJY-CWk4fs8K.js} +1 -1
- package/dist/client/assets/{git-branch-BXEb1Sqq.js → git-branch-CI-azrJf.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PDYL7XHY-Chl1aqHg.js → gitGraphDiagram-PDYL7XHY-DVZX00fz.js} +1 -1
- package/dist/client/assets/{graph-DIIpUxLd.js → graph-D6ajmsGE.js} +1 -1
- package/dist/client/assets/{heart-CUs7jdhV.js → heart-CFZ56Xlf.js} +1 -1
- package/dist/client/assets/{highlighted-body-KPVGNVTW-DlDHGjld.js → highlighted-body-KPVGNVTW-B3fBty4y.js} +1 -1
- package/dist/client/assets/{image-lightbox-BczXKBTZ.js → image-lightbox-BLGg6wh_.js} +1 -1
- package/dist/client/assets/{image-off-Ch98GGBJ.js → image-off-C6e_AfQT.js} +1 -1
- package/dist/client/assets/{index-BC41bN42.js → index-8hFGmOr3.js} +1 -1
- package/dist/client/assets/{index-BVjrgWDa.js → index-99DlkqSD.js} +1 -1
- package/dist/client/assets/{index-B0p2_o3r.js → index-BA45jX_i.js} +1 -1
- package/dist/client/assets/{index-Ev7FZl9a.js → index-BFF1EyA0.js} +1 -1
- package/dist/client/assets/{index-CQTeDD0B.js → index-BG1A_ge2.js} +1 -1
- package/dist/client/assets/{index-CnNGTb8f.js → index-BKcJmqqf.js} +1 -1
- package/dist/client/assets/{index-37h1E-65.js → index-BV1EGYfS.js} +1 -1
- package/dist/client/assets/{index-Cw0QRsnv.js → index-Bd8shyC1.js} +1 -1
- package/dist/client/assets/{index-CoHeCySh.js → index-Bs4lTtGw.js} +1 -1
- package/dist/client/assets/{index-CFJcOzPD.js → index-BwXTRvBg.js} +1 -1
- package/dist/client/assets/{index-CYhf-E_N.js → index-C41IirFx.js} +1 -1
- package/dist/client/assets/{index-DMfV6rUz.js → index-CCrXd3Yp.js} +1 -1
- package/dist/client/assets/{index-ByIDaFWv.js → index-CERazZNv.js} +1 -1
- package/dist/client/assets/{index-DzLIbXMR.js → index-CFtdiRm4.js} +1 -1
- package/dist/client/assets/{index-hyqRnlFg.js → index-CIDKu-yP.js} +1 -1
- package/dist/client/assets/{index-8FrM4Unx.js → index-CYluA-8M.js} +1 -1
- package/dist/client/assets/{index-BQlnEL5t.js → index-CaWLNyFj.js} +1 -1
- package/dist/client/assets/{index-DwrBsA10.js → index-Cm9hYycN.js} +213 -213
- package/dist/client/assets/{index-HnW-eS5i.js → index-CrLfzo3p.js} +1 -1
- package/dist/client/assets/{index-Cn1ZEy3S.js → index-CtoQYN47.js} +1 -1
- package/dist/client/assets/{index-Czar7aPT.js → index-D2sEXpm3.js} +2 -2
- package/dist/client/assets/{index-D_9H4FdK.js → index-D2uFkg04.js} +1 -1
- package/dist/client/assets/{index-D6NjBiAq.js → index-D8e8MIlc.js} +1 -1
- package/dist/client/assets/{index-B0q1o1JU.js → index-DCkLt2hP.js} +1 -1
- package/dist/client/assets/{index-Cnjpi7ar.js → index-DLMCPhNA.js} +1 -1
- package/dist/client/assets/{index-0MDZSAdr.js → index-DLpEKf-i.js} +1 -1
- package/dist/client/assets/{index-rKEUwjq8.js → index-DPRUHxoN.js} +1 -1
- package/dist/client/assets/{index-BRyEtRBO.js → index-DY3oKB_B.js} +1 -1
- package/dist/client/assets/{index-D1Be28yK.js → index-DYEHGDEV.js} +1 -1
- package/dist/client/assets/{index-BwHCH3tE.js → index-DbYzwbJb.js} +1 -1
- package/dist/client/assets/{index-pQstFziR.js → index-DdV8QyX6.js} +3 -3
- package/dist/client/assets/{index-BzqkXlms.js → index-DfhxqF8Y.js} +1 -1
- package/dist/client/assets/{index-CSOhBvPV.js → index-DgckOojV.js} +1 -1
- package/dist/client/assets/{index-vU7itvE8.js → index-Djn4XFpD.js} +1 -1
- package/dist/client/assets/{index-BiyMpL0z.js → index-Dq324laj.js} +1 -1
- package/dist/client/assets/{index-CaVP52c1.js → index-Dqk3QNzm.js} +1 -1
- package/dist/client/assets/{index-BNJa5z6K.js → index-DtHKgyyZ.js} +6 -6
- package/dist/client/assets/index-EN1TLx2G.js +1 -0
- package/dist/client/assets/{index-BAnl5kwm.js → index-MoiusTJb.js} +1 -1
- package/dist/client/assets/index-N177Jgr-.js +1 -0
- package/dist/client/assets/{index-DlZ77Qfj.js → index-RwED5fTx.js} +1 -1
- package/dist/client/assets/{index-DaZdDh7o.js → index-iT7Ifblv.js} +1 -1
- package/dist/client/assets/{index-slBSiB-H.js → index-wjGuFbZC.js} +1 -1
- package/dist/client/assets/{index.esm-DM8Bqi3n.js → index.esm-CkNwJHAt.js} +1 -1
- package/dist/client/assets/{infoDiagram-MVDRKAX5-C0p1eP9j.js → infoDiagram-MVDRKAX5-BZXw_Lom.js} +1 -1
- package/dist/client/assets/{inline-code-CNmpgW3O.js → inline-code-DjwtR-ll.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-HPEHV2GE-COdxgYUT.js → ishikawaDiagram-HPEHV2GE-C5w4s3jl.js} +1 -1
- package/dist/client/assets/{journeyDiagram-BOSHW7O7-C84Ny9n9.js → journeyDiagram-BOSHW7O7-BebIDsWW.js} +1 -1
- package/dist/client/assets/{kanban-definition-FNSA4HC5-ECSXhFX0.js → kanban-definition-FNSA4HC5-BDyRuDB8.js} +1 -1
- package/dist/client/assets/{layers-JgRwJGyf.js → layers-C7PyFRXp.js} +1 -1
- package/dist/client/assets/{lightbulb-BhQB8sFP.js → lightbulb-C5ICPq-a.js} +1 -1
- package/dist/client/assets/{link-2-B4byjdgg.js → link-2-UFQfJbpL.js} +1 -1
- package/dist/client/assets/{list-runtime-types-M5_gxIg1.js → list-runtime-types-D9dCsbEf.js} +1 -1
- package/dist/client/assets/{markdown-content-C3qWcii6.js → markdown-content-6YMskxmm.js} +1 -1
- package/dist/client/assets/{mention-pill-DUbgdKmA.js → mention-pill-B0W4IHW4.js} +1 -1
- package/dist/client/assets/{mermaid.core-BQiwaVjZ.js → mermaid.core-7GExh8O_.js} +4 -4
- package/dist/client/assets/{message-square-off-AjtFFe_u.js → message-square-off-BPdN3pJK.js} +1 -1
- package/dist/client/assets/{mindmap-definition-6OY57UG3-BfA6EqgP.js → mindmap-definition-6OY57UG3-0Lt_mZ3n.js} +1 -1
- package/dist/client/assets/{more-details-itSF4Fah.js → more-details-7N--psJ3.js} +1 -1
- package/dist/client/assets/{owner-notice-B6JRjE_c.js → owner-notice-nPsTnsXw.js} +1 -1
- package/dist/client/assets/{package-5YQSitlR.js → package-CC-1rWTp.js} +1 -1
- package/dist/client/assets/{page-container-DBPUOYYM.js → page-container-BHbpFrD0.js} +1 -1
- package/dist/client/assets/{pane-resize-handle-Kwb3zKa6.js → pane-resize-handle-DIFmKCMF.js} +1 -1
- package/dist/client/assets/{paperclip-IRKZTEQw.js → paperclip-Byuc-1Au.js} +1 -1
- package/dist/client/assets/{path-input-BHkA4fFw.js → path-input-Djx0L5Em.js} +1 -1
- package/dist/client/assets/{pegDiagram-ECIUJNBX-CqIy9WDe.js → pegDiagram-ECIUJNBX-Xa1X09Wi.js} +1 -1
- package/dist/client/assets/{pieDiagram-GNMPY74T-C5yI3cvV.js → pieDiagram-GNMPY74T-CAKIXX0r.js} +1 -1
- package/dist/client/assets/{plug-CupdBXaG.js → plug-w8CfVLDw.js} +1 -1
- package/dist/client/assets/{primer-trigger-Ci_XRRfX.js → primer-trigger-D-tDGGyD.js} +2 -2
- package/dist/client/assets/{profile-errors-aEsWNifs.js → profile-errors-CV4pLH99.js} +1 -1
- package/dist/client/assets/{progress-Bpmb837n.js → progress-BMUhJjlP.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-D57K4MC3-DyCDNvk7.js → quadrantDiagram-D57K4MC3-c8r8UetD.js} +1 -1
- package/dist/client/assets/{query-error-state-s6AJaHa3.js → query-error-state-BjXOCuG9.js} +1 -1
- package/dist/client/assets/{radio-Ci6Ghks8.js → radio-mxLzWnFP.js} +1 -1
- package/dist/client/assets/{railroadDiagram-Y72NRBL7-B3u1B937.js → railroadDiagram-Y72NRBL7-Bbj-1mVs.js} +1 -1
- package/dist/client/assets/{registry-NGfn1R2_.js → registry-CcYIR8Nc.js} +4 -4
- package/dist/client/assets/registry-DgRI6STP.js +1 -0
- package/dist/client/assets/{relay-trace-schemas-hOFIzdY-.js → relay-trace-schemas-DpSy65Yn.js} +2 -2
- package/dist/client/assets/{repeat-B1S2ceC2.js → repeat-4eTQX5mk.js} +1 -1
- package/dist/client/assets/{requirementDiagram-EQYSW5RA-CdG-unip.js → requirementDiagram-EQYSW5RA-geZa9MpH.js} +1 -1
- package/dist/client/assets/{room-files-source-J7gnN1gx.js → room-files-source-I4_DLrZD.js} +1 -1
- package/dist/client/assets/{rotate-ccw-clock-7Q2akPFi.js → rotate-ccw-clock-CXa8qFYi.js} +1 -1
- package/dist/client/assets/{rotate-cw-DK3Rzmlh.js → rotate-cw-DHEYuGSm.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-SY24JHO5-D3Z4Qk2b.js → sankeyDiagram-SY24JHO5-Srm25ry_.js} +1 -1
- package/dist/client/assets/{scroll-area-6Gelypei.js → scroll-area-Bjsw3VpU.js} +1 -1
- package/dist/client/assets/search-x-ChUxCHLH.js +6 -0
- package/dist/client/assets/{sequenceDiagram-BLEHNHQU-RXPgeLr6.js → sequenceDiagram-BLEHNHQU-CX9mhXoN.js} +1 -1
- package/dist/client/assets/{shield-x-D8lJ0Op0.js → shield-x-CLFQxyuz.js} +1 -1
- package/dist/client/assets/{signed-in-NOeTLLso.js → signed-in-Bcgd3tr-.js} +1 -1
- package/dist/client/assets/{sizeCapture-INFHLROL-q7qki1pK.js → sizeCapture-INFHLROL-CsGk_egJ.js} +1 -1
- package/dist/client/assets/{soul-file-DTEcjDxP.js → soul-file-ndv3pF6l.js} +1 -1
- package/dist/client/assets/{stateDiagram-v2-A6IESKWZ-DFs6IVbj.js → stateDiagram-v2-A6IESKWZ-B0UoiZA7.js} +1 -1
- package/dist/client/assets/{swimlanes-B3ENRKFQ-D1A-3JE-.js → swimlanes-B3ENRKFQ-Z8KKQyjo.js} +1 -1
- package/dist/client/assets/swimlanesDiagram-AYQRV4AK-CL3LnYRl.js +8 -0
- package/dist/client/assets/{table-CuBPM_bg.js → table-hGD-o8Hv.js} +1 -1
- package/dist/client/assets/{timeline-definition-JXYKGLGB-CLHy0rAb.js → timeline-definition-JXYKGLGB-MiLN-bA8.js} +1 -1
- package/dist/client/assets/{trust-posture-BXXe8F8n.js → trust-posture-bENWFq73.js} +1 -1
- package/dist/client/assets/{unplug-Cuej6sM6.js → unplug-CuyYU8At.js} +1 -1
- package/dist/client/assets/{unverified-catalog-notice-BbK4SCJp.js → unverified-catalog-notice-Buza_8FG.js} +1 -1
- package/dist/client/assets/{use-adapter-catalog-Cy7ENVZN.js → use-adapter-catalog-xRiWVPVu.js} +1 -1
- package/dist/client/assets/{use-bindings-Tj0BcF4m.js → use-bindings-BVGWiy25.js} +1 -1
- package/dist/client/assets/{use-composer-prefs-BrQVpwRi.js → use-composer-prefs-DptaPZ0D.js} +1 -1
- package/dist/client/assets/{use-connector-management-CLZQXgln.js → use-connector-management-SgpNguoX.js} +1 -1
- package/dist/client/assets/{use-deep-link-scroll-BeqtUhj2.js → use-deep-link-scroll-_gvpwuhX.js} +1 -1
- package/dist/client/assets/{use-delete-binding-d7ii9iFQ.js → use-delete-binding-MWO6gLCZ.js} +1 -1
- package/dist/client/assets/{use-dev-links-MYOV3h2q.js → use-dev-links-jwjGn-ea.js} +1 -1
- package/dist/client/assets/{use-direct-message-panel-C_lXDYnB.js → use-direct-message-panel-C_5C3BJN.js} +1 -1
- package/dist/client/assets/{use-external-adapter-catalog-kMFSEJGV.js → use-external-adapter-catalog-FcCuR-0-.js} +1 -1
- package/dist/client/assets/{use-full-activity-feed-MFSkvnza.js → use-full-activity-feed-vIOHR9AY.js} +1 -1
- package/dist/client/assets/use-is-below-desktop-CN5C6wtD.js +1 -0
- package/dist/client/assets/{use-local-browser-1oVtlmXD.js → use-local-browser-DZxfbzlC.js} +1 -1
- package/dist/client/assets/{use-mesh-topology-BJs6M6kh.js → use-mesh-topology-Dc-oTr32.js} +1 -1
- package/dist/client/assets/{use-mounted-ref-DitdlmSI.js → use-mounted-ref-DibgeFBj.js} +1 -1
- package/dist/client/assets/{use-notification-prefs-CXbRTRLF.js → use-notification-prefs-C7VkjjTj.js} +1 -1
- package/dist/client/assets/use-pending-read-D5ur6NeX.js +1 -0
- package/dist/client/assets/{use-personality-commit-DQrWyVGT.js → use-personality-commit-ltA6XvBX.js} +1 -1
- package/dist/client/assets/{use-promo-activation-CgdBHk2f.js → use-promo-activation-C-Rnqz23.js} +3 -3
- package/dist/client/assets/{use-promo-dismissals-DprcDmfs.js → use-promo-dismissals-BmshxhAa.js} +1 -1
- package/dist/client/assets/{use-pulse-freshness-BtMzHCs3.js → use-pulse-freshness-z2WkS2Ys.js} +1 -1
- package/dist/client/assets/{use-relay-config-CGBlgXC2.js → use-relay-config-DaDq9PpU.js} +1 -1
- package/dist/client/assets/{use-room-follow-claim-Db5U7kWT.js → use-room-follow-claim-C3SS0Gw2.js} +1 -1
- package/dist/client/assets/{use-room-sessions-K6mdH-Tb.js → use-room-sessions-WV0Pz8--.js} +1 -1
- package/dist/client/assets/{use-roving-tab-list-B2zxa_F_.js → use-roving-tab-list-DVFfvzml.js} +1 -1
- package/dist/client/assets/{use-session-canvas-D4G5fO_a.js → use-session-canvas-Rz7f3BhB.js} +8 -8
- package/dist/client/assets/{use-status-budget-UccdTZ7o.js → use-status-budget-tnw0joN-.js} +3 -3
- package/dist/client/assets/{use-transform-BBj2pwbo.js → use-transform-B4y73VwQ.js} +1 -1
- package/dist/client/assets/{use-unclaimed-chats-BidDnyt8.js → use-unclaimed-chats-BkPZ0agl.js} +1 -1
- package/dist/client/assets/use-update-config-et3Tcr-G.js +1 -0
- package/dist/client/assets/{useMutationState-RYxTf1aD.js → useMutationState-BTgljbHC.js} +1 -1
- package/dist/client/assets/{usecaseDiagram-WPOLBNNX-Bjmcc2gK.js → usecaseDiagram-WPOLBNNX-CwDaydYb.js} +1 -1
- package/dist/client/assets/{vennDiagram-Q3Y3IDCW-Cd6C9CxW.js → vennDiagram-Q3Y3IDCW-B9DrYXJV.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-IVAIDKWA-CzWWmwUL.js → wardleyDiagram-IVAIDKWA-fP8m3n4J.js} +1 -1
- package/dist/client/assets/{xychartDiagram-4URNHDU4-DSUn9rhA.js → xychartDiagram-4URNHDU4-C52wlqaB.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/index.js +74212 -71814
- package/dist/server/index.js.map +2 -2
- package/package.json +5 -5
- package/dist/client/assets/ApplyToOverridesDialog-C-XL9N4W.js +0 -1
- package/dist/client/assets/HandlePage-BH_G4sMV.js +0 -1
- package/dist/client/assets/NamePage-CaJsVRhh.js +0 -1
- package/dist/client/assets/OperatorIdentityForm-BRKAQS0D.js +0 -1
- package/dist/client/assets/PermissionsPage-C2pB1TCJ.js +0 -1
- package/dist/client/assets/PhotoPage-33Xh8sq1.js +0 -1
- package/dist/client/assets/_shell-CX_gaQPE.js +0 -80
- package/dist/client/assets/_shell._home.activity-DpSGWVSW.js +0 -1
- package/dist/client/assets/_shell._home.index-BWH93iWg.js +0 -3
- package/dist/client/assets/_shell._home.tasks-Ive4UW8c.js +0 -1
- package/dist/client/assets/_shell.marketplace-D8deZF5L.js +0 -1
- package/dist/client/assets/_shell.marketplace_.sources-BHG9MqWR.js +0 -1
- package/dist/client/assets/_shell.session-CkdA2hgF.js +0 -1
- package/dist/client/assets/_shell.x._extensionId-Cry6E5KK.js +0 -1
- package/dist/client/assets/_shell.x._extensionId_._-Cry6E5KK.js +0 -1
- package/dist/client/assets/channel-Bf4e4rlX.js +0 -1
- package/dist/client/assets/index-BThp0Av1.js +0 -1
- package/dist/client/assets/index-Dv6HjbCS.js +0 -1
- package/dist/client/assets/registry-DatwH4jj.js +0 -1
- package/dist/client/assets/search-x-Be8VetKs.js +0 -6
- package/dist/client/assets/swimlanesDiagram-AYQRV4AK-hZFkkqUb.js +0 -8
- package/dist/client/assets/use-is-below-desktop-CJJ4zMQO.js +0 -1
- package/dist/client/assets/use-pending-read-CvX1lOb8.js +0 -1
- package/dist/client/assets/use-update-config-D8g4P42J.js +0 -1
package/dist/bin/cli.js
CHANGED
|
@@ -345,10 +345,10 @@ function mergeDefs(...defs) {
|
|
|
345
345
|
function cloneDef(schema3) {
|
|
346
346
|
return mergeDefs(schema3._zod.def);
|
|
347
347
|
}
|
|
348
|
-
function getElementAtPath(obj,
|
|
349
|
-
if (!
|
|
348
|
+
function getElementAtPath(obj, path71) {
|
|
349
|
+
if (!path71)
|
|
350
350
|
return obj;
|
|
351
|
-
return
|
|
351
|
+
return path71.reduce((acc, key) => acc?.[key], obj);
|
|
352
352
|
}
|
|
353
353
|
function promiseAllObject(promisesObj) {
|
|
354
354
|
const keys = Object.keys(promisesObj);
|
|
@@ -607,11 +607,11 @@ function explicitlyAborted(x2, startIndex = 0) {
|
|
|
607
607
|
}
|
|
608
608
|
return false;
|
|
609
609
|
}
|
|
610
|
-
function prefixIssues(
|
|
610
|
+
function prefixIssues(path71, issues) {
|
|
611
611
|
return issues.map((iss) => {
|
|
612
612
|
var _a7;
|
|
613
613
|
(_a7 = iss).path ?? (_a7.path = []);
|
|
614
|
-
iss.path.unshift(
|
|
614
|
+
iss.path.unshift(path71);
|
|
615
615
|
return iss;
|
|
616
616
|
});
|
|
617
617
|
}
|
|
@@ -1144,16 +1144,16 @@ function flattenError(error63, mapper = (issue2) => issue2.message) {
|
|
|
1144
1144
|
}
|
|
1145
1145
|
function formatError(error63, mapper = (issue2) => issue2.message) {
|
|
1146
1146
|
const fieldErrors = { _errors: [] };
|
|
1147
|
-
const processError = (error64,
|
|
1147
|
+
const processError = (error64, path71 = []) => {
|
|
1148
1148
|
for (const issue2 of error64.issues) {
|
|
1149
1149
|
if (issue2.code === "invalid_union" && issue2.errors.length) {
|
|
1150
|
-
issue2.errors.map((issues) => processError({ issues }, [...
|
|
1150
|
+
issue2.errors.map((issues) => processError({ issues }, [...path71, ...issue2.path]));
|
|
1151
1151
|
} else if (issue2.code === "invalid_key") {
|
|
1152
|
-
processError({ issues: issue2.issues }, [...
|
|
1152
|
+
processError({ issues: issue2.issues }, [...path71, ...issue2.path]);
|
|
1153
1153
|
} else if (issue2.code === "invalid_element") {
|
|
1154
|
-
processError({ issues: issue2.issues }, [...
|
|
1154
|
+
processError({ issues: issue2.issues }, [...path71, ...issue2.path]);
|
|
1155
1155
|
} else {
|
|
1156
|
-
const fullpath = [...
|
|
1156
|
+
const fullpath = [...path71, ...issue2.path];
|
|
1157
1157
|
if (fullpath.length === 0) {
|
|
1158
1158
|
fieldErrors._errors.push(mapper(issue2));
|
|
1159
1159
|
} else {
|
|
@@ -1192,17 +1192,17 @@ function formatError(error63, mapper = (issue2) => issue2.message) {
|
|
|
1192
1192
|
}
|
|
1193
1193
|
function treeifyError(error63, mapper = (issue2) => issue2.message) {
|
|
1194
1194
|
const result2 = { errors: [] };
|
|
1195
|
-
const processError = (error64,
|
|
1195
|
+
const processError = (error64, path71 = []) => {
|
|
1196
1196
|
var _a7;
|
|
1197
1197
|
for (const issue2 of error64.issues) {
|
|
1198
1198
|
if (issue2.code === "invalid_union" && issue2.errors.length) {
|
|
1199
|
-
issue2.errors.map((issues) => processError({ issues }, [...
|
|
1199
|
+
issue2.errors.map((issues) => processError({ issues }, [...path71, ...issue2.path]));
|
|
1200
1200
|
} else if (issue2.code === "invalid_key") {
|
|
1201
|
-
processError({ issues: issue2.issues }, [...
|
|
1201
|
+
processError({ issues: issue2.issues }, [...path71, ...issue2.path]);
|
|
1202
1202
|
} else if (issue2.code === "invalid_element") {
|
|
1203
|
-
processError({ issues: issue2.issues }, [...
|
|
1203
|
+
processError({ issues: issue2.issues }, [...path71, ...issue2.path]);
|
|
1204
1204
|
} else {
|
|
1205
|
-
const fullpath = [...
|
|
1205
|
+
const fullpath = [...path71, ...issue2.path];
|
|
1206
1206
|
if (fullpath.length === 0) {
|
|
1207
1207
|
result2.errors.push(mapper(issue2));
|
|
1208
1208
|
continue;
|
|
@@ -1241,8 +1241,8 @@ function treeifyError(error63, mapper = (issue2) => issue2.message) {
|
|
|
1241
1241
|
}
|
|
1242
1242
|
function toDotPath(_path) {
|
|
1243
1243
|
const segs = [];
|
|
1244
|
-
const
|
|
1245
|
-
for (const seg of
|
|
1244
|
+
const path71 = _path.map((seg) => typeof seg === "object" ? seg.key : seg);
|
|
1245
|
+
for (const seg of path71) {
|
|
1246
1246
|
if (typeof seg === "number")
|
|
1247
1247
|
segs.push(`[${seg}]`);
|
|
1248
1248
|
else if (typeof seg === "symbol")
|
|
@@ -19274,13 +19274,13 @@ function resolveRef(ref, ctx) {
|
|
|
19274
19274
|
if (!ref.startsWith("#")) {
|
|
19275
19275
|
throw new Error("External $ref is not supported, only local refs (#/...) are allowed");
|
|
19276
19276
|
}
|
|
19277
|
-
const
|
|
19278
|
-
if (
|
|
19277
|
+
const path71 = ref.slice(1).split("/").filter(Boolean);
|
|
19278
|
+
if (path71.length === 0) {
|
|
19279
19279
|
return ctx.rootSchema;
|
|
19280
19280
|
}
|
|
19281
19281
|
const defsKey = ctx.version === "draft-2020-12" ? "$defs" : "definitions";
|
|
19282
|
-
if (
|
|
19283
|
-
const key =
|
|
19282
|
+
if (path71[0] === defsKey) {
|
|
19283
|
+
const key = path71[1] === void 0 ? void 0 : decodeJSONPointerSegment(path71[1]);
|
|
19284
19284
|
if (!key || !ctx.defs[key]) {
|
|
19285
19285
|
throw new Error(`Reference not found: ${ref}`);
|
|
19286
19286
|
}
|
|
@@ -22684,11 +22684,47 @@ var init_extension_config_schemas = __esm({
|
|
|
22684
22684
|
*/
|
|
22685
22685
|
origin: ExtensionOriginSchema.optional(),
|
|
22686
22686
|
/**
|
|
22687
|
-
*
|
|
22688
|
-
*
|
|
22689
|
-
*
|
|
22687
|
+
* The folder digest the yes was given to (DOR-3068): the whole plugin
|
|
22688
|
+
* folder for a plugin-carried copy, the extension's own folder otherwise.
|
|
22689
|
+
* Any change to those files waits for a person, because a path alone no
|
|
22690
|
+
* longer says what is there. Absent only for a dev link, or for a copy
|
|
22691
|
+
* that keeps its path trust (`authorHome`).
|
|
22690
22692
|
*/
|
|
22691
22693
|
digest: external_exports.string().min(1).optional(),
|
|
22694
|
+
/**
|
|
22695
|
+
* The real path of the folder of the agent that created this extension
|
|
22696
|
+
* with `create_extension` (DOR-3068). Its edits keep loading without a
|
|
22697
|
+
* digest only while the copy runs separately, declares exactly `grants`,
|
|
22698
|
+
* and its real path stays inside this folder. Absent for a copy a person
|
|
22699
|
+
* approved by hand, which is always pinned by `digest`.
|
|
22700
|
+
*/
|
|
22701
|
+
authorHome: external_exports.string().min(1).optional(),
|
|
22702
|
+
/**
|
|
22703
|
+
* A digest of what the copy declared it may reach when the yes was given
|
|
22704
|
+
* (DOR-3068): where it runs, its `allow` lists, its secrets, its data
|
|
22705
|
+
* proxy and its server entry. Any change waits for a person.
|
|
22706
|
+
*/
|
|
22707
|
+
grants: external_exports.string().min(1).optional(),
|
|
22708
|
+
/**
|
|
22709
|
+
* When DorkOS pinned an approval given before approvals named content to
|
|
22710
|
+
* the files it found then (DOR-3068), once, on the first scan after the
|
|
22711
|
+
* upgrade. ISO 8601. Absent for every approval given since.
|
|
22712
|
+
*/
|
|
22713
|
+
pinnedOnFirstUse: external_exports.string().optional(),
|
|
22714
|
+
/**
|
|
22715
|
+
* Set once, by the `'0.126.1'` config migration, on an approval written
|
|
22716
|
+
* before approvals named content (DOR-3068). Only such an approval is pinned
|
|
22717
|
+
* to the files the next scan finds; a digest-less approval written since is
|
|
22718
|
+
* never pinned to whatever is on disk.
|
|
22719
|
+
*/
|
|
22720
|
+
legacyPathOnly: external_exports.boolean().optional(),
|
|
22721
|
+
/**
|
|
22722
|
+
* The digest of the exact screen code (the client bundle the app loads) the
|
|
22723
|
+
* yes was given to, for a copy that keeps path trust (DOR-3068). Path trust
|
|
22724
|
+
* covers the server half only: when the bundle the app would load differs,
|
|
22725
|
+
* the screen half stays off until a person approves again.
|
|
22726
|
+
*/
|
|
22727
|
+
clientDigest: external_exports.string().min(1).optional(),
|
|
22692
22728
|
/**
|
|
22693
22729
|
* The real path of the dev link this approval was given to (DOR-2696);
|
|
22694
22730
|
* absent for an installed copy. A dev link sits at its package's normal
|
|
@@ -22789,6 +22825,17 @@ var init_tooling = __esm({
|
|
|
22789
22825
|
* `operator-only` for the same reason as `approvedToRun`.
|
|
22790
22826
|
*/
|
|
22791
22827
|
approvedSources: external_exports.record(external_exports.string(), ExtensionApprovedSourceSchema).default(() => ({})),
|
|
22828
|
+
/**
|
|
22829
|
+
* The approved ids that named no copy when content pins arrived (DOR-3068),
|
|
22830
|
+
* written once by the `'0.126.1'` config migration. Only these are bound,
|
|
22831
|
+
* on a later scan, to the extension installed directly under
|
|
22832
|
+
* `{dorkHome}/extensions/<id>`; an id is dropped from here once bound. An
|
|
22833
|
+
* unsourced id not listed is never bound, so a folder an agent creates
|
|
22834
|
+
* later under an old approved name never inherits that approval.
|
|
22835
|
+
*
|
|
22836
|
+
* `operator-only` for the same reason as `approvedToRun`.
|
|
22837
|
+
*/
|
|
22838
|
+
legacyUnsourced: external_exports.array(external_exports.string()).optional(),
|
|
22792
22839
|
/**
|
|
22793
22840
|
* The permission set each approval covers, keyed by extension id
|
|
22794
22841
|
* (DOR-2686): what the extension declared when a person said yes.
|
|
@@ -22952,6 +22999,38 @@ var init_tooling = __esm({
|
|
|
22952
22999
|
* wants to run stops matching and is asked about again.
|
|
22953
23000
|
*/
|
|
22954
23001
|
refusedHooks: external_exports.array(external_exports.string()).default(() => []),
|
|
23002
|
+
/**
|
|
23003
|
+
* The state of each agent's own folder settings a person let run
|
|
23004
|
+
* (DOR-3068): its hooks and MCP choices in `.claude/settings*.json`, its
|
|
23005
|
+
* `.mcp.json`, and its agent file's MCP servers and account. Each entry is
|
|
23006
|
+
* `<agentId>@folder-config-<digest>`, where the digest covers the agent's
|
|
23007
|
+
* home and those three parts, so a change the agent makes waits for a person
|
|
23008
|
+
* instead of riding an old yes. An agent with no entry is pinned to what its
|
|
23009
|
+
* folder holds the first time it runs. Empty by default.
|
|
23010
|
+
*/
|
|
23011
|
+
approvedFolderConfig: external_exports.array(external_exports.string().min(1)).default(() => []),
|
|
23012
|
+
/**
|
|
23013
|
+
* The per-part digests behind each agent's yes in
|
|
23014
|
+
* {@link approvedFolderConfig}, by agent id, so a card can say which part
|
|
23015
|
+
* changed. Read only while a stored yes still digests to them.
|
|
23016
|
+
*/
|
|
23017
|
+
approvedFolderConfigParts: external_exports.record(
|
|
23018
|
+
external_exports.string(),
|
|
23019
|
+
external_exports.object({ hooks: external_exports.string(), mcpJson: external_exports.string(), manifest: external_exports.string() })
|
|
23020
|
+
).default(() => ({})),
|
|
23021
|
+
/**
|
|
23022
|
+
* The states a person turned down, in the same form as
|
|
23023
|
+
* {@link approvedFolderConfig}. Not asked about again until the settings
|
|
23024
|
+
* change again.
|
|
23025
|
+
*/
|
|
23026
|
+
refusedFolderConfig: external_exports.array(external_exports.string().min(1)).default(() => []),
|
|
23027
|
+
/**
|
|
23028
|
+
* Whether DorkOS has pinned the agents that already existed (DOR-3068). It
|
|
23029
|
+
* does that once, at the first start with the folder settings pin; after
|
|
23030
|
+
* that, an agent with no record whose home runs anything waits for a
|
|
23031
|
+
* person. Carried across a config wipe, so a wipe never re-pins.
|
|
23032
|
+
*/
|
|
23033
|
+
folderConfigPinned: external_exports.boolean().default(false),
|
|
22955
23034
|
/**
|
|
22956
23035
|
* The two decisions global scope records: which agent tools DorkOS shares
|
|
22957
23036
|
* your globally installed packages with, and when it last asked.
|
|
@@ -22988,6 +23067,10 @@ var init_tooling = __esm({
|
|
|
22988
23067
|
autoAdopt: false,
|
|
22989
23068
|
approvedHooks: [],
|
|
22990
23069
|
refusedHooks: [],
|
|
23070
|
+
approvedFolderConfig: [],
|
|
23071
|
+
approvedFolderConfigParts: {},
|
|
23072
|
+
refusedFolderConfig: [],
|
|
23073
|
+
folderConfigPinned: false,
|
|
22991
23074
|
global: { harnesses: [], askedAt: null }
|
|
22992
23075
|
}));
|
|
22993
23076
|
WorkbenchConfigSchema = external_exports.object({
|
|
@@ -26485,18 +26568,18 @@ var init_logger = __esm({
|
|
|
26485
26568
|
});
|
|
26486
26569
|
|
|
26487
26570
|
// ../shared/src/links.ts
|
|
26488
|
-
function join(base,
|
|
26489
|
-
if (
|
|
26490
|
-
return `${base}/${
|
|
26571
|
+
function join(base, path71) {
|
|
26572
|
+
if (path71 === "" || /^[/?#]/.test(path71)) return `${base}${path71}`;
|
|
26573
|
+
return `${base}/${path71}`;
|
|
26491
26574
|
}
|
|
26492
|
-
function siteUrl(
|
|
26493
|
-
return join(links.site,
|
|
26575
|
+
function siteUrl(path71 = "") {
|
|
26576
|
+
return join(links.site, path71);
|
|
26494
26577
|
}
|
|
26495
|
-
function docsUrl(
|
|
26496
|
-
return join(links.docs,
|
|
26578
|
+
function docsUrl(path71 = "") {
|
|
26579
|
+
return join(links.docs, path71);
|
|
26497
26580
|
}
|
|
26498
|
-
function repoUrl(
|
|
26499
|
-
return join(links.repo,
|
|
26581
|
+
function repoUrl(path71 = "") {
|
|
26582
|
+
return join(links.repo, path71);
|
|
26500
26583
|
}
|
|
26501
26584
|
var GITHUB_ORG, links;
|
|
26502
26585
|
var init_links = __esm({
|
|
@@ -26920,7 +27003,7 @@ import path2 from "path";
|
|
|
26920
27003
|
import { fileURLToPath } from "url";
|
|
26921
27004
|
function resolveVersion() {
|
|
26922
27005
|
if (env2.DORKOS_VERSION_OVERRIDE) return env2.DORKOS_VERSION_OVERRIDE;
|
|
26923
|
-
if (true) return "0.126.
|
|
27006
|
+
if (true) return "0.126.1";
|
|
26924
27007
|
const pkgPath = path2.join(path2.dirname(fileURLToPath(import.meta.url)), "../../package.json");
|
|
26925
27008
|
return JSON.parse(readFileSync(pkgPath, "utf-8")).version;
|
|
26926
27009
|
}
|
|
@@ -27123,8 +27206,8 @@ and your settings stay in the file you renamed.`;
|
|
|
27123
27206
|
});
|
|
27124
27207
|
|
|
27125
27208
|
// ../../apps/server/src/services/core/config/browser-setting.ts
|
|
27126
|
-
function browserSettingRefusal(
|
|
27127
|
-
const enabled3 =
|
|
27209
|
+
function browserSettingRefusal(path71, value) {
|
|
27210
|
+
const enabled3 = path71 === "browser.enabled" ? value : path71 === "browser" && value !== null && typeof value === "object" ? value.enabled : void 0;
|
|
27128
27211
|
return enabled3 === true ? BROWSER_SETTING_UNAVAILABLE : null;
|
|
27129
27212
|
}
|
|
27130
27213
|
var BROWSER_SETTING_UNAVAILABLE;
|
|
@@ -27156,9 +27239,9 @@ function hubPinnedRead(key, value) {
|
|
|
27156
27239
|
}
|
|
27157
27240
|
return value;
|
|
27158
27241
|
}
|
|
27159
|
-
function hubSettingRefusal(
|
|
27242
|
+
function hubSettingRefusal(path71, value) {
|
|
27160
27243
|
if (currentServerRole() !== "hub") return null;
|
|
27161
|
-
const enabled3 =
|
|
27244
|
+
const enabled3 = path71 === "auth.enabled" ? value : path71 === "auth" && value !== null && typeof value === "object" ? value.enabled : true;
|
|
27162
27245
|
return enabled3 === false ? HUB_LOGIN_ALWAYS_ON : null;
|
|
27163
27246
|
}
|
|
27164
27247
|
var HUB_LOGIN_ALWAYS_ON;
|
|
@@ -27238,9 +27321,9 @@ var init_trusted_carryovers = __esm({
|
|
|
27238
27321
|
});
|
|
27239
27322
|
|
|
27240
27323
|
// ../../apps/server/src/services/core/safe-defaults/protected-state.ts
|
|
27241
|
-
function readPath(root,
|
|
27324
|
+
function readPath(root, path71) {
|
|
27242
27325
|
let cursor = root;
|
|
27243
|
-
for (const part of
|
|
27326
|
+
for (const part of path71.split(".")) {
|
|
27244
27327
|
if (cursor === null || typeof cursor !== "object") return void 0;
|
|
27245
27328
|
cursor = cursor[part];
|
|
27246
27329
|
}
|
|
@@ -27252,8 +27335,8 @@ function sectionSchemaAccepts(section, draft) {
|
|
|
27252
27335
|
if (!schema3) return false;
|
|
27253
27336
|
return schema3.safeParse(draft).success;
|
|
27254
27337
|
}
|
|
27255
|
-
function writePath(root,
|
|
27256
|
-
const parts =
|
|
27338
|
+
function writePath(root, path71, value) {
|
|
27339
|
+
const parts = path71.split(".");
|
|
27257
27340
|
const leaf = parts.pop();
|
|
27258
27341
|
if (leaf === void 0) return;
|
|
27259
27342
|
let cursor = root;
|
|
@@ -27386,13 +27469,13 @@ function applyProtectedState(store, salvaged) {
|
|
|
27386
27469
|
sections.set("telemetry", { ...section("telemetry"), ...salvaged.telemetry });
|
|
27387
27470
|
label("telemetry", "telemetry (your consent choice)");
|
|
27388
27471
|
}
|
|
27389
|
-
for (const [
|
|
27390
|
-
const [top, ...rest] =
|
|
27472
|
+
for (const [path71, value] of Object.entries(salvaged.leaves)) {
|
|
27473
|
+
const [top, ...rest] = path71.split(".");
|
|
27391
27474
|
if (top === void 0) continue;
|
|
27392
27475
|
const draft = section(top);
|
|
27393
27476
|
if (rest.length === 0) continue;
|
|
27394
27477
|
writePath(draft, rest.join("."), value);
|
|
27395
|
-
label(top,
|
|
27478
|
+
label(top, path71);
|
|
27396
27479
|
}
|
|
27397
27480
|
const restored = [];
|
|
27398
27481
|
for (const [name2, value] of sections) {
|
|
@@ -27418,9 +27501,9 @@ function restoreProtectedState(store, stored, context2) {
|
|
|
27418
27501
|
if (restored.length > 0) {
|
|
27419
27502
|
logger.warn(`[Config] ${context2}: kept your safer settings \u2014 ${restored.join(", ")}`);
|
|
27420
27503
|
}
|
|
27421
|
-
for (const { path:
|
|
27504
|
+
for (const { path: path71, reason } of salvaged.dropped) {
|
|
27422
27505
|
logger.warn(
|
|
27423
|
-
`[Config] Could not keep your ${
|
|
27506
|
+
`[Config] Could not keep your ${path71} setting: ${reason}. It is back at the default.`
|
|
27424
27507
|
);
|
|
27425
27508
|
}
|
|
27426
27509
|
}
|
|
@@ -27458,6 +27541,12 @@ var init_protected_state = __esm({
|
|
|
27458
27541
|
protectiveValue: false,
|
|
27459
27542
|
reason: "The external /mcp tool endpoint defaults ON. Someone who closed it should not have it re-opened by a wipe."
|
|
27460
27543
|
},
|
|
27544
|
+
{
|
|
27545
|
+
path: "harness.folderConfigPinned",
|
|
27546
|
+
direction: "boolean",
|
|
27547
|
+
protectiveValue: true,
|
|
27548
|
+
reason: "The first start pins the agents DorkOS already had, as they stand (DOR-3068). After a wipe, an agent with no record should wait for a person, never be pinned again unasked."
|
|
27549
|
+
},
|
|
27461
27550
|
{
|
|
27462
27551
|
path: "harness.autoSync",
|
|
27463
27552
|
direction: "boolean",
|
|
@@ -27754,16 +27843,16 @@ function processSegment(segment, parts) {
|
|
|
27754
27843
|
}
|
|
27755
27844
|
return true;
|
|
27756
27845
|
}
|
|
27757
|
-
function parsePath(
|
|
27758
|
-
if (typeof
|
|
27759
|
-
throw new TypeError(`Expected a string, got ${typeof
|
|
27846
|
+
function parsePath(path71) {
|
|
27847
|
+
if (typeof path71 !== "string") {
|
|
27848
|
+
throw new TypeError(`Expected a string, got ${typeof path71}`);
|
|
27760
27849
|
}
|
|
27761
27850
|
const parts = [];
|
|
27762
27851
|
let currentSegment = "";
|
|
27763
27852
|
let currentPart = "start";
|
|
27764
27853
|
let isEscaping = false;
|
|
27765
27854
|
let position = 0;
|
|
27766
|
-
for (const character of
|
|
27855
|
+
for (const character of path71) {
|
|
27767
27856
|
position++;
|
|
27768
27857
|
if (isEscaping) {
|
|
27769
27858
|
currentSegment += character;
|
|
@@ -27873,13 +27962,13 @@ function parsePath(path68) {
|
|
|
27873
27962
|
}
|
|
27874
27963
|
return parts;
|
|
27875
27964
|
}
|
|
27876
|
-
function normalizePath(
|
|
27877
|
-
if (typeof
|
|
27878
|
-
return parsePath(
|
|
27965
|
+
function normalizePath(path71) {
|
|
27966
|
+
if (typeof path71 === "string") {
|
|
27967
|
+
return parsePath(path71);
|
|
27879
27968
|
}
|
|
27880
|
-
if (Array.isArray(
|
|
27969
|
+
if (Array.isArray(path71)) {
|
|
27881
27970
|
const normalized = [];
|
|
27882
|
-
for (const [index2, segment] of
|
|
27971
|
+
for (const [index2, segment] of path71.entries()) {
|
|
27883
27972
|
if (typeof segment !== "string" && typeof segment !== "number") {
|
|
27884
27973
|
throw new TypeError(`Expected a string or number for path segment at index ${index2}, got ${typeof segment}`);
|
|
27885
27974
|
}
|
|
@@ -27899,11 +27988,11 @@ function normalizePath(path68) {
|
|
|
27899
27988
|
}
|
|
27900
27989
|
return [];
|
|
27901
27990
|
}
|
|
27902
|
-
function getProperty(object2,
|
|
27903
|
-
if (!isObject2(object2) || typeof
|
|
27991
|
+
function getProperty(object2, path71, value) {
|
|
27992
|
+
if (!isObject2(object2) || typeof path71 !== "string" && !Array.isArray(path71)) {
|
|
27904
27993
|
return value === void 0 ? object2 : value;
|
|
27905
27994
|
}
|
|
27906
|
-
const pathArray = normalizePath(
|
|
27995
|
+
const pathArray = normalizePath(path71);
|
|
27907
27996
|
if (pathArray.length === 0) {
|
|
27908
27997
|
return value;
|
|
27909
27998
|
}
|
|
@@ -27919,12 +28008,12 @@ function getProperty(object2, path68, value) {
|
|
|
27919
28008
|
}
|
|
27920
28009
|
return object2 === void 0 ? value : object2;
|
|
27921
28010
|
}
|
|
27922
|
-
function setProperty(object2,
|
|
27923
|
-
if (!isObject2(object2) || typeof
|
|
28011
|
+
function setProperty(object2, path71, value) {
|
|
28012
|
+
if (!isObject2(object2) || typeof path71 !== "string" && !Array.isArray(path71)) {
|
|
27924
28013
|
return object2;
|
|
27925
28014
|
}
|
|
27926
28015
|
const root = object2;
|
|
27927
|
-
const pathArray = normalizePath(
|
|
28016
|
+
const pathArray = normalizePath(path71);
|
|
27928
28017
|
if (pathArray.length === 0) {
|
|
27929
28018
|
return object2;
|
|
27930
28019
|
}
|
|
@@ -27941,11 +28030,11 @@ function setProperty(object2, path68, value) {
|
|
|
27941
28030
|
}
|
|
27942
28031
|
return root;
|
|
27943
28032
|
}
|
|
27944
|
-
function deleteProperty(object2,
|
|
27945
|
-
if (!isObject2(object2) || typeof
|
|
28033
|
+
function deleteProperty(object2, path71) {
|
|
28034
|
+
if (!isObject2(object2) || typeof path71 !== "string" && !Array.isArray(path71)) {
|
|
27946
28035
|
return false;
|
|
27947
28036
|
}
|
|
27948
|
-
const pathArray = normalizePath(
|
|
28037
|
+
const pathArray = normalizePath(path71);
|
|
27949
28038
|
if (pathArray.length === 0) {
|
|
27950
28039
|
return false;
|
|
27951
28040
|
}
|
|
@@ -27965,11 +28054,11 @@ function deleteProperty(object2, path68) {
|
|
|
27965
28054
|
}
|
|
27966
28055
|
}
|
|
27967
28056
|
}
|
|
27968
|
-
function hasProperty(object2,
|
|
27969
|
-
if (!isObject2(object2) || typeof
|
|
28057
|
+
function hasProperty(object2, path71) {
|
|
28058
|
+
if (!isObject2(object2) || typeof path71 !== "string" && !Array.isArray(path71)) {
|
|
27970
28059
|
return false;
|
|
27971
28060
|
}
|
|
27972
|
-
const pathArray = normalizePath(
|
|
28061
|
+
const pathArray = normalizePath(path71);
|
|
27973
28062
|
if (pathArray.length === 0) {
|
|
27974
28063
|
return false;
|
|
27975
28064
|
}
|
|
@@ -31788,8 +31877,8 @@ var require_utils = __commonJS({
|
|
|
31788
31877
|
}
|
|
31789
31878
|
return ind;
|
|
31790
31879
|
}
|
|
31791
|
-
function removeDotSegments(
|
|
31792
|
-
let input4 =
|
|
31880
|
+
function removeDotSegments(path71) {
|
|
31881
|
+
let input4 = path71;
|
|
31793
31882
|
const output2 = [];
|
|
31794
31883
|
let nextSlash = -1;
|
|
31795
31884
|
let len = 0;
|
|
@@ -32198,8 +32287,8 @@ var require_schemes = __commonJS({
|
|
|
32198
32287
|
}
|
|
32199
32288
|
if (wsComponent.resourceName) {
|
|
32200
32289
|
const queryIndex = wsComponent.resourceName.indexOf("?");
|
|
32201
|
-
const
|
|
32202
|
-
wsComponent.path =
|
|
32290
|
+
const path71 = queryIndex === -1 ? wsComponent.resourceName : wsComponent.resourceName.slice(0, queryIndex);
|
|
32291
|
+
wsComponent.path = path71 && path71 !== "/" ? path71 : void 0;
|
|
32203
32292
|
wsComponent.query = queryIndex === -1 ? void 0 : wsComponent.resourceName.slice(queryIndex + 1);
|
|
32204
32293
|
wsComponent.resourceName = void 0;
|
|
32205
32294
|
}
|
|
@@ -39758,22 +39847,22 @@ function withPath(root, segments, value) {
|
|
|
39758
39847
|
if (!isPlainObject4(root)) return root;
|
|
39759
39848
|
return { ...root, [head]: withPath(root[head], rest, value) };
|
|
39760
39849
|
}
|
|
39761
|
-
function leavesUnder(
|
|
39762
|
-
const section =
|
|
39850
|
+
function leavesUnder(path71, policy) {
|
|
39851
|
+
const section = path71.split(".")[0];
|
|
39763
39852
|
const candidates = policy.bySection.get(section);
|
|
39764
39853
|
if (candidates === void 0) return NO_RELAXED;
|
|
39765
|
-
if (
|
|
39766
|
-
return candidates.filter((leaf) => leaf.path ===
|
|
39854
|
+
if (path71 === section) return candidates;
|
|
39855
|
+
return candidates.filter((leaf) => leaf.path === path71 || leaf.path.startsWith(`${path71}.`));
|
|
39767
39856
|
}
|
|
39768
|
-
function relativeSegments(
|
|
39769
|
-
return leafPath ===
|
|
39857
|
+
function relativeSegments(path71, leafPath) {
|
|
39858
|
+
return leafPath === path71 ? [] : leafPath.slice(path71.length + 1).split(".");
|
|
39770
39859
|
}
|
|
39771
|
-
function repairWidenedLeaves(
|
|
39772
|
-
const leaves = leavesUnder(
|
|
39860
|
+
function repairWidenedLeaves(path71, value, policy) {
|
|
39861
|
+
const leaves = leavesUnder(path71, policy);
|
|
39773
39862
|
let repaired = value;
|
|
39774
39863
|
let skewed;
|
|
39775
39864
|
for (const leaf of leaves) {
|
|
39776
|
-
const relative12 = relativeSegments(
|
|
39865
|
+
const relative12 = relativeSegments(path71, leaf.path);
|
|
39777
39866
|
const stored = relative12.length === 0 ? value : valueAt(value, relative12);
|
|
39778
39867
|
if (stored === MISSING) continue;
|
|
39779
39868
|
if (stored === leaf.fallback) continue;
|
|
@@ -40954,6 +41043,33 @@ function seedUiDmViewLeaves(store) {
|
|
|
40954
41043
|
...!("showSessions" in ui) && { showSessions: false }
|
|
40955
41044
|
});
|
|
40956
41045
|
}
|
|
41046
|
+
function markLegacyPathOnlyApprovals(store) {
|
|
41047
|
+
const extensions = store.get("extensions");
|
|
41048
|
+
if (extensions === null || typeof extensions !== "object" || Array.isArray(extensions)) return;
|
|
41049
|
+
const sources2 = extensions.approvedSources;
|
|
41050
|
+
if (sources2 === null || typeof sources2 !== "object" || Array.isArray(sources2)) return;
|
|
41051
|
+
const approvedToRun = extensions.approvedToRun;
|
|
41052
|
+
const unsourced = Array.isArray(approvedToRun) ? approvedToRun.filter(
|
|
41053
|
+
(id) => typeof id === "string" && !(id in sources2)
|
|
41054
|
+
) : [];
|
|
41055
|
+
const listed2 = extensions.legacyUnsourced;
|
|
41056
|
+
const needsList = unsourced.length > 0 && !Array.isArray(listed2);
|
|
41057
|
+
let changed = false;
|
|
41058
|
+
const next = {};
|
|
41059
|
+
for (const [id, source] of Object.entries(sources2)) {
|
|
41060
|
+
const entry = source;
|
|
41061
|
+
const pathOnly = entry !== null && typeof entry === "object" && !entry.digest && !entry.authorHome && !entry.grants && !entry.devLink && entry.legacyPathOnly !== true;
|
|
41062
|
+
next[id] = pathOnly ? { ...entry, legacyPathOnly: true } : source;
|
|
41063
|
+
changed ||= pathOnly;
|
|
41064
|
+
}
|
|
41065
|
+
if (changed || needsList) {
|
|
41066
|
+
store.set("extensions", {
|
|
41067
|
+
...extensions,
|
|
41068
|
+
approvedSources: next,
|
|
41069
|
+
...needsList ? { legacyUnsourced: unsourced } : {}
|
|
41070
|
+
});
|
|
41071
|
+
}
|
|
41072
|
+
}
|
|
40957
41073
|
var KEPT_FROM_AUTO_MOVES_ACCOUNT_ID;
|
|
40958
41074
|
var init_v0_90_onward = __esm({
|
|
40959
41075
|
"../../apps/server/src/services/core/config-migrations/v0-90-onward.ts"() {
|
|
@@ -41668,7 +41784,15 @@ var init_config_migrations = __esm({
|
|
|
41668
41784
|
// Writes `ui.dmView: false` and `ui.showSessions: false` where the stored
|
|
41669
41785
|
// `ui` section lacks them, and touches nothing else (DOR-3074). See
|
|
41670
41786
|
// `seedUiDmViewLeaves`.
|
|
41671
|
-
"0.125.0": seedUiDmViewLeaves
|
|
41787
|
+
"0.125.0": seedUiDmViewLeaves,
|
|
41788
|
+
// v0.126.0 is the newest tag, so this opens 0.126.1. Frozen from merge;
|
|
41789
|
+
// anything further opens `'0.127.0'`.
|
|
41790
|
+
//
|
|
41791
|
+
// Marks each extension approval that names no content with
|
|
41792
|
+
// `legacyPathOnly: true`, and touches nothing else (DOR-3068). Only a marked
|
|
41793
|
+
// approval is pinned to the files the next scan finds. See
|
|
41794
|
+
// `markLegacyPathOnlyApprovals`.
|
|
41795
|
+
"0.126.1": markLegacyPathOnlyApprovals
|
|
41672
41796
|
};
|
|
41673
41797
|
}
|
|
41674
41798
|
});
|
|
@@ -41733,6 +41857,7 @@ __export(config_manager_exports, {
|
|
|
41733
41857
|
generalizeTelemetryConsent: () => generalizeTelemetryConsent,
|
|
41734
41858
|
initConfigManager: () => initConfigManager,
|
|
41735
41859
|
keepAccountOutOfAutoMoves: () => keepAccountOutOfAutoMoves,
|
|
41860
|
+
markLegacyPathOnlyApprovals: () => markLegacyPathOnlyApprovals,
|
|
41736
41861
|
migrateClaudeAccountRegistry: () => migrateClaudeAccountRegistry,
|
|
41737
41862
|
migrateSidebarMembersToItemRefs: () => migrateSidebarMembersToItemRefs,
|
|
41738
41863
|
migrateSidebarSectionPrefs: () => migrateSidebarSectionPrefs,
|
|
@@ -45609,16 +45734,16 @@ function resolveRelativePath(source, context2) {
|
|
|
45609
45734
|
throw new ResolvePluginSourceError('Relative paths must not contain ".."');
|
|
45610
45735
|
}
|
|
45611
45736
|
const startsWithDotSlash = source.startsWith("./");
|
|
45612
|
-
let
|
|
45737
|
+
let path71;
|
|
45613
45738
|
if (startsWithDotSlash) {
|
|
45614
|
-
|
|
45739
|
+
path71 = stripLeadingDotSlash(source);
|
|
45615
45740
|
} else {
|
|
45616
45741
|
const pluginRoot = normalizePluginRoot(context2.pluginRoot);
|
|
45617
|
-
|
|
45742
|
+
path71 = pluginRoot ? `${pluginRoot}/${source}` : source;
|
|
45618
45743
|
}
|
|
45619
45744
|
return {
|
|
45620
45745
|
type: "relative-path",
|
|
45621
|
-
path:
|
|
45746
|
+
path: path71,
|
|
45622
45747
|
marketplaceRoot: context2.marketplaceRoot
|
|
45623
45748
|
};
|
|
45624
45749
|
}
|
|
@@ -46200,7 +46325,7 @@ var init_marketplace_schemas = __esm({
|
|
|
46200
46325
|
default: "runs at the most careful setting its agent offers",
|
|
46201
46326
|
plan: "can only read and plan, and cannot change anything",
|
|
46202
46327
|
acceptEdits: "can change files on its own, and on some agents run commands too",
|
|
46203
|
-
dontAsk: "
|
|
46328
|
+
dontAsk: "never asks, and refuses tools it is not allowed; it can still read its own folder",
|
|
46204
46329
|
bypassPermissions: "can run any command without a permission prompt",
|
|
46205
46330
|
auto: "decides for itself which actions are safe to take"
|
|
46206
46331
|
};
|
|
@@ -51109,11 +51234,11 @@ var require_dist2 = __commonJS({
|
|
|
51109
51234
|
return schema3;
|
|
51110
51235
|
}
|
|
51111
51236
|
generatePath(route) {
|
|
51112
|
-
const { method, path:
|
|
51237
|
+
const { method, path: path71, request, responses } = route, pathItemConfig = __rest(route, ["method", "path", "request", "responses"]);
|
|
51113
51238
|
const generatedResponses = mapValues(responses, (response) => {
|
|
51114
51239
|
return this.getResponse(response);
|
|
51115
51240
|
});
|
|
51116
|
-
const parameters = enhanceMissingParametersError(() => this.getParameters(request), { route: `${method} ${
|
|
51241
|
+
const parameters = enhanceMissingParametersError(() => this.getParameters(request), { route: `${method} ${path71}` });
|
|
51117
51242
|
const requestBody = this.getRequestBody(request === null || request === void 0 ? void 0 : request.body);
|
|
51118
51243
|
const routeDoc = {
|
|
51119
51244
|
[method]: Object.assign(Object.assign(Object.assign(Object.assign({}, pathItemConfig), parameters.length > 0 ? {
|
|
@@ -51580,10 +51705,10 @@ var init_canvas_channel_schemas = __esm({
|
|
|
51580
51705
|
});
|
|
51581
51706
|
});
|
|
51582
51707
|
CanvasChannelPointerSchema = external_exports.string().max(4096).refine(
|
|
51583
|
-
(
|
|
51584
|
-
if (
|
|
51585
|
-
if (!
|
|
51586
|
-
return
|
|
51708
|
+
(path71) => {
|
|
51709
|
+
if (path71 === "") return true;
|
|
51710
|
+
if (!path71.startsWith("/")) return false;
|
|
51711
|
+
return path71.slice(1).split("/").every(
|
|
51587
51712
|
(segment) => !/~(?![01])/u.test(segment) && !unsafeKeys.has(segment.replaceAll("~1", "/").replaceAll("~0", "~"))
|
|
51588
51713
|
);
|
|
51589
51714
|
},
|
|
@@ -53610,6 +53735,7 @@ var init_capabilities = __esm({
|
|
|
53610
53735
|
var PROJECT_NAME_PATTERN, ProjectRefSchema, ProjectInfoSchema, ProjectListResponseSchema, ProjectResolveQuerySchema, ProjectResolveResponseSchema, AccountEligibilityRowSchema, AccountEligibilityQuerySchema, AccountEligibilityResponseSchema, ProjectAccountsRequestSchema, ProjectWithoutCreditsRequestSchema, OnlyProjectsRequestSchema, OnlyProjectsResponseSchema, NoAutoMoveSchema;
|
|
53611
53736
|
var init_project_schemas = __esm({
|
|
53612
53737
|
"../shared/src/project-schemas.ts"() {
|
|
53738
|
+
"use strict";
|
|
53613
53739
|
init_zod();
|
|
53614
53740
|
init_zod_openapi();
|
|
53615
53741
|
extendZodWithOpenApiOnce();
|
|
@@ -59103,9 +59229,9 @@ function substitutePlaceholders(value) {
|
|
|
59103
59229
|
}
|
|
59104
59230
|
return value;
|
|
59105
59231
|
}
|
|
59106
|
-
function getValueAtPath(value,
|
|
59232
|
+
function getValueAtPath(value, path71) {
|
|
59107
59233
|
let current3 = value;
|
|
59108
|
-
for (const segment of
|
|
59234
|
+
for (const segment of path71) {
|
|
59109
59235
|
if (current3 === null || typeof current3 !== "object") return void 0;
|
|
59110
59236
|
current3 = current3[segment];
|
|
59111
59237
|
}
|
|
@@ -59134,12 +59260,12 @@ var init_ui_template = __esm({
|
|
|
59134
59260
|
const result2 = WidgetDocumentSchema.safeParse(substitutePlaceholders(value));
|
|
59135
59261
|
if (result2.success) return;
|
|
59136
59262
|
for (const issue2 of result2.error.issues) {
|
|
59137
|
-
const
|
|
59263
|
+
const path71 = issue2.path.filter(
|
|
59138
59264
|
(segment) => segment !== void 0 && typeof segment !== "symbol"
|
|
59139
59265
|
);
|
|
59140
|
-
const original = getValueAtPath(value,
|
|
59141
|
-
const message2 = typeof original === "string" && WHOLE_PLACEHOLDER_PATTERN.test(original) ? `Placeholder "${original}" is not allowed in field "${
|
|
59142
|
-
ctx.addIssue({ code: external_exports.ZodIssueCode.custom, path:
|
|
59266
|
+
const original = getValueAtPath(value, path71);
|
|
59267
|
+
const message2 = typeof original === "string" && WHOLE_PLACEHOLDER_PATTERN.test(original) ? `Placeholder "${original}" is not allowed in field "${path71.join(".")}" \u2014 placeholders may only fill free-form string fields, not number or enum fields` : issue2.message;
|
|
59268
|
+
ctx.addIssue({ code: external_exports.ZodIssueCode.custom, path: path71, message: message2 });
|
|
59143
59269
|
}
|
|
59144
59270
|
}).transform((value) => value)
|
|
59145
59271
|
});
|
|
@@ -62237,7 +62363,7 @@ var init_context = __esm({
|
|
|
62237
62363
|
init_utils();
|
|
62238
62364
|
init_cookies();
|
|
62239
62365
|
init_validator2();
|
|
62240
|
-
createInternalContext = async (context2, { options, path:
|
|
62366
|
+
createInternalContext = async (context2, { options, path: path71 }) => {
|
|
62241
62367
|
const headers = new Headers();
|
|
62242
62368
|
let responseStatus = void 0;
|
|
62243
62369
|
const { data, error: error63 } = await runValidation(options, context2);
|
|
@@ -62249,7 +62375,7 @@ var init_context = __esm({
|
|
|
62249
62375
|
...context2,
|
|
62250
62376
|
body: data.body,
|
|
62251
62377
|
query: data.query,
|
|
62252
|
-
path: context2.path ||
|
|
62378
|
+
path: context2.path || path71 || "virtual:",
|
|
62253
62379
|
context: "context" in context2 && context2.context ? context2.context : {},
|
|
62254
62380
|
returned: void 0,
|
|
62255
62381
|
headers: context2?.headers,
|
|
@@ -62476,16 +62602,16 @@ var init_to_response = __esm({
|
|
|
62476
62602
|
|
|
62477
62603
|
// ../../node_modules/.pnpm/better-call@1.4.0_zod@4.6.7/node_modules/better-call/dist/endpoint.mjs
|
|
62478
62604
|
function createEndpoint(pathOrOptions, handlerOrOptions, handlerOrNever) {
|
|
62479
|
-
const
|
|
62605
|
+
const path71 = typeof pathOrOptions === "string" ? pathOrOptions : void 0;
|
|
62480
62606
|
const options = typeof handlerOrOptions === "object" ? handlerOrOptions : pathOrOptions;
|
|
62481
62607
|
const handler = typeof handlerOrOptions === "function" ? handlerOrOptions : handlerOrNever;
|
|
62482
62608
|
if ((options.method === "GET" || options.method === "HEAD") && options.body) throw new BetterCallError("Body is not allowed with GET or HEAD methods");
|
|
62483
|
-
if (
|
|
62609
|
+
if (path71 && /\/{2,}/.test(path71)) throw new BetterCallError("Path cannot contain consecutive slashes");
|
|
62484
62610
|
const internalHandler = async (...inputCtx) => {
|
|
62485
62611
|
const context2 = inputCtx[0] || {};
|
|
62486
62612
|
const { data: internalContext, error: validationError } = await tryCatch(createInternalContext(context2, {
|
|
62487
62613
|
options,
|
|
62488
|
-
path:
|
|
62614
|
+
path: path71
|
|
62489
62615
|
}));
|
|
62490
62616
|
if (validationError) {
|
|
62491
62617
|
if (!(validationError instanceof ValidationError)) throw validationError;
|
|
@@ -62524,7 +62650,7 @@ function createEndpoint(pathOrOptions, handlerOrOptions, handlerOrNever) {
|
|
|
62524
62650
|
} : response;
|
|
62525
62651
|
};
|
|
62526
62652
|
internalHandler.options = options;
|
|
62527
|
-
internalHandler.path =
|
|
62653
|
+
internalHandler.path = path71;
|
|
62528
62654
|
return internalHandler;
|
|
62529
62655
|
}
|
|
62530
62656
|
function combineMiddleware(local, configured) {
|
|
@@ -62539,8 +62665,8 @@ var init_endpoint = __esm({
|
|
|
62539
62665
|
createEndpoint.create = (opts) => {
|
|
62540
62666
|
function createConfiguredEndpoint(...args) {
|
|
62541
62667
|
if (args.length === 3) {
|
|
62542
|
-
const [
|
|
62543
|
-
return createEndpoint(
|
|
62668
|
+
const [path71, options2, handler2] = args;
|
|
62669
|
+
return createEndpoint(path71, {
|
|
62544
62670
|
...options2,
|
|
62545
62671
|
use: combineMiddleware(options2.use, opts?.use)
|
|
62546
62672
|
}, handler2);
|
|
@@ -62810,39 +62936,39 @@ function createRouter() {
|
|
|
62810
62936
|
static: new NullProtoObj()
|
|
62811
62937
|
};
|
|
62812
62938
|
}
|
|
62813
|
-
function scanFirstGroup(
|
|
62939
|
+
function scanFirstGroup(path71) {
|
|
62814
62940
|
let i2 = 0;
|
|
62815
62941
|
let depth = 0;
|
|
62816
|
-
for (; i2 <
|
|
62817
|
-
const c3 =
|
|
62942
|
+
for (; i2 < path71.length; i2++) {
|
|
62943
|
+
const c3 = path71.charCodeAt(i2);
|
|
62818
62944
|
if (c3 === 92) i2++;
|
|
62819
62945
|
else if (c3 === 40) depth++;
|
|
62820
62946
|
else if (c3 === 41 && depth > 0) depth--;
|
|
62821
62947
|
else if (c3 === 123 && depth === 0) break;
|
|
62822
62948
|
}
|
|
62823
|
-
if (i2 >=
|
|
62949
|
+
if (i2 >= path71.length) return;
|
|
62824
62950
|
let j = i2 + 1;
|
|
62825
62951
|
depth = 0;
|
|
62826
|
-
for (; j <
|
|
62827
|
-
const c3 =
|
|
62952
|
+
for (; j < path71.length; j++) {
|
|
62953
|
+
const c3 = path71.charCodeAt(j);
|
|
62828
62954
|
if (c3 === 92) j++;
|
|
62829
62955
|
else if (c3 === 40) depth++;
|
|
62830
62956
|
else if (c3 === 41 && depth > 0) depth--;
|
|
62831
62957
|
else if (c3 === 125 && depth === 0) break;
|
|
62832
62958
|
}
|
|
62833
|
-
if (j >=
|
|
62834
|
-
const mod =
|
|
62959
|
+
if (j >= path71.length) return;
|
|
62960
|
+
const mod = path71[j + 1];
|
|
62835
62961
|
const hasMod = mod === "?" || mod === "+" || mod === "*";
|
|
62836
62962
|
return [
|
|
62837
|
-
|
|
62838
|
-
|
|
62839
|
-
|
|
62963
|
+
path71.slice(0, i2),
|
|
62964
|
+
path71.slice(i2 + 1, j),
|
|
62965
|
+
path71.slice(j + (hasMod ? 2 : 1)),
|
|
62840
62966
|
hasMod ? mod : void 0
|
|
62841
62967
|
];
|
|
62842
62968
|
}
|
|
62843
|
-
function expandGroupDelimiters(
|
|
62844
|
-
if (!
|
|
62845
|
-
const group = scanFirstGroup(
|
|
62969
|
+
function expandGroupDelimiters(path71) {
|
|
62970
|
+
if (!path71.includes("{")) return;
|
|
62971
|
+
const group = scanFirstGroup(path71);
|
|
62846
62972
|
if (!group) return;
|
|
62847
62973
|
const [pre, body, suf, mod] = group;
|
|
62848
62974
|
if (!mod) return [pre + body + suf];
|
|
@@ -62910,9 +63036,9 @@ function replaceSegmentWildcards(segment, unnamedStart, toGroupKey = toUnnamedGr
|
|
|
62910
63036
|
}
|
|
62911
63037
|
return [replaced, nextIndex];
|
|
62912
63038
|
}
|
|
62913
|
-
function encodeEscapes(
|
|
62914
|
-
if (!
|
|
62915
|
-
return
|
|
63039
|
+
function encodeEscapes(path71) {
|
|
63040
|
+
if (!path71.includes("\\")) return path71;
|
|
63041
|
+
return path71.replace(/\\([:(){}])/g, (_3, c3) => "\uFFFD" + "ABCDE"[":(){}".indexOf(c3)]);
|
|
62916
63042
|
}
|
|
62917
63043
|
function segmentKey(segment) {
|
|
62918
63044
|
if (segment.startsWith("**")) return 2;
|
|
@@ -62941,22 +63067,22 @@ function expandModifiers(segments) {
|
|
|
62941
63067
|
return m2[2] === "+" ? [wc] : [wc, without];
|
|
62942
63068
|
}
|
|
62943
63069
|
}
|
|
62944
|
-
function normalizePath2(
|
|
62945
|
-
if (!
|
|
63070
|
+
function normalizePath2(path71) {
|
|
63071
|
+
if (!path71.includes("/.")) return path71;
|
|
62946
63072
|
const r3 = [];
|
|
62947
|
-
for (const s2 of
|
|
63073
|
+
for (const s2 of path71.split("/")) if (s2 === ".") continue;
|
|
62948
63074
|
else if (s2 === ".." && r3.length > 1) r3.pop();
|
|
62949
63075
|
else r3.push(s2);
|
|
62950
63076
|
return r3.join("/") || "/";
|
|
62951
63077
|
}
|
|
62952
|
-
function splitPath(
|
|
62953
|
-
const s2 =
|
|
63078
|
+
function splitPath(path71) {
|
|
63079
|
+
const s2 = path71.split("/");
|
|
62954
63080
|
s2.shift();
|
|
62955
63081
|
if (s2[s2.length - 1] === "") s2.pop();
|
|
62956
63082
|
return s2;
|
|
62957
63083
|
}
|
|
62958
|
-
function splitRoute(
|
|
62959
|
-
const s2 = splitPath(
|
|
63084
|
+
function splitRoute(path71) {
|
|
63085
|
+
const s2 = splitPath(path71);
|
|
62960
63086
|
while (s2[s2.length - 1] === "") s2.pop();
|
|
62961
63087
|
return s2;
|
|
62962
63088
|
}
|
|
@@ -62972,16 +63098,16 @@ function getMatchParams(segments, paramsMap) {
|
|
|
62972
63098
|
}
|
|
62973
63099
|
return params;
|
|
62974
63100
|
}
|
|
62975
|
-
function addRoute(ctx, method = "",
|
|
63101
|
+
function addRoute(ctx, method = "", path71, data) {
|
|
62976
63102
|
method = method.toUpperCase();
|
|
62977
|
-
if (
|
|
62978
|
-
const groupExpanded = expandGroupDelimiters(
|
|
63103
|
+
if (path71.charCodeAt(0) !== 47) path71 = `/${path71}`;
|
|
63104
|
+
const groupExpanded = expandGroupDelimiters(path71);
|
|
62979
63105
|
if (groupExpanded) {
|
|
62980
63106
|
for (const expandedPath of groupExpanded) addRoute(ctx, method, expandedPath, data);
|
|
62981
63107
|
return;
|
|
62982
63108
|
}
|
|
62983
|
-
|
|
62984
|
-
const segments = splitRoute(
|
|
63109
|
+
path71 = encodeEscapes(path71);
|
|
63110
|
+
const segments = splitRoute(path71);
|
|
62985
63111
|
const expanded = expandModifiers(segments);
|
|
62986
63112
|
if (expanded) {
|
|
62987
63113
|
for (const p of expanded) addRoute(ctx, method, p, data);
|
|
@@ -63072,15 +63198,15 @@ function getParamRegexp(segment, unnamedStart = 0) {
|
|
|
63072
63198
|
const regex2 = _s.replace(/:([\w-]+)(?:\(([^)]*)\))?/g, (_3, id, p) => `(?<${toGroupName(id)}>${p || "[^/]+"})`).replace(/\((?![?<])/g, () => `(?<${toUnnamedGroupKey(_i++)}>`).replace(/\uFFFE(.)/g, (_3, c3) => /[.*+?^${}()|[\]\\]/.test(c3) ? `\\${c3}` : c3);
|
|
63073
63199
|
return [new RegExp(`^${regex2}$`), _i];
|
|
63074
63200
|
}
|
|
63075
|
-
function findRoute(ctx, method = "",
|
|
63076
|
-
if (opts?.normalize)
|
|
63077
|
-
if (
|
|
63078
|
-
const staticNode = ctx.static[
|
|
63201
|
+
function findRoute(ctx, method = "", path71, opts) {
|
|
63202
|
+
if (opts?.normalize) path71 = normalizePath2(path71);
|
|
63203
|
+
if (path71.charCodeAt(path71.length - 1) === 47) path71 = path71.slice(0, -1);
|
|
63204
|
+
const staticNode = ctx.static[path71];
|
|
63079
63205
|
if (staticNode && staticNode.methods) {
|
|
63080
63206
|
const staticMatch = staticNode.methods[method] || staticNode.methods[""];
|
|
63081
63207
|
if (staticMatch !== void 0) return staticMatch[0];
|
|
63082
63208
|
}
|
|
63083
|
-
const segments = splitPath(
|
|
63209
|
+
const segments = splitPath(path71);
|
|
63084
63210
|
const match = _lookupTree(ctx.root, method, segments, 0);
|
|
63085
63211
|
if (match === void 0) return;
|
|
63086
63212
|
if (opts?.params === false) return match;
|
|
@@ -63142,10 +63268,10 @@ function _selectMatcher(methods2, method, segments, dynamicTerminal, optionalOnl
|
|
|
63142
63268
|
}
|
|
63143
63269
|
return best;
|
|
63144
63270
|
}
|
|
63145
|
-
function findAllRoutes(ctx, method = "",
|
|
63146
|
-
if (opts?.normalize)
|
|
63147
|
-
if (
|
|
63148
|
-
const segments = splitPath(
|
|
63271
|
+
function findAllRoutes(ctx, method = "", path71, opts) {
|
|
63272
|
+
if (opts?.normalize) path71 = normalizePath2(path71);
|
|
63273
|
+
if (path71.charCodeAt(path71.length - 1) === 47) path71 = path71.slice(0, -1);
|
|
63274
|
+
const segments = splitPath(path71);
|
|
63149
63275
|
const matches = _findAll(ctx.root, method, segments, 0);
|
|
63150
63276
|
if (opts?.params === false) return matches;
|
|
63151
63277
|
return matches.map((m2) => {
|
|
@@ -63249,25 +63375,25 @@ var init_router = __esm({
|
|
|
63249
63375
|
const methods2 = Array.isArray(endpoint.options?.method) ? endpoint.options.method : [endpoint.options?.method];
|
|
63250
63376
|
for (const method of methods2) addRoute(router2, method, endpoint.path, endpoint);
|
|
63251
63377
|
}
|
|
63252
|
-
if (config3?.routerMiddleware?.length) for (const { path:
|
|
63378
|
+
if (config3?.routerMiddleware?.length) for (const { path: path71, middleware } of config3.routerMiddleware) addRoute(middlewareRouter, "*", path71, middleware);
|
|
63253
63379
|
const basePath = config3?.basePath && config3.basePath !== "/" ? config3.basePath.replace(/\/+$/, "") : "";
|
|
63254
63380
|
const processRequest = async (request) => {
|
|
63255
63381
|
const url2 = new URL(request.url);
|
|
63256
63382
|
const pathname = url2.pathname;
|
|
63257
|
-
let
|
|
63383
|
+
let path71;
|
|
63258
63384
|
if (basePath) {
|
|
63259
63385
|
if (!pathname.startsWith(`${basePath}/`)) return new Response(null, {
|
|
63260
63386
|
status: 404,
|
|
63261
63387
|
statusText: "Not Found"
|
|
63262
63388
|
});
|
|
63263
|
-
|
|
63264
|
-
} else
|
|
63265
|
-
if (
|
|
63389
|
+
path71 = pathname.slice(basePath.length);
|
|
63390
|
+
} else path71 = pathname;
|
|
63391
|
+
if (path71.length === 0 || /\/{2,}/.test(path71)) return new Response(null, {
|
|
63266
63392
|
status: 404,
|
|
63267
63393
|
statusText: "Not Found"
|
|
63268
63394
|
});
|
|
63269
|
-
const route = findRoute(router2, request.method,
|
|
63270
|
-
if (
|
|
63395
|
+
const route = findRoute(router2, request.method, path71);
|
|
63396
|
+
if (path71.endsWith("/") !== route?.data?.path?.endsWith("/") && !config3?.skipTrailingSlashes) return new Response(null, {
|
|
63271
63397
|
status: 404,
|
|
63272
63398
|
statusText: "Not Found"
|
|
63273
63399
|
});
|
|
@@ -63285,7 +63411,7 @@ var init_router = __esm({
|
|
|
63285
63411
|
try {
|
|
63286
63412
|
const allowedMediaTypes = handler.options.metadata?.allowedMediaTypes || config3?.allowedMediaTypes;
|
|
63287
63413
|
const context2 = {
|
|
63288
|
-
path:
|
|
63414
|
+
path: path71,
|
|
63289
63415
|
method: request.method,
|
|
63290
63416
|
headers: request.headers,
|
|
63291
63417
|
params: route.params ? { ...route.params } : {},
|
|
@@ -63296,7 +63422,7 @@ var init_router = __esm({
|
|
|
63296
63422
|
asResponse: true,
|
|
63297
63423
|
context: config3?.routerContext
|
|
63298
63424
|
};
|
|
63299
|
-
const middlewareRoutes = findAllRoutes(middlewareRouter, "*",
|
|
63425
|
+
const middlewareRoutes = findAllRoutes(middlewareRouter, "*", path71);
|
|
63300
63426
|
if (middlewareRoutes?.length) for (const { data: middleware, params } of middlewareRoutes) {
|
|
63301
63427
|
const res = await middleware({
|
|
63302
63428
|
...context2,
|
|
@@ -63482,8 +63608,8 @@ function wrapEndpointHandler(handler, options) {
|
|
|
63482
63608
|
}
|
|
63483
63609
|
function createAuthEndpoint(...args) {
|
|
63484
63610
|
if (args.length === 3) {
|
|
63485
|
-
const [
|
|
63486
|
-
return createEndpointWithAuthContext(
|
|
63611
|
+
const [path71, options2, handler2] = args;
|
|
63612
|
+
return createEndpointWithAuthContext(path71, options2, wrapEndpointHandler(handler2, options2));
|
|
63487
63613
|
}
|
|
63488
63614
|
const [options, handler] = args;
|
|
63489
63615
|
return createEndpointWithAuthContext(options, wrapEndpointHandler(handler, options));
|
|
@@ -63992,8 +64118,8 @@ function getIP(req, options) {
|
|
|
63992
64118
|
if (isTest() || isDevelopment()) return LOCALHOST_IP;
|
|
63993
64119
|
return null;
|
|
63994
64120
|
}
|
|
63995
|
-
function createRateLimitKey(ip,
|
|
63996
|
-
return `${ip}|${
|
|
64121
|
+
function createRateLimitKey(ip, path71) {
|
|
64122
|
+
return `${ip}|${path71}`;
|
|
63997
64123
|
}
|
|
63998
64124
|
var ipv4Schema, ipv6Schema, CIDR_PREFIX_PATTERN, LOCALHOST_IP, DEFAULT_IP_HEADERS;
|
|
63999
64125
|
var init_ip = __esm({
|
|
@@ -70865,20 +70991,20 @@ function createRetryStrategy(options) {
|
|
|
70865
70991
|
throw new Error("Invalid retry strategy");
|
|
70866
70992
|
}
|
|
70867
70993
|
}
|
|
70868
|
-
function parseMethodModifier(
|
|
70869
|
-
if (!
|
|
70994
|
+
function parseMethodModifier(path71) {
|
|
70995
|
+
if (!path71.startsWith("@")) return {
|
|
70870
70996
|
method: void 0,
|
|
70871
|
-
path:
|
|
70997
|
+
path: path71
|
|
70872
70998
|
};
|
|
70873
|
-
const separator =
|
|
70874
|
-
const method =
|
|
70999
|
+
const separator = path71.indexOf("/");
|
|
71000
|
+
const method = path71.slice(1, separator === -1 ? void 0 : separator);
|
|
70875
71001
|
if (!methods.includes(method)) return {
|
|
70876
71002
|
method: void 0,
|
|
70877
|
-
path:
|
|
71003
|
+
path: path71
|
|
70878
71004
|
};
|
|
70879
71005
|
return {
|
|
70880
71006
|
method,
|
|
70881
|
-
path: separator === -1 ?
|
|
71007
|
+
path: separator === -1 ? path71 : path71.slice(separator + 1)
|
|
70882
71008
|
};
|
|
70883
71009
|
}
|
|
70884
71010
|
function resolvePathSegment(segment, pathParams) {
|
|
@@ -70897,7 +71023,7 @@ function getURL$1(url2, option) {
|
|
|
70897
71023
|
const { path: requestPath } = parseMethodModifier(url2);
|
|
70898
71024
|
if (requestPath !== url2) url2 = `/${requestPath}`;
|
|
70899
71025
|
if (!basePath.endsWith("/")) basePath += "/";
|
|
70900
|
-
let [
|
|
71026
|
+
let [path71, urlQuery] = url2.replace(basePath, "").split("?");
|
|
70901
71027
|
const queryParams = new URLSearchParams(urlQuery);
|
|
70902
71028
|
for (const [key, value] of Object.entries(query || {})) {
|
|
70903
71029
|
if (value == null) continue;
|
|
@@ -70911,18 +71037,18 @@ function getURL$1(url2, option) {
|
|
|
70911
71037
|
}
|
|
70912
71038
|
const pathParams = /* @__PURE__ */ new Map();
|
|
70913
71039
|
if (params) if (Array.isArray(params)) {
|
|
70914
|
-
const paramPaths =
|
|
71040
|
+
const paramPaths = path71.split("/").filter((p) => p.startsWith(":"));
|
|
70915
71041
|
for (const [index2, key] of paramPaths.entries()) {
|
|
70916
71042
|
const value = params[index2];
|
|
70917
71043
|
pathParams.set(key, String(value));
|
|
70918
71044
|
}
|
|
70919
71045
|
} else for (const [key, value] of Object.entries(params)) pathParams.set(`:${key}`, String(value));
|
|
70920
|
-
|
|
70921
|
-
|
|
71046
|
+
path71 = path71.split("/").map((segment) => resolvePathSegment(segment, pathParams)).join("/");
|
|
71047
|
+
path71 = path71.replace(/^\/+/, "");
|
|
70922
71048
|
let queryParamString = queryParams.toString();
|
|
70923
71049
|
queryParamString = queryParamString.length > 0 ? `?${queryParamString}`.replace(/\+/g, "%20") : "";
|
|
70924
|
-
if (!basePath.startsWith("http")) return `${basePath}${
|
|
70925
|
-
return new URL(`${
|
|
71050
|
+
if (!basePath.startsWith("http")) return `${basePath}${path71}${queryParamString}`;
|
|
71051
|
+
return new URL(`${path71}${queryParamString}`, basePath);
|
|
70926
71052
|
}
|
|
70927
71053
|
function detectResponseType(request) {
|
|
70928
71054
|
const _contentType = request.headers.get("content-type");
|
|
@@ -98575,7 +98701,7 @@ var init_query_promise = __esm({
|
|
|
98575
98701
|
function mapResultRow(columns, row2, joinsNotNullableMap) {
|
|
98576
98702
|
const nullifyMap = {};
|
|
98577
98703
|
const result2 = columns.reduce(
|
|
98578
|
-
(result22, { path:
|
|
98704
|
+
(result22, { path: path71, field }, columnIndex) => {
|
|
98579
98705
|
let decoder2;
|
|
98580
98706
|
if (is(field, Column)) {
|
|
98581
98707
|
decoder2 = field;
|
|
@@ -98587,8 +98713,8 @@ function mapResultRow(columns, row2, joinsNotNullableMap) {
|
|
|
98587
98713
|
decoder2 = field.sql.decoder;
|
|
98588
98714
|
}
|
|
98589
98715
|
let node2 = result22;
|
|
98590
|
-
for (const [pathChunkIndex, pathChunk] of
|
|
98591
|
-
if (pathChunkIndex <
|
|
98716
|
+
for (const [pathChunkIndex, pathChunk] of path71.entries()) {
|
|
98717
|
+
if (pathChunkIndex < path71.length - 1) {
|
|
98592
98718
|
if (!(pathChunk in node2)) {
|
|
98593
98719
|
node2[pathChunk] = {};
|
|
98594
98720
|
}
|
|
@@ -98596,8 +98722,8 @@ function mapResultRow(columns, row2, joinsNotNullableMap) {
|
|
|
98596
98722
|
} else {
|
|
98597
98723
|
const rawValue = row2[columnIndex];
|
|
98598
98724
|
const value = node2[pathChunk] = rawValue === null ? null : decoder2.mapFromDriverValue(rawValue);
|
|
98599
|
-
if (joinsNotNullableMap && is(field, Column) &&
|
|
98600
|
-
const objectName =
|
|
98725
|
+
if (joinsNotNullableMap && is(field, Column) && path71.length === 2) {
|
|
98726
|
+
const objectName = path71[0];
|
|
98601
98727
|
if (!(objectName in nullifyMap)) {
|
|
98602
98728
|
nullifyMap[objectName] = value === null ? getTableName(field.table) : false;
|
|
98603
98729
|
} else if (typeof nullifyMap[objectName] === "string" && nullifyMap[objectName] !== getTableName(field.table)) {
|
|
@@ -109719,7 +109845,8 @@ var init_notifications = __esm({
|
|
|
109719
109845
|
"heartbeat.credits-offer",
|
|
109720
109846
|
"connector.destructive_pending",
|
|
109721
109847
|
"connector.destructive_executed",
|
|
109722
|
-
"web.new_device"
|
|
109848
|
+
"web.new_device",
|
|
109849
|
+
"agent.secret_files"
|
|
109723
109850
|
]
|
|
109724
109851
|
}).notNull(),
|
|
109725
109852
|
/** How loud this was allowed to be. Copied from the registry at write time. */
|
|
@@ -113375,6 +113502,8 @@ var init_config_disclosure = __esm({
|
|
|
113375
113502
|
// including the home directory. An agent needs none of it — the refusal it
|
|
113376
113503
|
// reads already names the id to ask the person about — so it stays in.
|
|
113377
113504
|
"extensions.approvedSources": "withhold",
|
|
113505
|
+
// The old approvals still waiting for a copy (DOR-3068). Nothing an agent needs.
|
|
113506
|
+
"extensions.legacyUnsourced": "withhold",
|
|
113378
113507
|
// The permission set each approval covers (DOR-2686). Nothing an agent needs:
|
|
113379
113508
|
// the extension's own manifest says what it declares.
|
|
113380
113509
|
"extensions.approvedPermissions": "withhold",
|
|
@@ -113425,6 +113554,13 @@ var init_config_disclosure = __esm({
|
|
|
113425
113554
|
// The other half of the same record: which packages a person turned down.
|
|
113426
113555
|
// Same contents, same reasoning — package names and digests, no secrets.
|
|
113427
113556
|
"harness.refusedHooks": "expose",
|
|
113557
|
+
// Which state of each agent's own folder settings a person let run or turned
|
|
113558
|
+
// down (DOR-3068): agent ids and digests, no secrets. The part digests behind
|
|
113559
|
+
// each yes are nothing an agent needs.
|
|
113560
|
+
"harness.approvedFolderConfig": "expose",
|
|
113561
|
+
"harness.refusedFolderConfig": "expose",
|
|
113562
|
+
"harness.folderConfigPinned": "expose",
|
|
113563
|
+
"harness.approvedFolderConfigParts": "withhold",
|
|
113428
113564
|
// Which agent tools DorkOS shares your globally installed packages with, and
|
|
113429
113565
|
// when it last asked. Neither is a credential nor names one, and an agent that
|
|
113430
113566
|
// can say "your all-projects packages are not shared with Codex" is more
|
|
@@ -113619,17 +113755,17 @@ function patchPaths(value, prefix = "") {
|
|
|
113619
113755
|
if (entries.length === 0) return prefix ? [prefix] : [];
|
|
113620
113756
|
return entries.flatMap(([key, child]) => patchPaths(child, prefix ? `${prefix}.${key}` : key));
|
|
113621
113757
|
}
|
|
113622
|
-
function withoutArrayMarkers(
|
|
113623
|
-
return
|
|
113758
|
+
function withoutArrayMarkers(path71) {
|
|
113759
|
+
return path71.replaceAll("[]", "");
|
|
113624
113760
|
}
|
|
113625
113761
|
function prepareGuardedPaths(paths2) {
|
|
113626
|
-
return paths2.map((
|
|
113762
|
+
return paths2.map((path71) => ({ path: path71, plain: withoutArrayMarkers(path71) }));
|
|
113627
113763
|
}
|
|
113628
113764
|
function matchGuardedPaths(touched, guarded) {
|
|
113629
113765
|
const hits = /* @__PURE__ */ new Set();
|
|
113630
|
-
for (const
|
|
113766
|
+
for (const path71 of new Set(touched)) {
|
|
113631
113767
|
for (const { path: guardedPath, plain } of guarded) {
|
|
113632
|
-
if (
|
|
113768
|
+
if (path71 === plain || path71.startsWith(`${plain}.`) || plain.startsWith(`${path71}.`)) {
|
|
113633
113769
|
hits.add(guardedPath);
|
|
113634
113770
|
}
|
|
113635
113771
|
}
|
|
@@ -113665,8 +113801,8 @@ var init_remote_config_policy = __esm({
|
|
|
113665
113801
|
"cloud.remote.edgeProofRef"
|
|
113666
113802
|
];
|
|
113667
113803
|
CLOUD_REMOTE_WRITE_POLICY = Object.fromEntries(
|
|
113668
|
-
[...CLOUD_REMOTE_REACH_PATHS, ...CLOUD_REMOTE_CREDENTIAL_PATHS].map((
|
|
113669
|
-
|
|
113804
|
+
[...CLOUD_REMOTE_REACH_PATHS, ...CLOUD_REMOTE_CREDENTIAL_PATHS].map((path71) => [
|
|
113805
|
+
path71,
|
|
113670
113806
|
"operator-only"
|
|
113671
113807
|
])
|
|
113672
113808
|
);
|
|
@@ -113830,6 +113966,7 @@ var init_operator_only_stakes = __esm({
|
|
|
113830
113966
|
"extensions.disabled",
|
|
113831
113967
|
"extensions.approvedToRun",
|
|
113832
113968
|
"extensions.approvedSources",
|
|
113969
|
+
"extensions.legacyUnsourced",
|
|
113833
113970
|
"extensions.approvedPermissions",
|
|
113834
113971
|
"extensions.dismissedApprovals",
|
|
113835
113972
|
"extensions.trustedSources[].source",
|
|
@@ -113838,6 +113975,10 @@ var init_operator_only_stakes = __esm({
|
|
|
113838
113975
|
"extensions.forwardAgents",
|
|
113839
113976
|
"harness.approvedHooks",
|
|
113840
113977
|
"harness.refusedHooks",
|
|
113978
|
+
"harness.approvedFolderConfig",
|
|
113979
|
+
"harness.approvedFolderConfigParts",
|
|
113980
|
+
"harness.refusedFolderConfig",
|
|
113981
|
+
"harness.folderConfigPinned",
|
|
113841
113982
|
"runtimes.opencode.binaryPath",
|
|
113842
113983
|
"runtimes.codex.binaryPath",
|
|
113843
113984
|
"runtimes.codex.transport",
|
|
@@ -114415,6 +114556,10 @@ var init_config_write_policy = __esm({
|
|
|
114415
114556
|
// the same record: a caller that could point an approved id at another copy
|
|
114416
114557
|
// would move a person's decision onto code they never saw.
|
|
114417
114558
|
"extensions.approvedSources": "operator-only",
|
|
114559
|
+
// The pre-DOR-2383 approvals still waiting to be bound to a copy (DOR-3068).
|
|
114560
|
+
// A caller that could add an id here would have the next scan bind an old
|
|
114561
|
+
// approval to whatever folder sits at that name.
|
|
114562
|
+
"extensions.legacyUnsourced": "operator-only",
|
|
114418
114563
|
// The permission set each of those approvals covers (DOR-2686). The third
|
|
114419
114564
|
// half of the record: a caller that could widen an entry would let an
|
|
114420
114565
|
// extension reach hosts, programs or agents a person never saw on its card.
|
|
@@ -114484,6 +114629,13 @@ var init_config_write_policy = __esm({
|
|
|
114484
114629
|
// record of somebody turning its package down, and the next sync would ask
|
|
114485
114630
|
// again instead of obeying the answer already given.
|
|
114486
114631
|
"harness.refusedHooks": "operator-only",
|
|
114632
|
+
// Which state of each agent's own hooks, MCP servers file and agent file a
|
|
114633
|
+
// person let run (DOR-3068). An agent that could write the yes would approve
|
|
114634
|
+
// the hooks it just wrote itself; one that could clear a no would be asked again.
|
|
114635
|
+
"harness.approvedFolderConfig": "operator-only",
|
|
114636
|
+
"harness.approvedFolderConfigParts": "operator-only",
|
|
114637
|
+
"harness.refusedFolderConfig": "operator-only",
|
|
114638
|
+
"harness.folderConfigPinned": "operator-only",
|
|
114487
114639
|
// Which agent tools DorkOS shares your globally installed packages with
|
|
114488
114640
|
// (DOR-1924). Adding an entry here is what lets DorkOS put links in somebody's
|
|
114489
114641
|
// home directory, which is the "how far DorkOS reaches on disk" line this
|
|
@@ -115504,17 +115656,17 @@ var init_agent_binding = __esm({
|
|
|
115504
115656
|
if (!this.runtimes || !this.defaultRuntime) throw new Error("COMPUTER_REGISTRY_UNAVAILABLE");
|
|
115505
115657
|
return resolveRegisteredAgentRuntime(id, mesh, this.runtimes, this.defaultRuntime, this);
|
|
115506
115658
|
}
|
|
115507
|
-
configure(id,
|
|
115508
|
-
if (!id || id.length > 128 || !
|
|
115659
|
+
configure(id, path71) {
|
|
115660
|
+
if (!id || id.length > 128 || !path71.startsWith("/") || canonicalDirectory(path71) !== path71) {
|
|
115509
115661
|
throw new Error("COMPUTER_AGENT_BINDING_REFUSED");
|
|
115510
115662
|
}
|
|
115511
|
-
if (this.binding && (this.binding.id !== id || this.binding.path !==
|
|
115663
|
+
if (this.binding && (this.binding.id !== id || this.binding.path !== path71)) {
|
|
115512
115664
|
throw new Error("COMPUTER_AGENT_BINDING_REFUSED");
|
|
115513
115665
|
}
|
|
115514
|
-
this.binding = { id, path:
|
|
115666
|
+
this.binding = { id, path: path71 };
|
|
115515
115667
|
}
|
|
115516
|
-
forPath(
|
|
115517
|
-
return this.binding?.path ===
|
|
115668
|
+
forPath(path71) {
|
|
115669
|
+
return this.binding?.path === path71 ? "computer-local" : void 0;
|
|
115518
115670
|
}
|
|
115519
115671
|
forId(id) {
|
|
115520
115672
|
return this.binding?.id === id ? "computer-local" : void 0;
|
|
@@ -119670,9 +119822,9 @@ var init_windows_execution_state = __esm({
|
|
|
119670
119822
|
|
|
119671
119823
|
// ../keep-awake/src/environment.ts
|
|
119672
119824
|
import { existsSync as existsSync5, readFileSync as readFileSync4 } from "node:fs";
|
|
119673
|
-
function readFileOrNull(
|
|
119825
|
+
function readFileOrNull(path71) {
|
|
119674
119826
|
try {
|
|
119675
|
-
return readFileSync4(
|
|
119827
|
+
return readFileSync4(path71, "utf8");
|
|
119676
119828
|
} catch {
|
|
119677
119829
|
return null;
|
|
119678
119830
|
}
|
|
@@ -120632,9 +120784,9 @@ async function boundTurnOpts(runtime, sessionId, incoming, deps) {
|
|
|
120632
120784
|
}
|
|
120633
120785
|
const { agentPath } = agent;
|
|
120634
120786
|
const read = deps.levelOf ?? resolveAgentLaunchLevel;
|
|
120635
|
-
const modeOf = async (
|
|
120787
|
+
const modeOf = async (path71) => {
|
|
120636
120788
|
try {
|
|
120637
|
-
return (await read({ agentPath:
|
|
120789
|
+
return (await read({ agentPath: path71, capabilities })).mode ?? null;
|
|
120638
120790
|
} catch (err) {
|
|
120639
120791
|
logger.warn(
|
|
120640
120792
|
"[agent-level] could not read the agent\u2019s level; holding the turn to the default",
|
|
@@ -124900,13 +125052,13 @@ function sameLeaf(a2, b2) {
|
|
|
124900
125052
|
function collectChangedPaths(before, after, prefix, out) {
|
|
124901
125053
|
for (const key of /* @__PURE__ */ new Set([...Object.keys(before), ...Object.keys(after)])) {
|
|
124902
125054
|
if (DANGEROUS_KEYS.has(key)) continue;
|
|
124903
|
-
const
|
|
125055
|
+
const path71 = prefix ? `${prefix}.${key}` : key;
|
|
124904
125056
|
const a2 = before[key];
|
|
124905
125057
|
const b2 = after[key];
|
|
124906
125058
|
if (isPlainObject6(a2) && isPlainObject6(b2)) {
|
|
124907
|
-
collectChangedPaths(a2, b2,
|
|
125059
|
+
collectChangedPaths(a2, b2, path71, out);
|
|
124908
125060
|
} else if (!sameLeaf(a2, b2)) {
|
|
124909
|
-
out.push(
|
|
125061
|
+
out.push(path71);
|
|
124910
125062
|
}
|
|
124911
125063
|
}
|
|
124912
125064
|
}
|
|
@@ -124918,9 +125070,9 @@ function renderSegment(segment) {
|
|
|
124918
125070
|
(char) => `\\u${char.codePointAt(0).toString(16).padStart(4, "0")}`
|
|
124919
125071
|
);
|
|
124920
125072
|
}
|
|
124921
|
-
function isOperatorOnlyPath(
|
|
125073
|
+
function isOperatorOnlyPath(path71) {
|
|
124922
125074
|
return OPERATOR_ONLY_CONFIG_PATHS.some(
|
|
124923
|
-
(guarded) =>
|
|
125075
|
+
(guarded) => path71 === guarded || path71.startsWith(`${guarded}.`)
|
|
124924
125076
|
);
|
|
124925
125077
|
}
|
|
124926
125078
|
function describeConfigWrite(before, after) {
|
|
@@ -124930,14 +125082,14 @@ function describeConfigWrite(before, after) {
|
|
|
124930
125082
|
if (changed.length === 0) return "";
|
|
124931
125083
|
const ordered = [
|
|
124932
125084
|
...changed.filter(isOperatorOnlyPath).sort(),
|
|
124933
|
-
...changed.filter((
|
|
125085
|
+
...changed.filter((path71) => !isOperatorOnlyPath(path71)).sort()
|
|
124934
125086
|
];
|
|
124935
|
-
const named3 = ordered.slice(0, LOGGED_PATH_LIMIT).map((
|
|
125087
|
+
const named3 = ordered.slice(0, LOGGED_PATH_LIMIT).map((path71) => path71.split(".").map(renderSegment).join(".")).join(", ");
|
|
124936
125088
|
return ordered.length <= LOGGED_PATH_LIMIT ? named3 : `${named3}, and ${ordered.length - LOGGED_PATH_LIMIT} more`;
|
|
124937
125089
|
}
|
|
124938
|
-
function valueAtPath(root,
|
|
125090
|
+
function valueAtPath(root, path71) {
|
|
124939
125091
|
let node2 = root;
|
|
124940
|
-
for (const key of
|
|
125092
|
+
for (const key of path71.split(".")) {
|
|
124941
125093
|
if (!isPlainObject6(node2)) return void 0;
|
|
124942
125094
|
node2 = node2[key];
|
|
124943
125095
|
}
|
|
@@ -125068,9 +125220,9 @@ function describeOperatorOnlyRefusal(paths2) {
|
|
|
125068
125220
|
const remaining = new Set(paths2);
|
|
125069
125221
|
const clauses = [];
|
|
125070
125222
|
for (const group of OPERATOR_ONLY_STAKES) {
|
|
125071
|
-
const matched = paths2.filter((
|
|
125223
|
+
const matched = paths2.filter((path71) => group.paths.includes(path71));
|
|
125072
125224
|
if (matched.length === 0) continue;
|
|
125073
|
-
for (const
|
|
125225
|
+
for (const path71 of matched) remaining.delete(path71);
|
|
125074
125226
|
clauses.push(`${group.description}: ${matched.join(", ")}.`);
|
|
125075
125227
|
}
|
|
125076
125228
|
if (remaining.size > 0) {
|
|
@@ -125109,7 +125261,7 @@ __export(config_write_exports, {
|
|
|
125109
125261
|
function personApprovedAuthority(decidedByUserId, isLoginEnabled = () => decidedByUserId !== void 0 || configManager.get("auth")?.enabled === true, isOwner = (userId) => isInstallOwner(userId === void 0 ? void 0 : { userId })) {
|
|
125110
125262
|
return {
|
|
125111
125263
|
refuseOperatorOnly: (paths2) => {
|
|
125112
|
-
const cloudPaths = paths2.filter((
|
|
125264
|
+
const cloudPaths = paths2.filter((path71) => path71.startsWith("cloud."));
|
|
125113
125265
|
if (cloudPaths.length === 0 || !isLoginEnabled() || isOwner(decidedByUserId)) {
|
|
125114
125266
|
return void 0;
|
|
125115
125267
|
}
|
|
@@ -125123,9 +125275,9 @@ function personApprovedAuthority(decidedByUserId, isLoginEnabled = () => decided
|
|
|
125123
125275
|
}
|
|
125124
125276
|
};
|
|
125125
125277
|
}
|
|
125126
|
-
function leafAt(config3,
|
|
125278
|
+
function leafAt(config3, path71) {
|
|
125127
125279
|
let current3 = config3;
|
|
125128
|
-
for (const key of
|
|
125280
|
+
for (const key of path71) {
|
|
125129
125281
|
if (current3 === null || typeof current3 !== "object") return null;
|
|
125130
125282
|
current3 = current3[key];
|
|
125131
125283
|
}
|
|
@@ -125136,9 +125288,9 @@ function onTrustStopChange(listener) {
|
|
|
125136
125288
|
}
|
|
125137
125289
|
function reportTrustStopMoves(before, after, write) {
|
|
125138
125290
|
if (!trustStopListener) return;
|
|
125139
|
-
const moves = TRUST_STOP_LEAVES.flatMap(({ path:
|
|
125140
|
-
const was = leafAt(before,
|
|
125141
|
-
const now3 = leafAt(after,
|
|
125291
|
+
const moves = TRUST_STOP_LEAVES.flatMap(({ path: path71, runtime }) => {
|
|
125292
|
+
const was = leafAt(before, path71);
|
|
125293
|
+
const now3 = leafAt(after, path71);
|
|
125142
125294
|
return was === now3 ? [] : [{ ...runtime ? { runtime } : {}, before: was, after: now3 }];
|
|
125143
125295
|
});
|
|
125144
125296
|
if (moves.length === 0) return;
|
|
@@ -128292,9 +128444,9 @@ function inventoryMcpServers(repoRoot) {
|
|
|
128292
128444
|
);
|
|
128293
128445
|
if (unreadable) return { mcpServers: [], unreadable: [unreadable] };
|
|
128294
128446
|
if (value === void 0) return { mcpServers: [], unreadable: [] };
|
|
128295
|
-
const
|
|
128296
|
-
if (
|
|
128297
|
-
if (typeof
|
|
128447
|
+
const servers2 = value.mcpServers;
|
|
128448
|
+
if (servers2 === void 0) return { mcpServers: [], unreadable: [] };
|
|
128449
|
+
if (typeof servers2 !== "object" || servers2 === null || Array.isArray(servers2)) {
|
|
128298
128450
|
return {
|
|
128299
128451
|
mcpServers: [],
|
|
128300
128452
|
unreadable: [
|
|
@@ -128307,7 +128459,7 @@ function inventoryMcpServers(repoRoot) {
|
|
|
128307
128459
|
};
|
|
128308
128460
|
}
|
|
128309
128461
|
return {
|
|
128310
|
-
mcpServers: Object.keys(
|
|
128462
|
+
mcpServers: Object.keys(servers2).sort((a2, b2) => a2.localeCompare(b2)).map((name2) => ({
|
|
128311
128463
|
kind: "mcp",
|
|
128312
128464
|
name: name2,
|
|
128313
128465
|
source: MCP_CONFIG_SOURCE,
|
|
@@ -130004,14 +130156,14 @@ import { join as join24 } from "node:path";
|
|
|
130004
130156
|
function stripBom(text3) {
|
|
130005
130157
|
return text3.startsWith(BOM) ? text3.slice(BOM.length) : text3;
|
|
130006
130158
|
}
|
|
130007
|
-
function countTableKeys(
|
|
130008
|
-
if (
|
|
130009
|
-
if (typeof
|
|
130159
|
+
function countTableKeys(servers2, label, wrongShape) {
|
|
130160
|
+
if (servers2 === void 0) return {};
|
|
130161
|
+
if (typeof servers2 !== "object" || servers2 === null || Array.isArray(servers2)) {
|
|
130010
130162
|
return {
|
|
130011
130163
|
unreadable: `${label} has ${wrongShape}, so DorkOS could not count the MCP servers in it`
|
|
130012
130164
|
};
|
|
130013
130165
|
}
|
|
130014
|
-
return { servers: Object.keys(
|
|
130166
|
+
return { servers: Object.keys(servers2).length };
|
|
130015
130167
|
}
|
|
130016
130168
|
function countJsonServers(key, label) {
|
|
130017
130169
|
return (text3) => {
|
|
@@ -131293,8 +131445,8 @@ var init_manifest_edit = __esm({
|
|
|
131293
131445
|
import { readFileSync as readFileSync9 } from "node:fs";
|
|
131294
131446
|
import { join as join30 } from "node:path";
|
|
131295
131447
|
function enableHarnessInManifest(repoRoot, harness) {
|
|
131296
|
-
const
|
|
131297
|
-
const abs = join30(repoRoot,
|
|
131448
|
+
const path71 = HARNESS_MANIFEST_PATH;
|
|
131449
|
+
const abs = join30(repoRoot, path71);
|
|
131298
131450
|
const before = readFileSync9(abs, "utf8");
|
|
131299
131451
|
let parsed;
|
|
131300
131452
|
try {
|
|
@@ -131303,7 +131455,7 @@ function enableHarnessInManifest(repoRoot, harness) {
|
|
|
131303
131455
|
return {
|
|
131304
131456
|
outcome: "unwritable",
|
|
131305
131457
|
harness,
|
|
131306
|
-
path:
|
|
131458
|
+
path: path71,
|
|
131307
131459
|
reason: `it is not valid JSON (${err instanceof Error ? err.message : String(err)})`
|
|
131308
131460
|
};
|
|
131309
131461
|
}
|
|
@@ -131311,16 +131463,16 @@ function enableHarnessInManifest(repoRoot, harness) {
|
|
|
131311
131463
|
try {
|
|
131312
131464
|
manifest = parseHarnessManifest(parsed);
|
|
131313
131465
|
} catch (err) {
|
|
131314
|
-
return { outcome: "unwritable", harness, path:
|
|
131466
|
+
return { outcome: "unwritable", harness, path: path71, reason: manifestSchemaReason(err) };
|
|
131315
131467
|
}
|
|
131316
131468
|
const existing = manifest.harnesses;
|
|
131317
|
-
if (existing.includes(harness)) return { outcome: "already-enabled", harness, path:
|
|
131469
|
+
if (existing.includes(harness)) return { outcome: "already-enabled", harness, path: path71 };
|
|
131318
131470
|
const edit = plannedEdit(before, existing, harness);
|
|
131319
131471
|
if (!edit) {
|
|
131320
131472
|
return {
|
|
131321
131473
|
outcome: "unwritable",
|
|
131322
131474
|
harness,
|
|
131323
|
-
path:
|
|
131475
|
+
path: path71,
|
|
131324
131476
|
reason: 'its "harnesses" list could not be located in the file as written'
|
|
131325
131477
|
};
|
|
131326
131478
|
}
|
|
@@ -131329,12 +131481,12 @@ function enableHarnessInManifest(repoRoot, harness) {
|
|
|
131329
131481
|
return {
|
|
131330
131482
|
outcome: "unwritable",
|
|
131331
131483
|
harness,
|
|
131332
|
-
path:
|
|
131484
|
+
path: path71,
|
|
131333
131485
|
reason: "adding the harness would have changed something else in the file"
|
|
131334
131486
|
};
|
|
131335
131487
|
}
|
|
131336
131488
|
writeFileAtomic(abs, after);
|
|
131337
|
-
return { outcome: "enabled", harness, path:
|
|
131489
|
+
return { outcome: "enabled", harness, path: path71, inserted };
|
|
131338
131490
|
}
|
|
131339
131491
|
function plannedEdit(text3, existing, harness) {
|
|
131340
131492
|
const array2 = findValueSpan(text3, "harnesses", "[");
|
|
@@ -131369,8 +131521,8 @@ var init_enable_harness = __esm({
|
|
|
131369
131521
|
import { readFileSync as readFileSync10 } from "node:fs";
|
|
131370
131522
|
import { join as join31 } from "node:path";
|
|
131371
131523
|
function declareClaudeOnlySkill(repoRoot, entry) {
|
|
131372
|
-
const
|
|
131373
|
-
const abs = join31(repoRoot,
|
|
131524
|
+
const path71 = HARNESS_MANIFEST_PATH;
|
|
131525
|
+
const abs = join31(repoRoot, path71);
|
|
131374
131526
|
const before = readFileSync10(abs, "utf8");
|
|
131375
131527
|
let parsed;
|
|
131376
131528
|
try {
|
|
@@ -131378,7 +131530,7 @@ function declareClaudeOnlySkill(repoRoot, entry) {
|
|
|
131378
131530
|
} catch (err) {
|
|
131379
131531
|
return {
|
|
131380
131532
|
outcome: "unwritable",
|
|
131381
|
-
path:
|
|
131533
|
+
path: path71,
|
|
131382
131534
|
reason: `it is not valid JSON (${err instanceof Error ? err.message : String(err)})`
|
|
131383
131535
|
};
|
|
131384
131536
|
}
|
|
@@ -131386,10 +131538,10 @@ function declareClaudeOnlySkill(repoRoot, entry) {
|
|
|
131386
131538
|
try {
|
|
131387
131539
|
manifest = parseHarnessManifest(parsed);
|
|
131388
131540
|
} catch (err) {
|
|
131389
|
-
return { outcome: "unwritable", path:
|
|
131541
|
+
return { outcome: "unwritable", path: path71, reason: manifestSchemaReason(err) };
|
|
131390
131542
|
}
|
|
131391
131543
|
if (manifest.claudeOnlySkills.some((declared) => declared.name === entry.name)) {
|
|
131392
|
-
return { outcome: "already-declared", path:
|
|
131544
|
+
return { outcome: "already-declared", path: path71 };
|
|
131393
131545
|
}
|
|
131394
131546
|
const raw = parsed.claudeOnlySkills;
|
|
131395
131547
|
const rawEntries = Array.isArray(raw) ? raw : [];
|
|
@@ -131398,7 +131550,7 @@ function declareClaudeOnlySkill(repoRoot, entry) {
|
|
|
131398
131550
|
if (!edit) {
|
|
131399
131551
|
return {
|
|
131400
131552
|
outcome: "unwritable",
|
|
131401
|
-
path:
|
|
131553
|
+
path: path71,
|
|
131402
131554
|
reason: 'its "claudeOnlySkills" list could not be located in the file as written'
|
|
131403
131555
|
};
|
|
131404
131556
|
}
|
|
@@ -131406,12 +131558,12 @@ function declareClaudeOnlySkill(repoRoot, entry) {
|
|
|
131406
131558
|
if (!isExactlyOneSkillDeclared(after, parsed, rawEntries, entry)) {
|
|
131407
131559
|
return {
|
|
131408
131560
|
outcome: "unwritable",
|
|
131409
|
-
path:
|
|
131561
|
+
path: path71,
|
|
131410
131562
|
reason: "recording the skill would have changed something else in the file"
|
|
131411
131563
|
};
|
|
131412
131564
|
}
|
|
131413
131565
|
writeFileAtomic(abs, after);
|
|
131414
|
-
return { outcome: "declared", path:
|
|
131566
|
+
return { outcome: "declared", path: path71, inserted };
|
|
131415
131567
|
}
|
|
131416
131568
|
function editAddingTheKey(text3, existing, entry) {
|
|
131417
131569
|
const root = findRootObject(text3);
|
|
@@ -133398,14 +133550,14 @@ function ignoringLayer(layers, relPath2, leafKind) {
|
|
|
133398
133550
|
}
|
|
133399
133551
|
return decided;
|
|
133400
133552
|
}
|
|
133401
|
-
function pathWithin(dir,
|
|
133402
|
-
if (dir === "") return
|
|
133403
|
-
return
|
|
133553
|
+
function pathWithin(dir, path71) {
|
|
133554
|
+
if (dir === "") return path71;
|
|
133555
|
+
return path71.startsWith(`${dir}/`) ? path71.slice(dir.length + 1) : void 0;
|
|
133404
133556
|
}
|
|
133405
133557
|
function gitignorePatternMatches(pattern, relPath2, leafKind = "file") {
|
|
133406
133558
|
return isPathIgnored([pattern], relPath2, leafKind);
|
|
133407
133559
|
}
|
|
133408
|
-
function decidePattern(pattern,
|
|
133560
|
+
function decidePattern(pattern, path71, isDir) {
|
|
133409
133561
|
const trimmed = pattern.trim();
|
|
133410
133562
|
if (trimmed === "" || trimmed.startsWith("#")) return void 0;
|
|
133411
133563
|
const negated = trimmed.startsWith("!");
|
|
@@ -133418,7 +133570,7 @@ function decidePattern(pattern, path68, isDir) {
|
|
|
133418
133570
|
if (body === "") return void 0;
|
|
133419
133571
|
const anchored = !anyDepth && (rule.startsWith("/") || body.includes("/"));
|
|
133420
133572
|
const prefix = anchored ? "^" : "^(?:.*/)?";
|
|
133421
|
-
return new RegExp(`${prefix}${globToRegExpBody(body)}$`).test(
|
|
133573
|
+
return new RegExp(`${prefix}${globToRegExpBody(body)}$`).test(path71) ? !negated : void 0;
|
|
133422
133574
|
}
|
|
133423
133575
|
function globToRegExpBody(body) {
|
|
133424
133576
|
let out = "";
|
|
@@ -133454,11 +133606,11 @@ function gitCheckoutRoot(projectRoot) {
|
|
|
133454
133606
|
dir = parent;
|
|
133455
133607
|
}
|
|
133456
133608
|
}
|
|
133457
|
-
function physicalPath(
|
|
133609
|
+
function physicalPath(path71) {
|
|
133458
133610
|
try {
|
|
133459
|
-
return realpathSync8.native(
|
|
133611
|
+
return realpathSync8.native(path71);
|
|
133460
133612
|
} catch {
|
|
133461
|
-
return resolve4(
|
|
133613
|
+
return resolve4(path71);
|
|
133462
133614
|
}
|
|
133463
133615
|
}
|
|
133464
133616
|
function projectPrefix(checkoutRoot, projectRoot) {
|
|
@@ -133515,7 +133667,7 @@ function ephemeralPaths(plan, repoRoot) {
|
|
|
133515
133667
|
}
|
|
133516
133668
|
}
|
|
133517
133669
|
if (existsSync10(join32(repoRoot, PROJECT_PLUGINS_DIR))) paths2.set(INSTALL_ROOT_PROBE, "dir");
|
|
133518
|
-
return [...paths2].map(([
|
|
133670
|
+
return [...paths2].map(([path71, kind]) => ({ path: path71, kind }));
|
|
133519
133671
|
}
|
|
133520
133672
|
function onDiskKind(repoRoot, relPath2, fallback) {
|
|
133521
133673
|
try {
|
|
@@ -133544,13 +133696,13 @@ function missingGitignoreLines(repoRoot, plan) {
|
|
|
133544
133696
|
const checkout = checkoutContext(repoRoot);
|
|
133545
133697
|
if (checkout === void 0) return [];
|
|
133546
133698
|
const missing = /* @__PURE__ */ new Set();
|
|
133547
|
-
for (const { path:
|
|
133548
|
-
if (ignoredBy(checkout.root, underPrefix(checkout.prefix,
|
|
133549
|
-
if (selfIgnored(plan,
|
|
133699
|
+
for (const { path: path71, kind } of ephemeralPaths(plan, repoRoot)) {
|
|
133700
|
+
if (ignoredBy(checkout.root, underPrefix(checkout.prefix, path71), kind) !== void 0) continue;
|
|
133701
|
+
if (selfIgnored(plan, path71)) continue;
|
|
133550
133702
|
const covering = EPHEMERAL_GITIGNORE_PATTERNS.filter(
|
|
133551
|
-
(pattern) => gitignorePatternMatches(pattern,
|
|
133703
|
+
(pattern) => gitignorePatternMatches(pattern, path71, kind)
|
|
133552
133704
|
);
|
|
133553
|
-
if (covering.length === 0) missing.add(
|
|
133705
|
+
if (covering.length === 0) missing.add(path71);
|
|
133554
133706
|
else for (const pattern of covering) missing.add(pattern);
|
|
133555
133707
|
}
|
|
133556
133708
|
const declared = EPHEMERAL_GITIGNORE_PATTERNS;
|
|
@@ -133729,10 +133881,10 @@ var init_read2 = __esm({
|
|
|
133729
133881
|
// ../harness/src/apply/sweep-reasons.ts
|
|
133730
133882
|
import { basename as basename4 } from "node:path";
|
|
133731
133883
|
function explainSweep(paths2, cause) {
|
|
133732
|
-
return paths2.map((
|
|
133884
|
+
return paths2.map((path71) => ({ path: path71, reason: sweepReason(path71, cause) }));
|
|
133733
133885
|
}
|
|
133734
|
-
function sweepReason(
|
|
133735
|
-
if (cause === "command-wrapper" && isAtomicTempName(basename4(
|
|
133886
|
+
function sweepReason(path71, cause) {
|
|
133887
|
+
if (cause === "command-wrapper" && isAtomicTempName(basename4(path71))) {
|
|
133736
133888
|
return SWEEP_REASONS["stale-temp"];
|
|
133737
133889
|
}
|
|
133738
133890
|
return SWEEP_REASONS[cause];
|
|
@@ -133809,10 +133961,10 @@ function partitionRemovable(repoRoot, paths2) {
|
|
|
133809
133961
|
const removable = [];
|
|
133810
133962
|
const warnings = [];
|
|
133811
133963
|
const probed = /* @__PURE__ */ new Map();
|
|
133812
|
-
for (const
|
|
133813
|
-
const absDir = unwritableParent(join34(repoRoot,
|
|
133814
|
-
if (absDir === void 0) removable.push(
|
|
133815
|
-
else warnings.push(blockedRemovalWarning(
|
|
133964
|
+
for (const path71 of paths2) {
|
|
133965
|
+
const absDir = unwritableParent(join34(repoRoot, path71), probed);
|
|
133966
|
+
if (absDir === void 0) removable.push(path71);
|
|
133967
|
+
else warnings.push(blockedRemovalWarning(path71, spell(repoRoot, absDir)));
|
|
133816
133968
|
}
|
|
133817
133969
|
return { removable, warnings };
|
|
133818
133970
|
}
|
|
@@ -133890,8 +134042,8 @@ var init_authored_orphans = __esm({
|
|
|
133890
134042
|
// ../harness/src/apply/symlink-occupants.ts
|
|
133891
134043
|
import { readdirSync as readdirSync7, readFileSync as readFileSync14, readlinkSync as readlinkSync3, realpathSync as realpathSync9, statSync as statSync8 } from "node:fs";
|
|
133892
134044
|
import { basename as basename5, dirname as dirname10 } from "node:path";
|
|
133893
|
-
function withForwardSlashes(
|
|
133894
|
-
return
|
|
134045
|
+
function withForwardSlashes(path71) {
|
|
134046
|
+
return path71.split("\\").join("/");
|
|
133895
134047
|
}
|
|
133896
134048
|
function holdsOwnLinkText(absTarget, linkText) {
|
|
133897
134049
|
try {
|
|
@@ -134538,7 +134690,7 @@ function applyPlan(repoRoot, plan, opts) {
|
|
|
134538
134690
|
return {
|
|
134539
134691
|
applied,
|
|
134540
134692
|
conflicts,
|
|
134541
|
-
swept: removals.map(({ path:
|
|
134693
|
+
swept: removals.map(({ path: path71 }) => path71),
|
|
134542
134694
|
removals,
|
|
134543
134695
|
leftAlone,
|
|
134544
134696
|
// Three subjects, one list, and the junction one sits OUTSIDE the sweep
|
|
@@ -134656,7 +134808,7 @@ function checkPlan(repoRoot, plan) {
|
|
|
134656
134808
|
return {
|
|
134657
134809
|
drifted,
|
|
134658
134810
|
blocked,
|
|
134659
|
-
orphans: removals.map(({ path:
|
|
134811
|
+
orphans: removals.map(({ path: path71 }) => path71),
|
|
134660
134812
|
removals,
|
|
134661
134813
|
leftAlone: findLeftAloneGeneratedHookFiles(repoRoot, plan),
|
|
134662
134814
|
// Not drift, and the first two are never an exit code either: a junction
|
|
@@ -134924,7 +135076,7 @@ function globalOrphanCandidates(plan, roots) {
|
|
|
134924
135076
|
function findGlobalOrphans(plan, roots) {
|
|
134925
135077
|
const orphans = globalOrphanCandidates(plan, roots);
|
|
134926
135078
|
const removable = new Set(removableOf("", [...orphans.keys()]));
|
|
134927
|
-
return [...orphans.entries()].filter(([
|
|
135079
|
+
return [...orphans.entries()].filter(([path71]) => removable.has(path71)).sort(([a2], [b2]) => a2 < b2 ? -1 : a2 > b2 ? 1 : 0).map(([path71, reason]) => ({ path: path71, reason }));
|
|
134928
135080
|
}
|
|
134929
135081
|
function findBlockedGlobalRemovals(plan, roots) {
|
|
134930
135082
|
if (plan.unreadableRoot !== void 0) return [];
|
|
@@ -134935,7 +135087,7 @@ function rawGlobalOrphanPaths(plan, roots) {
|
|
|
134935
135087
|
}
|
|
134936
135088
|
function sweepGlobalOrphans(plan, roots) {
|
|
134937
135089
|
const orphans = findGlobalOrphans(plan, roots);
|
|
134938
|
-
for (const { path:
|
|
135090
|
+
for (const { path: path71 } of orphans) rmSync8(path71, { force: true });
|
|
134939
135091
|
return orphans;
|
|
134940
135092
|
}
|
|
134941
135093
|
function globalLinkText(action) {
|
|
@@ -135037,7 +135189,7 @@ function applyGlobalPlan(plan, roots, opts) {
|
|
|
135037
135189
|
return {
|
|
135038
135190
|
applied,
|
|
135039
135191
|
conflicts,
|
|
135040
|
-
swept: removals.map(({ path:
|
|
135192
|
+
swept: removals.map(({ path: path71 }) => path71),
|
|
135041
135193
|
removals,
|
|
135042
135194
|
leftAlone: [],
|
|
135043
135195
|
// A global run has no folder to be BLIND inside — `findGlobalOrphans` walks
|
|
@@ -135070,7 +135222,7 @@ function checkGlobalPlan(plan, roots) {
|
|
|
135070
135222
|
return {
|
|
135071
135223
|
drifted,
|
|
135072
135224
|
blocked,
|
|
135073
|
-
orphans: removals.map(({ path:
|
|
135225
|
+
orphans: removals.map(({ path: path71 }) => path71),
|
|
135074
135226
|
removals,
|
|
135075
135227
|
leftAlone: [],
|
|
135076
135228
|
// The junction family cannot reach a global plan at all, and by nature
|
|
@@ -135240,16 +135392,16 @@ import {
|
|
|
135240
135392
|
statSync as statSync10
|
|
135241
135393
|
} from "node:fs";
|
|
135242
135394
|
import { basename as basename7, isAbsolute as isAbsolute7, join as join42, relative as relative8, resolve as resolve7, sep as sep9 } from "node:path";
|
|
135243
|
-
function statOrUndefined(
|
|
135395
|
+
function statOrUndefined(path71) {
|
|
135244
135396
|
try {
|
|
135245
|
-
return statSync10(
|
|
135397
|
+
return statSync10(path71, { throwIfNoEntry: false });
|
|
135246
135398
|
} catch {
|
|
135247
135399
|
return void 0;
|
|
135248
135400
|
}
|
|
135249
135401
|
}
|
|
135250
|
-
function lstatOrUndefined(
|
|
135402
|
+
function lstatOrUndefined(path71) {
|
|
135251
135403
|
try {
|
|
135252
|
-
return lstatSync14(
|
|
135404
|
+
return lstatSync14(path71, { throwIfNoEntry: false });
|
|
135253
135405
|
} catch {
|
|
135254
135406
|
return void 0;
|
|
135255
135407
|
}
|
|
@@ -135473,13 +135625,13 @@ function scanClaudeOnlySkills(repoRoot, manifest) {
|
|
|
135473
135625
|
const resolved = /* @__PURE__ */ new Map();
|
|
135474
135626
|
for (const entry of manifest.claudeOnlySkills) {
|
|
135475
135627
|
const defaultPath = `${CLAUDE_SKILLS_DIR}/${entry.name}`;
|
|
135476
|
-
const
|
|
135477
|
-
const abs = join43(repoRoot,
|
|
135628
|
+
const path71 = entry.path.trim() === "" ? defaultPath : entry.path;
|
|
135629
|
+
const abs = join43(repoRoot, path71);
|
|
135478
135630
|
let kind = "missing";
|
|
135479
135631
|
const stats2 = lstatSync15(abs, { throwIfNoEntry: false });
|
|
135480
135632
|
if (stats2?.isSymbolicLink()) kind = "symlink";
|
|
135481
135633
|
else if (stats2?.isDirectory() && existsSync15(join43(abs, "SKILL.md"))) kind = "directory";
|
|
135482
|
-
resolved.set(entry.name, { path:
|
|
135634
|
+
resolved.set(entry.name, { path: path71, kind, atProjectionTarget: path71 === defaultPath });
|
|
135483
135635
|
}
|
|
135484
135636
|
return resolved;
|
|
135485
135637
|
}
|
|
@@ -136364,7 +136516,7 @@ async function listSharing(dorkHome) {
|
|
|
136364
136516
|
function removalLines(removals, about) {
|
|
136365
136517
|
if (removals.length === 0) return [];
|
|
136366
136518
|
const heading = about === "will" ? `Removing ${removals.length} link(s):` : `Removed ${removals.length} link(s):`;
|
|
136367
|
-
return ["", heading, ...removals.map(({ path:
|
|
136519
|
+
return ["", heading, ...removals.map(({ path: path71, reason }) => ` ${path71} \u2014 ${reason}`)];
|
|
136368
136520
|
}
|
|
136369
136521
|
async function enableTool(dorkHome, tool) {
|
|
136370
136522
|
const {
|
|
@@ -136573,7 +136725,7 @@ function globalActionLine(action) {
|
|
|
136573
136725
|
function removalPreview(removals, about) {
|
|
136574
136726
|
if (removals.length === 0) return [];
|
|
136575
136727
|
const heading = about === "will" ? `Removing ${removals.length} link(s):` : `Removed ${removals.length} link(s):`;
|
|
136576
|
-
return ["", heading, ...removals.map(({ path:
|
|
136728
|
+
return ["", heading, ...removals.map(({ path: path71, reason }) => ` ${path71} \u2014 ${reason}`)];
|
|
136577
136729
|
}
|
|
136578
136730
|
function linkNamesIn(plan) {
|
|
136579
136731
|
return [...new Set(plan.actions.map((action) => action.name))];
|
|
@@ -136805,6 +136957,516 @@ var init_harness_sync_claude_only = __esm({
|
|
|
136805
136957
|
}
|
|
136806
136958
|
});
|
|
136807
136959
|
|
|
136960
|
+
// ../../apps/server/src/services/runtimes/claude-code/folder-settings/folder-config-scripts.ts
|
|
136961
|
+
import { createHash as createHash4 } from "node:crypto";
|
|
136962
|
+
import { lstatSync as lstatSync16, readdirSync as readdirSync10, readFileSync as readFileSync21, statSync as statSync11 } from "node:fs";
|
|
136963
|
+
import path47 from "node:path";
|
|
136964
|
+
function isInside4(base, target) {
|
|
136965
|
+
const rel = path47.relative(base, target);
|
|
136966
|
+
return rel !== "" && !rel.startsWith("..") && !path47.isAbsolute(rel);
|
|
136967
|
+
}
|
|
136968
|
+
function sha2562(content) {
|
|
136969
|
+
return createHash4("sha256").update(content).digest("hex");
|
|
136970
|
+
}
|
|
136971
|
+
function namedTargets(root, pluginsRoot, commands) {
|
|
136972
|
+
const found = /* @__PURE__ */ new Set();
|
|
136973
|
+
const pluginSegment = `${path47.sep}.dork${path47.sep}plugins${path47.sep}`;
|
|
136974
|
+
for (const command of commands) {
|
|
136975
|
+
const words = command.replace(/["']/g, "").replace(OUTPUT_REDIRECT, " ").replace(PROJECT_DIR_VAR, HOME_MARK).split(WORD_BREAK);
|
|
136976
|
+
for (const word of words) {
|
|
136977
|
+
if (!word) continue;
|
|
136978
|
+
if (word.startsWith(HOME_MARK)) {
|
|
136979
|
+
const target = path47.join(root, word.slice(HOME_MARK.length).split(HOME_MARK).join(root));
|
|
136980
|
+
if (isInside4(root, target)) found.add(target);
|
|
136981
|
+
} else if (path47.isAbsolute(word)) {
|
|
136982
|
+
const target = path47.resolve(word);
|
|
136983
|
+
if (isInside4(root, target) || isInside4(pluginsRoot, target) || target.includes(pluginSegment)) {
|
|
136984
|
+
found.add(target);
|
|
136985
|
+
}
|
|
136986
|
+
} else if (!word.startsWith("~") && !word.startsWith("$") && !word.startsWith("-") && PATH_LIKE.test(word)) {
|
|
136987
|
+
const target = path47.resolve(root, word);
|
|
136988
|
+
if (isInside4(root, target)) found.add(target);
|
|
136989
|
+
}
|
|
136990
|
+
}
|
|
136991
|
+
}
|
|
136992
|
+
return [...found];
|
|
136993
|
+
}
|
|
136994
|
+
function hookScriptFiles(home2, commands, dorkHome) {
|
|
136995
|
+
const root = path47.resolve(home2);
|
|
136996
|
+
const entries = /* @__PURE__ */ new Map();
|
|
136997
|
+
let files = 0;
|
|
136998
|
+
const hash3 = (abs) => {
|
|
136999
|
+
if (entries.has(abs)) return true;
|
|
137000
|
+
let stat5;
|
|
137001
|
+
try {
|
|
137002
|
+
stat5 = lstatSync16(abs);
|
|
137003
|
+
} catch (err) {
|
|
137004
|
+
if (err.code !== "ENOENT") return false;
|
|
137005
|
+
entries.set(abs, "absent");
|
|
137006
|
+
return true;
|
|
137007
|
+
}
|
|
137008
|
+
if (stat5.isDirectory()) {
|
|
137009
|
+
entries.set(abs, "dir");
|
|
137010
|
+
return true;
|
|
137011
|
+
}
|
|
137012
|
+
if (!stat5.isFile() || stat5.size > MAX_FILE_BYTES || files >= MAX_FILES) return false;
|
|
137013
|
+
try {
|
|
137014
|
+
const content = readFileSync21(abs);
|
|
137015
|
+
if (content.byteLength > MAX_FILE_BYTES) return false;
|
|
137016
|
+
files += 1;
|
|
137017
|
+
entries.set(abs, sha2562(content));
|
|
137018
|
+
return true;
|
|
137019
|
+
} catch {
|
|
137020
|
+
return false;
|
|
137021
|
+
}
|
|
137022
|
+
};
|
|
137023
|
+
const walk = (abs, depth) => {
|
|
137024
|
+
let stat5;
|
|
137025
|
+
try {
|
|
137026
|
+
stat5 = lstatSync16(abs);
|
|
137027
|
+
} catch (err) {
|
|
137028
|
+
return err.code === "ENOENT";
|
|
137029
|
+
}
|
|
137030
|
+
if (!stat5.isDirectory() || depth > MAX_DEPTH2) return false;
|
|
137031
|
+
let names;
|
|
137032
|
+
try {
|
|
137033
|
+
names = readdirSync10(abs);
|
|
137034
|
+
} catch {
|
|
137035
|
+
return false;
|
|
137036
|
+
}
|
|
137037
|
+
for (const name2 of names) {
|
|
137038
|
+
const child = path47.join(abs, name2);
|
|
137039
|
+
let childStat;
|
|
137040
|
+
try {
|
|
137041
|
+
childStat = lstatSync16(child);
|
|
137042
|
+
} catch {
|
|
137043
|
+
return false;
|
|
137044
|
+
}
|
|
137045
|
+
if (!(childStat.isDirectory() ? walk(child, depth + 1) : hash3(child))) return false;
|
|
137046
|
+
}
|
|
137047
|
+
return true;
|
|
137048
|
+
};
|
|
137049
|
+
if (!walk(path47.join(root, ".claude", "hooks"), 1)) return void 0;
|
|
137050
|
+
for (const target of namedTargets(root, path47.resolve(dorkHome, "plugins"), commands)) {
|
|
137051
|
+
if (!hash3(target)) return void 0;
|
|
137052
|
+
}
|
|
137053
|
+
return sortedByPath(root, entries);
|
|
137054
|
+
}
|
|
137055
|
+
function sortedByPath(root, entries) {
|
|
137056
|
+
return [...entries].map(([abs, value]) => [
|
|
137057
|
+
isInside4(root, abs) ? path47.relative(root, abs).split(path47.sep).join("/") : abs,
|
|
137058
|
+
value
|
|
137059
|
+
]).sort(([a2], [b2]) => a2 < b2 ? -1 : a2 > b2 ? 1 : 0);
|
|
137060
|
+
}
|
|
137061
|
+
function agentFileHooks(home2) {
|
|
137062
|
+
const root = path47.resolve(home2);
|
|
137063
|
+
const entries = /* @__PURE__ */ new Map();
|
|
137064
|
+
let files = 0;
|
|
137065
|
+
const read = (abs) => {
|
|
137066
|
+
let stat5;
|
|
137067
|
+
try {
|
|
137068
|
+
stat5 = statSync11(abs);
|
|
137069
|
+
} catch (err) {
|
|
137070
|
+
return err.code === "ENOENT";
|
|
137071
|
+
}
|
|
137072
|
+
if (!stat5.isFile() || stat5.size > MAX_FILE_BYTES || files >= MAX_FILES) return false;
|
|
137073
|
+
let text3;
|
|
137074
|
+
try {
|
|
137075
|
+
text3 = readFileSync21(abs, "utf8");
|
|
137076
|
+
} catch {
|
|
137077
|
+
return false;
|
|
137078
|
+
}
|
|
137079
|
+
files += 1;
|
|
137080
|
+
let picked;
|
|
137081
|
+
try {
|
|
137082
|
+
const { data } = parseFrontmatter(text3);
|
|
137083
|
+
picked = {};
|
|
137084
|
+
for (const field of AGENT_FILE_FIELDS) {
|
|
137085
|
+
if (Object.hasOwn(data, field)) picked[field] = data[field];
|
|
137086
|
+
}
|
|
137087
|
+
} catch {
|
|
137088
|
+
const block = /^---[^\n]*\n([\s\S]*?)\n---/.exec(text3)?.[1] ?? text3;
|
|
137089
|
+
picked = { unparseable: sha2562(block) };
|
|
137090
|
+
}
|
|
137091
|
+
if (Object.keys(picked).length > 0) entries.set(abs, picked);
|
|
137092
|
+
return true;
|
|
137093
|
+
};
|
|
137094
|
+
const listDir2 = (abs) => {
|
|
137095
|
+
try {
|
|
137096
|
+
if (!statSync11(abs).isDirectory()) return void 0;
|
|
137097
|
+
return readdirSync10(abs);
|
|
137098
|
+
} catch (err) {
|
|
137099
|
+
return err.code === "ENOENT" ? null : void 0;
|
|
137100
|
+
}
|
|
137101
|
+
};
|
|
137102
|
+
const walkAgents = (abs, depth) => {
|
|
137103
|
+
if (depth > MAX_DEPTH2) return false;
|
|
137104
|
+
const names = listDir2(abs);
|
|
137105
|
+
if (names === null) return true;
|
|
137106
|
+
if (names === void 0) return false;
|
|
137107
|
+
for (const name2 of names) {
|
|
137108
|
+
const child = path47.join(abs, name2);
|
|
137109
|
+
const sub = listDir2(child);
|
|
137110
|
+
if (sub !== void 0 && sub !== null) {
|
|
137111
|
+
if (!walkAgents(child, depth + 1)) return false;
|
|
137112
|
+
} else if (name2.endsWith(".md") && !read(child)) {
|
|
137113
|
+
return false;
|
|
137114
|
+
}
|
|
137115
|
+
}
|
|
137116
|
+
return true;
|
|
137117
|
+
};
|
|
137118
|
+
if (!walkAgents(path47.join(root, ".claude", "agents"), 1)) return void 0;
|
|
137119
|
+
if (!walkAgents(path47.join(root, ".claude", "commands"), 1)) return void 0;
|
|
137120
|
+
const skillsDir = path47.join(root, ".claude", "skills");
|
|
137121
|
+
const skills = listDir2(skillsDir);
|
|
137122
|
+
if (skills === void 0) return void 0;
|
|
137123
|
+
for (const name2 of skills ?? []) {
|
|
137124
|
+
if (!read(path47.join(skillsDir, name2, "SKILL.md"))) {
|
|
137125
|
+
if (listDir2(path47.join(skillsDir, name2)) !== void 0) return void 0;
|
|
137126
|
+
}
|
|
137127
|
+
}
|
|
137128
|
+
return sortedByPath(root, entries);
|
|
137129
|
+
}
|
|
137130
|
+
var MAX_FILE_BYTES, MAX_FILES, MAX_DEPTH2, HOME_MARK, PROJECT_DIR_VAR, OUTPUT_REDIRECT, WORD_BREAK, PATH_LIKE, AGENT_FILE_FIELDS;
|
|
137131
|
+
var init_folder_config_scripts = __esm({
|
|
137132
|
+
"../../apps/server/src/services/runtimes/claude-code/folder-settings/folder-config-scripts.ts"() {
|
|
137133
|
+
"use strict";
|
|
137134
|
+
init_frontmatter();
|
|
137135
|
+
MAX_FILE_BYTES = 64 * 1024;
|
|
137136
|
+
MAX_FILES = 200;
|
|
137137
|
+
MAX_DEPTH2 = 4;
|
|
137138
|
+
HOME_MARK = "\0home\0";
|
|
137139
|
+
PROJECT_DIR_VAR = /\$\{CLAUDE_PROJECT_DIR\}|\$CLAUDE_PROJECT_DIR\b/g;
|
|
137140
|
+
OUTPUT_REDIRECT = /\d*>>?\s*\S+/g;
|
|
137141
|
+
WORD_BREAK = /[\s;&|<>()`=]+/;
|
|
137142
|
+
PATH_LIKE = /\/|\.[A-Za-z0-9]+$/;
|
|
137143
|
+
AGENT_FILE_FIELDS = [
|
|
137144
|
+
"hooks",
|
|
137145
|
+
"mcpServers",
|
|
137146
|
+
// Fields that let a skill, command or subagent skip DorkOS's permission
|
|
137147
|
+
// check or raise its own mode (DOR-3068 M2).
|
|
137148
|
+
"allowed-tools",
|
|
137149
|
+
"tools",
|
|
137150
|
+
"disallowedTools",
|
|
137151
|
+
"permissionMode"
|
|
137152
|
+
];
|
|
137153
|
+
}
|
|
137154
|
+
});
|
|
137155
|
+
|
|
137156
|
+
// ../../apps/server/src/services/runtimes/claude-code/folder-settings/folder-config-pin.ts
|
|
137157
|
+
import { createHash as createHash5 } from "node:crypto";
|
|
137158
|
+
import { readFileSync as readFileSync22, statSync as statSync12 } from "node:fs";
|
|
137159
|
+
import path48 from "node:path";
|
|
137160
|
+
function readJsonFile2(file2) {
|
|
137161
|
+
let size;
|
|
137162
|
+
try {
|
|
137163
|
+
const stat5 = statSync12(file2);
|
|
137164
|
+
if (!stat5.isFile()) return { kind: "unverifiable" };
|
|
137165
|
+
size = stat5.size;
|
|
137166
|
+
} catch (err) {
|
|
137167
|
+
return err.code === "ENOENT" ? { kind: "absent" } : { kind: "unverifiable" };
|
|
137168
|
+
}
|
|
137169
|
+
if (size > MAX_FILE_BYTES2) return { kind: "unverifiable" };
|
|
137170
|
+
let text3;
|
|
137171
|
+
try {
|
|
137172
|
+
text3 = readFileSync22(file2, "utf8");
|
|
137173
|
+
} catch {
|
|
137174
|
+
return { kind: "unverifiable" };
|
|
137175
|
+
}
|
|
137176
|
+
if (Buffer.byteLength(text3) > MAX_FILE_BYTES2) return { kind: "unverifiable" };
|
|
137177
|
+
try {
|
|
137178
|
+
return { kind: "parsed", value: JSON.parse(text3) };
|
|
137179
|
+
} catch {
|
|
137180
|
+
return { kind: "malformed", text: text3 };
|
|
137181
|
+
}
|
|
137182
|
+
}
|
|
137183
|
+
function canonicalJson(value) {
|
|
137184
|
+
return JSON.stringify(sortKeys(value));
|
|
137185
|
+
}
|
|
137186
|
+
function sortKeys(value) {
|
|
137187
|
+
if (Array.isArray(value)) return value.map(sortKeys);
|
|
137188
|
+
if (value === null || typeof value !== "object") return value;
|
|
137189
|
+
const out = {};
|
|
137190
|
+
for (const key of Object.keys(value).sort()) {
|
|
137191
|
+
out[key] = sortKeys(value[key]);
|
|
137192
|
+
}
|
|
137193
|
+
return out;
|
|
137194
|
+
}
|
|
137195
|
+
function sha2563(text3) {
|
|
137196
|
+
return createHash5("sha256").update(text3).digest("hex");
|
|
137197
|
+
}
|
|
137198
|
+
function malformed(text3) {
|
|
137199
|
+
return { malformed: sha2563(text3) };
|
|
137200
|
+
}
|
|
137201
|
+
function pick2(value, keys) {
|
|
137202
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
137203
|
+
return { notAnObject: value };
|
|
137204
|
+
const out = {};
|
|
137205
|
+
for (const key of keys) {
|
|
137206
|
+
if (Object.hasOwn(value, key)) out[key] = value[key];
|
|
137207
|
+
}
|
|
137208
|
+
return out;
|
|
137209
|
+
}
|
|
137210
|
+
function servers(value) {
|
|
137211
|
+
if (!Array.isArray(value)) return value;
|
|
137212
|
+
return value.map((entry) => {
|
|
137213
|
+
if (entry === null || typeof entry !== "object" || Array.isArray(entry)) return entry;
|
|
137214
|
+
const { addedAt: _at, addedBy: _by, ...rest } = entry;
|
|
137215
|
+
const connection = rest.connection;
|
|
137216
|
+
if (connection !== null && typeof connection === "object" && !Array.isArray(connection)) {
|
|
137217
|
+
const { authKind: _kind, ...kept } = connection;
|
|
137218
|
+
return { ...rest, connection: kept };
|
|
137219
|
+
}
|
|
137220
|
+
return rest;
|
|
137221
|
+
});
|
|
137222
|
+
}
|
|
137223
|
+
function hooksPart(home2, dorkHome) {
|
|
137224
|
+
const value = {};
|
|
137225
|
+
let verifiable = true;
|
|
137226
|
+
const commands = [];
|
|
137227
|
+
for (const name2 of SETTINGS_FILES) {
|
|
137228
|
+
const read = readJsonFile2(path48.join(home2, ".claude", name2));
|
|
137229
|
+
if (read.kind === "unverifiable") verifiable = false;
|
|
137230
|
+
const picked = read.kind === "parsed" ? pick2(read.value, CODE_SETTINGS_KEYS) : void 0;
|
|
137231
|
+
if (picked !== void 0) collectCommands2(picked, commands);
|
|
137232
|
+
value[name2] = picked !== void 0 ? picked : read.kind === "malformed" ? malformed(read.text) : read.kind === "absent" ? null : { unverifiable: true };
|
|
137233
|
+
}
|
|
137234
|
+
const files = hookScriptFiles(home2, commands, dorkHome);
|
|
137235
|
+
const agentFiles = agentFileHooks(home2);
|
|
137236
|
+
if (files === void 0 || agentFiles === void 0) {
|
|
137237
|
+
return { value: { ...value, files: { unverifiable: true } }, verifiable: false };
|
|
137238
|
+
}
|
|
137239
|
+
return { value: { ...value, files, agentFiles }, verifiable };
|
|
137240
|
+
}
|
|
137241
|
+
function collectCommands2(value, out) {
|
|
137242
|
+
if (Array.isArray(value)) {
|
|
137243
|
+
for (const item of value) collectCommands2(item, out);
|
|
137244
|
+
return;
|
|
137245
|
+
}
|
|
137246
|
+
if (value === null || typeof value !== "object") return;
|
|
137247
|
+
for (const [key, child] of Object.entries(value)) {
|
|
137248
|
+
if ((key === "command" || HELPER_KEYS.includes(key)) && typeof child === "string") {
|
|
137249
|
+
out.push(child);
|
|
137250
|
+
} else {
|
|
137251
|
+
collectCommands2(child, out);
|
|
137252
|
+
}
|
|
137253
|
+
}
|
|
137254
|
+
}
|
|
137255
|
+
function mcpJsonPart(home2) {
|
|
137256
|
+
const read = readJsonFile2(path48.join(home2, ".mcp.json"));
|
|
137257
|
+
if (read.kind === "unverifiable") return { value: { unverifiable: true }, verifiable: false };
|
|
137258
|
+
if (read.kind === "malformed") return { value: malformed(read.text), verifiable: true };
|
|
137259
|
+
return { value: read.kind === "parsed" ? read.value : null, verifiable: true };
|
|
137260
|
+
}
|
|
137261
|
+
function manifestPart(home2) {
|
|
137262
|
+
const read = readJsonFile2(path48.join(home2, ".dork", "agent.json"));
|
|
137263
|
+
if (read.kind === "unverifiable") return { value: { unverifiable: true }, verifiable: false };
|
|
137264
|
+
if (read.kind === "malformed") return { value: malformed(read.text), verifiable: true };
|
|
137265
|
+
if (read.kind === "absent") return { value: null, verifiable: true };
|
|
137266
|
+
const manifest = read.value;
|
|
137267
|
+
if (manifest === null || typeof manifest !== "object" || Array.isArray(manifest)) {
|
|
137268
|
+
return { value: { notAnObject: manifest }, verifiable: true };
|
|
137269
|
+
}
|
|
137270
|
+
const fields = manifest;
|
|
137271
|
+
return {
|
|
137272
|
+
value: {
|
|
137273
|
+
id: Object.hasOwn(fields, "id") ? fields.id : null,
|
|
137274
|
+
runtime: Object.hasOwn(fields, "runtime") ? fields.runtime : null,
|
|
137275
|
+
mcpServers: Object.hasOwn(fields, "mcpServers") ? servers(fields.mcpServers) : null,
|
|
137276
|
+
account: Object.hasOwn(fields, "account") ? fields.account : null
|
|
137277
|
+
},
|
|
137278
|
+
verifiable: true
|
|
137279
|
+
};
|
|
137280
|
+
}
|
|
137281
|
+
function isEmptyValue(value) {
|
|
137282
|
+
if (value === null || value === void 0 || value === "") return true;
|
|
137283
|
+
if (Array.isArray(value)) return value.length === 0;
|
|
137284
|
+
if (typeof value === "object") return Object.values(value).every(isEmptyValue);
|
|
137285
|
+
return false;
|
|
137286
|
+
}
|
|
137287
|
+
function hooksInert(value) {
|
|
137288
|
+
const { files, agentFiles, ...settings } = value ?? {};
|
|
137289
|
+
return isEmptyValue(settings) && isEmptyValue(files) && isEmptyValue(agentFiles);
|
|
137290
|
+
}
|
|
137291
|
+
function mcpJsonInert(value) {
|
|
137292
|
+
if (value === null) return true;
|
|
137293
|
+
const servers2 = value?.mcpServers;
|
|
137294
|
+
return typeof value === "object" && !Array.isArray(value) && isEmptyValue(servers2) && Object.keys(value).every((key) => key === "mcpServers");
|
|
137295
|
+
}
|
|
137296
|
+
function manifestInert(value) {
|
|
137297
|
+
if (value === null) return true;
|
|
137298
|
+
const fields = value;
|
|
137299
|
+
if (typeof value !== "object" || !Object.hasOwn(fields, "id")) return false;
|
|
137300
|
+
const runtimeInert = fields.runtime === null || fields.runtime === "claude-code";
|
|
137301
|
+
return runtimeInert && isEmptyValue(fields.mcpServers) && isEmptyValue(fields.account);
|
|
137302
|
+
}
|
|
137303
|
+
function readFolderConfigParts(home2, dorkHome = resolveDorkHome()) {
|
|
137304
|
+
const values2 = {
|
|
137305
|
+
hooks: hooksPart(home2, dorkHome),
|
|
137306
|
+
mcpJson: mcpJsonPart(home2),
|
|
137307
|
+
manifest: manifestPart(home2)
|
|
137308
|
+
};
|
|
137309
|
+
const digests = {};
|
|
137310
|
+
const unverifiable = [];
|
|
137311
|
+
for (const part of FOLDER_CONFIG_PARTS) {
|
|
137312
|
+
digests[part] = sha2563(canonicalJson(values2[part].value));
|
|
137313
|
+
if (!values2[part].verifiable) unverifiable.push(part);
|
|
137314
|
+
}
|
|
137315
|
+
const inert = unverifiable.length === 0 && hooksInert(values2.hooks.value) && mcpJsonInert(values2.mcpJson.value) && manifestInert(values2.manifest.value);
|
|
137316
|
+
return {
|
|
137317
|
+
digests,
|
|
137318
|
+
unverifiable,
|
|
137319
|
+
inert,
|
|
137320
|
+
values: {
|
|
137321
|
+
hooks: values2.hooks.value,
|
|
137322
|
+
mcpJson: values2.mcpJson.value,
|
|
137323
|
+
manifest: values2.manifest.value
|
|
137324
|
+
}
|
|
137325
|
+
};
|
|
137326
|
+
}
|
|
137327
|
+
var FOLDER_CONFIG_PARTS, CODE_SETTINGS_KEYS, SETTINGS_FILES, MAX_FILE_BYTES2, HELPER_KEYS;
|
|
137328
|
+
var init_folder_config_pin = __esm({
|
|
137329
|
+
"../../apps/server/src/services/runtimes/claude-code/folder-settings/folder-config-pin.ts"() {
|
|
137330
|
+
"use strict";
|
|
137331
|
+
init_dork_home();
|
|
137332
|
+
init_folder_config_scripts();
|
|
137333
|
+
FOLDER_CONFIG_PARTS = ["hooks", "mcpJson", "manifest"];
|
|
137334
|
+
CODE_SETTINGS_KEYS = [
|
|
137335
|
+
"hooks",
|
|
137336
|
+
"statusLine",
|
|
137337
|
+
"enabledPlugins",
|
|
137338
|
+
"extraKnownMarketplaces",
|
|
137339
|
+
"enableAllProjectMcpServers",
|
|
137340
|
+
"enabledMcpjsonServers",
|
|
137341
|
+
"disabledMcpjsonServers",
|
|
137342
|
+
"apiKeyHelper",
|
|
137343
|
+
"awsAuthRefresh",
|
|
137344
|
+
"awsCredentialExport",
|
|
137345
|
+
"otelHeadersHelper",
|
|
137346
|
+
"env",
|
|
137347
|
+
// The rest of the CLI's own list of settings that run a command (DOR-3068 M1).
|
|
137348
|
+
"gcpAuthRefresh",
|
|
137349
|
+
"proxyAuthHelper",
|
|
137350
|
+
"subagentStatusLine",
|
|
137351
|
+
"fileSuggestion",
|
|
137352
|
+
// Which `.claude/agents` file the main thread runs as.
|
|
137353
|
+
"agent"
|
|
137354
|
+
];
|
|
137355
|
+
SETTINGS_FILES = ["settings.json", "settings.local.json"];
|
|
137356
|
+
MAX_FILE_BYTES2 = 64 * 1024;
|
|
137357
|
+
HELPER_KEYS = ["apiKeyHelper", "awsAuthRefresh", "awsCredentialExport", "otelHeadersHelper"];
|
|
137358
|
+
}
|
|
137359
|
+
});
|
|
137360
|
+
|
|
137361
|
+
// ../../apps/server/src/services/runtimes/claude-code/folder-settings/folder-config-consent.ts
|
|
137362
|
+
import { createHash as createHash6 } from "node:crypto";
|
|
137363
|
+
import { realpathSync as realpathSync12 } from "node:fs";
|
|
137364
|
+
import path49 from "node:path";
|
|
137365
|
+
function folderConfigEntry(state) {
|
|
137366
|
+
const parts = Object.fromEntries(FOLDER_CONFIG_PARTS.map((p) => [p, state.digests[p]]));
|
|
137367
|
+
const digest2 = createHash6("sha256").update(JSON.stringify({ home: canonicalHome2(state.home), parts })).digest("hex");
|
|
137368
|
+
return `${state.agentId}${FOLDER_CONFIG_ENTRY_MARKER}${digest2}`;
|
|
137369
|
+
}
|
|
137370
|
+
function canonicalHome2(home2) {
|
|
137371
|
+
const resolved = path49.resolve(home2);
|
|
137372
|
+
try {
|
|
137373
|
+
return realpathSync12.native(resolved);
|
|
137374
|
+
} catch {
|
|
137375
|
+
return resolved;
|
|
137376
|
+
}
|
|
137377
|
+
}
|
|
137378
|
+
function isAgentEntry(agentId) {
|
|
137379
|
+
return (stored) => stored.startsWith(`${agentId}${FOLDER_CONFIG_ENTRY_MARKER}`);
|
|
137380
|
+
}
|
|
137381
|
+
function storedDecisions() {
|
|
137382
|
+
const harness = configManager.get("harness") ?? {};
|
|
137383
|
+
return {
|
|
137384
|
+
approved: [...harness.approvedFolderConfig ?? []],
|
|
137385
|
+
refused: [...harness.refusedFolderConfig ?? []],
|
|
137386
|
+
parts: { ...harness.approvedFolderConfigParts ?? {} }
|
|
137387
|
+
};
|
|
137388
|
+
}
|
|
137389
|
+
function writeDecisions2(reason, next) {
|
|
137390
|
+
const harness = configManager.get("harness");
|
|
137391
|
+
const current3 = storedDecisions();
|
|
137392
|
+
if (JSON.stringify(next) === JSON.stringify(current3)) return;
|
|
137393
|
+
configManager.set("harness", {
|
|
137394
|
+
...harness,
|
|
137395
|
+
approvedFolderConfig: next.approved,
|
|
137396
|
+
refusedFolderConfig: next.refused,
|
|
137397
|
+
approvedFolderConfigParts: next.parts
|
|
137398
|
+
});
|
|
137399
|
+
logConfigWrite(reason, "harness", harness, configManager.get("harness"));
|
|
137400
|
+
}
|
|
137401
|
+
function lastApprovedParts(agentId, home2) {
|
|
137402
|
+
const { approved, parts } = storedDecisions();
|
|
137403
|
+
const previous = parts[agentId];
|
|
137404
|
+
if (!previous) return void 0;
|
|
137405
|
+
return approved.includes(folderConfigEntry({ agentId, home: home2, digests: previous })) ? { ...previous } : void 0;
|
|
137406
|
+
}
|
|
137407
|
+
function recordFolderConfigApproval(state, reason = "allowing an agent's folder settings") {
|
|
137408
|
+
const entry = folderConfigEntry(state);
|
|
137409
|
+
const { approved, refused: refused3, parts } = storedDecisions();
|
|
137410
|
+
writeDecisions2(reason, {
|
|
137411
|
+
approved: [...approved.filter((stored) => !isAgentEntry(state.agentId)(stored)), entry],
|
|
137412
|
+
refused: refused3.filter((stored) => stored !== entry),
|
|
137413
|
+
parts: { ...parts, [state.agentId]: { ...state.digests } }
|
|
137414
|
+
});
|
|
137415
|
+
}
|
|
137416
|
+
function repinFolderConfigPart(agentId, home2, part, before, after, reason) {
|
|
137417
|
+
const approved = lastApprovedParts(agentId, home2);
|
|
137418
|
+
if (!approved || approved[part] !== before) return false;
|
|
137419
|
+
if (before === after) return true;
|
|
137420
|
+
recordFolderConfigApproval({ agentId, home: home2, digests: { ...approved, [part]: after } }, reason);
|
|
137421
|
+
return true;
|
|
137422
|
+
}
|
|
137423
|
+
function withPersonRepinAtHome(home2, part, reason, write) {
|
|
137424
|
+
let agents2 = [];
|
|
137425
|
+
try {
|
|
137426
|
+
agents2 = Object.keys(storedDecisions().parts).filter(
|
|
137427
|
+
(agentId) => lastApprovedParts(agentId, home2) !== void 0
|
|
137428
|
+
);
|
|
137429
|
+
} catch {
|
|
137430
|
+
}
|
|
137431
|
+
if (agents2.length === 0) return write();
|
|
137432
|
+
const before = safeRead(home2, part);
|
|
137433
|
+
const result2 = write();
|
|
137434
|
+
const after = safeRead(home2, part);
|
|
137435
|
+
if (before !== void 0 && after !== void 0) {
|
|
137436
|
+
for (const agentId of agents2) {
|
|
137437
|
+
try {
|
|
137438
|
+
repinFolderConfigPart(agentId, home2, part, before, after, reason);
|
|
137439
|
+
} catch (err) {
|
|
137440
|
+
logger.warn("[FolderConfig] Could not move the pin after a projection", {
|
|
137441
|
+
agentId,
|
|
137442
|
+
part,
|
|
137443
|
+
error: err instanceof Error ? err.message : String(err)
|
|
137444
|
+
});
|
|
137445
|
+
}
|
|
137446
|
+
}
|
|
137447
|
+
}
|
|
137448
|
+
return result2;
|
|
137449
|
+
}
|
|
137450
|
+
function safeRead(home2, part) {
|
|
137451
|
+
try {
|
|
137452
|
+
const read = readFolderConfigParts(home2);
|
|
137453
|
+
return read.unverifiable.includes(part) ? void 0 : read.digests[part];
|
|
137454
|
+
} catch {
|
|
137455
|
+
return void 0;
|
|
137456
|
+
}
|
|
137457
|
+
}
|
|
137458
|
+
var FOLDER_CONFIG_ENTRY_MARKER;
|
|
137459
|
+
var init_folder_config_consent = __esm({
|
|
137460
|
+
"../../apps/server/src/services/runtimes/claude-code/folder-settings/folder-config-consent.ts"() {
|
|
137461
|
+
"use strict";
|
|
137462
|
+
init_logger();
|
|
137463
|
+
init_config_manager();
|
|
137464
|
+
init_config_write();
|
|
137465
|
+
init_folder_config_pin();
|
|
137466
|
+
FOLDER_CONFIG_ENTRY_MARKER = "@folder-config-";
|
|
137467
|
+
}
|
|
137468
|
+
});
|
|
137469
|
+
|
|
136808
137470
|
// ../../apps/server/src/services/harness/project-with-consent.ts
|
|
136809
137471
|
var project_with_consent_exports = {};
|
|
136810
137472
|
__export(project_with_consent_exports, {
|
|
@@ -136817,11 +137479,11 @@ __export(project_with_consent_exports, {
|
|
|
136817
137479
|
withProjectLock: () => withProjectLock
|
|
136818
137480
|
});
|
|
136819
137481
|
import { AsyncLocalStorage as AsyncLocalStorage6 } from "node:async_hooks";
|
|
136820
|
-
import { realpathSync as
|
|
137482
|
+
import { realpathSync as realpathSync13 } from "node:fs";
|
|
136821
137483
|
import { resolve as resolve9 } from "node:path";
|
|
136822
137484
|
function projectLockKey(projectPath) {
|
|
136823
137485
|
try {
|
|
136824
|
-
return
|
|
137486
|
+
return realpathSync13(projectPath);
|
|
136825
137487
|
} catch {
|
|
136826
137488
|
return resolve9(projectPath);
|
|
136827
137489
|
}
|
|
@@ -136907,10 +137569,11 @@ function projectWithConsent(projectPath, opts) {
|
|
|
136907
137569
|
);
|
|
136908
137570
|
}
|
|
136909
137571
|
const { plan, withheld } = planWithConsent(projectPath, opts);
|
|
136910
|
-
const { applied, conflicts, swept, removals, leftAlone, warnings } =
|
|
137572
|
+
const { applied, conflicts, swept, removals, leftAlone, warnings } = withPersonRepinAtHome(
|
|
136911
137573
|
projectPath,
|
|
136912
|
-
|
|
136913
|
-
|
|
137574
|
+
"hooks",
|
|
137575
|
+
"projecting hooks a person allowed",
|
|
137576
|
+
() => _internal.applyPlan(projectPath, plan, { sweepOrphans: opts.sweepOrphans })
|
|
136914
137577
|
);
|
|
136915
137578
|
return { plan, withheld, applied, conflicts, swept, removals, leftAlone, warnings };
|
|
136916
137579
|
}
|
|
@@ -136920,6 +137583,7 @@ var init_project_with_consent = __esm({
|
|
|
136920
137583
|
init_src5();
|
|
136921
137584
|
init_hook_consent();
|
|
136922
137585
|
init_global_scope();
|
|
137586
|
+
init_folder_config_consent();
|
|
136923
137587
|
_internal = {
|
|
136924
137588
|
project,
|
|
136925
137589
|
applyPlan,
|
|
@@ -136990,11 +137654,11 @@ var init_atomic_write2 = __esm({
|
|
|
136990
137654
|
});
|
|
136991
137655
|
|
|
136992
137656
|
// ../../apps/server/src/services/marketplace/lib/package-paths.ts
|
|
136993
|
-
import
|
|
137657
|
+
import path50 from "node:path";
|
|
136994
137658
|
function assertContainedIn(root, candidate) {
|
|
136995
|
-
const resolvedRoot =
|
|
136996
|
-
const resolved =
|
|
136997
|
-
if (!resolved.startsWith(resolvedRoot +
|
|
137659
|
+
const resolvedRoot = path50.resolve(root);
|
|
137660
|
+
const resolved = path50.resolve(candidate);
|
|
137661
|
+
if (!resolved.startsWith(resolvedRoot + path50.sep)) {
|
|
136998
137662
|
throw new PathEscapeError(root, candidate);
|
|
136999
137663
|
}
|
|
137000
137664
|
return candidate;
|
|
@@ -137109,7 +137773,7 @@ import { join as join50 } from "node:path";
|
|
|
137109
137773
|
async function directorySize(root) {
|
|
137110
137774
|
let total = 0;
|
|
137111
137775
|
const walk = async (dir, depth) => {
|
|
137112
|
-
if (depth >
|
|
137776
|
+
if (depth > MAX_DEPTH3) return;
|
|
137113
137777
|
let entries;
|
|
137114
137778
|
try {
|
|
137115
137779
|
entries = await readdir3(dir, { withFileTypes: true });
|
|
@@ -137131,16 +137795,16 @@ async function directorySize(root) {
|
|
|
137131
137795
|
await walk(root, 0);
|
|
137132
137796
|
return total;
|
|
137133
137797
|
}
|
|
137134
|
-
var
|
|
137798
|
+
var MAX_DEPTH3;
|
|
137135
137799
|
var init_directory_size = __esm({
|
|
137136
137800
|
"../../apps/server/src/services/marketplace/lib/directory-size.ts"() {
|
|
137137
137801
|
"use strict";
|
|
137138
|
-
|
|
137802
|
+
MAX_DEPTH3 = 256;
|
|
137139
137803
|
}
|
|
137140
137804
|
});
|
|
137141
137805
|
|
|
137142
137806
|
// ../../apps/server/src/services/marketplace/cache/marketplace-cache.ts
|
|
137143
|
-
import { createHash as
|
|
137807
|
+
import { createHash as createHash7, randomUUID as randomUUID4 } from "node:crypto";
|
|
137144
137808
|
import {
|
|
137145
137809
|
access,
|
|
137146
137810
|
mkdir as mkdir4,
|
|
@@ -137161,15 +137825,15 @@ function isFetchStatus(value) {
|
|
|
137161
137825
|
}
|
|
137162
137826
|
function subpathDigest(subpath) {
|
|
137163
137827
|
if (subpath === "") return "";
|
|
137164
|
-
return
|
|
137828
|
+
return createHash7("sha256").update(subpath).digest("hex").slice(0, 12);
|
|
137165
137829
|
}
|
|
137166
|
-
async function stampUsed(
|
|
137830
|
+
async function stampUsed(path71) {
|
|
137167
137831
|
const now3 = /* @__PURE__ */ new Date();
|
|
137168
137832
|
try {
|
|
137169
|
-
await utimes(
|
|
137833
|
+
await utimes(path71, now3, now3);
|
|
137170
137834
|
return now3;
|
|
137171
137835
|
} catch {
|
|
137172
|
-
return (await stat2(
|
|
137836
|
+
return (await stat2(path71)).mtime;
|
|
137173
137837
|
}
|
|
137174
137838
|
}
|
|
137175
137839
|
function parsePackageDirName(entry) {
|
|
@@ -137410,14 +138074,14 @@ var init_marketplace_cache = __esm({
|
|
|
137410
138074
|
* @returns A descriptor when a non-empty entry is present, `null` otherwise.
|
|
137411
138075
|
*/
|
|
137412
138076
|
async getPackage(packageName, commitSha, subpath) {
|
|
137413
|
-
const
|
|
137414
|
-
const usedAt = await this.stampIfPresent(
|
|
138077
|
+
const path71 = this.packageDir(packageName, commitSha, subpath);
|
|
138078
|
+
const usedAt = await this.stampIfPresent(path71);
|
|
137415
138079
|
if (usedAt === null) return null;
|
|
137416
138080
|
return {
|
|
137417
138081
|
packageName,
|
|
137418
138082
|
commitSha,
|
|
137419
138083
|
subpathDigest: subpathDigest(subpath),
|
|
137420
|
-
path:
|
|
138084
|
+
path: path71,
|
|
137421
138085
|
lastUsedAt: usedAt
|
|
137422
138086
|
};
|
|
137423
138087
|
}
|
|
@@ -137609,10 +138273,10 @@ var init_marketplace_cache = __esm({
|
|
|
137609
138273
|
* @returns When it was stamped, or `null` when there is no valid entry.
|
|
137610
138274
|
* @internal
|
|
137611
138275
|
*/
|
|
137612
|
-
stampIfPresent(
|
|
138276
|
+
stampIfPresent(path71) {
|
|
137613
138277
|
return this.exclusive(async () => {
|
|
137614
|
-
if (!await isNonEmptyDir(
|
|
137615
|
-
return stampUsed(
|
|
138278
|
+
if (!await isNonEmptyDir(path71)) return null;
|
|
138279
|
+
return stampUsed(path71);
|
|
137616
138280
|
});
|
|
137617
138281
|
}
|
|
137618
138282
|
/**
|
|
@@ -137650,9 +138314,9 @@ var init_marketplace_cache = __esm({
|
|
|
137650
138314
|
if (!parsed) {
|
|
137651
138315
|
continue;
|
|
137652
138316
|
}
|
|
137653
|
-
const
|
|
138317
|
+
const path71 = join51(root, entry);
|
|
137654
138318
|
try {
|
|
137655
|
-
const info2 = await stat2(
|
|
138319
|
+
const info2 = await stat2(path71);
|
|
137656
138320
|
if (!info2.isDirectory()) {
|
|
137657
138321
|
continue;
|
|
137658
138322
|
}
|
|
@@ -137660,7 +138324,7 @@ var init_marketplace_cache = __esm({
|
|
|
137660
138324
|
packageName: parsed.packageName,
|
|
137661
138325
|
commitSha: parsed.commitSha,
|
|
137662
138326
|
subpathDigest: parsed.subpathDigest,
|
|
137663
|
-
path:
|
|
138327
|
+
path: path71,
|
|
137664
138328
|
lastUsedAt: info2.mtime
|
|
137665
138329
|
});
|
|
137666
138330
|
} catch {
|
|
@@ -138028,7 +138692,7 @@ __export(claude_enabled_plugins_exports, {
|
|
|
138028
138692
|
readClaudeOnlyPlugins: () => readClaudeOnlyPlugins
|
|
138029
138693
|
});
|
|
138030
138694
|
import { readFile as readFile5 } from "node:fs/promises";
|
|
138031
|
-
import
|
|
138695
|
+
import path51 from "node:path";
|
|
138032
138696
|
function causeOf(err) {
|
|
138033
138697
|
return err instanceof Error ? err.message : String(err);
|
|
138034
138698
|
}
|
|
@@ -138127,7 +138791,7 @@ function splitPluginKey(key) {
|
|
|
138127
138791
|
}
|
|
138128
138792
|
async function readDorkosSources(dorkHome) {
|
|
138129
138793
|
let sources2;
|
|
138130
|
-
const sourcesPath =
|
|
138794
|
+
const sourcesPath = path51.join(dorkHome, "marketplaces.json");
|
|
138131
138795
|
try {
|
|
138132
138796
|
sources2 = await new MarketplaceSourceManager(dorkHome).list();
|
|
138133
138797
|
} catch {
|
|
@@ -138163,7 +138827,7 @@ function classifyOffer(repo, name2, dorkos) {
|
|
|
138163
138827
|
async function readClaudeOnlyPlugins(input4) {
|
|
138164
138828
|
const { claudeRoot, projectPath, dorkHome } = input4;
|
|
138165
138829
|
const base = { root: claudeRoot, readAt: (/* @__PURE__ */ new Date()).toISOString(), mayBeOverridden: true };
|
|
138166
|
-
const user2 = await readSettingsSlice(
|
|
138830
|
+
const user2 = await readSettingsSlice(path51.join(claudeRoot, "settings.json"));
|
|
138167
138831
|
if (user2.slice === void 0) {
|
|
138168
138832
|
return {
|
|
138169
138833
|
...base,
|
|
@@ -138173,8 +138837,8 @@ async function readClaudeOnlyPlugins(input4) {
|
|
|
138173
138837
|
personalHookCommands: 0
|
|
138174
138838
|
};
|
|
138175
138839
|
}
|
|
138176
|
-
const project2 = await readSettingsSlice(
|
|
138177
|
-
const local = await readSettingsSlice(
|
|
138840
|
+
const project2 = await readSettingsSlice(path51.join(projectPath, ".claude", "settings.json"));
|
|
138841
|
+
const local = await readSettingsSlice(path51.join(projectPath, ".claude", "settings.local.json"));
|
|
138178
138842
|
const merged = mergeSettings([user2.slice, project2.slice ?? {}, local.slice ?? {}]);
|
|
138179
138843
|
const hooks = countHookCommands(user2.slice.hooks);
|
|
138180
138844
|
const partial2 = {
|
|
@@ -138279,7 +138943,7 @@ __export(harness_sync_command_exports, {
|
|
|
138279
138943
|
parseHarnessSyncArgs: () => parseHarnessSyncArgs,
|
|
138280
138944
|
runHarnessSync: () => runHarnessSync
|
|
138281
138945
|
});
|
|
138282
|
-
import { existsSync as existsSync18, readFileSync as
|
|
138946
|
+
import { existsSync as existsSync18, readFileSync as readFileSync23 } from "node:fs";
|
|
138283
138947
|
import { join as join53 } from "node:path";
|
|
138284
138948
|
import { parseArgs as parseArgs4 } from "node:util";
|
|
138285
138949
|
function parseHarnessSyncArgs(rawArgs) {
|
|
@@ -138316,9 +138980,9 @@ function parseHarnessSyncArgs(rawArgs) {
|
|
|
138316
138980
|
};
|
|
138317
138981
|
}
|
|
138318
138982
|
function formatAction2(action) {
|
|
138319
|
-
const
|
|
138983
|
+
const path71 = action.target ?? action.source ?? "(no path)";
|
|
138320
138984
|
const note = action.reason ? ` \u2014 ${action.reason}` : "";
|
|
138321
|
-
return ` [${action.kind}] ${action.artifact} "${action.name}" -> ${
|
|
138985
|
+
return ` [${action.kind}] ${action.artifact} "${action.name}" -> ${path71} (${action.harness})${note}`;
|
|
138322
138986
|
}
|
|
138323
138987
|
function formatAdoptable(repoRoot, manifest) {
|
|
138324
138988
|
const { candidates } = readAdoptCandidates(repoRoot, inventorySourceTree(repoRoot), manifest);
|
|
@@ -138344,26 +139008,26 @@ function formatAutoAdoptInert(inert) {
|
|
|
138344
139008
|
return inert ? ["", ADOPT_SENTENCES.S8()] : [];
|
|
138345
139009
|
}
|
|
138346
139010
|
function formatLeftAlone(leftAlone, manifest, harnessFilter) {
|
|
138347
|
-
const shown2 = harnessFilter ? leftAlone.filter((
|
|
139011
|
+
const shown2 = harnessFilter ? leftAlone.filter((path71) => harnessOf(path71) === harnessFilter) : leftAlone;
|
|
138348
139012
|
if (shown2.length === 0) return [];
|
|
138349
139013
|
const stopped = new Set(pluginHookReach(manifest).suppressed.map((s2) => s2.harness));
|
|
138350
|
-
const carried = shown2.filter((
|
|
138351
|
-
const harness = harnessOf(
|
|
139014
|
+
const carried = shown2.filter((path71) => {
|
|
139015
|
+
const harness = harnessOf(path71);
|
|
138352
139016
|
return harness === void 0 || !stopped.has(harness);
|
|
138353
139017
|
});
|
|
138354
139018
|
return [
|
|
138355
139019
|
"",
|
|
138356
139020
|
"Left alone \u2014 files DorkOS did not write, at paths it would otherwise generate:",
|
|
138357
|
-
...shown2.map((
|
|
138358
|
-
const harness = harnessOf(
|
|
139021
|
+
...shown2.map((path71) => {
|
|
139022
|
+
const harness = harnessOf(path71);
|
|
138359
139023
|
const note = harness && stopped.has(harness) ? " \u2014 your manifest's hookPolicies says not to write here" : "";
|
|
138360
|
-
return ` ${
|
|
139024
|
+
return ` ${path71} (${harness})${note}`;
|
|
138361
139025
|
}),
|
|
138362
139026
|
carried.length > 0 ? " Nothing to fix. Put these hooks in .claude/settings.json if you want DorkOS to carry them to every harness." : " Nothing to fix, and nothing to move: your manifest tells DorkOS not to write these files."
|
|
138363
139027
|
];
|
|
138364
139028
|
}
|
|
138365
|
-
function harnessOf(
|
|
138366
|
-
return GENERATED_HOOK_TARGET_HARNESSES[
|
|
139029
|
+
function harnessOf(path71) {
|
|
139030
|
+
return GENERATED_HOOK_TARGET_HARNESSES[path71];
|
|
138367
139031
|
}
|
|
138368
139032
|
function summarizeActions(actions, withheld, enabled3) {
|
|
138369
139033
|
const withheldLine = withheldSummaryLine(withheld);
|
|
@@ -138418,7 +139082,7 @@ function reportClaudeSkillsRestart(existedBefore, repoRoot) {
|
|
|
138418
139082
|
}
|
|
138419
139083
|
function readIfPresent(repoRoot, rel) {
|
|
138420
139084
|
try {
|
|
138421
|
-
return
|
|
139085
|
+
return readFileSync23(join53(repoRoot, rel), "utf8");
|
|
138422
139086
|
} catch {
|
|
138423
139087
|
return void 0;
|
|
138424
139088
|
}
|
|
@@ -138461,8 +139125,8 @@ function formatIgnoredCanonicalLayer(repoRoot) {
|
|
|
138461
139125
|
" on purpose."
|
|
138462
139126
|
];
|
|
138463
139127
|
}
|
|
138464
|
-
function orphanLine({ path:
|
|
138465
|
-
return ` ${
|
|
139128
|
+
function orphanLine({ path: path71, reason }) {
|
|
139129
|
+
return ` ${path71} \u2014 ${reason}`;
|
|
138466
139130
|
}
|
|
138467
139131
|
function reportCheck(repoRoot, plan, withheld, dorkHome, manifest, claudeOnly, autoAdoptInert, harnessFilter) {
|
|
138468
139132
|
const drift = checkPlan(repoRoot, plan);
|
|
@@ -139181,7 +139845,7 @@ Examples:
|
|
|
139181
139845
|
|
|
139182
139846
|
// src/lib/api-client.ts
|
|
139183
139847
|
import fs23 from "node:fs";
|
|
139184
|
-
import
|
|
139848
|
+
import path52 from "node:path";
|
|
139185
139849
|
function getServerBaseUrl() {
|
|
139186
139850
|
const envPort = process.env.DORKOS_PORT;
|
|
139187
139851
|
if (envPort && /^\d+$/.test(envPort)) {
|
|
@@ -139193,7 +139857,7 @@ function getServerBaseUrl() {
|
|
|
139193
139857
|
function readConfigPort() {
|
|
139194
139858
|
const dorkHome = resolveDorkHome2();
|
|
139195
139859
|
try {
|
|
139196
|
-
const raw = fs23.readFileSync(
|
|
139860
|
+
const raw = fs23.readFileSync(path52.join(dorkHome, "config.json"), "utf-8");
|
|
139197
139861
|
const config3 = JSON.parse(raw);
|
|
139198
139862
|
const port2 = config3?.server?.port;
|
|
139199
139863
|
if (typeof port2 === "number" && port2 > 0) return port2;
|
|
@@ -139206,7 +139870,7 @@ function agentIdentityHeaders() {
|
|
|
139206
139870
|
return token ? { "X-DorkOS-Agent": token } : {};
|
|
139207
139871
|
}
|
|
139208
139872
|
function apiKeyFilePath() {
|
|
139209
|
-
return
|
|
139873
|
+
return path52.join(resolveDorkHome2(), API_KEY_FILE_NAME);
|
|
139210
139874
|
}
|
|
139211
139875
|
function resolveApiKey() {
|
|
139212
139876
|
const fromEnv = process.env[API_KEY_ENV_VAR]?.trim();
|
|
@@ -139918,7 +140582,7 @@ var init_scanner3 = __esm({
|
|
|
139918
140582
|
});
|
|
139919
140583
|
|
|
139920
140584
|
// ../browser/src/runtime/installation/contracts.ts
|
|
139921
|
-
import { createHash as
|
|
140585
|
+
import { createHash as createHash8 } from "node:crypto";
|
|
139922
140586
|
function failureCode(error63) {
|
|
139923
140587
|
return error63 instanceof InstallationFailure ? error63.code : "IO_FAILED";
|
|
139924
140588
|
}
|
|
@@ -139928,11 +140592,11 @@ function sameBinding(a2, b2) {
|
|
|
139928
140592
|
function sameFileIdentity(a2, b2) {
|
|
139929
140593
|
return a2.device === b2.device && a2.inode === b2.inode && a2.size === b2.size && a2.mtimeNs === b2.mtimeNs && a2.ctimeNs === b2.ctimeNs && a2.type === b2.type && a2.uid === b2.uid && a2.mode === b2.mode;
|
|
139930
140594
|
}
|
|
139931
|
-
function
|
|
139932
|
-
return
|
|
140595
|
+
function sha2564(bytes) {
|
|
140596
|
+
return createHash8("sha256").update(bytes).digest("hex");
|
|
139933
140597
|
}
|
|
139934
140598
|
function canonicalDigest(value) {
|
|
139935
|
-
const hash3 =
|
|
140599
|
+
const hash3 = createHash8("sha256");
|
|
139936
140600
|
const visit2 = (v2) => {
|
|
139937
140601
|
if (v2 === null) {
|
|
139938
140602
|
hash3.update("null;");
|
|
@@ -140198,10 +140862,10 @@ var init_contracts = __esm({
|
|
|
140198
140862
|
});
|
|
140199
140863
|
|
|
140200
140864
|
// ../browser/src/runtime/installation/filesystem.ts
|
|
140201
|
-
import { createHash as
|
|
140865
|
+
import { createHash as createHash9, randomUUID as randomUUID5 } from "node:crypto";
|
|
140202
140866
|
import { constants as constants5 } from "node:fs";
|
|
140203
140867
|
import * as fs24 from "node:fs/promises";
|
|
140204
|
-
import
|
|
140868
|
+
import path53 from "node:path";
|
|
140205
140869
|
function requireFact(value, code) {
|
|
140206
140870
|
if (!value) throw new InstallationFailure(code);
|
|
140207
140871
|
}
|
|
@@ -140322,14 +140986,14 @@ var init_filesystem = __esm({
|
|
|
140322
140986
|
}
|
|
140323
140987
|
async ancestors(name2, missing = false) {
|
|
140324
140988
|
requireFact(
|
|
140325
|
-
|
|
140989
|
+
path53.isAbsolute(name2) && path53.normalize(name2) === name2,
|
|
140326
140990
|
"INVALID_INSTALL_CONFIGURATION"
|
|
140327
140991
|
);
|
|
140328
140992
|
const result2 = [];
|
|
140329
|
-
let current3 =
|
|
140330
|
-
const parts =
|
|
140993
|
+
let current3 = path53.parse(name2).root;
|
|
140994
|
+
const parts = path53.relative(current3, name2).split(path53.sep).filter(Boolean);
|
|
140331
140995
|
for (const part of ["", ...parts]) {
|
|
140332
|
-
if (part) current3 =
|
|
140996
|
+
if (part) current3 = path53.join(current3, part);
|
|
140333
140997
|
try {
|
|
140334
140998
|
const stat5 = await fs24.lstat(current3, { bigint: true });
|
|
140335
140999
|
this.directorySecure(stat5);
|
|
@@ -140436,10 +141100,10 @@ var init_filesystem = __esm({
|
|
|
140436
141100
|
});
|
|
140437
141101
|
}
|
|
140438
141102
|
async ensureDirectories(name2) {
|
|
140439
|
-
let current3 =
|
|
140440
|
-
for (const part of
|
|
141103
|
+
let current3 = path53.parse(name2).root;
|
|
141104
|
+
for (const part of path53.relative(current3, name2).split(path53.sep).filter(Boolean)) {
|
|
140441
141105
|
const parent = current3;
|
|
140442
|
-
current3 =
|
|
141106
|
+
current3 = path53.join(current3, part);
|
|
140443
141107
|
try {
|
|
140444
141108
|
this.directorySecure(await fs24.lstat(current3, { bigint: true }));
|
|
140445
141109
|
} catch (error63) {
|
|
@@ -140457,7 +141121,7 @@ var init_filesystem = __esm({
|
|
|
140457
141121
|
}
|
|
140458
141122
|
}
|
|
140459
141123
|
async exclusiveDirectory(name2) {
|
|
140460
|
-
await this.ancestors(
|
|
141124
|
+
await this.ancestors(path53.dirname(name2));
|
|
140461
141125
|
await fs24.mkdir(name2, { mode: 448 });
|
|
140462
141126
|
const stat5 = await fs24.lstat(name2, { bigint: true });
|
|
140463
141127
|
this.directorySecure(stat5);
|
|
@@ -140466,10 +141130,10 @@ var init_filesystem = __esm({
|
|
|
140466
141130
|
"OWNERSHIP_UNCERTAIN"
|
|
140467
141131
|
);
|
|
140468
141132
|
await this.syncDirectory(name2);
|
|
140469
|
-
await this.syncDirectory(
|
|
141133
|
+
await this.syncDirectory(path53.dirname(name2));
|
|
140470
141134
|
}
|
|
140471
141135
|
async read(name2, cap, retain = 0) {
|
|
140472
|
-
const parents = await this.ancestors(
|
|
141136
|
+
const parents = await this.ancestors(path53.dirname(name2));
|
|
140473
141137
|
const named3 = identity(await fs24.lstat(name2, { bigint: true }));
|
|
140474
141138
|
requireFact(named3.type === "file" && BigInt(named3.size) <= BigInt(cap), "INSTALLATION_INVALID");
|
|
140475
141139
|
const duty = await this.acquire(
|
|
@@ -140480,7 +141144,7 @@ var init_filesystem = __esm({
|
|
|
140480
141144
|
return this.closeAfter([duty], async () => {
|
|
140481
141145
|
const acquired = identity(await handle.stat({ bigint: true }));
|
|
140482
141146
|
requireFact(sameFileIdentity(named3, acquired), "ROOT_CHANGED");
|
|
140483
|
-
const hash3 =
|
|
141147
|
+
const hash3 = createHash9("sha256"), chunks = [];
|
|
140484
141148
|
const buffer = Buffer.alloc(INSTALLATION_LIMITS.bufferBytes);
|
|
140485
141149
|
let bytes = 0, retained2 = 0;
|
|
140486
141150
|
let prefix = new Uint8Array();
|
|
@@ -140538,7 +141202,7 @@ var init_filesystem = __esm({
|
|
|
140538
141202
|
});
|
|
140539
141203
|
}
|
|
140540
141204
|
async libraryBinMetadata(root, directory) {
|
|
140541
|
-
const parents = await this.ancestors(directory), bins =
|
|
141205
|
+
const parents = await this.ancestors(directory), bins = path53.join(directory, ".bin");
|
|
140542
141206
|
const before = identity(await fs24.lstat(directory, { bigint: true }));
|
|
140543
141207
|
requireFact(
|
|
140544
141208
|
(await this.names(directory, INSTALLATION_LIMITS.libraryEntries)).join(",") === ".bin",
|
|
@@ -140549,11 +141213,11 @@ var init_filesystem = __esm({
|
|
|
140549
141213
|
(await this.names(bins, INSTALLATION_LIMITS.libraryEntries)).join(",") === "playwright-core",
|
|
140550
141214
|
"LIBRARY_MISMATCH"
|
|
140551
141215
|
);
|
|
140552
|
-
const shim =
|
|
141216
|
+
const shim = path53.join(bins, "playwright-core"), stat5 = await fs24.lstat(shim, { bigint: true });
|
|
140553
141217
|
if (stat5.isSymbolicLink()) {
|
|
140554
141218
|
const link3 = await fs24.readlink(shim);
|
|
140555
141219
|
requireFact(
|
|
140556
|
-
Buffer.byteLength(link3) <= INSTALLATION_LIMITS.bufferBytes && await fs24.realpath(shim) ===
|
|
141220
|
+
Buffer.byteLength(link3) <= INSTALLATION_LIMITS.bufferBytes && await fs24.realpath(shim) === path53.join(root, "cli.js"),
|
|
140557
141221
|
"LIBRARY_MISMATCH"
|
|
140558
141222
|
);
|
|
140559
141223
|
const after = await fs24.lstat(shim, { bigint: true });
|
|
@@ -140584,13 +141248,13 @@ var init_filesystem = __esm({
|
|
|
140584
141248
|
requireFact(dirIdentity.type === "directory", "ROOT_CHANGED");
|
|
140585
141249
|
result2.directories.push({ path: directory, identity: dirIdentity });
|
|
140586
141250
|
result2.rows.push({
|
|
140587
|
-
path:
|
|
141251
|
+
path: path53.relative(root, directory).split(path53.sep).join("/"),
|
|
140588
141252
|
type: "directory",
|
|
140589
141253
|
identity: dirIdentity
|
|
140590
141254
|
});
|
|
140591
141255
|
for (const name2 of await this.names(directory, entryLimit)) {
|
|
140592
141256
|
requireFact(++result2.entries <= entryLimit, "RETENTION_EXCEEDED");
|
|
140593
|
-
const absolute =
|
|
141257
|
+
const absolute = path53.join(directory, name2), relative12 = path53.relative(root, absolute).split(path53.sep).join("/");
|
|
140594
141258
|
requireFact(relativePath.safeParse(relative12).success, "INSTALLATION_INVALID");
|
|
140595
141259
|
const stat5 = await fs24.lstat(absolute, { bigint: true });
|
|
140596
141260
|
if (library && relative12 === "node_modules") {
|
|
@@ -140601,7 +141265,7 @@ var init_filesystem = __esm({
|
|
|
140601
141265
|
if (stat5.isSymbolicLink()) {
|
|
140602
141266
|
requireFact(!library, "LIBRARY_MISMATCH");
|
|
140603
141267
|
const link3 = await fs24.readlink(absolute), resolved = await fs24.realpath(absolute);
|
|
140604
|
-
requireFact(resolved.startsWith(root +
|
|
141268
|
+
requireFact(resolved.startsWith(root + path53.sep), "ROOT_CHANGED");
|
|
140605
141269
|
const target = await fs24.stat(resolved, { bigint: true });
|
|
140606
141270
|
requireFact(target.isFile() || target.isDirectory(), "ROOT_CHANGED");
|
|
140607
141271
|
const after = await fs24.lstat(absolute, { bigint: true });
|
|
@@ -140671,18 +141335,18 @@ var init_filesystem = __esm({
|
|
|
140671
141335
|
this.supported();
|
|
140672
141336
|
const tree = await this.tree(this.configuration.libraryRoot, true);
|
|
140673
141337
|
requireFact(tree.files.length === 114, "LIBRARY_MISMATCH");
|
|
140674
|
-
const distribution =
|
|
141338
|
+
const distribution = createHash9("sha256");
|
|
140675
141339
|
for (const file2 of [...tree.files].sort(
|
|
140676
141340
|
(a2, b2) => a2.path < b2.path ? -1 : a2.path > b2.path ? 1 : 0
|
|
140677
141341
|
))
|
|
140678
141342
|
distribution.update(
|
|
140679
|
-
|
|
141343
|
+
path53.relative(this.configuration.libraryRoot, file2.path).split(path53.sep).join("/") + "\0" + file2.sha256 + "\n"
|
|
140680
141344
|
);
|
|
140681
141345
|
const distributionSHA256 = distribution.digest("hex");
|
|
140682
141346
|
requireFact(distributionSHA256 === INSTALLATION_TARGET.libraryDistributionSHA256, "LIBRARY_MISMATCH");
|
|
140683
141347
|
const find = (name2) => {
|
|
140684
141348
|
const file2 = tree.files.find(
|
|
140685
|
-
(f3) => f3.path ===
|
|
141349
|
+
(f3) => f3.path === path53.join(this.configuration.libraryRoot, name2)
|
|
140686
141350
|
);
|
|
140687
141351
|
requireFact(file2, "LIBRARY_MISMATCH");
|
|
140688
141352
|
return file2;
|
|
@@ -140763,7 +141427,7 @@ var init_filesystem = __esm({
|
|
|
140763
141427
|
requireFact(!this.active || this.active.state === "released", "PUBLICATION_BUSY");
|
|
140764
141428
|
await this.ensureDirectories(this.configuration.cacheRoot);
|
|
140765
141429
|
const root = await this.directory(this.configuration.cacheRoot);
|
|
140766
|
-
const name2 =
|
|
141430
|
+
const name2 = path53.join(root.path, "reservation");
|
|
140767
141431
|
try {
|
|
140768
141432
|
await this.exclusiveDirectory(name2);
|
|
140769
141433
|
} catch (error63) {
|
|
@@ -140815,7 +141479,7 @@ var init_filesystem = __esm({
|
|
|
140815
141479
|
directory.duty.lease = true;
|
|
140816
141480
|
try {
|
|
140817
141481
|
reservation.ownerFile = await this.atomicRecord(
|
|
140818
|
-
|
|
141482
|
+
path53.join(name2, "owner.json"),
|
|
140819
141483
|
owner,
|
|
140820
141484
|
INSTALLATION_LIMITS.journalBytes,
|
|
140821
141485
|
false
|
|
@@ -140835,12 +141499,12 @@ var init_filesystem = __esm({
|
|
|
140835
141499
|
await this.checkReservation(reservation);
|
|
140836
141500
|
this.checkEnd(reservation);
|
|
140837
141501
|
requireFact(reservation.attempt === null, "BINDING_MISMATCH");
|
|
140838
|
-
const parent =
|
|
141502
|
+
const parent = path53.join(this.configuration.cacheRoot, "attempts");
|
|
140839
141503
|
await this.ensureDirectories(parent);
|
|
140840
|
-
const root =
|
|
141504
|
+
const root = path53.join(parent, handle.binding.attemptId);
|
|
140841
141505
|
await this.exclusiveDirectory(root);
|
|
140842
141506
|
for (const child of ["home", "tmp", "diagnostics"])
|
|
140843
|
-
await this.exclusiveDirectory(
|
|
141507
|
+
await this.exclusiveDirectory(path53.join(root, child));
|
|
140844
141508
|
await this.syncDirectory(root);
|
|
140845
141509
|
await this.syncDirectory(parent);
|
|
140846
141510
|
const stat5 = identity(await fs24.lstat(root, { bigint: true }));
|
|
@@ -140848,21 +141512,21 @@ var init_filesystem = __esm({
|
|
|
140848
141512
|
kind: "installation-attempt",
|
|
140849
141513
|
binding: handle.binding,
|
|
140850
141514
|
attemptRoot: root,
|
|
140851
|
-
homeRoot:
|
|
140852
|
-
temporaryRoot:
|
|
141515
|
+
homeRoot: path53.join(root, "home"),
|
|
141516
|
+
temporaryRoot: path53.join(root, "tmp"),
|
|
140853
141517
|
identity: stat5
|
|
140854
141518
|
});
|
|
140855
141519
|
this.attempts.set(attempt, {
|
|
140856
141520
|
reservation,
|
|
140857
141521
|
handle: attempt,
|
|
140858
|
-
diagnostics:
|
|
141522
|
+
diagnostics: path53.join(root, "diagnostics")
|
|
140859
141523
|
});
|
|
140860
141524
|
reservation.attempt = attempt;
|
|
140861
141525
|
return attempt;
|
|
140862
141526
|
});
|
|
140863
141527
|
}
|
|
140864
141528
|
async atomicRecord(name2, record2, cap, replace) {
|
|
140865
|
-
const bytes = recordBytes(record2, cap), parent =
|
|
141529
|
+
const bytes = recordBytes(record2, cap), parent = path53.dirname(name2), parents = await this.ancestors(parent);
|
|
140866
141530
|
if (!replace) {
|
|
140867
141531
|
try {
|
|
140868
141532
|
await fs24.lstat(name2);
|
|
@@ -140871,7 +141535,7 @@ var init_filesystem = __esm({
|
|
|
140871
141535
|
if (!isMissing(error63)) throw error63;
|
|
140872
141536
|
}
|
|
140873
141537
|
}
|
|
140874
|
-
const temporary =
|
|
141538
|
+
const temporary = path53.join(parent, ".installation-" + randomUUID5() + ".tmp");
|
|
140875
141539
|
const duty = await this.acquire(
|
|
140876
141540
|
temporary,
|
|
140877
141541
|
constants5.O_WRONLY | constants5.O_CREAT | constants5.O_EXCL | constants5.O_NOFOLLOW
|
|
@@ -140908,7 +141572,7 @@ var init_filesystem = __esm({
|
|
|
140908
141572
|
await fs24.rename(temporary, name2);
|
|
140909
141573
|
await this.syncDirectory(parent);
|
|
140910
141574
|
const result2 = await this.read(name2, cap, cap);
|
|
140911
|
-
requireFact(result2.file.sha256 ===
|
|
141575
|
+
requireFact(result2.file.sha256 === sha2564(bytes), "RECORD_FAILED");
|
|
140912
141576
|
return result2.file;
|
|
140913
141577
|
}
|
|
140914
141578
|
async writeOwner(reservationHandle, attemptHandle, record2) {
|
|
@@ -140931,7 +141595,7 @@ var init_filesystem = __esm({
|
|
|
140931
141595
|
await this.checkReservation(reservation);
|
|
140932
141596
|
this.checkEnd(reservation);
|
|
140933
141597
|
const old = await this.read(
|
|
140934
|
-
|
|
141598
|
+
path53.join(reservation.directory.path, "owner.json"),
|
|
140935
141599
|
INSTALLATION_LIMITS.journalBytes,
|
|
140936
141600
|
INSTALLATION_LIMITS.journalBytes
|
|
140937
141601
|
);
|
|
@@ -140954,11 +141618,11 @@ var init_filesystem = __esm({
|
|
|
140954
141618
|
requireFact(reservation.candidate === null, "BINDING_MISMATCH");
|
|
140955
141619
|
await this.checkReservation(reservation);
|
|
140956
141620
|
this.checkEnd(reservation);
|
|
140957
|
-
const parent =
|
|
141621
|
+
const parent = path53.join(this.configuration.cacheRoot, "candidates");
|
|
140958
141622
|
await this.ensureDirectories(parent);
|
|
140959
|
-
const candidateRoot =
|
|
141623
|
+
const candidateRoot = path53.join(parent, handle.binding.installationId);
|
|
140960
141624
|
await this.exclusiveDirectory(candidateRoot);
|
|
140961
|
-
const payloadRoot =
|
|
141625
|
+
const payloadRoot = path53.join(candidateRoot, "payload");
|
|
140962
141626
|
await this.exclusiveDirectory(payloadRoot);
|
|
140963
141627
|
const candidate = Object.freeze({
|
|
140964
141628
|
kind: "installation-candidate",
|
|
@@ -140996,8 +141660,8 @@ var init_filesystem = __esm({
|
|
|
140996
141660
|
});
|
|
140997
141661
|
}
|
|
140998
141662
|
async snapshot(installationId, candidateRoot) {
|
|
140999
|
-
const payloadRoot =
|
|
141000
|
-
const executablePath =
|
|
141663
|
+
const payloadRoot = path53.join(candidateRoot, "payload"), tree = await this.tree(payloadRoot);
|
|
141664
|
+
const executablePath = path53.join(candidateRoot, INSTALLATION_TARGET.executablePath);
|
|
141001
141665
|
const executable = await this.read(executablePath, INSTALLATION_LIMITS.executableBytes);
|
|
141002
141666
|
const observed = tree.files.find((file2) => file2.path === executablePath);
|
|
141003
141667
|
requireFact(
|
|
@@ -141034,7 +141698,7 @@ var init_filesystem = __esm({
|
|
|
141034
141698
|
async current() {
|
|
141035
141699
|
try {
|
|
141036
141700
|
const value = await this.read(
|
|
141037
|
-
|
|
141701
|
+
path53.join(this.configuration.cacheRoot, "current.json"),
|
|
141038
141702
|
INSTALLATION_LIMITS.pointerBytes,
|
|
141039
141703
|
INSTALLATION_LIMITS.pointerBytes
|
|
141040
141704
|
);
|
|
@@ -141080,13 +141744,13 @@ var init_filesystem = __esm({
|
|
|
141080
141744
|
installation: null
|
|
141081
141745
|
};
|
|
141082
141746
|
requireFact(current3.state === "present", "INSTALLATION_INVALID");
|
|
141083
|
-
const root =
|
|
141747
|
+
const root = path53.join(
|
|
141084
141748
|
this.configuration.cacheRoot,
|
|
141085
141749
|
"candidates",
|
|
141086
141750
|
current3.pointer.installationId
|
|
141087
141751
|
);
|
|
141088
141752
|
const manifestRead = await this.read(
|
|
141089
|
-
|
|
141753
|
+
path53.join(root, "manifest.json"),
|
|
141090
141754
|
INSTALLATION_LIMITS.manifestBytes,
|
|
141091
141755
|
INSTALLATION_LIMITS.manifestBytes
|
|
141092
141756
|
);
|
|
@@ -141096,7 +141760,7 @@ var init_filesystem = __esm({
|
|
|
141096
141760
|
);
|
|
141097
141761
|
const manifest = parseRecord(manifestRead.bytes, ManifestSchema, INSTALLATION_LIMITS.manifestBytes);
|
|
141098
141762
|
const verificationRead = await this.read(
|
|
141099
|
-
|
|
141763
|
+
path53.join(root, "verification.json"),
|
|
141100
141764
|
INSTALLATION_LIMITS.journalBytes,
|
|
141101
141765
|
INSTALLATION_LIMITS.journalBytes
|
|
141102
141766
|
);
|
|
@@ -141184,7 +141848,7 @@ var init_filesystem = __esm({
|
|
|
141184
141848
|
for (const directory of [...tree.directories].reverse())
|
|
141185
141849
|
await this.syncDirectory(directory.path);
|
|
141186
141850
|
await this.syncDirectory(handle.candidateRoot);
|
|
141187
|
-
await this.syncDirectory(
|
|
141851
|
+
await this.syncDirectory(path53.dirname(handle.candidateRoot));
|
|
141188
141852
|
await this.syncDirectory(this.configuration.cacheRoot);
|
|
141189
141853
|
await this.revalidateCandidate(handle, expected);
|
|
141190
141854
|
candidate.durable = await this.observeCandidate(handle);
|
|
@@ -141246,7 +141910,7 @@ var init_filesystem = __esm({
|
|
|
141246
141910
|
throw error63;
|
|
141247
141911
|
}
|
|
141248
141912
|
const manifestBytes = recordBytes(parsedManifest, INSTALLATION_LIMITS.manifestBytes), verificationBytes = recordBytes(parsedVerification, INSTALLATION_LIMITS.journalBytes);
|
|
141249
|
-
const manifestDigest =
|
|
141913
|
+
const manifestDigest = sha2564(manifestBytes), verificationDigest = sha2564(verificationBytes);
|
|
141250
141914
|
let pointerReplaced = false, replacementAttempted = false, after = { state: "unknown" };
|
|
141251
141915
|
try {
|
|
141252
141916
|
await this.checkReservation(reservation);
|
|
@@ -141254,18 +141918,18 @@ var init_filesystem = __esm({
|
|
|
141254
141918
|
await this.revalidateCandidate(candidateHandle, candidate.durable);
|
|
141255
141919
|
requireFact(compareCurrent(before, await this.current()), "ROOT_CHANGED");
|
|
141256
141920
|
await this.atomicRecord(
|
|
141257
|
-
|
|
141921
|
+
path53.join(candidateHandle.candidateRoot, "verification.json"),
|
|
141258
141922
|
parsedVerification,
|
|
141259
141923
|
INSTALLATION_LIMITS.journalBytes,
|
|
141260
141924
|
false
|
|
141261
141925
|
);
|
|
141262
141926
|
await this.atomicRecord(
|
|
141263
|
-
|
|
141927
|
+
path53.join(candidateHandle.candidateRoot, "manifest.json"),
|
|
141264
141928
|
parsedManifest,
|
|
141265
141929
|
INSTALLATION_LIMITS.manifestBytes,
|
|
141266
141930
|
false
|
|
141267
141931
|
);
|
|
141268
|
-
await this.syncDirectory(
|
|
141932
|
+
await this.syncDirectory(path53.dirname(candidateHandle.candidateRoot));
|
|
141269
141933
|
await this.revalidateCandidate(candidateHandle, candidate.durable);
|
|
141270
141934
|
requireFact(compareCurrent(before, await this.current()), "ROOT_CHANGED");
|
|
141271
141935
|
this.checkEnd(reservation);
|
|
@@ -141273,7 +141937,7 @@ var init_filesystem = __esm({
|
|
|
141273
141937
|
{ schemaVersion: 1, installationId: parsedManifest.installationId, manifestDigest },
|
|
141274
141938
|
INSTALLATION_LIMITS.pointerBytes
|
|
141275
141939
|
);
|
|
141276
|
-
const temporary =
|
|
141940
|
+
const temporary = path53.join(
|
|
141277
141941
|
this.configuration.cacheRoot,
|
|
141278
141942
|
".current-" + randomUUID5() + ".json"
|
|
141279
141943
|
);
|
|
@@ -141283,12 +141947,12 @@ var init_filesystem = __esm({
|
|
|
141283
141947
|
INSTALLATION_LIMITS.pointerBytes,
|
|
141284
141948
|
false
|
|
141285
141949
|
);
|
|
141286
|
-
requireFact(file2.sha256 ===
|
|
141950
|
+
requireFact(file2.sha256 === sha2564(pointer), "RECORD_FAILED");
|
|
141287
141951
|
await this.checkReservation(reservation);
|
|
141288
141952
|
requireFact(compareCurrent(before, await this.current()), "ROOT_CHANGED");
|
|
141289
141953
|
this.checkEnd(reservation);
|
|
141290
141954
|
replacementAttempted = true;
|
|
141291
|
-
await fs24.rename(temporary,
|
|
141955
|
+
await fs24.rename(temporary, path53.join(this.configuration.cacheRoot, "current.json"));
|
|
141292
141956
|
pointerReplaced = true;
|
|
141293
141957
|
await this.syncDirectory(this.configuration.cacheRoot);
|
|
141294
141958
|
after = await this.current();
|
|
@@ -141355,7 +142019,7 @@ var init_filesystem = __esm({
|
|
|
141355
142019
|
throw error63;
|
|
141356
142020
|
}
|
|
141357
142021
|
const oldVerification = await this.read(
|
|
141358
|
-
|
|
142022
|
+
path53.join(
|
|
141359
142023
|
this.configuration.cacheRoot,
|
|
141360
142024
|
"candidates",
|
|
141361
142025
|
handle.binding.installationId,
|
|
@@ -141368,18 +142032,18 @@ var init_filesystem = __esm({
|
|
|
141368
142032
|
"BINDING_MISMATCH"
|
|
141369
142033
|
);
|
|
141370
142034
|
const file2 = await this.atomicRecord(
|
|
141371
|
-
|
|
142035
|
+
path53.join(attempt.handle.attemptRoot, "reuse.json"),
|
|
141372
142036
|
parsed,
|
|
141373
142037
|
INSTALLATION_LIMITS.journalBytes,
|
|
141374
142038
|
false
|
|
141375
142039
|
);
|
|
141376
|
-
await this.syncDirectory(
|
|
142040
|
+
await this.syncDirectory(path53.dirname(attempt.handle.attemptRoot));
|
|
141377
142041
|
requireFact(compareCurrent(current3, await this.current()), "ROOT_CHANGED");
|
|
141378
142042
|
return file2;
|
|
141379
142043
|
});
|
|
141380
142044
|
}
|
|
141381
142045
|
async writer(name2, reservation, diagnosticBudget) {
|
|
141382
|
-
const parents = await this.ancestors(
|
|
142046
|
+
const parents = await this.ancestors(path53.dirname(name2));
|
|
141383
142047
|
const duty = await this.acquire(
|
|
141384
142048
|
name2,
|
|
141385
142049
|
constants5.O_WRONLY | constants5.O_CREAT | constants5.O_EXCL | constants5.O_NOFOLLOW
|
|
@@ -141409,7 +142073,7 @@ var init_filesystem = __esm({
|
|
|
141409
142073
|
"OWNERSHIP_UNCERTAIN"
|
|
141410
142074
|
);
|
|
141411
142075
|
expected = identity(stat5);
|
|
141412
|
-
hash3 =
|
|
142076
|
+
hash3 = createHash9("sha256");
|
|
141413
142077
|
await observe(0);
|
|
141414
142078
|
await original.sync();
|
|
141415
142079
|
await observe(0);
|
|
@@ -141499,7 +142163,7 @@ var init_filesystem = __esm({
|
|
|
141499
142163
|
first ??= error63;
|
|
141500
142164
|
}
|
|
141501
142165
|
try {
|
|
141502
|
-
await this.syncDirectory(
|
|
142166
|
+
await this.syncDirectory(path53.dirname(name2));
|
|
141503
142167
|
} catch (error63) {
|
|
141504
142168
|
first ??= error63;
|
|
141505
142169
|
this.fault(error63);
|
|
@@ -141547,7 +142211,7 @@ var init_filesystem = __esm({
|
|
|
141547
142211
|
}
|
|
141548
142212
|
sink(attempt, reservation, probe2) {
|
|
141549
142213
|
const jobs = reservation?.jobs ?? /* @__PURE__ */ new Map(), budget = reservation?.diagnosticBudget ?? { bytes: 0, reserved: 0 };
|
|
141550
|
-
const diagnostics =
|
|
142214
|
+
const diagnostics = path53.join(attempt.attemptRoot, "diagnostics");
|
|
141551
142215
|
const reobserve = async () => {
|
|
141552
142216
|
if (reservation) await this.checkReservation(reservation);
|
|
141553
142217
|
requireFact(
|
|
@@ -141573,7 +142237,7 @@ var init_filesystem = __esm({
|
|
|
141573
142237
|
);
|
|
141574
142238
|
requireFact(!jobs.has(parsed.jobId), "BINDING_MISMATCH");
|
|
141575
142239
|
await reobserve();
|
|
141576
|
-
const prefix =
|
|
142240
|
+
const prefix = path53.join(diagnostics, (probe2 ? "probe_" : "") + parsed.jobId);
|
|
141577
142241
|
const job = {
|
|
141578
142242
|
intent: parsed,
|
|
141579
142243
|
prefix,
|
|
@@ -141659,18 +142323,18 @@ var init_filesystem = __esm({
|
|
|
141659
142323
|
requireFact(!this.freshAdmissionStarted, "BINDING_MISMATCH");
|
|
141660
142324
|
this.freshAdmissionStarted = true;
|
|
141661
142325
|
requireFact(
|
|
141662
|
-
parsed.cacheRoot === c3.cacheRoot && parsed.libraryRoot === c3.libraryRoot && parsed.nodeExecutable === c3.nodeExecutable && parsed.nodeExecutableSHA256 === c3.nodeExecutableSHA256 && parsed.verifierEntry === c3.verifierEntry && parsed.controllerEntry === c3.controllerEntry && parsed.sourceManifestPath === c3.sourceManifestPath && canonicalDigest(parsed.sourceVintage) === canonicalDigest(c3.sourceVintage) &&
|
|
142326
|
+
parsed.cacheRoot === c3.cacheRoot && parsed.libraryRoot === c3.libraryRoot && parsed.nodeExecutable === c3.nodeExecutable && parsed.nodeExecutableSHA256 === c3.nodeExecutableSHA256 && parsed.verifierEntry === c3.verifierEntry && parsed.controllerEntry === c3.controllerEntry && parsed.sourceManifestPath === c3.sourceManifestPath && canonicalDigest(parsed.sourceVintage) === canonicalDigest(c3.sourceVintage) && path53.resolve(process.execPath) === c3.nodeExecutable && process.argv[1] && path53.resolve(process.argv[1]) === c3.verifierEntry,
|
|
141663
142327
|
"SOURCE_MISMATCH"
|
|
141664
142328
|
);
|
|
141665
142329
|
requireFact(
|
|
141666
|
-
parsed.attemptRoot ===
|
|
142330
|
+
parsed.attemptRoot === path53.join(c3.cacheRoot, "attempts", parsed.binding.attemptId) && parsed.candidateRoot === path53.join(c3.cacheRoot, "candidates", parsed.binding.installationId) && parsed.executablePath === INSTALLATION_TARGET.executablePath,
|
|
141667
142331
|
"BINDING_MISMATCH"
|
|
141668
142332
|
);
|
|
141669
142333
|
const attempt = identity(await fs24.lstat(parsed.attemptRoot, { bigint: true }));
|
|
141670
142334
|
requireFact(sameFileIdentity(attempt, parsed.attemptIdentity), "ROOT_CHANGED");
|
|
141671
142335
|
await this.ancestors(parsed.attemptRoot);
|
|
141672
142336
|
const ownerRead = await this.read(
|
|
141673
|
-
|
|
142337
|
+
path53.join(c3.cacheRoot, "reservation", "owner.json"),
|
|
141674
142338
|
INSTALLATION_LIMITS.journalBytes,
|
|
141675
142339
|
INSTALLATION_LIMITS.journalBytes
|
|
141676
142340
|
);
|
|
@@ -141686,7 +142350,7 @@ var init_filesystem = __esm({
|
|
|
141686
142350
|
birth && birth.executable === c3.nodeExecutable && birth.argv.includes(c3.verifierEntry),
|
|
141687
142351
|
"BINDING_MISMATCH"
|
|
141688
142352
|
);
|
|
141689
|
-
const prefix =
|
|
142353
|
+
const prefix = path53.join(parsed.attemptRoot, "diagnostics", birth.jobId);
|
|
141690
142354
|
const intentRead = await this.read(
|
|
141691
142355
|
prefix + ".intent.json",
|
|
141692
142356
|
INSTALLATION_LIMITS.journalBytes,
|
|
@@ -141731,8 +142395,8 @@ var init_filesystem = __esm({
|
|
|
141731
142395
|
kind: "installation-attempt",
|
|
141732
142396
|
binding: admitted.request.binding,
|
|
141733
142397
|
attemptRoot: admitted.request.attemptRoot,
|
|
141734
|
-
homeRoot:
|
|
141735
|
-
temporaryRoot:
|
|
142398
|
+
homeRoot: path53.join(admitted.request.attemptRoot, "home"),
|
|
142399
|
+
temporaryRoot: path53.join(admitted.request.attemptRoot, "tmp"),
|
|
141736
142400
|
identity: admitted.attempt
|
|
141737
142401
|
});
|
|
141738
142402
|
admitted.sink ??= this.sink(attempt, null, admitted);
|
|
@@ -141749,7 +142413,7 @@ var init_filesystem = __esm({
|
|
|
141749
142413
|
"CUSTODY_UNCERTAIN"
|
|
141750
142414
|
);
|
|
141751
142415
|
const owner = await this.read(
|
|
141752
|
-
|
|
142416
|
+
path53.join(reservation.directory.path, "owner.json"),
|
|
141753
142417
|
INSTALLATION_LIMITS.journalBytes
|
|
141754
142418
|
);
|
|
141755
142419
|
requireFact(
|
|
@@ -141794,7 +142458,7 @@ var init_filesystem = __esm({
|
|
|
141794
142458
|
|
|
141795
142459
|
// ../browser/src/runtime/installation/jobs.ts
|
|
141796
142460
|
import { spawn } from "node:child_process";
|
|
141797
|
-
import { randomBytes as randomBytes5, createHash as
|
|
142461
|
+
import { randomBytes as randomBytes5, createHash as createHash10 } from "node:crypto";
|
|
141798
142462
|
import { constants as constants6 } from "node:fs";
|
|
141799
142463
|
import { lstat as lstat5, open as open4, realpath as realpath4 } from "node:fs/promises";
|
|
141800
142464
|
import { join as join55, resolve as resolve12, relative as relative11, isAbsolute as isAbsolute10, dirname as dirname14 } from "node:path";
|
|
@@ -141813,8 +142477,8 @@ function identity2(s2) {
|
|
|
141813
142477
|
type: s2.isFile() ? "file" : "directory"
|
|
141814
142478
|
});
|
|
141815
142479
|
}
|
|
141816
|
-
function within(root,
|
|
141817
|
-
const name2 = relative11(root,
|
|
142480
|
+
function within(root, path71) {
|
|
142481
|
+
const name2 = relative11(root, path71);
|
|
141818
142482
|
return name2 !== "" && !name2.startsWith("../") && name2 !== ".." && !isAbsolute10(name2);
|
|
141819
142483
|
}
|
|
141820
142484
|
function streamFacts(s2) {
|
|
@@ -141960,30 +142624,30 @@ function createInstallationJobs(configuration, options = { ownerKind: "controlle
|
|
|
141960
142624
|
originals.push(slot);
|
|
141961
142625
|
return slot;
|
|
141962
142626
|
}
|
|
141963
|
-
async function assertDirectory(
|
|
141964
|
-
requireFact2(isAbsolute10(
|
|
141965
|
-
const s2 = await lstat5(
|
|
142627
|
+
async function assertDirectory(path71, expected) {
|
|
142628
|
+
requireFact2(isAbsolute10(path71) && resolve12(path71) === path71, "ROOT_CHANGED");
|
|
142629
|
+
const s2 = await lstat5(path71, { bigint: true });
|
|
141966
142630
|
requireFact2(
|
|
141967
|
-
s2.isDirectory() && !s2.isSymbolicLink() && await realpath4(
|
|
142631
|
+
s2.isDirectory() && !s2.isSymbolicLink() && await realpath4(path71) === path71,
|
|
141968
142632
|
"ROOT_CHANGED"
|
|
141969
142633
|
);
|
|
141970
142634
|
requireFact2(!expected || sameFileIdentity(identity2(s2), expected), "ROOT_CHANGED");
|
|
141971
142635
|
}
|
|
141972
|
-
async function readPinned(slot,
|
|
141973
|
-
const before = await lstat5(
|
|
142636
|
+
async function readPinned(slot, path71, digest2, cap, expected, keep = false) {
|
|
142637
|
+
const before = await lstat5(path71, { bigint: true });
|
|
141974
142638
|
requireFact2(
|
|
141975
142639
|
before.isFile() && !before.isSymbolicLink() && before.size <= BigInt(cap),
|
|
141976
142640
|
"SOURCE_MISMATCH"
|
|
141977
142641
|
);
|
|
141978
|
-
requireFact2(await realpath4(
|
|
142642
|
+
requireFact2(await realpath4(path71) === path71, "ROOT_CHANGED");
|
|
141979
142643
|
const beforeIdentity = identity2(before);
|
|
141980
142644
|
requireFact2(!expected || sameFileIdentity(beforeIdentity, expected), "HASH_MISMATCH");
|
|
141981
142645
|
const original = await open4(
|
|
141982
|
-
|
|
142646
|
+
path71,
|
|
141983
142647
|
constants6.O_RDONLY | constants6.O_NOFOLLOW | constants6.O_NONBLOCK
|
|
141984
142648
|
);
|
|
141985
142649
|
heldReads.add(original);
|
|
141986
|
-
const hash3 =
|
|
142650
|
+
const hash3 = createHash10("sha256");
|
|
141987
142651
|
const chunks = [];
|
|
141988
142652
|
let bytes = 0;
|
|
141989
142653
|
let failed = false;
|
|
@@ -142008,7 +142672,7 @@ function createInstallationJobs(configuration, options = { ownerKind: "controlle
|
|
|
142008
142672
|
if (keep) chunks.push(buffer.slice(0, result3.bytesRead));
|
|
142009
142673
|
}
|
|
142010
142674
|
requireFact2(
|
|
142011
|
-
sameFileIdentity(beforeIdentity, identity2(await original.stat({ bigint: true }))) && sameFileIdentity(beforeIdentity, identity2(await lstat5(
|
|
142675
|
+
sameFileIdentity(beforeIdentity, identity2(await original.stat({ bigint: true }))) && sameFileIdentity(beforeIdentity, identity2(await lstat5(path71, { bigint: true }))),
|
|
142012
142676
|
"ROOT_CHANGED"
|
|
142013
142677
|
);
|
|
142014
142678
|
requireFact2(hash3.digest("hex") === digest2 && bytes === Number(before.size), "HASH_MISMATCH");
|
|
@@ -142788,7 +143452,7 @@ function createInstallationTransaction(configuration, dependencies, generation3)
|
|
|
142788
143452
|
verifier: {
|
|
142789
143453
|
jobId: verifierFacts.jobId,
|
|
142790
143454
|
receiptDigest: canonicalDigest(verifierFacts),
|
|
142791
|
-
replyDigest:
|
|
143455
|
+
replyDigest: sha2564(verifier.stdout)
|
|
142792
143456
|
},
|
|
142793
143457
|
reply,
|
|
142794
143458
|
candidateInventoryDigest: snapshot.inventoryDigest,
|
|
@@ -142811,7 +143475,7 @@ function createInstallationTransaction(configuration, dependencies, generation3)
|
|
|
142811
143475
|
recordBytes(journal, INSTALLATION_LIMITS.journalBytes);
|
|
142812
143476
|
check4(bounds, options.signal);
|
|
142813
143477
|
const written2 = await fs41.writeReuseJournal(reservation, attempt, journal);
|
|
142814
|
-
require2(written2.path === join56(attempt.attemptRoot, "reuse.json") && written2.sha256 ===
|
|
143478
|
+
require2(written2.path === join56(attempt.attemptRoot, "reuse.json") && written2.sha256 === sha2564(recordBytes(journal, INSTALLATION_LIMITS.journalBytes)), "OWNERSHIP_UNCERTAIN");
|
|
142815
143479
|
const unchanged = await fs41.inspectExisting({ signal: options.signal });
|
|
142816
143480
|
require2(canonicalDigest(unchanged.current) === canonicalDigest(reserved.current) && canonicalDigest(unchanged.installation) === canonicalDigest(reserved.installation), "ROOT_CHANGED");
|
|
142817
143481
|
journalDigest = written2.sha256;
|
|
@@ -142853,8 +143517,8 @@ function createInstallationTransaction(configuration, dependencies, generation3)
|
|
|
142853
143517
|
publicationMayHaveChanged ||= published.pointerReplaced;
|
|
142854
143518
|
require2(published.state === "durable" && published.pointerReplaced && published.firstCause === null, published.firstCause ?? "PUBLICATION_UNCERTAIN");
|
|
142855
143519
|
require2(published.currentAfter.state === "present" && published.currentAfter.pointer.installationId === binding.installationId && published.currentAfter.pointer.manifestDigest === published.manifestDigest, "PUBLICATION_UNCERTAIN");
|
|
142856
|
-
require2(published.manifestDigest ===
|
|
142857
|
-
require2(published.verificationDigest ===
|
|
143520
|
+
require2(published.manifestDigest === sha2564(recordBytes(manifest, INSTALLATION_LIMITS.manifestBytes)) && canonicalDigest(published.currentBefore) === canonicalDigest(reserved.current), "PUBLICATION_UNCERTAIN");
|
|
143521
|
+
require2(published.verificationDigest === sha2564(
|
|
142858
143522
|
recordBytes(verification2, INSTALLATION_LIMITS.journalBytes)
|
|
142859
143523
|
), "PUBLICATION_UNCERTAIN");
|
|
142860
143524
|
currentManifestDigest = published.manifestDigest;
|
|
@@ -142915,7 +143579,7 @@ var init_transaction2 = __esm({
|
|
|
142915
143579
|
});
|
|
142916
143580
|
|
|
142917
143581
|
// ../browser/src/runtime/installation/packaged.ts
|
|
142918
|
-
import { createHash as
|
|
143582
|
+
import { createHash as createHash11 } from "node:crypto";
|
|
142919
143583
|
import { constants as constants7 } from "node:fs";
|
|
142920
143584
|
import { lstat as lstat6, open as open5, realpath as realpath5 } from "node:fs/promises";
|
|
142921
143585
|
import { createRequire as createRequire3 } from "node:module";
|
|
@@ -142939,7 +143603,7 @@ async function inspectFile(filename, cap, retainBytes = false) {
|
|
|
142939
143603
|
try {
|
|
142940
143604
|
if (!sameFile(before, await original.stat({ bigint: true })))
|
|
142941
143605
|
throw new Error("Browser package file changed.");
|
|
142942
|
-
const hash3 =
|
|
143606
|
+
const hash3 = createHash11("sha256"), chunks = [], buffer = Buffer.alloc(65536);
|
|
142943
143607
|
let total = 0;
|
|
142944
143608
|
while (true) {
|
|
142945
143609
|
const { bytesRead } = await original.read(
|
|
@@ -143566,7 +144230,7 @@ var init_operator_output = __esm({
|
|
|
143566
144230
|
});
|
|
143567
144231
|
|
|
143568
144232
|
// src/lib/agent-browser/chrome-locator.ts
|
|
143569
|
-
import
|
|
144233
|
+
import path54 from "node:path";
|
|
143570
144234
|
function chromeCandidates(env6) {
|
|
143571
144235
|
if (env6.platform === "darwin") {
|
|
143572
144236
|
const apps = [
|
|
@@ -143574,8 +144238,8 @@ function chromeCandidates(env6) {
|
|
|
143574
144238
|
["Chromium.app", "Chromium"]
|
|
143575
144239
|
];
|
|
143576
144240
|
return apps.flatMap(([app, binary3]) => [
|
|
143577
|
-
|
|
143578
|
-
|
|
144241
|
+
path54.posix.join("/Applications", app, "Contents", "MacOS", binary3),
|
|
144242
|
+
path54.posix.join(env6.homeDir, "Applications", app, "Contents", "MacOS", binary3)
|
|
143579
144243
|
]);
|
|
143580
144244
|
}
|
|
143581
144245
|
if (env6.platform === "win32") {
|
|
@@ -143584,15 +144248,15 @@ function chromeCandidates(env6) {
|
|
|
143584
144248
|
);
|
|
143585
144249
|
return [
|
|
143586
144250
|
...roots.map(
|
|
143587
|
-
(root) =>
|
|
144251
|
+
(root) => path54.win32.join(root, "Google", "Chrome", "Application", "chrome.exe")
|
|
143588
144252
|
),
|
|
143589
|
-
...roots.map((root) =>
|
|
144253
|
+
...roots.map((root) => path54.win32.join(root, "Chromium", "Application", "chrome.exe"))
|
|
143590
144254
|
];
|
|
143591
144255
|
}
|
|
143592
144256
|
const names = ["google-chrome", "google-chrome-stable", "chromium", "chromium-browser"];
|
|
143593
|
-
const dirs = (env6.pathVar ?? "").split(
|
|
144257
|
+
const dirs = (env6.pathVar ?? "").split(path54.posix.delimiter).filter(Boolean);
|
|
143594
144258
|
return [
|
|
143595
|
-
...names.flatMap((name2) => dirs.map((dir) =>
|
|
144259
|
+
...names.flatMap((name2) => dirs.map((dir) => path54.posix.join(dir, name2))),
|
|
143596
144260
|
"/opt/google/chrome/chrome"
|
|
143597
144261
|
];
|
|
143598
144262
|
}
|
|
@@ -143758,7 +144422,7 @@ var init_process_liveness = __esm({
|
|
|
143758
144422
|
|
|
143759
144423
|
// src/lib/agent-browser/profile.ts
|
|
143760
144424
|
import fs25 from "node:fs";
|
|
143761
|
-
import
|
|
144425
|
+
import path55 from "node:path";
|
|
143762
144426
|
function themePreferences() {
|
|
143763
144427
|
const color = AGENT_BROWSER_THEME_COLOR;
|
|
143764
144428
|
return {
|
|
@@ -143818,18 +144482,18 @@ function hasOwnThemeColor(prefs) {
|
|
|
143818
144482
|
}
|
|
143819
144483
|
function ensureAgentProfile(profileDir, now3 = /* @__PURE__ */ new Date()) {
|
|
143820
144484
|
const created = !fs25.existsSync(profileDir);
|
|
143821
|
-
fs25.mkdirSync(
|
|
143822
|
-
fs25.chmodSync(
|
|
144485
|
+
fs25.mkdirSync(path55.dirname(profileDir), { recursive: true, mode: 448 });
|
|
144486
|
+
fs25.chmodSync(path55.dirname(profileDir), 448);
|
|
143823
144487
|
fs25.mkdirSync(profileDir, { recursive: true, mode: 448 });
|
|
143824
|
-
const marker =
|
|
144488
|
+
const marker = path55.join(profileDir, THEME_MARKER_FILE);
|
|
143825
144489
|
if (fs25.existsSync(marker)) return { created, themed: false };
|
|
143826
|
-
const prefsFile =
|
|
144490
|
+
const prefsFile = path55.join(profileDir, "Default", "Preferences");
|
|
143827
144491
|
const prefs = readJsonObject(prefsFile);
|
|
143828
144492
|
const themed = !hasOwnThemeColor(prefs);
|
|
143829
144493
|
if (themed) {
|
|
143830
|
-
fs25.mkdirSync(
|
|
144494
|
+
fs25.mkdirSync(path55.dirname(prefsFile), { recursive: true, mode: 448 });
|
|
143831
144495
|
fs25.writeFileSync(prefsFile, JSON.stringify(deepMerge2(prefs, themePreferences())));
|
|
143832
|
-
const localStateFile =
|
|
144496
|
+
const localStateFile = path55.join(profileDir, "Local State");
|
|
143833
144497
|
const localState = readJsonObject(localStateFile);
|
|
143834
144498
|
fs25.writeFileSync(
|
|
143835
144499
|
localStateFile,
|
|
@@ -143845,7 +144509,7 @@ function ensureAgentProfile(profileDir, now3 = /* @__PURE__ */ new Date()) {
|
|
|
143845
144509
|
}
|
|
143846
144510
|
function profileLock(profileDir, platform3 = process.platform) {
|
|
143847
144511
|
if (platform3 === "win32") {
|
|
143848
|
-
const lockfile =
|
|
144512
|
+
const lockfile = path55.join(profileDir, "lockfile");
|
|
143849
144513
|
if (!fs25.existsSync(lockfile)) return { inUse: false };
|
|
143850
144514
|
try {
|
|
143851
144515
|
fs25.rmSync(lockfile);
|
|
@@ -143856,7 +144520,7 @@ function profileLock(profileDir, platform3 = process.platform) {
|
|
|
143856
144520
|
}
|
|
143857
144521
|
let target;
|
|
143858
144522
|
try {
|
|
143859
|
-
target = fs25.readlinkSync(
|
|
144523
|
+
target = fs25.readlinkSync(path55.join(profileDir, "SingletonLock"));
|
|
143860
144524
|
} catch {
|
|
143861
144525
|
return { inUse: false };
|
|
143862
144526
|
}
|
|
@@ -143959,7 +144623,7 @@ var init_cloud_origin = __esm({
|
|
|
143959
144623
|
|
|
143960
144624
|
// src/lib/agent-browser/storage-state.ts
|
|
143961
144625
|
import fs26 from "node:fs";
|
|
143962
|
-
import
|
|
144626
|
+
import path56 from "node:path";
|
|
143963
144627
|
function toStorageStateCookie(cookie) {
|
|
143964
144628
|
const copy2 = {
|
|
143965
144629
|
name: cookie.name,
|
|
@@ -144030,7 +144694,7 @@ function cliCloudOrigins() {
|
|
|
144030
144694
|
}
|
|
144031
144695
|
async function writeStorageState(file2, state) {
|
|
144032
144696
|
const saved = withoutCloudOrigin(state, cliCloudOrigins()).state;
|
|
144033
|
-
fs26.mkdirSync(
|
|
144697
|
+
fs26.mkdirSync(path56.dirname(file2), { recursive: true, mode: 448 });
|
|
144034
144698
|
await writeFileAtomic2(file2, `${JSON.stringify(saved, null, 2)}
|
|
144035
144699
|
`, { mode: 384 });
|
|
144036
144700
|
return saved;
|
|
@@ -144149,12 +144813,12 @@ __export(browser_commands_exports, {
|
|
|
144149
144813
|
runBrowserStatus: () => runBrowserStatus
|
|
144150
144814
|
});
|
|
144151
144815
|
import fs27 from "node:fs";
|
|
144152
|
-
import
|
|
144816
|
+
import path57 from "node:path";
|
|
144153
144817
|
import { parseArgs as parseArgs8 } from "node:util";
|
|
144154
144818
|
function agentBrowserPaths(dorkHome) {
|
|
144155
144819
|
return {
|
|
144156
|
-
profileDir:
|
|
144157
|
-
stateFile:
|
|
144820
|
+
profileDir: path57.join(dorkHome, ...AGENT_BROWSER_PROFILE_SEGMENTS),
|
|
144821
|
+
stateFile: path57.join(dorkHome, ...AGENT_BROWSER_STATE_SEGMENTS)
|
|
144158
144822
|
};
|
|
144159
144823
|
}
|
|
144160
144824
|
function profileFlags(profileDir) {
|
|
@@ -144707,9 +145371,9 @@ var init_installation_label = __esm({
|
|
|
144707
145371
|
});
|
|
144708
145372
|
|
|
144709
145373
|
// src/lib/package-commands.ts
|
|
144710
|
-
import
|
|
145374
|
+
import path58 from "node:path";
|
|
144711
145375
|
function resolveProjectFlag(value) {
|
|
144712
|
-
return typeof value === "string" ?
|
|
145376
|
+
return typeof value === "string" ? path58.resolve(process.cwd(), value) : void 0;
|
|
144713
145377
|
}
|
|
144714
145378
|
function shellWord(value) {
|
|
144715
145379
|
return /^[A-Za-z0-9_./,:@%+=-]+$/.test(value) ? value : `'${value.replace(/'/g, `'\\''`)}'`;
|
|
@@ -145498,8 +146162,8 @@ async function runUninstall(args) {
|
|
|
145498
146162
|
console.log(
|
|
145499
146163
|
result2.unproven && result2.unproven.length > 0 ? "Kept these files:" : "Kept the files you and your agents added or changed:"
|
|
145500
146164
|
);
|
|
145501
|
-
for (const
|
|
145502
|
-
console.log(` ${
|
|
146165
|
+
for (const path71 of result2.preservedData) {
|
|
146166
|
+
console.log(` ${path71}`);
|
|
145503
146167
|
}
|
|
145504
146168
|
}
|
|
145505
146169
|
if (result2.agentRemoved) {
|
|
@@ -145731,8 +146395,8 @@ function filesOf(pkg) {
|
|
|
145731
146395
|
}
|
|
145732
146396
|
function devLinkNoteOf(pkg) {
|
|
145733
146397
|
if (!pkg.devLink) return void 0;
|
|
145734
|
-
const { path:
|
|
145735
|
-
return state === "active" ? `dev link \u2192 ${
|
|
146398
|
+
const { path: path71, state } = pkg.devLink;
|
|
146399
|
+
return state === "active" ? `dev link \u2192 ${path71}` : `dev link \u2192 ${path71} (${DEV_LINK_TROUBLE[state]})`;
|
|
145736
146400
|
}
|
|
145737
146401
|
function notesOf(pkg) {
|
|
145738
146402
|
return [
|
|
@@ -146080,7 +146744,7 @@ __export(marketplace_link_exports, {
|
|
|
146080
146744
|
runMarketplaceLink: () => runMarketplaceLink
|
|
146081
146745
|
});
|
|
146082
146746
|
import fs29 from "node:fs";
|
|
146083
|
-
import
|
|
146747
|
+
import path59 from "node:path";
|
|
146084
146748
|
import { parseArgs as parseArgs17 } from "node:util";
|
|
146085
146749
|
function parseMarketplaceLinkArgs(rawArgs) {
|
|
146086
146750
|
let parsed;
|
|
@@ -146107,7 +146771,7 @@ ${USAGE_LINE16}`);
|
|
|
146107
146771
|
if (positionals2.length > 1) throw new Error(`Link one folder at a time.
|
|
146108
146772
|
${USAGE_LINE16}`);
|
|
146109
146773
|
return {
|
|
146110
|
-
folder:
|
|
146774
|
+
folder: path59.resolve(process.cwd(), folder),
|
|
146111
146775
|
projectPath: resolveProjectFlag(values2.project),
|
|
146112
146776
|
replaceInstalled: Boolean(values2["replace-installed"]),
|
|
146113
146777
|
yes: Boolean(values2.yes),
|
|
@@ -146121,7 +146785,7 @@ function runningAsAgent() {
|
|
|
146121
146785
|
function describeUnreadableFolder(typed, err) {
|
|
146122
146786
|
const code = err?.code;
|
|
146123
146787
|
const reason = code === "ENOENT" ? `No folder at ${typed}.` : code === "EACCES" || code === "EPERM" ? `Can't read ${typed}: permission denied (${code}).` : `Can't read ${typed}${code ? ` (${code})` : ""}.`;
|
|
146124
|
-
const tilde = typed.split(
|
|
146788
|
+
const tilde = typed.split(path59.sep).includes("~") ? " The shell does not expand ~ inside quotes; use the full path." : "";
|
|
146125
146789
|
return `Error: ${reason}${tilde}`;
|
|
146126
146790
|
}
|
|
146127
146791
|
function describeLinkPreview(preview) {
|
|
@@ -147475,10 +148139,10 @@ function createGitHubCommunityReleaseSource(options) {
|
|
|
147475
148139
|
},
|
|
147476
148140
|
verifyManifest: async (bytes, trusted) => {
|
|
147477
148141
|
const directory = await mkdtemp2(join58(tmpdir3(), "dorkos-community-manifest-"));
|
|
147478
|
-
const
|
|
148142
|
+
const path71 = join58(directory, "manifest.json");
|
|
147479
148143
|
try {
|
|
147480
|
-
await writeFile5(
|
|
147481
|
-
return await verify(
|
|
148144
|
+
await writeFile5(path71, bytes, { mode: 384, flag: "wx" });
|
|
148145
|
+
return await verify(path71, trusted);
|
|
147482
148146
|
} finally {
|
|
147483
148147
|
await rm3(directory, { recursive: true, force: true });
|
|
147484
148148
|
}
|
|
@@ -147494,7 +148158,7 @@ var init_github_release_source = __esm({
|
|
|
147494
148158
|
});
|
|
147495
148159
|
|
|
147496
148160
|
// src/commands/community-deploy/plan.ts
|
|
147497
|
-
import { createHash as
|
|
148161
|
+
import { createHash as createHash12 } from "node:crypto";
|
|
147498
148162
|
function createLaunchPlan(input4) {
|
|
147499
148163
|
const parsed = LaunchPlanInputSchema.parse(input4);
|
|
147500
148164
|
Object.freeze(parsed.fly);
|
|
@@ -147524,7 +148188,7 @@ function hashLaunchPlan(plan) {
|
|
|
147524
148188
|
private: plan.tigris.private
|
|
147525
148189
|
}
|
|
147526
148190
|
});
|
|
147527
|
-
return
|
|
148191
|
+
return createHash12("sha256").update(canonical2, "utf8").digest("hex");
|
|
147528
148192
|
}
|
|
147529
148193
|
var SafeIdentifierSchema, DisplayNameSchema, RegionSchema, Sha256DigestSchema, LaunchPlanInputSchema;
|
|
147530
148194
|
var init_plan2 = __esm({
|
|
@@ -150283,10 +150947,10 @@ kill_timeout = "30s"
|
|
|
150283
150947
|
}
|
|
150284
150948
|
async function withCommunityFlyConfig(plan, consumer) {
|
|
150285
150949
|
const directory = await mkdtemp3(join59(tmpdir4(), "dorkos-community-fly-"));
|
|
150286
|
-
const
|
|
150950
|
+
const path71 = join59(directory, "fly.toml");
|
|
150287
150951
|
try {
|
|
150288
|
-
await writeFile6(
|
|
150289
|
-
return await consumer(
|
|
150952
|
+
await writeFile6(path71, renderCommunityFlyConfig(plan), { mode: 384, flag: "wx" });
|
|
150953
|
+
return await consumer(path71);
|
|
150290
150954
|
} finally {
|
|
150291
150955
|
await rm4(directory, { recursive: true, force: true });
|
|
150292
150956
|
}
|
|
@@ -150366,14 +151030,14 @@ var init_health = __esm({
|
|
|
150366
151030
|
});
|
|
150367
151031
|
|
|
150368
151032
|
// src/commands/community-deploy/runtime/image-platform.ts
|
|
150369
|
-
import { createHash as
|
|
151033
|
+
import { createHash as createHash13 } from "node:crypto";
|
|
150370
151034
|
function invalid2() {
|
|
150371
151035
|
return new ProviderMutationError("INVALID_RESPONSE");
|
|
150372
151036
|
}
|
|
150373
151037
|
function selectPlatformDigest(bytes, headerMediaType, attestedDigest, platform3 = FLY_MACHINE_PLATFORM) {
|
|
150374
151038
|
if (!Sha256DigestSchema2.safeParse(attestedDigest).success) throw invalid2();
|
|
150375
151039
|
if (bytes.byteLength > MAX_INDEX_BYTES) throw invalid2();
|
|
150376
|
-
if (`sha256:${
|
|
151040
|
+
if (`sha256:${createHash13("sha256").update(bytes).digest("hex")}` !== attestedDigest) {
|
|
150377
151041
|
throw invalid2();
|
|
150378
151042
|
}
|
|
150379
151043
|
let document;
|
|
@@ -150424,7 +151088,7 @@ async function resolvePlatformImageDigest(input4) {
|
|
|
150424
151088
|
if (!match || !REGISTRY_ALLOW_LIST.has(match[1]) || !Sha256DigestSchema2.safeParse(input4.digest).success) {
|
|
150425
151089
|
throw invalid2();
|
|
150426
151090
|
}
|
|
150427
|
-
const [, host,
|
|
151091
|
+
const [, host, path71] = match;
|
|
150428
151092
|
const request = input4.fetch ?? fetch;
|
|
150429
151093
|
const signal = AbortSignal.any([
|
|
150430
151094
|
AbortSignal.timeout(input4.timeoutMs),
|
|
@@ -150434,14 +151098,14 @@ async function resolvePlatformImageDigest(input4) {
|
|
|
150434
151098
|
let mediaType;
|
|
150435
151099
|
try {
|
|
150436
151100
|
const tokenResponse = await request(
|
|
150437
|
-
`https://${host}/token?scope=${encodeURIComponent(`repository:${
|
|
151101
|
+
`https://${host}/token?scope=${encodeURIComponent(`repository:${path71}:pull`)}&service=${host}`,
|
|
150438
151102
|
{ signal, redirect: "error" }
|
|
150439
151103
|
);
|
|
150440
151104
|
if (!tokenResponse.ok) throw invalid2();
|
|
150441
151105
|
const token = external_exports.object({ token: external_exports.string().min(1).max(8192) }).passthrough().parse(
|
|
150442
151106
|
JSON.parse(Buffer.from(await readBounded2(tokenResponse, MAX_TOKEN_BYTES)).toString("utf8"))
|
|
150443
151107
|
).token;
|
|
150444
|
-
const response = await request(`https://${host}/v2/${
|
|
151108
|
+
const response = await request(`https://${host}/v2/${path71}/manifests/${input4.digest}`, {
|
|
150445
151109
|
signal,
|
|
150446
151110
|
redirect: "error",
|
|
150447
151111
|
headers: {
|
|
@@ -150756,8 +151420,8 @@ function handoffCommands(system) {
|
|
|
150756
151420
|
browser: { executable: "xdg-open", args: (origin) => [origin] }
|
|
150757
151421
|
};
|
|
150758
151422
|
}
|
|
150759
|
-
async function executableOnPath(executable,
|
|
150760
|
-
for (const directory of
|
|
151423
|
+
async function executableOnPath(executable, path71) {
|
|
151424
|
+
for (const directory of path71.split(delimiter).filter(Boolean)) {
|
|
150761
151425
|
try {
|
|
150762
151426
|
await access2(join60(directory, executable), constants9.X_OK);
|
|
150763
151427
|
return true;
|
|
@@ -150771,11 +151435,11 @@ async function assertOwnerHandoffPrerequisites(env6, system = platform2()) {
|
|
|
150771
151435
|
throw new Error(`Owner handoff is unsupported on this platform. See ${FLY_GUIDE_URL}`);
|
|
150772
151436
|
}
|
|
150773
151437
|
const commands = handoffCommands(system);
|
|
150774
|
-
const
|
|
151438
|
+
const path71 = env6.PATH ?? "";
|
|
150775
151439
|
const missing = (await Promise.all(
|
|
150776
151440
|
[commands.clipboard.executable].map(async (executable) => ({
|
|
150777
151441
|
executable,
|
|
150778
|
-
found: await executableOnPath(executable,
|
|
151442
|
+
found: await executableOnPath(executable, path71)
|
|
150779
151443
|
}))
|
|
150780
151444
|
)).filter(({ found }) => !found);
|
|
150781
151445
|
if (missing.length > 0) {
|
|
@@ -150981,9 +151645,9 @@ function launchJournalPath(dorkHome, runId) {
|
|
|
150981
151645
|
const safeRunId = external_exports.uuid().parse(runId);
|
|
150982
151646
|
return join61(dorkHome, "launches", "community", `${safeRunId}.json`);
|
|
150983
151647
|
}
|
|
150984
|
-
async function rejectSymlink(
|
|
151648
|
+
async function rejectSymlink(path71) {
|
|
150985
151649
|
try {
|
|
150986
|
-
if ((await lstat7(
|
|
151650
|
+
if ((await lstat7(path71)).isSymbolicLink()) throw new Error(`Refusing symbolic link: ${path71}`);
|
|
150987
151651
|
} catch (error63) {
|
|
150988
151652
|
if (error63.code !== "ENOENT") throw error63;
|
|
150989
151653
|
}
|
|
@@ -151005,9 +151669,9 @@ async function prepareDirectory(filePath) {
|
|
|
151005
151669
|
await rejectSymlink(directory);
|
|
151006
151670
|
}
|
|
151007
151671
|
}
|
|
151008
|
-
async function exists2(
|
|
151672
|
+
async function exists2(path71) {
|
|
151009
151673
|
try {
|
|
151010
|
-
await lstat7(
|
|
151674
|
+
await lstat7(path71);
|
|
151011
151675
|
return true;
|
|
151012
151676
|
} catch (error63) {
|
|
151013
151677
|
if (error63.code === "ENOENT") return false;
|
|
@@ -153941,7 +154605,7 @@ There is no --yes mode. Before the first write, type the generated app name in a
|
|
|
153941
154605
|
import { execFileSync as execFileSync3 } from "node:child_process";
|
|
153942
154606
|
import net from "node:net";
|
|
153943
154607
|
import fs30 from "node:fs";
|
|
153944
|
-
import
|
|
154608
|
+
import path60 from "node:path";
|
|
153945
154609
|
function checkNode() {
|
|
153946
154610
|
const issue2 = checkNodeVersion();
|
|
153947
154611
|
if (issue2) {
|
|
@@ -153950,7 +154614,7 @@ function checkNode() {
|
|
|
153950
154614
|
return { label: `Node.js ${process.versions.node}`, status: "pass" };
|
|
153951
154615
|
}
|
|
153952
154616
|
function checkDorkHomeWritable(dorkHome) {
|
|
153953
|
-
const probe2 =
|
|
154617
|
+
const probe2 = path60.join(dorkHome, `.doctor-write-${process.pid}`);
|
|
153954
154618
|
try {
|
|
153955
154619
|
fs30.mkdirSync(dorkHome, { recursive: true });
|
|
153956
154620
|
fs30.writeFileSync(probe2, "ok");
|
|
@@ -154003,7 +154667,7 @@ function readGitVersion() {
|
|
|
154003
154667
|
return execFileSync3("git", ["--version"], { encoding: "utf-8", stdio: "pipe", timeout: 1e4 });
|
|
154004
154668
|
}
|
|
154005
154669
|
function checkClaudeAuth(homeDir) {
|
|
154006
|
-
const claudeDir =
|
|
154670
|
+
const claudeDir = path60.join(homeDir, ".claude");
|
|
154007
154671
|
if (fs30.existsSync(claudeDir)) {
|
|
154008
154672
|
return { label: "Claude looks configured", status: "info", detail: claudeDir };
|
|
154009
154673
|
}
|
|
@@ -154094,7 +154758,7 @@ function checkFileDescriptors(softLimit) {
|
|
|
154094
154758
|
};
|
|
154095
154759
|
}
|
|
154096
154760
|
function checkDevLinks(dorkHome) {
|
|
154097
|
-
const file2 =
|
|
154761
|
+
const file2 = path60.join(dorkHome, DEV_LINKS_FILE);
|
|
154098
154762
|
let text3;
|
|
154099
154763
|
try {
|
|
154100
154764
|
text3 = fs30.readFileSync(file2, "utf-8");
|
|
@@ -154139,7 +154803,7 @@ function devLinkStateSync(record2) {
|
|
|
154139
154803
|
if (lstatIsLink && realpathOfSlot === null) {
|
|
154140
154804
|
try {
|
|
154141
154805
|
const text3 = fs30.readlinkSync(record2.slot);
|
|
154142
|
-
if (
|
|
154806
|
+
if (path60.resolve(path60.dirname(record2.slot), text3) === record2.target) return "folder-missing";
|
|
154143
154807
|
} catch {
|
|
154144
154808
|
}
|
|
154145
154809
|
}
|
|
@@ -154261,7 +154925,7 @@ __export(doctor_exports, {
|
|
|
154261
154925
|
});
|
|
154262
154926
|
import fs31 from "node:fs";
|
|
154263
154927
|
import os9 from "node:os";
|
|
154264
|
-
import
|
|
154928
|
+
import path61 from "node:path";
|
|
154265
154929
|
function parseDoctorArgs(rawArgs) {
|
|
154266
154930
|
const usage = "Usage: dorkos doctor [--json] [--deep]";
|
|
154267
154931
|
const args = { json: false, deep: false };
|
|
@@ -154318,7 +154982,7 @@ function configFailureCheck(err, dorkHome) {
|
|
|
154318
154982
|
label: "Your settings could not be used",
|
|
154319
154983
|
status: "fail",
|
|
154320
154984
|
detail: describeConfigFailure(err),
|
|
154321
|
-
fix: `DorkOS did not replace or delete the file: ${
|
|
154985
|
+
fix: `DorkOS did not replace or delete the file: ${path61.join(dorkHome, "config.json")}
|
|
154322
154986
|
Everything below was checked against the built-in defaults instead.
|
|
154323
154987
|
` + adviceFrom(err)
|
|
154324
154988
|
};
|
|
@@ -154364,7 +155028,7 @@ async function gatherResults(dorkHome, store) {
|
|
|
154364
155028
|
checkDevLinks(dorkHome),
|
|
154365
155029
|
checkAuthConfig({
|
|
154366
155030
|
authEnabled: readBool(store, "auth.enabled", false),
|
|
154367
|
-
secretFileExists: fs31.existsSync(
|
|
155031
|
+
secretFileExists: fs31.existsSync(path61.join(dorkHome, SECRET_FILE_NAME2)),
|
|
154368
155032
|
// eslint-disable-next-line no-restricted-syntax -- reading an operator env override, matching secret.ts
|
|
154369
155033
|
secretEnvSet: Boolean(process.env.BETTER_AUTH_SECRET?.trim())
|
|
154370
155034
|
}),
|
|
@@ -154814,13 +155478,13 @@ function assertHasProtocol(url2) {
|
|
|
154814
155478
|
throw new BetterAuthError(`Invalid base URL: ${url2}. Please provide a valid base URL.`, { cause: error63 });
|
|
154815
155479
|
}
|
|
154816
155480
|
}
|
|
154817
|
-
function withPath2(url2,
|
|
155481
|
+
function withPath2(url2, path71 = "/api/auth") {
|
|
154818
155482
|
assertHasProtocol(url2);
|
|
154819
155483
|
if (checkHasPath(url2)) return url2;
|
|
154820
155484
|
const trimmedUrl = trimTrailingSlashes(url2);
|
|
154821
|
-
if (!
|
|
154822
|
-
|
|
154823
|
-
return `${trimmedUrl}${
|
|
155485
|
+
if (!path71 || path71 === "/") return trimmedUrl;
|
|
155486
|
+
path71 = path71.startsWith("/") ? path71 : `/${path71}`;
|
|
155487
|
+
return `${trimmedUrl}${path71}`;
|
|
154824
155488
|
}
|
|
154825
155489
|
function validateProxyHeader(header, type2) {
|
|
154826
155490
|
if (!header || header.trim() === "") return false;
|
|
@@ -154840,26 +155504,26 @@ function validateProxyHeader(header, type2) {
|
|
|
154840
155504
|
}
|
|
154841
155505
|
return false;
|
|
154842
155506
|
}
|
|
154843
|
-
function getBaseURL(url2,
|
|
154844
|
-
if (url2) return withPath2(url2,
|
|
155507
|
+
function getBaseURL(url2, path71, request, loadEnv, trustedProxyHeaders) {
|
|
155508
|
+
if (url2) return withPath2(url2, path71);
|
|
154845
155509
|
if (loadEnv !== false) {
|
|
154846
155510
|
const fromEnv = env5.BETTER_AUTH_URL || env5.NEXT_PUBLIC_BETTER_AUTH_URL || env5.PUBLIC_BETTER_AUTH_URL || env5.NUXT_PUBLIC_BETTER_AUTH_URL || env5.NUXT_PUBLIC_AUTH_URL || (env5.BASE_URL !== "/" ? env5.BASE_URL : void 0);
|
|
154847
|
-
if (fromEnv) return withPath2(fromEnv,
|
|
155511
|
+
if (fromEnv) return withPath2(fromEnv, path71);
|
|
154848
155512
|
}
|
|
154849
155513
|
const fromRequest = request?.headers.get("x-forwarded-host");
|
|
154850
155514
|
const fromRequestProto = request?.headers.get("x-forwarded-proto");
|
|
154851
155515
|
if (fromRequest && fromRequestProto && trustedProxyHeaders) {
|
|
154852
155516
|
if (validateProxyHeader(fromRequestProto, "proto") && validateProxyHeader(fromRequest, "host")) try {
|
|
154853
|
-
return withPath2(`${fromRequestProto}://${fromRequest}`,
|
|
155517
|
+
return withPath2(`${fromRequestProto}://${fromRequest}`, path71);
|
|
154854
155518
|
} catch (_error) {
|
|
154855
155519
|
}
|
|
154856
155520
|
}
|
|
154857
155521
|
if (request) {
|
|
154858
155522
|
const url3 = getOrigin(request.url);
|
|
154859
155523
|
if (!url3) throw new BetterAuthError("Could not get origin from request. Please provide a valid base URL.");
|
|
154860
|
-
return withPath2(url3,
|
|
155524
|
+
return withPath2(url3, path71);
|
|
154861
155525
|
}
|
|
154862
|
-
if (typeof window !== "undefined" && window.location) return withPath2(window.location.origin,
|
|
155526
|
+
if (typeof window !== "undefined" && window.location) return withPath2(window.location.origin, path71);
|
|
154863
155527
|
}
|
|
154864
155528
|
function getOrigin(url2) {
|
|
154865
155529
|
try {
|
|
@@ -155450,9 +156114,9 @@ function parseCookieCachePayload(value) {
|
|
|
155450
156114
|
if (parsed === null) return null;
|
|
155451
156115
|
const result2 = cookieCachePayloadSchema.safeParse(parsed);
|
|
155452
156116
|
if (result2.success) return result2.data;
|
|
155453
|
-
logger2.warn("Cookie cache payload failed schema validation", { issues: result2.error.issues.map(({ code, path:
|
|
156117
|
+
logger2.warn("Cookie cache payload failed schema validation", { issues: result2.error.issues.map(({ code, path: path71 }) => ({
|
|
155454
156118
|
code,
|
|
155455
|
-
path:
|
|
156119
|
+
path: path71
|
|
155456
156120
|
})) });
|
|
155457
156121
|
return null;
|
|
155458
156122
|
}
|
|
@@ -156225,10 +156889,10 @@ var init_trusted_origins2 = __esm({
|
|
|
156225
156889
|
CONTROL_CHARACTER_PATTERN = /[\u0000-\u001f\u007f-\u009f]/;
|
|
156226
156890
|
RELATIVE_URL_PARSER_ORIGIN = "https://better-auth.invalid";
|
|
156227
156891
|
ENCODED_PATH_SEPARATOR_PATTERN = /%2[fF]|%5[cC]/;
|
|
156228
|
-
normalizePath3 = (
|
|
156229
|
-
let decoded =
|
|
156892
|
+
normalizePath3 = (path71) => {
|
|
156893
|
+
let decoded = path71;
|
|
156230
156894
|
try {
|
|
156231
|
-
decoded = decodeURIComponent(
|
|
156895
|
+
decoded = decodeURIComponent(path71);
|
|
156232
156896
|
} catch {
|
|
156233
156897
|
}
|
|
156234
156898
|
const segments = [];
|
|
@@ -156255,18 +156919,18 @@ var init_trusted_origins2 = __esm({
|
|
|
156255
156919
|
}
|
|
156256
156920
|
}
|
|
156257
156921
|
const pathEnd = rest.search(/[?#]/);
|
|
156258
|
-
const
|
|
156922
|
+
const path71 = normalizePath3(pathEnd === -1 ? rest : rest.slice(0, pathEnd));
|
|
156259
156923
|
return {
|
|
156260
156924
|
scheme,
|
|
156261
156925
|
authority: authority.toLowerCase(),
|
|
156262
|
-
path:
|
|
156926
|
+
path: path71
|
|
156263
156927
|
};
|
|
156264
156928
|
};
|
|
156265
156929
|
isSafeRelativeURL = (value) => {
|
|
156266
156930
|
if (!value.startsWith("/") || value.startsWith("//") || value.includes("\\") || CONTROL_CHARACTER_PATTERN.test(value)) return false;
|
|
156267
156931
|
const pathEnd = value.search(/[?#]/);
|
|
156268
|
-
const
|
|
156269
|
-
if (ENCODED_PATH_SEPARATOR_PATTERN.test(
|
|
156932
|
+
const path71 = pathEnd === -1 ? value : value.slice(0, pathEnd);
|
|
156933
|
+
if (ENCODED_PATH_SEPARATOR_PATTERN.test(path71)) return false;
|
|
156270
156934
|
try {
|
|
156271
156935
|
return new URL(value, RELATIVE_URL_PARSER_ORIGIN).origin === RELATIVE_URL_PARSER_ORIGIN;
|
|
156272
156936
|
} catch {
|
|
@@ -156647,7 +157311,7 @@ function getRateLimitStorage(ctx, rateLimitSettings) {
|
|
|
156647
157311
|
}
|
|
156648
157312
|
async function resolveRateLimitConfig(req, ctx) {
|
|
156649
157313
|
const basePath = new URL(ctx.baseURL).pathname;
|
|
156650
|
-
const
|
|
157314
|
+
const path71 = normalizePathname(req.url, basePath);
|
|
156651
157315
|
let currentWindow = ctx.rateLimit.window;
|
|
156652
157316
|
let currentMax = ctx.rateLimit.max;
|
|
156653
157317
|
const ip = getIP(req, ctx.options);
|
|
@@ -156656,14 +157320,14 @@ async function resolveRateLimitConfig(req, ctx) {
|
|
|
156656
157320
|
ctx.logger.warn("Rate limiting could not determine a client IP and is falling back to a single shared per-path bucket. Ensure your runtime forwards a trusted client IP header, then set `advanced.ipAddress.ipAddressHeaders` or `advanced.ipAddress.trustedProxies` so the address can be resolved.");
|
|
156657
157321
|
ipWarningLogged = true;
|
|
156658
157322
|
}
|
|
156659
|
-
const key = createRateLimitKey(ip ?? NO_TRUSTED_IP_KEY,
|
|
156660
|
-
const specialRule = getDefaultSpecialRules().find((rule) => rule.pathMatcher(
|
|
157323
|
+
const key = createRateLimitKey(ip ?? NO_TRUSTED_IP_KEY, path71);
|
|
157324
|
+
const specialRule = getDefaultSpecialRules().find((rule) => rule.pathMatcher(path71));
|
|
156661
157325
|
if (specialRule) {
|
|
156662
157326
|
currentWindow = specialRule.window;
|
|
156663
157327
|
currentMax = specialRule.max;
|
|
156664
157328
|
}
|
|
156665
157329
|
for (const plugin of ctx.options.plugins || []) if (plugin.rateLimit) {
|
|
156666
|
-
const matchedRule = plugin.rateLimit.find((rule) => rule.pathMatcher(
|
|
157330
|
+
const matchedRule = plugin.rateLimit.find((rule) => rule.pathMatcher(path71));
|
|
156667
157331
|
if (matchedRule) {
|
|
156668
157332
|
currentWindow = matchedRule.window;
|
|
156669
157333
|
currentMax = matchedRule.max;
|
|
@@ -156672,8 +157336,8 @@ async function resolveRateLimitConfig(req, ctx) {
|
|
|
156672
157336
|
}
|
|
156673
157337
|
if (ctx.rateLimit.customRules) {
|
|
156674
157338
|
const _path = Object.keys(ctx.rateLimit.customRules).find((p) => {
|
|
156675
|
-
if (p.includes("*")) return wildcardMatch(p)(
|
|
156676
|
-
return p ===
|
|
157339
|
+
if (p.includes("*")) return wildcardMatch(p)(path71);
|
|
157340
|
+
return p === path71;
|
|
156677
157341
|
});
|
|
156678
157342
|
if (_path) {
|
|
156679
157343
|
const customRule = ctx.rateLimit.customRules[_path];
|
|
@@ -156709,14 +157373,14 @@ async function onRequestRateLimit(req, ctx) {
|
|
|
156709
157373
|
}
|
|
156710
157374
|
function getDefaultSpecialRules() {
|
|
156711
157375
|
return [{
|
|
156712
|
-
pathMatcher(
|
|
156713
|
-
return
|
|
157376
|
+
pathMatcher(path71) {
|
|
157377
|
+
return path71.startsWith("/sign-in") || path71.startsWith("/sign-up") || path71.startsWith("/change-password") || path71.startsWith("/change-email");
|
|
156714
157378
|
},
|
|
156715
157379
|
window: 10,
|
|
156716
157380
|
max: 3
|
|
156717
157381
|
}, {
|
|
156718
|
-
pathMatcher(
|
|
156719
|
-
return
|
|
157382
|
+
pathMatcher(path71) {
|
|
157383
|
+
return path71 === "/request-password-reset" || path71 === "/send-verification-email" || path71.startsWith("/forget-password") || path71 === "/email-otp/send-verification-otp" || path71 === "/email-otp/request-password-reset";
|
|
156720
157384
|
},
|
|
156721
157385
|
window: 60,
|
|
156722
157386
|
max: 3
|
|
@@ -162422,15 +163086,15 @@ function checkEndpointConflicts(options, logger3) {
|
|
|
162422
163086
|
options.plugins?.forEach((plugin) => {
|
|
162423
163087
|
if (plugin.endpoints) {
|
|
162424
163088
|
for (const [key, endpoint] of Object.entries(plugin.endpoints)) if (endpoint && "path" in endpoint && typeof endpoint.path === "string") {
|
|
162425
|
-
const
|
|
163089
|
+
const path71 = endpoint.path;
|
|
162426
163090
|
let methods2 = [];
|
|
162427
163091
|
if (endpoint.options && "method" in endpoint.options) {
|
|
162428
163092
|
if (Array.isArray(endpoint.options.method)) methods2 = endpoint.options.method;
|
|
162429
163093
|
else if (typeof endpoint.options.method === "string") methods2 = [endpoint.options.method];
|
|
162430
163094
|
}
|
|
162431
163095
|
if (methods2.length === 0) methods2 = ["*"];
|
|
162432
|
-
if (!endpointRegistry.has(
|
|
162433
|
-
endpointRegistry.get(
|
|
163096
|
+
if (!endpointRegistry.has(path71)) endpointRegistry.set(path71, []);
|
|
163097
|
+
endpointRegistry.get(path71).push({
|
|
162434
163098
|
pluginId: plugin.id,
|
|
162435
163099
|
endpointKey: key,
|
|
162436
163100
|
methods: methods2
|
|
@@ -162439,7 +163103,7 @@ function checkEndpointConflicts(options, logger3) {
|
|
|
162439
163103
|
}
|
|
162440
163104
|
});
|
|
162441
163105
|
const conflicts = [];
|
|
162442
|
-
for (const [
|
|
163106
|
+
for (const [path71, entries] of endpointRegistry.entries()) if (entries.length > 1) {
|
|
162443
163107
|
const methodMap = /* @__PURE__ */ new Map();
|
|
162444
163108
|
let hasConflict = false;
|
|
162445
163109
|
for (const entry of entries) for (const method of entry.methods) {
|
|
@@ -162454,7 +163118,7 @@ function checkEndpointConflicts(options, logger3) {
|
|
|
162454
163118
|
const conflictingMethods = [];
|
|
162455
163119
|
for (const [method, plugins] of methodMap.entries()) if (plugins.length > 1 || method === "*" && entries.length > 1 || method !== "*" && methodMap.has("*")) conflictingMethods.push(method);
|
|
162456
163120
|
conflicts.push({
|
|
162457
|
-
path:
|
|
163121
|
+
path: path71,
|
|
162458
163122
|
plugins: uniquePlugins,
|
|
162459
163123
|
conflictingMethods
|
|
162460
163124
|
});
|
|
@@ -172043,12 +172707,12 @@ __export(ended_standing_grants_exports, {
|
|
|
172043
172707
|
recordEndedStandingGrants: () => recordEndedStandingGrants
|
|
172044
172708
|
});
|
|
172045
172709
|
import fs32 from "node:fs/promises";
|
|
172046
|
-
import { readFileSync as
|
|
172047
|
-
import
|
|
172710
|
+
import { readFileSync as readFileSync24, writeFileSync as writeFileSync4, renameSync as renameSync4 } from "node:fs";
|
|
172711
|
+
import path62 from "node:path";
|
|
172048
172712
|
function readStandingGrantLicence(dorkHome) {
|
|
172049
172713
|
let config3;
|
|
172050
172714
|
try {
|
|
172051
|
-
config3 = JSON.parse(
|
|
172715
|
+
config3 = JSON.parse(readFileSync24(path62.join(dorkHome, "config.json"), "utf-8"));
|
|
172052
172716
|
} catch {
|
|
172053
172717
|
return NO_LICENCE;
|
|
172054
172718
|
}
|
|
@@ -172091,7 +172755,7 @@ function captureLiveStandingGrants(db2, dorkHome, logger3, licence, now3 = /* @_
|
|
|
172091
172755
|
capabilityId: row2.capability_id,
|
|
172092
172756
|
expiresAt: row2.expires_at
|
|
172093
172757
|
}));
|
|
172094
|
-
const file2 =
|
|
172758
|
+
const file2 = path62.join(dorkHome, ENDED_STANDING_GRANTS_FILE);
|
|
172095
172759
|
const existing = readCaptured(file2);
|
|
172096
172760
|
const byId = new Map([...existing, ...grants].map((grant) => [grant.id, grant]));
|
|
172097
172761
|
const tmp = `${file2}.tmp`;
|
|
@@ -172108,7 +172772,7 @@ function captureLiveStandingGrants(db2, dorkHome, logger3, licence, now3 = /* @_
|
|
|
172108
172772
|
function readCaptured(file2) {
|
|
172109
172773
|
let raw;
|
|
172110
172774
|
try {
|
|
172111
|
-
raw =
|
|
172775
|
+
raw = readFileSync24(file2, "utf-8");
|
|
172112
172776
|
} catch {
|
|
172113
172777
|
return [];
|
|
172114
172778
|
}
|
|
@@ -172123,7 +172787,7 @@ function readCaptured(file2) {
|
|
|
172123
172787
|
}
|
|
172124
172788
|
}
|
|
172125
172789
|
async function recordEndedStandingGrants(deps) {
|
|
172126
|
-
const file2 =
|
|
172790
|
+
const file2 = path62.join(deps.dorkHome, ENDED_STANDING_GRANTS_FILE);
|
|
172127
172791
|
const grants = readCaptured(file2);
|
|
172128
172792
|
if (grants.length === 0) {
|
|
172129
172793
|
await fs32.rm(file2, { force: true });
|
|
@@ -172132,7 +172796,7 @@ async function recordEndedStandingGrants(deps) {
|
|
|
172132
172796
|
const agents2 = new Map(deps.agents().map((agent) => [agent.projectPath, agent]));
|
|
172133
172797
|
for (const grant of grants) {
|
|
172134
172798
|
const agent = agents2.get(grant.agentPath);
|
|
172135
|
-
const name2 = agent ? agent.displayName || agent.name :
|
|
172799
|
+
const name2 = agent ? agent.displayName || agent.name : path62.basename(grant.agentPath);
|
|
172136
172800
|
const title = deps.actionTitle(grant.capabilityId);
|
|
172137
172801
|
await deps.activity.emit({
|
|
172138
172802
|
actorType: UPGRADE_WRITER.actorType,
|
|
@@ -172175,12 +172839,12 @@ var init_ended_standing_grants = __esm({
|
|
|
172175
172839
|
});
|
|
172176
172840
|
|
|
172177
172841
|
// src/commands/auth-runtime.ts
|
|
172178
|
-
import
|
|
172179
|
-
import { mkdirSync as mkdirSync8, readFileSync as
|
|
172842
|
+
import path63 from "node:path";
|
|
172843
|
+
import { mkdirSync as mkdirSync8, readFileSync as readFileSync25 } from "node:fs";
|
|
172180
172844
|
import { input as input2, password as passwordPrompt } from "@inquirer/prompts";
|
|
172181
172845
|
async function buildAuthRuntime(dorkHome) {
|
|
172182
172846
|
mkdirSync8(dorkHome, { recursive: true });
|
|
172183
|
-
const db2 = createDb(
|
|
172847
|
+
const db2 = createDb(path63.join(dorkHome, "dork.db"));
|
|
172184
172848
|
const { captureLiveStandingGrants: captureLiveStandingGrants2, readStandingGrantLicence: readStandingGrantLicence2 } = await Promise.resolve().then(() => (init_ended_standing_grants(), ended_standing_grants_exports));
|
|
172185
172849
|
captureLiveStandingGrants2(db2, dorkHome, console, readStandingGrantLicence2(dorkHome));
|
|
172186
172850
|
runMigrations(db2);
|
|
@@ -172214,7 +172878,7 @@ function resolveCredentialPrompt() {
|
|
|
172214
172878
|
if (!stdinPrompt) {
|
|
172215
172879
|
let raw = "";
|
|
172216
172880
|
try {
|
|
172217
|
-
raw =
|
|
172881
|
+
raw = readFileSync25(0, "utf8");
|
|
172218
172882
|
} catch {
|
|
172219
172883
|
}
|
|
172220
172884
|
stdinPrompt = createStdinPrompt(raw);
|
|
@@ -172556,6 +173220,7 @@ var init_connection_copy = __esm({
|
|
|
172556
173220
|
var CONNECTOR_OPERATION_SELECTION_LIMIT, CONNECTOR_AUTHENTICATION_FLOW_TTL_MS, CONNECTOR_EVENT_REVIEW_SCOPE_LIMIT, ConnectorJsonValueSchema, ConnectorJsonObjectSchema, ConnectorProviderInstanceIdSchema, ConnectionIdSchema, ConnectorExternalAccountRefSchema, ConnectorProviderModeSchema, ConnectorProviderHealthSchema, ConnectorGrantReconciliationStatusSchema, ConnectorOperationClassificationSchema, ConnectorAccessLevelSchema, ConnectorRetryPolicySchema, ConnectorOperationRevisionSchema, ConnectorOperationPageSchema, ConnectorCapabilityAvailabilitySchema, ConnectorUnsupportedResultSchema, ConnectorProviderCapabilitySetSchema, ConnectorToolkitVersionResultSchema, ConnectorProviderExecuteResultSchema, ConnectorAuthenticationFlowSchema, ConnectorExecutionTargetSchema, ConnectorProgramExecutionRequestSchema, ConnectorExecutionPublicResultSchema, ConnectorExecutionResponseSchema, ConnectionReadinessStateSchema, ConnectionReadinessReasonSchema, ConnectionFixActionSchema, ConnectionFixSchema, ConnectionReadinessSchema, AccessibleConnectorConnectionSchema, AccessibleConnectorOperationSchema, ConnectorAccessibleConnectionsResponseSchema, ConnectorAccessibleOperationsResponseSchema, ConnectorUsageItemSchema, ConnectorUsagePageSchema, ConnectorReconciliationPreviewRequestSchema, ConnectorReconciliationGrantSelectionSchema, ConnectorReconciliationEveryAgentSelectionSchema, ConnectorReconciliationEveryAgentStateSchema, ConnectorEveryAgentRevokeResponseSchema, ConnectorReconciliationAgentSchema, ConnectorReconciliationCandidateSchema, ConnectorReconciliationPreviewSchema, ConnectorReconciliationApplyRequestSchema, ConnectorReconciliationApplyResponseSchema, ReviewActionBaseSchema, ConnectionTargetSchema, ConnectorRequestAccessSchema, ConnectorReviewActionSchema, ConnectorAgentConnectionRequestInputSchema, ConnectorAgentRequestBaseSchema, ConnectorRequestNotGrantedSchema, ConnectorAgentRequestStatusSchema, ConnectorAgentRequestItemSchema, ConnectorAgentRequestListResponseSchema, ConnectorManagementConnectActionSchema, ConnectorManagementAppliedActionSchema, ConnectorManagementReviewActionSchema, ConnectorManagementReviewCreateRequestSchema, ConnectorManagementReviewOutcomeSchema, ConnectorManagementReviewOperationContextSchema, ConnectorManagementReviewConnectionContextSchema, ConnectorManagementReviewAgentContextSchema, ConnectorManagementReviewContextSchema, ManagementReviewItemBaseShape, ConnectorPendingManagementReviewItemSchema, ConnectorResolvingManagementReviewItemSchema, ConnectorExpiredManagementReviewItemSchema, ConnectorDeniedManagementReviewItemSchema, ConnectorApprovedAppliedManagementReviewItemSchema, ConnectorApprovedConnectManagementReviewItemSchema, ConnectorApprovedUnknownManagementReviewItemSchema, ConnectorManagementReviewItemSchema, ProgramReviewStatusBaseShape, ConnectorProgramReviewStatusSchema, ConnectorManagementReviewDecisionSchema, ConnectorManagementReviewDecisionResultSchema;
|
|
172557
173221
|
var init_connector_schemas = __esm({
|
|
172558
173222
|
"../connector-providers/src/connector-schemas.ts"() {
|
|
173223
|
+
"use strict";
|
|
172559
173224
|
init_zod();
|
|
172560
173225
|
init_connection_copy();
|
|
172561
173226
|
CONNECTOR_OPERATION_SELECTION_LIMIT = 1e5;
|
|
@@ -174230,9 +174895,9 @@ var init_cloud_link_client = __esm({
|
|
|
174230
174895
|
// ../../apps/server/src/lib/instance-id.ts
|
|
174231
174896
|
import { randomUUID as randomUUID8 } from "node:crypto";
|
|
174232
174897
|
import fs33 from "node:fs/promises";
|
|
174233
|
-
import
|
|
174898
|
+
import path64 from "node:path";
|
|
174234
174899
|
async function getOrCreateInstanceId(dorkHome) {
|
|
174235
|
-
const filePath =
|
|
174900
|
+
const filePath = path64.join(dorkHome, INSTANCE_ID_FILENAME2);
|
|
174236
174901
|
try {
|
|
174237
174902
|
const existing = await fs33.readFile(filePath, "utf8");
|
|
174238
174903
|
const trimmed = existing.trim();
|
|
@@ -175112,14 +175777,14 @@ function parseAgentCreateArgs(rawArgs) {
|
|
|
175112
175777
|
}
|
|
175113
175778
|
const { values: values2 } = parsed;
|
|
175114
175779
|
const name2 = typeof values2.name === "string" ? values2.name : void 0;
|
|
175115
|
-
const
|
|
175780
|
+
const path71 = typeof values2.path === "string" ? values2.path : void 0;
|
|
175116
175781
|
if (!name2) throw new Error(`Missing required --name.
|
|
175117
175782
|
${usage}`);
|
|
175118
|
-
if (!
|
|
175783
|
+
if (!path71) throw new Error(`Missing required --path.
|
|
175119
175784
|
${usage}`);
|
|
175120
175785
|
return {
|
|
175121
175786
|
name: name2,
|
|
175122
|
-
path:
|
|
175787
|
+
path: path71,
|
|
175123
175788
|
template: typeof values2.template === "string" ? values2.template : void 0,
|
|
175124
175789
|
displayName: typeof values2["display-name"] === "string" ? values2["display-name"] : void 0,
|
|
175125
175790
|
description: typeof values2.description === "string" ? values2.description : void 0,
|
|
@@ -175169,12 +175834,12 @@ function parseAgentUpdateArgs(rawArgs) {
|
|
|
175169
175834
|
rethrowUnknownOption(err, "agent update", usage);
|
|
175170
175835
|
}
|
|
175171
175836
|
const { values: values2 } = parsed;
|
|
175172
|
-
const
|
|
175173
|
-
if (!
|
|
175837
|
+
const path71 = typeof values2.path === "string" ? values2.path : void 0;
|
|
175838
|
+
if (!path71) throw new Error(`Missing required --path.
|
|
175174
175839
|
${usage}`);
|
|
175175
175840
|
const clearable = (v2) => typeof v2 === "string" ? v2.length === 0 ? null : v2 : void 0;
|
|
175176
175841
|
return {
|
|
175177
|
-
path:
|
|
175842
|
+
path: path71,
|
|
175178
175843
|
displayName: typeof values2["display-name"] === "string" ? values2["display-name"] : void 0,
|
|
175179
175844
|
description: typeof values2.description === "string" ? values2.description : void 0,
|
|
175180
175845
|
color: clearable(values2.color),
|
|
@@ -175749,7 +176414,7 @@ __export(room_exports, {
|
|
|
175749
176414
|
});
|
|
175750
176415
|
import { parseArgs as parseArgs30 } from "node:util";
|
|
175751
176416
|
import fs34 from "node:fs";
|
|
175752
|
-
import
|
|
176417
|
+
import path65 from "node:path";
|
|
175753
176418
|
import { Readable } from "node:stream";
|
|
175754
176419
|
import { finished as finished2, pipeline } from "node:stream/promises";
|
|
175755
176420
|
function parseRoomExportArgs(rawArgs) {
|
|
@@ -175801,7 +176466,7 @@ async function resolveRoomId(reference) {
|
|
|
175801
176466
|
}
|
|
175802
176467
|
function suggestedFilename(disposition, roomId) {
|
|
175803
176468
|
const match = disposition?.match(/filename="([^"]+)"/);
|
|
175804
|
-
const name2 = match ?
|
|
176469
|
+
const name2 = match ? path65.basename(match[1]) : "";
|
|
175805
176470
|
return name2 && name2 !== "." && name2 !== ".." ? name2 : `room-${roomId}.jsonl`;
|
|
175806
176471
|
}
|
|
175807
176472
|
async function streamExport(body, destination, closeDestination) {
|
|
@@ -175835,8 +176500,8 @@ async function streamExport(body, destination, closeDestination) {
|
|
|
175835
176500
|
return { entryCount: null, reason };
|
|
175836
176501
|
}
|
|
175837
176502
|
async function writeExportFile(body, target) {
|
|
175838
|
-
const staging = fs34.mkdtempSync(
|
|
175839
|
-
const scratch =
|
|
176503
|
+
const staging = fs34.mkdtempSync(path65.join(path65.dirname(target), ".dorkos-export-"));
|
|
176504
|
+
const scratch = path65.join(staging, path65.basename(target));
|
|
175840
176505
|
let file2;
|
|
175841
176506
|
try {
|
|
175842
176507
|
file2 = fs34.createWriteStream(scratch);
|
|
@@ -175857,7 +176522,7 @@ async function runRoomExport(args) {
|
|
|
175857
176522
|
const toStdout = args.out === STDOUT_TARGET;
|
|
175858
176523
|
let target = null;
|
|
175859
176524
|
if (!toStdout) {
|
|
175860
|
-
target =
|
|
176525
|
+
target = path65.resolve(
|
|
175861
176526
|
args.out ?? suggestedFilename(res.headers.get("content-disposition"), roomId)
|
|
175862
176527
|
);
|
|
175863
176528
|
if (!args.force && fs34.existsSync(target)) {
|
|
@@ -177181,7 +177846,7 @@ __export(version_exports, {
|
|
|
177181
177846
|
runVersionDispatcher: () => runVersionDispatcher
|
|
177182
177847
|
});
|
|
177183
177848
|
import fs37 from "node:fs";
|
|
177184
|
-
import
|
|
177849
|
+
import path66 from "node:path";
|
|
177185
177850
|
import { parseArgs as parseArgs35 } from "node:util";
|
|
177186
177851
|
function parseVersionArgs(rawArgs) {
|
|
177187
177852
|
const usage = "Usage: dorkos version [--check] [--json]";
|
|
@@ -177203,7 +177868,7 @@ function parseVersionArgs(rawArgs) {
|
|
|
177203
177868
|
}
|
|
177204
177869
|
function readCachedLatest(dorkHome) {
|
|
177205
177870
|
try {
|
|
177206
|
-
const raw = fs37.readFileSync(
|
|
177871
|
+
const raw = fs37.readFileSync(path66.join(dorkHome, "cache", "update-check.json"), "utf-8");
|
|
177207
177872
|
const cache3 = JSON.parse(raw);
|
|
177208
177873
|
return typeof cache3.latestVersion === "string" ? cache3.latestVersion : null;
|
|
177209
177874
|
} catch {
|
|
@@ -177298,11 +177963,11 @@ __export(cleanup_command_exports, {
|
|
|
177298
177963
|
});
|
|
177299
177964
|
import { confirm as confirm2 } from "@inquirer/prompts";
|
|
177300
177965
|
import fs38 from "fs";
|
|
177301
|
-
import
|
|
177966
|
+
import path67 from "path";
|
|
177302
177967
|
import http from "node:http";
|
|
177303
177968
|
function readPort(dorkHome) {
|
|
177304
177969
|
try {
|
|
177305
|
-
const raw = fs38.readFileSync(
|
|
177970
|
+
const raw = fs38.readFileSync(path67.join(dorkHome, "config.json"), "utf-8");
|
|
177306
177971
|
const config3 = JSON.parse(raw);
|
|
177307
177972
|
const port2 = config3?.server?.port;
|
|
177308
177973
|
if (typeof port2 === "number" && port2 > 0) return port2;
|
|
@@ -177329,7 +177994,7 @@ async function findProjectPaths(dbPath) {
|
|
|
177329
177994
|
const db2 = new Database3(dbPath, { readonly: true });
|
|
177330
177995
|
try {
|
|
177331
177996
|
const rows = db2.prepare("SELECT DISTINCT project_path FROM agents").all();
|
|
177332
|
-
return rows.map((r3) => r3.project_path).filter((p) => fs38.existsSync(
|
|
177997
|
+
return rows.map((r3) => r3.project_path).filter((p) => fs38.existsSync(path67.join(p, ".dork")));
|
|
177333
177998
|
} finally {
|
|
177334
177999
|
db2.close();
|
|
177335
178000
|
}
|
|
@@ -177363,7 +178028,7 @@ DorkOS server is running on port ${port2}. Stop it before running cleanup.
|
|
|
177363
178028
|
console.log(` ${entry.padEnd(20)} (${description})`);
|
|
177364
178029
|
}
|
|
177365
178030
|
console.log("");
|
|
177366
|
-
const dbPath =
|
|
178031
|
+
const dbPath = path67.join(dorkHome, "dork.db");
|
|
177367
178032
|
const projectPaths = fs38.existsSync(dbPath) ? await findProjectPaths(dbPath) : [];
|
|
177368
178033
|
const removeGlobal = await confirm2({
|
|
177369
178034
|
message: `Remove global DorkOS data (${dorkHome})?`,
|
|
@@ -177389,7 +178054,7 @@ DorkOS server is running on port ${port2}. Stop it before running cleanup.
|
|
|
177389
178054
|
});
|
|
177390
178055
|
if (removeProjects) {
|
|
177391
178056
|
for (const p of projectPaths) {
|
|
177392
|
-
const dorkDir =
|
|
178057
|
+
const dorkDir = path67.join(p, ".dork");
|
|
177393
178058
|
fs38.rmSync(dorkDir, { recursive: true, force: true });
|
|
177394
178059
|
console.log(` Removed ${dorkDir}`);
|
|
177395
178060
|
}
|
|
@@ -177425,9 +178090,9 @@ __export(config_write_exports2, {
|
|
|
177425
178090
|
createServerConfigWriter: () => createServerConfigWriter,
|
|
177426
178091
|
writeOrExplain: () => writeOrExplain
|
|
177427
178092
|
});
|
|
177428
|
-
import
|
|
178093
|
+
import path68 from "path";
|
|
177429
178094
|
async function openAuditLog(dorkHome, level) {
|
|
177430
|
-
const logDir2 =
|
|
178095
|
+
const logDir2 = path68.join(dorkHome, "logs");
|
|
177431
178096
|
try {
|
|
177432
178097
|
const { initLogger: initLogger2 } = await Promise.resolve().then(() => (init_logger(), logger_exports));
|
|
177433
178098
|
initLogger2({ logDir: logDir2, level });
|
|
@@ -177717,10 +178382,10 @@ __export(init_wizard_exports, {
|
|
|
177717
178382
|
});
|
|
177718
178383
|
import { input as input3, select, confirm as confirm3 } from "@inquirer/prompts";
|
|
177719
178384
|
import fs39 from "fs";
|
|
177720
|
-
import
|
|
178385
|
+
import path69 from "path";
|
|
177721
178386
|
async function runInitWizard(options) {
|
|
177722
178387
|
const { yes, dorkHome, store } = options;
|
|
177723
|
-
const configPath =
|
|
178388
|
+
const configPath = path69.join(dorkHome, "config.json");
|
|
177724
178389
|
if (yes) {
|
|
177725
178390
|
store.reset();
|
|
177726
178391
|
console.log(`Config initialized with defaults at ${configPath}`);
|
|
@@ -177770,7 +178435,7 @@ async function runInitWizard(options) {
|
|
|
177770
178435
|
store.setDot("ui.theme", theme);
|
|
177771
178436
|
store.setDot("tunnel.enabled", tunnelEnabled);
|
|
177772
178437
|
if (cwd && cwd.trim() !== "") {
|
|
177773
|
-
store.setDot("server.cwd",
|
|
178438
|
+
store.setDot("server.cwd", path69.resolve(cwd));
|
|
177774
178439
|
}
|
|
177775
178440
|
console.log(`
|
|
177776
178441
|
Config saved to ${configPath}`);
|
|
@@ -177787,7 +178452,7 @@ init_check_claude();
|
|
|
177787
178452
|
init_check_core_extensions();
|
|
177788
178453
|
init_check_extension_compilation();
|
|
177789
178454
|
import os11, { networkInterfaces } from "os";
|
|
177790
|
-
import
|
|
178455
|
+
import path70 from "path";
|
|
177791
178456
|
import { fileURLToPath as fileURLToPath7 } from "url";
|
|
177792
178457
|
import fs40 from "fs";
|
|
177793
178458
|
|
|
@@ -177861,9 +178526,9 @@ async function alreadyShown() {
|
|
|
177861
178526
|
}
|
|
177862
178527
|
}
|
|
177863
178528
|
async function markShown() {
|
|
177864
|
-
const
|
|
177865
|
-
await mkdir2(dirname2(
|
|
177866
|
-
await writeFile2(
|
|
178529
|
+
const path71 = getMarkerPath();
|
|
178530
|
+
await mkdir2(dirname2(path71), { recursive: true });
|
|
178531
|
+
await writeFile2(path71, JSON.stringify({ shownAt: Date.now() }));
|
|
177867
178532
|
}
|
|
177868
178533
|
async function maybeShowNewsletterTip() {
|
|
177869
178534
|
try {
|
|
@@ -178564,7 +179229,7 @@ if (nodeVersionIssue) {
|
|
|
178564
179229
|
console.error(formatDiagnostic(nodeVersionIssue));
|
|
178565
179230
|
process.exit(1);
|
|
178566
179231
|
}
|
|
178567
|
-
var __dirname2 =
|
|
179232
|
+
var __dirname2 = path70.dirname(fileURLToPath7(import.meta.url));
|
|
178568
179233
|
var knownCommands = /* @__PURE__ */ new Set([
|
|
178569
179234
|
"package",
|
|
178570
179235
|
"harness",
|
|
@@ -178718,7 +179383,7 @@ if (process.argv[2] === "community") {
|
|
|
178718
179383
|
);
|
|
178719
179384
|
Object.assign(childEnv, credentialEnv.pickCommunityCredentialEnv(rawProcessEnv));
|
|
178720
179385
|
const exitCode = await dispatcher.runCommunityDispatcher(process.argv.slice(3), {
|
|
178721
|
-
cliVersion: "0.126.
|
|
179386
|
+
cliVersion: "0.126.1",
|
|
178722
179387
|
dorkHome: DORK_HOME,
|
|
178723
179388
|
processEnv: childEnv,
|
|
178724
179389
|
parseRelease: (bytes) => releaseContract.parseCompatibleCommunityReleaseManifest(
|
|
@@ -178736,7 +179401,7 @@ if (process.argv[2] === "community") {
|
|
|
178736
179401
|
process.exit(1);
|
|
178737
179402
|
}
|
|
178738
179403
|
}
|
|
178739
|
-
var cliErrorReporter = initCliErrorReporting({ dorkHome: DORK_HOME, version: "0.126.
|
|
179404
|
+
var cliErrorReporter = initCliErrorReporting({ dorkHome: DORK_HOME, version: "0.126.1" });
|
|
178740
179405
|
var uninstallCliErrorHandlers = cliErrorReporter ? installCliErrorHandlers(cliErrorReporter) : void 0;
|
|
178741
179406
|
if (process.argv[2] === "doctor") {
|
|
178742
179407
|
process.env.DORK_HOME = DORK_HOME;
|
|
@@ -178746,7 +179411,7 @@ if (process.argv[2] === "doctor") {
|
|
|
178746
179411
|
if (process.argv[2] === "feedback") {
|
|
178747
179412
|
process.env.DORK_HOME = DORK_HOME;
|
|
178748
179413
|
const { runFeedback: runFeedback2 } = await Promise.resolve().then(() => (init_feedback2(), feedback_exports));
|
|
178749
|
-
process.exit(await runFeedback2(DORK_HOME, "0.126.
|
|
179414
|
+
process.exit(await runFeedback2(DORK_HOME, "0.126.1", process.argv.slice(3)));
|
|
178750
179415
|
}
|
|
178751
179416
|
if (process.argv[2] === "auth") {
|
|
178752
179417
|
process.env.DORK_HOME = DORK_HOME;
|
|
@@ -178845,7 +179510,7 @@ if (process.argv[2] === "agent" || process.argv[2] === "task" || process.argv[2]
|
|
|
178845
179510
|
}
|
|
178846
179511
|
}
|
|
178847
179512
|
const { runVersionDispatcher: runVersionDispatcher2 } = await Promise.resolve().then(() => (init_version5(), version_exports));
|
|
178848
|
-
process.exit(await runVersionDispatcher2("0.126.
|
|
179513
|
+
process.exit(await runVersionDispatcher2("0.126.1", DORK_HOME, subArgs));
|
|
178849
179514
|
}
|
|
178850
179515
|
var { values, positionals } = parseCliArgs();
|
|
178851
179516
|
if (positionals[0] && !knownCommands.has(positionals[0])) {
|
|
@@ -178939,14 +179604,14 @@ Examples:
|
|
|
178939
179604
|
process.exit(0);
|
|
178940
179605
|
}
|
|
178941
179606
|
if (values.version) {
|
|
178942
|
-
console.log("0.126.
|
|
179607
|
+
console.log("0.126.1");
|
|
178943
179608
|
process.exit(0);
|
|
178944
179609
|
}
|
|
178945
179610
|
if (values["post-install-check"]) {
|
|
178946
179611
|
const claudeFound = checkClaude();
|
|
178947
179612
|
const coreExtensionsFound = checkCoreExtensions();
|
|
178948
179613
|
const extensionsCompile = await checkExtensionCompilation();
|
|
178949
|
-
console.log(`dorkos ${"0.126.
|
|
179614
|
+
console.log(`dorkos ${"0.126.1"}`);
|
|
178950
179615
|
if (!coreExtensionsFound) {
|
|
178951
179616
|
console.log("Installation incomplete \u2014 bundled core extensions are missing.");
|
|
178952
179617
|
}
|
|
@@ -179023,7 +179688,7 @@ if (cliPort) {
|
|
|
179023
179688
|
process.env.DORKOS_PORT = configPort ? String(configPort) : String(DEFAULT_PORT);
|
|
179024
179689
|
}
|
|
179025
179690
|
process.env.NODE_ENV = "production";
|
|
179026
|
-
process.env.CLIENT_DIST_PATH =
|
|
179691
|
+
process.env.CLIENT_DIST_PATH = path70.join(__dirname2, "../client");
|
|
179027
179692
|
if (values.tunnel) process.env.TUNNEL_ENABLED = "true";
|
|
179028
179693
|
var tunnelAuthtoken = cfgMgr.getDot("tunnel.authtoken");
|
|
179029
179694
|
if (tunnelAuthtoken && !process.env.NGROK_AUTHTOKEN) {
|
|
@@ -179056,18 +179721,18 @@ if (values.open !== void 0) {
|
|
|
179056
179721
|
}
|
|
179057
179722
|
var cliDir = values.dir;
|
|
179058
179723
|
if (cliDir) {
|
|
179059
|
-
process.env.DORKOS_DEFAULT_CWD =
|
|
179724
|
+
process.env.DORKOS_DEFAULT_CWD = path70.resolve(cliDir);
|
|
179060
179725
|
} else if (!process.env.DORKOS_DEFAULT_CWD) {
|
|
179061
179726
|
const configCwd = cfgMgr.getDot("server.cwd");
|
|
179062
|
-
process.env.DORKOS_DEFAULT_CWD = configCwd ?
|
|
179727
|
+
process.env.DORKOS_DEFAULT_CWD = configCwd ? path70.resolve(configCwd) : process.cwd();
|
|
179063
179728
|
}
|
|
179064
179729
|
var cliBoundary = values.boundary;
|
|
179065
179730
|
if (cliBoundary) {
|
|
179066
|
-
process.env.DORKOS_BOUNDARY =
|
|
179731
|
+
process.env.DORKOS_BOUNDARY = path70.resolve(cliBoundary);
|
|
179067
179732
|
} else if (!process.env.DORKOS_BOUNDARY) {
|
|
179068
179733
|
const configBoundary = cfgMgr.getDot("server.boundary");
|
|
179069
179734
|
if (configBoundary) {
|
|
179070
|
-
process.env.DORKOS_BOUNDARY =
|
|
179735
|
+
process.env.DORKOS_BOUNDARY = path70.resolve(configBoundary);
|
|
179071
179736
|
}
|
|
179072
179737
|
}
|
|
179073
179738
|
var boundaryVal = process.env.DORKOS_BOUNDARY;
|
|
@@ -179079,7 +179744,7 @@ if (boundaryVal) {
|
|
|
179079
179744
|
}
|
|
179080
179745
|
var effectiveBoundary = process.env.DORKOS_BOUNDARY || home;
|
|
179081
179746
|
var resolvedDir = process.env.DORKOS_DEFAULT_CWD;
|
|
179082
|
-
if (resolvedDir !== effectiveBoundary && !resolvedDir.startsWith(effectiveBoundary +
|
|
179747
|
+
if (resolvedDir !== effectiveBoundary && !resolvedDir.startsWith(effectiveBoundary + path70.sep)) {
|
|
179083
179748
|
console.warn(
|
|
179084
179749
|
`[Warning] Default CWD "${resolvedDir}" is outside boundary "${effectiveBoundary}". Falling back to boundary root.`
|
|
179085
179750
|
);
|
|
@@ -179087,14 +179752,14 @@ if (resolvedDir !== effectiveBoundary && !resolvedDir.startsWith(effectiveBounda
|
|
|
179087
179752
|
}
|
|
179088
179753
|
var logLevelName = values["log-level"] || env4.LOG_LEVEL || cfgMgr.getDot("logging.level") || (env4.NODE_ENV === "production" ? "info" : "debug");
|
|
179089
179754
|
process.env.DORKOS_LOG_LEVEL = String(LOG_LEVEL_MAP[logLevelName] ?? 3);
|
|
179090
|
-
var envPath =
|
|
179755
|
+
var envPath = path70.join(process.env.DORKOS_DEFAULT_CWD, ".env");
|
|
179091
179756
|
if (fs40.existsSync(envPath)) {
|
|
179092
179757
|
const dotenv = await import("dotenv");
|
|
179093
179758
|
dotenv.config({ path: envPath, override: false });
|
|
179094
179759
|
}
|
|
179095
179760
|
uninstallCliErrorHandlers?.();
|
|
179096
179761
|
process.env.DORKOS_CLI_ENTRYPOINT = fileURLToPath7(import.meta.url);
|
|
179097
|
-
process.env.DORKOS_CLI_VERSION = "0.126.
|
|
179762
|
+
process.env.DORKOS_CLI_VERSION = "0.126.1";
|
|
179098
179763
|
var server;
|
|
179099
179764
|
try {
|
|
179100
179765
|
server = await import("../server/index.js");
|
|
@@ -179119,7 +179784,7 @@ var ansiReset = "\x1B[0m";
|
|
|
179119
179784
|
console.log("");
|
|
179120
179785
|
console.log(`${purple}${logo}${ansiReset}`);
|
|
179121
179786
|
console.log("");
|
|
179122
|
-
console.log(` DorkOS v${"0.126.
|
|
179787
|
+
console.log(` DorkOS v${"0.126.1"}`);
|
|
179123
179788
|
console.log(` Local: ${link(localUrl, localUrl)}`);
|
|
179124
179789
|
var nets = networkInterfaces();
|
|
179125
179790
|
var networkUrl = null;
|
|
@@ -179145,9 +179810,9 @@ if (shouldOpenBrowser && process.stdin.isTTY) {
|
|
|
179145
179810
|
const openCmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
|
|
179146
179811
|
exec(`${openCmd} ${localUrl}`);
|
|
179147
179812
|
}
|
|
179148
|
-
checkForUpdate("0.126.
|
|
179813
|
+
checkForUpdate("0.126.1").then((latestVersion) => {
|
|
179149
179814
|
if (latestVersion) {
|
|
179150
|
-
const msg = `Update available: ${"0.126.
|
|
179815
|
+
const msg = `Update available: ${"0.126.1"} \u2192 ${latestVersion}`;
|
|
179151
179816
|
const cmd = "Run npm install -g dorkos@latest to update";
|
|
179152
179817
|
const width = Math.max(msg.length, cmd.length) + 6;
|
|
179153
179818
|
const pad2 = (s2) => `\u2502 ${s2}${" ".repeat(width - s2.length - 6)} \u2502`;
|