dorkos 0.122.0 → 0.124.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 (320) hide show
  1. package/dist/bin/cli.js +914 -333
  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-ClN3P9B8.js → AboutPage-BH8Ndn3e.js} +1 -1
  5. package/dist/client/assets/{ActivityErrorState-B2lq1pyE.js → ActivityErrorState-K5Mew9EX.js} +1 -1
  6. package/dist/client/assets/{ActivityPage-htTkSy18.js → ActivityPage-BB20L5HU.js} +1 -1
  7. package/dist/client/assets/{ActivityRow-BqV0B1T0.js → ActivityRow-C5O7rnmS.js} +1 -1
  8. package/dist/client/assets/{AdapterIcon-DlkN0YJo.js → AdapterIcon-Bmybvrzb.js} +1 -1
  9. package/dist/client/assets/{AdapterSetupWizard-RyNPjSmU.js → AdapterSetupWizard-CkdV7Hhh.js} +2 -2
  10. package/dist/client/assets/{AgentOptionRow-DSievGfL.js → AgentOptionRow-BA2cDa7r.js} +1 -1
  11. package/dist/client/assets/{AgentPicker-BCtWrhsA.js → AgentPicker-CsIIPGZJ.js} +1 -1
  12. package/dist/client/assets/{AgentRequestCard-BHIHWNRz.js → AgentRequestCard-0fOxvaoe.js} +3 -3
  13. package/dist/client/assets/{AppearancePage-B2eduuT0.js → AppearancePage-XOjkkoli.js} +1 -1
  14. package/dist/client/assets/{ApplyToOverridesDialog-C7G2t3X2.js → ApplyToOverridesDialog-CoO6V1G4.js} +1 -1
  15. package/dist/client/assets/{AttentionSignalRow-_8thTHYX.js → AttentionSignalRow-CjjZobp7.js} +1 -1
  16. package/dist/client/assets/{BaseTanStackRouterDevtoolsPanel-B-iktbLX-WpZU5xiO.js → BaseTanStackRouterDevtoolsPanel-B-iktbLX-9TVHyRPJ.js} +1 -1
  17. package/dist/client/assets/{BindingDialog-BAwbHFq3.js → BindingDialog-DLoAQauL.js} +1 -1
  18. package/dist/client/assets/{BlintzCanvas-BEtRmEbL.js → BlintzCanvas-CYHsXAcY.js} +3 -3
  19. package/dist/client/assets/{CanvasCsvContent--6i2ETyZ.js → CanvasCsvContent--Gr7Fe_U.js} +1 -1
  20. package/dist/client/assets/{CanvasFileContent-C86nyLbI.js → CanvasFileContent-estXyAbr.js} +2 -2
  21. package/dist/client/assets/{CanvasModel3dContent-wYHHAovt.js → CanvasModel3dContent-CkOo930M.js} +2 -2
  22. package/dist/client/assets/{ChatAppsOff-2Wvch1rr.js → ChatAppsOff-D4L1zJVN.js} +1 -1
  23. package/dist/client/assets/{CodeMirrorDiff-s1TWguZ8.js → CodeMirrorDiff-DY_6ju-z.js} +1 -1
  24. package/dist/client/assets/{CodeMirrorEditor-1ndoTbcZ.js → CodeMirrorEditor-BUoDBsBv.js} +1 -1
  25. package/dist/client/assets/{CommitmentList-BK97ndab.js → CommitmentList-wDkcVP9c.js} +1 -1
  26. package/dist/client/assets/{CommitmentsPage-_nd37gVX.js → CommitmentsPage-CzSM6b8R.js} +1 -1
  27. package/dist/client/assets/{ComputerResourceView-C2Broer4.js → ComputerResourceView-cERD9H2L.js} +1 -1
  28. package/dist/client/assets/{ComputerViewer-DgG7t2KZ.js → ComputerViewer-rMcfbk2_.js} +1 -1
  29. package/dist/client/assets/{ConnectionAccessLists-Pbo2lft8.js → ConnectionAccessLists-f7QeQbQo.js} +1 -1
  30. package/dist/client/assets/{ConnectionsPage-Dm2d9owX.js → ConnectionsPage-BmjtA6pw.js} +2 -2
  31. package/dist/client/assets/{ConventionPage-BUltejHJ.js → ConventionPage-CH-ah6nI.js} +1 -1
  32. package/dist/client/assets/{ExtensionPageRoute-DAomCiMw.js → ExtensionPageRoute-CJIxa6ST.js} +2 -2
  33. package/dist/client/assets/{FloatingTanStackRouterDevtools-CqogiFob-5fT29ZEV.js → FloatingTanStackRouterDevtools-CqogiFob-BP7EJ2JL.js} +1 -1
  34. package/dist/client/assets/HandlePage-Cg8H3mQS.js +1 -0
  35. package/dist/client/assets/{HeartbeatPage-BW0X4YAL.js → HeartbeatPage-BUsf-qrU.js} +1 -1
  36. package/dist/client/assets/{KeyEntry-ClqAj0dS.js → KeyEntry-C2kWdN8q.js} +1 -1
  37. package/dist/client/assets/{LexicalField-CbswpPQ7.js → LexicalField-CR8ulsI_.js} +1 -1
  38. package/dist/client/assets/{ManagesPage-Daqs8hys.js → ManagesPage-DTtsIOGi.js} +1 -1
  39. package/dist/client/assets/{Marketplace-BNMIm8g_.js → Marketplace-iaV5XAzv.js} +2 -2
  40. package/dist/client/assets/{MarketplaceSourcesView-B4WpzVpr.js → MarketplaceSourcesView-6tgzUfFj.js} +1 -1
  41. package/dist/client/assets/{McpAppFrame-Dbg_Ni39.js → McpAppFrame-C7eYYdI9.js} +1 -1
  42. package/dist/client/assets/McpSigninBody-BDyGbJ7I.js +1 -0
  43. package/dist/client/assets/{Model3dViewer-DT8x0h7T.js → Model3dViewer-BujDNuVS.js} +1 -1
  44. package/dist/client/assets/NamePage-Bx8T98OF.js +1 -0
  45. package/dist/client/assets/{NewDirectMessageMenu-BbehZd6I.js → NewDirectMessageMenu-D4e-z2Jt.js} +1 -1
  46. package/dist/client/assets/{NotificationsPage-B9zEN26O.js → NotificationsPage-CkDeTaJp.js} +1 -1
  47. package/dist/client/assets/{OpenMeshSwitch-D-AYDXjH.js → OpenMeshSwitch-CtbOt3r5.js} +2 -2
  48. package/dist/client/assets/OperatorIdentityForm-Vr4qZnmM.js +1 -0
  49. package/dist/client/assets/PermissionHistory-DzU1rf2B.js +1 -0
  50. package/dist/client/assets/{PermissionsPage-CKfDf5Pj.js → PermissionsPage-f4QaX8oM.js} +1 -1
  51. package/dist/client/assets/{PersonalityPopover-CHPTuHIH.js → PersonalityPopover-BkZruwF-.js} +1 -1
  52. package/dist/client/assets/PhotoPage-CmrOIRjf.js +1 -0
  53. package/dist/client/assets/{PreviewRefusedNotice-BuVUhjq3.js → PreviewRefusedNotice-BXC2K0tx.js} +1 -1
  54. package/dist/client/assets/{ProfileFields-DimHNpR4.js → ProfileFields-BebX5oiv.js} +1 -1
  55. package/dist/client/assets/{ProfilePanelContainer-FRZ5Px2L.js → ProfilePanelContainer-DZoL65zQ.js} +1 -1
  56. package/dist/client/assets/{ProfileRolePicker-UWhM5yuR.js → ProfileRolePicker-D9H7wsuT.js} +1 -1
  57. package/dist/client/assets/{PromptSuggestionChips-DQaDSd7Y.js → PromptSuggestionChips-B5fDmc-g.js} +1 -1
  58. package/dist/client/assets/{ReportsToPopover-BOuCM8il.js → ReportsToPopover-uVYhSqj7.js} +1 -1
  59. package/dist/client/assets/{RoomSurface-Dhv-LkWz.js → RoomSurface-Bg5WV4Ep.js} +7 -7
  60. package/dist/client/assets/{RoomsPage-glKYJBpq.js → RoomsPage-yflYFulU.js} +1 -1
  61. package/dist/client/assets/{RunsOnPopover-BvxoHUeo.js → RunsOnPopover-DtGrX1Vq.js} +1 -1
  62. package/dist/client/assets/{RuntimeConnectFlow-CgB_X5wo.js → RuntimeConnectFlow-DjReuQ-T.js} +1 -1
  63. package/dist/client/assets/{RuntimeSetupDialog-r1Ss_YQW.js → RuntimeSetupDialog-Cr4GRi8c.js} +1 -1
  64. package/dist/client/assets/SeenDevices-SPWkdzoK.js +19 -0
  65. package/dist/client/assets/{SessionsPage-CFLDx-aF.js → SessionsPage-BWu-en78.js} +1 -1
  66. package/dist/client/assets/SettingsDialog-_dEXUhHe.js +12 -0
  67. package/dist/client/assets/{SkillsPage-CUQZ4I_r.js → SkillsPage-BdUb9SZy.js} +1 -1
  68. package/dist/client/assets/TaskDialogWrapper-qYJPEoSR.js +1 -0
  69. package/dist/client/assets/{TasksEmptyState-B4TjUm8G.js → TasksEmptyState-Bgcg9vxF.js} +2 -2
  70. package/dist/client/assets/{TasksPage-D_vFBDA1.js → TasksPage-Ch5W2WQS.js} +1 -1
  71. package/dist/client/assets/{TeamComputerEntry-EQ1fjMRb.js → TeamComputerEntry-CPwSIMRw.js} +1 -1
  72. package/dist/client/assets/ToolsPage-Idimrn3o.js +2 -0
  73. package/dist/client/assets/{TopologyGraph-DsPEpDjt.js → TopologyGraph-I4_mkMHM.js} +14 -14
  74. package/dist/client/assets/{TourHost-D1z2mH5S.js → TourHost-BPaSwh9I.js} +1 -1
  75. package/dist/client/assets/{UnlinkDialog-q-6B4Ftt.js → UnlinkDialog-BUWZUu5P.js} +1 -1
  76. package/dist/client/assets/{WidgetErrorCard-BYMiUiAf.js → WidgetErrorCard-cS8yMCxU.js} +3 -3
  77. package/dist/client/assets/_shell-ClVN2pUj.js +80 -0
  78. package/dist/client/assets/{_shell._home-D-8JcUYq.js → _shell._home-DCA5k-jb.js} +1 -1
  79. package/dist/client/assets/{_shell._home.activity-xJKxWbtL.js → _shell._home.activity-BX4nFLna.js} +1 -1
  80. package/dist/client/assets/{_shell._home.index-C74gh1aE.js → _shell._home.index-C8t8cw72.js} +1 -1
  81. package/dist/client/assets/{_shell._home.tasks-Bh8jwRYJ.js → _shell._home.tasks-BgUeEvhK.js} +1 -1
  82. package/dist/client/assets/{_shell._home.workspaces-BKkUl6wW.js → _shell._home.workspaces-BPBdnkRt.js} +1 -1
  83. package/dist/client/assets/_shell.channels-CX4kki7G.js +10 -0
  84. package/dist/client/assets/_shell.connections-0vP7g7E4.js +1 -0
  85. package/dist/client/assets/{_shell.feedback-requests-Cdbl3oKj.js → _shell.feedback-requests-TsuaO4eR.js} +2 -2
  86. package/dist/client/assets/_shell.marketplace-CiL6YRbl.js +1 -0
  87. package/dist/client/assets/_shell.marketplace_.sources-C0sI8e21.js +1 -0
  88. package/dist/client/assets/_shell.session-_hhBvFc6.js +63 -0
  89. package/dist/client/assets/{_shell.team-Consxq97.js → _shell.team-Bm6cOBhR.js} +4 -4
  90. package/dist/client/assets/_shell.x._extensionId-BWy5v1YE.js +1 -0
  91. package/dist/client/assets/_shell.x._extensionId_._-BWy5v1YE.js +1 -0
  92. package/dist/client/assets/{abnfDiagram-WEYOIA3C-DXTlLd8s.js → abnfDiagram-WEYOIA3C-CrvoN15x.js} +1 -1
  93. package/dist/client/assets/{access-copy-B1SlOYEi.js → access-copy-B3yNZ7Gz.js} +1 -1
  94. package/dist/client/assets/{arc-B3IW5TXq.js → arc-CuT6QA_y.js} +1 -1
  95. package/dist/client/assets/{architectureDiagram-ZHVYKT53-Bx-4szWe.js → architectureDiagram-ZHVYKT53-CPXCZ9H4.js} +1 -1
  96. package/dist/client/assets/{banner-RKoWGrEp.js → banner-DRumuw3F.js} +1 -1
  97. package/dist/client/assets/{blockDiagram-RJAE7QA3-D_B3EDQ1.js → blockDiagram-RJAE7QA3-CM0rka9p.js} +1 -1
  98. package/dist/client/assets/{c4Diagram-XDPPPE54-CSBl4ROD.js → c4Diagram-XDPPPE54-D4j2cXRy.js} +1 -1
  99. package/dist/client/assets/{card-DTMhLU7B.js → card-B3CtfC3R.js} +1 -1
  100. package/dist/client/assets/channel-DjBlTcCV.js +1 -0
  101. package/dist/client/assets/{chunk-2E7WHVMD-QSgLcVHQ.js → chunk-2E7WHVMD-KGyqhVpO.js} +1 -1
  102. package/dist/client/assets/{chunk-2Q5K7J3B-CAEYyBSj.js → chunk-2Q5K7J3B-Dl0BHoqK.js} +1 -1
  103. package/dist/client/assets/{chunk-4EMNKR2T-CQ_90aiz.js → chunk-4EMNKR2T-Da7vH6Kv.js} +1 -1
  104. package/dist/client/assets/{chunk-55XCU76K-jsUyUA3N.js → chunk-55XCU76K-DgBUEROO.js} +1 -1
  105. package/dist/client/assets/{chunk-5VM5RSS4-JHkf15PA.js → chunk-5VM5RSS4-BQ4mn-_I.js} +1 -1
  106. package/dist/client/assets/{chunk-JWPE2WC7-BT-3krv8.js → chunk-JWPE2WC7-8LPR3mXf.js} +1 -1
  107. package/dist/client/assets/{chunk-VQ5W62QI-CJP11I5o.js → chunk-VQ5W62QI-BkIVXi4W.js} +1 -1
  108. package/dist/client/assets/{chunk-XXDRQBXY-BpqBecnj.js → chunk-XXDRQBXY-DQXJx06h.js} +1 -1
  109. package/dist/client/assets/{chunk-ZCHMQSOR-BLb4KcT4.js → chunk-ZCHMQSOR-DzCE7qlD.js} +2 -2
  110. package/dist/client/assets/{classDiagram-v2-4MYWR3UA-DwLyYGkw.js → classDiagram-v2-4MYWR3UA-C_cZra7c.js} +1 -1
  111. package/dist/client/assets/{command-DDSiiJlP.js → command-CDKbyppr.js} +1 -1
  112. package/dist/client/assets/{cose-bilkent-JH36ORCC-CxYTET88.js → cose-bilkent-JH36ORCC-DlXHdGwT.js} +1 -1
  113. package/dist/client/assets/{cpu--56q_Ey0.js → cpu-B7xLO7jn.js} +1 -1
  114. package/dist/client/assets/{cynefin-EF2NZ3EQ-9fHLZRHz.js → cynefin-EF2NZ3EQ-HhP4ArLc.js} +1 -1
  115. package/dist/client/assets/{cynefinDiagram-WF24UDRP-DpfQecff.js → cynefinDiagram-WF24UDRP-D4GgWnZV.js} +1 -1
  116. package/dist/client/assets/{dagre-NK4GIZVX-DuV6buEQ.js → dagre-NK4GIZVX-SZ_OI2Zi.js} +1 -1
  117. package/dist/client/assets/{diagram-CBK3MWTC-B-A9Sx5n.js → diagram-CBK3MWTC-BN-_Ja5m.js} +1 -1
  118. package/dist/client/assets/{diagram-I5XIIV2D-Ds5Hq9aV.js → diagram-I5XIIV2D-t7AK6xnL.js} +1 -1
  119. package/dist/client/assets/{diagram-ODIL2UCW-UUfSjM-R.js → diagram-ODIL2UCW-C1V7szSc.js} +1 -1
  120. package/dist/client/assets/{diagram-PFBEJUXE-CUzSSYf9.js → diagram-PFBEJUXE-DPtraQ2g.js} +1 -1
  121. package/dist/client/assets/{diagram-RJA3I4VV-Cgp6U3q1.js → diagram-RJA3I4VV-D2XNRB2b.js} +1 -1
  122. package/dist/client/assets/{diagram-TYUNFSNR-BxVgzMNE.js → diagram-TYUNFSNR-BieaRy38.js} +1 -1
  123. package/dist/client/assets/{ebnfDiagram-V4P3TTPT-BgDiHzoi.js → ebnfDiagram-V4P3TTPT-Bwki86UY.js} +1 -1
  124. package/dist/client/assets/{elk-QONTBCTQ-BCCN6mFs.js → elk-QONTBCTQ-WEXSAyHB.js} +1 -1
  125. package/dist/client/assets/{empty-state-BsA3jcrO.js → empty-state-J-UJ0BUU.js} +1 -1
  126. package/dist/client/assets/{erDiagram-KYQIGQAA-5RkmUbLz.js → erDiagram-KYQIGQAA-DIKASnoc.js} +1 -1
  127. package/dist/client/assets/{execution-config-CRkSeCj7.js → execution-config-ILQiJAmy.js} +1 -1
  128. package/dist/client/assets/{file-Bg_qGvWR.js → file-D40js1Zx.js} +1 -1
  129. package/dist/client/assets/{file-exclamation-point-BWsLZQVN.js → file-exclamation-point-Dg3ZpiAe.js} +1 -1
  130. package/dist/client/assets/{file-text-DQThCdY3.js → file-text-DgdvRfMk.js} +1 -1
  131. package/dist/client/assets/{find-latest-widget-fence-DFpYPIlS.js → find-latest-widget-fence-D4kBWC_1.js} +1 -1
  132. package/dist/client/assets/{flowDiagram-IUGLLWBU-C2FFT_4u.js → flowDiagram-IUGLLWBU-CoavNw0M.js} +1 -1
  133. package/dist/client/assets/{form-DjMe15QR.js → form-DlPwEgQH.js} +1 -1
  134. package/dist/client/assets/{format-cron-Bo3D4N9C.js → format-cron-BrK8RzgT.js} +1 -1
  135. package/dist/client/assets/{ganttDiagram-R7GPNTJY-BHG-HNDj.js → ganttDiagram-R7GPNTJY-DccKAz7f.js} +1 -1
  136. package/dist/client/assets/{git-branch-CJ1NlVLY.js → git-branch-BpxhecMq.js} +1 -1
  137. package/dist/client/assets/{gitGraphDiagram-PDYL7XHY-D4bvs6_J.js → gitGraphDiagram-PDYL7XHY-DEbo_dgQ.js} +1 -1
  138. package/dist/client/assets/{graph-D8MBmHRU.js → graph-DROgI3M3.js} +1 -1
  139. package/dist/client/assets/{heart-Beze5rli.js → heart-c7u4Ezxt.js} +1 -1
  140. package/dist/client/assets/{highlighted-body-KPVGNVTW-B-za1R0D.js → highlighted-body-KPVGNVTW-CrATNdTR.js} +1 -1
  141. package/dist/client/assets/image-lightbox-DE_fHkw-.js +1 -0
  142. package/dist/client/assets/{image-off-dQCXn9D_.js → image-off-BExgZjfM.js} +2 -2
  143. package/dist/client/assets/{index-Dbt6ttQb.js → index-2wezsLA_.js} +1 -1
  144. package/dist/client/assets/index-7jby-RRg.js +1 -0
  145. package/dist/client/assets/{index-CocSe_I3.js → index-AzyLwYS_.js} +3 -3
  146. package/dist/client/assets/{index-dnaC3n0i.js → index-B3eeEDWj.js} +4 -4
  147. package/dist/client/assets/{index-C38pc-JE.js → index-BEkYBuOq.js} +1 -1
  148. package/dist/client/assets/index-BGqvci3k.js +1 -0
  149. package/dist/client/assets/{index-BJv8b9cZ.js → index-BVqSmajJ.js} +1 -1
  150. package/dist/client/assets/{index-Bk6YahnN.js → index-Be0OJLWK.js} +1 -1
  151. package/dist/client/assets/{index-BTfwunle.js → index-BizvylBV.js} +1 -1
  152. package/dist/client/assets/{index-CPxcbKL6.js → index-BkoMsjtM.js} +2 -2
  153. package/dist/client/assets/{index-CxWJDJW7.js → index-BlyoyIck.js} +1 -1
  154. package/dist/client/assets/{index-hKY0860x.js → index-BqIHtiaE.js} +1 -1
  155. package/dist/client/assets/{index-DfSOcv9s.js → index-C5or4L_3.js} +1 -1
  156. package/dist/client/assets/{index-CDm1XkU1.js → index-C7B3eSOP.js} +1 -1
  157. package/dist/client/assets/{index-vNaWkS8Y.js → index-CD8aw6Jb.js} +1 -1
  158. package/dist/client/assets/{index-D4mYlxG0.js → index-CT_pFeX_.js} +1 -1
  159. package/dist/client/assets/{index-BPa0ZczY.js → index-CYy1cjtq.js} +1 -1
  160. package/dist/client/assets/{index-DFN-GU8r.js → index-CZmqtJWZ.js} +1 -1
  161. package/dist/client/assets/{index-BMhblg3s.js → index-CbHCZsbE.js} +1 -1
  162. package/dist/client/assets/{index-Ds-LCBb6.js → index-Ccf1XBTs.js} +1 -1
  163. package/dist/client/assets/index-Cga0qx1T.js +1033 -0
  164. package/dist/client/assets/{index-CU-gekzq.js → index-CqPRAM_6.js} +1 -1
  165. package/dist/client/assets/index-Ct4At33X.js +1 -0
  166. package/dist/client/assets/{index-CMlVfxJv.js → index-D0eJtRlK.js} +1 -1
  167. package/dist/client/assets/{index-D_KBdkA4.js → index-D150FXCC.js} +22 -20
  168. package/dist/client/assets/{index-BqwfU5a7.js → index-D3YeRrne.js} +1 -1
  169. package/dist/client/assets/index-DCJQGDZk.js +1 -0
  170. package/dist/client/assets/{index-C9qjJR0B.js → index-DDgOoXP1.js} +1 -1
  171. package/dist/client/assets/{index-DpX_xwGs.js → index-DINk1YfD.js} +1 -1
  172. package/dist/client/assets/{index-CAGOE4EU.js → index-DITPwUa9.js} +3 -3
  173. package/dist/client/assets/{index-DnfhvN3q.js → index-DNGNMW3c.js} +1 -1
  174. package/dist/client/assets/{index-DNlhbCX_.js → index-DT7pv2iW.js} +1 -1
  175. package/dist/client/assets/{index-CrflCTqO.css → index-DUZrTFYD.css} +1 -1
  176. package/dist/client/assets/{index-B3VKw60l.js → index-DaZ1I8s-.js} +1 -1
  177. package/dist/client/assets/{index-yDf4EVDy.js → index-DeRDq7bD.js} +1 -1
  178. package/dist/client/assets/{index-BTVsyrd0.js → index-DhHobJd3.js} +1 -1
  179. package/dist/client/assets/{index-CodC2rG4.js → index-DksjixUS.js} +1 -1
  180. package/dist/client/assets/{index-CGVRWEpN.js → index-DswGXheF.js} +1 -1
  181. package/dist/client/assets/{index-BaocSCDH.js → index-DxiRRZRo.js} +1 -1
  182. package/dist/client/assets/index-F-vqXYqa.js +1 -0
  183. package/dist/client/assets/{index-B3ybVnXe.js → index-InEBtYxw.js} +7 -7
  184. package/dist/client/assets/{index-DqD-Sg0W.js → index-J3Hh1MnL.js} +1 -1
  185. package/dist/client/assets/{index-BMktWriw.js → index-dyAahqKe.js} +1 -1
  186. package/dist/client/assets/{index-Ckv0K82u.js → index-mwf7ZNk2.js} +1 -1
  187. package/dist/client/assets/{index.esm-Ruqz-OsH.js → index.esm-BFJ9SG0n.js} +1 -1
  188. package/dist/client/assets/{infoDiagram-MVDRKAX5-CmDlX3lx.js → infoDiagram-MVDRKAX5-VL8q5pKx.js} +1 -1
  189. package/dist/client/assets/{inline-code-plzdKGm9.js → inline-code-BE9ckzPs.js} +1 -1
  190. package/dist/client/assets/{ishikawaDiagram-HPEHV2GE-DZFRAvrx.js → ishikawaDiagram-HPEHV2GE-BLKkPYF-.js} +1 -1
  191. package/dist/client/assets/{journeyDiagram-BOSHW7O7-B140KXYu.js → journeyDiagram-BOSHW7O7-CSYpRobu.js} +1 -1
  192. package/dist/client/assets/{kanban-definition-FNSA4HC5-QCZgRJic.js → kanban-definition-FNSA4HC5-HilAqtZo.js} +1 -1
  193. package/dist/client/assets/{layers-Br3LALac.js → layers-Cm7coqdo.js} +1 -1
  194. package/dist/client/assets/{lightbulb-CeJgUDoT.js → lightbulb-DqdWS75d.js} +1 -1
  195. package/dist/client/assets/{link-2-BXcZwTAC.js → link-2-CDJapTSa.js} +1 -1
  196. package/dist/client/assets/{list-runtime-types-CqKIrt9D.js → list-runtime-types-CP82p1u4.js} +1 -1
  197. package/dist/client/assets/{markdown-content-BKbjOTI2.js → markdown-content-m_qereFc.js} +1 -1
  198. package/dist/client/assets/{mention-pill-B-FgNE6o.js → mention-pill-DV5HIG5Q.js} +1 -1
  199. package/dist/client/assets/{mermaid.core-Br9hJ7FR.js → mermaid.core-zxW6MBr-.js} +4 -4
  200. package/dist/client/assets/{message-square-off-Co0W--np.js → message-square-off-YVtpbaJ0.js} +1 -1
  201. package/dist/client/assets/{mindmap-definition-6OY57UG3-BxjSZAec.js → mindmap-definition-6OY57UG3-IAYemvOg.js} +1 -1
  202. package/dist/client/assets/{more-details-BsdCkGTg.js → more-details-ReA2ZFBn.js} +1 -1
  203. package/dist/client/assets/{owner-notice-BxltHzJH.js → owner-notice-M4hn_1ep.js} +1 -1
  204. package/dist/client/assets/{package-DPgmy9lP.js → package-CUuTl39E.js} +1 -1
  205. package/dist/client/assets/{page-container-HokGbFg_.js → page-container-BnmNikNZ.js} +1 -1
  206. package/dist/client/assets/{paperclip-BDnApT-_.js → paperclip-C6fYq5Zf.js} +1 -1
  207. package/dist/client/assets/{path-input-C22n3ghr.js → path-input-DHn9-XaE.js} +1 -1
  208. package/dist/client/assets/{pegDiagram-ECIUJNBX-utA2pUiu.js → pegDiagram-ECIUJNBX-CojaUwe7.js} +1 -1
  209. package/dist/client/assets/{pieDiagram-GNMPY74T-DjEry_VP.js → pieDiagram-GNMPY74T-CjP3pw6V.js} +1 -1
  210. package/dist/client/assets/{plug-tLTAmXis.js → plug-DHQcxt7N.js} +1 -1
  211. package/dist/client/assets/primer-trigger-BmV5wjek.js +3 -0
  212. package/dist/client/assets/{profile-errors-Dvm4O6MR.js → profile-errors-BSCuj3rT.js} +1 -1
  213. package/dist/client/assets/{progress-BduTwXMX.js → progress-4FQQfnS6.js} +1 -1
  214. package/dist/client/assets/{quadrantDiagram-D57K4MC3-DO9NgnEq.js → quadrantDiagram-D57K4MC3-OP0Z8zcR.js} +1 -1
  215. package/dist/client/assets/{query-error-state-puwJHnzi.js → query-error-state-BkUdxenP.js} +1 -1
  216. package/dist/client/assets/{radio-DR4E05zZ.js → radio-ta5Bw763.js} +1 -1
  217. package/dist/client/assets/{railroadDiagram-Y72NRBL7-BTilAS9p.js → railroadDiagram-Y72NRBL7-CT3NCb9b.js} +1 -1
  218. package/dist/client/assets/registry-Dc102rws.js +1 -0
  219. package/dist/client/assets/{relay-trace-schemas-DwqIIDB9.js → relay-trace-schemas-DwUuyxao.js} +2 -2
  220. package/dist/client/assets/{requirementDiagram-EQYSW5RA-C6rzY7GK.js → requirementDiagram-EQYSW5RA-tde4lYGp.js} +1 -1
  221. package/dist/client/assets/{room-files-source-Duo4oiqX.js → room-files-source-CZWhaaOy.js} +2 -2
  222. package/dist/client/assets/{rotate-ccw-clock-RJuoRE3k.js → rotate-ccw-clock-RfbbgUa4.js} +1 -1
  223. package/dist/client/assets/{rotate-cw-C0EpbK5k.js → rotate-cw-B3rB_YSw.js} +1 -1
  224. package/dist/client/assets/{sankeyDiagram-SY24JHO5-BqpJRY1t.js → sankeyDiagram-SY24JHO5-sdCzIA7-.js} +1 -1
  225. package/dist/client/assets/{scroll-area-07T90PR6.js → scroll-area-B4WB7Q40.js} +1 -1
  226. package/dist/client/assets/{search-x-DQabogEL.js → search-x-DCUmWW2_.js} +1 -1
  227. package/dist/client/assets/{sequenceDiagram-BLEHNHQU-BHfzZpFt.js → sequenceDiagram-BLEHNHQU-DvzTJcKu.js} +1 -1
  228. package/dist/client/assets/{shield-x-Cuo1GTv4.js → shield-x-CANziVLc.js} +1 -1
  229. package/dist/client/assets/signed-in-DctJ2IWe.js +1 -0
  230. package/dist/client/assets/{sizeCapture-INFHLROL-U0MO-4ua.js → sizeCapture-INFHLROL-DuDA7TKE.js} +1 -1
  231. package/dist/client/assets/{soul-file-wKTqbR0Y.js → soul-file-Co_8f1qw.js} +1 -1
  232. package/dist/client/assets/{stateDiagram-v2-A6IESKWZ-fzo1sDsX.js → stateDiagram-v2-A6IESKWZ-BJPX5JTC.js} +1 -1
  233. package/dist/client/assets/{swimlanes-B3ENRKFQ-B7QcCUBU.js → swimlanes-B3ENRKFQ-CiLSffGv.js} +1 -1
  234. package/dist/client/assets/swimlanesDiagram-AYQRV4AK-Dv1-QS9J.js +8 -0
  235. package/dist/client/assets/{table-BjHA85BX.js → table-BSAvOYPp.js} +1 -1
  236. package/dist/client/assets/{terminal-qfxxVZaa.js → terminal-6CdY-T1V.js} +1 -1
  237. package/dist/client/assets/{timeline-definition-JXYKGLGB-okVlmef4.js → timeline-definition-JXYKGLGB-5oq8sl82.js} +1 -1
  238. package/dist/client/assets/{trust-posture-BmW0KVP6.js → trust-posture-D-Yjm6ot.js} +1 -1
  239. package/dist/client/assets/{unplug-BYKBdSMl.js → unplug-Bq_1WdV7.js} +1 -1
  240. package/dist/client/assets/{unverified-catalog-notice-CQHA4Cst.js → unverified-catalog-notice-CEzu54YH.js} +1 -1
  241. package/dist/client/assets/{use-adapter-catalog-rB4qQQ5D.js → use-adapter-catalog-Tn3ZbPAj.js} +1 -1
  242. package/dist/client/assets/{use-bindings-DiFC7kWg.js → use-bindings-Bz9YRgO7.js} +1 -1
  243. package/dist/client/assets/{use-composer-prefs-DHY5vJ0l.js → use-composer-prefs-D9oKJSQN.js} +1 -1
  244. package/dist/client/assets/{use-connector-management-CoinXIID.js → use-connector-management-CLYFraXN.js} +1 -1
  245. package/dist/client/assets/{use-deep-link-scroll-Cm8BRFAE.js → use-deep-link-scroll-DkS713kG.js} +1 -1
  246. package/dist/client/assets/{use-delete-binding-FtM6qPfF.js → use-delete-binding-CukKpHBK.js} +1 -1
  247. package/dist/client/assets/{use-dev-links-TQFCV3vk.js → use-dev-links-DQ32IcGe.js} +1 -1
  248. package/dist/client/assets/{use-external-adapter-catalog-Lx8LZDAa.js → use-external-adapter-catalog-D-FO_XW6.js} +1 -1
  249. package/dist/client/assets/{use-full-activity-feed-CmcBAvUM.js → use-full-activity-feed-BNxcyb1j.js} +1 -1
  250. package/dist/client/assets/use-is-below-desktop-gTvJDvw4.js +1 -0
  251. package/dist/client/assets/use-is-hub-B1vPpkYU.js +1 -0
  252. package/dist/client/assets/{use-jump-back-in-V8G_6fYj.js → use-jump-back-in-Bibj5tVk.js} +3 -3
  253. package/dist/client/assets/{use-local-browser-CbS4typW.js → use-local-browser-xg7WXAVK.js} +1 -1
  254. package/dist/client/assets/{use-mesh-topology-DZ1qMT3J.js → use-mesh-topology-BgCSFw8s.js} +1 -1
  255. package/dist/client/assets/{use-mounted-ref-DUbNzP-m.js → use-mounted-ref-qRbdZfOU.js} +1 -1
  256. package/dist/client/assets/{use-notification-prefs-BAsICJ96.js → use-notification-prefs-B-4kZR7I.js} +1 -1
  257. package/dist/client/assets/{use-panel-tab-placements-ymrpuL_s.js → use-panel-tab-placements-CCq-mZlY.js} +1 -1
  258. package/dist/client/assets/use-pending-read-C8L_v4Zw.js +1 -0
  259. package/dist/client/assets/{use-personality-commit-rJOmDgC2.js → use-personality-commit-DwSisUfF.js} +1 -1
  260. package/dist/client/assets/{use-promo-activation-BKeBloMI.js → use-promo-activation-Botoso6l.js} +3 -3
  261. package/dist/client/assets/{use-promo-dismissals-Cio8QMjL.js → use-promo-dismissals-RJXp-r_J.js} +1 -1
  262. package/dist/client/assets/{use-pulse-freshness-DZkMVbSM.js → use-pulse-freshness-B3390hGg.js} +1 -1
  263. package/dist/client/assets/{use-relay-config-CbZQKFhZ.js → use-relay-config-BV0xcLwS.js} +1 -1
  264. package/dist/client/assets/{use-room-follow-claim-DbJIsuWz.js → use-room-follow-claim-Du4hKHIJ.js} +1 -1
  265. package/dist/client/assets/{use-roving-tab-list-B4nZ7trj.js → use-roving-tab-list-g2hO6Ruz.js} +1 -1
  266. package/dist/client/assets/{use-session-canvas-sAwc2L1A.js → use-session-canvas-i30oMO_Q.js} +3 -3
  267. package/dist/client/assets/{use-session-diagnostics-0gcI762B.js → use-session-diagnostics-a4b83F5J.js} +2 -2
  268. package/dist/client/assets/{use-unclaimed-chats-BWIqOrvs.js → use-unclaimed-chats-B92om889.js} +1 -1
  269. package/dist/client/assets/use-update-config-Tbn3SodN.js +1 -0
  270. package/dist/client/assets/{useMutationState-C9Q5lRej.js → useMutationState-DdOGdpjP.js} +1 -1
  271. package/dist/client/assets/{usecaseDiagram-WPOLBNNX-CMjVaeX9.js → usecaseDiagram-WPOLBNNX-Di5pJvcw.js} +1 -1
  272. package/dist/client/assets/{vennDiagram-Q3Y3IDCW-BajZBf0H.js → vennDiagram-Q3Y3IDCW-K7KAf26T.js} +1 -1
  273. package/dist/client/assets/{wardleyDiagram-IVAIDKWA-BN4xF6JT.js → wardleyDiagram-IVAIDKWA-DVTaxQt9.js} +1 -1
  274. package/dist/client/assets/{xychartDiagram-4URNHDU4-Cy0Z9a28.js → xychartDiagram-4URNHDU4-x-lSJm_B.js} +1 -1
  275. package/dist/client/index.html +2 -2
  276. package/dist/drizzle/20261018123612_session_route.sql +1 -0
  277. package/dist/drizzle/20261018210140_remote_command_agent_computer_kind.sql +21 -0
  278. package/dist/drizzle/20261019142317_turn_marks.sql +3 -0
  279. package/dist/drizzle/meta/20261018123612_snapshot.json +14027 -0
  280. package/dist/drizzle/meta/20261018210140_snapshot.json +14027 -0
  281. package/dist/drizzle/meta/20261019142317_snapshot.json +14048 -0
  282. package/dist/drizzle/meta/_journal.json +21 -0
  283. package/dist/server/index.js +25295 -21133
  284. package/dist/server/index.js.map +2 -2
  285. package/package.json +5 -5
  286. package/dist/client/assets/HandlePage-BoBFGnUB.js +0 -1
  287. package/dist/client/assets/McpSigninBody-ZmmY1BZ4.js +0 -1
  288. package/dist/client/assets/NamePage-bC_9FOtD.js +0 -1
  289. package/dist/client/assets/OperatorIdentityForm-BdAqzVEG.js +0 -1
  290. package/dist/client/assets/PermissionHistory-IOgLQ7qN.js +0 -1
  291. package/dist/client/assets/PhotoPage-BOe3xwyN.js +0 -1
  292. package/dist/client/assets/PresetPicker-BcKF2ds8.js +0 -19
  293. package/dist/client/assets/SettingsDialog-BT5rYJUm.js +0 -12
  294. package/dist/client/assets/TaskDialogWrapper-DWpxyxBb.js +0 -1
  295. package/dist/client/assets/ToolsPage-CyNXCe2l.js +0 -2
  296. package/dist/client/assets/_shell-scIpUrVY.js +0 -80
  297. package/dist/client/assets/_shell.channels-B2A1G9n8.js +0 -10
  298. package/dist/client/assets/_shell.connections-eDlPXmuG.js +0 -1
  299. package/dist/client/assets/_shell.marketplace-FHQpZxgB.js +0 -1
  300. package/dist/client/assets/_shell.marketplace_.sources-DXv90Z-v.js +0 -1
  301. package/dist/client/assets/_shell.session-BNeYm91q.js +0 -63
  302. package/dist/client/assets/_shell.x._extensionId-DirEl_qN.js +0 -1
  303. package/dist/client/assets/_shell.x._extensionId_._-DirEl_qN.js +0 -1
  304. package/dist/client/assets/channel-BlEJg4XA.js +0 -1
  305. package/dist/client/assets/image-lightbox-a4gqhNXS.js +0 -1
  306. package/dist/client/assets/index--vwACals.js +0 -1
  307. package/dist/client/assets/index-BydIKjk5.js +0 -1
  308. package/dist/client/assets/index-D18FqQKB.js +0 -1
  309. package/dist/client/assets/index-DBdO-_iL.js +0 -1023
  310. package/dist/client/assets/index-DLdpa3d4.js +0 -1
  311. package/dist/client/assets/index-vieeLeZH.js +0 -1
  312. package/dist/client/assets/primer-trigger-CfVHNFbe.js +0 -3
  313. package/dist/client/assets/registry-B3Ss4ItQ.js +0 -1
  314. package/dist/client/assets/shield-check-DbbCy17l.js +0 -6
  315. package/dist/client/assets/signed-in-CFtA8gTK.js +0 -1
  316. package/dist/client/assets/swimlanesDiagram-AYQRV4AK-CgZZnzbW.js +0 -8
  317. package/dist/client/assets/use-is-below-desktop-BB9kHnYm.js +0 -1
  318. package/dist/client/assets/use-is-hub-ab4UGRdN.js +0 -1
  319. package/dist/client/assets/use-pending-read-BkCvAuX4.js +0 -1
  320. package/dist/client/assets/use-update-config-DTL7WyZV.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,
@@ -26760,7 +26773,7 @@ import path2 from "path";
26760
26773
  import { fileURLToPath } from "url";
26761
26774
  function resolveVersion() {
26762
26775
  if (env2.DORKOS_VERSION_OVERRIDE) return env2.DORKOS_VERSION_OVERRIDE;
26763
- if (true) return "0.122.0";
26776
+ if (true) return "0.124.0";
26764
26777
  const pkgPath = path2.join(path2.dirname(fileURLToPath(import.meta.url)), "../../package.json");
26765
26778
  return JSON.parse(readFileSync(pkgPath, "utf-8")).version;
26766
26779
  }
@@ -29464,11 +29477,11 @@ var require_util = __commonJS({
29464
29477
  return false;
29465
29478
  }
29466
29479
  exports.schemaHasRules = schemaHasRules;
29467
- function schemaHasRulesButRef(schema3, RULES) {
29480
+ function schemaHasRulesButRef(schema3, RULES2) {
29468
29481
  if (typeof schema3 == "boolean")
29469
29482
  return !schema3;
29470
29483
  for (const key in schema3)
29471
- if (key !== "$ref" && RULES.all[key])
29484
+ if (key !== "$ref" && RULES2.all[key])
29472
29485
  return true;
29473
29486
  return false;
29474
29487
  }
@@ -30862,17 +30875,17 @@ var require_validate = __commonJS({
30862
30875
  }
30863
30876
  function schemaKeywords(it, types2, typeErrors, errsCount) {
30864
30877
  const { gen, schema: schema3, data, allErrors, opts, self: self2 } = it;
30865
- const { RULES } = self2;
30866
- if (schema3.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema3, RULES))) {
30867
- gen.block(() => keywordCode(it, "$ref", RULES.all.$ref.definition));
30878
+ const { RULES: RULES2 } = self2;
30879
+ if (schema3.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema3, RULES2))) {
30880
+ gen.block(() => keywordCode(it, "$ref", RULES2.all.$ref.definition));
30868
30881
  return;
30869
30882
  }
30870
30883
  if (!opts.jtd)
30871
30884
  checkStrictTypes(it, types2);
30872
30885
  gen.block(() => {
30873
- for (const group of RULES.rules)
30886
+ for (const group of RULES2.rules)
30874
30887
  groupKeywords(group);
30875
- groupKeywords(RULES.post);
30888
+ groupKeywords(RULES2.post);
30876
30889
  });
30877
30890
  function groupKeywords(group) {
30878
30891
  if (!(0, applicability_1.shouldUseGroup)(schema3, group))
@@ -32971,10 +32984,10 @@ var require_core = __commonJS({
32971
32984
  }
32972
32985
  // Remove keyword
32973
32986
  removeKeyword(keyword) {
32974
- const { RULES } = this;
32975
- delete RULES.keywords[keyword];
32976
- delete RULES.all[keyword];
32977
- for (const group of RULES.rules) {
32987
+ const { RULES: RULES2 } = this;
32988
+ delete RULES2.keywords[keyword];
32989
+ delete RULES2.all[keyword];
32990
+ for (const group of RULES2.rules) {
32978
32991
  const i2 = group.rules.findIndex((rule) => rule.keyword === keyword);
32979
32992
  if (i2 >= 0)
32980
32993
  group.rules.splice(i2, 1);
@@ -33142,9 +33155,9 @@ var require_core = __commonJS({
33142
33155
  }
33143
33156
  var KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i;
33144
33157
  function checkKeyword(keyword, def) {
33145
- const { RULES } = this;
33158
+ const { RULES: RULES2 } = this;
33146
33159
  (0, util_1.eachItem)(keyword, (kwd) => {
33147
- if (RULES.keywords[kwd])
33160
+ if (RULES2.keywords[kwd])
33148
33161
  throw new Error(`Keyword ${kwd} is already defined`);
33149
33162
  if (!KEYWORD_NAME.test(kwd))
33150
33163
  throw new Error(`Keyword ${kwd} has invalid name`);
@@ -33160,13 +33173,13 @@ var require_core = __commonJS({
33160
33173
  const post = definition === null || definition === void 0 ? void 0 : definition.post;
33161
33174
  if (dataType && post)
33162
33175
  throw new Error('keyword with "post" flag cannot have "type"');
33163
- const { RULES } = this;
33164
- let ruleGroup = post ? RULES.post : RULES.rules.find(({ type: t2 }) => t2 === dataType);
33176
+ const { RULES: RULES2 } = this;
33177
+ let ruleGroup = post ? RULES2.post : RULES2.rules.find(({ type: t2 }) => t2 === dataType);
33165
33178
  if (!ruleGroup) {
33166
33179
  ruleGroup = { type: dataType, rules: [] };
33167
- RULES.rules.push(ruleGroup);
33180
+ RULES2.rules.push(ruleGroup);
33168
33181
  }
33169
- RULES.keywords[keyword] = true;
33182
+ RULES2.keywords[keyword] = true;
33170
33183
  if (!definition)
33171
33184
  return;
33172
33185
  const rule = {
@@ -33181,7 +33194,7 @@ var require_core = __commonJS({
33181
33194
  addBeforeRule.call(this, ruleGroup, rule, definition.before);
33182
33195
  else
33183
33196
  ruleGroup.rules.push(rule);
33184
- RULES.all[keyword] = rule;
33197
+ RULES2.all[keyword] = rule;
33185
33198
  (_a7 = definition.implements) === null || _a7 === void 0 ? void 0 : _a7.forEach((kwd) => this.addKeyword(kwd));
33186
33199
  }
33187
33200
  function addBeforeRule(ruleGroup, rule, before) {
@@ -40752,6 +40765,12 @@ function seedLanAccess(store) {
40752
40765
  if ("lanAccess" in server2) return;
40753
40766
  store.set("server", { ...server2, lanAccess: false });
40754
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
+ }
40755
40774
  function raiseEngagedWindowDefaults(store) {
40756
40775
  if (store.get("rooms") === void 0) return;
40757
40776
  const minutes = store.get("rooms.engagedWindowMinutes");
@@ -41450,7 +41469,14 @@ var init_config_migrations = __esm({
41450
41469
  enabled: sessionRelay.enabled === true
41451
41470
  });
41452
41471
  }
41453
- }
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
41454
41480
  };
41455
41481
  }
41456
41482
  });
@@ -41549,6 +41575,7 @@ __export(config_manager_exports, {
41549
41575
  seedIdentityPromptDismissedDefault: () => seedIdentityPromptDismissedDefault,
41550
41576
  seedLanAccess: () => seedLanAccess,
41551
41577
  seedMaxConcurrentTurnsPerAgent: () => seedMaxConcurrentTurnsPerAgent,
41578
+ seedMaxWarmProcesses: () => seedMaxWarmProcesses,
41552
41579
  seedMemoryProviderDefault: () => seedMemoryProviderDefault,
41553
41580
  seedPermissionPresetFromDoor: () => seedPermissionPresetFromDoor,
41554
41581
  seedRoomCanvasOps: () => seedRoomCanvasOps,
@@ -49413,6 +49440,7 @@ function parseSkillFile(filePath, content, schema3, options) {
49413
49440
  }
49414
49441
  var init_parser = __esm({
49415
49442
  "../skills/src/parser.ts"() {
49443
+ "use strict";
49416
49444
  init_constants7();
49417
49445
  init_frontmatter();
49418
49446
  }
@@ -49434,6 +49462,98 @@ var init_canvas_doc_incarnation = __esm({
49434
49462
  }
49435
49463
  });
49436
49464
 
49465
+ // ../shared/src/bounded-json.ts
49466
+ function containerEntries(value) {
49467
+ const prototype = Object.getPrototypeOf(value);
49468
+ if (Array.isArray(value)) {
49469
+ if (prototype !== Array.prototype) return void 0;
49470
+ } else if (prototype !== Object.prototype && prototype !== null) return void 0;
49471
+ const descriptors = Object.getOwnPropertyDescriptors(value);
49472
+ if (Object.getOwnPropertySymbols(value).length) return void 0;
49473
+ const keys = Array.isArray(value) ? Array.from({ length: value.length }, (_3, index2) => String(index2)) : Object.keys(descriptors);
49474
+ if (Array.isArray(value) && Object.keys(descriptors).length !== value.length + 1)
49475
+ return void 0;
49476
+ const entries = [];
49477
+ for (const key of keys) {
49478
+ const descriptor = descriptors[key];
49479
+ if (UNSAFE_JSON_KEYS.has(key) || !descriptor || !("value" in descriptor) || !descriptor.enumerable)
49480
+ return void 0;
49481
+ entries.push([key, descriptor.value]);
49482
+ }
49483
+ return entries;
49484
+ }
49485
+ function inspectBoundedJson(value, bounds) {
49486
+ const { maxBytes, maxDepth } = bounds;
49487
+ const pending2 = [{ value, depth: 0 }];
49488
+ const ancestors = /* @__PURE__ */ new Set();
49489
+ let bytes = 0;
49490
+ while (pending2.length) {
49491
+ const item = pending2.pop();
49492
+ const current3 = item.value;
49493
+ if (item.exit) {
49494
+ ancestors.delete(current3);
49495
+ continue;
49496
+ }
49497
+ if (current3 !== null && typeof current3 === "object") {
49498
+ if (item.depth > maxDepth) return "JSON exceeds the maximum depth";
49499
+ if (ancestors.has(current3)) return "JSON must not contain cycles";
49500
+ if (Array.isArray(current3) && current3.length > maxBytes) return "JSON exceeds the byte limit";
49501
+ const entries = containerEntries(current3);
49502
+ if (!entries) return "Expected plain JSON without unsafe keys or accessors";
49503
+ bytes += 2 + Math.max(0, entries.length - 1);
49504
+ ancestors.add(current3);
49505
+ pending2.push({ value: current3, depth: item.depth, exit: true });
49506
+ for (const [key, child] of entries) {
49507
+ if (!Array.isArray(current3)) bytes += encoder.encode(JSON.stringify(key)).length + 1;
49508
+ pending2.push({ value: child, depth: item.depth + 1 });
49509
+ }
49510
+ } else {
49511
+ if (typeof current3 === "number" && !Number.isFinite(current3))
49512
+ return "Expected finite JSON numbers";
49513
+ if (current3 !== null && !["string", "number", "boolean"].includes(typeof current3))
49514
+ return "Expected JSON data";
49515
+ bytes += encoder.encode(JSON.stringify(current3)).length;
49516
+ }
49517
+ if (bytes > maxBytes) return "JSON exceeds the byte limit";
49518
+ }
49519
+ return void 0;
49520
+ }
49521
+ function jsonValueUnion(self2) {
49522
+ return external_exports.union([
49523
+ external_exports.string(),
49524
+ external_exports.number().finite(),
49525
+ external_exports.boolean(),
49526
+ external_exports.null(),
49527
+ external_exports.array(self2),
49528
+ external_exports.object({}).catchall(self2)
49529
+ ]);
49530
+ }
49531
+ function withJsonBounds(schema3, bounds) {
49532
+ return external_exports.preprocess((value, context2) => {
49533
+ const problem = inspectBoundedJson(value, bounds);
49534
+ if (problem) {
49535
+ context2.addIssue({ code: "custom", message: problem });
49536
+ return external_exports.NEVER;
49537
+ }
49538
+ return value;
49539
+ }, schema3);
49540
+ }
49541
+ var UNSAFE_JSON_KEYS, encoder, JsonValueSchema, JsonObjectSchema;
49542
+ var init_bounded_json = __esm({
49543
+ "../shared/src/bounded-json.ts"() {
49544
+ "use strict";
49545
+ init_zod();
49546
+ UNSAFE_JSON_KEYS = /* @__PURE__ */ new Set([
49547
+ "__proto__",
49548
+ "prototype",
49549
+ "constructor"
49550
+ ]);
49551
+ encoder = new TextEncoder();
49552
+ JsonValueSchema = external_exports.lazy(() => jsonValueUnion(JsonValueSchema));
49553
+ JsonObjectSchema = external_exports.object({}).catchall(JsonValueSchema);
49554
+ }
49555
+ });
49556
+
49437
49557
  // ../../node_modules/.pnpm/@asteasolutions+zod-to-openapi@9.1.0_zod@4.6.5/node_modules/@asteasolutions/zod-to-openapi/dist/index.cjs
49438
49558
  var require_dist2 = __commonJS({
49439
49559
  "../../node_modules/.pnpm/@asteasolutions+zod-to-openapi@9.1.0_zod@4.6.5/node_modules/@asteasolutions/zod-to-openapi/dist/index.cjs"(exports) {
@@ -51058,92 +51178,22 @@ var init_zod_openapi = __esm({
51058
51178
  });
51059
51179
 
51060
51180
  // ../shared/src/canvas-channel-json.ts
51061
- function containerEntries(value) {
51062
- const prototype = Object.getPrototypeOf(value);
51063
- if (Array.isArray(value)) {
51064
- if (prototype !== Array.prototype) return void 0;
51065
- } else if (prototype !== Object.prototype && prototype !== null) return void 0;
51066
- const descriptors = Object.getOwnPropertyDescriptors(value);
51067
- if (Object.getOwnPropertySymbols(value).length) return void 0;
51068
- const keys = Array.isArray(value) ? Array.from({ length: value.length }, (_3, index2) => String(index2)) : Object.keys(descriptors);
51069
- if (Array.isArray(value) && Object.keys(descriptors).length !== value.length + 1)
51070
- return void 0;
51071
- const entries = [];
51072
- for (const key of keys) {
51073
- const descriptor = descriptors[key];
51074
- if (unsafeKeys.has(key) || !descriptor || !("value" in descriptor) || !descriptor.enumerable)
51075
- return void 0;
51076
- entries.push([key, descriptor.value]);
51077
- }
51078
- return entries;
51079
- }
51080
- function inspectCanvasChannelJson(value, maxBytes = CANVAS_CHANNEL_ENVELOPE_BYTES) {
51081
- const pending2 = [{ value, depth: 0 }];
51082
- const ancestors = /* @__PURE__ */ new Set();
51083
- let bytes = 0;
51084
- while (pending2.length) {
51085
- const item = pending2.pop();
51086
- const current3 = item.value;
51087
- if (item.exit) {
51088
- ancestors.delete(current3);
51089
- continue;
51090
- }
51091
- if (current3 !== null && typeof current3 === "object") {
51092
- if (item.depth > CANVAS_CHANNEL_JSON_DEPTH) return "JSON exceeds the maximum depth";
51093
- if (ancestors.has(current3)) return "JSON must not contain cycles";
51094
- if (Array.isArray(current3) && current3.length > maxBytes) return "JSON exceeds the byte limit";
51095
- const entries = containerEntries(current3);
51096
- if (!entries) return "Expected plain JSON without unsafe keys or accessors";
51097
- bytes += 2 + Math.max(0, entries.length - 1);
51098
- ancestors.add(current3);
51099
- pending2.push({ value: current3, depth: item.depth, exit: true });
51100
- for (const [key, child] of entries) {
51101
- if (!Array.isArray(current3)) bytes += encoder.encode(JSON.stringify(key)).length + 1;
51102
- pending2.push({ value: child, depth: item.depth + 1 });
51103
- }
51104
- } else {
51105
- if (typeof current3 === "number" && !Number.isFinite(current3))
51106
- return "Expected finite JSON numbers";
51107
- if (current3 !== null && !["string", "number", "boolean"].includes(typeof current3))
51108
- return "Expected JSON data";
51109
- bytes += encoder.encode(JSON.stringify(current3)).length;
51110
- }
51111
- if (bytes > maxBytes) return "JSON exceeds the byte limit";
51112
- }
51113
- return void 0;
51114
- }
51115
51181
  function boundedJson(schema3, maxBytes = CANVAS_CHANNEL_ENVELOPE_BYTES) {
51116
- return external_exports.preprocess((value, context2) => {
51117
- const problem = inspectCanvasChannelJson(value, maxBytes);
51118
- if (problem) {
51119
- context2.addIssue({ code: "custom", message: problem });
51120
- return external_exports.NEVER;
51121
- }
51122
- return value;
51123
- }, schema3);
51182
+ return withJsonBounds(schema3, { maxBytes, maxDepth: CANVAS_CHANNEL_JSON_DEPTH });
51124
51183
  }
51125
- var CANVAS_CHANNEL_ENVELOPE_BYTES, CANVAS_CHANNEL_JSON_DEPTH, CANVAS_CHANNEL_STATE_BYTES, unsafeKeys, encoder, RecursiveJsonSchema, CanvasChannelJsonValueSchema, CanvasChannelStateSchema;
51184
+ var CANVAS_CHANNEL_ENVELOPE_BYTES, CANVAS_CHANNEL_JSON_DEPTH, CANVAS_CHANNEL_STATE_BYTES, unsafeKeys, RecursiveJsonSchema, CanvasChannelJsonValueSchema, CanvasChannelStateSchema;
51126
51185
  var init_canvas_channel_json = __esm({
51127
51186
  "../shared/src/canvas-channel-json.ts"() {
51128
51187
  "use strict";
51129
51188
  init_zod();
51189
+ init_bounded_json();
51130
51190
  init_zod_openapi();
51131
51191
  extendZodWithOpenApiOnce();
51132
51192
  CANVAS_CHANNEL_ENVELOPE_BYTES = 16 * 1024;
51133
51193
  CANVAS_CHANNEL_JSON_DEPTH = 32;
51134
51194
  CANVAS_CHANNEL_STATE_BYTES = 256 * 1024;
51135
- unsafeKeys = /* @__PURE__ */ new Set(["__proto__", "prototype", "constructor"]);
51136
- encoder = new TextEncoder();
51137
- RecursiveJsonSchema = external_exports.lazy(
51138
- () => external_exports.union([
51139
- external_exports.string(),
51140
- external_exports.number().finite(),
51141
- external_exports.boolean(),
51142
- external_exports.null(),
51143
- external_exports.array(RecursiveJsonSchema),
51144
- external_exports.object({}).catchall(RecursiveJsonSchema)
51145
- ])
51146
- ).openapi("CanvasChannelJson");
51195
+ unsafeKeys = UNSAFE_JSON_KEYS;
51196
+ RecursiveJsonSchema = external_exports.lazy(() => jsonValueUnion(RecursiveJsonSchema)).openapi("CanvasChannelJson");
51147
51197
  CanvasChannelJsonValueSchema = boundedJson(RecursiveJsonSchema);
51148
51198
  CanvasChannelStateSchema = boundedJson(
51149
51199
  external_exports.object({}).catchall(RecursiveJsonSchema),
@@ -51979,14 +52029,17 @@ function resolveCeilingLevel(declared, ceiling) {
51979
52029
  }
51980
52030
  function stricterLevel(a2, b2) {
51981
52031
  const level = stricterPower(a2, b2);
51982
- return (a2.outsider || b2.outsider) && !level.outsider ? { ...level, outsider: true } : level;
51983
- }
51984
- function ceilingCarriesOutsider(ceiling) {
51985
- if (!Array.isArray(ceiling)) {
51986
- return ceiling === "runtime-default" || ceiling.outsider === true;
51987
- }
51988
- const bounds = ceiling;
51989
- return bounds.length === 0 || bounds.some(ceilingCarriesOutsider);
52032
+ const marked = (a2.outsider || b2.outsider) && !level.outsider ? { ...level, outsider: true } : level;
52033
+ const teammate = mergeTeammateOrigins(a2.teammate, b2.teammate);
52034
+ return teammate === void 0 || teammate === marked.teammate ? marked : { ...marked, teammate };
52035
+ }
52036
+ function mergeTeammateOrigins(a2, b2) {
52037
+ if (b2 === void 0) return a2;
52038
+ if (a2 === void 0) return b2;
52039
+ const key = (origin) => `${origin.roomId}\0${origin.authorId}`;
52040
+ const seen = new Set(a2.map(key));
52041
+ const added = b2.filter((origin) => !seen.has(key(origin)));
52042
+ return added.length === 0 ? a2 : [...a2, ...added];
51990
52043
  }
51991
52044
  function stricterPower(a2, b2) {
51992
52045
  const fits = (inner, outer) => isNoLooserThan(outer, inner) && (!inner.auto || outer.auto === true || outer.asks === "never");
@@ -52018,7 +52071,11 @@ var init_permission_semantics = __esm({
52018
52071
  });
52019
52072
 
52020
52073
  // ../shared/src/permissions/permission-schemas.ts
52021
- var PermissionStateSchema, PermissionAreaIdSchema, PermissionPresetSchema, PermissionActionIdSchema, PermissionOverridesSchema, PermissionStopSchema, AgentPermissionsSchema, PERMISSION_SOURCES, PermissionSourceSchema, PermissionLayerSchema, ResolvedPermissionSchema, PERMISSION_SURFACES, PermissionSurfaceSchema, PermissionAttributionSchema, PermissionChangeTargetSchema, PermissionChangeKeySchema, PermissionChangeSchema, PermissionChangedMetadataSchema, PERMISSION_ANSWERS, PermissionAnsweredMetadataSchema, PermissionSuggestionDismissedMetadataSchema, PermissionSuggestionRestoredMetadataSchema, ALWAYS_SUGGESTION_WINDOW_MS;
52074
+ function chatModeWord(modeId) {
52075
+ if (modeId === null) return "the default";
52076
+ return CHAT_MODE_WORD[modeId] ?? modeId;
52077
+ }
52078
+ var PermissionStateSchema, PermissionAreaIdSchema, PermissionPresetSchema, PermissionActionIdSchema, PermissionOverridesSchema, PermissionStopSchema, AgentPermissionsSchema, PERMISSION_SOURCES, PermissionSourceSchema, PermissionLayerSchema, ResolvedPermissionSchema, PERMISSION_SURFACES, PermissionSurfaceSchema, PermissionAttributionSchema, PermissionChangeTargetSchema, PermissionChangeKeySchema, PermissionChangeSchema, PermissionChangedMetadataSchema, PERMISSION_ANSWERS, PermissionAnsweredMetadataSchema, PermissionSuggestionDismissedMetadataSchema, PermissionSuggestionRestoredMetadataSchema, ALWAYS_SUGGESTION_WINDOW_MS, CHAT_MODE_WORD;
52022
52079
  var init_permission_schemas = __esm({
52023
52080
  "../shared/src/permissions/permission-schemas.ts"() {
52024
52081
  "use strict";
@@ -52095,7 +52152,13 @@ var init_permission_schemas = __esm({
52095
52152
  kind: external_exports.literal("files"),
52096
52153
  /** The runtime whose own stop changed; absent for the global one. */
52097
52154
  runtime: external_exports.string().optional()
52098
- })
52155
+ }),
52156
+ /**
52157
+ * One chat's Files & commands mode, as its runtime names it (`before` and
52158
+ * `after` are mode ids). Recorded under the chat's agent; only the one-time
52159
+ * raise of existing chats writes it (DOR-3107), and its Undo sets each chat back.
52160
+ */
52161
+ external_exports.object({ kind: external_exports.literal("chat"), sessionId: external_exports.string() })
52099
52162
  ]);
52100
52163
  PermissionChangeSchema = external_exports.object({
52101
52164
  target: PermissionChangeTargetSchema,
@@ -52165,6 +52228,14 @@ var init_permission_schemas = __esm({
52165
52228
  undoOf: external_exports.string()
52166
52229
  });
52167
52230
  ALWAYS_SUGGESTION_WINDOW_MS = 7 * 24 * 60 * 60 * 1e3;
52231
+ CHAT_MODE_WORD = {
52232
+ default: "Ask first",
52233
+ plan: "Plan",
52234
+ acceptEdits: "Act",
52235
+ auto: "Auto",
52236
+ dontAsk: "Never ask",
52237
+ bypassPermissions: "Full autonomy"
52238
+ };
52168
52239
  }
52169
52240
  });
52170
52241
 
@@ -52386,6 +52457,7 @@ function foldLegacyPermissionFields(raw) {
52386
52457
  var AgentRuntimeSchema, AgentHealthStatusSchema, ResponseModeSchema, AgentBehaviorSchema, McpServerAuthKindSchema, McpServerTransportSchema, ManagedMcpServerSchema, McpServerAuthStatusSchema, McpClientOriginSchema, ManagedMcpServerViewSchema, TraitsSchema, ConventionsSchema, AgentModelSchema, AgentEffortSchema, AgentWorkspaceBindingSchema, WORKSPACE_BINDING_OPENAPI, UNREADABLE_BINDING_FALLBACK, AgentManifestSchema2, LEGACY_GROUP_AREAS, AgentManifestFileSchema, AgentPathEntrySchema, AgentHintsSchema, DiscoveryCandidateSchema, DenialRecordSchema, AGENT_PAUSED_CODE, AGENT_PAUSE_REASON_MAX, AgentPauseSchema, AgentPauseListSchema, AgentPauseRequestSchema, AgentPauseResultSchema, TopologyAgentSchema, NamespaceInfoSchema, OPEN_MESH_NAMESPACE, CrossNamespaceRuleSchema, TopologyViewSchema, DiscoverRequestSchema, RegisterAgentRequestSchema, DenyRequestSchema, UpdateAgentRequestSchema, UpdateAgentConventionsSchema, WILDCARD_NAMESPACE_BOTH_SIDES_MESSAGE, UpdateAccessRuleRequestSchema, ResolveAgentsRequestSchema, ResolveAgentsResponseSchema, CreateAgentOptionsSchema, CreateAgentRequestSchema, AgentListQuerySchema, AgentHealthSchema, MeshStatusSchema, MeshInspectSchema, MeshLifecycleEventSchema, HeartbeatRequestSchema, ScanProgressSchema;
52387
52458
  var init_mesh_schemas = __esm({
52388
52459
  "../shared/src/mesh-schemas.ts"() {
52460
+ "use strict";
52389
52461
  init_zod();
52390
52462
  init_zod_openapi();
52391
52463
  init_validation();
@@ -53006,6 +53078,7 @@ var init_direct_notes_context = __esm({
53006
53078
  var GitStatusDataSchema, EnvDataSchema, RelayContextDataSchema, RoomContextOriginSchema, RoomContextAuthorSchema, RoomContextMemberSchema, RoomContextEntrySchema, RoomContextAcknowledgmentSchema, MainMovedSchema, WorktreeRefreshOutcomeSchema, RoomContextFilesSchema, RoomContextDataSchema, SeedContextDataSchema, StagedContextDataSchema, AccountsAccessDataSchema, ContextWarningDataSchema, ApprovalVerdictDataSchema, AdditionalContextEntrySchema, AdditionalContextSchema, ClientContextSchema;
53007
53079
  var init_additional_context = __esm({
53008
53080
  "../shared/src/additional-context.ts"() {
53081
+ "use strict";
53009
53082
  init_zod();
53010
53083
  init_canvas_channel_schemas();
53011
53084
  init_mesh_schemas();
@@ -53290,6 +53363,7 @@ var init_capabilities = __esm({
53290
53363
  var PROJECT_NAME_PATTERN, ProjectRefSchema, ProjectInfoSchema, ProjectListResponseSchema, ProjectResolveQuerySchema, ProjectResolveResponseSchema, AccountEligibilityRowSchema, AccountEligibilityQuerySchema, AccountEligibilityResponseSchema, ProjectAccountsRequestSchema, ProjectWithoutCreditsRequestSchema, OnlyProjectsRequestSchema, OnlyProjectsResponseSchema;
53291
53364
  var init_project_schemas = __esm({
53292
53365
  "../shared/src/project-schemas.ts"() {
53366
+ "use strict";
53293
53367
  init_zod();
53294
53368
  init_zod_openapi();
53295
53369
  extendZodWithOpenApiOnce();
@@ -53673,6 +53747,7 @@ var init_account_usage_codex = __esm({
53673
53747
  var LEDGER_RUNTIMES, LEDGER_SOURCES, RateLimitStatusSchema, ISO_TIME_PATTERN, IsoTimeSchema, LedgerSourceSchema, LedgerEntrySchema, WINDOW_KEY_PATTERN, LedgerPlanSchema, LedgerCreditsSchema, LedgerSpendSchema, UsageLedgerSchema, MINUTE_MS, HOUR_MS, FIVE_HOUR_MS, SEVEN_DAY_MS, MAX_FUTURE_SKEW_MS, AccountUsageSchema, LimitResolutionSchema, LimitHistoryEntrySchema, LimitHistoryResponseSchema, FoundClaudeFolderSchema, DismissFoundFolderRequestSchema;
53674
53748
  var init_account_usage = __esm({
53675
53749
  "../shared/src/account-usage.ts"() {
53750
+ "use strict";
53676
53751
  init_zod();
53677
53752
  init_zod_openapi();
53678
53753
  init_ledger_slug();
@@ -54082,9 +54157,10 @@ function isSafeSigninUrl(value) {
54082
54157
  if (url2.protocol !== "http:") return false;
54083
54158
  return url2.hostname === "localhost" || url2.hostname === "127.0.0.1" || url2.hostname === "[::1]";
54084
54159
  }
54085
- var PermissionModeSchema, PermissionModeIdSchema, PermissionStopSchema2, SessionTaskStatusSchema, StreamEventTypeSchema, QuestionOptionSchema, QuestionItemSchema, EffortLevelSchema, SessionOriginSchema, SessionLifecycleSchema, LimitPlanSchema, LimitStateSchema, SessionLimitSchema, ContinueAccountOptionSchema, ContinueOptionsResponseSchema, ContinueSessionRequestSchema, ContinueSessionResponseSchema, WaitForResetRequestSchema, LimitPlanResponseSchema, TrackerItemRefSchema, SessionStartedBySchema, SessionSchema, SessionUpdateResponseSchema, SessionSettingsSchema, StoredSessionSettingsResponseSchema, UpdateSessionRequestSchema, ForkSessionRequestSchema, ReloadPluginsResultSchema, SEED_CONTEXT_MAX_LENGTH, MessageDispositionSchema, DispositionDowngradeReasonSchema, MessageDeliveryOutcomeSchema, InterruptOutcomeSchema, InterruptReasonSchema, InterruptReceiptSchema, QueuedWaitingOnSchema, QueuedMessageSchema, SendMessageRequestSchema, SendMessageResponseSchema, SessionTriggerResponseSchema, SessionQueueResponseSchema, QueueMoveTargetSchema, UpdateQueuedMessageRequestSchema, UpdateQueuedMessageResponseSchema, DENY_REASON_MAX_LENGTH, ApprovalRequestSchema, BatchApprovalRequestSchema, SubmitAnswersRequestSchema, UI_ACTION_ID_MAX_LENGTH, UI_ACTION_TITLE_MAX_LENGTH, UI_ACTION_PAYLOAD_MAX_LENGTH, UiActionRequestSchema, McpAppPermissionSchema, McpAppResourceRequestSchema, McpAppResourceResponseSchema, ElicitationModeSchema, ElicitationActionSchema, SubmitElicitationRequestSchema, ListSessionsQuerySchema, SessionListWarningSchema, SessionListResponseSchema, RecentSessionsQuerySchema, RecentSessionsResponseSchema, SessionDailyCountsQuerySchema, SessionDailyCountsResponseSchema, CommandsQuerySchema, TextDeltaSchema, ThinkingDeltaSchema, ToolCallStatusSchema, McpAppRefSchema, ToolCallEventSchema, ToolProgressEventSchema, AlwaysAllowScopeSchema, ApprovalEventSchema, QuestionPromptEventSchema, PendingInteractionDTOSchema, ErrorCategorySchema, ErrorEventSchema, ApiRetryEventSchema, DoneEventSchema, TerminalReasonSchema, UsageStateSchema, UsageStatusSchema, SessionStatusEventSchema, ContextUsageCategorySchema, ContextUsageSchema, TaskItemSchema, TaskUpdateEventSchema, RelayReceiptEventSchema, MessageDeliveredEventSchema, RelayMessageEventSchema, BackgroundTaskTypeSchema, BackgroundTaskStatusSchema, BackgroundTaskStartedEventSchema, BackgroundTaskProgressEventSchema, BackgroundTaskDoneEventSchema, SubagentTextDeltaEventSchema, SystemStatusEventSchema, OperationKindSchema, OperationStateSchema, OperationProgressEventShapeSchema, OperationProgressEventSchema, MemoryEntrySchema, MemoryRecallEventSchema, agentCompactionShape, CompactBoundaryEventSchema, sessionImageShape, SessionImageEventSchema, deniedAgentShape, PermissionDeniedEventSchema, ModelSubstitutedEventSchema, PromptSuggestionEventSchema, HookStartedEventSchema, HookProgressEventSchema, HookResponseEventSchema, SdkSessionStateSchema, SessionStateChangedEventSchema, ElicitationPromptEventSchema, ElicitationCompleteEventSchema, InteractionCancelledEventSchema, CapabilityApprovalRequiredEventSchema, CapabilityApprovalResolvedEventSchema, SigninUrlSchema, MCP_SIGNIN_OUTCOMES, McpSigninOutcomeSchema, McpSigninRequiredEventSchema, McpSigninResolvedEventSchema, StreamEventSchema, TextPartSchema, HookStatusSchema, HookPartSchema, ToolApprovalOutcomeSchema, QuestionOutcomeSchema, ToolCallPartSchema, BackgroundTaskPartSchema, ThinkingPartSchema, ErrorPartSchema, ElicitationPartSchema, CapabilityApprovalPartSchema, McpSigninPartSchema, MemoryRecallPartSchema, PermissionDeniedPartSchema, ModelSubstitutedPartSchema, CompactBoundaryPartSchema, ImagePartSchema, MessagePartSchema, MessageTypeSchema, HistoryToolCallSchema, CompactMetadataSchema, HistoryMessageSchema, HistoryReadSchema, CommandEntrySchema, CommandRegistrySchema, FileListQuerySchema, RawFileQuerySchema, FileListResponseSchema, FileEntrySchema, FileTreeQuerySchema, FileTreeResponseSchema, FileContentQuerySchema, FileContentResponseSchema, CreateEntryRequestSchema, CreateEntryResponseSchema, DeleteEntryQuerySchema, RenameEntryRequestSchema, CopyEntryRequestSchema, RevealEntryRequestSchema, DiffBaselineOriginSchema, DiffBaselineQuerySchema, DiffBaselineResponseSchema, AdvanceDiffBaselineRequestSchema, DiffPendingQuerySchema, DiffPendingResponseSchema, DiffBaselineRawQuerySchema, RevertDiffBaselineRequestSchema, FileMutationResponseSchema, WorkbenchSignRequestSchema, WorkbenchSignResponseSchema, WorkbenchProbeRequestSchema, WorkbenchProbeResponseSchema, BrowseDirectoryQuerySchema, DirectoryEntrySchema, BrowseDirectoryResponseSchema, TunnelStatusSchema, LanAccessStatusSchema, RemoteAccessStateSchema, RemoteAccessAvailabilitySchema, RemoteAccessEnrolmentSchema, RemoteAccessReportSchema, HealthResponseSchema, ExecutionDefaultsSchema, ExperimentStateSchema, ServerConfigSchema2, ModelTierSchema, ModelOptionSchema, SubagentInfoSchema, GitStatusResponseSchema, GitStatusErrorSchema, ErrorResponseSchema, SessionLockedErrorSchema, TaskStatusSchema, SettableTaskStatusSchema, TaskNameSchema, TaskRunStatusSchema, TaskRunTriggerSchema, TaskSchema, TaskRunSchema, CancelTaskRunResponseSchema, TaskTemplateSchema, TASK_DURATION_PATTERN, TASK_DURATION_MAX, TASK_DESCRIPTION_MAX, CreateTaskRequestSchema, SIDEBAR_TAB_ID_PATTERN, ShapeLiveLayoutCaptureSchema, ForkShapeRequestSchema, UpdateTaskRequestSchema, ListTaskRunsQuerySchema, ConfigPatchRequestSchema, ConfigPatchResponseSchema, UploadResultSchema, UploadResponseSchema, UploadProgressSchema, CanvasMediaSrcSchema, UiCanvasContentSchema, UiPanelIdSchema, UiToastLevelSchema, CELEBRATION_KINDS, CELEBRATION_KIND_SYNONYMS, CelebrationKindSchema, UiCommandTargetSchema, UiCommandSchema, UiCommandEventSchema, UiStateSchema, UiStateReportDocumentSchema, UiStateReportSchema, DevtoolsConsoleLevelSchema, DEVTOOLS_ARGS_MAX_CHARS, DevtoolsConsoleEntrySchema, DevtoolsNetworkEntrySchema, DEVTOOLS_CONSOLE_BATCH_MAX, DEVTOOLS_NETWORK_BATCH_MAX, DEVTOOLS_SCREENSHOT_MAX_CHARS, DevtoolsScreenshotResultSchema, DevtoolsIngestSchema, BrowserTargetSchema, BrowserActCommandSchema, BrowserPageSummarySchema, DEVTOOLS_OUTLINE_MAX_CHARS, DevtoolsActionResultSchema, DevtoolsRecordingUploadSchema, KeepAwakeUnsupportedReasonSchema, KeepAwakeStatusSchema;
54160
+ var PermissionModeSchema, PermissionModeIdSchema, PermissionStopSchema2, SessionTaskStatusSchema, StreamEventTypeSchema, QuestionOptionSchema, QuestionItemSchema, EffortLevelSchema, SessionOriginSchema, SessionLifecycleSchema, LimitPlanSchema, LimitStateSchema, SessionLimitSchema, ContinueAccountOptionSchema, ContinueOptionsResponseSchema, ContinueSessionRequestSchema, ContinueSessionResponseSchema, WaitForResetRequestSchema, LimitPlanResponseSchema, TrackerItemRefSchema, SessionStartedBySchema, SessionSchema, SessionUpdateResponseSchema, SessionSettingsSchema, StoredSessionSettingsResponseSchema, UpdateSessionRequestSchema, ForkSessionRequestSchema, ReloadPluginsResultSchema, SEED_CONTEXT_MAX_LENGTH, MessageDispositionSchema, DispositionDowngradeReasonSchema, MessageDeliveryOutcomeSchema, InterruptOutcomeSchema, InterruptReasonSchema, InterruptReceiptSchema, QueuedWaitingOnSchema, QueuedMessageSchema, SendMessageRequestSchema, SendMessageResponseSchema, SessionTriggerResponseSchema, SessionQueueResponseSchema, QueueMoveTargetSchema, UpdateQueuedMessageRequestSchema, UpdateQueuedMessageResponseSchema, DENY_REASON_MAX_LENGTH, ApprovalRequestSchema, BatchApprovalRequestSchema, SubmitAnswersRequestSchema, UI_ACTION_ID_MAX_LENGTH, UI_ACTION_TITLE_MAX_LENGTH, UI_ACTION_PAYLOAD_MAX_LENGTH, UiActionRequestSchema, McpAppPermissionSchema, McpAppResourceRequestSchema, McpAppResourceResponseSchema, ElicitationModeSchema, ElicitationActionSchema, SubmitElicitationRequestSchema, ListSessionsQuerySchema, SessionListWarningSchema, SessionListResponseSchema, RecentSessionsQuerySchema, RecentSessionsResponseSchema, SessionDailyCountsQuerySchema, SessionDailyCountsResponseSchema, CommandsQuerySchema, TextDeltaSchema, ThinkingDeltaSchema, ToolCallStatusSchema, McpAppRefSchema, ToolCallEventSchema, ToolProgressEventSchema, AlwaysAllowScopeSchema, ApprovalEventSchema, QuestionPromptEventSchema, PendingInteractionDTOSchema, ErrorCategorySchema, ErrorEventSchema, ApiRetryEventSchema, DoneEventSchema, TerminalReasonSchema, UsageStateSchema, UsageStatusSchema, SessionStatusEventSchema, ContextUsageCategorySchema, ContextUsageSchema, TaskItemSchema, TaskUpdateEventSchema, RelayReceiptEventSchema, MessageDeliveredEventSchema, RelayMessageEventSchema, BackgroundTaskTypeSchema, BackgroundTaskStatusSchema, BackgroundTaskStartedEventSchema, BackgroundTaskProgressEventSchema, BackgroundTaskDoneEventSchema, SubagentTextDeltaEventSchema, SystemStatusEventSchema, OperationKindSchema, OperationStateSchema, OperationProgressEventShapeSchema, OperationProgressEventSchema, MemoryEntrySchema, MemoryRecallEventSchema, agentCompactionShape, CompactBoundaryEventSchema, sessionImageShape, SessionImageEventSchema, deniedAgentShape, PermissionDeniedEventSchema, ModelSubstitutedEventSchema, PromptSuggestionEventSchema, HookStartedEventSchema, HookProgressEventSchema, HookResponseEventSchema, SdkSessionStateSchema, SessionStateChangedEventSchema, ElicitationPromptEventSchema, ElicitationCompleteEventSchema, InteractionCancelledEventSchema, CapabilityApprovalRequiredEventSchema, CapabilityApprovalResolvedEventSchema, SigninUrlSchema, MCP_SIGNIN_OUTCOMES, McpSigninOutcomeSchema, McpSigninRequiredEventSchema, McpSigninResolvedEventSchema, StreamEventSchema, TextPartSchema, HookStatusSchema, HookPartSchema, ToolApprovalOutcomeSchema, QuestionOutcomeSchema, ToolCallPartSchema, BackgroundTaskPartSchema, ThinkingPartSchema, ErrorPartSchema, ElicitationPartSchema, CapabilityApprovalPartSchema, McpSigninPartSchema, MemoryRecallPartSchema, PermissionDeniedPartSchema, ModelSubstitutedPartSchema, CompactBoundaryPartSchema, ImagePartSchema, MessagePartSchema, MessageTypeSchema, HistoryToolCallSchema, CompactMetadataSchema, HistoryMessageSchema, HistoryReadSchema, CommandEntrySchema, CommandRegistrySchema, FileListQuerySchema, RawFileQuerySchema, FileListResponseSchema, FileEntrySchema, FileTreeQuerySchema, FileTreeResponseSchema, FileContentQuerySchema, FileContentResponseSchema, CreateEntryRequestSchema, CreateEntryResponseSchema, DeleteEntryQuerySchema, RenameEntryRequestSchema, CopyEntryRequestSchema, RevealEntryRequestSchema, DiffBaselineOriginSchema, DiffBaselineQuerySchema, DiffBaselineResponseSchema, AdvanceDiffBaselineRequestSchema, DiffPendingQuerySchema, DiffPendingResponseSchema, DiffBaselineRawQuerySchema, RevertDiffBaselineRequestSchema, FileMutationResponseSchema, WorkbenchSignRequestSchema, WorkbenchSignResponseSchema, WorkbenchProbeRequestSchema, WorkbenchProbeResponseSchema, BrowseDirectoryQuerySchema, DirectoryEntrySchema, BrowseDirectoryResponseSchema, TunnelStatusSchema, LanAccessStatusSchema, RemoteAccessStateSchema, RemoteAccessAvailabilitySchema, RemoteAccessEnrolmentSchema, RemoteAccessReportSchema, HealthResponseSchema, ExecutionDefaultsSchema, ExperimentStateSchema, ServerConfigSchema2, ModelTierSchema, ModelOptionSchema, SubagentInfoSchema, GitStatusResponseSchema, GitStatusErrorSchema, ErrorResponseSchema, SessionLockedErrorSchema, TaskStatusSchema, SettableTaskStatusSchema, TaskNameSchema, TaskRunStatusSchema, TaskRunTriggerSchema, ScheduleOriginMarksSchema, TaskSchema, TaskRunSchema, CancelTaskRunResponseSchema, TaskTemplateSchema, TASK_DURATION_PATTERN, TASK_DURATION_MAX, TASK_DESCRIPTION_MAX, CreateTaskRequestSchema, SIDEBAR_TAB_ID_PATTERN, ShapeLiveLayoutCaptureSchema, ForkShapeRequestSchema, UpdateTaskRequestSchema, ListTaskRunsQuerySchema, ConfigPatchRequestSchema, ConfigPatchResponseSchema, UploadResultSchema, UploadResponseSchema, UploadProgressSchema, CanvasMediaSrcSchema, UiCanvasContentSchema, UiPanelIdSchema, UiToastLevelSchema, CELEBRATION_KINDS, CELEBRATION_KIND_SYNONYMS, CelebrationKindSchema, UiCommandTargetSchema, UiCommandSchema, UiCommandEventSchema, UiStateSchema, UiStateReportDocumentSchema, UiStateReportSchema, DevtoolsConsoleLevelSchema, DEVTOOLS_ARGS_MAX_CHARS, DevtoolsConsoleEntrySchema, DevtoolsNetworkEntrySchema, DEVTOOLS_CONSOLE_BATCH_MAX, DEVTOOLS_NETWORK_BATCH_MAX, DEVTOOLS_SCREENSHOT_MAX_CHARS, DevtoolsScreenshotResultSchema, DevtoolsIngestSchema, BrowserTargetSchema, BrowserActCommandSchema, BrowserPageSummarySchema, DEVTOOLS_OUTLINE_MAX_CHARS, DevtoolsActionResultSchema, DevtoolsRecordingUploadSchema, KeepAwakeUnsupportedReasonSchema, KeepAwakeStatusSchema;
54086
54161
  var init_schemas4 = __esm({
54087
54162
  "../shared/src/schemas.ts"() {
54163
+ "use strict";
54088
54164
  init_canvas_channel_schemas();
54089
54165
  init_zod();
54090
54166
  init_zod_openapi();
@@ -56404,6 +56480,9 @@ var init_schemas4 = __esm({
56404
56480
  isLocalCaller: external_exports.boolean().openapi({
56405
56481
  description: "Whether THIS request reached DorkOS from the machine it runs on. The one field here that describes the caller rather than the server: it is answered per request by the same predicate that guards the loopback-only connect endpoints (`lib/caller-authority.ts`), so a client can be told in advance what those endpoints would do instead of discovering it from a 403. False for a phone or any browser arriving over the tunnel, over the LAN, or through a reverse proxy. True whenever `DORKOS_ALLOW_INSECURE_BIND` is set, because under that flag those endpoints accept"
56406
56482
  }),
56483
+ callerRoute: external_exports.enum(["local", "wifi", "tunnel", "managed", "network", "hub"]).nullable().optional().openapi({
56484
+ description: "The way THIS request reached DorkOS, as the server classified it: `local` at the computer DorkOS runs on, `wifi` over the Wi-Fi listener, and so on. Read only. A Wi-Fi request answers approvals with Allow once or Deny, never Always allow, so the app hides that choice there. Null for the relay; absent from an older server"
56485
+ }),
56407
56486
  dismissedUpgradeVersions: external_exports.array(external_exports.string()).openapi({ description: "Versions the user has dismissed upgrade notifications for" }),
56408
56487
  dismissedPromoIds: external_exports.array(external_exports.string()).openapi({
56409
56488
  description: "Feature-promo ids the user has waved away. Server-held rather than per-browser, so dismissing a card on one device settles it on all of them"
@@ -56859,6 +56938,21 @@ var init_schemas4 = __esm({
56859
56938
  ).refine((s2) => !s2.includes("--"), "Must not contain consecutive hyphens");
56860
56939
  TaskRunStatusSchema = external_exports.enum(["running", "completed", "failed", "cancelled", "skipped", "blocked"]).openapi("TaskRunStatus");
56861
56940
  TaskRunTriggerSchema = external_exports.enum(["scheduled", "manual", "agent"]).openapi("TaskRunTrigger");
56941
+ ScheduleOriginMarksSchema = external_exports.object({
56942
+ /** The turn read words DorkOS can't vouch for: a stranger's message, or another agent's that carried one. */
56943
+ outsider: external_exports.literal(true).optional(),
56944
+ /** Each teammate whose message started the chain, and the space room they wrote in. */
56945
+ teammate: external_exports.array(
56946
+ external_exports.object({
56947
+ roomId: external_exports.string(),
56948
+ authorId: external_exports.string(),
56949
+ /** The teammate's name when the mark was written, or null when it was unknown. */
56950
+ name: external_exports.string().nullable().default(null),
56951
+ /** The room's title when the mark was written, or null when it was unknown. */
56952
+ room: external_exports.string().nullable().default(null)
56953
+ })
56954
+ ).optional()
56955
+ }).openapi("ScheduleOriginMarks");
56862
56956
  TaskSchema = external_exports.object({
56863
56957
  id: external_exports.string(),
56864
56958
  name: external_exports.string(),
@@ -57036,6 +57130,12 @@ var init_schemas4 = __esm({
57036
57130
  * such. `null` on every schedule a person or an agent explained themselves.
57037
57131
  */
57038
57132
  reasonSource: external_exports.enum(["dorkos"]).nullable().default(null),
57133
+ /**
57134
+ * The turn marks the schedule was created or last edited under, or null for an unmarked
57135
+ * turn or a person's own schedule (DOR-3036). A marked schedule waits for a person, whatever
57136
+ * the trust preset; approving it clears this.
57137
+ */
57138
+ originMarks: ScheduleOriginMarksSchema.nullable().optional(),
57039
57139
  nextRun: external_exports.string().nullable().optional(),
57040
57140
  /**
57041
57141
  * When the schedule last started a run (ISO 8601), or null when it never
@@ -59832,7 +59932,7 @@ function checkContributionShape(contribution, readExtra) {
59832
59932
  }
59833
59933
  function checkDeclaredTools(manifest) {
59834
59934
  return (manifest.tools ?? []).map((tool) => {
59835
- const refused2 = (reason) => ({
59935
+ const refused3 = (reason) => ({
59836
59936
  ok: false,
59837
59937
  name: tool.name,
59838
59938
  title: tool.title,
@@ -59840,7 +59940,7 @@ function checkDeclaredTools(manifest) {
59840
59940
  reason: plainReason(reason)
59841
59941
  });
59842
59942
  const schema3 = checkToolInputSchema(tool.inputSchema);
59843
- if (!schema3.ok) return refused2(schema3.reason);
59943
+ if (!schema3.ok) return refused3(schema3.reason);
59844
59944
  const checked = checkContributionShape(
59845
59945
  {
59846
59946
  owner: manifest.id,
@@ -59858,7 +59958,7 @@ function checkDeclaredTools(manifest) {
59858
59958
  },
59859
59959
  NO_EXTRA
59860
59960
  );
59861
- if (!checked.ok) return refused2(checked.reason);
59961
+ if (!checked.ok) return refused3(checked.reason);
59862
59962
  const timeout = Math.min(
59863
59963
  Math.max(1, Math.trunc(tool.timeoutSeconds ?? EXTENSION_TOOL_TIMEOUT_DEFAULT_SECONDS)),
59864
59964
  EXTENSION_TOOL_TIMEOUT_MAX_SECONDS
@@ -109401,7 +109501,7 @@ var init_billing = __esm({
109401
109501
  });
109402
109502
 
109403
109503
  // ../cloud-api/dist/inference.js
109404
- var InferenceTokenRequestSchema, InferenceEndpointsSchema, InferenceFormatSchema, InferenceLimitsSchema, InferenceTokenSchema, ModelSupportsSchema, InferenceModelSchema, InferenceModelsResponseSchema, InferenceTokenRevokeResponseSchema, InferenceRefusalReasonSchema;
109504
+ var InferenceTokenRequestSchema, InferenceEndpointsSchema, InferenceFormatSchema, InferenceLimitsSchema, InferenceTokenSchema, ModelSupportsSchema, InferenceModelSchema, InferenceModelsResponseSchema, InferenceTokenRevokeResponseSchema, InferenceRefusalReasonSchema, InferenceErrorBodySchema;
109405
109505
  var init_inference = __esm({
109406
109506
  "../cloud-api/dist/inference.js"() {
109407
109507
  "use strict";
@@ -109410,7 +109510,7 @@ var init_inference = __esm({
109410
109510
  InferenceTokenRequestSchema = external_exports.object({
109411
109511
  instanceId: IdSchema,
109412
109512
  seatRef: IdSchema.optional(),
109413
- agentRef: IdSchema.optional()
109513
+ agentRef: IdSchema.optional().describe("The agent the token is for. On a cloud agent computer, the agent`s id on its hub. The computer`s own claim: attribution and billing only, never authorization.")
109414
109514
  }).describe("Mint a short-lived inference token for one instance.");
109415
109515
  InferenceEndpointsSchema = external_exports.object({
109416
109516
  anthropicMessages: external_exports.string().url(),
@@ -109466,6 +109566,16 @@ var init_inference = __esm({
109466
109566
  "daily_limit_reached",
109467
109567
  "turn_budget_exhausted"
109468
109568
  ]).describe("Why an inference request was refused. Conditions a caller can act on; nothing about what they bought.");
109569
+ InferenceErrorBodySchema = external_exports.object({
109570
+ type: external_exports.literal("error"),
109571
+ error: external_exports.object({
109572
+ type: external_exports.string().describe("The vendor-style error type."),
109573
+ message: external_exports.string().describe("What went wrong, for a log; never shown as a decision."),
109574
+ dorkos_code: external_exports.string().optional().describe("The endpoint`s own word for the refusal. Never branched on."),
109575
+ dorkos_reason: tolerantEnum(InferenceRefusalReasonSchema).optional().catch(UNRECOGNISED).describe("The published refusal reason, when there is one. Unknown reads as unrecognised.")
109576
+ }),
109577
+ request_id: external_exports.string().nullable().optional()
109578
+ }).describe("The body an inference request is refused with: the vendor error envelope plus two fields of the service`s own.");
109469
109579
  }
109470
109580
  });
109471
109581
 
@@ -109825,6 +109935,11 @@ var init_remote2 = __esm({
109825
109935
  id: IdSchema,
109826
109936
  leaseToken: external_exports.string().min(1)
109827
109937
  }).describe("For a hub only: read `GET /v1/hubs/self/assignment` again now, because its front-door proof was replaced or it ended. Carries nothing else, and no authority."),
109938
+ external_exports.object({
109939
+ kind: external_exports.literal("agent_computer_assignment_changed"),
109940
+ id: IdSchema,
109941
+ leaseToken: external_exports.string().min(1)
109942
+ }).describe("For an agent computer only: read `GET /v1/agent-computers/self/assignment` again now, because its link code or its hub changed. Carries nothing else, and no authority. Sent only to a computer whose version knows it."),
109828
109943
  external_exports.object({
109829
109944
  kind: external_exports.literal("keepalive"),
109830
109945
  id: IdSchema,
@@ -110127,7 +110242,7 @@ var init_communities = __esm({
110127
110242
  });
110128
110243
 
110129
110244
  // ../cloud-api/dist/hubs.js
110130
- var HubAssignmentStateSchema, HttpsOriginSchema, HubSignInClientSchema, HubAssignmentSchema, HubAssignmentConfirmRequestSchema, HubAssignmentConfirmResponseSchema, CloudComputerStateSchema, CloudComputerStopReasonSchema, CloudComputerSchema, CloudComputerListResponseSchema, CloudComputerCreateRequestSchema, CloudComputerCreateResponseSchema, CloudComputerTransitionResponseSchema, ViewerOpenResponseSchema, CloudComputerDeletedResponseSchema;
110245
+ var HubAssignmentStateSchema, HttpsOriginSchema, HubSignInClientSchema, HubAssignmentSchema, HubAssignmentConfirmRequestSchema, HubAssignmentConfirmResponseSchema, CloudComputerStateSchema, CloudComputerStopReasonSchema, CloudComputerSchema, CloudComputerListResponseSchema, CloudComputerCreateRequestSchema, CloudComputerCreateResponseSchema, CloudComputerTransitionResponseSchema, CloudComputerStartReasonSchema, CloudComputerStartRequestSchema, ViewerOpenResponseSchema, CloudComputerDeletedResponseSchema, AgentComputerLinkCodeSchema, AgentComputerLinkCodeRequestSchema, AgentComputerAssignmentSchema, AgentComputerActivityRequestSchema, HubNextWakeRequestSchema;
110131
110246
  var init_hubs = __esm({
110132
110247
  "../cloud-api/dist/hubs.js"() {
110133
110248
  "use strict";
@@ -110195,6 +110310,10 @@ var init_hubs = __esm({
110195
110310
  CloudComputerTransitionResponseSchema = external_exports.object({
110196
110311
  computer: CloudComputerSchema
110197
110312
  }).describe("The computer as it is after a start or stop was accepted.");
110313
+ CloudComputerStartReasonSchema = external_exports.enum(["turn", "viewer", "beat"]).describe("Why a hub starts a computer: a turn, a viewer, or a beat. For metering only.");
110314
+ CloudComputerStartRequestSchema = external_exports.object({
110315
+ reason: tolerantEnum(CloudComputerStartReasonSchema).optional().describe("Why the computer is started, for metering. A reason this release does not know reads as unrecognised. Absent says nothing.")
110316
+ }).describe("Start a cloud agent computer, optionally saying why. The body may be left out.");
110198
110317
  ViewerOpenResponseSchema = external_exports.object({
110199
110318
  commandId: IdSchema.describe("The command waiting for the computer: the `id` it will see on its stream."),
110200
110319
  queuedAt: TimestampSchema
@@ -110202,6 +110321,28 @@ var init_hubs = __esm({
110202
110321
  CloudComputerDeletedResponseSchema = external_exports.object({
110203
110322
  deletedAt: TimestampSchema
110204
110323
  }).describe("When the computer, its disk and its snapshots were deleted. Cannot be undone.");
110324
+ AgentComputerLinkCodeSchema = external_exports.object({
110325
+ code: external_exports.string().regex(/^[0-9A-HJKMNP-TV-Z]{16}$/, "must be 16 characters of uppercase Crockford base32, with no spaces or dashes").meta({
110326
+ description: "The code itself: 16 characters of uppercase Crockford base32, 80 bits. Single use. Never log it or return it to a browser.",
110327
+ [ONE_TIME_CREDENTIAL_META]: true
110328
+ }),
110329
+ expiresAt: TimestampSchema.describe("When the code stops working: at most ten minutes after the hub minted it.")
110330
+ }).describe("A one-time code an agent computer links to its hub with. Single use, ten minutes at most, bound to one computer.");
110331
+ AgentComputerLinkCodeRequestSchema = AgentComputerLinkCodeSchema.describe("The link code a hub minted for an agent computer on its account. Hub instance key only; answered 204.");
110332
+ AgentComputerAssignmentSchema = external_exports.object({
110333
+ computerId: IdSchema.describe("This computer, as the hub and `GET /v1/computers` name it."),
110334
+ hubOrigin: HttpsOriginSchema.describe("Where this computer reaches its hub: an https origin with no path, through the hub`s front door."),
110335
+ ownerAccountId: IdSchema.describe("The account id, at `issuer`, of the person the hub belongs to. Never an email, and never changes."),
110336
+ issuer: HttpsUrlSchema.describe("The issuer `ownerAccountId` belongs to, compared exactly."),
110337
+ linkCode: AgentComputerLinkCodeSchema.nullable().describe("The one-time code to redeem at the hub, or null when none is waiting. Handed out once."),
110338
+ pollAfterSeconds: external_exports.number().int().positive().optional().describe("How long to wait before reading again when no command arrives. Absent leaves the wait to the computer.")
110339
+ }).describe("Which hub an agent computer works for, and the code it links with. That computer`s instance key only; never cached by a proxy.");
110340
+ AgentComputerActivityRequestSchema = external_exports.object({
110341
+ busy: external_exports.boolean().describe("True while the computer is in the middle of work. Holds for ten minutes unless sent again.")
110342
+ }).describe("Whether an agent computer is in the middle of work. That computer`s instance key only; answered 204.");
110343
+ HubNextWakeRequestSchema = external_exports.object({
110344
+ at: TimestampSchema.nullable().describe("When the hub next has a schedule due, or null when nothing is. More than 31 days ahead is ignored.")
110345
+ }).describe("When a hub next needs waking for a due schedule. Hub instance key only; answered 204.");
110205
110346
  }
110206
110347
  });
110207
110348
 
@@ -122951,6 +123092,13 @@ var init_tasks = __esm({
122951
123092
  * what was approved, not an approval.
122952
123093
  */
122953
123094
  previousApprovalKey: text("previous_approval_key"),
123095
+ /**
123096
+ * The turn marks of the turn that created or last edited this schedule (DOR-3036,
123097
+ * `specs/turn-marks`): JSON `{ outsider?: true, teammate?: [{ roomId, authorId, name?, room? }] }`,
123098
+ * or NULL. A marked schedule parks for a person, whatever the trust preset, and its approval
123099
+ * card names each mark and where it came from. A person's approval clears it.
123100
+ */
123101
+ originMarks: text("origin_marks"),
122954
123102
  /**
122955
123103
  * The agent's runtime, model or effort that changed outside DorkOS since this
122956
123104
  * schedule was approved, while the schedule follows the agent for that part
@@ -123821,6 +123969,11 @@ var init_auth = __esm({
123821
123969
  updatedAt: integer2("updated_at", { mode: "timestamp_ms" }).$onUpdate(() => /* @__PURE__ */ new Date()).notNull(),
123822
123970
  ipAddress: text("ip_address"),
123823
123971
  userAgent: text("user_agent"),
123972
+ // The way the sign-in that made this session came in: 'local', 'wifi',
123973
+ // 'tunnel', 'managed', 'network' or 'hub'. A session works only on that
123974
+ // route (DOR-2969). Null for a session made before it was recorded, which
123975
+ // works only on this computer.
123976
+ route: text("route"),
123824
123977
  userId: text("user_id").notNull().references(() => user.id, { onDelete: "cascade" }),
123825
123978
  // A sign-in on a shared or public computer (A4, DOR-2936): the cookie ends
123826
123979
  // with the browser, the session cannot outlive a working day, and the app
@@ -125288,6 +125441,13 @@ var init_rooms2 = __esm({
125288
125441
  * it rather than letting it ride into `RoomEntry`.
125289
125442
  */
125290
125443
  dispatchId: text("dispatch_id"),
125444
+ /**
125445
+ * The turn marks the post was written under (DOR-3036, `specs/turn-marks`): JSON
125446
+ * `{ outsider?: true, teammate?: [{ roomId, authorId }] }`, `{}` for a known unmarked turn, and
125447
+ * NULL when nobody knows (an unverified caller, a row from before this column). Kept so a
125448
+ * restart does not read a teammate-marked agent post as merely an outsider's. Off the wire.
125449
+ */
125450
+ turnMarks: text("turn_marks"),
125291
125451
  /** The entry this one answers, in this same room. Null for a top-level entry. */
125292
125452
  parentEntryId: text("parent_entry_id"),
125293
125453
  /**
@@ -126243,9 +126403,12 @@ var init_notifications = __esm({
126243
126403
  "extension.approval",
126244
126404
  "extension.decision",
126245
126405
  "community.owner-replacement",
126406
+ "community.teammate-limit",
126407
+ "community.teammate-limits-reset",
126246
126408
  "heartbeat.credits-offer",
126247
126409
  "connector.destructive_pending",
126248
- "connector.destructive_executed"
126410
+ "connector.destructive_executed",
126411
+ "web.new_device"
126249
126412
  ]
126250
126413
  }).notNull(),
126251
126414
  /** How loud this was allowed to be. Copied from the registry at write time. */
@@ -127245,7 +127408,13 @@ var init_commitments = __esm({
127245
127408
  /** When it left `open` (ISO 8601), or NULL while open. */
127246
127409
  closedAt: text("closed_at"),
127247
127410
  /** A short note on how it ended or why it moved, or NULL. */
127248
- note: text("note")
127411
+ note: text("note"),
127412
+ /**
127413
+ * The turn marks the promise was made under (DOR-3036, `specs/turn-marks`): JSON
127414
+ * `{ outsider?: true, teammate?: [{ roomId, authorId }] }`, or NULL for an unmarked turn. The
127415
+ * beat its due date wakes carries them on, since it reads the promise's words.
127416
+ */
127417
+ originMarks: text("origin_marks")
127249
127418
  },
127250
127419
  (table2) => [
127251
127420
  index("commitments_agent_state_idx").on(table2.agentId, table2.state),
@@ -127464,7 +127633,8 @@ var init_remote_commands = __esm({
127464
127633
  "revoke",
127465
127634
  "inbox_pending",
127466
127635
  "viewer_open",
127467
- "hub_assignment_changed"
127636
+ "hub_assignment_changed",
127637
+ "agent_computer_assignment_changed"
127468
127638
  ];
127469
127639
  REMOTE_COMMAND_ACK_STATES = ["pending", "acked", "rejected", "unconfirmed"];
127470
127640
  remoteCommandJournal = sqliteTable(
@@ -127498,7 +127668,7 @@ var init_remote_commands = __esm({
127498
127668
  index("remote_command_journal_ack_idx").on(table2.ackState, table2.receivedAt),
127499
127669
  check3(
127500
127670
  "remote_command_journal_verb",
127501
- sql2`${table2.verb} IN ('open', 'close', 'rotate', 'revoke', 'inbox_pending', 'viewer_open', 'hub_assignment_changed')`
127671
+ sql2`${table2.verb} IN ('open', 'close', 'rotate', 'revoke', 'inbox_pending', 'viewer_open', 'hub_assignment_changed', 'agent_computer_assignment_changed')`
127502
127672
  ),
127503
127673
  check3(
127504
127674
  "remote_command_journal_ack_state",
@@ -128912,6 +129082,29 @@ var init_setup_code_gate = __esm({
128912
129082
  }
128913
129083
  });
128914
129084
 
129085
+ // ../../apps/server/src/services/core/auth/sessions/session-route.ts
129086
+ var WIFI_SESSION_MAX_SECONDS;
129087
+ var init_session_route = __esm({
129088
+ "../../apps/server/src/services/core/auth/sessions/session-route.ts"() {
129089
+ "use strict";
129090
+ init_request_classifier();
129091
+ init_server_role();
129092
+ init_registration_policy();
129093
+ WIFI_SESSION_MAX_SECONDS = 7 * 24 * 60 * 60;
129094
+ }
129095
+ });
129096
+
129097
+ // ../../apps/server/src/services/core/auth/sessions/live-connections.ts
129098
+ var ENDED_SESSION_MEMORY_MS, startedAt;
129099
+ var init_live_connections = __esm({
129100
+ "../../apps/server/src/services/core/auth/sessions/live-connections.ts"() {
129101
+ "use strict";
129102
+ init_logger();
129103
+ ENDED_SESSION_MEMORY_MS = 5 * 60 * 1e3;
129104
+ startedAt = Date.now();
129105
+ }
129106
+ });
129107
+
128915
129108
  // ../../apps/server/src/services/core/auth/cookie-security.ts
128916
129109
  var AUTH_COOKIES_SECURE;
128917
129110
  var init_cookie_security = __esm({
@@ -128923,58 +129116,67 @@ var init_cookie_security = __esm({
128923
129116
  });
128924
129117
 
128925
129118
  // ../shared/src/session-relay.ts
128926
- 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;
129119
+ var SESSION_RELAY_MAX_FRAME_LENGTH, SESSION_RELAY_MAX_INNER_FRAME_BYTES, SESSION_RELAY_MAX_MESSAGE_LENGTH, RelayMessageContentSchema, SESSION_RELAY_MAX_CHATS, SESSION_RELAY_IDLE_CLOSE_MS, VersionSchema, RelayVersionRangeSchema, RelayAdvertisedFeaturesSchema, RelayRequestIdSchema, StreamIdSchema, RelaySessionIdSchema, RelayAgentIdSchema, 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;
128927
129120
  var init_session_relay = __esm({
128928
129121
  "../shared/src/session-relay.ts"() {
128929
129122
  "use strict";
128930
129123
  init_zod();
128931
129124
  init_schemas4();
128932
129125
  SESSION_RELAY_MAX_FRAME_LENGTH = 1048576;
129126
+ SESSION_RELAY_MAX_INNER_FRAME_BYTES = Math.floor((SESSION_RELAY_MAX_FRAME_LENGTH - 64) * 3 / 4) - 16;
128933
129127
  SESSION_RELAY_MAX_MESSAGE_LENGTH = 2e5;
129128
+ RelayMessageContentSchema = external_exports.string().min(1).max(SESSION_RELAY_MAX_MESSAGE_LENGTH);
128934
129129
  SESSION_RELAY_MAX_CHATS = 200;
128935
129130
  SESSION_RELAY_IDLE_CLOSE_MS = 3 * 60 * 1e3;
128936
129131
  VersionSchema = external_exports.number().int().positive();
128937
129132
  RelayVersionRangeSchema = external_exports.strictObject({ min: VersionSchema, max: VersionSchema }).refine((range) => range.min <= range.max, { message: "min must not exceed max" });
128938
- AdvertisedFeaturesSchema = external_exports.array(external_exports.string().min(1).max(64)).max(64);
128939
- RequestIdSchema = external_exports.string().min(1).max(64).regex(/^[\w.:-]+$/);
128940
- StreamIdSchema = RequestIdSchema;
128941
- SessionIdSchema = external_exports.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/);
128942
- AgentIdSchema = external_exports.string().regex(/^[0-9A-HJKMNP-TV-Z]{26}$/);
129133
+ RelayAdvertisedFeaturesSchema = external_exports.array(external_exports.string().min(1).max(64)).max(64);
129134
+ RelayRequestIdSchema = external_exports.string().min(1).max(64).regex(/^[\w.:-]+$/);
129135
+ StreamIdSchema = RelayRequestIdSchema;
129136
+ RelaySessionIdSchema = external_exports.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/);
129137
+ RelayAgentIdSchema = external_exports.string().regex(/^[0-9A-HJKMNP-TV-Z]{26}$/);
128943
129138
  ToolCallIdSchema = external_exports.string().min(1).max(256).regex(/^[\w.:-]+$/);
128944
129139
  ResumeCursorSchema = external_exports.string().max(256).regex(/^[0-9a-f-]+-\d+-g\d+-\d+$/);
129140
+ NO_CONTROL = /^[^\u0000-\u001f\u007f]*$/;
129141
+ INVISIBLE = /[\p{Cf}\u2028\u2029]/u;
129142
+ 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");
129143
+ RelayDeviceSchema = external_exports.strictObject({
129144
+ id: external_exports.string().min(8).max(64).regex(/^[A-Za-z0-9_-]+$/),
129145
+ label: RelayDisplayNameSchema
129146
+ });
128945
129147
  base64url3 = (max2) => external_exports.string().min(1).max(max2).regex(/^[A-Za-z0-9_-]+$/);
128946
129148
  ChatsListRequestSchema = external_exports.strictObject({
128947
129149
  op: external_exports.literal("chats.list"),
128948
- agentId: AgentIdSchema
129150
+ agentId: RelayAgentIdSchema
128949
129151
  });
128950
129152
  SessionStreamRequestSchema = external_exports.strictObject({
128951
129153
  op: external_exports.literal("session.stream"),
128952
129154
  streamId: StreamIdSchema,
128953
- sessionId: SessionIdSchema,
129155
+ sessionId: RelaySessionIdSchema,
128954
129156
  resume: ResumeCursorSchema.optional()
128955
129157
  });
128956
129158
  SessionSendRequestSchema = external_exports.strictObject({
128957
129159
  op: external_exports.literal("session.send"),
128958
- sessionId: SessionIdSchema,
128959
- content: external_exports.string().min(1).max(SESSION_RELAY_MAX_MESSAGE_LENGTH),
128960
- clientMessageId: RequestIdSchema.optional(),
129160
+ sessionId: RelaySessionIdSchema,
129161
+ content: RelayMessageContentSchema,
129162
+ clientMessageId: RelayRequestIdSchema.optional(),
128961
129163
  disposition: MessageDispositionSchema.optional(),
128962
- newChat: external_exports.strictObject({ agentId: AgentIdSchema }).optional()
129164
+ newChat: external_exports.strictObject({ agentId: RelayAgentIdSchema }).optional()
128963
129165
  });
128964
129166
  SessionInterruptRequestSchema = external_exports.strictObject({
128965
129167
  op: external_exports.literal("session.interrupt"),
128966
- sessionId: SessionIdSchema
129168
+ sessionId: RelaySessionIdSchema
128967
129169
  });
128968
129170
  ApprovalDecisionSchema = external_exports.enum(["approve", "deny"]);
128969
129171
  InteractionChallengeRequestSchema = external_exports.strictObject({
128970
129172
  op: external_exports.literal("interaction.challenge"),
128971
- sessionId: SessionIdSchema,
129173
+ sessionId: RelaySessionIdSchema,
128972
129174
  toolCallId: ToolCallIdSchema,
128973
129175
  decision: ApprovalDecisionSchema
128974
129176
  });
128975
129177
  RelayApprovalProofSchema = external_exports.strictObject({
128976
129178
  /** The `challengeId` the computer answered `interaction.challenge` with. */
128977
- challengeId: RequestIdSchema,
129179
+ challengeId: RelayRequestIdSchema,
128978
129180
  credentialId: base64url3(1400),
128979
129181
  clientDataJSON: base64url3(4096),
128980
129182
  authenticatorData: base64url3(1024),
@@ -129001,7 +129203,7 @@ var init_session_relay = __esm({
129001
129203
  ]);
129002
129204
  InteractionRespondRequestSchema = external_exports.strictObject({
129003
129205
  op: external_exports.literal("interaction.respond"),
129004
- sessionId: SessionIdSchema,
129206
+ sessionId: RelaySessionIdSchema,
129005
129207
  answer: InteractionAnswerSchema
129006
129208
  });
129007
129209
  RelayRequestSchema = external_exports.discriminatedUnion("op", [
@@ -129013,7 +129215,7 @@ var init_session_relay = __esm({
129013
129215
  InteractionRespondRequestSchema
129014
129216
  ]);
129015
129217
  RelayChatSummarySchema = external_exports.strictObject({
129016
- sessionId: SessionIdSchema,
129218
+ sessionId: RelaySessionIdSchema,
129017
129219
  title: external_exports.string().max(500),
129018
129220
  updatedAt: external_exports.string().datetime(),
129019
129221
  lastMessagePreview: external_exports.string().max(500).optional()
@@ -129022,13 +129224,13 @@ var init_session_relay = __esm({
129022
129224
  "chats.list": external_exports.strictObject({
129023
129225
  chats: external_exports.array(RelayChatSummarySchema).max(SESSION_RELAY_MAX_CHATS)
129024
129226
  }),
129025
- "session.send": external_exports.strictObject({ sessionId: SessionIdSchema }),
129227
+ "session.send": external_exports.strictObject({ sessionId: RelaySessionIdSchema }),
129026
129228
  "session.interrupt": external_exports.strictObject({
129027
129229
  receipt: InterruptReceiptSchema,
129028
129230
  cancelledQueued: external_exports.array(QueuedMessageSchema)
129029
129231
  }),
129030
129232
  "interaction.challenge": external_exports.strictObject({
129031
- challengeId: RequestIdSchema,
129233
+ challengeId: RelayRequestIdSchema,
129032
129234
  /** The bytes to sign, base64url. Opaque to the web side. */
129033
129235
  challenge: base64url3(256),
129034
129236
  /** When the computer stops accepting a proof over it. */
@@ -129052,7 +129254,7 @@ var init_session_relay = __esm({
129052
129254
  /** The computer's id as its hub knows it. Proved by `finish`, never taken on trust. */
129053
129255
  computerId: external_exports.string().min(1).max(64).regex(/^[\w.:-]+$/),
129054
129256
  versions: RelayVersionRangeSchema,
129055
- features: AdvertisedFeaturesSchema,
129257
+ features: RelayAdvertisedFeaturesSchema,
129056
129258
  /** The computer's DorkOS version, for "needs an update" copy. */
129057
129259
  appVersion: external_exports.string().min(1).max(64),
129058
129260
  nonce: RelayNonceSchema,
@@ -129084,7 +129286,13 @@ var init_session_relay = __esm({
129084
129286
  * `stream.frame`s and one `stream.end`, which carries the refusal if it never
129085
129287
  * opened.
129086
129288
  */
129087
- external_exports.strictObject({ type: external_exports.literal("request"), id: RequestIdSchema, request: RelayRequestSchema }),
129289
+ external_exports.strictObject({
129290
+ type: external_exports.literal("request"),
129291
+ id: RelayRequestIdSchema,
129292
+ request: RelayRequestSchema,
129293
+ /** The browser that asked; sent only to a computer that advertised `request.device`. */
129294
+ device: RelayDeviceSchema.optional()
129295
+ }),
129088
129296
  external_exports.strictObject({ type: external_exports.literal("stream.close"), streamId: StreamIdSchema }),
129089
129297
  /**
129090
129298
  * How many viewers have a chat of this computer open right now. At 0, and
@@ -129102,13 +129310,13 @@ var init_session_relay = __esm({
129102
129310
  RelayComputerFrameSchema = external_exports.discriminatedUnion("type", [
129103
129311
  external_exports.strictObject({
129104
129312
  type: external_exports.literal("result"),
129105
- id: RequestIdSchema,
129313
+ id: RelayRequestIdSchema,
129106
129314
  ok: external_exports.literal(true),
129107
129315
  body: external_exports.unknown()
129108
129316
  }),
129109
129317
  external_exports.strictObject({
129110
129318
  type: external_exports.literal("error"),
129111
- id: RequestIdSchema,
129319
+ id: RelayRequestIdSchema,
129112
129320
  ok: external_exports.literal(false),
129113
129321
  error: RelayErrorSchema
129114
129322
  }),
@@ -129132,7 +129340,7 @@ var init_session_relay = __esm({
129132
129340
  });
129133
129341
 
129134
129342
  // ../shared/src/session-relay-link.ts
129135
- var RELAY_LINK_CODE_TTL_MS, RelayLinkComputerIdSchema, Sha256Base64urlSchema, NO_CONTROL, INVISIBLE, RelayLinkComputerNameSchema, RelayLinkRequestSchema, RelayLinkResponseSchema, HubComputerSummarySchema, HubComputerListSchema, HubLinkCodeSchema, SessionRelayLevelSchema, SessionRelayStatusSchema, StepUpPasswordSchema, SessionRelayLinkBodySchema, SessionRelayLevelBodySchema, SessionRelayResumeBodySchema, SessionRelayLinkRefusalSchema;
129343
+ 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;
129136
129344
  var init_session_relay_link = __esm({
129137
129345
  "../shared/src/session-relay-link.ts"() {
129138
129346
  init_zod();
@@ -129140,9 +129348,8 @@ var init_session_relay_link = __esm({
129140
129348
  RELAY_LINK_CODE_TTL_MS = 10 * 60 * 1e3;
129141
129349
  RelayLinkComputerIdSchema = external_exports.string().min(1).max(64).regex(/^[\w.:-]+$/);
129142
129350
  Sha256Base64urlSchema = external_exports.string().length(43).regex(/^[A-Za-z0-9_-]+$/);
129143
- NO_CONTROL = /^[^\u0000-\u001f\u007f]*$/;
129144
- INVISIBLE = /[\p{Cf}\u2028\u2029]/u;
129145
- 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");
129351
+ NO_CONTROL2 = /^[^\u0000-\u001f\u007f]*$/;
129352
+ RelayLinkComputerNameSchema = RelayDisplayNameSchema;
129146
129353
  RelayLinkRequestSchema = external_exports.strictObject({
129147
129354
  v: external_exports.literal(1),
129148
129355
  /** The code part of the link code, as the owner pasted it. */
@@ -129160,9 +129367,9 @@ var init_session_relay_link = __esm({
129160
129367
  /** The hub's Ed25519 public key, raw 32 bytes base64url. Pin this one. */
129161
129368
  hubKey: RelayPinnedHubKeySchema,
129162
129369
  /** The hub owner's account id at `issuer`. */
129163
- ownerAccountId: external_exports.string().min(1).max(128).regex(NO_CONTROL).optional(),
129370
+ ownerAccountId: external_exports.string().min(1).max(128).regex(NO_CONTROL2).optional(),
129164
129371
  /** The issuer that account id belongs to. */
129165
- issuer: external_exports.string().min(1).max(512).startsWith("https://").regex(NO_CONTROL).optional(),
129372
+ issuer: external_exports.string().min(1).max(512).startsWith("https://").regex(NO_CONTROL2).optional(),
129166
129373
  signature: RelaySignatureSchema
129167
129374
  });
129168
129375
  HubComputerSummarySchema = external_exports.object({
@@ -129233,6 +129440,23 @@ var init_session_relay_link = __esm({
129233
129440
  /** This computer is linked to a DorkOS account that could not be read just now. */
129234
129441
  "account-unreadable"
129235
129442
  ]);
129443
+ SessionRelayDeviceSchema = external_exports.object({
129444
+ label: external_exports.string(),
129445
+ /** When this computer first saw it (ISO 8601). */
129446
+ firstSeenAt: external_exports.string(),
129447
+ /** When it last asked this computer for something (ISO 8601). */
129448
+ lastSeenAt: external_exports.string()
129449
+ });
129450
+ SessionRelayPresenceSchema = external_exports.object({
129451
+ active: external_exports.boolean(),
129452
+ /** When it became active (ISO 8601); absent while not active. */
129453
+ since: external_exports.string().optional(),
129454
+ /** The browsers seen since then, most recent first; empty while not active. */
129455
+ devices: external_exports.array(SessionRelayDeviceSchema)
129456
+ });
129457
+ SessionRelayDeviceListSchema = external_exports.object({
129458
+ devices: external_exports.array(SessionRelayDeviceSchema)
129459
+ });
129236
129460
  }
129237
129461
  });
129238
129462
 
@@ -129247,6 +129471,8 @@ var init_session_gate = __esm({
129247
129471
  init_server_role();
129248
129472
  init_public_computer();
129249
129473
  init_session_relay_link();
129474
+ init_session_route();
129475
+ init_live_connections();
129250
129476
  }
129251
129477
  });
129252
129478
 
@@ -129288,6 +129514,8 @@ var init_auth2 = __esm({
129288
129514
  init_server_role();
129289
129515
  init_seed_legacy_mcp_key();
129290
129516
  init_setup_code_gate();
129517
+ init_session_route();
129518
+ init_live_connections();
129291
129519
  init_setup_code();
129292
129520
  init_cookie_security();
129293
129521
  init_session_gate();
@@ -129745,6 +129973,9 @@ var init_config_disclosure = __esm({
129745
129973
  // work runs on this machine, names no credential and no person, and an agent
129746
129974
  // that can see it can say why a session behaves the way it does.
129747
129975
  "runtimes.claudeCode.persistentSession": "expose",
129976
+ // How many agents may run at once here (DOR-3012). A number about this
129977
+ // machine, naming no credential and no person.
129978
+ "runtimes.claudeCode.maxWarmProcesses": "expose",
129748
129979
  "runtimes.opencode.defaultModel": "expose",
129749
129980
  "runtimes.codex.defaultModel": "expose",
129750
129981
  "runtimes.codex.defaultEffort": "expose",
@@ -130502,6 +130733,9 @@ var init_config_write_policy = __esm({
130502
130733
  // what makes the verdict cheap: refusing the agent takes nothing away from the
130503
130734
  // person, who was never going to reach for a config door to begin with.
130504
130735
  "runtimes.claudeCode.persistentSession": "operator-only",
130736
+ // How many agents may run at once (DOR-3012): memory on this machine, so the
130737
+ // person sets it, like `scheduler.maxConcurrentRuns`.
130738
+ "runtimes.claudeCode.maxWarmProcesses": "operator-only",
130505
130739
  "runtimes.opencode.defaultModel": "agent-writable",
130506
130740
  "runtimes.codex.defaultModel": "agent-writable",
130507
130741
  "runtimes.codex.defaultEffort": "agent-writable",
@@ -130808,6 +131042,9 @@ var init_config_write_policy = __esm({
130808
131042
  // and the wipe floor says an agent may not widen it back (DOR-1505).
130809
131043
  "uploads.allowedTypes",
130810
131044
  "runtimes.claudeCode.persistentSession",
131045
+ // How many agents may run at once: a person who lowered it to save memory
131046
+ // must not have an agent raise it back (DOR-3012).
131047
+ "runtimes.claudeCode.maxWarmProcesses",
130811
131048
  "scheduler.maxConcurrentRuns",
130812
131049
  // Whether the computer stays awake for the work, and whether it is woken
130813
131050
  // for it: battery, and whether the machine is on while nobody is there.
@@ -131193,21 +131430,45 @@ var init_constants9 = __esm({
131193
131430
  */
131194
131431
  WARM_IDLE_MS: 5 * 60 * 1e3,
131195
131432
  /**
131196
- * How many sessions may hold a subprocess at once (spec §4.4).
131433
+ * The fewest sessions that may hold a subprocess at once when the ceiling is
131434
+ * sized automatically (spec §4.4; DOR-3012).
131197
131435
  *
131198
- * This counts PROCESSES; `MAX_SESSIONS` (50) counts session RECORDS, and the
131199
- * two are deliberately different numbers. Fifty concurrent CLI subprocesses
131200
- * plus their MCP children on a laptop is not a shape to ship, so warmth stops
131201
- * at twelve while records stay at fifty — which keeps `ensureSession`'s throw
131202
- * the genuinely exceptional path it is today.
131436
+ * The ceiling counts PROCESSES; `MAX_SESSIONS` (50) counts session RECORDS,
131437
+ * and the two are deliberately different numbers. It is set by
131438
+ * `runtimes.claudeCode.maxWarmProcesses`, and left unset it is sized to the
131439
+ * machine: one process per {@link SESSIONS.WARM_SESSION_RAM_GB} of memory,
131440
+ * never fewer than this and never more than
131441
+ * {@link SESSIONS.MAX_WARM_SESSIONS_AUTO}. Twelve was the fixed ceiling until
131442
+ * DOR-3012, and a machine with 48 GB filled it with 5.5 GB in use.
131203
131443
  *
131204
- * It is also **not** a refusal ceiling in the way `MAX_SESSIONS` is. Warmth is
131205
- * a cache, so the thirteenth warm session does not fail: the least recently
131206
- * used warm process is reaped to make room for it, and only a host where
131207
- * nothing is reclaimable — every process mid-turn or parked on a person — is
131208
- * refused.
131444
+ * It is **not** a refusal ceiling in the way `MAX_SESSIONS` is. Warmth is a
131445
+ * cache, so a launch past it reclaims the least recently used warm process,
131446
+ * and when nothing is reclaimable — every process mid-turn or parked on a
131447
+ * person — it waits for one to come free ({@link SESSIONS.WARM_SLOT_WAIT_MS}).
131209
131448
  */
131210
- MAX_WARM_SESSIONS: 12,
131449
+ MIN_WARM_SESSIONS: 12,
131450
+ /** The most an automatically sized warm ceiling allows; see {@link SESSIONS.MIN_WARM_SESSIONS}. */
131451
+ MAX_WARM_SESSIONS_AUTO: 32,
131452
+ /**
131453
+ * Memory an automatically sized ceiling budgets per warm process, in GB. A
131454
+ * busy claude-code process measured about 0.5 GB on 2026-10-18; four times
131455
+ * that leaves room for its MCP children and for everything else on the
131456
+ * machine.
131457
+ */
131458
+ WARM_SESSION_RAM_GB: 2,
131459
+ /**
131460
+ * How long a turn waits for a warm slot when every process is busy, before it
131461
+ * is refused in plain words (DOR-3012).
131462
+ *
131463
+ * Long on purpose: a full ceiling is the busiest moment a room has, and a
131464
+ * late answer beats a failed one. Every busy process frees its slot when its
131465
+ * turn ends, so a wait this long means every agent sat on one turn for most
131466
+ * of an hour. Kept under the room's default late-reply ceiling (60 min) so the
131467
+ * room hears the reason rather than giving up first. The turn says it is
131468
+ * waiting on a beat (`SLOT_WAIT_BEAT_MS`), which keeps the stall guard from
131469
+ * mistaking the wait for a stalled turn.
131470
+ */
131471
+ WARM_SLOT_WAIT_MS: 45 * 60 * 1e3,
131211
131472
  /**
131212
131473
  * How long a warm process must be CONTINUOUSLY quiet before its busy spell is
131213
131474
  * over (spec `warm-process-lifecycle` D1).
@@ -131229,7 +131490,7 @@ var init_constants9 = __esm({
131229
131490
  * The same four hours, and the same reasoning, as
131230
131491
  * {@link SESSIONS.INTERACTION_PARK_CEILING_MS}: a hold with no bound is a
131231
131492
  * resource leak with a story attached, and twelve processes pinned by helpers
131232
- * that will never finish fill `MAX_WARM_SESSIONS` exactly as twelve parked
131493
+ * that will never finish fill the warm ceiling exactly as a ceiling's worth of parked
131233
131494
  * ones do. Deliberately a SEPARATE constant from the person-wait ceiling even
131234
131495
  * though both are four hours: one bounds how long DorkOS waits for a person,
131235
131496
  * the other how long it waits for an agent, and a future change to either
@@ -132587,40 +132848,6 @@ var init_agent_home = __esm({
132587
132848
  }
132588
132849
  });
132589
132850
 
132590
- // ../../apps/server/src/services/core/turn-power/live-outsider-turns.ts
132591
- function homeKey(dir, forAgent) {
132592
- try {
132593
- return homeOf(resolveAgentHome(dir, forAgent));
132594
- } catch {
132595
- return void 0;
132596
- }
132597
- }
132598
- function adjust(key, by) {
132599
- const next = (running.get(key) ?? 0) + by;
132600
- if (next > 0) running.set(key, next);
132601
- else running.delete(key);
132602
- }
132603
- function countWhileRunning(place2, events) {
132604
- const key = homeKey(place2.cwd, place2.forAgent) ?? UNPLACED;
132605
- return (async function* counted() {
132606
- adjust(key, 1);
132607
- try {
132608
- yield* events;
132609
- } finally {
132610
- adjust(key, -1);
132611
- }
132612
- })();
132613
- }
132614
- var UNPLACED, running;
132615
- var init_live_outsider_turns = __esm({
132616
- "../../apps/server/src/services/core/turn-power/live-outsider-turns.ts"() {
132617
- "use strict";
132618
- init_agent_home();
132619
- UNPLACED = "";
132620
- running = /* @__PURE__ */ new Map();
132621
- }
132622
- });
132623
-
132624
132851
  // ../../apps/server/src/services/session/turn-identity/durable-rekey.ts
132625
132852
  var init_durable_rekey = __esm({
132626
132853
  "../../apps/server/src/services/session/turn-identity/durable-rekey.ts"() {
@@ -134582,6 +134809,260 @@ var init_session_key_registry = __esm({
134582
134809
  }
134583
134810
  });
134584
134811
 
134812
+ // ../../apps/server/src/services/session/origin/outsider-turns.ts
134813
+ import { AsyncLocalStorage as AsyncLocalStorage5 } from "node:async_hooks";
134814
+ function noteLatest(sessionId, outsider) {
134815
+ const key = primaryOf(sessionId);
134816
+ latest.set(key, outsider);
134817
+ if (outsider) heard.add(key);
134818
+ }
134819
+ function isOutsiderOrigin(origin) {
134820
+ if (origin.kind === "room") return origin.externalAuthor;
134821
+ return OUTSIDER_ORIGIN_KINDS.has(origin.kind);
134822
+ }
134823
+ function noteTurnOrigin(sessionId, origin) {
134824
+ const messageId = holdingFor.getStore();
134825
+ if (messageId === void 0) {
134826
+ noteLatest(sessionId, isOutsiderOrigin(origin));
134827
+ return;
134828
+ }
134829
+ pending.set(messageId, isOutsiderOrigin(origin));
134830
+ if (pending.size > PENDING_MAX) pending.delete(pending.keys().next().value);
134831
+ }
134832
+ function noteChatHeardOutsider(sessionId) {
134833
+ heard.add(primaryOf(sessionId));
134834
+ }
134835
+ var OUTSIDER_ORIGIN_KINDS, latest, heard, pending, PENDING_MAX, holdingFor;
134836
+ var init_outsider_turns = __esm({
134837
+ "../../apps/server/src/services/session/origin/outsider-turns.ts"() {
134838
+ "use strict";
134839
+ init_session_key_registry();
134840
+ OUTSIDER_ORIGIN_KINDS = /* @__PURE__ */ new Set([
134841
+ "relay-binding",
134842
+ "outside-sender",
134843
+ "connector-event"
134844
+ ]);
134845
+ latest = /* @__PURE__ */ new Map();
134846
+ heard = /* @__PURE__ */ new Set();
134847
+ pending = /* @__PURE__ */ new Map();
134848
+ PENDING_MAX = 1e3;
134849
+ holdingFor = new AsyncLocalStorage5();
134850
+ }
134851
+ });
134852
+
134853
+ // ../../apps/server/src/services/core/turn-power/live-outsider-turns.ts
134854
+ function homeKey(dir, forAgent) {
134855
+ try {
134856
+ return homeOf(resolveAgentHome(dir, forAgent));
134857
+ } catch {
134858
+ return void 0;
134859
+ }
134860
+ }
134861
+ function countWhileRunning(place2, marks, events) {
134862
+ const key = homeKey(place2.cwd, place2.forAgent) ?? UNPLACED;
134863
+ return (async function* counted() {
134864
+ const token = { marks };
134865
+ const turns = running.get(key) ?? /* @__PURE__ */ new Set();
134866
+ turns.add(token);
134867
+ running.set(key, turns);
134868
+ try {
134869
+ yield* events;
134870
+ } finally {
134871
+ turns.delete(token);
134872
+ if (turns.size === 0 && running.get(key) === turns) running.delete(key);
134873
+ }
134874
+ })();
134875
+ }
134876
+ var UNPLACED, running;
134877
+ var init_live_outsider_turns = __esm({
134878
+ "../../apps/server/src/services/core/turn-power/live-outsider-turns.ts"() {
134879
+ "use strict";
134880
+ init_agent_home();
134881
+ UNPLACED = "";
134882
+ running = /* @__PURE__ */ new Map();
134883
+ }
134884
+ });
134885
+
134886
+ // ../../apps/server/src/services/core/turn-power/teammate-mark.ts
134887
+ function runsTeammateTurns(runtimeType) {
134888
+ return TEAMMATE_TURN_RUNTIMES.has(runtimeType);
134889
+ }
134890
+ function teammateRuntimeRefusal(runtimeType) {
134891
+ return `A teammate's message cannot start a turn on ${runtimeType} yet`;
134892
+ }
134893
+ function teammateTurnRefusal(runtimeType, origins) {
134894
+ if (!runsTeammateTurns(runtimeType)) return teammateRuntimeRefusal(runtimeType);
134895
+ const gate = spaceAllows;
134896
+ if (gate && origins.some((origin) => !gate(origin.roomId))) return TEAMMATE_LIMIT_REFUSAL;
134897
+ return null;
134898
+ }
134899
+ function teammateTurnOpts(opts) {
134900
+ const { additionalDirectories: _granted, ...rest } = opts ?? {};
134901
+ return {
134902
+ ...rest,
134903
+ teammate: true,
134904
+ unattended: true,
134905
+ permissionCeiling: withReadOnly(opts?.permissionCeiling),
134906
+ ...opts?.roomTurn ? { roomTurn: { ...opts.roomTurn, teammate: true, untrustedText: true } } : {}
134907
+ };
134908
+ }
134909
+ function withReadOnly(ceiling) {
134910
+ if (ceiling === void 0) return READ_ONLY_LEVEL;
134911
+ if (Array.isArray(ceiling) && ceiling.length === 0) return ["runtime-default", READ_ONLY_LEVEL];
134912
+ const bounds = Array.isArray(ceiling) ? ceiling : [ceiling];
134913
+ return [...bounds, READ_ONLY_LEVEL];
134914
+ }
134915
+ var TEAMMATE_TURN_RUNTIMES, TEAMMATE_LIMIT_REFUSAL, spaceAllows;
134916
+ var init_teammate_mark = __esm({
134917
+ "../../apps/server/src/services/core/turn-power/teammate-mark.ts"() {
134918
+ "use strict";
134919
+ init_permission_semantics();
134920
+ TEAMMATE_TURN_RUNTIMES = /* @__PURE__ */ new Set(["claude-code", "test-mode"]);
134921
+ TEAMMATE_LIMIT_REFUSAL = "This space reached its monthly limit for teammates, so this turn didn\u2019t run.";
134922
+ spaceAllows = null;
134923
+ }
134924
+ });
134925
+
134926
+ // ../../apps/server/src/services/core/turn-power/turn-marks.ts
134927
+ function presentKinds(marks) {
134928
+ return TURN_MARK_KINDS.filter((kind) => marks[kind] !== void 0);
134929
+ }
134930
+ function marksFrom(fields) {
134931
+ const kinds = presentKinds(fields);
134932
+ if (kinds.length === 0) return NO_MARKS;
134933
+ return Object.fromEntries(kinds.map((kind) => [kind, fields[kind]]));
134934
+ }
134935
+ function teammateOrigins(marks) {
134936
+ return marks.teammate ?? [];
134937
+ }
134938
+ function marksOfLevel(level) {
134939
+ return level === void 0 ? NO_MARKS : marksFrom(level);
134940
+ }
134941
+ function marksOfCeiling(ceiling) {
134942
+ if (!Array.isArray(ceiling)) {
134943
+ return ceiling === "runtime-default" ? UNKNOWN_SOURCE : marksOfLevel(ceiling);
134944
+ }
134945
+ const bounds = ceiling;
134946
+ if (bounds.length === 0) return UNKNOWN_SOURCE;
134947
+ return bounds.map(marksOfCeiling).reduce(mergeMarks, NO_MARKS);
134948
+ }
134949
+ function marksForTurn(opts) {
134950
+ const fromCeiling = opts?.permissionCeiling !== void 0 ? marksOfCeiling(opts.permissionCeiling) : NO_MARKS;
134951
+ return mergeMarks(
134952
+ fromCeiling,
134953
+ opts?.roomTurn?.outsiderInView === true ? { outsider: true } : NO_MARKS
134954
+ );
134955
+ }
134956
+ function mergeMarks(a2, b2) {
134957
+ const merged = {};
134958
+ for (const kind of TURN_MARK_KINDS) {
134959
+ const rules = RULES[kind];
134960
+ const value = rules.merge(a2[kind], b2[kind]);
134961
+ if (value !== void 0) merged[kind] = value;
134962
+ }
134963
+ return marksFrom(merged);
134964
+ }
134965
+ function hasMarks(marks) {
134966
+ return presentKinds(marks).length > 0;
134967
+ }
134968
+ function carriesAllMarks(receiver, sender) {
134969
+ return TURN_MARK_KINDS.every(
134970
+ (kind) => RULES[kind].covers(receiver[kind], sender[kind])
134971
+ );
134972
+ }
134973
+ function withMarks(level, marks) {
134974
+ const own2 = marksOfLevel(level);
134975
+ if (carriesAllMarks(own2, marks)) return level;
134976
+ return { ...level, ...mergeMarks(own2, marks) };
134977
+ }
134978
+ async function* refused(reason) {
134979
+ yield* [];
134980
+ throw new Error(reason);
134981
+ }
134982
+ function placeOf(runtime, sessionId, opts) {
134983
+ let cwd = opts?.cwd ?? opts?.roomTurn?.cwd;
134984
+ try {
134985
+ cwd ??= runtime.getSessionCwd?.(sessionId);
134986
+ } catch {
134987
+ }
134988
+ return { cwd, forAgent: turnAgentOf(opts) };
134989
+ }
134990
+ function applyTurnMarks(runtime, marksOfSession, recordRefused) {
134991
+ const places = /* @__PURE__ */ new Map();
134992
+ function markedTurn(target, sessionId, opts, start) {
134993
+ const marks = marksForTurn(opts);
134994
+ if (!hasMarks(marks)) return start(opts);
134995
+ if (marks.outsider === true) noteChatHeardOutsider(sessionId);
134996
+ let sent = opts;
134997
+ if (marks.teammate !== void 0) {
134998
+ sent = teammateTurnOpts(opts);
134999
+ const refusal2 = teammateTurnRefusal(target.type, marks.teammate);
135000
+ if (refusal2 !== null) {
135001
+ recordRefused?.(sessionId, sent);
135002
+ return refused(refusal2);
135003
+ }
135004
+ }
135005
+ const place2 = placeOf(target, sessionId, sent);
135006
+ places.delete(sessionId);
135007
+ places.set(sessionId, place2);
135008
+ if (places.size > PLACE_MEMORY) places.delete(places.keys().next().value);
135009
+ return countWhileRunning(place2, marks, start(sent));
135010
+ }
135011
+ return new Proxy(runtime, {
135012
+ get(target, prop) {
135013
+ if ((prop === "sendMessage" || prop === "executeCommandIntent") && typeof target[prop] === "function") {
135014
+ const start = target[prop].bind(target);
135015
+ return (sessionId, input4, opts) => markedTurn(target, sessionId, opts, (sent) => start(sessionId, input4, sent));
135016
+ }
135017
+ if (prop === "onRuntimeTurn" && typeof target.onRuntimeTurn === "function") {
135018
+ const subscribe = target.onRuntimeTurn.bind(target);
135019
+ return (listener) => subscribe((sessionId, events) => {
135020
+ const marks = marksOfSession(sessionId);
135021
+ listener(
135022
+ sessionId,
135023
+ hasMarks(marks) ? countWhileRunning(
135024
+ places.get(sessionId) ?? placeOf(target, sessionId, void 0),
135025
+ marks,
135026
+ events
135027
+ ) : events
135028
+ );
135029
+ });
135030
+ }
135031
+ const value = Reflect.get(target, prop, target);
135032
+ return typeof value === "function" ? value.bind(target) : value;
135033
+ }
135034
+ });
135035
+ }
135036
+ var TURN_MARK_KINDS, NO_MARKS, PLACE_MEMORY, UNKNOWN_SOURCE, sameOrigin, RULES;
135037
+ var init_turn_marks = __esm({
135038
+ "../../apps/server/src/services/core/turn-power/turn-marks.ts"() {
135039
+ "use strict";
135040
+ init_permission_semantics();
135041
+ init_agent_home();
135042
+ init_outsider_turns();
135043
+ init_live_outsider_turns();
135044
+ init_teammate_mark();
135045
+ TURN_MARK_KINDS = [
135046
+ "outsider",
135047
+ "teammate"
135048
+ ];
135049
+ NO_MARKS = Object.freeze({});
135050
+ PLACE_MEMORY = 1e4;
135051
+ UNKNOWN_SOURCE = Object.freeze({ outsider: true });
135052
+ sameOrigin = (a2, b2) => a2.roomId === b2.roomId && a2.authorId === b2.authorId;
135053
+ RULES = {
135054
+ outsider: {
135055
+ merge: (a2, b2) => a2 === true || b2 === true ? true : void 0,
135056
+ covers: (outer, inner) => inner !== true || outer === true
135057
+ },
135058
+ teammate: {
135059
+ merge: (a2, b2) => mergeTeammateOrigins(a2, b2),
135060
+ covers: (outer, inner) => inner === void 0 || outer !== void 0 && inner.every((origin) => outer.some((o3) => sameOrigin(o3, origin)))
135061
+ }
135062
+ };
135063
+ }
135064
+ });
135065
+
134585
135066
  // ../../apps/server/src/services/core/turn-power/turn-levels.ts
134586
135067
  function remember(map4, key, level) {
134587
135068
  map4.delete(key);
@@ -134591,10 +135072,11 @@ function remember(map4, key, level) {
134591
135072
  if (oldest !== void 0) map4.delete(oldest);
134592
135073
  }
134593
135074
  }
135075
+ function lastTurnLevelOf(sessionId) {
135076
+ return turnLevels.get(sessionId);
135077
+ }
134594
135078
  function levelForTurn(runtime, stored, opts) {
134595
- const level = powerForTurn(runtime, stored, opts);
134596
- const outsider = opts?.roomTurn?.outsiderInView === true || opts?.permissionCeiling !== void 0 && ceilingCarriesOutsider(opts.permissionCeiling);
134597
- return outsider && !level.outsider ? { ...level, outsider: true } : level;
135079
+ return withMarks(powerForTurn(runtime, stored, opts), marksForTurn(opts));
134598
135080
  }
134599
135081
  function powerForTurn(runtime, stored, opts) {
134600
135082
  let declared;
@@ -134610,18 +135092,26 @@ function powerForTurn(runtime, stored, opts) {
134610
135092
  const base = known.length > 0 ? known.reduce(stricterLevel) : levelOfMode(declared, declared.default) ?? READ_ONLY_LEVEL;
134611
135093
  return opts?.permissionCeiling !== void 0 ? stricterLevel(base, resolveCeilingLevel(declared, opts.permissionCeiling)) : base;
134612
135094
  }
134613
- function placeOf(runtime, sessionId, opts) {
134614
- let cwd = opts?.cwd ?? opts?.roomTurn?.cwd;
134615
- try {
134616
- cwd ??= runtime.getSessionCwd?.(sessionId);
134617
- } catch {
134618
- }
134619
- return { cwd, forAgent: turnAgentOf(opts) };
134620
- }
134621
135095
  function recordTurnLevels(runtime, storedModeOf) {
135096
+ return applyTurnMarks(
135097
+ recordLevels(runtime, storedModeOf),
135098
+ (sessionId) => marksOfLevel(turnLevels.get(sessionId)),
135099
+ (sessionId, opts) => {
135100
+ let stored;
135101
+ try {
135102
+ stored = storedModeOf(sessionId);
135103
+ } catch {
135104
+ stored = void 0;
135105
+ }
135106
+ remember(turnLevels, sessionId, levelForTurn(runtime, stored, opts));
135107
+ }
135108
+ );
135109
+ }
135110
+ function recordLevels(runtime, storedModeOf) {
134622
135111
  return new Proxy(runtime, {
134623
135112
  get(target, prop) {
134624
- if (prop === "sendMessage") {
135113
+ if ((prop === "sendMessage" || prop === "executeCommandIntent") && typeof target[prop] === "function") {
135114
+ const start = target[prop].bind(target);
134625
135115
  return (sessionId, content, opts) => {
134626
135116
  let stored;
134627
135117
  try {
@@ -134629,8 +135119,7 @@ function recordTurnLevels(runtime, storedModeOf) {
134629
135119
  } catch {
134630
135120
  stored = void 0;
134631
135121
  }
134632
- const level = levelForTurn(target, stored, opts);
134633
- remember(turnLevels, sessionId, level);
135122
+ remember(turnLevels, sessionId, levelForTurn(target, stored, opts));
134634
135123
  const serial = ++nextTurnSerial;
134635
135124
  for (const id of /* @__PURE__ */ new Set([sessionId, primaryOf(sessionId)])) {
134636
135125
  turnSerials.delete(id);
@@ -134639,47 +135128,26 @@ function recordTurnLevels(runtime, storedModeOf) {
134639
135128
  while (turnSerials.size > TURN_LEVEL_MEMORY) {
134640
135129
  turnSerials.delete(turnSerials.keys().next().value);
134641
135130
  }
134642
- const events = target.sendMessage(sessionId, content, opts);
134643
- if (!level.outsider) return events;
134644
- const place2 = placeOf(target, sessionId, opts);
134645
- outsiderPlaces.delete(sessionId);
134646
- outsiderPlaces.set(sessionId, place2);
134647
- if (outsiderPlaces.size > TURN_LEVEL_MEMORY) {
134648
- outsiderPlaces.delete(outsiderPlaces.keys().next().value);
134649
- }
134650
- return countWhileRunning(place2, events);
135131
+ return start(sessionId, content, opts);
134651
135132
  };
134652
135133
  }
134653
- if (prop === "onRuntimeTurn" && typeof target.onRuntimeTurn === "function") {
134654
- const subscribe = target.onRuntimeTurn.bind(target);
134655
- return (listener) => subscribe(
134656
- (sessionId, events) => listener(
134657
- sessionId,
134658
- turnLevels.get(sessionId)?.outsider ? countWhileRunning(
134659
- outsiderPlaces.get(sessionId) ?? placeOf(target, sessionId, void 0),
134660
- events
134661
- ) : events
134662
- )
134663
- );
134664
- }
134665
135134
  const value = Reflect.get(target, prop, target);
134666
135135
  return typeof value === "function" ? value.bind(target) : value;
134667
135136
  }
134668
135137
  });
134669
135138
  }
134670
- var TURN_LEVEL_MEMORY, AUTO_MODE_ID2, AUTO_FALLBACK_MODE_ID, turnLevels, outsiderPlaces, turnSerials, nextTurnSerial;
135139
+ var TURN_LEVEL_MEMORY, AUTO_MODE_ID2, AUTO_FALLBACK_MODE_ID, turnLevels, turnSerials, nextTurnSerial;
134671
135140
  var init_turn_levels = __esm({
134672
135141
  "../../apps/server/src/services/core/turn-power/turn-levels.ts"() {
134673
135142
  "use strict";
134674
- init_agent_home();
134675
- init_live_outsider_turns();
135143
+ init_turn_marks();
134676
135144
  init_session_key_registry();
135145
+ init_outsider_turns();
134677
135146
  init_permission_semantics();
134678
135147
  TURN_LEVEL_MEMORY = 1e4;
134679
135148
  AUTO_MODE_ID2 = "auto";
134680
135149
  AUTO_FALLBACK_MODE_ID = "default";
134681
135150
  turnLevels = /* @__PURE__ */ new Map();
134682
- outsiderPlaces = /* @__PURE__ */ new Map();
134683
135151
  turnSerials = /* @__PURE__ */ new Map();
134684
135152
  nextTurnSerial = 0;
134685
135153
  }
@@ -134792,38 +135260,6 @@ var init_resolve_session_defaults = __esm({
134792
135260
  }
134793
135261
  });
134794
135262
 
134795
- // ../../apps/server/src/services/session/origin/outsider-turns.ts
134796
- import { AsyncLocalStorage as AsyncLocalStorage5 } from "node:async_hooks";
134797
- function isOutsiderOrigin(origin) {
134798
- if (origin.kind === "room") return origin.externalAuthor;
134799
- return OUTSIDER_ORIGIN_KINDS.has(origin.kind);
134800
- }
134801
- function noteTurnOrigin(sessionId, origin) {
134802
- const messageId = holdingFor.getStore();
134803
- if (messageId === void 0) {
134804
- latest.set(primaryOf(sessionId), isOutsiderOrigin(origin));
134805
- return;
134806
- }
134807
- pending.set(messageId, isOutsiderOrigin(origin));
134808
- if (pending.size > PENDING_MAX) pending.delete(pending.keys().next().value);
134809
- }
134810
- var OUTSIDER_ORIGIN_KINDS, latest, pending, PENDING_MAX, holdingFor;
134811
- var init_outsider_turns = __esm({
134812
- "../../apps/server/src/services/session/origin/outsider-turns.ts"() {
134813
- "use strict";
134814
- init_session_key_registry();
134815
- OUTSIDER_ORIGIN_KINDS = /* @__PURE__ */ new Set([
134816
- "relay-binding",
134817
- "outside-sender",
134818
- "connector-event"
134819
- ]);
134820
- latest = /* @__PURE__ */ new Map();
134821
- pending = /* @__PURE__ */ new Map();
134822
- PENDING_MAX = 1e3;
134823
- holdingFor = new AsyncLocalStorage5();
134824
- }
134825
- });
134826
-
134827
135263
  // ../../apps/server/src/services/session/origin/turn-origin.ts
134828
135264
  function permissionSeedForOrigin(origin) {
134829
135265
  switch (origin.kind) {
@@ -134868,8 +135304,12 @@ function permissionSeedForOrigin(origin) {
134868
135304
  // own: the turn runs at the stricter of the two. On insert only, so an
134869
135305
  // existing chat a person set keeps what they chose. A person who later
134870
135306
  // types into it gets the same stop a chat of their own starts at.
135307
+ //
135308
+ // A message from a MARKED turn seeds nothing (DOR-3107, Security): the
135309
+ // chat it opens never inherits the agent's own level from a turn a
135310
+ // stranger's words reached.
134871
135311
  case "chat-message":
134872
- return "configured-stop-on-insert";
135312
+ return origin.marked ? "none" : "configured-stop-on-insert";
134873
135313
  // Everything below seeds nothing, for two different reasons.
134874
135314
  //
134875
135315
  // A schedule's power is already decided and already stored, on the schedule
@@ -135093,6 +135533,16 @@ var init_otel = __esm({
135093
135533
  });
135094
135534
 
135095
135535
  // ../../apps/server/src/services/observability/ai-metadata.ts
135536
+ function turnCostOf(runtimeType, state) {
135537
+ return state.turnCostUsd ?? (RUNNING_COST_RUNTIMES.has(runtimeType) ? void 0 : state.costUsd);
135538
+ }
135539
+ function turnCostReader(runtimeType) {
135540
+ const state = {};
135541
+ return {
135542
+ see: (event) => harvestEvent(event, state),
135543
+ costUsd: () => turnCostOf(runtimeType, state)
135544
+ };
135545
+ }
135096
135546
  function isAiObservabilityActive() {
135097
135547
  return isTracingEnabled() || bridge !== null;
135098
135548
  }
@@ -135111,7 +135561,7 @@ async function* observeRuntimeTurn(runtimeType, sessionId, source) {
135111
135561
  [ATTR.RUNTIME]: runtimeType,
135112
135562
  [ATTR.SESSION_ID]: sessionId
135113
135563
  }) : null;
135114
- const startedAt = Date.now();
135564
+ const startedAt2 = Date.now();
135115
135565
  const state = {};
135116
135566
  let count2 = 0;
135117
135567
  try {
@@ -135124,8 +135574,8 @@ async function* observeRuntimeTurn(runtimeType, sessionId, source) {
135124
135574
  span?.markError();
135125
135575
  throw err;
135126
135576
  } finally {
135127
- const latencyMs = Date.now() - startedAt;
135128
- const costUsd = state.turnCostUsd ?? (RUNNING_COST_RUNTIMES.has(runtimeType) ? void 0 : state.costUsd);
135577
+ const latencyMs = Date.now() - startedAt2;
135578
+ const costUsd = turnCostOf(runtimeType, state);
135129
135579
  if (span) {
135130
135580
  span.setAttr(ATTR.EVENT_COUNT, count2);
135131
135581
  span.setAttr(ATTR.GEN_AI_SYSTEM, runtimeType);
@@ -135310,7 +135760,7 @@ function accountOf(runtime, sessionId) {
135310
135760
  }
135311
135761
  }
135312
135762
  async function* watchTurn(runtime, sessionId, source) {
135313
- const startedAt = Date.now();
135763
+ const startedAt2 = Date.now();
135314
135764
  let sawAuthError = false;
135315
135765
  let reachedProvider = false;
135316
135766
  try {
@@ -135336,7 +135786,7 @@ async function* watchTurn(runtime, sessionId, source) {
135336
135786
  throw err;
135337
135787
  }
135338
135788
  if (!sawAuthError && reachedProvider) {
135339
- noteSigninRecovery(runtime.type, accountOf(runtime, sessionId), startedAt);
135789
+ noteSigninRecovery(runtime.type, accountOf(runtime, sessionId), startedAt2);
135340
135790
  }
135341
135791
  }
135342
135792
  function watchRuntimeSignin(runtime) {
@@ -136244,6 +136694,93 @@ var init_hold_during_turn = __esm({
136244
136694
  }
136245
136695
  });
136246
136696
 
136697
+ // ../../apps/server/src/services/core/turn-power/teammate-turn-cost.ts
136698
+ function meterTeammateTurns(runtime) {
136699
+ return new Proxy(runtime, {
136700
+ get(target, prop) {
136701
+ if ((prop === "sendMessage" || prop === "executeCommandIntent") && typeof target[prop] === "function") {
136702
+ const start = target[prop].bind(target);
136703
+ return (sessionId, input4, opts) => {
136704
+ const turn = start(sessionId, input4, opts);
136705
+ const rooms2 = teammateRoomsOf(opts);
136706
+ return rooms2.length === 0 ? turn : metered(target.type, rooms2, turn);
136707
+ };
136708
+ }
136709
+ if (prop === "onRuntimeTurn" && typeof target.onRuntimeTurn === "function") {
136710
+ const subscribe = target.onRuntimeTurn.bind(target);
136711
+ return (listener) => subscribe((sessionId, events) => {
136712
+ const rooms2 = sessionTeammateRooms(sessionId);
136713
+ listener(
136714
+ sessionId,
136715
+ rooms2.length === 0 ? events : metered(target.type, rooms2, toGenerator(events))
136716
+ );
136717
+ });
136718
+ }
136719
+ const value = Reflect.get(target, prop, target);
136720
+ return typeof value === "function" ? value.bind(target) : value;
136721
+ }
136722
+ });
136723
+ }
136724
+ function sessionTeammateRooms(sessionId) {
136725
+ const rooms2 = teammateOrigins(marksOfLevel(lastTurnLevelOf(sessionId))).map((o3) => o3.roomId);
136726
+ return [...new Set(rooms2)];
136727
+ }
136728
+ async function* toGenerator(events) {
136729
+ yield* events;
136730
+ }
136731
+ function teammateRoomsOf(opts) {
136732
+ const rooms2 = teammateOrigins(marksForTurn(opts)).map((origin) => origin.roomId);
136733
+ if (opts?.roomTurn?.teammate === true) rooms2.push(opts.roomTurn.roomId);
136734
+ return [...new Set(rooms2)];
136735
+ }
136736
+ function answered(event) {
136737
+ if (event.type === "text_delta" || event.type === "tool_call_start") return true;
136738
+ if (event.type !== "session_status") return false;
136739
+ const data = event.data;
136740
+ return ["turnInputTokens", "turnOutputTokens", "turnCostUsd", "costUsd"].some(
136741
+ (field) => typeof data[field] === "number"
136742
+ );
136743
+ }
136744
+ async function* metered(runtimeType, rooms2, source) {
136745
+ const cost = turnCostReader(runtimeType);
136746
+ let ran = false;
136747
+ let failed = false;
136748
+ try {
136749
+ for await (const event of source) {
136750
+ cost.see(event);
136751
+ if (answered(event)) ran = true;
136752
+ else if (event.type === "error") failed = true;
136753
+ yield event;
136754
+ }
136755
+ } catch (error63) {
136756
+ failed = true;
136757
+ throw error63;
136758
+ } finally {
136759
+ const costUsd = failed && !ran ? 0 : cost.costUsd();
136760
+ for (const roomId of rooms2) {
136761
+ try {
136762
+ sink2?.({ roomId, costUsd });
136763
+ } catch (error63) {
136764
+ logger.warn("[teammate-turn-cost] Could not count a teammate turn", {
136765
+ roomId,
136766
+ error: error63 instanceof Error ? error63.message : String(error63)
136767
+ });
136768
+ }
136769
+ }
136770
+ }
136771
+ }
136772
+ var sink2;
136773
+ var init_teammate_turn_cost = __esm({
136774
+ "../../apps/server/src/services/core/turn-power/teammate-turn-cost.ts"() {
136775
+ "use strict";
136776
+ init_logger();
136777
+ init_ai_metadata();
136778
+ init_turn_marks();
136779
+ init_turn_levels();
136780
+ sink2 = null;
136781
+ }
136782
+ });
136783
+
136247
136784
  // ../../apps/server/src/services/runtimes/shared/dorkos-tool-names.ts
136248
136785
  var DORKOS_MCP_SERVER_NAME, CODEX_DORKOS_TOOL_PREFIX, OPENCODE_DORKOS_TOOL_PREFIX, CLAUDE_CODE_DORKOS_TOOL_PREFIX;
136249
136786
  var init_dorkos_tool_names = __esm({
@@ -137219,7 +137756,7 @@ async function* untilPaused(runtime, pauses, turn, events) {
137219
137756
  yield event;
137220
137757
  }
137221
137758
  }
137222
- function refused(error63) {
137759
+ function refused2(error63) {
137223
137760
  return (async function* () {
137224
137761
  yield* [];
137225
137762
  throw error63;
@@ -137238,7 +137775,7 @@ function holdOrRun(runtime, sessionId, opts, run) {
137238
137775
  const paused2 = pauses.pausedAgentOfSession(sessionId, storedCwdOf(runtime, sessionId), opts);
137239
137776
  if (paused2) {
137240
137777
  pauses.recordHeld(paused2, { via: "turn", sessionId, runtime: runtime.type });
137241
- return refused(new AgentPausedError(paused2));
137778
+ return refused2(new AgentPausedError(paused2));
137242
137779
  }
137243
137780
  const turn = {
137244
137781
  sessionId,
@@ -137332,7 +137869,11 @@ var init_hold_paused_turns = __esm({
137332
137869
  function decorateRuntime(runtime, storedModeOf) {
137333
137870
  return holdPausedAgents(
137334
137871
  holdAwakeDuringTurns(
137335
- recordToolUse(watchRuntimeSignin(traceRuntime(recordTurnLevels(runtime, storedModeOf)))),
137872
+ recordToolUse(
137873
+ watchRuntimeSignin(
137874
+ traceRuntime(meterTeammateTurns(recordTurnLevels(runtime, storedModeOf)))
137875
+ )
137876
+ ),
137336
137877
  keepAwakeService,
137337
137878
  (sessionId) => isSessionPaused(runtime, sessionId)
137338
137879
  )
@@ -137344,6 +137885,7 @@ var init_decorate_runtime = __esm({
137344
137885
  init_observability();
137345
137886
  init_hold_during_turn();
137346
137887
  init_turn_levels();
137888
+ init_teammate_turn_cost();
137347
137889
  init_record_tool_use();
137348
137890
  init_hold_paused_turns();
137349
137891
  init_keep_awake_service();
@@ -138861,11 +139403,11 @@ function createProjectRootResolver(overrides = {}) {
138861
139403
  const previousMisses = byCwd.get(key)?.misses ?? 0;
138862
139404
  const entry = {
138863
139405
  misses: previousMisses,
138864
- root: lookups.run(() => lookUp(key)).then(({ root, answered }) => {
139406
+ root: lookups.run(() => lookUp(key)).then(({ root, answered: answered2 }) => {
138865
139407
  entry.settled = { root };
138866
139408
  if (root === null) {
138867
- if (answered) entry.misses = previousMisses + 1;
138868
- entry.retryAt = deps.now() + (answered ? negativeTtl(entry.misses) : NEGATIVE_ROOT_TTL_MS);
139409
+ if (answered2) entry.misses = previousMisses + 1;
139410
+ entry.retryAt = deps.now() + (answered2 ? negativeTtl(entry.misses) : NEGATIVE_ROOT_TTL_MS);
138869
139411
  }
138870
139412
  return root;
138871
139413
  })
@@ -140823,57 +141365,57 @@ function isHookProjectionApproved(request, decisions = storedHookDecisions()) {
140823
141365
  function isHookProjectionRefused(request, decisions = storedHookDecisions()) {
140824
141366
  return decisions.refused.includes(hookApprovalEntry(request));
140825
141367
  }
140826
- function writeDecisions(reason, approved, refused2) {
141368
+ function writeDecisions(reason, approved, refused3) {
140827
141369
  const harness = configManager.get("harness");
140828
141370
  const sameApproved = approved.length === harness.approvedHooks.length && approved.every((entry, i2) => entry === harness.approvedHooks[i2]);
140829
- const sameRefused = refused2.length === harness.refusedHooks.length && refused2.every((entry, i2) => entry === harness.refusedHooks[i2]);
141371
+ const sameRefused = refused3.length === harness.refusedHooks.length && refused3.every((entry, i2) => entry === harness.refusedHooks[i2]);
140830
141372
  if (sameApproved && sameRefused) return;
140831
- configManager.set("harness", { ...harness, approvedHooks: approved, refusedHooks: refused2 });
141373
+ configManager.set("harness", { ...harness, approvedHooks: approved, refusedHooks: refused3 });
140832
141374
  logConfigWrite(reason, "harness", harness, configManager.get("harness"));
140833
141375
  }
140834
141376
  function recordHookApproval(request) {
140835
141377
  recordApprovedEntry(hookApprovalEntry(request), "approving a package hook");
140836
141378
  }
140837
141379
  function recordApprovedEntry(entry, reason, replacing = () => false) {
140838
- const { approved, refused: refused2 } = storedHookDecisions();
141380
+ const { approved, refused: refused3 } = storedHookDecisions();
140839
141381
  const kept = approved.filter((stored) => stored === entry || !replacing(stored));
140840
141382
  writeDecisions(
140841
141383
  reason,
140842
141384
  kept.includes(entry) ? kept : [...kept, entry],
140843
- refused2.filter((stored) => stored !== entry)
141385
+ refused3.filter((stored) => stored !== entry)
140844
141386
  );
140845
141387
  }
140846
141388
  function forgetApprovedEntries(matches, reason) {
140847
- const { approved, refused: refused2 } = storedHookDecisions();
141389
+ const { approved, refused: refused3 } = storedHookDecisions();
140848
141390
  writeDecisions(
140849
141391
  reason,
140850
141392
  approved.filter((stored) => !matches(stored)),
140851
- [...refused2]
141393
+ [...refused3]
140852
141394
  );
140853
141395
  }
140854
141396
  function recordRefusedEntry(entry, reason) {
140855
- const { approved, refused: refused2 } = storedHookDecisions();
141397
+ const { approved, refused: refused3 } = storedHookDecisions();
140856
141398
  writeDecisions(
140857
141399
  reason,
140858
141400
  approved.filter((stored) => stored !== entry),
140859
- refused2.includes(entry) ? [...refused2] : [...refused2, entry]
141401
+ refused3.includes(entry) ? [...refused3] : [...refused3, entry]
140860
141402
  );
140861
141403
  }
140862
141404
  function recordHookRefusal(request) {
140863
141405
  recordRefusedEntry(hookApprovalEntry(request), "turning down a package hook");
140864
141406
  }
140865
141407
  function revokeHookDecisions(packageName) {
140866
- const { approved, refused: refused2 } = storedHookDecisions();
141408
+ const { approved, refused: refused3 } = storedHookDecisions();
140867
141409
  const mine = (entry) => hookEntryPackageName(entry) === packageName;
140868
141410
  const removed = [
140869
141411
  ...approved.filter(mine).map((entry) => ({ entry, decision: "approved" })),
140870
- ...refused2.filter(mine).map((entry) => ({ entry, decision: "refused" }))
141412
+ ...refused3.filter(mine).map((entry) => ({ entry, decision: "refused" }))
140871
141413
  ];
140872
141414
  if (removed.length === 0) return [];
140873
141415
  writeDecisions(
140874
141416
  "revoking a package hook decision",
140875
141417
  approved.filter((entry) => !mine(entry)),
140876
- refused2.filter((entry) => !mine(entry))
141418
+ refused3.filter((entry) => !mine(entry))
140877
141419
  );
140878
141420
  return removed;
140879
141421
  }
@@ -154332,7 +154874,7 @@ function parseHarnessHooksArgs(rawArgs) {
154332
154874
  return { list: Boolean(values2.list) || revoke === void 0, revoke };
154333
154875
  }
154334
154876
  async function listDecisions(dorkHome) {
154335
- const { approved, refused: refused2, unreadable } = await readStoredDecisions(dorkHome);
154877
+ const { approved, refused: refused3, unreadable } = await readStoredDecisions(dorkHome);
154336
154878
  if (unreadable !== void 0) {
154337
154879
  console.error(`DorkOS could not read ${configPathFor(dorkHome)}: ${unreadable}`);
154338
154880
  console.error(
@@ -154340,7 +154882,7 @@ async function listDecisions(dorkHome) {
154340
154882
  );
154341
154883
  return 1;
154342
154884
  }
154343
- if (approved.length === 0 && refused2.length === 0) {
154885
+ if (approved.length === 0 && refused3.length === 0) {
154344
154886
  console.log("No hook decisions stored yet.");
154345
154887
  console.log(
154346
154888
  " A package that ships hooks is held back until you allow it, and nothing here has been asked about."
@@ -154360,7 +154902,7 @@ async function listDecisions(dorkHome) {
154360
154902
  console.log(`Hook decisions stored in ${configPathFor(dorkHome)}:`);
154361
154903
  for (const [heading, entries] of [
154362
154904
  ["Allowed to run commands", approved],
154363
- ["Turned down", refused2]
154905
+ ["Turned down", refused3]
154364
154906
  ]) {
154365
154907
  if (entries.length === 0) continue;
154366
154908
  console.log("");
@@ -158085,7 +158627,7 @@ function createInstallationTransaction(configuration, dependencies, generation3)
158085
158627
  check4(bounds, options.signal);
158086
158628
  const candidate = reuse ? await fs40.bindExistingCandidate(reservation, attempt, reserved.installation) : await fs40.stageCandidate(reservation, attempt);
158087
158629
  require2(sameBinding(candidate.binding, binding) && candidate.reuse === reuse, "BINDING_MISMATCH");
158088
- const sink2 = fs40.createJobSink(reservation, attempt);
158630
+ const sink3 = fs40.createJobSink(reservation, attempt);
158089
158631
  let installer = {
158090
158632
  kind: "not-invoked"
158091
158633
  };
@@ -158098,7 +158640,7 @@ function createInstallationTransaction(configuration, dependencies, generation3)
158098
158640
  attempt,
158099
158641
  candidate,
158100
158642
  library,
158101
- sink: sink2,
158643
+ sink: sink3,
158102
158644
  signal: options.signal
158103
158645
  });
158104
158646
  const facts = jobReturned(run, "official-install", binding, bounds, [
@@ -158147,7 +158689,7 @@ function createInstallationTransaction(configuration, dependencies, generation3)
158147
158689
  attempt,
158148
158690
  candidate,
158149
158691
  library,
158150
- sink: sink2,
158692
+ sink: sink3,
158151
158693
  request,
158152
158694
  signal: options.signal
158153
158695
  });
@@ -162661,11 +163203,11 @@ function runProviderCommand(options) {
162661
163203
  if (code !== 0) {
162662
163204
  const errorOutput = Buffer.concat(stderrHead);
162663
163205
  const text3 = errorOutput.toString("utf8");
162664
- const refused2 = isProviderAccessRefusal(text3);
163206
+ const refused3 = isProviderAccessRefusal(text3);
162665
163207
  const keyKindLimited = isProviderKeyKindLimit(text3);
162666
163208
  errorOutput.fill(0);
162667
163209
  scrubStdout();
162668
- return reject(new ProviderCommandError("EXIT", refused2, keyKindLimited));
163210
+ return reject(new ProviderCommandError("EXIT", refused3, keyKindLimited));
162669
163211
  }
162670
163212
  const output2 = Buffer.concat(stdout3);
162671
163213
  try {
@@ -162713,12 +163255,12 @@ var init_provider_process = __esm({
162713
163255
  * @param refused - Whether the service definitely refused the credential.
162714
163256
  * @param keyKindLimited - Whether the endpoint does not serve this kind of key.
162715
163257
  */
162716
- constructor(code, refused2 = false, keyKindLimited = false) {
163258
+ constructor(code, refused3 = false, keyKindLimited = false) {
162717
163259
  super(`Provider command failed (${code})`);
162718
163260
  this.name = "ProviderCommandError";
162719
163261
  this.code = code;
162720
- this.refused = code === "EXIT" && refused2;
162721
- this.keyKindLimited = code === "EXIT" && !refused2 && keyKindLimited;
163262
+ this.refused = code === "EXIT" && refused3;
163263
+ this.keyKindLimited = code === "EXIT" && !refused3 && keyKindLimited;
162722
163264
  }
162723
163265
  };
162724
163266
  }
@@ -163760,7 +164302,7 @@ async function createFlyApp(options, appName, organizationSlug, network, readPro
163760
164302
  const app = parseInput2(ExternalIdentifierSchema, appName);
163761
164303
  const organization2 = parseInput2(ExternalIdentifierSchema, organizationSlug);
163762
164304
  const networkName = parseInput2(ExternalIdentifierSchema, network);
163763
- let refused2 = false;
164305
+ let refused3 = false;
163764
164306
  const created = await runProviderMutation({
163765
164307
  ...options,
163766
164308
  timeoutMs: writeDeadline(options.timeoutMs),
@@ -163792,14 +164334,14 @@ async function createFlyApp(options, appName, organizationSlug, network, readPro
163792
164334
  }
163793
164335
  }).catch((error63) => {
163794
164336
  if (!(error63 instanceof ProviderMutationError) || error63.code !== "ACCESS_DENIED") throw error63;
163795
- refused2 = true;
164337
+ refused3 = true;
163796
164338
  return null;
163797
164339
  });
163798
164340
  if (created) return created;
163799
164341
  const found = await readProvenance(app).catch(() => {
163800
164342
  throw new ProviderMutationError("CREATION_OUTCOME_UNCERTAIN");
163801
164343
  });
163802
- if (refused2 && found === FLY_APP_NOT_FOUND) {
164344
+ if (refused3 && found === FLY_APP_NOT_FOUND) {
163803
164345
  const listed2 = await readFlyApps(options, organization2).catch(() => null);
163804
164346
  if (listed2 !== null && !listed2.some((listedApp) => listedApp.name === app)) {
163805
164347
  throw new ProviderMutationError("ACCESS_DENIED");
@@ -169926,12 +170468,16 @@ async function runAuthEnable(deps) {
169926
170468
  io.error("A password is required.");
169927
170469
  return 1;
169928
170470
  }
170471
+ let signUpToken;
169929
170472
  try {
169930
- await auth.api.signUpEmail({ body: { name: "", email: email3, password } });
170473
+ ({ token: signUpToken } = await auth.api.signUpEmail({
170474
+ body: { name: "", email: email3, password }
170475
+ }));
169931
170476
  } catch (err) {
169932
170477
  io.error(`Could not create the owner account: ${errorMessage(err)}`);
169933
170478
  return 1;
169934
170479
  }
170480
+ if (signUpToken) await (await auth.$context).internalAdapter.deleteSession(signUpToken);
169935
170481
  configStore.setDot("auth.enabled", true);
169936
170482
  io.log(`Owner account created for ${email3}.`);
169937
170483
  io.log("This computer now asks for a password too. Other devices always do.");
@@ -169979,9 +170525,9 @@ async function runAuthResetPassword(deps) {
169979
170525
  io.log(
169980
170526
  `Signed out everywhere (${signedOut} ${signedOut === 1 ? "sign-in" : "sign-ins"} ended). Sign in again with the new password.`
169981
170527
  );
170528
+ io.log("A running DorkOS closes their open chat streams and terminals within a minute.");
169982
170529
  io.log("What this cannot cut off yet:");
169983
170530
  io.log(" - a window already open may keep working for up to 5 minutes;");
169984
- io.log(" - live chat streams and terminals stay open until they reconnect;");
169985
170531
  io.log(" - API keys keep working. Revoke them in Settings > Login & security.");
169986
170532
  return 0;
169987
170533
  }
@@ -170597,6 +171143,7 @@ var init_connection_copy = __esm({
170597
171143
  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;
170598
171144
  var init_connector_schemas = __esm({
170599
171145
  "../connector-providers/src/connector-schemas.ts"() {
171146
+ "use strict";
170600
171147
  init_zod();
170601
171148
  init_connection_copy();
170602
171149
  CONNECTOR_OPERATION_SELECTION_LIMIT = 1e5;
@@ -172563,6 +173110,40 @@ Examples:
172563
173110
  }
172564
173111
  });
172565
173112
 
173113
+ // src/commands/permission-undo-rows.ts
173114
+ function valueText(value, key, labels) {
173115
+ if (key.kind === "chat") return chatModeWord(value);
173116
+ if (value === null) return "not set";
173117
+ const words = key.kind === "files" ? labels.stop : key.kind === "preset" ? labels.preset : labels.state;
173118
+ return words[value] ?? value;
173119
+ }
173120
+ function settingText(key) {
173121
+ switch (key.kind) {
173122
+ case "area":
173123
+ return key.area;
173124
+ case "action":
173125
+ return key.action;
173126
+ case "files":
173127
+ return `files${key.runtime ? ` (${key.runtime})` : ""}`;
173128
+ case "chat":
173129
+ return `chat ${key.sessionId.slice(0, 8)}`;
173130
+ case "preset":
173131
+ return "preset";
173132
+ }
173133
+ }
173134
+ function skipRow(skip, labels) {
173135
+ const { change } = skip;
173136
+ const who = change.target.kind === "agent" ? change.target.agentName : "Everyone";
173137
+ const why = skip.reason === "changed-since" ? `changed since: now ${valueText(skip.current, change.key, labels)}` : skip.reason === "floor" ? change.key.kind === "chat" ? "would loosen the chat" : "would set something that always asks to Allowed" : "no longer exists";
173138
+ return [who, settingText(change.key), valueText(change.before, change.key, labels), why];
173139
+ }
173140
+ var init_permission_undo_rows = __esm({
173141
+ "src/commands/permission-undo-rows.ts"() {
173142
+ "use strict";
173143
+ init_permissions();
173144
+ }
173145
+ });
173146
+
172566
173147
  // src/commands/permissions.ts
172567
173148
  var permissions_exports = {};
172568
173149
  __export(permissions_exports, {
@@ -172855,18 +173436,6 @@ function defaultKeyOf(target, overview) {
172855
173436
  const area = overview.areas.find((a2) => a2.actions.some((action) => action.id === target.id));
172856
173437
  return area ? { kind: "action", action: target.id, area: area.id } : void 0;
172857
173438
  }
172858
- function valueText(value, key) {
172859
- if (value === null) return "not set";
172860
- const labels = key.kind === "files" ? STOP_LABEL : key.kind === "preset" ? PRESET_LABEL : STATE_LABEL;
172861
- return labels[value] ?? value;
172862
- }
172863
- function skipRow(skip) {
172864
- const { change } = skip;
172865
- const who = change.target.kind === "agent" ? change.target.agentName : "Everyone";
172866
- const what = change.key.kind === "area" ? change.key.area : change.key.kind === "action" ? change.key.action : change.key.kind === "files" ? `files${change.key.runtime ? ` (${change.key.runtime})` : ""}` : "preset";
172867
- const why = skip.reason === "changed-since" ? `changed since: now ${valueText(skip.current, change.key)}` : skip.reason === "floor" ? "would set something that always asks to Allowed" : "no longer exists";
172868
- return [who, what, valueText(change.before, change.key), why];
172869
- }
172870
173439
  async function runPermissionsUndo(rawArgs) {
172871
173440
  const { values: values2, positionals: positionals2 } = parseArgs27({
172872
173441
  args: rawArgs,
@@ -172899,7 +173468,12 @@ async function runPermissionsUndo(rawArgs) {
172899
173468
  );
172900
173469
  if (result2.skipped.length > 0) {
172901
173470
  console.log("Left alone:");
172902
- console.log(renderTable(["FOR", "SETTING", "WOULD SET", "WHY"], result2.skipped.map(skipRow)));
173471
+ console.log(
173472
+ renderTable(
173473
+ ["FOR", "SETTING", "WOULD SET", "WHY"],
173474
+ result2.skipped.map((skip) => skipRow(skip, UNDO_LABELS))
173475
+ )
173476
+ );
172903
173477
  }
172904
173478
  return 0;
172905
173479
  } catch (err) {
@@ -172907,7 +173481,12 @@ async function runPermissionsUndo(rawArgs) {
172907
173481
  if (err instanceof ApiError && err.body.code === "UNDO_CONFLICT") {
172908
173482
  const conflicts = err.body.conflicts ?? [];
172909
173483
  if (conflicts.length > 0) {
172910
- console.error(renderTable(["FOR", "SETTING", "WOULD SET", "WHY"], conflicts.map(skipRow)));
173484
+ console.error(
173485
+ renderTable(
173486
+ ["FOR", "SETTING", "WOULD SET", "WHY"],
173487
+ conflicts.map((skip) => skipRow(skip, UNDO_LABELS))
173488
+ )
173489
+ );
172911
173490
  }
172912
173491
  console.error(`Run \`dorkos permissions undo ${eventId} --force\` to set it back anyway.`);
172913
173492
  }
@@ -172999,11 +173578,12 @@ ${usage}`);
172999
173578
  return 1;
173000
173579
  }
173001
173580
  }
173002
- var PERMISSIONS_HELP, AGENT_PERMISSIONS_HELP, PRESET_LABEL, STOP_LABEL, STATE_LABEL;
173581
+ var PERMISSIONS_HELP, AGENT_PERMISSIONS_HELP, PRESET_LABEL, STOP_LABEL, STATE_LABEL, UNDO_LABELS;
173003
173582
  var init_permissions2 = __esm({
173004
173583
  "src/commands/permissions.ts"() {
173005
173584
  "use strict";
173006
173585
  init_permissions();
173586
+ init_permission_undo_rows();
173007
173587
  init_api_client();
173008
173588
  init_operator_output();
173009
173589
  PERMISSIONS_HELP = `Usage: dorkos permissions <subcommand> [options]
@@ -173070,6 +173650,7 @@ Examples:
173070
173650
  ask: "Ask",
173071
173651
  allowed: "Allowed"
173072
173652
  };
173653
+ UNDO_LABELS = { stop: STOP_LABEL, preset: PRESET_LABEL, state: STATE_LABEL };
173073
173654
  }
173074
173655
  });
173075
173656
 
@@ -176722,7 +177303,7 @@ if (process.argv[2] === "community") {
176722
177303
  );
176723
177304
  Object.assign(childEnv, credentialEnv.pickCommunityCredentialEnv(rawProcessEnv));
176724
177305
  const exitCode = await dispatcher.runCommunityDispatcher(process.argv.slice(3), {
176725
- cliVersion: "0.122.0",
177306
+ cliVersion: "0.124.0",
176726
177307
  dorkHome: DORK_HOME,
176727
177308
  processEnv: childEnv,
176728
177309
  parseRelease: (bytes) => releaseContract.parseCompatibleCommunityReleaseManifest(
@@ -176740,7 +177321,7 @@ if (process.argv[2] === "community") {
176740
177321
  process.exit(1);
176741
177322
  }
176742
177323
  }
176743
- var cliErrorReporter = initCliErrorReporting({ dorkHome: DORK_HOME, version: "0.122.0" });
177324
+ var cliErrorReporter = initCliErrorReporting({ dorkHome: DORK_HOME, version: "0.124.0" });
176744
177325
  var uninstallCliErrorHandlers = cliErrorReporter ? installCliErrorHandlers(cliErrorReporter) : void 0;
176745
177326
  if (process.argv[2] === "doctor") {
176746
177327
  process.env.DORK_HOME = DORK_HOME;
@@ -176750,7 +177331,7 @@ if (process.argv[2] === "doctor") {
176750
177331
  if (process.argv[2] === "feedback") {
176751
177332
  process.env.DORK_HOME = DORK_HOME;
176752
177333
  const { runFeedback: runFeedback2 } = await Promise.resolve().then(() => (init_feedback2(), feedback_exports));
176753
- process.exit(await runFeedback2(DORK_HOME, "0.122.0", process.argv.slice(3)));
177334
+ process.exit(await runFeedback2(DORK_HOME, "0.124.0", process.argv.slice(3)));
176754
177335
  }
176755
177336
  if (process.argv[2] === "auth") {
176756
177337
  process.env.DORK_HOME = DORK_HOME;
@@ -176849,7 +177430,7 @@ if (process.argv[2] === "agent" || process.argv[2] === "task" || process.argv[2]
176849
177430
  }
176850
177431
  }
176851
177432
  const { runVersionDispatcher: runVersionDispatcher2 } = await Promise.resolve().then(() => (init_version5(), version_exports));
176852
- process.exit(await runVersionDispatcher2("0.122.0", DORK_HOME, subArgs));
177433
+ process.exit(await runVersionDispatcher2("0.124.0", DORK_HOME, subArgs));
176853
177434
  }
176854
177435
  var { values, positionals } = parseCliArgs();
176855
177436
  if (positionals[0] && !knownCommands.has(positionals[0])) {
@@ -176943,14 +177524,14 @@ Examples:
176943
177524
  process.exit(0);
176944
177525
  }
176945
177526
  if (values.version) {
176946
- console.log("0.122.0");
177527
+ console.log("0.124.0");
176947
177528
  process.exit(0);
176948
177529
  }
176949
177530
  if (values["post-install-check"]) {
176950
177531
  const claudeFound = checkClaude();
176951
177532
  const coreExtensionsFound = checkCoreExtensions();
176952
177533
  const extensionsCompile = await checkExtensionCompilation();
176953
- console.log(`dorkos ${"0.122.0"}`);
177534
+ console.log(`dorkos ${"0.124.0"}`);
176954
177535
  if (!coreExtensionsFound) {
176955
177536
  console.log("Installation incomplete \u2014 bundled core extensions are missing.");
176956
177537
  }
@@ -177098,7 +177679,7 @@ if (fs39.existsSync(envPath)) {
177098
177679
  }
177099
177680
  uninstallCliErrorHandlers?.();
177100
177681
  process.env.DORKOS_CLI_ENTRYPOINT = fileURLToPath7(import.meta.url);
177101
- process.env.DORKOS_CLI_VERSION = "0.122.0";
177682
+ process.env.DORKOS_CLI_VERSION = "0.124.0";
177102
177683
  var server;
177103
177684
  try {
177104
177685
  server = await import("../server/index.js");
@@ -177123,7 +177704,7 @@ var ansiReset = "\x1B[0m";
177123
177704
  console.log("");
177124
177705
  console.log(`${purple}${logo}${ansiReset}`);
177125
177706
  console.log("");
177126
- console.log(` DorkOS v${"0.122.0"}`);
177707
+ console.log(` DorkOS v${"0.124.0"}`);
177127
177708
  console.log(` Local: ${link(localUrl, localUrl)}`);
177128
177709
  var nets = networkInterfaces();
177129
177710
  var networkUrl = null;
@@ -177149,9 +177730,9 @@ if (shouldOpenBrowser && process.stdin.isTTY) {
177149
177730
  const openCmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
177150
177731
  exec(`${openCmd} ${localUrl}`);
177151
177732
  }
177152
- checkForUpdate("0.122.0").then((latestVersion) => {
177733
+ checkForUpdate("0.124.0").then((latestVersion) => {
177153
177734
  if (latestVersion) {
177154
- const msg = `Update available: ${"0.122.0"} \u2192 ${latestVersion}`;
177735
+ const msg = `Update available: ${"0.124.0"} \u2192 ${latestVersion}`;
177155
177736
  const cmd = "Run npm install -g dorkos@latest to update";
177156
177737
  const width = Math.max(msg.length, cmd.length) + 6;
177157
177738
  const pad2 = (s2) => `\u2502 ${s2}${" ".repeat(width - s2.length - 6)} \u2502`;