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.
Files changed (309) hide show
  1. package/dist/bin/cli.js +1226 -561
  2. package/dist/browser/native/package-manifest.json +1 -1
  3. package/dist/browser/source-manifest.json +1 -1
  4. package/dist/client/assets/{AboutPage-2c9n8B32.js → AboutPage-DNd3mwur.js} +1 -1
  5. package/dist/client/assets/{ActivityErrorState-muwC_jif.js → ActivityErrorState-BlEsDhu6.js} +1 -1
  6. package/dist/client/assets/{ActivityPage-2aUz3zv0.js → ActivityPage-pJWfDAtq.js} +1 -1
  7. package/dist/client/assets/{ActivityRow-nQBqDCak.js → ActivityRow-DcMyqIbt.js} +1 -1
  8. package/dist/client/assets/{AdapterIcon-ChpyilnO.js → AdapterIcon-DQGwQ4aw.js} +1 -1
  9. package/dist/client/assets/{AdapterSetupWizard-DRKQp5Gh.js → AdapterSetupWizard-ClTTFSN8.js} +2 -2
  10. package/dist/client/assets/{AgentOptionRow-CeVPhvTq.js → AgentOptionRow-CHrQXa04.js} +1 -1
  11. package/dist/client/assets/{AgentPicker-D8YX1P_q.js → AgentPicker-BlEBEkwu.js} +1 -1
  12. package/dist/client/assets/{AgentRequestCard-refCLvuV.js → AgentRequestCard-MwbVsmZC.js} +3 -3
  13. package/dist/client/assets/{AppearancePage-BDTIp3j0.js → AppearancePage-C2aq_s3x.js} +1 -1
  14. package/dist/client/assets/ApplyToOverridesDialog-DZOUEUaq.js +1 -0
  15. package/dist/client/assets/{AttentionSignalRow-Dn4rP542.js → AttentionSignalRow-BlaPCr09.js} +1 -1
  16. package/dist/client/assets/{BaseTanStackRouterDevtoolsPanel-B-iktbLX-B0sy0nRk.js → BaseTanStackRouterDevtoolsPanel-B-iktbLX-DdbD6Zvu.js} +1 -1
  17. package/dist/client/assets/{BindingDialog-DMYB-vWm.js → BindingDialog-Cx-Ivbp4.js} +1 -1
  18. package/dist/client/assets/{BlintzCanvas-D9ZLEDXc.js → BlintzCanvas-Dk4R-tRN.js} +3 -3
  19. package/dist/client/assets/{CanvasCsvContent-DMqGpNWm.js → CanvasCsvContent-B8JYLp4U.js} +1 -1
  20. package/dist/client/assets/{CanvasFileContent-Bxhc86lv.js → CanvasFileContent-DAjXJnQu.js} +2 -2
  21. package/dist/client/assets/{CanvasModel3dContent-D783Ql7m.js → CanvasModel3dContent-DdF3BtnR.js} +2 -2
  22. package/dist/client/assets/{ChannelComposer-BNlD-d2W.js → ChannelComposer-R4MqXxIw.js} +5 -5
  23. package/dist/client/assets/{ChatAppsOff-eRAfqzJR.js → ChatAppsOff-lfRbITbe.js} +1 -1
  24. package/dist/client/assets/{CodeMirrorDiff-CqEUAG6G.js → CodeMirrorDiff-q-jovmzx.js} +1 -1
  25. package/dist/client/assets/{CodeMirrorEditor-BM1ANude.js → CodeMirrorEditor-C7xgL8qE.js} +1 -1
  26. package/dist/client/assets/{CommitmentList-C3QvbbGF.js → CommitmentList-gaA4uwIz.js} +1 -1
  27. package/dist/client/assets/{CommitmentsPage-bmqKNd-Z.js → CommitmentsPage-BJSRJ2-C.js} +1 -1
  28. package/dist/client/assets/{ComputerResourceView-78falOZG.js → ComputerResourceView-CrT_C0XS.js} +1 -1
  29. package/dist/client/assets/{ComputerViewer-DZ2RiDbn.js → ComputerViewer-DnD5bw95.js} +1 -1
  30. package/dist/client/assets/{ConnectionAccessLists-CXsNyR4U.js → ConnectionAccessLists-B0ZoSb-o.js} +1 -1
  31. package/dist/client/assets/{ConnectionsPage-bpkRfRRK.js → ConnectionsPage-D0UCC0lO.js} +1 -1
  32. package/dist/client/assets/{ConventionPage-rYtICYjS.js → ConventionPage-BN6W7-LW.js} +1 -1
  33. package/dist/client/assets/{ExtensionPageRoute-DXTqUrR4.js → ExtensionPageRoute-BiTCSGKw.js} +2 -2
  34. package/dist/client/assets/{FloatingTanStackRouterDevtools-CqogiFob-CCNB3_Gb.js → FloatingTanStackRouterDevtools-CqogiFob-Bodk_Y7V.js} +1 -1
  35. package/dist/client/assets/{ForwardConsentHost-BfVnJ6oD.js → ForwardConsentHost-CgfhSAU6.js} +1 -1
  36. package/dist/client/assets/HandlePage-DCG-qQFm.js +1 -0
  37. package/dist/client/assets/{HeartbeatPage-DdAfcR81.js → HeartbeatPage-D1G1-DHk.js} +1 -1
  38. package/dist/client/assets/{KeyEntry-CR7GBqXf.js → KeyEntry-4udAjn0w.js} +1 -1
  39. package/dist/client/assets/{LexicalField-RAoub3wq.js → LexicalField-gOrkh_4N.js} +1 -1
  40. package/dist/client/assets/{ManagesPage-CEhYj9ov.js → ManagesPage-B-RoT8ya.js} +1 -1
  41. package/dist/client/assets/{Marketplace-DtxHDbF4.js → Marketplace-B_NBPebW.js} +1 -1
  42. package/dist/client/assets/{MarketplaceSourcesView-CSFvFtV_.js → MarketplaceSourcesView-DY3WqXwE.js} +1 -1
  43. package/dist/client/assets/{McpAppFrame-1mPdRK9p.js → McpAppFrame-D7EnUa4z.js} +2 -2
  44. package/dist/client/assets/{McpSigninBody--HfjMnE1.js → McpSigninBody-BUUEs-bT.js} +1 -1
  45. package/dist/client/assets/{Model3dViewer-BT2SY67i.js → Model3dViewer-cLheCoqc.js} +1 -1
  46. package/dist/client/assets/NamePage-CYVVUDVS.js +1 -0
  47. package/dist/client/assets/{NewDirectMessageMenu-QUtJTzKI.js → NewDirectMessageMenu-ok_-eb2s.js} +1 -1
  48. package/dist/client/assets/{NotificationsPage-D3fleW0i.js → NotificationsPage-D-8cloSV.js} +1 -1
  49. package/dist/client/assets/{OpenMeshSwitch-8WEn0WrA.js → OpenMeshSwitch-D_qdw4sU.js} +2 -2
  50. package/dist/client/assets/OperatorIdentityForm-ClEW_TUR.js +1 -0
  51. package/dist/client/assets/{PermissionHistory-5stLHBu8.js → PermissionHistory-CYOX0EOM.js} +1 -1
  52. package/dist/client/assets/PermissionsPage-ah-JDHZr.js +1 -0
  53. package/dist/client/assets/{PersonalityPopover-DIbsJ6HP.js → PersonalityPopover-Ciu5HC-v.js} +1 -1
  54. package/dist/client/assets/PhotoPage-NO6Yrpi-.js +1 -0
  55. package/dist/client/assets/{PreviewRefusedNotice-CjT7jQ45.js → PreviewRefusedNotice-BxhPcov8.js} +1 -1
  56. package/dist/client/assets/{ProfileFields-gZNaFBow.js → ProfileFields-BuIUDvpL.js} +1 -1
  57. package/dist/client/assets/{ProfilePanelContainer-DYf7L8xJ.js → ProfilePanelContainer-BFeuTypW.js} +1 -1
  58. package/dist/client/assets/{ProfileRolePicker-DclYXFSP.js → ProfileRolePicker-Be4vB80d.js} +1 -1
  59. package/dist/client/assets/{PromptSuggestionChips-k9HolS90.js → PromptSuggestionChips-bZ_zHQ5j.js} +1 -1
  60. package/dist/client/assets/{ReportsToPopover-Bh5KrFbJ.js → ReportsToPopover-BqVUWSAd.js} +1 -1
  61. package/dist/client/assets/{RoomSurface-32U7Wl6Z.js → RoomSurface-DSjUeoAV.js} +1 -1
  62. package/dist/client/assets/{RoomsPage-sdMZgHla.js → RoomsPage-YtoZPygh.js} +1 -1
  63. package/dist/client/assets/{RunsOnPopover-B5_Jz7ir.js → RunsOnPopover-BxTUZpOj.js} +1 -1
  64. package/dist/client/assets/{RuntimeConnectFlow-C_6ozpAK.js → RuntimeConnectFlow-DdhsdAJI.js} +1 -1
  65. package/dist/client/assets/{RuntimeSetupDialog-BDvzruM4.js → RuntimeSetupDialog-BrSBwG4u.js} +1 -1
  66. package/dist/client/assets/{SeenDevices-CZ--8ljN.js → SeenDevices-CJ4v3o5k.js} +2 -2
  67. package/dist/client/assets/{SessionsPage-BKyrJh1O.js → SessionsPage-TT3p1ADx.js} +1 -1
  68. package/dist/client/assets/{SettingsDialog-E5hPag3F.js → SettingsDialog-CV24vMhr.js} +4 -4
  69. package/dist/client/assets/{SkillsPage-BeL6zfgw.js → SkillsPage-DMoOe_ed.js} +1 -1
  70. package/dist/client/assets/{TaskDialogWrapper-B-IP5hYv.js → TaskDialogWrapper-Df3Su6Ao.js} +1 -1
  71. package/dist/client/assets/{TasksEmptyState-BcftWVbk.js → TasksEmptyState-Bno8iZfM.js} +2 -2
  72. package/dist/client/assets/{TasksPage-CmroTI1v.js → TasksPage-Cml1MQA0.js} +1 -1
  73. package/dist/client/assets/{TeamComputerEntry-DbfoZrZz.js → TeamComputerEntry-DqZRmbw6.js} +1 -1
  74. package/dist/client/assets/{ToolsPage-h-PS45fZ.js → ToolsPage-7ltzJ0Tl.js} +1 -1
  75. package/dist/client/assets/{TopologyGraph-Bk_0y0Yy.js → TopologyGraph-B2LvNaci.js} +1 -1
  76. package/dist/client/assets/{TourHost-D4La-1-E.js → TourHost-D0yftrMH.js} +1 -1
  77. package/dist/client/assets/{UnlinkDialog-CWd4fhT4.js → UnlinkDialog-Bo_AjY1w.js} +1 -1
  78. package/dist/client/assets/{UnreadDivider-Bvg9QLn9.js → UnreadDivider-WmPtKB4_.js} +1 -1
  79. package/dist/client/assets/{WidgetErrorCard-DictdlWO.js → WidgetErrorCard-CPcqdG0j.js} +6 -6
  80. package/dist/client/assets/WithheldExtensionsNotice-pF93YZXc.js +1 -0
  81. package/dist/client/assets/{WorkView-DxThzZ0w.js → WorkView-hgkQKS3s.js} +1 -1
  82. package/dist/client/assets/_shell-BrV7uqZF.js +80 -0
  83. package/dist/client/assets/{_shell._home-CBNsPEH4.js → _shell._home-geuB-5H5.js} +1 -1
  84. package/dist/client/assets/_shell._home.activity-DPVZ1nh6.js +1 -0
  85. package/dist/client/assets/_shell._home.index-TWvjPAWy.js +3 -0
  86. package/dist/client/assets/_shell._home.tasks-ZXMaDkUK.js +1 -0
  87. package/dist/client/assets/{_shell._home.workspaces-3R3VtH7x.js → _shell._home.workspaces-Df9guoYs.js} +1 -1
  88. package/dist/client/assets/{_shell.channels-DRslcaiA.js → _shell.channels-Bpp1mkMp.js} +1 -1
  89. package/dist/client/assets/{_shell.connections-BPQxNUPD.js → _shell.connections-BPwFAyOF.js} +1 -1
  90. package/dist/client/assets/{_shell.feedback-requests-DkXEk3qm.js → _shell.feedback-requests-BpBQUL2J.js} +2 -2
  91. package/dist/client/assets/_shell.marketplace-cDEjeXV8.js +1 -0
  92. package/dist/client/assets/_shell.marketplace_.sources-C8vj4_eL.js +1 -0
  93. package/dist/client/assets/_shell.session-CsYuj8kc.js +1 -0
  94. package/dist/client/assets/{_shell.team-CZu-l34d.js → _shell.team-IhRAcCx5.js} +3 -3
  95. package/dist/client/assets/{_shell.threads-Cz-EZQXr.js → _shell.threads-g5dMzDb-.js} +1 -1
  96. package/dist/client/assets/_shell.x._extensionId-Cdkx4eoj.js +1 -0
  97. package/dist/client/assets/_shell.x._extensionId_._-Cdkx4eoj.js +1 -0
  98. package/dist/client/assets/{abnfDiagram-WEYOIA3C-4hI8_uRi.js → abnfDiagram-WEYOIA3C-DMyEQ0uA.js} +1 -1
  99. package/dist/client/assets/{access-copy-BegDAoeR.js → access-copy-BPHkp17T.js} +1 -1
  100. package/dist/client/assets/{arc-DgydwPM5.js → arc-Bick8t6f.js} +1 -1
  101. package/dist/client/assets/{architectureDiagram-ZHVYKT53-4kexDkbn.js → architectureDiagram-ZHVYKT53-RFf4UrPQ.js} +1 -1
  102. package/dist/client/assets/{banner-CYV5jQI0.js → banner-7ifL3s-E.js} +1 -1
  103. package/dist/client/assets/{blockDiagram-RJAE7QA3-BUP4L5_m.js → blockDiagram-RJAE7QA3-D1AK_MVZ.js} +1 -1
  104. package/dist/client/assets/{c4Diagram-XDPPPE54-B4HK3S3o.js → c4Diagram-XDPPPE54-ljhZv1XJ.js} +1 -1
  105. package/dist/client/assets/{card-6VNSI3kT.js → card-Dv_Aomu3.js} +1 -1
  106. package/dist/client/assets/channel-rtfAMlVl.js +1 -0
  107. package/dist/client/assets/{chunk-2E7WHVMD-Bhw5hCVI.js → chunk-2E7WHVMD-DbW34T1y.js} +1 -1
  108. package/dist/client/assets/{chunk-2Q5K7J3B-CeUgfCvO.js → chunk-2Q5K7J3B-2rza71Au.js} +1 -1
  109. package/dist/client/assets/{chunk-4EMNKR2T-DqSZunXx.js → chunk-4EMNKR2T-B4wdt-9S.js} +1 -1
  110. package/dist/client/assets/{chunk-55XCU76K-Bigp9-bU.js → chunk-55XCU76K-CdGphgDA.js} +1 -1
  111. package/dist/client/assets/{chunk-5VM5RSS4-DF1L8DrH.js → chunk-5VM5RSS4-B4YPDQYw.js} +1 -1
  112. package/dist/client/assets/{chunk-JWPE2WC7-lcFap_43.js → chunk-JWPE2WC7-CwQLcazz.js} +1 -1
  113. package/dist/client/assets/{chunk-VQ5W62QI-Bgmsy9NF.js → chunk-VQ5W62QI-B73o-HC8.js} +1 -1
  114. package/dist/client/assets/{chunk-XXDRQBXY-DFFzLm_u.js → chunk-XXDRQBXY-Cd57QkHJ.js} +1 -1
  115. package/dist/client/assets/{chunk-ZCHMQSOR-B4aJwBdo.js → chunk-ZCHMQSOR-BYXpbBGk.js} +2 -2
  116. package/dist/client/assets/{classDiagram-v2-4MYWR3UA-BdUAMGnS.js → classDiagram-v2-4MYWR3UA-Cp5KSk7m.js} +1 -1
  117. package/dist/client/assets/{command-Dz2pZLle.js → command-8GHnkf0M.js} +1 -1
  118. package/dist/client/assets/{cose-bilkent-JH36ORCC-BdJxQmWe.js → cose-bilkent-JH36ORCC-BQ2-jSL1.js} +1 -1
  119. package/dist/client/assets/{cpu-CjKJ8pVl.js → cpu-DlVEjqG9.js} +1 -1
  120. package/dist/client/assets/{cynefin-EF2NZ3EQ-BvnDWKe0.js → cynefin-EF2NZ3EQ-BipxprT2.js} +1 -1
  121. package/dist/client/assets/{cynefinDiagram-WF24UDRP-DKL8UyvS.js → cynefinDiagram-WF24UDRP-BzzsLOi7.js} +1 -1
  122. package/dist/client/assets/{dagre-NK4GIZVX-CCuJpxlY.js → dagre-NK4GIZVX-Xv2f8ipe.js} +1 -1
  123. package/dist/client/assets/{diagram-CBK3MWTC-C1jeuv8r.js → diagram-CBK3MWTC-DeSTMYz_.js} +1 -1
  124. package/dist/client/assets/{diagram-I5XIIV2D-CSnTyOU0.js → diagram-I5XIIV2D-BY785yX3.js} +1 -1
  125. package/dist/client/assets/{diagram-ODIL2UCW-9w6q1YKi.js → diagram-ODIL2UCW-BYlRM0z6.js} +1 -1
  126. package/dist/client/assets/{diagram-PFBEJUXE-BMFBmD0P.js → diagram-PFBEJUXE-Dy4p9mkx.js} +1 -1
  127. package/dist/client/assets/{diagram-RJA3I4VV-D9Utl6qX.js → diagram-RJA3I4VV-Dq8FUki2.js} +1 -1
  128. package/dist/client/assets/{diagram-TYUNFSNR-u_ogc51l.js → diagram-TYUNFSNR-Dzm6245A.js} +1 -1
  129. package/dist/client/assets/{ebnfDiagram-V4P3TTPT-Bg_smbFH.js → ebnfDiagram-V4P3TTPT-dIL65PnI.js} +1 -1
  130. package/dist/client/assets/{elk-QONTBCTQ-CtuwbIK2.js → elk-QONTBCTQ-W6PbkfOO.js} +1 -1
  131. package/dist/client/assets/{empty-state-CbFKhqwB.js → empty-state-BQbeqUqX.js} +1 -1
  132. package/dist/client/assets/{erDiagram-KYQIGQAA-MlvYHdZ7.js → erDiagram-KYQIGQAA-Di7NEzZi.js} +1 -1
  133. package/dist/client/assets/{execution-config-BjNjQoBp.js → execution-config-CievpGFf.js} +1 -1
  134. package/dist/client/assets/{file-JokR8lB2.js → file-7wx4V3ce.js} +1 -1
  135. package/dist/client/assets/{file-exclamation-point-sl45DZYe.js → file-exclamation-point-hN_yiJcG.js} +1 -1
  136. package/dist/client/assets/{file-text-C4PxLfBm.js → file-text-C7UYBoWy.js} +1 -1
  137. package/dist/client/assets/{find-latest-widget-fence-Bc1LICCy.js → find-latest-widget-fence-BQipW7Cp.js} +5 -5
  138. package/dist/client/assets/{flowDiagram-IUGLLWBU-BlrKbUnh.js → flowDiagram-IUGLLWBU-BBkZgKdO.js} +1 -1
  139. package/dist/client/assets/{form-1NlezfMg.js → form-CY71tX5p.js} +1 -1
  140. package/dist/client/assets/{format-cron-C57sE3sK.js → format-cron-CE_acG1K.js} +1 -1
  141. package/dist/client/assets/{ganttDiagram-R7GPNTJY-BhCCQ-d7.js → ganttDiagram-R7GPNTJY-CWk4fs8K.js} +1 -1
  142. package/dist/client/assets/{git-branch-BXEb1Sqq.js → git-branch-CI-azrJf.js} +1 -1
  143. package/dist/client/assets/{gitGraphDiagram-PDYL7XHY-Chl1aqHg.js → gitGraphDiagram-PDYL7XHY-DVZX00fz.js} +1 -1
  144. package/dist/client/assets/{graph-DIIpUxLd.js → graph-D6ajmsGE.js} +1 -1
  145. package/dist/client/assets/{heart-CUs7jdhV.js → heart-CFZ56Xlf.js} +1 -1
  146. package/dist/client/assets/{highlighted-body-KPVGNVTW-DlDHGjld.js → highlighted-body-KPVGNVTW-B3fBty4y.js} +1 -1
  147. package/dist/client/assets/{image-lightbox-BczXKBTZ.js → image-lightbox-BLGg6wh_.js} +1 -1
  148. package/dist/client/assets/{image-off-Ch98GGBJ.js → image-off-C6e_AfQT.js} +1 -1
  149. package/dist/client/assets/{index-BC41bN42.js → index-8hFGmOr3.js} +1 -1
  150. package/dist/client/assets/{index-BVjrgWDa.js → index-99DlkqSD.js} +1 -1
  151. package/dist/client/assets/{index-B0p2_o3r.js → index-BA45jX_i.js} +1 -1
  152. package/dist/client/assets/{index-Ev7FZl9a.js → index-BFF1EyA0.js} +1 -1
  153. package/dist/client/assets/{index-CQTeDD0B.js → index-BG1A_ge2.js} +1 -1
  154. package/dist/client/assets/{index-CnNGTb8f.js → index-BKcJmqqf.js} +1 -1
  155. package/dist/client/assets/{index-37h1E-65.js → index-BV1EGYfS.js} +1 -1
  156. package/dist/client/assets/{index-Cw0QRsnv.js → index-Bd8shyC1.js} +1 -1
  157. package/dist/client/assets/{index-CoHeCySh.js → index-Bs4lTtGw.js} +1 -1
  158. package/dist/client/assets/{index-CFJcOzPD.js → index-BwXTRvBg.js} +1 -1
  159. package/dist/client/assets/{index-CYhf-E_N.js → index-C41IirFx.js} +1 -1
  160. package/dist/client/assets/{index-DMfV6rUz.js → index-CCrXd3Yp.js} +1 -1
  161. package/dist/client/assets/{index-ByIDaFWv.js → index-CERazZNv.js} +1 -1
  162. package/dist/client/assets/{index-DzLIbXMR.js → index-CFtdiRm4.js} +1 -1
  163. package/dist/client/assets/{index-hyqRnlFg.js → index-CIDKu-yP.js} +1 -1
  164. package/dist/client/assets/{index-8FrM4Unx.js → index-CYluA-8M.js} +1 -1
  165. package/dist/client/assets/{index-BQlnEL5t.js → index-CaWLNyFj.js} +1 -1
  166. package/dist/client/assets/{index-DwrBsA10.js → index-Cm9hYycN.js} +213 -213
  167. package/dist/client/assets/{index-HnW-eS5i.js → index-CrLfzo3p.js} +1 -1
  168. package/dist/client/assets/{index-Cn1ZEy3S.js → index-CtoQYN47.js} +1 -1
  169. package/dist/client/assets/{index-Czar7aPT.js → index-D2sEXpm3.js} +2 -2
  170. package/dist/client/assets/{index-D_9H4FdK.js → index-D2uFkg04.js} +1 -1
  171. package/dist/client/assets/{index-D6NjBiAq.js → index-D8e8MIlc.js} +1 -1
  172. package/dist/client/assets/{index-B0q1o1JU.js → index-DCkLt2hP.js} +1 -1
  173. package/dist/client/assets/{index-Cnjpi7ar.js → index-DLMCPhNA.js} +1 -1
  174. package/dist/client/assets/{index-0MDZSAdr.js → index-DLpEKf-i.js} +1 -1
  175. package/dist/client/assets/{index-rKEUwjq8.js → index-DPRUHxoN.js} +1 -1
  176. package/dist/client/assets/{index-BRyEtRBO.js → index-DY3oKB_B.js} +1 -1
  177. package/dist/client/assets/{index-D1Be28yK.js → index-DYEHGDEV.js} +1 -1
  178. package/dist/client/assets/{index-BwHCH3tE.js → index-DbYzwbJb.js} +1 -1
  179. package/dist/client/assets/{index-pQstFziR.js → index-DdV8QyX6.js} +3 -3
  180. package/dist/client/assets/{index-BzqkXlms.js → index-DfhxqF8Y.js} +1 -1
  181. package/dist/client/assets/{index-CSOhBvPV.js → index-DgckOojV.js} +1 -1
  182. package/dist/client/assets/{index-vU7itvE8.js → index-Djn4XFpD.js} +1 -1
  183. package/dist/client/assets/{index-BiyMpL0z.js → index-Dq324laj.js} +1 -1
  184. package/dist/client/assets/{index-CaVP52c1.js → index-Dqk3QNzm.js} +1 -1
  185. package/dist/client/assets/{index-BNJa5z6K.js → index-DtHKgyyZ.js} +6 -6
  186. package/dist/client/assets/index-EN1TLx2G.js +1 -0
  187. package/dist/client/assets/{index-BAnl5kwm.js → index-MoiusTJb.js} +1 -1
  188. package/dist/client/assets/index-N177Jgr-.js +1 -0
  189. package/dist/client/assets/{index-DlZ77Qfj.js → index-RwED5fTx.js} +1 -1
  190. package/dist/client/assets/{index-DaZdDh7o.js → index-iT7Ifblv.js} +1 -1
  191. package/dist/client/assets/{index-slBSiB-H.js → index-wjGuFbZC.js} +1 -1
  192. package/dist/client/assets/{index.esm-DM8Bqi3n.js → index.esm-CkNwJHAt.js} +1 -1
  193. package/dist/client/assets/{infoDiagram-MVDRKAX5-C0p1eP9j.js → infoDiagram-MVDRKAX5-BZXw_Lom.js} +1 -1
  194. package/dist/client/assets/{inline-code-CNmpgW3O.js → inline-code-DjwtR-ll.js} +1 -1
  195. package/dist/client/assets/{ishikawaDiagram-HPEHV2GE-COdxgYUT.js → ishikawaDiagram-HPEHV2GE-C5w4s3jl.js} +1 -1
  196. package/dist/client/assets/{journeyDiagram-BOSHW7O7-C84Ny9n9.js → journeyDiagram-BOSHW7O7-BebIDsWW.js} +1 -1
  197. package/dist/client/assets/{kanban-definition-FNSA4HC5-ECSXhFX0.js → kanban-definition-FNSA4HC5-BDyRuDB8.js} +1 -1
  198. package/dist/client/assets/{layers-JgRwJGyf.js → layers-C7PyFRXp.js} +1 -1
  199. package/dist/client/assets/{lightbulb-BhQB8sFP.js → lightbulb-C5ICPq-a.js} +1 -1
  200. package/dist/client/assets/{link-2-B4byjdgg.js → link-2-UFQfJbpL.js} +1 -1
  201. package/dist/client/assets/{list-runtime-types-M5_gxIg1.js → list-runtime-types-D9dCsbEf.js} +1 -1
  202. package/dist/client/assets/{markdown-content-C3qWcii6.js → markdown-content-6YMskxmm.js} +1 -1
  203. package/dist/client/assets/{mention-pill-DUbgdKmA.js → mention-pill-B0W4IHW4.js} +1 -1
  204. package/dist/client/assets/{mermaid.core-BQiwaVjZ.js → mermaid.core-7GExh8O_.js} +4 -4
  205. package/dist/client/assets/{message-square-off-AjtFFe_u.js → message-square-off-BPdN3pJK.js} +1 -1
  206. package/dist/client/assets/{mindmap-definition-6OY57UG3-BfA6EqgP.js → mindmap-definition-6OY57UG3-0Lt_mZ3n.js} +1 -1
  207. package/dist/client/assets/{more-details-itSF4Fah.js → more-details-7N--psJ3.js} +1 -1
  208. package/dist/client/assets/{owner-notice-B6JRjE_c.js → owner-notice-nPsTnsXw.js} +1 -1
  209. package/dist/client/assets/{package-5YQSitlR.js → package-CC-1rWTp.js} +1 -1
  210. package/dist/client/assets/{page-container-DBPUOYYM.js → page-container-BHbpFrD0.js} +1 -1
  211. package/dist/client/assets/{pane-resize-handle-Kwb3zKa6.js → pane-resize-handle-DIFmKCMF.js} +1 -1
  212. package/dist/client/assets/{paperclip-IRKZTEQw.js → paperclip-Byuc-1Au.js} +1 -1
  213. package/dist/client/assets/{path-input-BHkA4fFw.js → path-input-Djx0L5Em.js} +1 -1
  214. package/dist/client/assets/{pegDiagram-ECIUJNBX-CqIy9WDe.js → pegDiagram-ECIUJNBX-Xa1X09Wi.js} +1 -1
  215. package/dist/client/assets/{pieDiagram-GNMPY74T-C5yI3cvV.js → pieDiagram-GNMPY74T-CAKIXX0r.js} +1 -1
  216. package/dist/client/assets/{plug-CupdBXaG.js → plug-w8CfVLDw.js} +1 -1
  217. package/dist/client/assets/{primer-trigger-Ci_XRRfX.js → primer-trigger-D-tDGGyD.js} +2 -2
  218. package/dist/client/assets/{profile-errors-aEsWNifs.js → profile-errors-CV4pLH99.js} +1 -1
  219. package/dist/client/assets/{progress-Bpmb837n.js → progress-BMUhJjlP.js} +1 -1
  220. package/dist/client/assets/{quadrantDiagram-D57K4MC3-DyCDNvk7.js → quadrantDiagram-D57K4MC3-c8r8UetD.js} +1 -1
  221. package/dist/client/assets/{query-error-state-s6AJaHa3.js → query-error-state-BjXOCuG9.js} +1 -1
  222. package/dist/client/assets/{radio-Ci6Ghks8.js → radio-mxLzWnFP.js} +1 -1
  223. package/dist/client/assets/{railroadDiagram-Y72NRBL7-B3u1B937.js → railroadDiagram-Y72NRBL7-Bbj-1mVs.js} +1 -1
  224. package/dist/client/assets/{registry-NGfn1R2_.js → registry-CcYIR8Nc.js} +4 -4
  225. package/dist/client/assets/registry-DgRI6STP.js +1 -0
  226. package/dist/client/assets/{relay-trace-schemas-hOFIzdY-.js → relay-trace-schemas-DpSy65Yn.js} +2 -2
  227. package/dist/client/assets/{repeat-B1S2ceC2.js → repeat-4eTQX5mk.js} +1 -1
  228. package/dist/client/assets/{requirementDiagram-EQYSW5RA-CdG-unip.js → requirementDiagram-EQYSW5RA-geZa9MpH.js} +1 -1
  229. package/dist/client/assets/{room-files-source-J7gnN1gx.js → room-files-source-I4_DLrZD.js} +1 -1
  230. package/dist/client/assets/{rotate-ccw-clock-7Q2akPFi.js → rotate-ccw-clock-CXa8qFYi.js} +1 -1
  231. package/dist/client/assets/{rotate-cw-DK3Rzmlh.js → rotate-cw-DHEYuGSm.js} +1 -1
  232. package/dist/client/assets/{sankeyDiagram-SY24JHO5-D3Z4Qk2b.js → sankeyDiagram-SY24JHO5-Srm25ry_.js} +1 -1
  233. package/dist/client/assets/{scroll-area-6Gelypei.js → scroll-area-Bjsw3VpU.js} +1 -1
  234. package/dist/client/assets/search-x-ChUxCHLH.js +6 -0
  235. package/dist/client/assets/{sequenceDiagram-BLEHNHQU-RXPgeLr6.js → sequenceDiagram-BLEHNHQU-CX9mhXoN.js} +1 -1
  236. package/dist/client/assets/{shield-x-D8lJ0Op0.js → shield-x-CLFQxyuz.js} +1 -1
  237. package/dist/client/assets/{signed-in-NOeTLLso.js → signed-in-Bcgd3tr-.js} +1 -1
  238. package/dist/client/assets/{sizeCapture-INFHLROL-q7qki1pK.js → sizeCapture-INFHLROL-CsGk_egJ.js} +1 -1
  239. package/dist/client/assets/{soul-file-DTEcjDxP.js → soul-file-ndv3pF6l.js} +1 -1
  240. package/dist/client/assets/{stateDiagram-v2-A6IESKWZ-DFs6IVbj.js → stateDiagram-v2-A6IESKWZ-B0UoiZA7.js} +1 -1
  241. package/dist/client/assets/{swimlanes-B3ENRKFQ-D1A-3JE-.js → swimlanes-B3ENRKFQ-Z8KKQyjo.js} +1 -1
  242. package/dist/client/assets/swimlanesDiagram-AYQRV4AK-CL3LnYRl.js +8 -0
  243. package/dist/client/assets/{table-CuBPM_bg.js → table-hGD-o8Hv.js} +1 -1
  244. package/dist/client/assets/{timeline-definition-JXYKGLGB-CLHy0rAb.js → timeline-definition-JXYKGLGB-MiLN-bA8.js} +1 -1
  245. package/dist/client/assets/{trust-posture-BXXe8F8n.js → trust-posture-bENWFq73.js} +1 -1
  246. package/dist/client/assets/{unplug-Cuej6sM6.js → unplug-CuyYU8At.js} +1 -1
  247. package/dist/client/assets/{unverified-catalog-notice-BbK4SCJp.js → unverified-catalog-notice-Buza_8FG.js} +1 -1
  248. package/dist/client/assets/{use-adapter-catalog-Cy7ENVZN.js → use-adapter-catalog-xRiWVPVu.js} +1 -1
  249. package/dist/client/assets/{use-bindings-Tj0BcF4m.js → use-bindings-BVGWiy25.js} +1 -1
  250. package/dist/client/assets/{use-composer-prefs-BrQVpwRi.js → use-composer-prefs-DptaPZ0D.js} +1 -1
  251. package/dist/client/assets/{use-connector-management-CLZQXgln.js → use-connector-management-SgpNguoX.js} +1 -1
  252. package/dist/client/assets/{use-deep-link-scroll-BeqtUhj2.js → use-deep-link-scroll-_gvpwuhX.js} +1 -1
  253. package/dist/client/assets/{use-delete-binding-d7ii9iFQ.js → use-delete-binding-MWO6gLCZ.js} +1 -1
  254. package/dist/client/assets/{use-dev-links-MYOV3h2q.js → use-dev-links-jwjGn-ea.js} +1 -1
  255. package/dist/client/assets/{use-direct-message-panel-C_lXDYnB.js → use-direct-message-panel-C_5C3BJN.js} +1 -1
  256. package/dist/client/assets/{use-external-adapter-catalog-kMFSEJGV.js → use-external-adapter-catalog-FcCuR-0-.js} +1 -1
  257. package/dist/client/assets/{use-full-activity-feed-MFSkvnza.js → use-full-activity-feed-vIOHR9AY.js} +1 -1
  258. package/dist/client/assets/use-is-below-desktop-CN5C6wtD.js +1 -0
  259. package/dist/client/assets/{use-local-browser-1oVtlmXD.js → use-local-browser-DZxfbzlC.js} +1 -1
  260. package/dist/client/assets/{use-mesh-topology-BJs6M6kh.js → use-mesh-topology-Dc-oTr32.js} +1 -1
  261. package/dist/client/assets/{use-mounted-ref-DitdlmSI.js → use-mounted-ref-DibgeFBj.js} +1 -1
  262. package/dist/client/assets/{use-notification-prefs-CXbRTRLF.js → use-notification-prefs-C7VkjjTj.js} +1 -1
  263. package/dist/client/assets/use-pending-read-D5ur6NeX.js +1 -0
  264. package/dist/client/assets/{use-personality-commit-DQrWyVGT.js → use-personality-commit-ltA6XvBX.js} +1 -1
  265. package/dist/client/assets/{use-promo-activation-CgdBHk2f.js → use-promo-activation-C-Rnqz23.js} +3 -3
  266. package/dist/client/assets/{use-promo-dismissals-DprcDmfs.js → use-promo-dismissals-BmshxhAa.js} +1 -1
  267. package/dist/client/assets/{use-pulse-freshness-BtMzHCs3.js → use-pulse-freshness-z2WkS2Ys.js} +1 -1
  268. package/dist/client/assets/{use-relay-config-CGBlgXC2.js → use-relay-config-DaDq9PpU.js} +1 -1
  269. package/dist/client/assets/{use-room-follow-claim-Db5U7kWT.js → use-room-follow-claim-C3SS0Gw2.js} +1 -1
  270. package/dist/client/assets/{use-room-sessions-K6mdH-Tb.js → use-room-sessions-WV0Pz8--.js} +1 -1
  271. package/dist/client/assets/{use-roving-tab-list-B2zxa_F_.js → use-roving-tab-list-DVFfvzml.js} +1 -1
  272. package/dist/client/assets/{use-session-canvas-D4G5fO_a.js → use-session-canvas-Rz7f3BhB.js} +8 -8
  273. package/dist/client/assets/{use-status-budget-UccdTZ7o.js → use-status-budget-tnw0joN-.js} +3 -3
  274. package/dist/client/assets/{use-transform-BBj2pwbo.js → use-transform-B4y73VwQ.js} +1 -1
  275. package/dist/client/assets/{use-unclaimed-chats-BidDnyt8.js → use-unclaimed-chats-BkPZ0agl.js} +1 -1
  276. package/dist/client/assets/use-update-config-et3Tcr-G.js +1 -0
  277. package/dist/client/assets/{useMutationState-RYxTf1aD.js → useMutationState-BTgljbHC.js} +1 -1
  278. package/dist/client/assets/{usecaseDiagram-WPOLBNNX-Bjmcc2gK.js → usecaseDiagram-WPOLBNNX-CwDaydYb.js} +1 -1
  279. package/dist/client/assets/{vennDiagram-Q3Y3IDCW-Cd6C9CxW.js → vennDiagram-Q3Y3IDCW-B9DrYXJV.js} +1 -1
  280. package/dist/client/assets/{wardleyDiagram-IVAIDKWA-CzWWmwUL.js → wardleyDiagram-IVAIDKWA-fP8m3n4J.js} +1 -1
  281. package/dist/client/assets/{xychartDiagram-4URNHDU4-DSUn9rhA.js → xychartDiagram-4URNHDU4-C52wlqaB.js} +1 -1
  282. package/dist/client/index.html +1 -1
  283. package/dist/server/index.js +74212 -71814
  284. package/dist/server/index.js.map +2 -2
  285. package/package.json +5 -5
  286. package/dist/client/assets/ApplyToOverridesDialog-C-XL9N4W.js +0 -1
  287. package/dist/client/assets/HandlePage-BH_G4sMV.js +0 -1
  288. package/dist/client/assets/NamePage-CaJsVRhh.js +0 -1
  289. package/dist/client/assets/OperatorIdentityForm-BRKAQS0D.js +0 -1
  290. package/dist/client/assets/PermissionsPage-C2pB1TCJ.js +0 -1
  291. package/dist/client/assets/PhotoPage-33Xh8sq1.js +0 -1
  292. package/dist/client/assets/_shell-CX_gaQPE.js +0 -80
  293. package/dist/client/assets/_shell._home.activity-DpSGWVSW.js +0 -1
  294. package/dist/client/assets/_shell._home.index-BWH93iWg.js +0 -3
  295. package/dist/client/assets/_shell._home.tasks-Ive4UW8c.js +0 -1
  296. package/dist/client/assets/_shell.marketplace-D8deZF5L.js +0 -1
  297. package/dist/client/assets/_shell.marketplace_.sources-BHG9MqWR.js +0 -1
  298. package/dist/client/assets/_shell.session-CkdA2hgF.js +0 -1
  299. package/dist/client/assets/_shell.x._extensionId-Cry6E5KK.js +0 -1
  300. package/dist/client/assets/_shell.x._extensionId_._-Cry6E5KK.js +0 -1
  301. package/dist/client/assets/channel-Bf4e4rlX.js +0 -1
  302. package/dist/client/assets/index-BThp0Av1.js +0 -1
  303. package/dist/client/assets/index-Dv6HjbCS.js +0 -1
  304. package/dist/client/assets/registry-DatwH4jj.js +0 -1
  305. package/dist/client/assets/search-x-Be8VetKs.js +0 -6
  306. package/dist/client/assets/swimlanesDiagram-AYQRV4AK-hZFkkqUb.js +0 -8
  307. package/dist/client/assets/use-is-below-desktop-CJJ4zMQO.js +0 -1
  308. package/dist/client/assets/use-pending-read-CvX1lOb8.js +0 -1
  309. 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, path68) {
349
- if (!path68)
348
+ function getElementAtPath(obj, path71) {
349
+ if (!path71)
350
350
  return obj;
351
- return path68.reduce((acc, key) => acc?.[key], obj);
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(path68, issues) {
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(path68);
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, path68 = []) => {
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 }, [...path68, ...issue2.path]));
1150
+ issue2.errors.map((issues) => processError({ issues }, [...path71, ...issue2.path]));
1151
1151
  } else if (issue2.code === "invalid_key") {
1152
- processError({ issues: issue2.issues }, [...path68, ...issue2.path]);
1152
+ processError({ issues: issue2.issues }, [...path71, ...issue2.path]);
1153
1153
  } else if (issue2.code === "invalid_element") {
1154
- processError({ issues: issue2.issues }, [...path68, ...issue2.path]);
1154
+ processError({ issues: issue2.issues }, [...path71, ...issue2.path]);
1155
1155
  } else {
1156
- const fullpath = [...path68, ...issue2.path];
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, path68 = []) => {
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 }, [...path68, ...issue2.path]));
1199
+ issue2.errors.map((issues) => processError({ issues }, [...path71, ...issue2.path]));
1200
1200
  } else if (issue2.code === "invalid_key") {
1201
- processError({ issues: issue2.issues }, [...path68, ...issue2.path]);
1201
+ processError({ issues: issue2.issues }, [...path71, ...issue2.path]);
1202
1202
  } else if (issue2.code === "invalid_element") {
1203
- processError({ issues: issue2.issues }, [...path68, ...issue2.path]);
1203
+ processError({ issues: issue2.issues }, [...path71, ...issue2.path]);
1204
1204
  } else {
1205
- const fullpath = [...path68, ...issue2.path];
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 path68 = _path.map((seg) => typeof seg === "object" ? seg.key : seg);
1245
- for (const seg of path68) {
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 path68 = ref.slice(1).split("/").filter(Boolean);
19278
- if (path68.length === 0) {
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 (path68[0] === defsKey) {
19283
- const key = path68[1] === void 0 ? void 0 : decodeJSONPointerSegment(path68[1]);
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
- * For a copy whose plugin files changed after DorkOS installed it: the
22688
- * whole plugin folder's digest the person said yes to. Any further change
22689
- * asks again, because a path alone no longer says what is there.
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, path68) {
26489
- if (path68 === "" || /^[/?#]/.test(path68)) return `${base}${path68}`;
26490
- return `${base}/${path68}`;
26571
+ function join(base, path71) {
26572
+ if (path71 === "" || /^[/?#]/.test(path71)) return `${base}${path71}`;
26573
+ return `${base}/${path71}`;
26491
26574
  }
26492
- function siteUrl(path68 = "") {
26493
- return join(links.site, path68);
26575
+ function siteUrl(path71 = "") {
26576
+ return join(links.site, path71);
26494
26577
  }
26495
- function docsUrl(path68 = "") {
26496
- return join(links.docs, path68);
26578
+ function docsUrl(path71 = "") {
26579
+ return join(links.docs, path71);
26497
26580
  }
26498
- function repoUrl(path68 = "") {
26499
- return join(links.repo, path68);
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.0";
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(path68, value) {
27127
- const enabled3 = path68 === "browser.enabled" ? value : path68 === "browser" && value !== null && typeof value === "object" ? value.enabled : void 0;
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(path68, value) {
27242
+ function hubSettingRefusal(path71, value) {
27160
27243
  if (currentServerRole() !== "hub") return null;
27161
- const enabled3 = path68 === "auth.enabled" ? value : path68 === "auth" && value !== null && typeof value === "object" ? value.enabled : true;
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, path68) {
27324
+ function readPath(root, path71) {
27242
27325
  let cursor = root;
27243
- for (const part of path68.split(".")) {
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, path68, value) {
27256
- const parts = path68.split(".");
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 [path68, value] of Object.entries(salvaged.leaves)) {
27390
- const [top, ...rest] = path68.split(".");
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, path68);
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: path68, reason } of salvaged.dropped) {
27504
+ for (const { path: path71, reason } of salvaged.dropped) {
27422
27505
  logger.warn(
27423
- `[Config] Could not keep your ${path68} setting: ${reason}. It is back at the default.`
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(path68) {
27758
- if (typeof path68 !== "string") {
27759
- throw new TypeError(`Expected a string, got ${typeof path68}`);
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 path68) {
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(path68) {
27877
- if (typeof path68 === "string") {
27878
- return parsePath(path68);
27965
+ function normalizePath(path71) {
27966
+ if (typeof path71 === "string") {
27967
+ return parsePath(path71);
27879
27968
  }
27880
- if (Array.isArray(path68)) {
27969
+ if (Array.isArray(path71)) {
27881
27970
  const normalized = [];
27882
- for (const [index2, segment] of path68.entries()) {
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, path68, value) {
27903
- if (!isObject2(object2) || typeof path68 !== "string" && !Array.isArray(path68)) {
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(path68);
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, path68, value) {
27923
- if (!isObject2(object2) || typeof path68 !== "string" && !Array.isArray(path68)) {
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(path68);
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, path68) {
27945
- if (!isObject2(object2) || typeof path68 !== "string" && !Array.isArray(path68)) {
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(path68);
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, path68) {
27969
- if (!isObject2(object2) || typeof path68 !== "string" && !Array.isArray(path68)) {
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(path68);
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(path68) {
31792
- let input4 = path68;
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 path68 = queryIndex === -1 ? wsComponent.resourceName : wsComponent.resourceName.slice(0, queryIndex);
32202
- wsComponent.path = path68 && path68 !== "/" ? path68 : void 0;
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(path68, policy) {
39762
- const section = path68.split(".")[0];
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 (path68 === section) return candidates;
39766
- return candidates.filter((leaf) => leaf.path === path68 || leaf.path.startsWith(`${path68}.`));
39854
+ if (path71 === section) return candidates;
39855
+ return candidates.filter((leaf) => leaf.path === path71 || leaf.path.startsWith(`${path71}.`));
39767
39856
  }
39768
- function relativeSegments(path68, leafPath) {
39769
- return leafPath === path68 ? [] : leafPath.slice(path68.length + 1).split(".");
39857
+ function relativeSegments(path71, leafPath) {
39858
+ return leafPath === path71 ? [] : leafPath.slice(path71.length + 1).split(".");
39770
39859
  }
39771
- function repairWidenedLeaves(path68, value, policy) {
39772
- const leaves = leavesUnder(path68, policy);
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(path68, leaf.path);
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 path68;
45737
+ let path71;
45613
45738
  if (startsWithDotSlash) {
45614
- path68 = stripLeadingDotSlash(source);
45739
+ path71 = stripLeadingDotSlash(source);
45615
45740
  } else {
45616
45741
  const pluginRoot = normalizePluginRoot(context2.pluginRoot);
45617
- path68 = pluginRoot ? `${pluginRoot}/${source}` : source;
45742
+ path71 = pluginRoot ? `${pluginRoot}/${source}` : source;
45618
45743
  }
45619
45744
  return {
45620
45745
  type: "relative-path",
45621
- path: path68,
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: "runs only the tools it is allowed, and refuses the rest without asking",
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: path68, request, responses } = route, pathItemConfig = __rest(route, ["method", "path", "request", "responses"]);
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} ${path68}` });
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
- (path68) => {
51584
- if (path68 === "") return true;
51585
- if (!path68.startsWith("/")) return false;
51586
- return path68.slice(1).split("/").every(
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, path68) {
59232
+ function getValueAtPath(value, path71) {
59107
59233
  let current3 = value;
59108
- for (const segment of path68) {
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 path68 = issue2.path.filter(
59263
+ const path71 = issue2.path.filter(
59138
59264
  (segment) => segment !== void 0 && typeof segment !== "symbol"
59139
59265
  );
59140
- const original = getValueAtPath(value, path68);
59141
- const message2 = typeof original === "string" && WHOLE_PLACEHOLDER_PATTERN.test(original) ? `Placeholder "${original}" is not allowed in field "${path68.join(".")}" \u2014 placeholders may only fill free-form string fields, not number or enum fields` : issue2.message;
59142
- ctx.addIssue({ code: external_exports.ZodIssueCode.custom, path: path68, message: message2 });
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: path68 }) => {
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 || path68 || "virtual:",
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 path68 = typeof pathOrOptions === "string" ? pathOrOptions : void 0;
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 (path68 && /\/{2,}/.test(path68)) throw new BetterCallError("Path cannot contain consecutive slashes");
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: path68
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 = path68;
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 [path68, options2, handler2] = args;
62543
- return createEndpoint(path68, {
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(path68) {
62939
+ function scanFirstGroup(path71) {
62814
62940
  let i2 = 0;
62815
62941
  let depth = 0;
62816
- for (; i2 < path68.length; i2++) {
62817
- const c3 = path68.charCodeAt(i2);
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 >= path68.length) return;
62949
+ if (i2 >= path71.length) return;
62824
62950
  let j = i2 + 1;
62825
62951
  depth = 0;
62826
- for (; j < path68.length; j++) {
62827
- const c3 = path68.charCodeAt(j);
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 >= path68.length) return;
62834
- const mod = path68[j + 1];
62959
+ if (j >= path71.length) return;
62960
+ const mod = path71[j + 1];
62835
62961
  const hasMod = mod === "?" || mod === "+" || mod === "*";
62836
62962
  return [
62837
- path68.slice(0, i2),
62838
- path68.slice(i2 + 1, j),
62839
- path68.slice(j + (hasMod ? 2 : 1)),
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(path68) {
62844
- if (!path68.includes("{")) return;
62845
- const group = scanFirstGroup(path68);
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(path68) {
62914
- if (!path68.includes("\\")) return path68;
62915
- return path68.replace(/\\([:(){}])/g, (_3, c3) => "\uFFFD" + "ABCDE"[":(){}".indexOf(c3)]);
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(path68) {
62945
- if (!path68.includes("/.")) return path68;
63070
+ function normalizePath2(path71) {
63071
+ if (!path71.includes("/.")) return path71;
62946
63072
  const r3 = [];
62947
- for (const s2 of path68.split("/")) if (s2 === ".") continue;
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(path68) {
62953
- const s2 = path68.split("/");
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(path68) {
62959
- const s2 = splitPath(path68);
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 = "", path68, data) {
63101
+ function addRoute(ctx, method = "", path71, data) {
62976
63102
  method = method.toUpperCase();
62977
- if (path68.charCodeAt(0) !== 47) path68 = `/${path68}`;
62978
- const groupExpanded = expandGroupDelimiters(path68);
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
- path68 = encodeEscapes(path68);
62984
- const segments = splitRoute(path68);
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 = "", path68, opts) {
63076
- if (opts?.normalize) path68 = normalizePath2(path68);
63077
- if (path68.charCodeAt(path68.length - 1) === 47) path68 = path68.slice(0, -1);
63078
- const staticNode = ctx.static[path68];
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(path68);
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 = "", path68, opts) {
63146
- if (opts?.normalize) path68 = normalizePath2(path68);
63147
- if (path68.charCodeAt(path68.length - 1) === 47) path68 = path68.slice(0, -1);
63148
- const segments = splitPath(path68);
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: path68, middleware } of config3.routerMiddleware) addRoute(middlewareRouter, "*", path68, middleware);
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 path68;
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
- path68 = pathname.slice(basePath.length);
63264
- } else path68 = pathname;
63265
- if (path68.length === 0 || /\/{2,}/.test(path68)) return new Response(null, {
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, path68);
63270
- if (path68.endsWith("/") !== route?.data?.path?.endsWith("/") && !config3?.skipTrailingSlashes) return new Response(null, {
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: path68,
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, "*", path68);
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 [path68, options2, handler2] = args;
63486
- return createEndpointWithAuthContext(path68, options2, wrapEndpointHandler(handler2, options2));
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, path68) {
63996
- return `${ip}|${path68}`;
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(path68) {
70869
- if (!path68.startsWith("@")) return {
70994
+ function parseMethodModifier(path71) {
70995
+ if (!path71.startsWith("@")) return {
70870
70996
  method: void 0,
70871
- path: path68
70997
+ path: path71
70872
70998
  };
70873
- const separator = path68.indexOf("/");
70874
- const method = path68.slice(1, separator === -1 ? void 0 : separator);
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: path68
71003
+ path: path71
70878
71004
  };
70879
71005
  return {
70880
71006
  method,
70881
- path: separator === -1 ? path68 : path68.slice(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 [path68, urlQuery] = url2.replace(basePath, "").split("?");
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 = path68.split("/").filter((p) => p.startsWith(":"));
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
- path68 = path68.split("/").map((segment) => resolvePathSegment(segment, pathParams)).join("/");
70921
- path68 = path68.replace(/^\/+/, "");
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}${path68}${queryParamString}`;
70925
- return new URL(`${path68}${queryParamString}`, basePath);
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: path68, field }, columnIndex) => {
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 path68.entries()) {
98591
- if (pathChunkIndex < path68.length - 1) {
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) && path68.length === 2) {
98600
- const objectName = path68[0];
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(path68) {
113623
- return path68.replaceAll("[]", "");
113758
+ function withoutArrayMarkers(path71) {
113759
+ return path71.replaceAll("[]", "");
113624
113760
  }
113625
113761
  function prepareGuardedPaths(paths2) {
113626
- return paths2.map((path68) => ({ path: path68, plain: withoutArrayMarkers(path68) }));
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 path68 of new Set(touched)) {
113766
+ for (const path71 of new Set(touched)) {
113631
113767
  for (const { path: guardedPath, plain } of guarded) {
113632
- if (path68 === plain || path68.startsWith(`${plain}.`) || plain.startsWith(`${path68}.`)) {
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((path68) => [
113669
- path68,
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, path68) {
115508
- if (!id || id.length > 128 || !path68.startsWith("/") || canonicalDirectory(path68) !== path68) {
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 !== path68)) {
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: path68 };
115666
+ this.binding = { id, path: path71 };
115515
115667
  }
115516
- forPath(path68) {
115517
- return this.binding?.path === path68 ? "computer-local" : void 0;
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(path68) {
119825
+ function readFileOrNull(path71) {
119674
119826
  try {
119675
- return readFileSync4(path68, "utf8");
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 (path68) => {
120787
+ const modeOf = async (path71) => {
120636
120788
  try {
120637
- return (await read({ agentPath: path68, capabilities })).mode ?? null;
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 path68 = prefix ? `${prefix}.${key}` : key;
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, path68, out);
125059
+ collectChangedPaths(a2, b2, path71, out);
124908
125060
  } else if (!sameLeaf(a2, b2)) {
124909
- out.push(path68);
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(path68) {
125073
+ function isOperatorOnlyPath(path71) {
124922
125074
  return OPERATOR_ONLY_CONFIG_PATHS.some(
124923
- (guarded) => path68 === guarded || path68.startsWith(`${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((path68) => !isOperatorOnlyPath(path68)).sort()
125085
+ ...changed.filter((path71) => !isOperatorOnlyPath(path71)).sort()
124934
125086
  ];
124935
- const named3 = ordered.slice(0, LOGGED_PATH_LIMIT).map((path68) => path68.split(".").map(renderSegment).join(".")).join(", ");
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, path68) {
125090
+ function valueAtPath(root, path71) {
124939
125091
  let node2 = root;
124940
- for (const key of path68.split(".")) {
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((path68) => group.paths.includes(path68));
125223
+ const matched = paths2.filter((path71) => group.paths.includes(path71));
125072
125224
  if (matched.length === 0) continue;
125073
- for (const path68 of matched) remaining.delete(path68);
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((path68) => path68.startsWith("cloud."));
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, path68) {
125278
+ function leafAt(config3, path71) {
125127
125279
  let current3 = config3;
125128
- for (const key of path68) {
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: path68, runtime }) => {
125140
- const was = leafAt(before, path68);
125141
- const now3 = leafAt(after, path68);
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 servers = value.mcpServers;
128296
- if (servers === void 0) return { mcpServers: [], unreadable: [] };
128297
- if (typeof servers !== "object" || servers === null || Array.isArray(servers)) {
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(servers).sort((a2, b2) => a2.localeCompare(b2)).map((name2) => ({
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(servers, label, wrongShape) {
130008
- if (servers === void 0) return {};
130009
- if (typeof servers !== "object" || servers === null || Array.isArray(servers)) {
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(servers).length };
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 path68 = HARNESS_MANIFEST_PATH;
131297
- const abs = join30(repoRoot, path68);
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: path68,
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: path68, reason: manifestSchemaReason(err) };
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: path68 };
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: path68,
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: path68,
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: path68, inserted };
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 path68 = HARNESS_MANIFEST_PATH;
131373
- const abs = join31(repoRoot, path68);
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: path68,
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: path68, reason: manifestSchemaReason(err) };
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: path68 };
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: path68,
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: path68,
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: path68, inserted };
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, path68) {
133402
- if (dir === "") return path68;
133403
- return path68.startsWith(`${dir}/`) ? path68.slice(dir.length + 1) : void 0;
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, path68, isDir) {
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(path68) ? !negated : void 0;
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(path68) {
133609
+ function physicalPath(path71) {
133458
133610
  try {
133459
- return realpathSync8.native(path68);
133611
+ return realpathSync8.native(path71);
133460
133612
  } catch {
133461
- return resolve4(path68);
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(([path68, kind]) => ({ path: path68, kind }));
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: path68, kind } of ephemeralPaths(plan, repoRoot)) {
133548
- if (ignoredBy(checkout.root, underPrefix(checkout.prefix, path68), kind) !== void 0) continue;
133549
- if (selfIgnored(plan, path68)) continue;
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, path68, kind)
133703
+ (pattern) => gitignorePatternMatches(pattern, path71, kind)
133552
133704
  );
133553
- if (covering.length === 0) missing.add(path68);
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((path68) => ({ path: path68, reason: sweepReason(path68, cause) }));
133884
+ return paths2.map((path71) => ({ path: path71, reason: sweepReason(path71, cause) }));
133733
133885
  }
133734
- function sweepReason(path68, cause) {
133735
- if (cause === "command-wrapper" && isAtomicTempName(basename4(path68))) {
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 path68 of paths2) {
133813
- const absDir = unwritableParent(join34(repoRoot, path68), probed);
133814
- if (absDir === void 0) removable.push(path68);
133815
- else warnings.push(blockedRemovalWarning(path68, spell(repoRoot, absDir)));
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(path68) {
133894
- return path68.split("\\").join("/");
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: path68 }) => path68),
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: path68 }) => path68),
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(([path68]) => removable.has(path68)).sort(([a2], [b2]) => a2 < b2 ? -1 : a2 > b2 ? 1 : 0).map(([path68, reason]) => ({ path: path68, reason }));
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: path68 } of orphans) rmSync8(path68, { force: true });
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: path68 }) => path68),
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: path68 }) => path68),
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(path68) {
135395
+ function statOrUndefined(path71) {
135244
135396
  try {
135245
- return statSync10(path68, { throwIfNoEntry: false });
135397
+ return statSync10(path71, { throwIfNoEntry: false });
135246
135398
  } catch {
135247
135399
  return void 0;
135248
135400
  }
135249
135401
  }
135250
- function lstatOrUndefined(path68) {
135402
+ function lstatOrUndefined(path71) {
135251
135403
  try {
135252
- return lstatSync14(path68, { throwIfNoEntry: false });
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 path68 = entry.path.trim() === "" ? defaultPath : entry.path;
135477
- const abs = join43(repoRoot, path68);
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: path68, kind, atProjectionTarget: path68 === defaultPath });
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: path68, reason }) => ` ${path68} \u2014 ${reason}`)];
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: path68, reason }) => ` ${path68} \u2014 ${reason}`)];
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 realpathSync12 } from "node:fs";
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 realpathSync12(projectPath);
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 } = _internal.applyPlan(
137572
+ const { applied, conflicts, swept, removals, leftAlone, warnings } = withPersonRepinAtHome(
136911
137573
  projectPath,
136912
- plan,
136913
- { sweepOrphans: opts.sweepOrphans }
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 path47 from "node:path";
137657
+ import path50 from "node:path";
136994
137658
  function assertContainedIn(root, candidate) {
136995
- const resolvedRoot = path47.resolve(root);
136996
- const resolved = path47.resolve(candidate);
136997
- if (!resolved.startsWith(resolvedRoot + path47.sep)) {
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 > MAX_DEPTH2) return;
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 MAX_DEPTH2;
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
- MAX_DEPTH2 = 256;
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 createHash4, randomUUID as randomUUID4 } from "node:crypto";
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 createHash4("sha256").update(subpath).digest("hex").slice(0, 12);
137828
+ return createHash7("sha256").update(subpath).digest("hex").slice(0, 12);
137165
137829
  }
137166
- async function stampUsed(path68) {
137830
+ async function stampUsed(path71) {
137167
137831
  const now3 = /* @__PURE__ */ new Date();
137168
137832
  try {
137169
- await utimes(path68, now3, now3);
137833
+ await utimes(path71, now3, now3);
137170
137834
  return now3;
137171
137835
  } catch {
137172
- return (await stat2(path68)).mtime;
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 path68 = this.packageDir(packageName, commitSha, subpath);
137414
- const usedAt = await this.stampIfPresent(path68);
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: path68,
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(path68) {
138276
+ stampIfPresent(path71) {
137613
138277
  return this.exclusive(async () => {
137614
- if (!await isNonEmptyDir(path68)) return null;
137615
- return stampUsed(path68);
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 path68 = join51(root, entry);
138317
+ const path71 = join51(root, entry);
137654
138318
  try {
137655
- const info2 = await stat2(path68);
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: path68,
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 path48 from "node:path";
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 = path48.join(dorkHome, "marketplaces.json");
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(path48.join(claudeRoot, "settings.json"));
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(path48.join(projectPath, ".claude", "settings.json"));
138177
- const local = await readSettingsSlice(path48.join(projectPath, ".claude", "settings.local.json"));
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 readFileSync21 } from "node:fs";
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 path68 = action.target ?? action.source ?? "(no path)";
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}" -> ${path68} (${action.harness})${note}`;
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((path68) => harnessOf(path68) === harnessFilter) : leftAlone;
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((path68) => {
138351
- const harness = harnessOf(path68);
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((path68) => {
138358
- const harness = harnessOf(path68);
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 ` ${path68} (${harness})${note}`;
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(path68) {
138366
- return GENERATED_HOOK_TARGET_HARNESSES[path68];
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 readFileSync21(join53(repoRoot, rel), "utf8");
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: path68, reason }) {
138465
- return ` ${path68} \u2014 ${reason}`;
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 path49 from "node:path";
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(path49.join(dorkHome, "config.json"), "utf-8");
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 path49.join(resolveDorkHome2(), API_KEY_FILE_NAME);
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 createHash5 } from "node:crypto";
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 sha2562(bytes) {
139932
- return createHash5("sha256").update(bytes).digest("hex");
140595
+ function sha2564(bytes) {
140596
+ return createHash8("sha256").update(bytes).digest("hex");
139933
140597
  }
139934
140598
  function canonicalDigest(value) {
139935
- const hash3 = createHash5("sha256");
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 createHash6, randomUUID as randomUUID5 } from "node:crypto";
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 path50 from "node:path";
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
- path50.isAbsolute(name2) && path50.normalize(name2) === name2,
140989
+ path53.isAbsolute(name2) && path53.normalize(name2) === name2,
140326
140990
  "INVALID_INSTALL_CONFIGURATION"
140327
140991
  );
140328
140992
  const result2 = [];
140329
- let current3 = path50.parse(name2).root;
140330
- const parts = path50.relative(current3, name2).split(path50.sep).filter(Boolean);
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 = path50.join(current3, part);
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 = path50.parse(name2).root;
140440
- for (const part of path50.relative(current3, name2).split(path50.sep).filter(Boolean)) {
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 = path50.join(current3, part);
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(path50.dirname(name2));
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(path50.dirname(name2));
141133
+ await this.syncDirectory(path53.dirname(name2));
140470
141134
  }
140471
141135
  async read(name2, cap, retain = 0) {
140472
- const parents = await this.ancestors(path50.dirname(name2));
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 = createHash6("sha256"), chunks = [];
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 = path50.join(directory, ".bin");
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 = path50.join(bins, "playwright-core"), stat5 = await fs24.lstat(shim, { bigint: true });
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) === path50.join(root, "cli.js"),
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: path50.relative(root, directory).split(path50.sep).join("/"),
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 = path50.join(directory, name2), relative12 = path50.relative(root, absolute).split(path50.sep).join("/");
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 + path50.sep), "ROOT_CHANGED");
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 = createHash6("sha256");
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
- path50.relative(this.configuration.libraryRoot, file2.path).split(path50.sep).join("/") + "\0" + file2.sha256 + "\n"
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 === path50.join(this.configuration.libraryRoot, name2)
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 = path50.join(root.path, "reservation");
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
- path50.join(name2, "owner.json"),
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 = path50.join(this.configuration.cacheRoot, "attempts");
141502
+ const parent = path53.join(this.configuration.cacheRoot, "attempts");
140839
141503
  await this.ensureDirectories(parent);
140840
- const root = path50.join(parent, handle.binding.attemptId);
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(path50.join(root, child));
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: path50.join(root, "home"),
140852
- temporaryRoot: path50.join(root, "tmp"),
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: path50.join(root, "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 = path50.dirname(name2), parents = await this.ancestors(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 = path50.join(parent, ".installation-" + randomUUID5() + ".tmp");
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 === sha2562(bytes), "RECORD_FAILED");
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
- path50.join(reservation.directory.path, "owner.json"),
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 = path50.join(this.configuration.cacheRoot, "candidates");
141621
+ const parent = path53.join(this.configuration.cacheRoot, "candidates");
140958
141622
  await this.ensureDirectories(parent);
140959
- const candidateRoot = path50.join(parent, handle.binding.installationId);
141623
+ const candidateRoot = path53.join(parent, handle.binding.installationId);
140960
141624
  await this.exclusiveDirectory(candidateRoot);
140961
- const payloadRoot = path50.join(candidateRoot, "payload");
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 = path50.join(candidateRoot, "payload"), tree = await this.tree(payloadRoot);
141000
- const executablePath = path50.join(candidateRoot, INSTALLATION_TARGET.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
- path50.join(this.configuration.cacheRoot, "current.json"),
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 = path50.join(
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
- path50.join(root, "manifest.json"),
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
- path50.join(root, "verification.json"),
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(path50.dirname(handle.candidateRoot));
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 = sha2562(manifestBytes), verificationDigest = sha2562(verificationBytes);
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
- path50.join(candidateHandle.candidateRoot, "verification.json"),
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
- path50.join(candidateHandle.candidateRoot, "manifest.json"),
141927
+ path53.join(candidateHandle.candidateRoot, "manifest.json"),
141264
141928
  parsedManifest,
141265
141929
  INSTALLATION_LIMITS.manifestBytes,
141266
141930
  false
141267
141931
  );
141268
- await this.syncDirectory(path50.dirname(candidateHandle.candidateRoot));
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 = path50.join(
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 === sha2562(pointer), "RECORD_FAILED");
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, path50.join(this.configuration.cacheRoot, "current.json"));
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
- path50.join(
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
- path50.join(attempt.handle.attemptRoot, "reuse.json"),
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(path50.dirname(attempt.handle.attemptRoot));
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(path50.dirname(name2));
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 = createHash6("sha256");
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(path50.dirname(name2));
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 = path50.join(attempt.attemptRoot, "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 = path50.join(diagnostics, (probe2 ? "probe_" : "") + parsed.jobId);
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) && path50.resolve(process.execPath) === c3.nodeExecutable && process.argv[1] && path50.resolve(process.argv[1]) === c3.verifierEntry,
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 === path50.join(c3.cacheRoot, "attempts", parsed.binding.attemptId) && parsed.candidateRoot === path50.join(c3.cacheRoot, "candidates", parsed.binding.installationId) && parsed.executablePath === INSTALLATION_TARGET.executablePath,
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
- path50.join(c3.cacheRoot, "reservation", "owner.json"),
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 = path50.join(parsed.attemptRoot, "diagnostics", birth.jobId);
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: path50.join(admitted.request.attemptRoot, "home"),
141735
- temporaryRoot: path50.join(admitted.request.attemptRoot, "tmp"),
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
- path50.join(reservation.directory.path, "owner.json"),
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 createHash7 } from "node:crypto";
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, path68) {
141817
- const name2 = relative11(root, path68);
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(path68, expected) {
141964
- requireFact2(isAbsolute10(path68) && resolve12(path68) === path68, "ROOT_CHANGED");
141965
- const s2 = await lstat5(path68, { bigint: true });
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(path68) === path68,
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, path68, digest2, cap, expected, keep = false) {
141973
- const before = await lstat5(path68, { bigint: true });
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(path68) === path68, "ROOT_CHANGED");
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
- path68,
142646
+ path71,
141983
142647
  constants6.O_RDONLY | constants6.O_NOFOLLOW | constants6.O_NONBLOCK
141984
142648
  );
141985
142649
  heldReads.add(original);
141986
- const hash3 = createHash7("sha256");
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(path68, { bigint: true }))),
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: sha2562(verifier.stdout)
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 === sha2562(recordBytes(journal, INSTALLATION_LIMITS.journalBytes)), "OWNERSHIP_UNCERTAIN");
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 === sha2562(recordBytes(manifest, INSTALLATION_LIMITS.manifestBytes)) && canonicalDigest(published.currentBefore) === canonicalDigest(reserved.current), "PUBLICATION_UNCERTAIN");
142857
- require2(published.verificationDigest === sha2562(
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 createHash8 } from "node:crypto";
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 = createHash8("sha256"), chunks = [], buffer = Buffer.alloc(65536);
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 path51 from "node:path";
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
- path51.posix.join("/Applications", app, "Contents", "MacOS", binary3),
143578
- path51.posix.join(env6.homeDir, "Applications", app, "Contents", "MacOS", binary3)
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) => path51.win32.join(root, "Google", "Chrome", "Application", "chrome.exe")
144251
+ (root) => path54.win32.join(root, "Google", "Chrome", "Application", "chrome.exe")
143588
144252
  ),
143589
- ...roots.map((root) => path51.win32.join(root, "Chromium", "Application", "chrome.exe"))
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(path51.posix.delimiter).filter(Boolean);
144257
+ const dirs = (env6.pathVar ?? "").split(path54.posix.delimiter).filter(Boolean);
143594
144258
  return [
143595
- ...names.flatMap((name2) => dirs.map((dir) => path51.posix.join(dir, name2))),
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 path52 from "node:path";
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(path52.dirname(profileDir), { recursive: true, mode: 448 });
143822
- fs25.chmodSync(path52.dirname(profileDir), 448);
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 = path52.join(profileDir, THEME_MARKER_FILE);
144488
+ const marker = path55.join(profileDir, THEME_MARKER_FILE);
143825
144489
  if (fs25.existsSync(marker)) return { created, themed: false };
143826
- const prefsFile = path52.join(profileDir, "Default", "Preferences");
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(path52.dirname(prefsFile), { recursive: true, mode: 448 });
144494
+ fs25.mkdirSync(path55.dirname(prefsFile), { recursive: true, mode: 448 });
143831
144495
  fs25.writeFileSync(prefsFile, JSON.stringify(deepMerge2(prefs, themePreferences())));
143832
- const localStateFile = path52.join(profileDir, "Local State");
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 = path52.join(profileDir, "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(path52.join(profileDir, "SingletonLock"));
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 path53 from "node:path";
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(path53.dirname(file2), { recursive: true, mode: 448 });
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 path54 from "node:path";
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: path54.join(dorkHome, ...AGENT_BROWSER_PROFILE_SEGMENTS),
144157
- stateFile: path54.join(dorkHome, ...AGENT_BROWSER_STATE_SEGMENTS)
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 path55 from "node:path";
145374
+ import path58 from "node:path";
144711
145375
  function resolveProjectFlag(value) {
144712
- return typeof value === "string" ? path55.resolve(process.cwd(), value) : void 0;
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 path68 of result2.preservedData) {
145502
- console.log(` ${path68}`);
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: path68, state } = pkg.devLink;
145735
- return state === "active" ? `dev link \u2192 ${path68}` : `dev link \u2192 ${path68} (${DEV_LINK_TROUBLE[state]})`;
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 path56 from "node:path";
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: path56.resolve(process.cwd(), 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(path56.sep).includes("~") ? " The shell does not expand ~ inside quotes; use the full path." : "";
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 path68 = join58(directory, "manifest.json");
148142
+ const path71 = join58(directory, "manifest.json");
147479
148143
  try {
147480
- await writeFile5(path68, bytes, { mode: 384, flag: "wx" });
147481
- return await verify(path68, trusted);
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 createHash9 } from "node:crypto";
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 createHash9("sha256").update(canonical2, "utf8").digest("hex");
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 path68 = join59(directory, "fly.toml");
150950
+ const path71 = join59(directory, "fly.toml");
150287
150951
  try {
150288
- await writeFile6(path68, renderCommunityFlyConfig(plan), { mode: 384, flag: "wx" });
150289
- return await consumer(path68);
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 createHash10 } from "node:crypto";
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:${createHash10("sha256").update(bytes).digest("hex")}` !== attestedDigest) {
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, path68] = match;
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:${path68}:pull`)}&service=${host}`,
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/${path68}/manifests/${input4.digest}`, {
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, path68) {
150760
- for (const directory of path68.split(delimiter).filter(Boolean)) {
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 path68 = env6.PATH ?? "";
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, path68)
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(path68) {
151648
+ async function rejectSymlink(path71) {
150985
151649
  try {
150986
- if ((await lstat7(path68)).isSymbolicLink()) throw new Error(`Refusing symbolic link: ${path68}`);
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(path68) {
151672
+ async function exists2(path71) {
151009
151673
  try {
151010
- await lstat7(path68);
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 path57 from "node:path";
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 = path57.join(dorkHome, `.doctor-write-${process.pid}`);
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 = path57.join(homeDir, ".claude");
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 = path57.join(dorkHome, DEV_LINKS_FILE);
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 (path57.resolve(path57.dirname(record2.slot), text3) === record2.target) return "folder-missing";
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 path58 from "node:path";
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: ${path58.join(dorkHome, "config.json")}
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(path58.join(dorkHome, SECRET_FILE_NAME2)),
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, path68 = "/api/auth") {
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 (!path68 || path68 === "/") return trimmedUrl;
154822
- path68 = path68.startsWith("/") ? path68 : `/${path68}`;
154823
- return `${trimmedUrl}${path68}`;
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, path68, request, loadEnv, trustedProxyHeaders) {
154844
- if (url2) return withPath2(url2, path68);
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, path68);
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}`, path68);
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, path68);
155524
+ return withPath2(url3, path71);
154861
155525
  }
154862
- if (typeof window !== "undefined" && window.location) return withPath2(window.location.origin, path68);
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: path68 }) => ({
156117
+ logger2.warn("Cookie cache payload failed schema validation", { issues: result2.error.issues.map(({ code, path: path71 }) => ({
155454
156118
  code,
155455
- path: path68
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 = (path68) => {
156229
- let decoded = path68;
156892
+ normalizePath3 = (path71) => {
156893
+ let decoded = path71;
156230
156894
  try {
156231
- decoded = decodeURIComponent(path68);
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 path68 = normalizePath3(pathEnd === -1 ? rest : rest.slice(0, pathEnd));
156922
+ const path71 = normalizePath3(pathEnd === -1 ? rest : rest.slice(0, pathEnd));
156259
156923
  return {
156260
156924
  scheme,
156261
156925
  authority: authority.toLowerCase(),
156262
- path: path68
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 path68 = pathEnd === -1 ? value : value.slice(0, pathEnd);
156269
- if (ENCODED_PATH_SEPARATOR_PATTERN.test(path68)) return false;
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 path68 = normalizePathname(req.url, basePath);
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, path68);
156660
- const specialRule = getDefaultSpecialRules().find((rule) => rule.pathMatcher(path68));
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(path68));
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)(path68);
156676
- return p === path68;
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(path68) {
156713
- return path68.startsWith("/sign-in") || path68.startsWith("/sign-up") || path68.startsWith("/change-password") || path68.startsWith("/change-email");
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(path68) {
156719
- return path68 === "/request-password-reset" || path68 === "/send-verification-email" || path68.startsWith("/forget-password") || path68 === "/email-otp/send-verification-otp" || path68 === "/email-otp/request-password-reset";
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 path68 = endpoint.path;
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(path68)) endpointRegistry.set(path68, []);
162433
- endpointRegistry.get(path68).push({
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 [path68, entries] of endpointRegistry.entries()) if (entries.length > 1) {
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: path68,
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 readFileSync22, writeFileSync as writeFileSync4, renameSync as renameSync4 } from "node:fs";
172047
- import path59 from "node:path";
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(readFileSync22(path59.join(dorkHome, "config.json"), "utf-8"));
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 = path59.join(dorkHome, ENDED_STANDING_GRANTS_FILE);
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 = readFileSync22(file2, "utf-8");
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 = path59.join(deps.dorkHome, ENDED_STANDING_GRANTS_FILE);
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 : path59.basename(grant.agentPath);
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 path60 from "node:path";
172179
- import { mkdirSync as mkdirSync8, readFileSync as readFileSync23 } from "node:fs";
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(path60.join(dorkHome, "dork.db"));
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 = readFileSync23(0, "utf8");
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 path61 from "node:path";
174898
+ import path64 from "node:path";
174234
174899
  async function getOrCreateInstanceId(dorkHome) {
174235
- const filePath = path61.join(dorkHome, INSTANCE_ID_FILENAME2);
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 path68 = typeof values2.path === "string" ? values2.path : void 0;
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 (!path68) throw new Error(`Missing required --path.
175783
+ if (!path71) throw new Error(`Missing required --path.
175119
175784
  ${usage}`);
175120
175785
  return {
175121
175786
  name: name2,
175122
- path: path68,
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 path68 = typeof values2.path === "string" ? values2.path : void 0;
175173
- if (!path68) throw new Error(`Missing required --path.
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: path68,
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 path62 from "node:path";
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 ? path62.basename(match[1]) : "";
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(path62.join(path62.dirname(target), ".dorkos-export-"));
175839
- const scratch = path62.join(staging, path62.basename(target));
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 = path62.resolve(
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 path63 from "node:path";
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(path63.join(dorkHome, "cache", "update-check.json"), "utf-8");
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 path64 from "path";
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(path64.join(dorkHome, "config.json"), "utf-8");
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(path64.join(p, ".dork")));
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 = path64.join(dorkHome, "dork.db");
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 = path64.join(p, ".dork");
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 path65 from "path";
178093
+ import path68 from "path";
177429
178094
  async function openAuditLog(dorkHome, level) {
177430
- const logDir2 = path65.join(dorkHome, "logs");
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 path66 from "path";
178385
+ import path69 from "path";
177721
178386
  async function runInitWizard(options) {
177722
178387
  const { yes, dorkHome, store } = options;
177723
- const configPath = path66.join(dorkHome, "config.json");
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", path66.resolve(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 path67 from "path";
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 path68 = getMarkerPath();
177865
- await mkdir2(dirname2(path68), { recursive: true });
177866
- await writeFile2(path68, JSON.stringify({ shownAt: Date.now() }));
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 = path67.dirname(fileURLToPath7(import.meta.url));
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.0",
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.0" });
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.0", process.argv.slice(3)));
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.0", DORK_HOME, subArgs));
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.0");
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.0"}`);
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 = path67.join(__dirname2, "../client");
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 = path67.resolve(cliDir);
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 ? path67.resolve(configCwd) : process.cwd();
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 = path67.resolve(cliBoundary);
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 = path67.resolve(configBoundary);
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 + path67.sep)) {
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 = path67.join(process.env.DORKOS_DEFAULT_CWD, ".env");
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.0";
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.0"}`);
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.0").then((latestVersion) => {
179813
+ checkForUpdate("0.126.1").then((latestVersion) => {
179149
179814
  if (latestVersion) {
179150
- const msg = `Update available: ${"0.126.0"} \u2192 ${latestVersion}`;
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`;