dorkos 0.121.0 → 0.123.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/dist/bin/cli.js +532 -373
  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-CtI8gbER.js → AboutPage-BmtoPqP9.js} +1 -1
  5. package/dist/client/assets/{ActivityErrorState-CHTXfBS7.js → ActivityErrorState-CEzdFJiR.js} +1 -1
  6. package/dist/client/assets/{ActivityPage-B8p4yYJL.js → ActivityPage-mFYgTr3e.js} +1 -1
  7. package/dist/client/assets/{ActivityRow-CSuSz-92.js → ActivityRow-Bkc0kkim.js} +1 -1
  8. package/dist/client/assets/{AdapterIcon-Qnxn0cE5.js → AdapterIcon-DVgTrgnM.js} +1 -1
  9. package/dist/client/assets/{AdapterSetupWizard-BG8H-Lld.js → AdapterSetupWizard-I03EluU5.js} +1 -1
  10. package/dist/client/assets/{AgentOptionRow-BWFQFynn.js → AgentOptionRow-DI1TzLaR.js} +1 -1
  11. package/dist/client/assets/{AgentPicker-CL93SET3.js → AgentPicker-CBYeBzjf.js} +1 -1
  12. package/dist/client/assets/{AgentRequestCard-CamX7Tvr.js → AgentRequestCard-DQ6GYoeE.js} +3 -3
  13. package/dist/client/assets/{AppearancePage-rN70_7ih.js → AppearancePage-62xIPNPn.js} +1 -1
  14. package/dist/client/assets/{ApplyToOverridesDialog-DeWaXbgm.js → ApplyToOverridesDialog-CrqkeHQb.js} +1 -1
  15. package/dist/client/assets/{AttentionSignalRow-CKcSWExi.js → AttentionSignalRow-Coe5pYX6.js} +1 -1
  16. package/dist/client/assets/{BaseTanStackRouterDevtoolsPanel-B-iktbLX-BwYaLf2P.js → BaseTanStackRouterDevtoolsPanel-B-iktbLX-D07cg75s.js} +1 -1
  17. package/dist/client/assets/{BindingDialog-DqPDLYbF.js → BindingDialog-DVyxVXZM.js} +1 -1
  18. package/dist/client/assets/{BlintzCanvas-DoAZs5bz.js → BlintzCanvas-BmfkiUQJ.js} +3 -3
  19. package/dist/client/assets/{BlintzCanvas-xZ3u3nk7.css → BlintzCanvas-DCXOV_yN.css} +1 -1
  20. package/dist/client/assets/{CanvasCsvContent-ViqRJuhW.js → CanvasCsvContent-CRTr-AI7.js} +2 -2
  21. package/dist/client/assets/CanvasFileContent-rOmY1s3T.js +2 -0
  22. package/dist/client/assets/CanvasModel3dContent-D7oRT6ey.js +2 -0
  23. package/dist/client/assets/{ChatAppsOff-D0PbHYqF.js → ChatAppsOff-BmuOTq83.js} +1 -1
  24. package/dist/client/assets/{CodeMirrorDiff-DFNSXeuV.js → CodeMirrorDiff-DidSWwYJ.js} +1 -1
  25. package/dist/client/assets/{CodeMirrorEditor-AgkgsSqN.js → CodeMirrorEditor-BUAWGbRo.js} +1 -1
  26. package/dist/client/assets/{CommitmentList-0V6QivXH.js → CommitmentList-uK4CKaz0.js} +1 -1
  27. package/dist/client/assets/{CommitmentsPage-i3XoHwBj.js → CommitmentsPage-BWITH1r2.js} +1 -1
  28. package/dist/client/assets/{ComputerResourceView-RPoBc-km.js → ComputerResourceView-adgF_EZU.js} +1 -1
  29. package/dist/client/assets/{ComputerViewer-2ugaCd0H.js → ComputerViewer-D87LhxwL.js} +1 -1
  30. package/dist/client/assets/{ConnectionAccessLists-DaPP4U96.js → ConnectionAccessLists-BFEFqcSZ.js} +1 -1
  31. package/dist/client/assets/{ConnectionsPage-BVqYvfk5.js → ConnectionsPage-Cd_cLoSY.js} +1 -1
  32. package/dist/client/assets/{ConventionPage-BoqncrFd.js → ConventionPage-BSztD-gU.js} +1 -1
  33. package/dist/client/assets/{ExtensionPageRoute-BrOEeNX3.js → ExtensionPageRoute-BSge6XRv.js} +1 -1
  34. package/dist/client/assets/{FloatingTanStackRouterDevtools-CqogiFob-DLwix3K7.js → FloatingTanStackRouterDevtools-CqogiFob-TO2CUPG0.js} +1 -1
  35. package/dist/client/assets/HandlePage-BKiqymRF.js +1 -0
  36. package/dist/client/assets/{HeartbeatPage-DgXhbaBJ.js → HeartbeatPage-DIJzdOhj.js} +1 -1
  37. package/dist/client/assets/{KeyEntry-CRr32Ae5.js → KeyEntry-DJnzW3Mu.js} +1 -1
  38. package/dist/client/assets/{LexicalField-DeAoA6yr.js → LexicalField-BxzNvIjJ.js} +1 -1
  39. package/dist/client/assets/{ManagesPage-ZBWYLTZx.js → ManagesPage-BQj8KbYA.js} +1 -1
  40. package/dist/client/assets/{Marketplace-iL5p8Omt.js → Marketplace-CIG5_a_H.js} +4 -4
  41. package/dist/client/assets/{MarketplaceSourcesView-CsNLVOdP.js → MarketplaceSourcesView-16HKvFK-.js} +1 -1
  42. package/dist/client/assets/{McpAppFrame-B1WPswgk.js → McpAppFrame-5xlga1jD.js} +1 -1
  43. package/dist/client/assets/{McpSigninBody-CJ28yu0o.js → McpSigninBody-COIHpHq_.js} +1 -1
  44. package/dist/client/assets/{Model3dViewer-BIZWdK8g.js → Model3dViewer-CQ0sA_kr.js} +1 -1
  45. package/dist/client/assets/NamePage-D7W6VMYd.js +1 -0
  46. package/dist/client/assets/{NewDirectMessageMenu-DRx9e9kM.js → NewDirectMessageMenu-D092y0K9.js} +1 -1
  47. package/dist/client/assets/{NotificationsPage-cfqgSuVy.js → NotificationsPage-CskOPdhh.js} +1 -1
  48. package/dist/client/assets/{OpenMeshSwitch-BIIuKDku.js → OpenMeshSwitch-BHRm328L.js} +1 -1
  49. package/dist/client/assets/{OperatorIdentityForm-BKUSGrs6.js → OperatorIdentityForm-C3op6BIC.js} +1 -1
  50. package/dist/client/assets/{PermissionHistory-Ctdqhib6.js → PermissionHistory-CKebTVkq.js} +1 -1
  51. package/dist/client/assets/{PermissionsPage-CYA_zdrV.js → PermissionsPage-XuPOSYll.js} +1 -1
  52. package/dist/client/assets/{PersonalityPopover-BR4Cpr2C.js → PersonalityPopover-BrZjxakx.js} +1 -1
  53. package/dist/client/assets/PhotoPage-Ch1at4A6.js +1 -0
  54. package/dist/client/assets/{PreviewRefusedNotice-D1Tl265t.js → PreviewRefusedNotice-BANdpT9O.js} +1 -1
  55. package/dist/client/assets/{ProfileFields-T3vVbHRC.js → ProfileFields-Dp68ebW9.js} +1 -1
  56. package/dist/client/assets/{ProfilePanelContainer-CParzTPA.js → ProfilePanelContainer-BKwGdI90.js} +1 -1
  57. package/dist/client/assets/{ProfileRolePicker-BU4eiMKn.js → ProfileRolePicker-ClOdfLda.js} +1 -1
  58. package/dist/client/assets/{PromptSuggestionChips-CGNQc2Tf.js → PromptSuggestionChips-zcW4UJ_O.js} +1 -1
  59. package/dist/client/assets/{ReportsToPopover-Dj5U_Ppi.js → ReportsToPopover-BwDVGqFg.js} +1 -1
  60. package/dist/client/assets/RoomSurface-CSKIvyHH.js +44 -0
  61. package/dist/client/assets/{RoomsPage-Cvs3h6f0.js → RoomsPage-CAvrRbPk.js} +1 -1
  62. package/dist/client/assets/{RunsOnPopover-BUlYwRW4.js → RunsOnPopover-CQ4t9EZ-.js} +1 -1
  63. package/dist/client/assets/{RuntimeConnectFlow-ChrvjC84.js → RuntimeConnectFlow--fVpIf0B.js} +1 -1
  64. package/dist/client/assets/{RuntimeSetupDialog-BK9yo7YF.js → RuntimeSetupDialog-COpyPrqL.js} +1 -1
  65. package/dist/client/assets/SeenDevices-BPw3UgjX.js +19 -0
  66. package/dist/client/assets/{SessionsPage-CWUwU3US.js → SessionsPage-FDyYzuXs.js} +1 -1
  67. package/dist/client/assets/{SettingsDialog-BApzy0J8.js → SettingsDialog-Bdws5dbS.js} +4 -4
  68. package/dist/client/assets/{SkillsPage-z3XnApNX.js → SkillsPage-PLXEY0LB.js} +1 -1
  69. package/dist/client/assets/{TaskDialogWrapper-BEWUpAlk.js → TaskDialogWrapper-CTcW70s8.js} +1 -1
  70. package/dist/client/assets/{TasksEmptyState-CLwpLnIO.js → TasksEmptyState-8RZxhRh6.js} +1 -1
  71. package/dist/client/assets/{TasksPage-CyHjr9OZ.js → TasksPage-C-EtQXKb.js} +1 -1
  72. package/dist/client/assets/{TeamComputerEntry-BHHIofx3.js → TeamComputerEntry-qx_19Htj.js} +1 -1
  73. package/dist/client/assets/{ToolsPage-CckCco8x.js → ToolsPage-D5-fx1EA.js} +1 -1
  74. package/dist/client/assets/{TopologyGraph-Dox7aWP3.js → TopologyGraph-1wtG1BE9.js} +1 -1
  75. package/dist/client/assets/{TourHost-CTBewD-a.js → TourHost-C664E8OY.js} +1 -1
  76. package/dist/client/assets/{UnlinkDialog-CFRgExId.js → UnlinkDialog-Di1oBFA_.js} +1 -1
  77. package/dist/client/assets/{WidgetErrorCard-Dx5oPMlF.js → WidgetErrorCard-BfgGzyqg.js} +1 -1
  78. package/dist/client/assets/_shell-BLTSXXDw.js +80 -0
  79. package/dist/client/assets/{_shell._home-DnBkgWs4.js → _shell._home-Hz78BY6-.js} +1 -1
  80. package/dist/client/assets/{_shell._home.activity-CVCC-EEI.js → _shell._home.activity-BxvI0gkw.js} +1 -1
  81. package/dist/client/assets/{_shell._home.index-Ck6jxwIx.js → _shell._home.index-Cqq81f3P.js} +1 -1
  82. package/dist/client/assets/{_shell._home.tasks-B7QQAZnA.js → _shell._home.tasks-Cth56CwC.js} +1 -1
  83. package/dist/client/assets/{_shell._home.workspaces-DlrRd9tv.js → _shell._home.workspaces-DkoOJSWz.js} +1 -1
  84. package/dist/client/assets/{_shell.channels-CiWehoyl.js → _shell.channels-D_GQU4RB.js} +4 -4
  85. package/dist/client/assets/{_shell.connections-CGP5hZHq.js → _shell.connections-DZrlxs4G.js} +1 -1
  86. package/dist/client/assets/{_shell.feedback-requests-BxxNvw6j.js → _shell.feedback-requests-BTxHdsfb.js} +1 -1
  87. package/dist/client/assets/_shell.marketplace-CZxkAmFz.js +1 -0
  88. package/dist/client/assets/_shell.marketplace_.sources-Q0BTQIuE.js +1 -0
  89. package/dist/client/assets/_shell.session-DvGL0DoX.js +63 -0
  90. package/dist/client/assets/{_shell.team-CsXH3NkS.js → _shell.team-ZxGwa39m.js} +3 -3
  91. package/dist/client/assets/_shell.x._extensionId-B6Tm5KuT.js +1 -0
  92. package/dist/client/assets/_shell.x._extensionId_._-B6Tm5KuT.js +1 -0
  93. package/dist/client/assets/{abnfDiagram-WEYOIA3C-CMdkyiQ3.js → abnfDiagram-WEYOIA3C-CzqPVMdw.js} +1 -1
  94. package/dist/client/assets/{access-copy-CW-z1oMH.js → access-copy-Dj09Xk4b.js} +1 -1
  95. package/dist/client/assets/{arc-Bw7tftQk.js → arc-Bgy7ExYl.js} +1 -1
  96. package/dist/client/assets/{architectureDiagram-ZHVYKT53-BhpXALtX.js → architectureDiagram-ZHVYKT53-DYfb2p9r.js} +1 -1
  97. package/dist/client/assets/{banner-EomQNDOH.js → banner-dlsHTWSf.js} +1 -1
  98. package/dist/client/assets/{blockDiagram-RJAE7QA3-Bxk_BuZv.js → blockDiagram-RJAE7QA3-BkOzLL8s.js} +1 -1
  99. package/dist/client/assets/{c4Diagram-XDPPPE54-CYN0FwR8.js → c4Diagram-XDPPPE54-CsZm4qpD.js} +1 -1
  100. package/dist/client/assets/{card-ww4ebz8h.js → card-Dj6ZfRgu.js} +1 -1
  101. package/dist/client/assets/channel-CGffcDRq.js +1 -0
  102. package/dist/client/assets/{chunk-2E7WHVMD-IPDvYcPa.js → chunk-2E7WHVMD-GA96Jfps.js} +1 -1
  103. package/dist/client/assets/{chunk-2Q5K7J3B-DZ5bU5Ax.js → chunk-2Q5K7J3B-CW2i0IkT.js} +1 -1
  104. package/dist/client/assets/{chunk-4EMNKR2T-DrsWxa6Y.js → chunk-4EMNKR2T-BwFvnPZg.js} +1 -1
  105. package/dist/client/assets/{chunk-55XCU76K-CiBbKG0b.js → chunk-55XCU76K-MOezzAAB.js} +1 -1
  106. package/dist/client/assets/{chunk-5VM5RSS4-B3K3MUav.js → chunk-5VM5RSS4-woru6zOC.js} +1 -1
  107. package/dist/client/assets/{chunk-JWPE2WC7-CjV5RcIh.js → chunk-JWPE2WC7-CUrKlP2M.js} +1 -1
  108. package/dist/client/assets/{chunk-VQ5W62QI-CWoRr0H2.js → chunk-VQ5W62QI-CqZ2cdEu.js} +1 -1
  109. package/dist/client/assets/{chunk-XXDRQBXY-E0nvzXiG.js → chunk-XXDRQBXY-ByAcvWaE.js} +1 -1
  110. package/dist/client/assets/{chunk-ZCHMQSOR-DFop6Lvt.js → chunk-ZCHMQSOR-3nkba9kj.js} +2 -2
  111. package/dist/client/assets/{classDiagram-v2-4MYWR3UA-B7JJfc9z.js → classDiagram-v2-4MYWR3UA-B-zZKAmI.js} +1 -1
  112. package/dist/client/assets/{command-D4fLpJxA.js → command-BAOEURY7.js} +1 -1
  113. package/dist/client/assets/{cose-bilkent-JH36ORCC-BjNppl29.js → cose-bilkent-JH36ORCC-sCKxRv1H.js} +1 -1
  114. package/dist/client/assets/{cpu-DCe0Yyml.js → cpu-TtYQqONc.js} +1 -1
  115. package/dist/client/assets/{cynefin-EF2NZ3EQ-PmRntJwW.js → cynefin-EF2NZ3EQ-CXzvL5Cg.js} +1 -1
  116. package/dist/client/assets/{cynefinDiagram-WF24UDRP-Ctdbp_Vg.js → cynefinDiagram-WF24UDRP-C0wjhu9X.js} +1 -1
  117. package/dist/client/assets/{dagre-NK4GIZVX-5tvLY2ZW.js → dagre-NK4GIZVX-Doi2IPkY.js} +1 -1
  118. package/dist/client/assets/{diagram-CBK3MWTC-DZO-XBOO.js → diagram-CBK3MWTC-11TVuPel.js} +1 -1
  119. package/dist/client/assets/{diagram-I5XIIV2D-CWBbA1Pv.js → diagram-I5XIIV2D-CJq7fHFM.js} +1 -1
  120. package/dist/client/assets/{diagram-ODIL2UCW-hP5A1tGl.js → diagram-ODIL2UCW-2Ae6unuU.js} +1 -1
  121. package/dist/client/assets/{diagram-PFBEJUXE-EI_-RoN7.js → diagram-PFBEJUXE-BXza6_iz.js} +1 -1
  122. package/dist/client/assets/{diagram-RJA3I4VV-TrYq9A4Z.js → diagram-RJA3I4VV-Z0i3uBW9.js} +1 -1
  123. package/dist/client/assets/{diagram-TYUNFSNR-BAQq2OM5.js → diagram-TYUNFSNR-Dq_-g1oP.js} +1 -1
  124. package/dist/client/assets/{ebnfDiagram-V4P3TTPT-cKbeW9dQ.js → ebnfDiagram-V4P3TTPT-vxzIvg-W.js} +1 -1
  125. package/dist/client/assets/{elk-QONTBCTQ-wpfNPp0q.js → elk-QONTBCTQ-BBIXXtg_.js} +1 -1
  126. package/dist/client/assets/{empty-state-DXWQsHMf.js → empty-state-kISAAp0z.js} +1 -1
  127. package/dist/client/assets/{erDiagram-KYQIGQAA-Dk0OrvjE.js → erDiagram-KYQIGQAA-Bk2MeLBx.js} +1 -1
  128. package/dist/client/assets/{execution-config-CAyT2Qoo.js → execution-config-DYFe-VNC.js} +1 -1
  129. package/dist/client/assets/{file-Bf7D_47y.js → file-DEt4KgZG.js} +1 -1
  130. package/dist/client/assets/{file-exclamation-point-DZXE9_8o.js → file-exclamation-point-QqXJhXD9.js} +1 -1
  131. package/dist/client/assets/{file-text-C1ougnBY.js → file-text-CRw31ZWd.js} +1 -1
  132. package/dist/client/assets/{find-latest-widget-fence-B1_-pC-Z.js → find-latest-widget-fence-B3aaiBNI.js} +1 -1
  133. package/dist/client/assets/{flowDiagram-IUGLLWBU-CdlOoRZV.js → flowDiagram-IUGLLWBU-B53m4r8u.js} +1 -1
  134. package/dist/client/assets/{form-D7kF-U0d.js → form-Bjhk9zOn.js} +1 -1
  135. package/dist/client/assets/{format-cron-ZtliseYi.js → format-cron-9tmNIcgl.js} +1 -1
  136. package/dist/client/assets/{ganttDiagram-R7GPNTJY-x0MJLv5d.js → ganttDiagram-R7GPNTJY-CS6TN3R1.js} +1 -1
  137. package/dist/client/assets/{git-branch-B2k77X3Q.js → git-branch-DWerghmw.js} +1 -1
  138. package/dist/client/assets/{gitGraphDiagram-PDYL7XHY-CruCvk7w.js → gitGraphDiagram-PDYL7XHY-D096ZtqE.js} +1 -1
  139. package/dist/client/assets/{graph-5PBe05F8.js → graph-DQpTuPmX.js} +1 -1
  140. package/dist/client/assets/{heart-CmqGJPDc.js → heart-CRkjVW7-.js} +1 -1
  141. package/dist/client/assets/{highlighted-body-KPVGNVTW-Bqu2cQDj.js → highlighted-body-KPVGNVTW-DoVCXOMU.js} +1 -1
  142. package/dist/client/assets/{image-lightbox-BBbz-ThL.js → image-lightbox-BXzbN27o.js} +1 -1
  143. package/dist/client/assets/{image-off-BCtWIY4q.js → image-off-VyMBVwgK.js} +1 -1
  144. package/dist/client/assets/{index-8IAr9b71.js → index-1qv8ldHx.js} +1 -1
  145. package/dist/client/assets/{index-ClBIPuLA.js → index-2EaVZrJe.js} +1 -1
  146. package/dist/client/assets/{index-DcZPWi_I.js → index-8-iQ6PnT.js} +252 -247
  147. package/dist/client/assets/{index-CJ5v2_Cz.js → index-B2rBVMNl.js} +1 -1
  148. package/dist/client/assets/{index-BpmmNapD.js → index-BBcAekWE.js} +1 -1
  149. package/dist/client/assets/index-BFitbVs4.js +1 -0
  150. package/dist/client/assets/{index-xmk9Ohv9.js → index-BLkXoquZ.js} +1 -1
  151. package/dist/client/assets/{index-xaMF1mrN.js → index-BcFMs7lK.js} +1 -1
  152. package/dist/client/assets/{index-EdJm7ZN-.js → index-BiFJIg4n.js} +1 -1
  153. package/dist/client/assets/{index-BuGQxHrf.js → index-BpjEclkM.js} +1 -1
  154. package/dist/client/assets/{index-CtycM8wY.js → index-C24HfJir.js} +1 -1
  155. package/dist/client/assets/{index-DAdo_yIq.js → index-C3sW6rkN.js} +1 -1
  156. package/dist/client/assets/{index-JxeBJIuE.js → index-C6Fo2htT.js} +1 -1
  157. package/dist/client/assets/{index-B5rRtvWx.js → index-C6udJCgz.js} +1 -1
  158. package/dist/client/assets/{index-ChwNEkM8.js → index-CDuYKaGY.js} +1 -1
  159. package/dist/client/assets/{index-Cml5572f.js → index-CEVwhauU.js} +1 -1
  160. package/dist/client/assets/index-CI84yP-g.js +1 -0
  161. package/dist/client/assets/{index-BzPgsdPn.js → index-COMRALJO.js} +1 -1
  162. package/dist/client/assets/index-CiVeycsn.js +17 -0
  163. package/dist/client/assets/{index-BXZlDqvy.js → index-Cs3WB8yn.js} +1 -1
  164. package/dist/client/assets/{index-BrQGZ6iF.js → index-Csr_C1sk.js} +1 -1
  165. package/dist/client/assets/{index-CMNc_OrC.js → index-Ctqe81qr.js} +1 -1
  166. package/dist/client/assets/{index-Dmn03xST.js → index-CvhR1oZB.js} +1 -1
  167. package/dist/client/assets/{index-B6dEbNhI.js → index-CyGRWyhV.js} +1 -1
  168. package/dist/client/assets/{index-mFOJXyAE.js → index-Czm6C7FZ.js} +3 -3
  169. package/dist/client/assets/{index-1ShgR_xt.js → index-D5zUdnZM.js} +1 -1
  170. package/dist/client/assets/{index-Cv0GsC4n.js → index-DBo2XfNv.js} +1 -1
  171. package/dist/client/assets/{index-DIxzqCwG.js → index-DKWpwwxo.js} +1 -1
  172. package/dist/client/assets/{index-BXMxoWrk.js → index-DN2sTT2U.js} +1 -1
  173. package/dist/client/assets/index-DNzk9m1D.js +23 -0
  174. package/dist/client/assets/{index-CrflCTqO.css → index-DUZrTFYD.css} +1 -1
  175. package/dist/client/assets/{index-t4Ud6YTX.js → index-DX_2Mxwv.js} +1 -1
  176. package/dist/client/assets/{index-C11Ssk2u.js → index-Dgrk2udV.js} +2 -2
  177. package/dist/client/assets/{index-BCk4wW-T.js → index-DgyhdQnI.js} +1 -1
  178. package/dist/client/assets/{index-CQ0VLZf-.js → index-DmFNztTX.js} +1 -1
  179. package/dist/client/assets/{index-rWZWP3Wh.js → index-TnoaFCrj.js} +1 -1
  180. package/dist/client/assets/{index-DbDI5BAA.js → index-_emDKzsu.js} +1 -1
  181. package/dist/client/assets/{index-BIIH5CXj.js → index-b9p_y2Ql.js} +1 -1
  182. package/dist/client/assets/{index-yI1r4pSP.js → index-gIQ7FrL9.js} +1 -1
  183. package/dist/client/assets/{index-DsJWzmWw.js → index-igLqtuoO.js} +1 -1
  184. package/dist/client/assets/{index-Do6eeFps.js → index-n3-zWcH-.js} +2 -2
  185. package/dist/client/assets/{index-8TfzCkKR.js → index-rCvQat0D.js} +1 -1
  186. package/dist/client/assets/{index-BfRW2WTx.js → index-setKr4xl.js} +1 -1
  187. package/dist/client/assets/{index-DrA03bMq.js → index-t3eRSGcT.js} +1 -1
  188. package/dist/client/assets/{index.esm-CZZtbPRj.js → index.esm-bLeQzVWT.js} +1 -1
  189. package/dist/client/assets/{infoDiagram-MVDRKAX5-Bj9DD77n.js → infoDiagram-MVDRKAX5-nN_N76Fn.js} +1 -1
  190. package/dist/client/assets/{inline-code-g9PVHZI2.js → inline-code-D9bLKHjY.js} +1 -1
  191. package/dist/client/assets/{ishikawaDiagram-HPEHV2GE-DckI6dhS.js → ishikawaDiagram-HPEHV2GE-CiLFbWXd.js} +1 -1
  192. package/dist/client/assets/{journeyDiagram-BOSHW7O7-Ce1GAVa0.js → journeyDiagram-BOSHW7O7-Dn3yOv96.js} +1 -1
  193. package/dist/client/assets/{kanban-definition-FNSA4HC5-Kq5O9rZa.js → kanban-definition-FNSA4HC5-JxiBdBQC.js} +1 -1
  194. package/dist/client/assets/{layers-D3lEdRF0.js → layers-DTnLoRvE.js} +1 -1
  195. package/dist/client/assets/{lightbulb-BFE-KkFU.js → lightbulb-CRKLr5q3.js} +1 -1
  196. package/dist/client/assets/{link-2-Dvb6g-2Q.js → link-2-hgHg-lyw.js} +1 -1
  197. package/dist/client/assets/{list-runtime-types-8YGEK3Al.js → list-runtime-types-Bb33QiMC.js} +1 -1
  198. package/dist/client/assets/{markdown-content-Cqq_QMXA.js → markdown-content-D0FpU2cz.js} +1 -1
  199. package/dist/client/assets/{mention-pill-Bnzt4u2l.js → mention-pill-uuaUvwSW.js} +1 -1
  200. package/dist/client/assets/{mermaid.core-dpp59v7L.js → mermaid.core-x3Hh6iut.js} +4 -4
  201. package/dist/client/assets/{message-square-off-BX2XnEDx.js → message-square-off-B8N6YF9R.js} +1 -1
  202. package/dist/client/assets/{mindmap-definition-6OY57UG3-CFdfJO6g.js → mindmap-definition-6OY57UG3-D0SEv5Re.js} +1 -1
  203. package/dist/client/assets/{more-details-B4lBMpKi.js → more-details-CadxnGyH.js} +1 -1
  204. package/dist/client/assets/{owner-notice-ByjrIRmX.js → owner-notice-CJHyha58.js} +1 -1
  205. package/dist/client/assets/{package-6Rbxg35g.js → package-B8G7jQm-.js} +1 -1
  206. package/dist/client/assets/{page-container-DoZzad36.js → page-container-Bb-_N7lw.js} +1 -1
  207. package/dist/client/assets/{paperclip-B-jDXtxw.js → paperclip-BDeYGKqh.js} +1 -1
  208. package/dist/client/assets/{path-input-DpqUD8hN.js → path-input-BIfexEKz.js} +1 -1
  209. package/dist/client/assets/{pegDiagram-ECIUJNBX-eVnSw2Ma.js → pegDiagram-ECIUJNBX-7ivMd0-b.js} +1 -1
  210. package/dist/client/assets/{pieDiagram-GNMPY74T-BYG7LY5Q.js → pieDiagram-GNMPY74T-DGDkbFvu.js} +1 -1
  211. package/dist/client/assets/{plug-DnaAhcy4.js → plug-wP1d6OUX.js} +1 -1
  212. package/dist/client/assets/{primer-trigger-Da5ECjY8.js → primer-trigger-CEli_z4n.js} +1 -1
  213. package/dist/client/assets/{profile-errors-GbTNc2-M.js → profile-errors-C1qSJkiG.js} +1 -1
  214. package/dist/client/assets/{progress-DlIRjXIA.js → progress-DmUieXLn.js} +1 -1
  215. package/dist/client/assets/{quadrantDiagram-D57K4MC3-CRgNKuHR.js → quadrantDiagram-D57K4MC3-AFQRVSsK.js} +1 -1
  216. package/dist/client/assets/{query-error-state-DB-Jby7_.js → query-error-state--8AnWSSn.js} +1 -1
  217. package/dist/client/assets/query-keys-DeYqUDia.js +1 -0
  218. package/dist/client/assets/{radio-CaaE60ws.js → radio-mkA-Sqe0.js} +1 -1
  219. package/dist/client/assets/{railroadDiagram-Y72NRBL7-DGL-Hqz9.js → railroadDiagram-Y72NRBL7-3QBa2d3j.js} +1 -1
  220. package/dist/client/assets/registry-Bnd-HFt3.js +1 -0
  221. package/dist/client/assets/{relay-trace-schemas-CcCqyOrA.js → relay-trace-schemas-fScydQ3A.js} +1 -1
  222. package/dist/client/assets/{requirementDiagram-EQYSW5RA-DKsFpU3l.js → requirementDiagram-EQYSW5RA-BVBqcASy.js} +1 -1
  223. package/dist/client/assets/{room-files-source-CbbVpvSW.js → room-files-source-BhkPUTiP.js} +1 -1
  224. package/dist/client/assets/{rotate-ccw-clock-CeY00nlZ.js → rotate-ccw-clock-DiuTseKz.js} +1 -1
  225. package/dist/client/assets/{rotate-cw-Djl5J_x9.js → rotate-cw-DvoxWwSx.js} +1 -1
  226. package/dist/client/assets/{sankeyDiagram-SY24JHO5-BFRkDxic.js → sankeyDiagram-SY24JHO5-DFjfOD38.js} +1 -1
  227. package/dist/client/assets/{scroll-area-BOqrziJf.js → scroll-area-DYyyRqW_.js} +1 -1
  228. package/dist/client/assets/{search-x-B_mHjnlo.js → search-x-CA-FzEqZ.js} +1 -1
  229. package/dist/client/assets/{sequenceDiagram-BLEHNHQU-fHea3KOI.js → sequenceDiagram-BLEHNHQU-Cr9LzoSF.js} +1 -1
  230. package/dist/client/assets/{shield-check-Csnr5rFy.js → shield-check-CpUB_Ju1.js} +1 -1
  231. package/dist/client/assets/{shield-x-Dhl4YvvW.js → shield-x-B0W_7qwR.js} +1 -1
  232. package/dist/client/assets/{signed-in-BMqAss8c.js → signed-in-X2utDqQS.js} +1 -1
  233. package/dist/client/assets/{sizeCapture-INFHLROL-CztsD3qF.js → sizeCapture-INFHLROL-Do_jfNyT.js} +1 -1
  234. package/dist/client/assets/{soul-file-DOfamgB5.js → soul-file-DgfhKQIK.js} +1 -1
  235. package/dist/client/assets/{stateDiagram-v2-A6IESKWZ-CWyOqZ9S.js → stateDiagram-v2-A6IESKWZ-BCi9yk_0.js} +1 -1
  236. package/dist/client/assets/{swimlanes-B3ENRKFQ-0EfOxSAX.js → swimlanes-B3ENRKFQ-3SSAw2av.js} +1 -1
  237. package/dist/client/assets/swimlanesDiagram-AYQRV4AK-jpZCGfva.js +8 -0
  238. package/dist/client/assets/{table-L7FvN6Or.js → table-DvU_oS4E.js} +1 -1
  239. package/dist/client/assets/{terminal-C9M5a_PS.js → terminal-Dw2QZ7Dh.js} +1 -1
  240. package/dist/client/assets/{timeline-definition-JXYKGLGB-sFyYvZ20.js → timeline-definition-JXYKGLGB-DTLPXTMA.js} +1 -1
  241. package/dist/client/assets/{trust-posture-dl6qwDtI.js → trust-posture-2MR0ap9o.js} +1 -1
  242. package/dist/client/assets/{unplug-CFUEVRbc.js → unplug-CAVOLB2R.js} +1 -1
  243. package/dist/client/assets/{unverified-catalog-notice-CdYU3WEJ.js → unverified-catalog-notice-u4ikVg8J.js} +1 -1
  244. package/dist/client/assets/{use-adapter-catalog-YTofdqDJ.js → use-adapter-catalog-BQKfRxXC.js} +1 -1
  245. package/dist/client/assets/{use-bindings-CpyT6kNu.js → use-bindings-BV6HA0MD.js} +1 -1
  246. package/dist/client/assets/{use-composer-prefs-CK_EK_QJ.js → use-composer-prefs-DCSzOnEO.js} +1 -1
  247. package/dist/client/assets/{use-connector-management-DwoK8kon.js → use-connector-management-fr1tx-GZ.js} +1 -1
  248. package/dist/client/assets/{use-deep-link-scroll-CgRjt48R.js → use-deep-link-scroll-v02TbidQ.js} +1 -1
  249. package/dist/client/assets/{use-delete-binding-CfsnMXrL.js → use-delete-binding-CnziYpXo.js} +1 -1
  250. package/dist/client/assets/{use-dev-links-B3I-ZK34.js → use-dev-links-k4YWFO1v.js} +1 -1
  251. package/dist/client/assets/{use-external-adapter-catalog-aGlZNRrp.js → use-external-adapter-catalog-DoGUfa2F.js} +1 -1
  252. package/dist/client/assets/{use-full-activity-feed-B61Olhdw.js → use-full-activity-feed-CQNxgxnw.js} +1 -1
  253. package/dist/client/assets/use-is-below-desktop-DR8FEbRW.js +1 -0
  254. package/dist/client/assets/use-is-hub-BmpgFnFp.js +1 -0
  255. package/dist/client/assets/{use-jump-back-in-C39GOTHa.js → use-jump-back-in-BuO6A0P7.js} +1 -1
  256. package/dist/client/assets/{use-local-browser-DCwzB4D8.js → use-local-browser-BNzN5O1P.js} +1 -1
  257. package/dist/client/assets/{use-mesh-topology-LRYxFuZp.js → use-mesh-topology-CpIDE8lD.js} +1 -1
  258. package/dist/client/assets/{use-mounted-ref-CZaegwTr.js → use-mounted-ref-BAO3qunF.js} +1 -1
  259. package/dist/client/assets/{use-notification-prefs-FtOiUS5H.js → use-notification-prefs-CtqeH5Pk.js} +1 -1
  260. package/dist/client/assets/{use-panel-tab-placements-Dv2OPvKh.js → use-panel-tab-placements-DFobGBRm.js} +1 -1
  261. package/dist/client/assets/use-pending-read-Do0_vZ2I.js +1 -0
  262. package/dist/client/assets/{use-personality-commit-BB5aeh6p.js → use-personality-commit-BvqCwzAC.js} +1 -1
  263. package/dist/client/assets/{use-promo-activation-BW0u7n7m.js → use-promo-activation-Dz5cYm-X.js} +1 -1
  264. package/dist/client/assets/{use-promo-dismissals-BOXzW4kD.js → use-promo-dismissals-CuOsnqnZ.js} +1 -1
  265. package/dist/client/assets/{use-pulse-freshness-ClW-MLMo.js → use-pulse-freshness-qcTH6PM7.js} +1 -1
  266. package/dist/client/assets/{use-relay-config-hItHtkSr.js → use-relay-config-1mAMDNbc.js} +1 -1
  267. package/dist/client/assets/{use-room-follow-claim-wotzxUWc.js → use-room-follow-claim-CCGhsyH3.js} +1 -1
  268. package/dist/client/assets/{use-roving-tab-list-DkbO6xSs.js → use-roving-tab-list-Bsg2dfUx.js} +1 -1
  269. package/dist/client/assets/use-session-canvas-awPngMKg.js +25 -0
  270. package/dist/client/assets/{use-session-diagnostics-DmxvD-wy.js → use-session-diagnostics-D5g8Mc52.js} +2 -2
  271. package/dist/client/assets/{use-unclaimed-chats-DKpexDm3.js → use-unclaimed-chats-Db_wuzt0.js} +1 -1
  272. package/dist/client/assets/use-update-config-DwtH_H9Z.js +1 -0
  273. package/dist/client/assets/{useMutationState-Btf2Hp1a.js → useMutationState-BvwBDXKc.js} +1 -1
  274. package/dist/client/assets/{usecaseDiagram-WPOLBNNX-DRngjDUq.js → usecaseDiagram-WPOLBNNX-1zKygEKR.js} +1 -1
  275. package/dist/client/assets/{vennDiagram-Q3Y3IDCW-iK-dlS1-.js → vennDiagram-Q3Y3IDCW-BR2EbgGY.js} +1 -1
  276. package/dist/client/assets/{wardleyDiagram-IVAIDKWA-sOS67Cks.js → wardleyDiagram-IVAIDKWA-D0OwouJc.js} +1 -1
  277. package/dist/client/assets/{xychartDiagram-4URNHDU4-EgnLiIao.js → xychartDiagram-4URNHDU4-BM-7_FQQ.js} +1 -1
  278. package/dist/client/index.html +2 -2
  279. package/dist/drizzle/20261018123612_session_route.sql +1 -0
  280. package/dist/drizzle/meta/20261018123612_snapshot.json +14027 -0
  281. package/dist/drizzle/meta/_journal.json +7 -0
  282. package/dist/server/index.js +31594 -28878
  283. package/dist/server/index.js.map +2 -2
  284. package/package.json +6 -6
  285. package/dist/client/assets/CanvasFileContent-ClcHZ_l-.js +0 -2
  286. package/dist/client/assets/CanvasModel3dContent-Cm3msNdQ.js +0 -2
  287. package/dist/client/assets/HandlePage-B_5GLHsp.js +0 -1
  288. package/dist/client/assets/NamePage-0nr288eM.js +0 -1
  289. package/dist/client/assets/PhotoPage-C3Ir3wlA.js +0 -1
  290. package/dist/client/assets/PresetPicker-zGvDOqTf.js +0 -19
  291. package/dist/client/assets/RoomSurface-BIyjtxKD.js +0 -44
  292. package/dist/client/assets/_shell-BHUZq_8C.js +0 -80
  293. package/dist/client/assets/_shell.marketplace-BoAmyvPt.js +0 -1
  294. package/dist/client/assets/_shell.marketplace_.sources-BpqWjkGL.js +0 -1
  295. package/dist/client/assets/_shell.session-KyPj3OxK.js +0 -61
  296. package/dist/client/assets/_shell.x._extensionId-CfiAgtoq.js +0 -1
  297. package/dist/client/assets/_shell.x._extensionId_._-CfiAgtoq.js +0 -1
  298. package/dist/client/assets/channel-DZpRF3QJ.js +0 -1
  299. package/dist/client/assets/index-Cl8trmnL.js +0 -1
  300. package/dist/client/assets/index-Cp3yShS8.js +0 -23
  301. package/dist/client/assets/index-DKDK-3KH.js +0 -17
  302. package/dist/client/assets/index-DPNBHwcQ.js +0 -1
  303. package/dist/client/assets/registry-DS1Ghdft.js +0 -1
  304. package/dist/client/assets/swimlanesDiagram-AYQRV4AK-C7fkUKrq.js +0 -8
  305. package/dist/client/assets/use-is-below-desktop-Qwyg-mFb.js +0 -1
  306. package/dist/client/assets/use-is-hub-CSz6NDaP.js +0 -1
  307. package/dist/client/assets/use-pending-read-DBOl1ee_.js +0 -1
  308. package/dist/client/assets/use-session-canvas-C_fuAgW_.js +0 -24
  309. package/dist/client/assets/use-update-config-CSYwg557.js +0 -1
package/dist/bin/cli.js CHANGED
@@ -22178,15 +22178,26 @@ var init_runtime_settings = __esm({
22178
22178
  * agent is the same executable with the same permissions and the same
22179
22179
  * per-dispatch boundary check, held open for longer — nothing about what
22180
22180
  * it may DO changes. The real cost is memory, and the bounds on it live
22181
- * in code rather than under this setting: at most twelve stay warm, about
22182
- * 1 GB each worst case, and the idle reaper closes the rest.
22181
+ * in `maxWarmProcesses` below, and the idle
22182
+ * reaper closes the rest.
22183
22183
  *
22184
22184
  * Read when a chat's agent starts, so a chat already under way keeps
22185
22185
  * the way it started until its process is replaced. That is what lets
22186
22186
  * one machine run chats both ways at the same time and compare them on
22187
22187
  * the same work (spec `persistent-session-runtime` §P3).
22188
22188
  */
22189
- persistentSession: external_exports.boolean().default(true)
22189
+ persistentSession: external_exports.boolean().default(true),
22190
+ /**
22191
+ * The most chats whose agent may be running at once on this machine
22192
+ * (DOR-3012). `null`, the default, sizes it to the machine's memory: one per
22193
+ * 2 GB, at least 12 and at most 32. A number pins it.
22194
+ *
22195
+ * A chat past the limit is never refused outright: the least recently used
22196
+ * idle agent is closed to make room, and when every one is mid-turn the chat
22197
+ * waits for one to finish. Read when an agent starts, so a change applies to
22198
+ * the next one.
22199
+ */
22200
+ maxWarmProcesses: external_exports.number().int().min(1).max(128).nullable().default(null)
22190
22201
  });
22191
22202
  DoeInferenceConfigSchema = external_exports.object({
22192
22203
  source: external_exports.enum(["api-key", "local", "dorkos-credits"]),
@@ -22284,7 +22295,8 @@ var init_runtime_settings = __esm({
22284
22295
  // carry this value — the per-field one on `ClaudeCodeSettingsSchema`,
22285
22296
  // this one, and the `runtimes` literal below — and all three have to
22286
22297
  // agree or the shallow defaults-merge lands somebody on the old value.
22287
- persistentSession: true
22298
+ persistentSession: true,
22299
+ maxWarmProcesses: null
22288
22300
  })),
22289
22301
  doe: DoeRuntimeSettingsSchema,
22290
22302
  opencode: external_exports.object({
@@ -22377,7 +22389,8 @@ var init_runtime_settings = __esm({
22377
22389
  defaultModel: null,
22378
22390
  defaultEffort: null,
22379
22391
  defaultTrustStop: null,
22380
- persistentSession: true
22392
+ persistentSession: true,
22393
+ maxWarmProcesses: null
22381
22394
  },
22382
22395
  opencode: {
22383
22396
  enabled: true,
@@ -26362,7 +26375,6 @@ function repoUrl(path66 = "") {
26362
26375
  var GITHUB_ORG, links;
26363
26376
  var init_links = __esm({
26364
26377
  "../shared/src/links.ts"() {
26365
- "use strict";
26366
26378
  GITHUB_ORG = "dork-labs";
26367
26379
  links = {
26368
26380
  /** The public origin of the marketing site, the docs and DorkOS Cloud. */
@@ -26761,7 +26773,7 @@ import path2 from "path";
26761
26773
  import { fileURLToPath } from "url";
26762
26774
  function resolveVersion() {
26763
26775
  if (env2.DORKOS_VERSION_OVERRIDE) return env2.DORKOS_VERSION_OVERRIDE;
26764
- if (true) return "0.121.0";
26776
+ if (true) return "0.123.0";
26765
26777
  const pkgPath = path2.join(path2.dirname(fileURLToPath(import.meta.url)), "../../package.json");
26766
26778
  return JSON.parse(readFileSync(pkgPath, "utf-8")).version;
26767
26779
  }
@@ -28210,7 +28222,7 @@ var init_interceptor = __esm({
28210
28222
  for (const callback of this.callbacks) {
28211
28223
  callback();
28212
28224
  }
28213
- if (signal) {
28225
+ if (signal && process6.listenerCount(signal) === 0) {
28214
28226
  if (IS_WINDOWS && (signal !== "SIGINT" && signal !== "SIGTERM" && signal !== "SIGKILL")) {
28215
28227
  process6.kill(process6.pid, "SIGTERM");
28216
28228
  } else {
@@ -40753,6 +40765,12 @@ function seedLanAccess(store) {
40753
40765
  if ("lanAccess" in server2) return;
40754
40766
  store.set("server", { ...server2, lanAccess: false });
40755
40767
  }
40768
+ function seedMaxWarmProcesses(store) {
40769
+ const claudeCode = store.get("runtimes.claudeCode");
40770
+ if (claudeCode === null || typeof claudeCode !== "object" || Array.isArray(claudeCode)) return;
40771
+ if ("maxWarmProcesses" in claudeCode) return;
40772
+ store.set("runtimes.claudeCode", { ...claudeCode, maxWarmProcesses: null });
40773
+ }
40756
40774
  function raiseEngagedWindowDefaults(store) {
40757
40775
  if (store.get("rooms") === void 0) return;
40758
40776
  const minutes = store.get("rooms.engagedWindowMinutes");
@@ -41451,7 +41469,14 @@ var init_config_migrations = __esm({
41451
41469
  enabled: sessionRelay.enabled === true
41452
41470
  });
41453
41471
  }
41454
- }
41472
+ },
41473
+ // v0.122.0 is the newest release, so this opens 0.123.0. Frozen from merge;
41474
+ // anything further opens `'0.124.0'`.
41475
+ //
41476
+ // Writes `runtimes.claudeCode.maxWarmProcesses: null` where the stored
41477
+ // section lacks it, and touches nothing else (DOR-3012). See
41478
+ // `seedMaxWarmProcesses`.
41479
+ "0.123.0": seedMaxWarmProcesses
41455
41480
  };
41456
41481
  }
41457
41482
  });
@@ -41550,6 +41575,7 @@ __export(config_manager_exports, {
41550
41575
  seedIdentityPromptDismissedDefault: () => seedIdentityPromptDismissedDefault,
41551
41576
  seedLanAccess: () => seedLanAccess,
41552
41577
  seedMaxConcurrentTurnsPerAgent: () => seedMaxConcurrentTurnsPerAgent,
41578
+ seedMaxWarmProcesses: () => seedMaxWarmProcesses,
41553
41579
  seedMemoryProviderDefault: () => seedMemoryProviderDefault,
41554
41580
  seedPermissionPresetFromDoor: () => seedPermissionPresetFromDoor,
41555
41581
  seedRoomCanvasOps: () => seedRoomCanvasOps,
@@ -49414,6 +49440,7 @@ function parseSkillFile(filePath, content, schema3, options) {
49414
49440
  }
49415
49441
  var init_parser = __esm({
49416
49442
  "../skills/src/parser.ts"() {
49443
+ "use strict";
49417
49444
  init_constants7();
49418
49445
  init_frontmatter();
49419
49446
  }
@@ -52983,6 +53010,27 @@ var init_mesh_schemas = __esm({
52983
53010
  }
52984
53011
  });
52985
53012
 
53013
+ // ../shared/src/direct-notes-context.ts
53014
+ var DirectNotesDataSchema;
53015
+ var init_direct_notes_context = __esm({
53016
+ "../shared/src/direct-notes-context.ts"() {
53017
+ "use strict";
53018
+ init_zod();
53019
+ DirectNotesDataSchema = external_exports.object({
53020
+ withName: external_exports.string().min(1),
53021
+ notes: external_exports.array(
53022
+ external_exports.object({
53023
+ at: external_exports.string().min(1),
53024
+ from: external_exports.string().min(1),
53025
+ fromYou: external_exports.boolean(),
53026
+ text: external_exports.string()
53027
+ })
53028
+ ).min(1),
53029
+ omitted: external_exports.number().int().nonnegative()
53030
+ });
53031
+ }
53032
+ });
53033
+
52986
53034
  // ../shared/src/additional-context.ts
52987
53035
  var GitStatusDataSchema, EnvDataSchema, RelayContextDataSchema, RoomContextOriginSchema, RoomContextAuthorSchema, RoomContextMemberSchema, RoomContextEntrySchema, RoomContextAcknowledgmentSchema, MainMovedSchema, WorktreeRefreshOutcomeSchema, RoomContextFilesSchema, RoomContextDataSchema, SeedContextDataSchema, StagedContextDataSchema, AccountsAccessDataSchema, ContextWarningDataSchema, ApprovalVerdictDataSchema, AdditionalContextEntrySchema, AdditionalContextSchema, ClientContextSchema;
52988
53036
  var init_additional_context = __esm({
@@ -52992,6 +53040,7 @@ var init_additional_context = __esm({
52992
53040
  init_canvas_channel_schemas();
52993
53041
  init_mesh_schemas();
52994
53042
  init_schemas4();
53043
+ init_direct_notes_context();
52995
53044
  GitStatusDataSchema = external_exports.object({
52996
53045
  isRepo: external_exports.boolean(),
52997
53046
  branch: external_exports.string().optional(),
@@ -53214,6 +53263,11 @@ var init_additional_context = __esm({
53214
53263
  scope: external_exports.literal("per-turn"),
53215
53264
  data: ApprovalVerdictDataSchema
53216
53265
  }),
53266
+ external_exports.object({
53267
+ kind: external_exports.literal("direct_notes"),
53268
+ scope: external_exports.literal("per-turn"),
53269
+ data: DirectNotesDataSchema
53270
+ }),
53217
53271
  external_exports.object({
53218
53272
  kind: external_exports.literal("context_warning"),
53219
53273
  scope: external_exports.literal("per-turn"),
@@ -83015,7 +83069,7 @@ var init_factory = __esm({
83015
83069
  }
83016
83070
  return transformedData;
83017
83071
  };
83018
- const transformOutput = async (data, inputModel, select2 = [], join61) => {
83072
+ const transformOutput = async (data, inputModel, select2 = [], join62) => {
83019
83073
  const transformSingleOutput = async (data2, inputModel2, select3 = []) => {
83020
83074
  if (!data2) return null;
83021
83075
  const modelKey2 = getDefaultModelName(inputModel2);
@@ -83052,10 +83106,10 @@ var init_factory = __esm({
83052
83106
  }
83053
83107
  return transformedData2;
83054
83108
  };
83055
- if (!join61 || Object.keys(join61).length === 0) return await transformSingleOutput(data, inputModel, select2);
83109
+ if (!join62 || Object.keys(join62).length === 0) return await transformSingleOutput(data, inputModel, select2);
83056
83110
  const modelKey = getDefaultModelName(inputModel);
83057
83111
  const transformedData = await transformSingleOutput(data, modelKey, select2);
83058
- const requiredModels = Object.entries(join61).map(([model, joinConfig]) => ({
83112
+ const requiredModels = Object.entries(join62).map(([model, joinConfig]) => ({
83059
83113
  modelName: model,
83060
83114
  defaultModelName: joinConfig.modelKey ?? getDefaultModelName(model),
83061
83115
  joinConfig
@@ -83154,8 +83208,8 @@ var init_factory = __esm({
83154
83208
  if (!unsanitizedJoin) return void 0;
83155
83209
  if (Object.keys(unsanitizedJoin).length === 0) return void 0;
83156
83210
  const transformedJoin = {};
83157
- for (const [model, join61] of Object.entries(unsanitizedJoin)) {
83158
- if (!join61) continue;
83211
+ for (const [model, join62] of Object.entries(unsanitizedJoin)) {
83212
+ if (!join62) continue;
83159
83213
  const defaultModelName = getDefaultModelName(model);
83160
83214
  const defaultBaseModelName = getDefaultModelName(baseModel);
83161
83215
  let foreignKeys = Object.entries(schema3[defaultModelName].fields).filter(([field, fieldAttributes]) => fieldAttributes.references && getDefaultModelName(fieldAttributes.references.model) === defaultBaseModelName);
@@ -83196,7 +83250,7 @@ var init_factory = __esm({
83196
83250
  const isUnique = to === "id" ? true : foreignKeyAttributes.unique ?? false;
83197
83251
  let limit = options.advanced?.database?.defaultFindManyLimit ?? 100;
83198
83252
  if (isUnique) limit = 1;
83199
- else if (typeof join61 === "object" && typeof join61.limit === "number") limit = join61.limit;
83253
+ else if (typeof join62 === "object" && typeof join62.limit === "number") limit = join62.limit;
83200
83254
  transformedJoin[getModelName(model)] = {
83201
83255
  modelKey: model,
83202
83256
  on: {
@@ -83429,21 +83483,21 @@ var init_factory = __esm({
83429
83483
  where: unsafeWhere,
83430
83484
  action: "findOne"
83431
83485
  });
83432
- let join61;
83486
+ let join62;
83433
83487
  let passJoinToAdapter = true;
83434
83488
  if (!config3.disableTransformJoin) {
83435
83489
  const result2 = transformJoinClause(modelKey, unsafeJoin, select2);
83436
83490
  if (result2) {
83437
- join61 = result2.join;
83491
+ join62 = result2.join;
83438
83492
  select2 = result2.select;
83439
83493
  }
83440
- if (!options.advanced?.database?.joins && join61 && Object.keys(join61).length > 0) passJoinToAdapter = false;
83441
- } else join61 = unsafeJoin;
83494
+ if (!options.advanced?.database?.joins && join62 && Object.keys(join62).length > 0) passJoinToAdapter = false;
83495
+ } else join62 = unsafeJoin;
83442
83496
  debugLog({ method: "findOne" }, `${formatTransactionId(thisTransactionId)} ${formatStep(1, 3)}`, `${formatMethod("findOne")}:`, {
83443
83497
  model,
83444
83498
  where,
83445
83499
  select: select2,
83446
- join: join61
83500
+ join: join62
83447
83501
  });
83448
83502
  const res = await withSpan3(`db findOne ${model}`, {
83449
83503
  [ATTR_DB_OPERATION_NAME]: "findOne",
@@ -83453,14 +83507,14 @@ var init_factory = __esm({
83453
83507
  modelKey,
83454
83508
  where,
83455
83509
  select: select2,
83456
- join: passJoinToAdapter ? join61 : void 0
83510
+ join: passJoinToAdapter ? join62 : void 0
83457
83511
  }));
83458
83512
  debugLog({ method: "findOne" }, `${formatTransactionId(thisTransactionId)} ${formatStep(2, 3)}`, `${formatMethod("findOne")} ${formatAction("DB Result")}:`, {
83459
83513
  model,
83460
83514
  data: res
83461
83515
  });
83462
83516
  let transformed = res;
83463
- if (!config3.disableTransformOutput) transformed = await transformOutput(res, modelKey, select2, join61);
83517
+ if (!config3.disableTransformOutput) transformed = await transformOutput(res, modelKey, select2, join62);
83464
83518
  debugLog({ method: "findOne" }, `${formatTransactionId(thisTransactionId)} ${formatStep(3, 3)}`, `${formatMethod("findOne")} ${formatAction("Parsed Result")}:`, {
83465
83519
  model,
83466
83520
  data: transformed
@@ -83478,23 +83532,23 @@ var init_factory = __esm({
83478
83532
  where: unsafeWhere,
83479
83533
  action: "findMany"
83480
83534
  });
83481
- let join61;
83535
+ let join62;
83482
83536
  let passJoinToAdapter = true;
83483
83537
  if (!config3.disableTransformJoin) {
83484
83538
  const result2 = transformJoinClause(modelKey, unsafeJoin, select2);
83485
83539
  if (result2) {
83486
- join61 = result2.join;
83540
+ join62 = result2.join;
83487
83541
  select2 = result2.select;
83488
83542
  }
83489
- if (!options.advanced?.database?.joins && join61 && Object.keys(join61).length > 0) passJoinToAdapter = false;
83490
- } else join61 = unsafeJoin;
83543
+ if (!options.advanced?.database?.joins && join62 && Object.keys(join62).length > 0) passJoinToAdapter = false;
83544
+ } else join62 = unsafeJoin;
83491
83545
  debugLog({ method: "findMany" }, `${formatTransactionId(thisTransactionId)} ${formatStep(1, 3)}`, `${formatMethod("findMany")}:`, {
83492
83546
  model,
83493
83547
  where,
83494
83548
  limit,
83495
83549
  sortBy,
83496
83550
  offset,
83497
- join: join61
83551
+ join: join62
83498
83552
  });
83499
83553
  const res = await withSpan3(`db findMany ${model}`, {
83500
83554
  [ATTR_DB_OPERATION_NAME]: "findMany",
@@ -83507,7 +83561,7 @@ var init_factory = __esm({
83507
83561
  select: select2,
83508
83562
  sortBy,
83509
83563
  offset,
83510
- join: passJoinToAdapter ? join61 : void 0
83564
+ join: passJoinToAdapter ? join62 : void 0
83511
83565
  }));
83512
83566
  debugLog({ method: "findMany" }, `${formatTransactionId(thisTransactionId)} ${formatStep(2, 3)}`, `${formatMethod("findMany")} ${formatAction("DB Result")}:`, {
83513
83567
  model,
@@ -83515,7 +83569,7 @@ var init_factory = __esm({
83515
83569
  });
83516
83570
  let transformed = res;
83517
83571
  if (!config3.disableTransformOutput) transformed = await Promise.all(res.map(async (r3) => {
83518
- return await transformOutput(r3, modelKey, void 0, join61);
83572
+ return await transformOutput(r3, modelKey, void 0, join62);
83519
83573
  }));
83520
83574
  debugLog({ method: "findMany" }, `${formatTransactionId(thisTransactionId)} ${formatStep(3, 3)}`, `${formatMethod("findMany")} ${formatAction("Parsed Result")}:`, {
83521
83575
  model,
@@ -83870,7 +83924,7 @@ var init_dist9 = __esm({
83870
83924
  return sortBy.direction === "asc" ? comparison : -comparison;
83871
83925
  });
83872
83926
  };
83873
- function convertWhereClause(where, model, modelKey, join61, select2) {
83927
+ function convertWhereClause(where, model, modelKey, join62, select2) {
83874
83928
  const baseRecords = (() => {
83875
83929
  const table2 = activeDb2[model];
83876
83930
  if (!table2) {
@@ -83930,14 +83984,14 @@ var init_dist9 = __esm({
83930
83984
  })))));
83931
83985
  return records;
83932
83986
  })();
83933
- if (!join61) return baseRecords;
83987
+ if (!join62) return baseRecords;
83934
83988
  const grouped = /* @__PURE__ */ new Map();
83935
83989
  const seenIds = /* @__PURE__ */ new Map();
83936
83990
  for (const baseRecord of baseRecords) {
83937
83991
  const baseId = String(baseRecord.id);
83938
83992
  if (!grouped.has(baseId)) {
83939
83993
  const nested = { ...baseRecord };
83940
- for (const [joinModel, joinAttr] of Object.entries(join61)) {
83994
+ for (const [joinModel, joinAttr] of Object.entries(join62)) {
83941
83995
  const joinModelName = joinModel;
83942
83996
  if (joinAttr.relation === "one-to-one") nested[joinModelName] = null;
83943
83997
  else {
@@ -83948,7 +84002,7 @@ var init_dist9 = __esm({
83948
84002
  grouped.set(baseId, nested);
83949
84003
  }
83950
84004
  const nestedEntry = grouped.get(baseId);
83951
- for (const [joinModel, joinAttr] of Object.entries(join61)) {
84005
+ for (const [joinModel, joinAttr] of Object.entries(join62)) {
83952
84006
  const joinModelName = joinModel;
83953
84007
  const joinTable = activeDb2[joinModelName];
83954
84008
  if (!joinTable) {
@@ -83981,18 +84035,18 @@ var init_dist9 = __esm({
83981
84035
  activeDb2[model].push(data);
83982
84036
  return data;
83983
84037
  },
83984
- findOne: async ({ model, modelKey = model, where, select: select2, join: join61 }) => {
83985
- const res = convertWhereClause(where, model, modelKey, join61, select2);
83986
- if (join61) {
84038
+ findOne: async ({ model, modelKey = model, where, select: select2, join: join62 }) => {
84039
+ const res = convertWhereClause(where, model, modelKey, join62, select2);
84040
+ if (join62) {
83987
84041
  const resArray = res;
83988
84042
  if (!resArray.length) return null;
83989
84043
  return resArray[0];
83990
84044
  }
83991
84045
  return res[0] || null;
83992
84046
  },
83993
- findMany: async ({ model, modelKey = model, where, sortBy, limit, select: select2, offset, join: join61 }) => {
83994
- const res = convertWhereClause(where || [], model, modelKey, join61, select2);
83995
- if (join61) {
84047
+ findMany: async ({ model, modelKey = model, where, sortBy, limit, select: select2, offset, join: join62 }) => {
84048
+ const res = convertWhereClause(where || [], model, modelKey, join62, select2);
84049
+ if (join62) {
83996
84050
  const resArray = res;
83997
84051
  if (!resArray.length) return [];
83998
84052
  applySortToRecords(resArray, sortBy, modelKey);
@@ -85990,10 +86044,10 @@ var init_query_node = __esm({
85990
86044
  where: node2.where ? WhereNode.cloneWithOperation(node2.where, "And", operation) : WhereNode.create(operation)
85991
86045
  });
85992
86046
  },
85993
- cloneWithJoin(node2, join61) {
86047
+ cloneWithJoin(node2, join62) {
85994
86048
  return freeze({
85995
86049
  ...node2,
85996
- joins: node2.joins ? freeze([...node2.joins, join61]) : freeze([join61])
86050
+ joins: node2.joins ? freeze([...node2.joins, join62]) : freeze([join62])
85997
86051
  });
85998
86052
  },
85999
86053
  cloneWithReturning(node2, selections) {
@@ -90504,8 +90558,8 @@ var init_with_schema_transformer = __esm({
90504
90558
  this.#collectSchemableIdsFromTableExpr(node2.table, schemableIds);
90505
90559
  }
90506
90560
  if ("joins" in node2 && node2.joins) {
90507
- for (const join61 of node2.joins) {
90508
- this.#collectSchemableIdsFromTableExpr(join61.table, schemableIds);
90561
+ for (const join62 of node2.joins) {
90562
+ this.#collectSchemableIdsFromTableExpr(join62.table, schemableIds);
90509
90563
  }
90510
90564
  }
90511
90565
  if ("using" in node2 && node2.using) {
@@ -102677,7 +102731,7 @@ var init_mssql_introspector = __esm({
102677
102731
  return await this.#db.selectFrom("sys.schemas").select("name").execute();
102678
102732
  }
102679
102733
  async getTables(options = { withInternalKyselyTables: false }) {
102680
- const rawColumns = await this.#db.selectFrom("sys.tables as tables").leftJoin("sys.schemas as table_schemas", "table_schemas.schema_id", "tables.schema_id").innerJoin("sys.columns as columns", "columns.object_id", "tables.object_id").innerJoin("sys.types as types", "types.user_type_id", "columns.user_type_id").leftJoin("sys.schemas as type_schemas", "type_schemas.schema_id", "types.schema_id").leftJoin("sys.extended_properties as comments", (join61) => join61.onRef("comments.major_id", "=", "tables.object_id").onRef("comments.minor_id", "=", "columns.column_id").on("comments.name", "=", "MS_Description")).$if(!options.withInternalKyselyTables, (qb) => qb.where("tables.name", "!=", DEFAULT_MIGRATION_TABLE).where("tables.name", "!=", DEFAULT_MIGRATION_LOCK_TABLE)).select([
102734
+ const rawColumns = await this.#db.selectFrom("sys.tables as tables").leftJoin("sys.schemas as table_schemas", "table_schemas.schema_id", "tables.schema_id").innerJoin("sys.columns as columns", "columns.object_id", "tables.object_id").innerJoin("sys.types as types", "types.user_type_id", "columns.user_type_id").leftJoin("sys.schemas as type_schemas", "type_schemas.schema_id", "types.schema_id").leftJoin("sys.extended_properties as comments", (join62) => join62.onRef("comments.major_id", "=", "tables.object_id").onRef("comments.minor_id", "=", "columns.column_id").on("comments.name", "=", "MS_Description")).$if(!options.withInternalKyselyTables, (qb) => qb.where("tables.name", "!=", DEFAULT_MIGRATION_TABLE).where("tables.name", "!=", DEFAULT_MIGRATION_LOCK_TABLE)).select([
102681
102735
  "tables.name as table_name",
102682
102736
  (eb) => eb.ref("tables.type").$castTo().as("table_type"),
102683
102737
  "table_schemas.name as table_schema_name",
@@ -102692,7 +102746,7 @@ var init_mssql_introspector = __esm({
102692
102746
  "types.name as type_name",
102693
102747
  "type_schemas.name as type_schema_name",
102694
102748
  "comments.value as column_comment"
102695
- ]).unionAll(this.#db.selectFrom("sys.views as views").leftJoin("sys.schemas as view_schemas", "view_schemas.schema_id", "views.schema_id").innerJoin("sys.columns as columns", "columns.object_id", "views.object_id").innerJoin("sys.types as types", "types.user_type_id", "columns.user_type_id").leftJoin("sys.schemas as type_schemas", "type_schemas.schema_id", "types.schema_id").leftJoin("sys.extended_properties as comments", (join61) => join61.onRef("comments.major_id", "=", "views.object_id").onRef("comments.minor_id", "=", "columns.column_id").on("comments.name", "=", "MS_Description")).select([
102749
+ ]).unionAll(this.#db.selectFrom("sys.views as views").leftJoin("sys.schemas as view_schemas", "view_schemas.schema_id", "views.schema_id").innerJoin("sys.columns as columns", "columns.object_id", "views.object_id").innerJoin("sys.types as types", "types.user_type_id", "columns.user_type_id").leftJoin("sys.schemas as type_schemas", "type_schemas.schema_id", "types.schema_id").leftJoin("sys.extended_properties as comments", (join62) => join62.onRef("comments.major_id", "=", "views.object_id").onRef("comments.minor_id", "=", "columns.column_id").on("comments.name", "=", "MS_Description")).select([
102696
102750
  "views.name as table_name",
102697
102751
  "views.type as table_type",
102698
102752
  "view_schemas.name as table_schema_name",
@@ -103919,10 +103973,10 @@ var init_dist11 = __esm({
103919
103973
  mysqlNoIdWarned = true;
103920
103974
  logger2.warn(`[Kysely Adapter] MySQL does not support INSERT...RETURNING. With generateId set to false, the adapter uses best-effort fallback strategies (unique columns, full-field match) to retrieve inserted rows. For reliable behavior, use Better Auth's default ID generation, a custom generateId function, or generateId: "serial" for auto-increment.`);
103921
103975
  }
103922
- const selectAllJoins = (join61) => {
103976
+ const selectAllJoins = (join62) => {
103923
103977
  const allSelects = [];
103924
103978
  const allSelectsStr = [];
103925
- if (join61) for (const [joinModel, joinConfig] of Object.entries(join61)) {
103979
+ if (join62) for (const [joinModel, joinConfig] of Object.entries(join62)) {
103926
103980
  const fields = schema3[joinConfig.modelKey ?? getDefaultModelName(joinModel)]?.fields;
103927
103981
  const [_joinModelSchema, joinModelName] = joinModel.includes(".") ? joinModel.split(".") : [void 0, joinModel];
103928
103982
  if (!fields) continue;
@@ -104147,7 +104201,7 @@ var init_dist11 = __esm({
104147
104201
  async create({ data, model, modelKey = model }) {
104148
104202
  return await withReturning(data, db2.insertInto(model).values(data), model, modelKey, []);
104149
104203
  },
104150
- async findOne({ model, modelKey = model, where, select: select2, join: join61 }) {
104204
+ async findOne({ model, modelKey = model, where, select: select2, join: join62 }) {
104151
104205
  const { and: and2, or: or2 } = convertWhereClause(model, modelKey, where);
104152
104206
  let query = db2.selectFrom((eb) => {
104153
104207
  let b2 = eb.selectFrom(model);
@@ -104160,19 +104214,19 @@ var init_dist11 = __esm({
104160
104214
  else b2 = b2.selectAll();
104161
104215
  return b2.as("primary");
104162
104216
  }).selectAll("primary");
104163
- if (join61) for (const [joinModel, joinAttr] of Object.entries(join61)) {
104217
+ if (join62) for (const [joinModel, joinAttr] of Object.entries(join62)) {
104164
104218
  const [_joinModelSchema, joinModelName] = joinModel.includes(".") ? joinModel.split(".") : [void 0, joinModel];
104165
- query = query.leftJoin(`${joinModel} as join_${joinModelName}`, (join62) => join62.onRef(`join_${joinModelName}.${joinAttr.on.to}`, "=", `primary.${joinAttr.on.from}`));
104219
+ query = query.leftJoin(`${joinModel} as join_${joinModelName}`, (join63) => join63.onRef(`join_${joinModelName}.${joinAttr.on.to}`, "=", `primary.${joinAttr.on.from}`));
104166
104220
  }
104167
- const { allSelectsStr, allSelects } = selectAllJoins(join61);
104221
+ const { allSelectsStr, allSelects } = selectAllJoins(join62);
104168
104222
  query = query.select(allSelects);
104169
104223
  const res = await query.execute();
104170
104224
  if (!res || !Array.isArray(res) || res.length === 0) return null;
104171
104225
  const row2 = res[0];
104172
- if (join61) return processJoinedResults(res, join61, allSelectsStr)[0];
104226
+ if (join62) return processJoinedResults(res, join62, allSelectsStr)[0];
104173
104227
  return row2;
104174
104228
  },
104175
- async findMany({ model, modelKey = model, where, limit, select: select2, offset, sortBy, join: join61 }) {
104229
+ async findMany({ model, modelKey = model, where, limit, select: select2, offset, sortBy, join: join62 }) {
104176
104230
  const { and: and2, or: or2 } = convertWhereClause(model, modelKey, where);
104177
104231
  let query = db2.selectFrom((eb) => {
104178
104232
  let b2 = eb.selectFrom(model);
@@ -104201,11 +104255,11 @@ var init_dist11 = __esm({
104201
104255
  else b2 = b2.selectAll();
104202
104256
  return b2.as("primary");
104203
104257
  }).selectAll("primary");
104204
- if (join61) for (const [joinModel, joinAttr] of Object.entries(join61)) {
104258
+ if (join62) for (const [joinModel, joinAttr] of Object.entries(join62)) {
104205
104259
  const [_joinModelSchema, joinModelName] = joinModel.includes(".") ? joinModel.split(".") : [void 0, joinModel];
104206
- query = query.leftJoin(`${joinModel} as join_${joinModelName}`, (join62) => join62.onRef(`join_${joinModelName}.${joinAttr.on.to}`, "=", `primary.${joinAttr.on.from}`));
104260
+ query = query.leftJoin(`${joinModel} as join_${joinModelName}`, (join63) => join63.onRef(`join_${joinModelName}.${joinAttr.on.to}`, "=", `primary.${joinAttr.on.from}`));
104207
104261
  }
104208
- const { allSelectsStr, allSelects } = selectAllJoins(join61);
104262
+ const { allSelectsStr, allSelects } = selectAllJoins(join62);
104209
104263
  query = query.select(allSelects);
104210
104264
  if (sortBy?.field) query = query.orderBy(`${getFieldName({
104211
104265
  model: modelKey,
@@ -104213,7 +104267,7 @@ var init_dist11 = __esm({
104213
104267
  })}`, sortBy.direction);
104214
104268
  const res = await query.execute();
104215
104269
  if (!res) return [];
104216
- if (join61) return processJoinedResults(res, join61, allSelectsStr);
104270
+ if (join62) return processJoinedResults(res, join62, allSelectsStr);
104217
104271
  return res;
104218
104272
  },
104219
104273
  async update({ model, modelKey = model, where, update: values2 }) {
@@ -107146,7 +107200,7 @@ var init_sql2 = __esm({
107146
107200
  return new SQL([new StringChunk(str2)]);
107147
107201
  }
107148
107202
  sql22.raw = raw;
107149
- function join61(chunks, separator) {
107203
+ function join62(chunks, separator) {
107150
107204
  const result2 = [];
107151
107205
  for (const [i2, chunk] of chunks.entries()) {
107152
107206
  if (i2 > 0 && separator !== void 0) {
@@ -107156,7 +107210,7 @@ var init_sql2 = __esm({
107156
107210
  }
107157
107211
  return new SQL(result2);
107158
107212
  }
107159
- sql22.join = join61;
107213
+ sql22.join = join62;
107160
107214
  function identifier(value) {
107161
107215
  return new Name(value);
107162
107216
  }
@@ -108507,10 +108561,10 @@ var init_dist14 = __esm({
108507
108561
  checkMissingFields(table2, modelKey, values2);
108508
108562
  return await withReturning(model, modelKey, db2.insert(table2).values(values2), values2);
108509
108563
  },
108510
- async findOne({ model, modelKey = model, where, select: select2, join: join61 }) {
108564
+ async findOne({ model, modelKey = model, where, select: select2, join: join62 }) {
108511
108565
  const table2 = getSchema2(model);
108512
108566
  const clause = convertWhereClause(where, model, modelKey);
108513
- if (join61) {
108567
+ if (join62) {
108514
108568
  const queryModel = getQueryModel(model);
108515
108569
  if (!db2.query || !queryModel) {
108516
108570
  logger2.error(`[# Drizzle Adapter]: The model "${model}" was not found in the query object. Please update your Drizzle schema to include relations or re-generate using "npx auth@latest generate".`);
@@ -108520,7 +108574,7 @@ var init_dist14 = __esm({
108520
108574
  const renamedJoinResults = [];
108521
108575
  const relationKeys = getRelationKeysByModel().get(queryModel);
108522
108576
  includes = {};
108523
- const joinEntries = Object.entries(join61);
108577
+ const joinEntries = Object.entries(join62);
108524
108578
  for (const [joinModel, joinAttr] of joinEntries) {
108525
108579
  const limit = joinAttr.limit ?? options.advanced?.database?.defaultFindManyLimit ?? 100;
108526
108580
  const isUnique = joinAttr.relation === "one-to-one";
@@ -108562,11 +108616,11 @@ var init_dist14 = __esm({
108562
108616
  if (!res.length) return null;
108563
108617
  return res[0];
108564
108618
  },
108565
- async findMany({ model, modelKey = model, where, sortBy, limit, select: select2, offset, join: join61 }) {
108619
+ async findMany({ model, modelKey = model, where, sortBy, limit, select: select2, offset, join: join62 }) {
108566
108620
  const table2 = getSchema2(model);
108567
108621
  const clause = where ? convertWhereClause(where, model, modelKey) : [];
108568
108622
  const sortFn = sortBy?.direction === "desc" ? desc : asc;
108569
- if (join61) {
108623
+ if (join62) {
108570
108624
  const queryModel = getQueryModel(model);
108571
108625
  if (!db2.query || !queryModel) {
108572
108626
  logger2.error(`[# Drizzle Adapter]: The model "${model}" was not found in the query object. Please update your Drizzle schema to include relations or re-generate using "npx auth@latest generate".`);
@@ -108576,7 +108630,7 @@ var init_dist14 = __esm({
108576
108630
  const renamedJoinResults = [];
108577
108631
  const relationKeys = getRelationKeysByModel().get(queryModel);
108578
108632
  includes = {};
108579
- const joinEntries = Object.entries(join61);
108633
+ const joinEntries = Object.entries(join62);
108580
108634
  for (const [joinModel, joinAttr] of joinEntries) {
108581
108635
  const isUnique = joinAttr.relation === "one-to-one";
108582
108636
  const limit2 = joinAttr.limit ?? options.advanced?.database?.defaultFindManyLimit ?? 100;
@@ -120183,7 +120237,7 @@ var init_select2 = __esm({
120183
120237
  const baseTableName = this.tableName;
120184
120238
  const tableName = getTableLikeName(table2);
120185
120239
  for (const item of extractUsedTable(table2)) this.usedTables.add(item);
120186
- if (typeof tableName === "string" && this.config.joins?.some((join61) => join61.alias === tableName)) {
120240
+ if (typeof tableName === "string" && this.config.joins?.some((join62) => join62.alias === tableName)) {
120187
120241
  throw new Error(`Alias "${tableName}" is already used in this query`);
120188
120242
  }
120189
120243
  if (!this.isPartialSelect) {
@@ -121069,7 +121123,7 @@ var init_update = __esm({
121069
121123
  createJoin(joinType) {
121070
121124
  return (table2, on) => {
121071
121125
  const tableName = getTableLikeName(table2);
121072
- if (typeof tableName === "string" && this.config.joins.some((join61) => join61.alias === tableName)) {
121126
+ if (typeof tableName === "string" && this.config.joins.some((join62) => join62.alias === tableName)) {
121073
121127
  throw new Error(`Alias "${tableName}" is already used in this query`);
121074
121128
  }
121075
121129
  if (typeof on === "function") {
@@ -123798,6 +123852,11 @@ var init_auth = __esm({
123798
123852
  updatedAt: integer2("updated_at", { mode: "timestamp_ms" }).$onUpdate(() => /* @__PURE__ */ new Date()).notNull(),
123799
123853
  ipAddress: text("ip_address"),
123800
123854
  userAgent: text("user_agent"),
123855
+ // The way the sign-in that made this session came in: 'local', 'wifi',
123856
+ // 'tunnel', 'managed', 'network' or 'hub'. A session works only on that
123857
+ // route (DOR-2969). Null for a session made before it was recorded, which
123858
+ // works only on this computer.
123859
+ route: text("route"),
123801
123860
  userId: text("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
123802
123861
  // A sign-in on a shared or public computer (A4, DOR-2936): the cookie ends
123803
123862
  // with the browser, the session cannot outlive a working day, and the app
@@ -126222,7 +126281,8 @@ var init_notifications = __esm({
126222
126281
  "community.owner-replacement",
126223
126282
  "heartbeat.credits-offer",
126224
126283
  "connector.destructive_pending",
126225
- "connector.destructive_executed"
126284
+ "connector.destructive_executed",
126285
+ "web.new_device"
126226
126286
  ]
126227
126287
  }).notNull(),
126228
126288
  /** How loud this was allowed to be. Copied from the registry at write time. */
@@ -128889,6 +128949,18 @@ var init_setup_code_gate = __esm({
128889
128949
  }
128890
128950
  });
128891
128951
 
128952
+ // ../../apps/server/src/services/core/auth/sessions/session-route.ts
128953
+ var WIFI_SESSION_MAX_SECONDS;
128954
+ var init_session_route = __esm({
128955
+ "../../apps/server/src/services/core/auth/sessions/session-route.ts"() {
128956
+ "use strict";
128957
+ init_request_classifier();
128958
+ init_server_role();
128959
+ init_registration_policy();
128960
+ WIFI_SESSION_MAX_SECONDS = 7 * 24 * 60 * 60;
128961
+ }
128962
+ });
128963
+
128892
128964
  // ../../apps/server/src/services/core/auth/cookie-security.ts
128893
128965
  var AUTH_COOKIES_SECURE;
128894
128966
  var init_cookie_security = __esm({
@@ -128900,7 +128972,7 @@ var init_cookie_security = __esm({
128900
128972
  });
128901
128973
 
128902
128974
  // ../shared/src/session-relay.ts
128903
- var SESSION_RELAY_MAX_FRAME_LENGTH, SESSION_RELAY_MAX_MESSAGE_LENGTH, SESSION_RELAY_MAX_CHATS, SESSION_RELAY_IDLE_CLOSE_MS, VersionSchema, RelayVersionRangeSchema, AdvertisedFeaturesSchema, RequestIdSchema, StreamIdSchema, SessionIdSchema, AgentIdSchema, ToolCallIdSchema, ResumeCursorSchema, base64url3, ChatsListRequestSchema, SessionStreamRequestSchema, SessionSendRequestSchema, SessionInterruptRequestSchema, ApprovalDecisionSchema, InteractionChallengeRequestSchema, RelayApprovalProofSchema, InteractionAnswerSchema, InteractionRespondRequestSchema, RelayRequestSchema, RelayChatSummarySchema, RelayResultBodySchemas, RelayErrorSchema, exactBase64url, RelayEphemeralKeySchema, RelaySignatureSchema, RelayNonceSchema, RelayPinnedHubKeySchema, RelayHelloFrameSchema, RelayHandshakeAnswerSchema, RelaySealedFrameSchema, HeartbeatFrameSchema, RelayWebFrameSchema, RelayStreamFrameSchema, RelayComputerFrameSchema, RelayFinishFrameSchema;
128975
+ var SESSION_RELAY_MAX_FRAME_LENGTH, SESSION_RELAY_MAX_MESSAGE_LENGTH, SESSION_RELAY_MAX_CHATS, SESSION_RELAY_IDLE_CLOSE_MS, VersionSchema, RelayVersionRangeSchema, AdvertisedFeaturesSchema, RequestIdSchema, StreamIdSchema, SessionIdSchema, AgentIdSchema, ToolCallIdSchema, ResumeCursorSchema, NO_CONTROL, INVISIBLE, RelayDisplayNameSchema, RelayDeviceSchema, base64url3, ChatsListRequestSchema, SessionStreamRequestSchema, SessionSendRequestSchema, SessionInterruptRequestSchema, ApprovalDecisionSchema, InteractionChallengeRequestSchema, RelayApprovalProofSchema, InteractionAnswerSchema, InteractionRespondRequestSchema, RelayRequestSchema, RelayChatSummarySchema, RelayResultBodySchemas, RelayErrorSchema, exactBase64url, RelayEphemeralKeySchema, RelaySignatureSchema, RelayNonceSchema, RelayPinnedHubKeySchema, RelayHelloFrameSchema, RelayHandshakeAnswerSchema, RelaySealedFrameSchema, HeartbeatFrameSchema, RelayWebFrameSchema, RelayStreamFrameSchema, RelayComputerFrameSchema, RelayFinishFrameSchema;
128904
128976
  var init_session_relay = __esm({
128905
128977
  "../shared/src/session-relay.ts"() {
128906
128978
  "use strict";
@@ -128919,6 +128991,13 @@ var init_session_relay = __esm({
128919
128991
  AgentIdSchema = external_exports.string().regex(/^[0-9A-HJKMNP-TV-Z]{26}$/);
128920
128992
  ToolCallIdSchema = external_exports.string().min(1).max(256).regex(/^[\w.:-]+$/);
128921
128993
  ResumeCursorSchema = external_exports.string().max(256).regex(/^[0-9a-f-]+-\d+-g\d+-\d+$/);
128994
+ NO_CONTROL = /^[^\u0000-\u001f\u007f]*$/;
128995
+ INVISIBLE = /[\p{Cf}\u2028\u2029]/u;
128996
+ RelayDisplayNameSchema = external_exports.string().min(1).max(64).regex(NO_CONTROL).refine((name2) => name2.trim() === name2, "no leading or trailing whitespace").refine((name2) => !INVISIBLE.test(name2), "no invisible characters");
128997
+ RelayDeviceSchema = external_exports.strictObject({
128998
+ id: external_exports.string().min(8).max(64).regex(/^[A-Za-z0-9_-]+$/),
128999
+ label: RelayDisplayNameSchema
129000
+ });
128922
129001
  base64url3 = (max2) => external_exports.string().min(1).max(max2).regex(/^[A-Za-z0-9_-]+$/);
128923
129002
  ChatsListRequestSchema = external_exports.strictObject({
128924
129003
  op: external_exports.literal("chats.list"),
@@ -129061,7 +129140,13 @@ var init_session_relay = __esm({
129061
129140
  * `stream.frame`s and one `stream.end`, which carries the refusal if it never
129062
129141
  * opened.
129063
129142
  */
129064
- external_exports.strictObject({ type: external_exports.literal("request"), id: RequestIdSchema, request: RelayRequestSchema }),
129143
+ external_exports.strictObject({
129144
+ type: external_exports.literal("request"),
129145
+ id: RequestIdSchema,
129146
+ request: RelayRequestSchema,
129147
+ /** The browser that asked; sent only to a computer that advertised `request.device`. */
129148
+ device: RelayDeviceSchema.optional()
129149
+ }),
129065
129150
  external_exports.strictObject({ type: external_exports.literal("stream.close"), streamId: StreamIdSchema }),
129066
129151
  /**
129067
129152
  * How many viewers have a chat of this computer open right now. At 0, and
@@ -129109,7 +129194,7 @@ var init_session_relay = __esm({
129109
129194
  });
129110
129195
 
129111
129196
  // ../shared/src/session-relay-link.ts
129112
- var RELAY_LINK_CODE_TTL_MS, RelayLinkComputerIdSchema, Sha256Base64urlSchema, NO_CONTROL, INVISIBLE, RelayLinkComputerNameSchema, RelayLinkRequestSchema, RelayLinkResponseSchema, HubComputerSummarySchema, HubComputerListSchema, HubLinkCodeSchema, SessionRelayLevelSchema, SessionRelayStatusSchema, StepUpPasswordSchema, SessionRelayLinkBodySchema, SessionRelayLevelBodySchema, SessionRelayResumeBodySchema, SessionRelayLinkRefusalSchema;
129197
+ var RELAY_LINK_CODE_TTL_MS, RelayLinkComputerIdSchema, Sha256Base64urlSchema, NO_CONTROL2, RelayLinkComputerNameSchema, RelayLinkRequestSchema, RelayLinkResponseSchema, HubComputerSummarySchema, HubComputerListSchema, HubLinkCodeSchema, SessionRelayLevelSchema, SessionRelayStatusSchema, StepUpPasswordSchema, SessionRelayLinkBodySchema, SessionRelayLevelBodySchema, SessionRelayResumeBodySchema, SessionRelayLinkRefusalSchema, SessionRelayDeviceSchema, SessionRelayPresenceSchema, SessionRelayDeviceListSchema;
129113
129198
  var init_session_relay_link = __esm({
129114
129199
  "../shared/src/session-relay-link.ts"() {
129115
129200
  init_zod();
@@ -129117,9 +129202,8 @@ var init_session_relay_link = __esm({
129117
129202
  RELAY_LINK_CODE_TTL_MS = 10 * 60 * 1e3;
129118
129203
  RelayLinkComputerIdSchema = external_exports.string().min(1).max(64).regex(/^[\w.:-]+$/);
129119
129204
  Sha256Base64urlSchema = external_exports.string().length(43).regex(/^[A-Za-z0-9_-]+$/);
129120
- NO_CONTROL = /^[^\u0000-\u001f\u007f]*$/;
129121
- INVISIBLE = /[\p{Cf}\u2028\u2029]/u;
129122
- RelayLinkComputerNameSchema = external_exports.string().min(1).max(64).regex(NO_CONTROL).refine((name2) => name2.trim() === name2, "no leading or trailing whitespace").refine((name2) => !INVISIBLE.test(name2), "no invisible characters");
129205
+ NO_CONTROL2 = /^[^\u0000-\u001f\u007f]*$/;
129206
+ RelayLinkComputerNameSchema = RelayDisplayNameSchema;
129123
129207
  RelayLinkRequestSchema = external_exports.strictObject({
129124
129208
  v: external_exports.literal(1),
129125
129209
  /** The code part of the link code, as the owner pasted it. */
@@ -129137,9 +129221,9 @@ var init_session_relay_link = __esm({
129137
129221
  /** The hub's Ed25519 public key, raw 32 bytes base64url. Pin this one. */
129138
129222
  hubKey: RelayPinnedHubKeySchema,
129139
129223
  /** The hub owner's account id at `issuer`. */
129140
- ownerAccountId: external_exports.string().min(1).max(128).regex(NO_CONTROL).optional(),
129224
+ ownerAccountId: external_exports.string().min(1).max(128).regex(NO_CONTROL2).optional(),
129141
129225
  /** The issuer that account id belongs to. */
129142
- issuer: external_exports.string().min(1).max(512).startsWith("https://").regex(NO_CONTROL).optional(),
129226
+ issuer: external_exports.string().min(1).max(512).startsWith("https://").regex(NO_CONTROL2).optional(),
129143
129227
  signature: RelaySignatureSchema
129144
129228
  });
129145
129229
  HubComputerSummarySchema = external_exports.object({
@@ -129210,6 +129294,23 @@ var init_session_relay_link = __esm({
129210
129294
  /** This computer is linked to a DorkOS account that could not be read just now. */
129211
129295
  "account-unreadable"
129212
129296
  ]);
129297
+ SessionRelayDeviceSchema = external_exports.object({
129298
+ label: external_exports.string(),
129299
+ /** When this computer first saw it (ISO 8601). */
129300
+ firstSeenAt: external_exports.string(),
129301
+ /** When it last asked this computer for something (ISO 8601). */
129302
+ lastSeenAt: external_exports.string()
129303
+ });
129304
+ SessionRelayPresenceSchema = external_exports.object({
129305
+ active: external_exports.boolean(),
129306
+ /** When it became active (ISO 8601); absent while not active. */
129307
+ since: external_exports.string().optional(),
129308
+ /** The browsers seen since then, most recent first; empty while not active. */
129309
+ devices: external_exports.array(SessionRelayDeviceSchema)
129310
+ });
129311
+ SessionRelayDeviceListSchema = external_exports.object({
129312
+ devices: external_exports.array(SessionRelayDeviceSchema)
129313
+ });
129213
129314
  }
129214
129315
  });
129215
129316
 
@@ -129224,6 +129325,7 @@ var init_session_gate = __esm({
129224
129325
  init_server_role();
129225
129326
  init_public_computer();
129226
129327
  init_session_relay_link();
129328
+ init_session_route();
129227
129329
  }
129228
129330
  });
129229
129331
 
@@ -129265,6 +129367,7 @@ var init_auth2 = __esm({
129265
129367
  init_server_role();
129266
129368
  init_seed_legacy_mcp_key();
129267
129369
  init_setup_code_gate();
129370
+ init_session_route();
129268
129371
  init_setup_code();
129269
129372
  init_cookie_security();
129270
129373
  init_session_gate();
@@ -129313,7 +129416,6 @@ function defuseSystemTags(text3, tagNames) {
129313
129416
  var IDENTITY_MAX_LENGTH, INVISIBLE_FORMAT, CONTROL_CHARS, PATTERN_CACHE;
129314
129417
  var init_untrusted_text = __esm({
129315
129418
  "../shared/src/untrusted-text.ts"() {
129316
- "use strict";
129317
129419
  IDENTITY_MAX_LENGTH = 80;
129318
129420
  INVISIBLE_FORMAT = /[\u00ad\u200b-\u200f\u202a-\u202e\u2060-\u2064\ufeff\ufff9-\ufffb]/g;
129319
129421
  CONTROL_CHARS = /[\u0000-\u001f\u007f-\u009f]/g;
@@ -129722,6 +129824,9 @@ var init_config_disclosure = __esm({
129722
129824
  // work runs on this machine, names no credential and no person, and an agent
129723
129825
  // that can see it can say why a session behaves the way it does.
129724
129826
  "runtimes.claudeCode.persistentSession": "expose",
129827
+ // How many agents may run at once here (DOR-3012). A number about this
129828
+ // machine, naming no credential and no person.
129829
+ "runtimes.claudeCode.maxWarmProcesses": "expose",
129725
129830
  "runtimes.opencode.defaultModel": "expose",
129726
129831
  "runtimes.codex.defaultModel": "expose",
129727
129832
  "runtimes.codex.defaultEffort": "expose",
@@ -130479,6 +130584,9 @@ var init_config_write_policy = __esm({
130479
130584
  // what makes the verdict cheap: refusing the agent takes nothing away from the
130480
130585
  // person, who was never going to reach for a config door to begin with.
130481
130586
  "runtimes.claudeCode.persistentSession": "operator-only",
130587
+ // How many agents may run at once (DOR-3012): memory on this machine, so the
130588
+ // person sets it, like `scheduler.maxConcurrentRuns`.
130589
+ "runtimes.claudeCode.maxWarmProcesses": "operator-only",
130482
130590
  "runtimes.opencode.defaultModel": "agent-writable",
130483
130591
  "runtimes.codex.defaultModel": "agent-writable",
130484
130592
  "runtimes.codex.defaultEffort": "agent-writable",
@@ -130785,6 +130893,9 @@ var init_config_write_policy = __esm({
130785
130893
  // and the wipe floor says an agent may not widen it back (DOR-1505).
130786
130894
  "uploads.allowedTypes",
130787
130895
  "runtimes.claudeCode.persistentSession",
130896
+ // How many agents may run at once: a person who lowered it to save memory
130897
+ // must not have an agent raise it back (DOR-3012).
130898
+ "runtimes.claudeCode.maxWarmProcesses",
130788
130899
  "scheduler.maxConcurrentRuns",
130789
130900
  // Whether the computer stays awake for the work, and whether it is woken
130790
130901
  // for it: battery, and whether the machine is on while nobody is there.
@@ -131170,21 +131281,45 @@ var init_constants9 = __esm({
131170
131281
  */
131171
131282
  WARM_IDLE_MS: 5 * 60 * 1e3,
131172
131283
  /**
131173
- * How many sessions may hold a subprocess at once (spec §4.4).
131284
+ * The fewest sessions that may hold a subprocess at once when the ceiling is
131285
+ * sized automatically (spec §4.4; DOR-3012).
131174
131286
  *
131175
- * This counts PROCESSES; `MAX_SESSIONS` (50) counts session RECORDS, and the
131176
- * two are deliberately different numbers. Fifty concurrent CLI subprocesses
131177
- * plus their MCP children on a laptop is not a shape to ship, so warmth stops
131178
- * at twelve while records stay at fifty — which keeps `ensureSession`'s throw
131179
- * the genuinely exceptional path it is today.
131287
+ * The ceiling counts PROCESSES; `MAX_SESSIONS` (50) counts session RECORDS,
131288
+ * and the two are deliberately different numbers. It is set by
131289
+ * `runtimes.claudeCode.maxWarmProcesses`, and left unset it is sized to the
131290
+ * machine: one process per {@link SESSIONS.WARM_SESSION_RAM_GB} of memory,
131291
+ * never fewer than this and never more than
131292
+ * {@link SESSIONS.MAX_WARM_SESSIONS_AUTO}. Twelve was the fixed ceiling until
131293
+ * DOR-3012, and a machine with 48 GB filled it with 5.5 GB in use.
131180
131294
  *
131181
- * It is also **not** a refusal ceiling in the way `MAX_SESSIONS` is. Warmth is
131182
- * a cache, so the thirteenth warm session does not fail: the least recently
131183
- * used warm process is reaped to make room for it, and only a host where
131184
- * nothing is reclaimable — every process mid-turn or parked on a person — is
131185
- * refused.
131295
+ * It is **not** a refusal ceiling in the way `MAX_SESSIONS` is. Warmth is a
131296
+ * cache, so a launch past it reclaims the least recently used warm process,
131297
+ * and when nothing is reclaimable — every process mid-turn or parked on a
131298
+ * person — it waits for one to come free ({@link SESSIONS.WARM_SLOT_WAIT_MS}).
131186
131299
  */
131187
- MAX_WARM_SESSIONS: 12,
131300
+ MIN_WARM_SESSIONS: 12,
131301
+ /** The most an automatically sized warm ceiling allows; see {@link SESSIONS.MIN_WARM_SESSIONS}. */
131302
+ MAX_WARM_SESSIONS_AUTO: 32,
131303
+ /**
131304
+ * Memory an automatically sized ceiling budgets per warm process, in GB. A
131305
+ * busy claude-code process measured about 0.5 GB on 2026-10-18; four times
131306
+ * that leaves room for its MCP children and for everything else on the
131307
+ * machine.
131308
+ */
131309
+ WARM_SESSION_RAM_GB: 2,
131310
+ /**
131311
+ * How long a turn waits for a warm slot when every process is busy, before it
131312
+ * is refused in plain words (DOR-3012).
131313
+ *
131314
+ * Long on purpose: a full ceiling is the busiest moment a room has, and a
131315
+ * late answer beats a failed one. Every busy process frees its slot when its
131316
+ * turn ends, so a wait this long means every agent sat on one turn for most
131317
+ * of an hour. Kept under the room's default late-reply ceiling (60 min) so the
131318
+ * room hears the reason rather than giving up first. The turn says it is
131319
+ * waiting on a beat (`SLOT_WAIT_BEAT_MS`), which keeps the stall guard from
131320
+ * mistaking the wait for a stalled turn.
131321
+ */
131322
+ WARM_SLOT_WAIT_MS: 45 * 60 * 1e3,
131188
131323
  /**
131189
131324
  * How long a warm process must be CONTINUOUSLY quiet before its busy spell is
131190
131325
  * over (spec `warm-process-lifecycle` D1).
@@ -131206,7 +131341,7 @@ var init_constants9 = __esm({
131206
131341
  * The same four hours, and the same reasoning, as
131207
131342
  * {@link SESSIONS.INTERACTION_PARK_CEILING_MS}: a hold with no bound is a
131208
131343
  * resource leak with a story attached, and twelve processes pinned by helpers
131209
- * that will never finish fill `MAX_WARM_SESSIONS` exactly as twelve parked
131344
+ * that will never finish fill the warm ceiling exactly as a ceiling's worth of parked
131210
131345
  * ones do. Deliberately a SEPARATE constant from the person-wait ceiling even
131211
131346
  * though both are four hours: one bounds how long DorkOS waits for a person,
131212
131347
  * the other how long it waits for an agent, and a future change to either
@@ -143029,11 +143164,11 @@ function globalInstallReasonOf(plugin, shared) {
143029
143164
  namedSkills(plugin.skills.map((skill) => skill.name)),
143030
143165
  shared
143031
143166
  );
143032
- const join61 = (into) => shared ? into : `${into}${into.endsWith(".") ? "" : "."} ${GLOBAL_INSTALL_SHARE_OFFER}`;
143167
+ const join62 = (into) => shared ? into : `${into}${into.endsWith(".") ? "" : "."} ${GLOBAL_INSTALL_SHARE_OFFER}`;
143033
143168
  const timed = plugin.skills.filter((skill) => skill.hasSchedule);
143034
- if (timed.length === 0) return join61(lead);
143169
+ if (timed.length === 0) return join62(lead);
143035
143170
  const allLinked = timed.every((skill) => skill.linkedInDorkHome === true);
143036
- return join61(`${lead}. ${allLinked ? GLOBAL_INSTALL_TIMERS_WORK : GLOBAL_INSTALL_TIMERS_PENDING}`);
143171
+ return join62(`${lead}. ${allLinked ? GLOBAL_INSTALL_TIMERS_WORK : GLOBAL_INSTALL_TIMERS_PENDING}`);
143037
143172
  }
143038
143173
  function planGlobalInstallDrops(input4) {
143039
143174
  const projectNames = new Set(
@@ -149602,9 +149737,57 @@ var init_settings_hooks = __esm({
149602
149737
  }
149603
149738
  });
149604
149739
 
149740
+ // ../harness/src/apply/opencode-command-orphans.ts
149741
+ import { readFileSync as readFileSync16, rmSync as rmSync6 } from "node:fs";
149742
+ import { join as join38 } from "node:path";
149743
+ function findOpencodeCommandOrphans(repoRoot, plan) {
149744
+ return removableOf(repoRoot, allOpencodeCommandOrphans(repoRoot, plan));
149745
+ }
149746
+ function allOpencodeCommandOrphans(repoRoot, plan) {
149747
+ const kept = new Set(
149748
+ plan.actions.filter((a2) => a2.kind === "generate" && a2.target?.startsWith(`${OPENCODE_COMMANDS_DIR}/`)).map((a2) => a2.target)
149749
+ );
149750
+ const commandsDir = join38(repoRoot, OPENCODE_COMMANDS_DIR);
149751
+ const orphans = [];
149752
+ for (const entry of listDirEntries(commandsDir)) {
149753
+ if (!entry.isFile()) continue;
149754
+ const rel = `${OPENCODE_COMMANDS_DIR}/${entry.name}`;
149755
+ const abs = join38(commandsDir, entry.name);
149756
+ if (isAtomicTempName(entry.name)) {
149757
+ if (isStaleAtomicTemp(abs)) orphans.push(rel);
149758
+ continue;
149759
+ }
149760
+ if (kept.has(rel)) continue;
149761
+ if (!isEngineGeneratedCommand(abs)) continue;
149762
+ orphans.push(rel);
149763
+ }
149764
+ return orphans;
149765
+ }
149766
+ function sweepOpencodeCommandOrphans(repoRoot, plan) {
149767
+ const orphans = findOpencodeCommandOrphans(repoRoot, plan);
149768
+ for (const rel of orphans) rmSync6(join38(repoRoot, rel), { force: true });
149769
+ return orphans;
149770
+ }
149771
+ function isEngineGeneratedCommand(abs) {
149772
+ try {
149773
+ return readFileSync16(abs, "utf8").includes(GENERATED_COMMAND_MARKER);
149774
+ } catch {
149775
+ return false;
149776
+ }
149777
+ }
149778
+ var init_opencode_command_orphans = __esm({
149779
+ "../harness/src/apply/opencode-command-orphans.ts"() {
149780
+ "use strict";
149781
+ init_installed_projector();
149782
+ init_atomic_write();
149783
+ init_link_state();
149784
+ init_sweep_warnings();
149785
+ }
149786
+ });
149787
+
149605
149788
  // ../harness/src/apply/apply.ts
149606
- import { existsSync as existsSync12, mkdirSync as mkdirSync5, readFileSync as readFileSync16, rmSync as rmSync6, symlinkSync as symlinkSync2 } from "node:fs";
149607
- import { dirname as dirname11, join as join38, relative as relative6 } from "node:path";
149789
+ import { existsSync as existsSync12, mkdirSync as mkdirSync5, rmSync as rmSync7, symlinkSync as symlinkSync2 } from "node:fs";
149790
+ import { dirname as dirname11, join as join39, relative as relative6 } from "node:path";
149608
149791
  function skillSourcesUnreadable(plan) {
149609
149792
  return (plan.unreadableSkillRoots?.length ?? 0) > 0;
149610
149793
  }
@@ -149615,13 +149798,13 @@ function scaffoldPresent(absTarget) {
149615
149798
  return pathExists(absTarget) && !isDanglingSymlink(absTarget);
149616
149799
  }
149617
149800
  function relativeLink(repoRoot, source, target) {
149618
- return relative6(dirname11(join38(repoRoot, target)), absolutePlanPath(repoRoot, source));
149801
+ return relative6(dirname11(join39(repoRoot, target)), absolutePlanPath(repoRoot, source));
149619
149802
  }
149620
149803
  function applySymlink(repoRoot, action) {
149621
149804
  if (!action.source || !action.target) {
149622
149805
  throw new Error(`symlink action for "${action.name}" is missing source/target`);
149623
149806
  }
149624
- const absTarget = join38(repoRoot, action.target);
149807
+ const absTarget = join39(repoRoot, action.target);
149625
149808
  const linkText = relativeLink(repoRoot, action.source, action.target);
149626
149809
  const absSource = absolutePlanPath(repoRoot, action.source);
149627
149810
  for (let attempt = 0, removalRetries = 0; attempt < SYMLINK_ATTEMPTS; ) {
@@ -149632,7 +149815,7 @@ function applySymlink(repoRoot, action) {
149632
149815
  return void 0;
149633
149816
  }
149634
149817
  try {
149635
- rmSync6(absTarget, { force: true });
149818
+ rmSync7(absTarget, { force: true });
149636
149819
  } catch (error63) {
149637
149820
  if (!waitForSymlinkRemoval(error63, removalRetries++)) throw error63;
149638
149821
  continue;
@@ -149651,13 +149834,13 @@ function applySymlink(repoRoot, action) {
149651
149834
  }
149652
149835
  function applyScaffold(repoRoot, action) {
149653
149836
  if (!action.target) throw new Error(`scaffold action for "${action.name}" is missing target`);
149654
- const absTarget = join38(repoRoot, action.target);
149837
+ const absTarget = join39(repoRoot, action.target);
149655
149838
  if (scaffoldPresent(absTarget)) return;
149656
149839
  writeFileAtomic(absTarget, requireActionContent(action));
149657
149840
  }
149658
149841
  function applyGenerate(repoRoot, action) {
149659
149842
  if (!action.target) throw new Error(`generate action for "${action.name}" is missing target`);
149660
- const absTarget = join38(repoRoot, action.target);
149843
+ const absTarget = join39(repoRoot, action.target);
149661
149844
  const shape = blockingGenerateOccupant(absTarget);
149662
149845
  if (shape !== void 0) return shape;
149663
149846
  const content = requireActionContent(action);
@@ -149671,7 +149854,7 @@ function applyGenerate(repoRoot, action) {
149671
149854
  function applyMerge(repoRoot, action) {
149672
149855
  if (!action.target) throw new Error(`merge action for "${action.name}" is missing target`);
149673
149856
  const managed = JSON.parse(requireActionContent(action));
149674
- return mergeManagedHooks(join38(repoRoot, action.target), managed);
149857
+ return mergeManagedHooks(join39(repoRoot, action.target), managed);
149675
149858
  }
149676
149859
  function findInstalledOrphans(repoRoot, plan) {
149677
149860
  return removableOf(repoRoot, allInstalledOrphans(repoRoot, plan));
@@ -149683,10 +149866,10 @@ function allInstalledOrphans(repoRoot, plan) {
149683
149866
  );
149684
149867
  const orphans = [];
149685
149868
  for (const dir of INSTALLED_SKILL_DIRS) {
149686
- const skillsDir = join38(repoRoot, dir);
149869
+ const skillsDir = join39(repoRoot, dir);
149687
149870
  for (const entry of listDir(skillsDir)) {
149688
149871
  if (!entry.includes(INSTALLED_PROJECTION_MARKER)) continue;
149689
- const abs = join38(skillsDir, entry);
149872
+ const abs = join39(skillsDir, entry);
149690
149873
  if (!isSymlink(abs)) continue;
149691
149874
  const rel = `${dir}/${entry}`;
149692
149875
  if (managed.has(rel)) continue;
@@ -149698,7 +149881,7 @@ function allInstalledOrphans(repoRoot, plan) {
149698
149881
  }
149699
149882
  function sweepInstalledOrphans(repoRoot, plan) {
149700
149883
  const orphans = findInstalledOrphans(repoRoot, plan);
149701
- for (const rel of orphans) rmSync6(join38(repoRoot, rel), { force: true });
149884
+ for (const rel of orphans) rmSync7(join39(repoRoot, rel), { force: true });
149702
149885
  return orphans;
149703
149886
  }
149704
149887
  function findGeneratedCommandOrphans(repoRoot, plan) {
@@ -149708,14 +149891,14 @@ function allGeneratedCommandOrphans(repoRoot, plan) {
149708
149891
  const kept = new Set(
149709
149892
  plan.actions.filter((a2) => a2.kind === "generate" && a2.target?.startsWith(`${CLAUDE_COMMANDS_DIR}/`)).map((a2) => a2.target)
149710
149893
  );
149711
- const commandsDir = join38(repoRoot, CLAUDE_COMMANDS_DIR);
149894
+ const commandsDir = join39(repoRoot, CLAUDE_COMMANDS_DIR);
149712
149895
  const orphans = [];
149713
149896
  for (const sub of listDirEntries(commandsDir)) {
149714
149897
  if (!sub.isDirectory()) continue;
149715
- const subAbs = join38(commandsDir, sub.name);
149898
+ const subAbs = join39(commandsDir, sub.name);
149716
149899
  for (const file2 of listDir(subAbs)) {
149717
149900
  const rel = `${CLAUDE_COMMANDS_DIR}/${sub.name}/${file2}`;
149718
- const abs = join38(subAbs, file2);
149901
+ const abs = join39(subAbs, file2);
149719
149902
  if (isAtomicTempName(file2)) {
149720
149903
  if (isStaleAtomicTemp(abs)) orphans.push(rel);
149721
149904
  continue;
@@ -149729,68 +149912,33 @@ function allGeneratedCommandOrphans(repoRoot, plan) {
149729
149912
  }
149730
149913
  function sweepGeneratedCommandOrphans(repoRoot, plan) {
149731
149914
  const orphans = findGeneratedCommandOrphans(repoRoot, plan);
149732
- for (const rel of orphans) rmSync6(join38(repoRoot, rel), { force: true });
149915
+ for (const rel of orphans) rmSync7(join39(repoRoot, rel), { force: true });
149733
149916
  for (const rel of removableOf(repoRoot, emptiedWrapperDirs(repoRoot, plan))) {
149734
- rmSync6(join38(repoRoot, rel), { recursive: true, force: true });
149917
+ rmSync7(join39(repoRoot, rel), { recursive: true, force: true });
149735
149918
  }
149736
149919
  return orphans;
149737
149920
  }
149738
149921
  function emptiedWrapperDirs(repoRoot, plan) {
149739
- const commandsDir = join38(repoRoot, CLAUDE_COMMANDS_DIR);
149922
+ const commandsDir = join39(repoRoot, CLAUDE_COMMANDS_DIR);
149740
149923
  const taking = new Set(findGeneratedCommandOrphans(repoRoot, plan));
149741
149924
  const dirs = [];
149742
149925
  for (const sub of listDirEntries(commandsDir)) {
149743
149926
  if (!sub.isDirectory()) continue;
149744
149927
  const rel = `${CLAUDE_COMMANDS_DIR}/${sub.name}`;
149745
- const listing = tryListDir(join38(commandsDir, sub.name));
149928
+ const listing = tryListDir(join39(commandsDir, sub.name));
149746
149929
  if (listing === void 0) continue;
149747
149930
  if (listing.every((entry) => taking.has(`${rel}/${entry}`))) dirs.push(rel);
149748
149931
  }
149749
149932
  return dirs.sort();
149750
149933
  }
149751
- function findOpencodeCommandOrphans(repoRoot, plan) {
149752
- return removableOf(repoRoot, allOpencodeCommandOrphans(repoRoot, plan));
149753
- }
149754
- function allOpencodeCommandOrphans(repoRoot, plan) {
149755
- const kept = new Set(
149756
- plan.actions.filter((a2) => a2.kind === "generate" && a2.target?.startsWith(`${OPENCODE_COMMANDS_DIR}/`)).map((a2) => a2.target)
149757
- );
149758
- const commandsDir = join38(repoRoot, OPENCODE_COMMANDS_DIR);
149759
- const orphans = [];
149760
- for (const entry of listDirEntries(commandsDir)) {
149761
- if (!entry.isFile()) continue;
149762
- const rel = `${OPENCODE_COMMANDS_DIR}/${entry.name}`;
149763
- const abs = join38(commandsDir, entry.name);
149764
- if (isAtomicTempName(entry.name)) {
149765
- if (isStaleAtomicTemp(abs)) orphans.push(rel);
149766
- continue;
149767
- }
149768
- if (kept.has(rel)) continue;
149769
- if (!isEngineGeneratedCommand(abs)) continue;
149770
- orphans.push(rel);
149771
- }
149772
- return orphans;
149773
- }
149774
- function sweepOpencodeCommandOrphans(repoRoot, plan) {
149775
- const orphans = findOpencodeCommandOrphans(repoRoot, plan);
149776
- for (const rel of orphans) rmSync6(join38(repoRoot, rel), { force: true });
149777
- return orphans;
149778
- }
149779
- function isEngineGeneratedCommand(abs) {
149780
- try {
149781
- return readFileSync16(abs, "utf8").includes(GENERATED_COMMAND_MARKER);
149782
- } catch {
149783
- return false;
149784
- }
149785
- }
149786
149934
  function findBlockedWrapperDirs(repoRoot, plan) {
149787
149935
  const wrapperDirs = new Set(
149788
149936
  plan.actions.filter((a2) => a2.kind === "generate" && a2.target?.startsWith(`${CLAUDE_COMMANDS_DIR}/`)).map((a2) => dirname11(a2.target))
149789
149937
  );
149790
149938
  const blocked = /* @__PURE__ */ new Set();
149791
149939
  for (const relDir of wrapperDirs) {
149792
- const abs = join38(repoRoot, relDir);
149793
- const hasForeignContent = listDir(abs).some((entry) => isForeign(join38(abs, entry), entry));
149940
+ const abs = join39(repoRoot, relDir);
149941
+ const hasForeignContent = listDir(abs).some((entry) => isForeign(join39(abs, entry), entry));
149794
149942
  if (hasForeignContent) blocked.add(relDir);
149795
149943
  }
149796
149944
  return blocked;
@@ -149806,7 +149954,7 @@ function findBlockedOpencodeCommandFiles(repoRoot, plan) {
149806
149954
  if (action.kind !== "generate") continue;
149807
149955
  const target = action.target;
149808
149956
  if (!target?.startsWith(`${OPENCODE_COMMANDS_DIR}/`)) continue;
149809
- const abs = join38(repoRoot, target);
149957
+ const abs = join39(repoRoot, target);
149810
149958
  if (pathExists(abs) && !isEngineGeneratedCommand(abs)) blocked.add(target);
149811
149959
  }
149812
149960
  return blocked;
@@ -149819,11 +149967,11 @@ function allSettingsHooksOrphan(repoRoot, plan) {
149819
149967
  (a2) => a2.kind === "merge" && a2.target === CLAUDE_SETTINGS_LOCAL_TARGET
149820
149968
  );
149821
149969
  if (hasMerge) return [];
149822
- return hasManagedHooks(join38(repoRoot, CLAUDE_SETTINGS_LOCAL_TARGET)) ? [CLAUDE_SETTINGS_LOCAL_TARGET] : [];
149970
+ return hasManagedHooks(join39(repoRoot, CLAUDE_SETTINGS_LOCAL_TARGET)) ? [CLAUDE_SETTINGS_LOCAL_TARGET] : [];
149823
149971
  }
149824
149972
  function sweepSettingsHooksOrphan(repoRoot, plan) {
149825
149973
  const orphans = findSettingsHooksOrphan(repoRoot, plan);
149826
- if (orphans.length > 0) sweepManagedHooks(join38(repoRoot, CLAUDE_SETTINGS_LOCAL_TARGET));
149974
+ if (orphans.length > 0) sweepManagedHooks(join39(repoRoot, CLAUDE_SETTINGS_LOCAL_TARGET));
149827
149975
  return orphans;
149828
149976
  }
149829
149977
  function applyPlan(repoRoot, plan, opts) {
@@ -149911,7 +150059,7 @@ function isDrifted(repoRoot, action) {
149911
150059
  switch (action.kind) {
149912
150060
  case "symlink": {
149913
150061
  if (!action.source || !action.target) return true;
149914
- const absTarget = join38(repoRoot, action.target);
150062
+ const absTarget = join39(repoRoot, action.target);
149915
150063
  const kind = occupantKind(absTarget);
149916
150064
  if (kind === "absent") return true;
149917
150065
  if (kind === "file" || kind === "directory") return false;
@@ -149924,10 +150072,10 @@ function isDrifted(repoRoot, action) {
149924
150072
  );
149925
150073
  }
149926
150074
  case "scaffold":
149927
- return !action.target || !scaffoldPresent(join38(repoRoot, action.target));
150075
+ return !action.target || !scaffoldPresent(join39(repoRoot, action.target));
149928
150076
  case "generate": {
149929
150077
  if (!action.target) return true;
149930
- const absTarget = join38(repoRoot, action.target);
150078
+ const absTarget = join39(repoRoot, action.target);
149931
150079
  if (blockingGenerateOccupant(absTarget) !== void 0) return false;
149932
150080
  const onDisk = readFileIfPresent(absTarget);
149933
150081
  if (onDisk === void 0) return true;
@@ -149939,7 +150087,7 @@ function isDrifted(repoRoot, action) {
149939
150087
  case "merge": {
149940
150088
  if (!action.target) return true;
149941
150089
  const managed = JSON.parse(requireActionContent(action));
149942
- return managedHooksDrift(join38(repoRoot, action.target), managed);
150090
+ return managedHooksDrift(join39(repoRoot, action.target), managed);
149943
150091
  }
149944
150092
  case "native":
149945
150093
  case "drop":
@@ -149951,7 +150099,7 @@ function findBlockedSymlinkTargets(repoRoot, plan) {
149951
150099
  for (const action of plan.actions) {
149952
150100
  if (action.kind !== "symlink" || !action.source || !action.target) continue;
149953
150101
  const reason = blockingSymlinkOccupant(
149954
- join38(repoRoot, action.target),
150102
+ join39(repoRoot, action.target),
149955
150103
  relativeLink(repoRoot, action.source, action.target)
149956
150104
  );
149957
150105
  if (reason !== void 0) blocked.push({ ...action, reason });
@@ -150057,6 +150205,7 @@ var init_apply = __esm({
150057
150205
  init_sweep_warnings();
150058
150206
  init_installed_projector();
150059
150207
  init_settings_hooks();
150208
+ init_opencode_command_orphans();
150060
150209
  INSTALLED_SKILL_DIRS = [AGENTS_SKILLS_DIR, CLAUDE_SKILLS_DIR];
150061
150210
  SYMLINK_ATTEMPTS = 3;
150062
150211
  }
@@ -150064,7 +150213,7 @@ var init_apply = __esm({
150064
150213
 
150065
150214
  // ../harness/src/adopt/apply.ts
150066
150215
  import { lstatSync as lstatSync12, mkdirSync as mkdirSync6, renameSync as renameSync3, rmdirSync } from "node:fs";
150067
- import { join as join39 } from "node:path";
150216
+ import { join as join40 } from "node:path";
150068
150217
  function applyAdopt(repoRoot, plan) {
150069
150218
  const moved = [];
150070
150219
  const declared = [];
@@ -150082,9 +150231,9 @@ function applyAdopt(repoRoot, plan) {
150082
150231
  return { moved, declared, refusals };
150083
150232
  }
150084
150233
  function applyMove(repoRoot, move) {
150085
- const absFrom = join39(repoRoot, move.from);
150086
- const absTo = join39(repoRoot, move.to);
150087
- const canonicalLayer = join39(repoRoot, ADOPT_TARGET_ROOT);
150234
+ const absFrom = join40(repoRoot, move.from);
150235
+ const absTo = join40(repoRoot, move.to);
150236
+ const canonicalLayer = join40(repoRoot, ADOPT_TARGET_ROOT);
150088
150237
  const layerExisted = somethingIsAt(canonicalLayer);
150089
150238
  mkdirSync6(canonicalLayer, { recursive: true });
150090
150239
  try {
@@ -150128,7 +150277,7 @@ function restore(input4) {
150128
150277
  if (!somethingIsAt(absFrom)) {
150129
150278
  try {
150130
150279
  renameSync3(absTo, absFrom);
150131
- if (!layerExisted) removeIfEmpty(join39(repoRoot, ADOPT_TARGET_ROOT));
150280
+ if (!layerExisted) removeIfEmpty(join40(repoRoot, ADOPT_TARGET_ROOT));
150132
150281
  return { name: move.name, source: move.from, rule: "link-blocked", reason: blocked };
150133
150282
  } catch {
150134
150283
  }
@@ -150195,10 +150344,10 @@ import {
150195
150344
  lstatSync as lstatSync13,
150196
150345
  mkdirSync as mkdirSync7,
150197
150346
  readlinkSync as readlinkSync5,
150198
- rmSync as rmSync7,
150347
+ rmSync as rmSync8,
150199
150348
  symlinkSync as symlinkSync3
150200
150349
  } from "node:fs";
150201
- import { basename as basename6, dirname as dirname12, join as join40, relative as relative7, resolve as resolve6, sep as sep8 } from "node:path";
150350
+ import { basename as basename6, dirname as dirname12, join as join41, relative as relative7, resolve as resolve6, sep as sep8 } from "node:path";
150202
150351
  function globalSweepDirs(roots) {
150203
150352
  return [
150204
150353
  ...new Set(
@@ -150254,13 +150403,13 @@ function globalOrphanCandidates(plan, roots) {
150254
150403
  if (pkg === void 0) {
150255
150404
  const extension = linkOwnerUnder(abs, extensionRoot);
150256
150405
  if (extension === void 0 || planned.has(abs)) continue;
150257
- if (!existsSync13(join40(extensionRoot, extension)) || plan.extensionLedger === "read") {
150406
+ if (!existsSync13(join41(extensionRoot, extension)) || plan.extensionLedger === "read") {
150258
150407
  orphans.set(abs, SWEEP_REASONS["global-extension-stopped"]);
150259
150408
  }
150260
150409
  continue;
150261
150410
  }
150262
150411
  if (planned.has(abs)) continue;
150263
- if (!existsSync13(join40(pluginsRoot, pkg))) {
150412
+ if (!existsSync13(join41(pluginsRoot, pkg))) {
150264
150413
  orphans.set(abs, SWEEP_REASONS["global-package-gone"]);
150265
150414
  continue;
150266
150415
  }
@@ -150287,7 +150436,7 @@ function rawGlobalOrphanPaths(plan, roots) {
150287
150436
  }
150288
150437
  function sweepGlobalOrphans(plan, roots) {
150289
150438
  const orphans = findGlobalOrphans(plan, roots);
150290
- for (const { path: path66 } of orphans) rmSync7(path66, { force: true });
150439
+ for (const { path: path66 } of orphans) rmSync8(path66, { force: true });
150291
150440
  return orphans;
150292
150441
  }
150293
150442
  function globalLinkText(action) {
@@ -150344,7 +150493,7 @@ function applyGlobalSymlink(action, memo2) {
150344
150493
  if (blocked !== void 0) return { kind: "blocked", reason: blocked };
150345
150494
  if (linkMatchesPlan(absTarget, absSource, linkText, LINK_CHECK)) return { kind: "unchanged" };
150346
150495
  try {
150347
- rmSync7(absTarget, { force: true });
150496
+ rmSync8(absTarget, { force: true });
150348
150497
  } catch (error63) {
150349
150498
  if (!waitForSymlinkRemoval(error63, removalRetries++)) throw error63;
150350
150499
  continue;
@@ -150591,7 +150740,7 @@ import {
150591
150740
  realpathSync as realpathSync10,
150592
150741
  statSync as statSync10
150593
150742
  } from "node:fs";
150594
- import { basename as basename7, isAbsolute as isAbsolute7, join as join41, relative as relative8, resolve as resolve7, sep as sep9 } from "node:path";
150743
+ import { basename as basename7, isAbsolute as isAbsolute7, join as join42, relative as relative8, resolve as resolve7, sep as sep9 } from "node:path";
150595
150744
  function statOrUndefined(path66) {
150596
150745
  try {
150597
150746
  return statSync10(path66, { throwIfNoEntry: false });
@@ -150628,7 +150777,7 @@ function ascendLevels(root, cwd, stopAtWorktree) {
150628
150777
  const levels2 = [];
150629
150778
  for (; ; ) {
150630
150779
  levels2.push(current3);
150631
- if (stopAtWorktree && existsSync14(join41(current3, ".git"))) break;
150780
+ if (stopAtWorktree && existsSync14(join42(current3, ".git"))) break;
150632
150781
  if (current3 === root) break;
150633
150782
  const parent = resolve7(current3, "..");
150634
150783
  if (parent === current3) break;
@@ -150654,7 +150803,7 @@ function descendScopes(root, facts) {
150654
150803
  if (!entry.isDirectory()) continue;
150655
150804
  if (NEVER_DESCEND.has(entry.name)) continue;
150656
150805
  if (entry.name.startsWith(".") && !listedDotDirs.has(entry.name)) continue;
150657
- visit2(join41(dir, entry.name), depth + 1);
150806
+ visit2(join42(dir, entry.name), depth + 1);
150658
150807
  }
150659
150808
  };
150660
150809
  visit2(root, 0);
@@ -150666,7 +150815,7 @@ function readDirs(facts, root, cwd) {
150666
150815
  const seen = /* @__PURE__ */ new Set();
150667
150816
  for (const scope3 of scopes) {
150668
150817
  for (const readPath2 of facts.readPaths.project) {
150669
- const abs = join41(scope3, readPath2);
150818
+ const abs = join42(scope3, readPath2);
150670
150819
  if (seen.has(abs)) continue;
150671
150820
  seen.add(abs);
150672
150821
  dirs.push({ abs, via: viaOf(root, abs) });
@@ -150750,9 +150899,9 @@ function harnessCoverage(harness, root, opts) {
150750
150899
  continue;
150751
150900
  }
150752
150901
  for (const entry of [...entries].sort((a2, b2) => a2.name.localeCompare(b2.name))) {
150753
- const dir = join41(abs, entry.name);
150902
+ const dir = join42(abs, entry.name);
150754
150903
  if (!statOrUndefined(dir)?.isDirectory()) continue;
150755
- const skillMd = join41(dir, "SKILL.md");
150904
+ const skillMd = join42(dir, "SKILL.md");
150756
150905
  if (!statOrUndefined(skillMd)?.isFile()) continue;
150757
150906
  const reachedThroughSymlink = lstatOrUndefined(dir)?.isSymbolicLink() === true;
150758
150907
  const { found, reasons, loads, droppedReason } = evaluate(
@@ -150789,21 +150938,21 @@ var init_coverage = __esm({
150789
150938
 
150790
150939
  // ../harness/src/engine.ts
150791
150940
  import { existsSync as existsSync15, lstatSync as lstatSync15, readFileSync as readFileSync18, readdirSync as readdirSync9 } from "node:fs";
150792
- import { join as join42 } from "node:path";
150941
+ import { join as join43 } from "node:path";
150793
150942
  function loadManifest(repoRoot) {
150794
150943
  const raw = JSON.parse(
150795
- readFileSync18(join42(repoRoot, ".agents", "harness.manifest.json"), "utf8")
150944
+ readFileSync18(join43(repoRoot, ".agents", "harness.manifest.json"), "utf8")
150796
150945
  );
150797
150946
  return parseHarnessManifest(raw);
150798
150947
  }
150799
150948
  function loadClaudeHooks(repoRoot) {
150800
- const settingsPath = join42(repoRoot, ".claude", "settings.json");
150949
+ const settingsPath = join43(repoRoot, ".claude", "settings.json");
150801
150950
  if (!existsSync15(settingsPath)) return void 0;
150802
150951
  const settings = JSON.parse(readFileSync18(settingsPath, "utf8"));
150803
150952
  return settings.hooks;
150804
150953
  }
150805
150954
  function agentsMdExists(repoRoot) {
150806
- return existsSync15(join42(repoRoot, "AGENTS.md"));
150955
+ return existsSync15(join43(repoRoot, "AGENTS.md"));
150807
150956
  }
150808
150957
  function claudeCommandsExist(repoRoot) {
150809
150958
  const walk = (dir) => {
@@ -150815,22 +150964,22 @@ function claudeCommandsExist(repoRoot) {
150815
150964
  }
150816
150965
  for (const entry of entries) {
150817
150966
  if (entry.isFile() && entry.name.endsWith(".md")) return true;
150818
- if (entry.isDirectory() && walk(join42(dir, entry.name))) return true;
150967
+ if (entry.isDirectory() && walk(join43(dir, entry.name))) return true;
150819
150968
  }
150820
150969
  return false;
150821
150970
  };
150822
- return walk(join42(repoRoot, CLAUDE_COMMANDS_DIR));
150971
+ return walk(join43(repoRoot, CLAUDE_COMMANDS_DIR));
150823
150972
  }
150824
150973
  function scanClaudeOnlySkills(repoRoot, manifest) {
150825
150974
  const resolved = /* @__PURE__ */ new Map();
150826
150975
  for (const entry of manifest.claudeOnlySkills) {
150827
150976
  const defaultPath = `${CLAUDE_SKILLS_DIR}/${entry.name}`;
150828
150977
  const path66 = entry.path.trim() === "" ? defaultPath : entry.path;
150829
- const abs = join42(repoRoot, path66);
150978
+ const abs = join43(repoRoot, path66);
150830
150979
  let kind = "missing";
150831
150980
  const stats2 = lstatSync15(abs, { throwIfNoEntry: false });
150832
150981
  if (stats2?.isSymbolicLink()) kind = "symlink";
150833
- else if (stats2?.isDirectory() && existsSync15(join42(abs, "SKILL.md"))) kind = "directory";
150982
+ else if (stats2?.isDirectory() && existsSync15(join43(abs, "SKILL.md"))) kind = "directory";
150834
150983
  resolved.set(entry.name, { path: path66, kind, atProjectionTarget: path66 === defaultPath });
150835
150984
  }
150836
150985
  return resolved;
@@ -151178,7 +151327,7 @@ __export(adopt_owned_workspace_exports, {
151178
151327
  autoAdoptFromDisk: () => autoAdoptFromDisk
151179
151328
  });
151180
151329
  import { readFileSync as readFileSync19 } from "node:fs";
151181
- import { join as join43 } from "node:path";
151330
+ import { join as join44 } from "node:path";
151182
151331
  function autoAdoptPermitted() {
151183
151332
  return configManager.get("harness").autoAdopt;
151184
151333
  }
@@ -151186,7 +151335,7 @@ function autoAdoptFromDisk(dorkHome) {
151186
151335
  const fallback = UserConfigSchema.shape.harness.parse(void 0).autoAdopt;
151187
151336
  let raw;
151188
151337
  try {
151189
- raw = JSON.parse(readFileSync19(join43(dorkHome, "config.json"), "utf8"));
151338
+ raw = JSON.parse(readFileSync19(join44(dorkHome, "config.json"), "utf8"));
151190
151339
  } catch {
151191
151340
  return fallback;
151192
151341
  }
@@ -151288,7 +151437,7 @@ var init_adopt_owned_workspace = __esm({
151288
151437
 
151289
151438
  // ../../apps/server/src/services/harness/project-agent-workspace.ts
151290
151439
  import { existsSync as existsSync16, realpathSync as realpathSync11 } from "node:fs";
151291
- import { join as join44, relative as relative9, resolve as resolve8, isAbsolute as isAbsolute8 } from "node:path";
151440
+ import { join as join45, relative as relative9, resolve as resolve8, isAbsolute as isAbsolute8 } from "node:path";
151292
151441
  function canonicalize(p) {
151293
151442
  const absolute = resolve8(p);
151294
151443
  try {
@@ -151298,7 +151447,7 @@ function canonicalize(p) {
151298
151447
  }
151299
151448
  }
151300
151449
  function isAgentHome(dir, dorkHome) {
151301
- const rel = relative9(canonicalize(join44(dorkHome, "agents")), canonicalize(dir));
151450
+ const rel = relative9(canonicalize(join45(dorkHome, "agents")), canonicalize(dir));
151302
151451
  return rel !== "" && !rel.startsWith("..") && !isAbsolute8(rel);
151303
151452
  }
151304
151453
  var AGENT_SKILLS_DIR;
@@ -151310,7 +151459,7 @@ var init_project_agent_workspace = __esm({
151310
151459
  init_dork_home();
151311
151460
  init_logger();
151312
151461
  init_adopt_owned_workspace();
151313
- AGENT_SKILLS_DIR = join44(".agents", "skills");
151462
+ AGENT_SKILLS_DIR = join45(".agents", "skills");
151314
151463
  }
151315
151464
  });
151316
151465
 
@@ -151319,14 +151468,14 @@ var directory_ownership_exports = {};
151319
151468
  __export(directory_ownership_exports, {
151320
151469
  resolveDirectoryOwnership: () => resolveDirectoryOwnership
151321
151470
  });
151322
- import { join as join45, relative as relative10, sep as sep10 } from "node:path";
151471
+ import { join as join46, relative as relative10, sep as sep10 } from "node:path";
151323
151472
  function resolveDirectoryOwnership(dir, dorkHome) {
151324
151473
  if (isAgentHome(dir, dorkHome)) return "agent-home";
151325
151474
  if (isRoomWorktree(dir, dorkHome)) return "room-worktree";
151326
151475
  return "plain";
151327
151476
  }
151328
151477
  function isRoomWorktree(dir, dorkHome) {
151329
- const rel = relative10(canonicalize(join45(dorkHome, "rooms")), canonicalize(dir));
151478
+ const rel = relative10(canonicalize(join46(dorkHome, "rooms")), canonicalize(dir));
151330
151479
  if (rel === "" || rel.startsWith("..")) return false;
151331
151480
  const parts = rel.split(sep10);
151332
151481
  return parts.length === 3 && parts[1] === "worktrees";
@@ -151338,9 +151487,9 @@ var init_directory_ownership = __esm({
151338
151487
  });
151339
151488
 
151340
151489
  // src/harness-consent.ts
151341
- import { join as join46 } from "node:path";
151490
+ import { join as join47 } from "node:path";
151342
151491
  function configPathFor(dorkHome) {
151343
- return join46(dorkHome, "config.json");
151492
+ return join47(dorkHome, "config.json");
151344
151493
  }
151345
151494
  async function readStoredDecisions(dorkHome) {
151346
151495
  const { readHookDecisionsFromDisk: readHookDecisionsFromDisk2 } = await Promise.resolve().then(() => (init_hook_consent(), hook_consent_exports));
@@ -151501,11 +151650,11 @@ __export(global_scope_exports, {
151501
151650
  writeGlobalSharing: () => writeGlobalSharing
151502
151651
  });
151503
151652
  import { readFileSync as readFileSync20 } from "node:fs";
151504
- import { join as join47 } from "node:path";
151653
+ import { join as join48 } from "node:path";
151505
151654
  function readGlobalSharingFromDisk(dorkHome) {
151506
151655
  let text3;
151507
151656
  try {
151508
- text3 = readFileSync20(join47(dorkHome, "config.json"), "utf8");
151657
+ text3 = readFileSync20(join48(dorkHome, "config.json"), "utf8");
151509
151658
  } catch (err) {
151510
151659
  if (err.code === "ENOENT") return NOTHING_SHARED;
151511
151660
  return { ...NOTHING_SHARED, unreadable: describeReadFailure2(err) };
@@ -151534,7 +151683,7 @@ function boundaryConfigFromDisk(dorkHome) {
151534
151683
  getDot: (key) => {
151535
151684
  if (key !== "server.boundary") return void 0;
151536
151685
  try {
151537
- const raw = JSON.parse(readFileSync20(join47(dorkHome, "config.json"), "utf8"));
151686
+ const raw = JSON.parse(readFileSync20(join48(dorkHome, "config.json"), "utf8"));
151538
151687
  const server2 = raw?.server;
151539
151688
  return server2?.boundary;
151540
151689
  } catch {
@@ -151565,7 +151714,7 @@ function resolveGlobalScopeInputs(dorkHome, env6, config3) {
151565
151714
  roots: {
151566
151715
  dorkHome,
151567
151716
  ...AGENTS_SKILLS_DIR_READERS.some((harness) => enabled3.has(harness)) ? { agentsSkillsDir: agentsUserSkillsDir() } : {},
151568
- ...enabled3.has("claude-code") ? { claudeSkillsDir: join47(inheritedClaudeRoot(), "skills") } : {}
151717
+ ...enabled3.has("claude-code") ? { claudeSkillsDir: join48(inheritedClaudeRoot(), "skills") } : {}
151569
151718
  }
151570
151719
  };
151571
151720
  }
@@ -151575,7 +151724,7 @@ function globalRootsFor(dorkHome, harnesses, env6, config3) {
151575
151724
  return {
151576
151725
  dorkHome,
151577
151726
  ...AGENTS_SKILLS_DIR_READERS.some((harness) => enabled3.has(harness)) ? { agentsSkillsDir: agentsUserSkillsDir() } : {},
151578
- ...enabled3.has("claude-code") ? { claudeSkillsDir: join47(inheritedClaudeRoot(), "skills") } : {}
151727
+ ...enabled3.has("claude-code") ? { claudeSkillsDir: join48(inheritedClaudeRoot(), "skills") } : {}
151579
151728
  };
151580
151729
  }
151581
151730
  function writeGlobalSharing(harnesses, reason, now3 = /* @__PURE__ */ new Date()) {
@@ -151589,6 +151738,7 @@ function writeGlobalSharing(harnesses, reason, now3 = /* @__PURE__ */ new Date()
151589
151738
  var NOTHING_SHARED;
151590
151739
  var init_global_scope = __esm({
151591
151740
  "../../apps/server/src/services/harness/global-scope.ts"() {
151741
+ "use strict";
151592
151742
  init_src5();
151593
151743
  init_config_schema();
151594
151744
  init_boundary();
@@ -152054,6 +152204,109 @@ var init_harness_sync_global = __esm({
152054
152204
  }
152055
152205
  });
152056
152206
 
152207
+ // src/harness-sync-claude-only.ts
152208
+ function formatClaudeOnly(claudeOnly, repoRoot) {
152209
+ const { root, plugins, personalHookCommands: hooks } = claudeOnly;
152210
+ const HEADING = "Installed in Claude Code only";
152211
+ if (claudeOnly.unreadable !== void 0) {
152212
+ return [
152213
+ "",
152214
+ HEADING,
152215
+ ` DorkOS could not read ${root}/settings.json, so it cannot tell you what Claude Code has. (${claudeOnly.unreadable})`,
152216
+ " Nothing else in this report is affected."
152217
+ ];
152218
+ }
152219
+ const notices = claudeOnly.unreadableParts.length + (claudeOnly.skippedEntries ?? 0);
152220
+ if (plugins.length === 0 && notices === 0) return [];
152221
+ const from = (plugin) => plugin.repo === void 0 ? ` - ${plugin.name} (from a source Claude Code calls "${plugin.marketplace}")` : ` - ${plugin.name} (from ${plugin.repo})`;
152222
+ const machineWide = plugins.filter((plugin) => plugin.settingsScope === "user");
152223
+ const inGroup = (offer) => machineWide.filter((plugin) => plugin.offer === offer);
152224
+ const lines = ["", HEADING, ` Read from ${root}`];
152225
+ if (plugins.length > 0) {
152226
+ lines.push(
152227
+ "",
152228
+ ` You turned on ${plugins.length} ${plugins.length === 1 ? "plugin" : "plugins"} in Claude Code. Your other agent tools cannot see them.`
152229
+ );
152230
+ }
152231
+ for (const part of claudeOnly.unreadableParts) {
152232
+ lines.push(
152233
+ "",
152234
+ ` DorkOS could not read the ${part} part of ${root}/settings.json; the plugin list is still right.`
152235
+ );
152236
+ }
152237
+ const skipped = claudeOnly.skippedEntries ?? 0;
152238
+ if (skipped > 0) {
152239
+ lines.push(
152240
+ "",
152241
+ skipped === 1 ? " DorkOS could not read 1 of the entries in that file, so it is not listed." : ` DorkOS could not read ${skipped} of the entries in that file, so they are not listed.`
152242
+ );
152243
+ }
152244
+ if (plugins.length === 0) return lines;
152245
+ if (hooks > 0) {
152246
+ lines.push(
152247
+ "",
152248
+ ` Your personal Claude Code settings run ${hooks} ${hooks === 1 ? "command" : "commands"} automatically. Only Claude Code runs ${hooks === 1 ? "it" : "them"}.`
152249
+ );
152250
+ }
152251
+ if (claudeOnly.sourcesUnreadable !== void 0) {
152252
+ lines.push(
152253
+ "",
152254
+ ` DorkOS could not read its own list of sources (${claudeOnly.sourcesUnreadable}), so it cannot offer installs right now.`,
152255
+ "",
152256
+ " Turned on in Claude Code:",
152257
+ ...plugins.map(from),
152258
+ "",
152259
+ " Your company can also turn plugins on or off, in a settings file DorkOS cannot read. So this list may",
152260
+ " not be the whole story."
152261
+ );
152262
+ return lines;
152263
+ }
152264
+ const canInstall = inGroup("install");
152265
+ if (canInstall.length > 0) {
152266
+ lines.push(
152267
+ "",
152268
+ " DorkOS can install these for this project, so every agent tool here gets them:"
152269
+ );
152270
+ for (const plugin of canInstall) {
152271
+ lines.push(from(plugin), ` Run: dorkos install ${plugin.name} --project ${repoRoot}`);
152272
+ }
152273
+ lines.push(" DorkOS has to be running, and it asks you to approve the install first.");
152274
+ }
152275
+ const needsSource = inGroup("add-source-then-install");
152276
+ if (needsSource.length > 0) {
152277
+ lines.push("", " DorkOS does not have these sources yet:");
152278
+ for (const plugin of needsSource) {
152279
+ lines.push(
152280
+ from(plugin),
152281
+ ` Add the source first: dorkos marketplace add ${plugin.sourceUrl}`
152282
+ );
152283
+ }
152284
+ }
152285
+ const noPackage = inGroup("no-package");
152286
+ if (noPackage.length > 0) {
152287
+ lines.push("", " DorkOS has that source but nothing by that name:", ...noPackage.map(from));
152288
+ }
152289
+ const unknownSource = inGroup("unknown-source");
152290
+ if (unknownSource.length > 0) {
152291
+ lines.push("", " DorkOS cannot tell where these came from:", ...unknownSource.map(from));
152292
+ }
152293
+ const projectOnly = plugins.filter((plugin) => plugin.settingsScope === "project");
152294
+ if (projectOnly.length > 0) {
152295
+ lines.push("", " On for this project only:", ...projectOnly.map(from));
152296
+ }
152297
+ lines.push(
152298
+ "",
152299
+ " Your company can also turn plugins on or off, in a settings file DorkOS cannot read. So this list may",
152300
+ " not be the whole story."
152301
+ );
152302
+ return lines;
152303
+ }
152304
+ var init_harness_sync_claude_only = __esm({
152305
+ "src/harness-sync-claude-only.ts"() {
152306
+ "use strict";
152307
+ }
152308
+ });
152309
+
152057
152310
  // ../../apps/server/src/services/harness/project-with-consent.ts
152058
152311
  var project_with_consent_exports = {};
152059
152312
  __export(project_with_consent_exports, {
@@ -152185,11 +152438,11 @@ var init_project_with_consent = __esm({
152185
152438
  import { AsyncLocalStorage as AsyncLocalStorage7 } from "node:async_hooks";
152186
152439
  import { randomUUID as randomUUID3 } from "node:crypto";
152187
152440
  import { chmod, mkdir as mkdir3, rename, rm, writeFile as writeFile3 } from "node:fs/promises";
152188
- import { basename as basename8, dirname as dirname13, join as join48, resolve as resolve10 } from "node:path";
152441
+ import { basename as basename8, dirname as dirname13, join as join49, resolve as resolve10 } from "node:path";
152189
152442
  async function writeUnlocked(filePath, data, options) {
152190
152443
  const dir = dirname13(filePath);
152191
152444
  await mkdir3(dir, { recursive: true });
152192
- const tempPath = join48(dir, `.${basename8(filePath)}.${process.pid}.${randomUUID3()}.tmp`);
152445
+ const tempPath = join49(dir, `.${basename8(filePath)}.${process.pid}.${randomUUID3()}.tmp`);
152193
152446
  try {
152194
152447
  await writeFile3(tempPath, data, {
152195
152448
  encoding: "utf-8",
@@ -152354,7 +152607,7 @@ var init_git_tree = __esm({
152354
152607
 
152355
152608
  // ../../apps/server/src/services/marketplace/lib/directory-size.ts
152356
152609
  import { lstat as lstat3, readdir as readdir3 } from "node:fs/promises";
152357
- import { join as join49 } from "node:path";
152610
+ import { join as join50 } from "node:path";
152358
152611
  async function directorySize(root) {
152359
152612
  let total = 0;
152360
152613
  const walk = async (dir, depth) => {
@@ -152366,7 +152619,7 @@ async function directorySize(root) {
152366
152619
  return;
152367
152620
  }
152368
152621
  for (const entry of entries) {
152369
- const entryPath = join49(dir, entry.name);
152622
+ const entryPath = join50(dir, entry.name);
152370
152623
  if (entry.isDirectory()) {
152371
152624
  await walk(entryPath, depth + 1);
152372
152625
  } else if (entry.isFile()) {
@@ -152402,7 +152655,7 @@ import {
152402
152655
  stat as stat2,
152403
152656
  utimes
152404
152657
  } from "node:fs/promises";
152405
- import { join as join50 } from "node:path";
152658
+ import { join as join51 } from "node:path";
152406
152659
  function isFetchStatus(value) {
152407
152660
  if (typeof value !== "object" || value === null) return false;
152408
152661
  const v2 = value;
@@ -152494,7 +152747,7 @@ var init_marketplace_cache = __esm({
152494
152747
  entryWrittenListeners = /* @__PURE__ */ new Set();
152495
152748
  /** Compute the cache root path: `${dorkHome}/cache/marketplace`. */
152496
152749
  get cacheRoot() {
152497
- return join50(this.dorkHome, "cache", "marketplace");
152750
+ return join51(this.dorkHome, "cache", "marketplace");
152498
152751
  }
152499
152752
  /**
152500
152753
  * Read a cached marketplace.json document.
@@ -152525,8 +152778,8 @@ var init_marketplace_cache = __esm({
152525
152778
  if (err instanceof PathEscapeError) return null;
152526
152779
  throw err;
152527
152780
  }
152528
- const jsonPath = join50(dir, MARKETPLACE_FILENAME);
152529
- const stampPath = join50(dir, LAST_FETCHED_FILENAME);
152781
+ const jsonPath = join51(dir, MARKETPLACE_FILENAME);
152782
+ const stampPath = join51(dir, LAST_FETCHED_FILENAME);
152530
152783
  let raw;
152531
152784
  let stamp2;
152532
152785
  try {
@@ -152561,9 +152814,9 @@ var init_marketplace_cache = __esm({
152561
152814
  async writeMarketplace(marketplaceName, json3) {
152562
152815
  const dir = this.marketplaceDir(marketplaceName);
152563
152816
  await mkdir4(dir, { recursive: true });
152564
- await writeFile4(join50(dir, MARKETPLACE_FILENAME), `${JSON.stringify(json3, null, 2)}
152817
+ await writeFile4(join51(dir, MARKETPLACE_FILENAME), `${JSON.stringify(json3, null, 2)}
152565
152818
  `);
152566
- await writeFile4(join50(dir, LAST_FETCHED_FILENAME), (/* @__PURE__ */ new Date()).toISOString());
152819
+ await writeFile4(join51(dir, LAST_FETCHED_FILENAME), (/* @__PURE__ */ new Date()).toISOString());
152567
152820
  }
152568
152821
  /**
152569
152822
  * Record how an attempt to fetch a marketplace's listing went.
@@ -152582,7 +152835,7 @@ var init_marketplace_cache = __esm({
152582
152835
  * cache. Callers treat recording as best effort.
152583
152836
  */
152584
152837
  async writeFetchStatus(marketplaceName, status) {
152585
- const file2 = join50(this.marketplaceDir(marketplaceName), LAST_CHECK_FILENAME);
152838
+ const file2 = join51(this.marketplaceDir(marketplaceName), LAST_CHECK_FILENAME);
152586
152839
  await withFileLock(file2, async (write) => {
152587
152840
  const current3 = await this.readFetchStatus(marketplaceName);
152588
152841
  if (current3 && current3.startedAt > status.startedAt) return;
@@ -152602,8 +152855,8 @@ var init_marketplace_cache = __esm({
152602
152855
  try {
152603
152856
  const dir = this.marketplaceDir(marketplaceName);
152604
152857
  const [stamp2] = await Promise.all([
152605
- readFile3(join50(dir, LAST_FETCHED_FILENAME), "utf-8"),
152606
- access(join50(dir, MARKETPLACE_FILENAME))
152858
+ readFile3(join51(dir, LAST_FETCHED_FILENAME), "utf-8"),
152859
+ access(join51(dir, MARKETPLACE_FILENAME))
152607
152860
  ]);
152608
152861
  const at = new Date(stamp2.trim());
152609
152862
  return Number.isNaN(at.getTime()) ? null : at;
@@ -152621,7 +152874,7 @@ var init_marketplace_cache = __esm({
152621
152874
  async readFetchStatus(marketplaceName) {
152622
152875
  try {
152623
152876
  const raw = await readFile3(
152624
- join50(this.marketplaceDir(marketplaceName), LAST_CHECK_FILENAME),
152877
+ join51(this.marketplaceDir(marketplaceName), LAST_CHECK_FILENAME),
152625
152878
  "utf-8"
152626
152879
  );
152627
152880
  const parsed = JSON.parse(raw);
@@ -152733,8 +152986,8 @@ var init_marketplace_cache = __esm({
152733
152986
  * Idempotent. Not safe while a fetch is running in this cache.
152734
152987
  */
152735
152988
  async removeLeftovers() {
152736
- await rm2(join50(this.cacheRoot, LEGACY_PACKAGES_DIRNAME), { recursive: true, force: true });
152737
- const treesRoot = join50(this.cacheRoot, TREES_DIRNAME);
152989
+ await rm2(join51(this.cacheRoot, LEGACY_PACKAGES_DIRNAME), { recursive: true, force: true });
152990
+ const treesRoot = join51(this.cacheRoot, TREES_DIRNAME);
152738
152991
  let entries;
152739
152992
  try {
152740
152993
  entries = await readdir4(treesRoot);
@@ -152744,7 +152997,7 @@ var init_marketplace_cache = __esm({
152744
152997
  await Promise.all(
152745
152998
  entries.filter(
152746
152999
  (entry) => entry.startsWith(TEMP_FETCH_PREFIX) || entry.startsWith(TEMP_PRUNE_PREFIX)
152747
- ).map((entry) => rm2(join50(treesRoot, entry), { recursive: true, force: true }))
153000
+ ).map((entry) => rm2(join51(treesRoot, entry), { recursive: true, force: true }))
152748
153001
  );
152749
153002
  }
152750
153003
  /**
@@ -152755,9 +153008,9 @@ var init_marketplace_cache = __esm({
152755
153008
  * @internal
152756
153009
  */
152757
153010
  async fetchAndPromote(packageName, subpath, fetch2) {
152758
- const treesRoot = join50(this.cacheRoot, TREES_DIRNAME);
153011
+ const treesRoot = join51(this.cacheRoot, TREES_DIRNAME);
152759
153012
  await mkdir4(treesRoot, { recursive: true });
152760
- const tempDir = await mkdtemp(join50(treesRoot, TEMP_FETCH_PREFIX));
153013
+ const tempDir = await mkdtemp(join51(treesRoot, TEMP_FETCH_PREFIX));
152761
153014
  let commitSha;
152762
153015
  let finalPath;
152763
153016
  try {
@@ -152821,7 +153074,7 @@ var init_marketplace_cache = __esm({
152821
153074
  * removed (the others still are).
152822
153075
  */
152823
153076
  async removeUnused(keep) {
152824
- const treesRoot = join50(this.cacheRoot, TREES_DIRNAME);
153077
+ const treesRoot = join51(this.cacheRoot, TREES_DIRNAME);
152825
153078
  const entries = await this.listPackages();
152826
153079
  const kept = keep(entries);
152827
153080
  const result2 = { removed: [], freedBytes: 0, failed: [] };
@@ -152836,7 +153089,7 @@ var init_marketplace_cache = __esm({
152836
153089
  return null;
152837
153090
  }
152838
153091
  if (Date.now() - lastUsedMs < IN_USE_GRACE_MS) return null;
152839
- const target = join50(treesRoot, `${TEMP_PRUNE_PREFIX}${randomUUID4()}`);
153092
+ const target = join51(treesRoot, `${TEMP_PRUNE_PREFIX}${randomUUID4()}`);
152840
153093
  await rename2(entry.path, target);
152841
153094
  return target;
152842
153095
  });
@@ -152885,7 +153138,7 @@ var init_marketplace_cache = __esm({
152885
153138
  * Listing is not use: it stamps nothing.
152886
153139
  */
152887
153140
  async listPackages() {
152888
- const root = join50(this.cacheRoot, TREES_DIRNAME);
153141
+ const root = join51(this.cacheRoot, TREES_DIRNAME);
152889
153142
  let entries;
152890
153143
  try {
152891
153144
  entries = await readdir4(root);
@@ -152899,7 +153152,7 @@ var init_marketplace_cache = __esm({
152899
153152
  if (!parsed) {
152900
153153
  continue;
152901
153154
  }
152902
- const path66 = join50(root, entry);
153155
+ const path66 = join51(root, entry);
152903
153156
  try {
152904
153157
  const info2 = await stat2(path66);
152905
153158
  if (!info2.isDirectory()) {
@@ -152928,8 +153181,8 @@ var init_marketplace_cache = __esm({
152928
153181
  * the cache.
152929
153182
  */
152930
153183
  marketplaceDir(marketplaceName) {
152931
- const root = join50(this.cacheRoot, "marketplaces");
152932
- return assertContainedIn(root, join50(root, marketplaceName));
153184
+ const root = join51(this.cacheRoot, "marketplaces");
153185
+ return assertContainedIn(root, join51(root, marketplaceName));
152933
153186
  }
152934
153187
  /**
152935
153188
  * Compute the directory path for a content-addressable package tree:
@@ -152949,10 +153202,10 @@ var init_marketplace_cache = __esm({
152949
153202
  * the cache.
152950
153203
  */
152951
153204
  packageDir(packageName, commitSha, subpath) {
152952
- const root = join50(this.cacheRoot, TREES_DIRNAME);
153205
+ const root = join51(this.cacheRoot, TREES_DIRNAME);
152953
153206
  const digest2 = subpathDigest(subpath);
152954
153207
  const tree = digest2 === "" ? "" : `${SUBPATH_SEPARATOR}${digest2}`;
152955
- return assertContainedIn(root, join50(root, `${packageName}@${commitSha}${tree}`));
153208
+ return assertContainedIn(root, join51(root, `${packageName}@${commitSha}${tree}`));
152956
153209
  }
152957
153210
  };
152958
153211
  }
@@ -153013,7 +153266,7 @@ var init_source_url_policy = __esm({
153013
153266
 
153014
153267
  // ../../apps/server/src/services/marketplace/sources/marketplace-source-manager.ts
153015
153268
  import { readFile as readFile4 } from "node:fs/promises";
153016
- import { join as join51 } from "node:path";
153269
+ import { join as join52 } from "node:path";
153017
153270
  function buildDefaultSources() {
153018
153271
  const now3 = (/* @__PURE__ */ new Date()).toISOString();
153019
153272
  return [
@@ -153089,7 +153342,7 @@ var init_marketplace_source_manager = __esm({
153089
153342
  */
153090
153343
  constructor(dorkHome) {
153091
153344
  this.dorkHome = dorkHome;
153092
- this.filePath = join51(dorkHome, MARKETPLACES_FILENAME);
153345
+ this.filePath = join52(dorkHome, MARKETPLACES_FILENAME);
153093
153346
  }
153094
153347
  dorkHome;
153095
153348
  filePath;
@@ -153529,7 +153782,7 @@ __export(harness_sync_command_exports, {
153529
153782
  runHarnessSync: () => runHarnessSync
153530
153783
  });
153531
153784
  import { existsSync as existsSync18, readFileSync as readFileSync21 } from "node:fs";
153532
- import { join as join52 } from "node:path";
153785
+ import { join as join53 } from "node:path";
153533
153786
  import { parseArgs as parseArgs4 } from "node:util";
153534
153787
  function parseHarnessSyncArgs(rawArgs) {
153535
153788
  let parsed;
@@ -153656,7 +153909,7 @@ function reportCodexTrust(before, after) {
153656
153909
  }
153657
153910
  function reportClaudeSkillsRestart(existedBefore, repoRoot) {
153658
153911
  if (existedBefore) return;
153659
- if (!existsSync18(join52(repoRoot, CLAUDE_SKILLS_DIR))) return;
153912
+ if (!existsSync18(join53(repoRoot, CLAUDE_SKILLS_DIR))) return;
153660
153913
  const facts = skillsFactsFor("claude-code");
153661
153914
  console.log("");
153662
153915
  console.log(`Created ${CLAUDE_SKILLS_DIR}/, which is where Claude Code reads skills.`);
@@ -153667,107 +153920,11 @@ function reportClaudeSkillsRestart(existedBefore, repoRoot) {
153667
153920
  }
153668
153921
  function readIfPresent(repoRoot, rel) {
153669
153922
  try {
153670
- return readFileSync21(join52(repoRoot, rel), "utf8");
153923
+ return readFileSync21(join53(repoRoot, rel), "utf8");
153671
153924
  } catch {
153672
153925
  return void 0;
153673
153926
  }
153674
153927
  }
153675
- function formatClaudeOnly(claudeOnly, repoRoot) {
153676
- const { root, plugins, personalHookCommands: hooks } = claudeOnly;
153677
- const HEADING = "Installed in Claude Code only";
153678
- if (claudeOnly.unreadable !== void 0) {
153679
- return [
153680
- "",
153681
- HEADING,
153682
- ` DorkOS could not read ${root}/settings.json, so it cannot tell you what Claude Code has. (${claudeOnly.unreadable})`,
153683
- " Nothing else in this report is affected."
153684
- ];
153685
- }
153686
- const notices = claudeOnly.unreadableParts.length + (claudeOnly.skippedEntries ?? 0);
153687
- if (plugins.length === 0 && notices === 0) return [];
153688
- const from = (plugin) => plugin.repo === void 0 ? ` - ${plugin.name} (from a source Claude Code calls "${plugin.marketplace}")` : ` - ${plugin.name} (from ${plugin.repo})`;
153689
- const machineWide = plugins.filter((plugin) => plugin.settingsScope === "user");
153690
- const inGroup = (offer) => machineWide.filter((plugin) => plugin.offer === offer);
153691
- const lines = ["", HEADING, ` Read from ${root}`];
153692
- if (plugins.length > 0) {
153693
- lines.push(
153694
- "",
153695
- ` You turned on ${plugins.length} ${plugins.length === 1 ? "plugin" : "plugins"} in Claude Code. Your other agent tools cannot see them.`
153696
- );
153697
- }
153698
- for (const part of claudeOnly.unreadableParts) {
153699
- lines.push(
153700
- "",
153701
- ` DorkOS could not read the ${part} part of ${root}/settings.json; the plugin list is still right.`
153702
- );
153703
- }
153704
- const skipped = claudeOnly.skippedEntries ?? 0;
153705
- if (skipped > 0) {
153706
- lines.push(
153707
- "",
153708
- skipped === 1 ? " DorkOS could not read 1 of the entries in that file, so it is not listed." : ` DorkOS could not read ${skipped} of the entries in that file, so they are not listed.`
153709
- );
153710
- }
153711
- if (plugins.length === 0) return lines;
153712
- if (hooks > 0) {
153713
- lines.push(
153714
- "",
153715
- ` Your personal Claude Code settings run ${hooks} ${hooks === 1 ? "command" : "commands"} automatically. Only Claude Code runs ${hooks === 1 ? "it" : "them"}.`
153716
- );
153717
- }
153718
- if (claudeOnly.sourcesUnreadable !== void 0) {
153719
- lines.push(
153720
- "",
153721
- ` DorkOS could not read its own list of sources (${claudeOnly.sourcesUnreadable}), so it cannot offer installs right now.`,
153722
- "",
153723
- " Turned on in Claude Code:",
153724
- ...plugins.map(from),
153725
- "",
153726
- " Your company can also turn plugins on or off, in a settings file DorkOS cannot read. So this list may",
153727
- " not be the whole story."
153728
- );
153729
- return lines;
153730
- }
153731
- const canInstall = inGroup("install");
153732
- if (canInstall.length > 0) {
153733
- lines.push(
153734
- "",
153735
- " DorkOS can install these for this project, so every agent tool here gets them:"
153736
- );
153737
- for (const plugin of canInstall) {
153738
- lines.push(from(plugin), ` Run: dorkos install ${plugin.name} --project ${repoRoot}`);
153739
- }
153740
- lines.push(" DorkOS has to be running, and it asks you to approve the install first.");
153741
- }
153742
- const needsSource = inGroup("add-source-then-install");
153743
- if (needsSource.length > 0) {
153744
- lines.push("", " DorkOS does not have these sources yet:");
153745
- for (const plugin of needsSource) {
153746
- lines.push(
153747
- from(plugin),
153748
- ` Add the source first: dorkos marketplace add ${plugin.sourceUrl}`
153749
- );
153750
- }
153751
- }
153752
- const noPackage = inGroup("no-package");
153753
- if (noPackage.length > 0) {
153754
- lines.push("", " DorkOS has that source but nothing by that name:", ...noPackage.map(from));
153755
- }
153756
- const unknownSource = inGroup("unknown-source");
153757
- if (unknownSource.length > 0) {
153758
- lines.push("", " DorkOS cannot tell where these came from:", ...unknownSource.map(from));
153759
- }
153760
- const projectOnly = plugins.filter((plugin) => plugin.settingsScope === "project");
153761
- if (projectOnly.length > 0) {
153762
- lines.push("", " On for this project only:", ...projectOnly.map(from));
153763
- }
153764
- lines.push(
153765
- "",
153766
- " Your company can also turn plugins on or off, in a settings file DorkOS cannot read. So this list may",
153767
- " not be the whole story."
153768
- );
153769
- return lines;
153770
- }
153771
153928
  function formatNotEnabled(plan) {
153772
153929
  if (plan.notEnabled.length === 0) return [];
153773
153930
  const enableWith = (harness) => `add it to ${HARNESS_MANIFEST_PATH} or run dorkos harness sync --fix --enable ${harness}`;
@@ -153994,7 +154151,7 @@ async function runHarnessSync(args) {
153994
154151
  }
153995
154152
  const repoRoot = process.cwd();
153996
154153
  const ourHarness = await readDorkosHarness(resolveDorkHome2());
153997
- if (!existsSync18(join52(repoRoot, HARNESS_MANIFEST_PATH))) {
154154
+ if (!existsSync18(join53(repoRoot, HARNESS_MANIFEST_PATH))) {
153998
154155
  if (!args.fix) {
153999
154156
  console.error(`No harness manifest in ${repoRoot}`);
154000
154157
  console.error(` looked for: ${HARNESS_MANIFEST_PATH}`);
@@ -154074,7 +154231,7 @@ async function runHarnessSync(args) {
154074
154231
  return { exitCode: strictExit(exitCode2, withheld, args.strict) };
154075
154232
  }
154076
154233
  const codexHooksBefore = readIfPresent(repoRoot, CODEX_HOOKS_TARGET);
154077
- const claudeSkillsExistedBefore = existsSync18(join52(repoRoot, CLAUDE_SKILLS_DIR));
154234
+ const claudeSkillsExistedBefore = existsSync18(join53(repoRoot, CLAUDE_SKILLS_DIR));
154078
154235
  const result2 = projectWithConsent2(repoRoot, {
154079
154236
  ...consentOpts,
154080
154237
  sweepOrphans: harnessFilter === void 0
@@ -154111,6 +154268,7 @@ var init_harness_sync_command = __esm({
154111
154268
  init_harness_consent();
154112
154269
  init_harness_sync_allow_hooks();
154113
154270
  init_harness_sync_global();
154271
+ init_harness_sync_claude_only();
154114
154272
  init_src5();
154115
154273
  SUMMARY_KINDS = ["native", "symlink", "scaffold", "generate", "merge"];
154116
154274
  USAGE_LINE5 = "Usage: dorkos harness sync [--check] [--fix] [--global] [--harness <id>] [--strict] [--allow-hooks <package>] [--enable <harness>] [--write-gitignore]";
@@ -154132,7 +154290,7 @@ __export(harness_adopt_command_exports, {
154132
154290
  runHarnessAdopt: () => runHarnessAdopt
154133
154291
  });
154134
154292
  import { existsSync as existsSync19 } from "node:fs";
154135
- import { join as join53, resolve as resolve11 } from "node:path";
154293
+ import { join as join54, resolve as resolve11 } from "node:path";
154136
154294
  import { parseArgs as parseArgs5 } from "node:util";
154137
154295
  function parseHarnessAdoptArgs(rawArgs) {
154138
154296
  let parsed;
@@ -154173,7 +154331,7 @@ ${USAGE_LINE6}`
154173
154331
  }
154174
154332
  async function runHarnessAdopt(args) {
154175
154333
  const repoRoot = args.project === void 0 ? process.cwd() : resolve11(process.cwd(), args.project);
154176
- if (!existsSync19(join53(repoRoot, HARNESS_MANIFEST_PATH))) {
154334
+ if (!existsSync19(join54(repoRoot, HARNESS_MANIFEST_PATH))) {
154177
154335
  console.error(`No harness manifest in ${repoRoot}`);
154178
154336
  console.error(` looked for: ${HARNESS_MANIFEST_PATH}`);
154179
154337
  console.error("");
@@ -157141,7 +157299,7 @@ import { spawn } from "node:child_process";
157141
157299
  import { randomBytes as randomBytes5, createHash as createHash7 } from "node:crypto";
157142
157300
  import { constants as constants6 } from "node:fs";
157143
157301
  import { lstat as lstat5, open as open4, realpath as realpath4 } from "node:fs/promises";
157144
- import { join as join54, resolve as resolve12, relative as relative11, isAbsolute as isAbsolute10, dirname as dirname14 } from "node:path";
157302
+ import { join as join55, resolve as resolve12, relative as relative11, isAbsolute as isAbsolute10, dirname as dirname14 } from "node:path";
157145
157303
  function requireFact2(value, code) {
157146
157304
  if (!value) throw new InstallationFailure(code);
157147
157305
  }
@@ -157422,10 +157580,10 @@ function createInstallationJobs(configuration, options = { ownerKind: "controlle
157422
157580
  sameBinding(request.attempt.binding, slot.binding) && sameBinding(request.candidate.binding, slot.binding),
157423
157581
  "BINDING_MISMATCH"
157424
157582
  );
157425
- const attempt = join54(config3.cacheRoot, "attempts", slot.binding.attemptId);
157426
- const candidate = join54(config3.cacheRoot, "candidates", slot.binding.installationId);
157583
+ const attempt = join55(config3.cacheRoot, "attempts", slot.binding.attemptId);
157584
+ const candidate = join55(config3.cacheRoot, "candidates", slot.binding.installationId);
157427
157585
  requireFact2(
157428
- request.attempt.attemptRoot === attempt && request.attempt.homeRoot === join54(attempt, "home") && request.attempt.temporaryRoot === join54(attempt, "tmp") && request.candidate.candidateRoot === candidate && request.candidate.payloadRoot === join54(candidate, "payload"),
157586
+ request.attempt.attemptRoot === attempt && request.attempt.homeRoot === join55(attempt, "home") && request.attempt.temporaryRoot === join55(attempt, "tmp") && request.candidate.candidateRoot === candidate && request.candidate.payloadRoot === join55(candidate, "payload"),
157429
157587
  "BINDING_MISMATCH"
157430
157588
  );
157431
157589
  await assertDirectory(attempt, request.attempt.identity);
@@ -157434,7 +157592,7 @@ function createInstallationJobs(configuration, options = { ownerKind: "controlle
157434
157592
  await assertDirectory(request.candidate.payloadRoot);
157435
157593
  await assertDirectory(config3.libraryRoot);
157436
157594
  requireFact2(
157437
- request.library.distributionSHA256 === INSTALLATION_TARGET.libraryDistributionSHA256 && request.library.cli.path === join54(config3.libraryRoot, "cli.js") && request.library.browsersManifest.path === join54(config3.libraryRoot, "browsers.json") && request.library.files.length > 0 && request.library.files.length <= INSTALLATION_LIMITS.libraryEntries,
157595
+ request.library.distributionSHA256 === INSTALLATION_TARGET.libraryDistributionSHA256 && request.library.cli.path === join55(config3.libraryRoot, "cli.js") && request.library.browsersManifest.path === join55(config3.libraryRoot, "browsers.json") && request.library.files.length > 0 && request.library.files.length <= INSTALLATION_LIMITS.libraryEntries,
157438
157596
  "LIBRARY_MISMATCH"
157439
157597
  );
157440
157598
  const paths2 = /* @__PURE__ */ new Set();
@@ -157469,9 +157627,9 @@ function createInstallationJobs(configuration, options = { ownerKind: "controlle
157469
157627
  PATH: dirname14(config3.nodeExecutable) + ":/usr/bin:/bin",
157470
157628
  HOME: home2,
157471
157629
  TMPDIR: temporary,
157472
- XDG_CONFIG_HOME: join54(home2, ".config"),
157473
- XDG_CACHE_HOME: join54(home2, ".cache"),
157474
- XDG_DATA_HOME: join54(home2, ".local", "share"),
157630
+ XDG_CONFIG_HOME: join55(home2, ".config"),
157631
+ XDG_CACHE_HOME: join55(home2, ".cache"),
157632
+ XDG_DATA_HOME: join55(home2, ".local", "share"),
157475
157633
  NODE_DISABLE_COMPILE_CACHE: "1",
157476
157634
  ...payload ? { PLAYWRIGHT_BROWSERS_PATH: payload } : {},
157477
157635
  LC_ALL: "C",
@@ -157804,17 +157962,17 @@ function createInstallationJobs(configuration, options = { ownerKind: "controlle
157804
157962
  },
157805
157963
  async runVersionProbe(request) {
157806
157964
  const slot = register("version-probe", request.binding, request.bounds);
157807
- const attempt = join54(config3.cacheRoot, "attempts", slot.binding.attemptId);
157965
+ const attempt = join55(config3.cacheRoot, "attempts", slot.binding.attemptId);
157808
157966
  return execute(
157809
157967
  slot,
157810
157968
  request,
157811
157969
  request.executable.path,
157812
157970
  ["--version"],
157813
157971
  request.cwd,
157814
- environment(join54(attempt, "home"), join54(attempt, "tmp")),
157972
+ environment(join55(attempt, "home"), join55(attempt, "tmp")),
157815
157973
  async () => {
157816
157974
  requireFact2(
157817
- request.cwd === attempt && request.executable.path === join54(
157975
+ request.cwd === attempt && request.executable.path === join55(
157818
157976
  config3.cacheRoot,
157819
157977
  "candidates",
157820
157978
  slot.binding.installationId,
@@ -157823,8 +157981,8 @@ function createInstallationJobs(configuration, options = { ownerKind: "controlle
157823
157981
  "BINDING_MISMATCH"
157824
157982
  );
157825
157983
  await assertDirectory(attempt);
157826
- await assertDirectory(join54(attempt, "home"));
157827
- await assertDirectory(join54(attempt, "tmp"));
157984
+ await assertDirectory(join55(attempt, "home"));
157985
+ await assertDirectory(join55(attempt, "tmp"));
157828
157986
  await sourceIntake(slot);
157829
157987
  await readPinned(
157830
157988
  slot,
@@ -157887,7 +158045,7 @@ var init_status2 = __esm({
157887
158045
  });
157888
158046
 
157889
158047
  // ../browser/src/runtime/installation/transaction.ts
157890
- import { join as join55 } from "node:path";
158048
+ import { join as join56 } from "node:path";
157891
158049
  function require2(value, code) {
157892
158050
  if (!value) throw new InstallationFailure(code);
157893
158051
  }
@@ -157951,7 +158109,7 @@ function createInstallationTransaction(configuration, dependencies, generation3)
157951
158109
  require2(facts.cleanupCauses.length === 0 && !facts.stopRequested && facts.exitObserved && facts.closeObserved, "CUSTODY_UNCERTAIN");
157952
158110
  require2(facts.exitCode === 0 && facts.signal === null, role2 === "official-install" ? "INSTALLER_FAILED" : "VERIFIER_FAILED");
157953
158111
  const birth = facts.birth;
157954
- require2(birth && sameBinding(birth.binding, expected) && birth.role === role2 && birth.jobId === facts.jobId && birth.executable === config3.nodeExecutable && canonicalDigest(birth.bounds) === canonicalDigest(bounds) && birth.cwd === join55(config3.cacheRoot, "attempts", expected.attemptId) && Number.isSafeInteger(birth.pid) && birth.pid > 0 && canonicalDigest(birth.argv) === canonicalDigest(argv2), "BINDING_MISMATCH");
158112
+ require2(birth && sameBinding(birth.binding, expected) && birth.role === role2 && birth.jobId === facts.jobId && birth.executable === config3.nodeExecutable && canonicalDigest(birth.bounds) === canonicalDigest(bounds) && birth.cwd === join56(config3.cacheRoot, "attempts", expected.attemptId) && Number.isSafeInteger(birth.pid) && birth.pid > 0 && canonicalDigest(birth.argv) === canonicalDigest(argv2), "BINDING_MISMATCH");
157955
158113
  for (const [stream, bytes] of [
157956
158114
  [facts.stdout, run.stdout],
157957
158115
  [facts.stderr, run.stderr]
@@ -157964,11 +158122,11 @@ function createInstallationTransaction(configuration, dependencies, generation3)
157964
158122
  };
157965
158123
  const validateLibrary = (library) => {
157966
158124
  require2(library.distributionSHA256 === INSTALLATION_TARGET.libraryDistributionSHA256, "LIBRARY_MISMATCH");
157967
- require2(library.cli.path === join55(config3.libraryRoot, "cli.js") && library.browsersManifest.path === join55(config3.libraryRoot, "browsers.json"), "LIBRARY_MISMATCH");
158125
+ require2(library.cli.path === join56(config3.libraryRoot, "cli.js") && library.browsersManifest.path === join56(config3.libraryRoot, "browsers.json"), "LIBRARY_MISMATCH");
157968
158126
  require2(library.files.length > 0 && library.files.length <= INSTALLATION_LIMITS.libraryEntries, "LIBRARY_MISMATCH");
157969
158127
  };
157970
158128
  const validateCandidate = (candidate, expected) => {
157971
- require2(candidate.installationId === expected.installationId && candidate.candidateRoot === join55(config3.cacheRoot, "candidates", expected.installationId) && candidate.payloadRoot === join55(candidate.candidateRoot, "payload") && candidate.executable.path === join55(candidate.candidateRoot, INSTALLATION_TARGET.executablePath), "OWNERSHIP_UNCERTAIN");
158129
+ require2(candidate.installationId === expected.installationId && candidate.candidateRoot === join56(config3.cacheRoot, "candidates", expected.installationId) && candidate.payloadRoot === join56(candidate.candidateRoot, "payload") && candidate.executable.path === join56(candidate.candidateRoot, INSTALLATION_TARGET.executablePath), "OWNERSHIP_UNCERTAIN");
157972
158130
  FileIdentitySchema.parse(candidate.executable.identity);
157973
158131
  DigestSchema.parse(candidate.executable.sha256);
157974
158132
  DigestSchema.parse(candidate.inventoryDigest);
@@ -158155,7 +158313,7 @@ function createInstallationTransaction(configuration, dependencies, generation3)
158155
158313
  recordBytes(journal, INSTALLATION_LIMITS.journalBytes);
158156
158314
  check4(bounds, options.signal);
158157
158315
  const written = await fs40.writeReuseJournal(reservation, attempt, journal);
158158
- require2(written.path === join55(attempt.attemptRoot, "reuse.json") && written.sha256 === sha2562(recordBytes(journal, INSTALLATION_LIMITS.journalBytes)), "OWNERSHIP_UNCERTAIN");
158316
+ require2(written.path === join56(attempt.attemptRoot, "reuse.json") && written.sha256 === sha2562(recordBytes(journal, INSTALLATION_LIMITS.journalBytes)), "OWNERSHIP_UNCERTAIN");
158159
158317
  const unchanged = await fs40.inspectExisting({ signal: options.signal });
158160
158318
  require2(canonicalDigest(unchanged.current) === canonicalDigest(reserved.current) && canonicalDigest(unchanged.installation) === canonicalDigest(reserved.installation), "ROOT_CHANGED");
158161
158319
  journalDigest = written.sha256;
@@ -158263,7 +158421,7 @@ import { createHash as createHash8 } from "node:crypto";
158263
158421
  import { constants as constants7 } from "node:fs";
158264
158422
  import { lstat as lstat6, open as open5, realpath as realpath5 } from "node:fs/promises";
158265
158423
  import { createRequire as createRequire3 } from "node:module";
158266
- import { dirname as dirname15, join as join56, resolve as resolve13 } from "node:path";
158424
+ import { dirname as dirname15, join as join57, resolve as resolve13 } from "node:path";
158267
158425
  import { fileURLToPath as fileURLToPath6 } from "node:url";
158268
158426
  function sameFile(a2, b2) {
158269
158427
  return a2.isFile() && b2.isFile() && a2.dev === b2.dev && a2.ino === b2.ino && a2.size === b2.size && a2.mtimeNs === b2.mtimeNs && a2.ctimeNs === b2.ctimeNs && a2.mode === b2.mode && a2.uid === b2.uid;
@@ -158324,7 +158482,7 @@ async function inspectFile(filename, cap, retainBytes = false) {
158324
158482
  async function packageRoot(controller) {
158325
158483
  let directory = dirname15(controller);
158326
158484
  while (true) {
158327
- const candidate = join56(directory, "package.json");
158485
+ const candidate = join57(directory, "package.json");
158328
158486
  let named3 = null;
158329
158487
  try {
158330
158488
  named3 = await lstat6(candidate, { bigint: true });
@@ -158344,10 +158502,10 @@ async function packageRoot(controller) {
158344
158502
  async function resolveInstalledRuntimeConfiguration(controllerURL, dataDirectory) {
158345
158503
  const controllerEntry = await realpath5(fileURLToPath6(controllerURL));
158346
158504
  const root = await packageRoot(controllerEntry);
158347
- if (controllerEntry !== join56(root, "dist/bin/cli.js"))
158505
+ if (controllerEntry !== join57(root, "dist/bin/cli.js"))
158348
158506
  throw new Error("The managed browser needs the packaged DorkOS command.");
158349
- const verifierEntry = join56(root, BROWSER_VERIFIER_ASSET);
158350
- const sourceManifestPath = join56(root, BROWSER_SOURCE_MANIFEST);
158507
+ const verifierEntry = join57(root, BROWSER_VERIFIER_ASSET);
158508
+ const sourceManifestPath = join57(root, BROWSER_SOURCE_MANIFEST);
158351
158509
  const nodeExecutable = await realpath5(process.execPath);
158352
158510
  const node2 = await inspectFile(nodeExecutable, 268435456);
158353
158511
  const controller = await inspectFile(controllerEntry, INSTALLATION_LIMITS.controllerBytes);
@@ -162682,7 +162840,7 @@ var init_provider_process = __esm({
162682
162840
  // src/commands/community-deploy/runtime/github-release-source.ts
162683
162841
  import { mkdtemp as mkdtemp2, rm as rm3, writeFile as writeFile5 } from "node:fs/promises";
162684
162842
  import { tmpdir as tmpdir3 } from "node:os";
162685
- import { join as join57 } from "node:path";
162843
+ import { join as join58 } from "node:path";
162686
162844
  function createGitHubCommunityReleaseSource(options) {
162687
162845
  const verify = async (subject, trusted) => {
162688
162846
  await runProviderCommand({
@@ -162728,8 +162886,8 @@ function createGitHubCommunityReleaseSource(options) {
162728
162886
  return result2.value;
162729
162887
  },
162730
162888
  verifyManifest: async (bytes, trusted) => {
162731
- const directory = await mkdtemp2(join57(tmpdir3(), "dorkos-community-manifest-"));
162732
- const path66 = join57(directory, "manifest.json");
162889
+ const directory = await mkdtemp2(join58(tmpdir3(), "dorkos-community-manifest-"));
162890
+ const path66 = join58(directory, "manifest.json");
162733
162891
  try {
162734
162892
  await writeFile5(path66, bytes, { mode: 384, flag: "wx" });
162735
162893
  return await verify(path66, trusted);
@@ -165483,7 +165641,7 @@ var init_community_release_manifest = __esm({
165483
165641
  // src/commands/community-deploy/fly-config.ts
165484
165642
  import { mkdtemp as mkdtemp3, rm as rm4, writeFile as writeFile6 } from "node:fs/promises";
165485
165643
  import { tmpdir as tmpdir4 } from "node:os";
165486
- import { join as join58 } from "node:path";
165644
+ import { join as join59 } from "node:path";
165487
165645
  function tomlString(value) {
165488
165646
  return JSON.stringify(value);
165489
165647
  }
@@ -165536,8 +165694,8 @@ kill_timeout = "30s"
165536
165694
  `;
165537
165695
  }
165538
165696
  async function withCommunityFlyConfig(plan, consumer) {
165539
- const directory = await mkdtemp3(join58(tmpdir4(), "dorkos-community-fly-"));
165540
- const path66 = join58(directory, "fly.toml");
165697
+ const directory = await mkdtemp3(join59(tmpdir4(), "dorkos-community-fly-"));
165698
+ const path66 = join59(directory, "fly.toml");
165541
165699
  try {
165542
165700
  await writeFile6(path66, renderCommunityFlyConfig(plan), { mode: 384, flag: "wx" });
165543
165701
  return await consumer(path66);
@@ -165980,7 +166138,7 @@ var init_default_deploy = __esm({
165980
166138
  // src/commands/community-deploy/runtime/default-owner.ts
165981
166139
  import { access as access2, constants as constants9, stat as stat4 } from "node:fs/promises";
165982
166140
  import { platform as platform2 } from "node:os";
165983
- import { delimiter, join as join59 } from "node:path";
166141
+ import { delimiter, join as join60 } from "node:path";
165984
166142
  import { createInterface as createInterface4 } from "node:readline/promises";
165985
166143
  import { stdin as stdin2, stdout as stdout2 } from "node:process";
165986
166144
  async function ask(question, signal) {
@@ -166013,7 +166171,7 @@ function handoffCommands(system) {
166013
166171
  async function executableOnPath(executable, path66) {
166014
166172
  for (const directory of path66.split(delimiter).filter(Boolean)) {
166015
166173
  try {
166016
- await access2(join59(directory, executable), constants9.X_OK);
166174
+ await access2(join60(directory, executable), constants9.X_OK);
166017
166175
  return true;
166018
166176
  } catch {
166019
166177
  }
@@ -166045,7 +166203,7 @@ async function assertOwnerHandoffPrerequisites(env6, system = platform2()) {
166045
166203
  `Owner handoff needs an active Wayland clipboard session before setup can create resources. See ${FLY_GUIDE_URL}`
166046
166204
  );
166047
166205
  }
166048
- const socketAvailable = await stat4(join59(runtimeDirectory, display)).then(
166206
+ const socketAvailable = await stat4(join60(runtimeDirectory, display)).then(
166049
166207
  (value) => value.isSocket(),
166050
166208
  () => false
166051
166209
  );
@@ -166230,10 +166388,10 @@ import {
166230
166388
  rm as rm5,
166231
166389
  unlink as unlink2
166232
166390
  } from "node:fs/promises";
166233
- import { basename as basename9, dirname as dirname16, join as join60 } from "node:path";
166391
+ import { basename as basename9, dirname as dirname16, join as join61 } from "node:path";
166234
166392
  function launchJournalPath(dorkHome, runId) {
166235
166393
  const safeRunId = external_exports.uuid().parse(runId);
166236
- return join60(dorkHome, "launches", "community", `${safeRunId}.json`);
166394
+ return join61(dorkHome, "launches", "community", `${safeRunId}.json`);
166237
166395
  }
166238
166396
  async function rejectSymlink(path66) {
166239
166397
  try {
@@ -166270,7 +166428,7 @@ async function exists2(path66) {
166270
166428
  }
166271
166429
  async function writeDurably(filePath, data) {
166272
166430
  const directory = dirname16(filePath);
166273
- const temporary = join60(
166431
+ const temporary = join61(
166274
166432
  directory,
166275
166433
  `.${basename9(filePath)}.${process.pid}.${randomUUID6()}.durable`
166276
166434
  );
@@ -166367,7 +166525,7 @@ async function readLaunchJournal(filePath) {
166367
166525
  }
166368
166526
  }
166369
166527
  async function listIncompleteLaunchJournals(dorkHome) {
166370
- const directory = join60(dorkHome, "launches", "community");
166528
+ const directory = join61(dorkHome, "launches", "community");
166371
166529
  await rejectSymlink(dirname16(directory));
166372
166530
  await rejectSymlink(directory);
166373
166531
  let filenames;
@@ -170552,6 +170710,7 @@ var init_connection_copy = __esm({
170552
170710
  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;
170553
170711
  var init_connector_schemas = __esm({
170554
170712
  "../connector-providers/src/connector-schemas.ts"() {
170713
+ "use strict";
170555
170714
  init_zod();
170556
170715
  init_connection_copy();
170557
170716
  CONNECTOR_OPERATION_SELECTION_LIMIT = 1e5;
@@ -176677,7 +176836,7 @@ if (process.argv[2] === "community") {
176677
176836
  );
176678
176837
  Object.assign(childEnv, credentialEnv.pickCommunityCredentialEnv(rawProcessEnv));
176679
176838
  const exitCode = await dispatcher.runCommunityDispatcher(process.argv.slice(3), {
176680
- cliVersion: "0.121.0",
176839
+ cliVersion: "0.123.0",
176681
176840
  dorkHome: DORK_HOME,
176682
176841
  processEnv: childEnv,
176683
176842
  parseRelease: (bytes) => releaseContract.parseCompatibleCommunityReleaseManifest(
@@ -176695,7 +176854,7 @@ if (process.argv[2] === "community") {
176695
176854
  process.exit(1);
176696
176855
  }
176697
176856
  }
176698
- var cliErrorReporter = initCliErrorReporting({ dorkHome: DORK_HOME, version: "0.121.0" });
176857
+ var cliErrorReporter = initCliErrorReporting({ dorkHome: DORK_HOME, version: "0.123.0" });
176699
176858
  var uninstallCliErrorHandlers = cliErrorReporter ? installCliErrorHandlers(cliErrorReporter) : void 0;
176700
176859
  if (process.argv[2] === "doctor") {
176701
176860
  process.env.DORK_HOME = DORK_HOME;
@@ -176705,7 +176864,7 @@ if (process.argv[2] === "doctor") {
176705
176864
  if (process.argv[2] === "feedback") {
176706
176865
  process.env.DORK_HOME = DORK_HOME;
176707
176866
  const { runFeedback: runFeedback2 } = await Promise.resolve().then(() => (init_feedback2(), feedback_exports));
176708
- process.exit(await runFeedback2(DORK_HOME, "0.121.0", process.argv.slice(3)));
176867
+ process.exit(await runFeedback2(DORK_HOME, "0.123.0", process.argv.slice(3)));
176709
176868
  }
176710
176869
  if (process.argv[2] === "auth") {
176711
176870
  process.env.DORK_HOME = DORK_HOME;
@@ -176804,7 +176963,7 @@ if (process.argv[2] === "agent" || process.argv[2] === "task" || process.argv[2]
176804
176963
  }
176805
176964
  }
176806
176965
  const { runVersionDispatcher: runVersionDispatcher2 } = await Promise.resolve().then(() => (init_version5(), version_exports));
176807
- process.exit(await runVersionDispatcher2("0.121.0", DORK_HOME, subArgs));
176966
+ process.exit(await runVersionDispatcher2("0.123.0", DORK_HOME, subArgs));
176808
176967
  }
176809
176968
  var { values, positionals } = parseCliArgs();
176810
176969
  if (positionals[0] && !knownCommands.has(positionals[0])) {
@@ -176898,14 +177057,14 @@ Examples:
176898
177057
  process.exit(0);
176899
177058
  }
176900
177059
  if (values.version) {
176901
- console.log("0.121.0");
177060
+ console.log("0.123.0");
176902
177061
  process.exit(0);
176903
177062
  }
176904
177063
  if (values["post-install-check"]) {
176905
177064
  const claudeFound = checkClaude();
176906
177065
  const coreExtensionsFound = checkCoreExtensions();
176907
177066
  const extensionsCompile = await checkExtensionCompilation();
176908
- console.log(`dorkos ${"0.121.0"}`);
177067
+ console.log(`dorkos ${"0.123.0"}`);
176909
177068
  if (!coreExtensionsFound) {
176910
177069
  console.log("Installation incomplete \u2014 bundled core extensions are missing.");
176911
177070
  }
@@ -177053,7 +177212,7 @@ if (fs39.existsSync(envPath)) {
177053
177212
  }
177054
177213
  uninstallCliErrorHandlers?.();
177055
177214
  process.env.DORKOS_CLI_ENTRYPOINT = fileURLToPath7(import.meta.url);
177056
- process.env.DORKOS_CLI_VERSION = "0.121.0";
177215
+ process.env.DORKOS_CLI_VERSION = "0.123.0";
177057
177216
  var server;
177058
177217
  try {
177059
177218
  server = await import("../server/index.js");
@@ -177078,7 +177237,7 @@ var ansiReset = "\x1B[0m";
177078
177237
  console.log("");
177079
177238
  console.log(`${purple}${logo}${ansiReset}`);
177080
177239
  console.log("");
177081
- console.log(` DorkOS v${"0.121.0"}`);
177240
+ console.log(` DorkOS v${"0.123.0"}`);
177082
177241
  console.log(` Local: ${link(localUrl, localUrl)}`);
177083
177242
  var nets = networkInterfaces();
177084
177243
  var networkUrl = null;
@@ -177104,9 +177263,9 @@ if (shouldOpenBrowser && process.stdin.isTTY) {
177104
177263
  const openCmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
177105
177264
  exec(`${openCmd} ${localUrl}`);
177106
177265
  }
177107
- checkForUpdate("0.121.0").then((latestVersion) => {
177266
+ checkForUpdate("0.123.0").then((latestVersion) => {
177108
177267
  if (latestVersion) {
177109
- const msg = `Update available: ${"0.121.0"} \u2192 ${latestVersion}`;
177268
+ const msg = `Update available: ${"0.123.0"} \u2192 ${latestVersion}`;
177110
177269
  const cmd = "Run npm install -g dorkos@latest to update";
177111
177270
  const width = Math.max(msg.length, cmd.length) + 6;
177112
177271
  const pad2 = (s2) => `\u2502 ${s2}${" ".repeat(width - s2.length - 6)} \u2502`;