dorkos 0.123.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 (316) hide show
  1. package/dist/bin/cli.js +775 -308
  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-BmtoPqP9.js → AboutPage-BH8Ndn3e.js} +1 -1
  5. package/dist/client/assets/{ActivityErrorState-CEzdFJiR.js → ActivityErrorState-K5Mew9EX.js} +1 -1
  6. package/dist/client/assets/{ActivityPage-mFYgTr3e.js → ActivityPage-BB20L5HU.js} +1 -1
  7. package/dist/client/assets/{ActivityRow-Bkc0kkim.js → ActivityRow-C5O7rnmS.js} +1 -1
  8. package/dist/client/assets/{AdapterIcon-DVgTrgnM.js → AdapterIcon-Bmybvrzb.js} +1 -1
  9. package/dist/client/assets/{AdapterSetupWizard-I03EluU5.js → AdapterSetupWizard-CkdV7Hhh.js} +2 -2
  10. package/dist/client/assets/{AgentOptionRow-DI1TzLaR.js → AgentOptionRow-BA2cDa7r.js} +1 -1
  11. package/dist/client/assets/{AgentPicker-CBYeBzjf.js → AgentPicker-CsIIPGZJ.js} +1 -1
  12. package/dist/client/assets/{AgentRequestCard-DQ6GYoeE.js → AgentRequestCard-0fOxvaoe.js} +3 -3
  13. package/dist/client/assets/{AppearancePage-62xIPNPn.js → AppearancePage-XOjkkoli.js} +1 -1
  14. package/dist/client/assets/{ApplyToOverridesDialog-CrqkeHQb.js → ApplyToOverridesDialog-CoO6V1G4.js} +1 -1
  15. package/dist/client/assets/{AttentionSignalRow-Coe5pYX6.js → AttentionSignalRow-CjjZobp7.js} +1 -1
  16. package/dist/client/assets/{BaseTanStackRouterDevtoolsPanel-B-iktbLX-D07cg75s.js → BaseTanStackRouterDevtoolsPanel-B-iktbLX-9TVHyRPJ.js} +1 -1
  17. package/dist/client/assets/{BindingDialog-DVyxVXZM.js → BindingDialog-DLoAQauL.js} +1 -1
  18. package/dist/client/assets/{BlintzCanvas-BmfkiUQJ.js → BlintzCanvas-CYHsXAcY.js} +3 -3
  19. package/dist/client/assets/{CanvasCsvContent-CRTr-AI7.js → CanvasCsvContent--Gr7Fe_U.js} +1 -1
  20. package/dist/client/assets/{CanvasFileContent-rOmY1s3T.js → CanvasFileContent-estXyAbr.js} +2 -2
  21. package/dist/client/assets/{CanvasModel3dContent-D7oRT6ey.js → CanvasModel3dContent-CkOo930M.js} +2 -2
  22. package/dist/client/assets/{ChatAppsOff-BmuOTq83.js → ChatAppsOff-D4L1zJVN.js} +1 -1
  23. package/dist/client/assets/{CodeMirrorDiff-DidSWwYJ.js → CodeMirrorDiff-DY_6ju-z.js} +1 -1
  24. package/dist/client/assets/{CodeMirrorEditor-BUAWGbRo.js → CodeMirrorEditor-BUoDBsBv.js} +1 -1
  25. package/dist/client/assets/{CommitmentList-uK4CKaz0.js → CommitmentList-wDkcVP9c.js} +1 -1
  26. package/dist/client/assets/{CommitmentsPage-BWITH1r2.js → CommitmentsPage-CzSM6b8R.js} +1 -1
  27. package/dist/client/assets/{ComputerResourceView-adgF_EZU.js → ComputerResourceView-cERD9H2L.js} +1 -1
  28. package/dist/client/assets/{ComputerViewer-D87LhxwL.js → ComputerViewer-rMcfbk2_.js} +1 -1
  29. package/dist/client/assets/{ConnectionAccessLists-BFEFqcSZ.js → ConnectionAccessLists-f7QeQbQo.js} +1 -1
  30. package/dist/client/assets/{ConnectionsPage-Cd_cLoSY.js → ConnectionsPage-BmjtA6pw.js} +2 -2
  31. package/dist/client/assets/{ConventionPage-BSztD-gU.js → ConventionPage-CH-ah6nI.js} +1 -1
  32. package/dist/client/assets/{ExtensionPageRoute-BSge6XRv.js → ExtensionPageRoute-CJIxa6ST.js} +2 -2
  33. package/dist/client/assets/{FloatingTanStackRouterDevtools-CqogiFob-TO2CUPG0.js → FloatingTanStackRouterDevtools-CqogiFob-BP7EJ2JL.js} +1 -1
  34. package/dist/client/assets/HandlePage-Cg8H3mQS.js +1 -0
  35. package/dist/client/assets/{HeartbeatPage-DIJzdOhj.js → HeartbeatPage-BUsf-qrU.js} +1 -1
  36. package/dist/client/assets/{KeyEntry-DJnzW3Mu.js → KeyEntry-C2kWdN8q.js} +1 -1
  37. package/dist/client/assets/{LexicalField-BxzNvIjJ.js → LexicalField-CR8ulsI_.js} +1 -1
  38. package/dist/client/assets/{ManagesPage-BQj8KbYA.js → ManagesPage-DTtsIOGi.js} +1 -1
  39. package/dist/client/assets/{Marketplace-CIG5_a_H.js → Marketplace-iaV5XAzv.js} +2 -2
  40. package/dist/client/assets/{MarketplaceSourcesView-16HKvFK-.js → MarketplaceSourcesView-6tgzUfFj.js} +1 -1
  41. package/dist/client/assets/{McpAppFrame-5xlga1jD.js → McpAppFrame-C7eYYdI9.js} +1 -1
  42. package/dist/client/assets/McpSigninBody-BDyGbJ7I.js +1 -0
  43. package/dist/client/assets/{Model3dViewer-CQ0sA_kr.js → Model3dViewer-BujDNuVS.js} +1 -1
  44. package/dist/client/assets/NamePage-Bx8T98OF.js +1 -0
  45. package/dist/client/assets/{NewDirectMessageMenu-D092y0K9.js → NewDirectMessageMenu-D4e-z2Jt.js} +1 -1
  46. package/dist/client/assets/{NotificationsPage-CskOPdhh.js → NotificationsPage-CkDeTaJp.js} +1 -1
  47. package/dist/client/assets/{OpenMeshSwitch-BHRm328L.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-XuPOSYll.js → PermissionsPage-f4QaX8oM.js} +1 -1
  51. package/dist/client/assets/{PersonalityPopover-BrZjxakx.js → PersonalityPopover-BkZruwF-.js} +1 -1
  52. package/dist/client/assets/PhotoPage-CmrOIRjf.js +1 -0
  53. package/dist/client/assets/{PreviewRefusedNotice-BANdpT9O.js → PreviewRefusedNotice-BXC2K0tx.js} +1 -1
  54. package/dist/client/assets/{ProfileFields-Dp68ebW9.js → ProfileFields-BebX5oiv.js} +1 -1
  55. package/dist/client/assets/{ProfilePanelContainer-BKwGdI90.js → ProfilePanelContainer-DZoL65zQ.js} +1 -1
  56. package/dist/client/assets/{ProfileRolePicker-ClOdfLda.js → ProfileRolePicker-D9H7wsuT.js} +1 -1
  57. package/dist/client/assets/{PromptSuggestionChips-zcW4UJ_O.js → PromptSuggestionChips-B5fDmc-g.js} +1 -1
  58. package/dist/client/assets/{ReportsToPopover-BwDVGqFg.js → ReportsToPopover-uVYhSqj7.js} +1 -1
  59. package/dist/client/assets/{RoomSurface-CSKIvyHH.js → RoomSurface-Bg5WV4Ep.js} +7 -7
  60. package/dist/client/assets/{RoomsPage-CAvrRbPk.js → RoomsPage-yflYFulU.js} +1 -1
  61. package/dist/client/assets/{RunsOnPopover-CQ4t9EZ-.js → RunsOnPopover-DtGrX1Vq.js} +1 -1
  62. package/dist/client/assets/{RuntimeConnectFlow--fVpIf0B.js → RuntimeConnectFlow-DjReuQ-T.js} +1 -1
  63. package/dist/client/assets/{RuntimeSetupDialog-COpyPrqL.js → RuntimeSetupDialog-Cr4GRi8c.js} +1 -1
  64. package/dist/client/assets/{SeenDevices-BPw3UgjX.js → SeenDevices-SPWkdzoK.js} +3 -3
  65. package/dist/client/assets/{SessionsPage-FDyYzuXs.js → SessionsPage-BWu-en78.js} +1 -1
  66. package/dist/client/assets/SettingsDialog-_dEXUhHe.js +12 -0
  67. package/dist/client/assets/{SkillsPage-PLXEY0LB.js → SkillsPage-BdUb9SZy.js} +1 -1
  68. package/dist/client/assets/TaskDialogWrapper-qYJPEoSR.js +1 -0
  69. package/dist/client/assets/{TasksEmptyState-8RZxhRh6.js → TasksEmptyState-Bgcg9vxF.js} +2 -2
  70. package/dist/client/assets/{TasksPage-C-EtQXKb.js → TasksPage-Ch5W2WQS.js} +1 -1
  71. package/dist/client/assets/{TeamComputerEntry-qx_19Htj.js → TeamComputerEntry-CPwSIMRw.js} +1 -1
  72. package/dist/client/assets/ToolsPage-Idimrn3o.js +2 -0
  73. package/dist/client/assets/{TopologyGraph-1wtG1BE9.js → TopologyGraph-I4_mkMHM.js} +14 -14
  74. package/dist/client/assets/{TourHost-C664E8OY.js → TourHost-BPaSwh9I.js} +1 -1
  75. package/dist/client/assets/{UnlinkDialog-Di1oBFA_.js → UnlinkDialog-BUWZUu5P.js} +1 -1
  76. package/dist/client/assets/{WidgetErrorCard-BfgGzyqg.js → WidgetErrorCard-cS8yMCxU.js} +3 -3
  77. package/dist/client/assets/_shell-ClVN2pUj.js +80 -0
  78. package/dist/client/assets/{_shell._home-Hz78BY6-.js → _shell._home-DCA5k-jb.js} +1 -1
  79. package/dist/client/assets/{_shell._home.activity-BxvI0gkw.js → _shell._home.activity-BX4nFLna.js} +1 -1
  80. package/dist/client/assets/{_shell._home.index-Cqq81f3P.js → _shell._home.index-C8t8cw72.js} +1 -1
  81. package/dist/client/assets/{_shell._home.tasks-Cth56CwC.js → _shell._home.tasks-BgUeEvhK.js} +1 -1
  82. package/dist/client/assets/{_shell._home.workspaces-DkoOJSWz.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-BTxHdsfb.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-ZxGwa39m.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-CzqPVMdw.js → abnfDiagram-WEYOIA3C-CrvoN15x.js} +1 -1
  93. package/dist/client/assets/{access-copy-Dj09Xk4b.js → access-copy-B3yNZ7Gz.js} +1 -1
  94. package/dist/client/assets/{arc-Bgy7ExYl.js → arc-CuT6QA_y.js} +1 -1
  95. package/dist/client/assets/{architectureDiagram-ZHVYKT53-DYfb2p9r.js → architectureDiagram-ZHVYKT53-CPXCZ9H4.js} +1 -1
  96. package/dist/client/assets/{banner-dlsHTWSf.js → banner-DRumuw3F.js} +1 -1
  97. package/dist/client/assets/{blockDiagram-RJAE7QA3-BkOzLL8s.js → blockDiagram-RJAE7QA3-CM0rka9p.js} +1 -1
  98. package/dist/client/assets/{c4Diagram-XDPPPE54-CsZm4qpD.js → c4Diagram-XDPPPE54-D4j2cXRy.js} +1 -1
  99. package/dist/client/assets/{card-Dj6ZfRgu.js → card-B3CtfC3R.js} +1 -1
  100. package/dist/client/assets/channel-DjBlTcCV.js +1 -0
  101. package/dist/client/assets/{chunk-2E7WHVMD-GA96Jfps.js → chunk-2E7WHVMD-KGyqhVpO.js} +1 -1
  102. package/dist/client/assets/{chunk-2Q5K7J3B-CW2i0IkT.js → chunk-2Q5K7J3B-Dl0BHoqK.js} +1 -1
  103. package/dist/client/assets/{chunk-4EMNKR2T-BwFvnPZg.js → chunk-4EMNKR2T-Da7vH6Kv.js} +1 -1
  104. package/dist/client/assets/{chunk-55XCU76K-MOezzAAB.js → chunk-55XCU76K-DgBUEROO.js} +1 -1
  105. package/dist/client/assets/{chunk-5VM5RSS4-woru6zOC.js → chunk-5VM5RSS4-BQ4mn-_I.js} +1 -1
  106. package/dist/client/assets/{chunk-JWPE2WC7-CUrKlP2M.js → chunk-JWPE2WC7-8LPR3mXf.js} +1 -1
  107. package/dist/client/assets/{chunk-VQ5W62QI-CqZ2cdEu.js → chunk-VQ5W62QI-BkIVXi4W.js} +1 -1
  108. package/dist/client/assets/{chunk-XXDRQBXY-ByAcvWaE.js → chunk-XXDRQBXY-DQXJx06h.js} +1 -1
  109. package/dist/client/assets/{chunk-ZCHMQSOR-3nkba9kj.js → chunk-ZCHMQSOR-DzCE7qlD.js} +2 -2
  110. package/dist/client/assets/{classDiagram-v2-4MYWR3UA-B-zZKAmI.js → classDiagram-v2-4MYWR3UA-C_cZra7c.js} +1 -1
  111. package/dist/client/assets/{command-BAOEURY7.js → command-CDKbyppr.js} +1 -1
  112. package/dist/client/assets/{cose-bilkent-JH36ORCC-sCKxRv1H.js → cose-bilkent-JH36ORCC-DlXHdGwT.js} +1 -1
  113. package/dist/client/assets/{cpu-TtYQqONc.js → cpu-B7xLO7jn.js} +1 -1
  114. package/dist/client/assets/{cynefin-EF2NZ3EQ-CXzvL5Cg.js → cynefin-EF2NZ3EQ-HhP4ArLc.js} +1 -1
  115. package/dist/client/assets/{cynefinDiagram-WF24UDRP-C0wjhu9X.js → cynefinDiagram-WF24UDRP-D4GgWnZV.js} +1 -1
  116. package/dist/client/assets/{dagre-NK4GIZVX-Doi2IPkY.js → dagre-NK4GIZVX-SZ_OI2Zi.js} +1 -1
  117. package/dist/client/assets/{diagram-CBK3MWTC-11TVuPel.js → diagram-CBK3MWTC-BN-_Ja5m.js} +1 -1
  118. package/dist/client/assets/{diagram-I5XIIV2D-CJq7fHFM.js → diagram-I5XIIV2D-t7AK6xnL.js} +1 -1
  119. package/dist/client/assets/{diagram-ODIL2UCW-2Ae6unuU.js → diagram-ODIL2UCW-C1V7szSc.js} +1 -1
  120. package/dist/client/assets/{diagram-PFBEJUXE-BXza6_iz.js → diagram-PFBEJUXE-DPtraQ2g.js} +1 -1
  121. package/dist/client/assets/{diagram-RJA3I4VV-Z0i3uBW9.js → diagram-RJA3I4VV-D2XNRB2b.js} +1 -1
  122. package/dist/client/assets/{diagram-TYUNFSNR-Dq_-g1oP.js → diagram-TYUNFSNR-BieaRy38.js} +1 -1
  123. package/dist/client/assets/{ebnfDiagram-V4P3TTPT-vxzIvg-W.js → ebnfDiagram-V4P3TTPT-Bwki86UY.js} +1 -1
  124. package/dist/client/assets/{elk-QONTBCTQ-BBIXXtg_.js → elk-QONTBCTQ-WEXSAyHB.js} +1 -1
  125. package/dist/client/assets/{empty-state-kISAAp0z.js → empty-state-J-UJ0BUU.js} +1 -1
  126. package/dist/client/assets/{erDiagram-KYQIGQAA-Bk2MeLBx.js → erDiagram-KYQIGQAA-DIKASnoc.js} +1 -1
  127. package/dist/client/assets/{execution-config-DYFe-VNC.js → execution-config-ILQiJAmy.js} +1 -1
  128. package/dist/client/assets/{file-DEt4KgZG.js → file-D40js1Zx.js} +1 -1
  129. package/dist/client/assets/{file-exclamation-point-QqXJhXD9.js → file-exclamation-point-Dg3ZpiAe.js} +1 -1
  130. package/dist/client/assets/{file-text-CRw31ZWd.js → file-text-DgdvRfMk.js} +1 -1
  131. package/dist/client/assets/{find-latest-widget-fence-B3aaiBNI.js → find-latest-widget-fence-D4kBWC_1.js} +1 -1
  132. package/dist/client/assets/{flowDiagram-IUGLLWBU-B53m4r8u.js → flowDiagram-IUGLLWBU-CoavNw0M.js} +1 -1
  133. package/dist/client/assets/{form-Bjhk9zOn.js → form-DlPwEgQH.js} +1 -1
  134. package/dist/client/assets/{format-cron-9tmNIcgl.js → format-cron-BrK8RzgT.js} +1 -1
  135. package/dist/client/assets/{ganttDiagram-R7GPNTJY-CS6TN3R1.js → ganttDiagram-R7GPNTJY-DccKAz7f.js} +1 -1
  136. package/dist/client/assets/{git-branch-DWerghmw.js → git-branch-BpxhecMq.js} +1 -1
  137. package/dist/client/assets/{gitGraphDiagram-PDYL7XHY-D096ZtqE.js → gitGraphDiagram-PDYL7XHY-DEbo_dgQ.js} +1 -1
  138. package/dist/client/assets/{graph-DQpTuPmX.js → graph-DROgI3M3.js} +1 -1
  139. package/dist/client/assets/{heart-CRkjVW7-.js → heart-c7u4Ezxt.js} +1 -1
  140. package/dist/client/assets/{highlighted-body-KPVGNVTW-DoVCXOMU.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-VyMBVwgK.js → image-off-BExgZjfM.js} +2 -2
  143. package/dist/client/assets/{index-DgyhdQnI.js → index-2wezsLA_.js} +1 -1
  144. package/dist/client/assets/index-7jby-RRg.js +1 -0
  145. package/dist/client/assets/{index-Czm6C7FZ.js → index-AzyLwYS_.js} +3 -3
  146. package/dist/client/assets/{index-CiVeycsn.js → index-B3eeEDWj.js} +5 -5
  147. package/dist/client/assets/{index-setKr4xl.js → index-BEkYBuOq.js} +1 -1
  148. package/dist/client/assets/index-BGqvci3k.js +1 -0
  149. package/dist/client/assets/{index-DKWpwwxo.js → index-BVqSmajJ.js} +1 -1
  150. package/dist/client/assets/{index-BBcAekWE.js → index-Be0OJLWK.js} +1 -1
  151. package/dist/client/assets/{index-BiFJIg4n.js → index-BizvylBV.js} +1 -1
  152. package/dist/client/assets/{index-n3-zWcH-.js → index-BkoMsjtM.js} +2 -2
  153. package/dist/client/assets/{index-_emDKzsu.js → index-BlyoyIck.js} +1 -1
  154. package/dist/client/assets/{index-C24HfJir.js → index-BqIHtiaE.js} +1 -1
  155. package/dist/client/assets/{index-Cs3WB8yn.js → index-C5or4L_3.js} +1 -1
  156. package/dist/client/assets/{index-igLqtuoO.js → index-C7B3eSOP.js} +1 -1
  157. package/dist/client/assets/{index-COMRALJO.js → index-CD8aw6Jb.js} +1 -1
  158. package/dist/client/assets/{index-CDuYKaGY.js → index-CT_pFeX_.js} +1 -1
  159. package/dist/client/assets/{index-b9p_y2Ql.js → index-CYy1cjtq.js} +1 -1
  160. package/dist/client/assets/{index-Csr_C1sk.js → index-CZmqtJWZ.js} +1 -1
  161. package/dist/client/assets/{index-DBo2XfNv.js → index-CbHCZsbE.js} +1 -1
  162. package/dist/client/assets/{index-BcFMs7lK.js → index-Ccf1XBTs.js} +1 -1
  163. package/dist/client/assets/index-Cga0qx1T.js +1033 -0
  164. package/dist/client/assets/{index-Ctqe81qr.js → index-CqPRAM_6.js} +1 -1
  165. package/dist/client/assets/index-Ct4At33X.js +1 -0
  166. package/dist/client/assets/{index-DN2sTT2U.js → index-D0eJtRlK.js} +1 -1
  167. package/dist/client/assets/{index-C3sW6rkN.js → index-D150FXCC.js} +22 -20
  168. package/dist/client/assets/{index-C6udJCgz.js → index-D3YeRrne.js} +1 -1
  169. package/dist/client/assets/index-DCJQGDZk.js +1 -0
  170. package/dist/client/assets/{index-BpjEclkM.js → index-DDgOoXP1.js} +1 -1
  171. package/dist/client/assets/{index-DmFNztTX.js → index-DINk1YfD.js} +1 -1
  172. package/dist/client/assets/{index-Dgrk2udV.js → index-DITPwUa9.js} +3 -3
  173. package/dist/client/assets/{index-CvhR1oZB.js → index-DNGNMW3c.js} +1 -1
  174. package/dist/client/assets/{index-rCvQat0D.js → index-DT7pv2iW.js} +1 -1
  175. package/dist/client/assets/{index-TnoaFCrj.js → index-DaZ1I8s-.js} +1 -1
  176. package/dist/client/assets/{index-CEVwhauU.js → index-DeRDq7bD.js} +1 -1
  177. package/dist/client/assets/{index-2EaVZrJe.js → index-DhHobJd3.js} +1 -1
  178. package/dist/client/assets/{index-CyGRWyhV.js → index-DksjixUS.js} +1 -1
  179. package/dist/client/assets/{index-C6Fo2htT.js → index-DswGXheF.js} +1 -1
  180. package/dist/client/assets/{index-t3eRSGcT.js → index-DxiRRZRo.js} +1 -1
  181. package/dist/client/assets/index-F-vqXYqa.js +1 -0
  182. package/dist/client/assets/{index-DNzk9m1D.js → index-InEBtYxw.js} +6 -6
  183. package/dist/client/assets/{index-BLkXoquZ.js → index-J3Hh1MnL.js} +1 -1
  184. package/dist/client/assets/{index-gIQ7FrL9.js → index-dyAahqKe.js} +1 -1
  185. package/dist/client/assets/{index-B2rBVMNl.js → index-mwf7ZNk2.js} +1 -1
  186. package/dist/client/assets/{index.esm-bLeQzVWT.js → index.esm-BFJ9SG0n.js} +1 -1
  187. package/dist/client/assets/{infoDiagram-MVDRKAX5-nN_N76Fn.js → infoDiagram-MVDRKAX5-VL8q5pKx.js} +1 -1
  188. package/dist/client/assets/{inline-code-D9bLKHjY.js → inline-code-BE9ckzPs.js} +1 -1
  189. package/dist/client/assets/{ishikawaDiagram-HPEHV2GE-CiLFbWXd.js → ishikawaDiagram-HPEHV2GE-BLKkPYF-.js} +1 -1
  190. package/dist/client/assets/{journeyDiagram-BOSHW7O7-Dn3yOv96.js → journeyDiagram-BOSHW7O7-CSYpRobu.js} +1 -1
  191. package/dist/client/assets/{kanban-definition-FNSA4HC5-JxiBdBQC.js → kanban-definition-FNSA4HC5-HilAqtZo.js} +1 -1
  192. package/dist/client/assets/{layers-DTnLoRvE.js → layers-Cm7coqdo.js} +1 -1
  193. package/dist/client/assets/{lightbulb-CRKLr5q3.js → lightbulb-DqdWS75d.js} +1 -1
  194. package/dist/client/assets/{link-2-hgHg-lyw.js → link-2-CDJapTSa.js} +1 -1
  195. package/dist/client/assets/{list-runtime-types-Bb33QiMC.js → list-runtime-types-CP82p1u4.js} +1 -1
  196. package/dist/client/assets/{markdown-content-D0FpU2cz.js → markdown-content-m_qereFc.js} +1 -1
  197. package/dist/client/assets/{mention-pill-uuaUvwSW.js → mention-pill-DV5HIG5Q.js} +1 -1
  198. package/dist/client/assets/{mermaid.core-x3Hh6iut.js → mermaid.core-zxW6MBr-.js} +4 -4
  199. package/dist/client/assets/{message-square-off-B8N6YF9R.js → message-square-off-YVtpbaJ0.js} +1 -1
  200. package/dist/client/assets/{mindmap-definition-6OY57UG3-D0SEv5Re.js → mindmap-definition-6OY57UG3-IAYemvOg.js} +1 -1
  201. package/dist/client/assets/{more-details-CadxnGyH.js → more-details-ReA2ZFBn.js} +1 -1
  202. package/dist/client/assets/{owner-notice-CJHyha58.js → owner-notice-M4hn_1ep.js} +1 -1
  203. package/dist/client/assets/{package-B8G7jQm-.js → package-CUuTl39E.js} +1 -1
  204. package/dist/client/assets/{page-container-Bb-_N7lw.js → page-container-BnmNikNZ.js} +1 -1
  205. package/dist/client/assets/{paperclip-BDeYGKqh.js → paperclip-C6fYq5Zf.js} +1 -1
  206. package/dist/client/assets/{path-input-BIfexEKz.js → path-input-DHn9-XaE.js} +1 -1
  207. package/dist/client/assets/{pegDiagram-ECIUJNBX-7ivMd0-b.js → pegDiagram-ECIUJNBX-CojaUwe7.js} +1 -1
  208. package/dist/client/assets/{pieDiagram-GNMPY74T-DGDkbFvu.js → pieDiagram-GNMPY74T-CjP3pw6V.js} +1 -1
  209. package/dist/client/assets/{plug-wP1d6OUX.js → plug-DHQcxt7N.js} +1 -1
  210. package/dist/client/assets/primer-trigger-BmV5wjek.js +3 -0
  211. package/dist/client/assets/{profile-errors-C1qSJkiG.js → profile-errors-BSCuj3rT.js} +1 -1
  212. package/dist/client/assets/{progress-DmUieXLn.js → progress-4FQQfnS6.js} +1 -1
  213. package/dist/client/assets/{quadrantDiagram-D57K4MC3-AFQRVSsK.js → quadrantDiagram-D57K4MC3-OP0Z8zcR.js} +1 -1
  214. package/dist/client/assets/{query-error-state--8AnWSSn.js → query-error-state-BkUdxenP.js} +1 -1
  215. package/dist/client/assets/{radio-mkA-Sqe0.js → radio-ta5Bw763.js} +1 -1
  216. package/dist/client/assets/{railroadDiagram-Y72NRBL7-3QBa2d3j.js → railroadDiagram-Y72NRBL7-CT3NCb9b.js} +1 -1
  217. package/dist/client/assets/registry-Dc102rws.js +1 -0
  218. package/dist/client/assets/{relay-trace-schemas-fScydQ3A.js → relay-trace-schemas-DwUuyxao.js} +2 -2
  219. package/dist/client/assets/{requirementDiagram-EQYSW5RA-BVBqcASy.js → requirementDiagram-EQYSW5RA-tde4lYGp.js} +1 -1
  220. package/dist/client/assets/{room-files-source-BhkPUTiP.js → room-files-source-CZWhaaOy.js} +2 -2
  221. package/dist/client/assets/{rotate-ccw-clock-DiuTseKz.js → rotate-ccw-clock-RfbbgUa4.js} +1 -1
  222. package/dist/client/assets/{rotate-cw-DvoxWwSx.js → rotate-cw-B3rB_YSw.js} +1 -1
  223. package/dist/client/assets/{sankeyDiagram-SY24JHO5-DFjfOD38.js → sankeyDiagram-SY24JHO5-sdCzIA7-.js} +1 -1
  224. package/dist/client/assets/{scroll-area-DYyyRqW_.js → scroll-area-B4WB7Q40.js} +1 -1
  225. package/dist/client/assets/{search-x-CA-FzEqZ.js → search-x-DCUmWW2_.js} +1 -1
  226. package/dist/client/assets/{sequenceDiagram-BLEHNHQU-Cr9LzoSF.js → sequenceDiagram-BLEHNHQU-DvzTJcKu.js} +1 -1
  227. package/dist/client/assets/{shield-x-B0W_7qwR.js → shield-x-CANziVLc.js} +1 -1
  228. package/dist/client/assets/signed-in-DctJ2IWe.js +1 -0
  229. package/dist/client/assets/{sizeCapture-INFHLROL-Do_jfNyT.js → sizeCapture-INFHLROL-DuDA7TKE.js} +1 -1
  230. package/dist/client/assets/{soul-file-DgfhKQIK.js → soul-file-Co_8f1qw.js} +1 -1
  231. package/dist/client/assets/{stateDiagram-v2-A6IESKWZ-BCi9yk_0.js → stateDiagram-v2-A6IESKWZ-BJPX5JTC.js} +1 -1
  232. package/dist/client/assets/{swimlanes-B3ENRKFQ-3SSAw2av.js → swimlanes-B3ENRKFQ-CiLSffGv.js} +1 -1
  233. package/dist/client/assets/swimlanesDiagram-AYQRV4AK-Dv1-QS9J.js +8 -0
  234. package/dist/client/assets/{table-DvU_oS4E.js → table-BSAvOYPp.js} +1 -1
  235. package/dist/client/assets/{terminal-Dw2QZ7Dh.js → terminal-6CdY-T1V.js} +1 -1
  236. package/dist/client/assets/{timeline-definition-JXYKGLGB-DTLPXTMA.js → timeline-definition-JXYKGLGB-5oq8sl82.js} +1 -1
  237. package/dist/client/assets/{trust-posture-2MR0ap9o.js → trust-posture-D-Yjm6ot.js} +1 -1
  238. package/dist/client/assets/{unplug-CAVOLB2R.js → unplug-Bq_1WdV7.js} +1 -1
  239. package/dist/client/assets/{unverified-catalog-notice-u4ikVg8J.js → unverified-catalog-notice-CEzu54YH.js} +1 -1
  240. package/dist/client/assets/{use-adapter-catalog-BQKfRxXC.js → use-adapter-catalog-Tn3ZbPAj.js} +1 -1
  241. package/dist/client/assets/{use-bindings-BV6HA0MD.js → use-bindings-Bz9YRgO7.js} +1 -1
  242. package/dist/client/assets/{use-composer-prefs-DCSzOnEO.js → use-composer-prefs-D9oKJSQN.js} +1 -1
  243. package/dist/client/assets/{use-connector-management-fr1tx-GZ.js → use-connector-management-CLYFraXN.js} +1 -1
  244. package/dist/client/assets/{use-deep-link-scroll-v02TbidQ.js → use-deep-link-scroll-DkS713kG.js} +1 -1
  245. package/dist/client/assets/{use-delete-binding-CnziYpXo.js → use-delete-binding-CukKpHBK.js} +1 -1
  246. package/dist/client/assets/{use-dev-links-k4YWFO1v.js → use-dev-links-DQ32IcGe.js} +1 -1
  247. package/dist/client/assets/{use-external-adapter-catalog-DoGUfa2F.js → use-external-adapter-catalog-D-FO_XW6.js} +1 -1
  248. package/dist/client/assets/{use-full-activity-feed-CQNxgxnw.js → use-full-activity-feed-BNxcyb1j.js} +1 -1
  249. package/dist/client/assets/use-is-below-desktop-gTvJDvw4.js +1 -0
  250. package/dist/client/assets/use-is-hub-B1vPpkYU.js +1 -0
  251. package/dist/client/assets/{use-jump-back-in-BuO6A0P7.js → use-jump-back-in-Bibj5tVk.js} +3 -3
  252. package/dist/client/assets/{use-local-browser-BNzN5O1P.js → use-local-browser-xg7WXAVK.js} +1 -1
  253. package/dist/client/assets/{use-mesh-topology-CpIDE8lD.js → use-mesh-topology-BgCSFw8s.js} +1 -1
  254. package/dist/client/assets/{use-mounted-ref-BAO3qunF.js → use-mounted-ref-qRbdZfOU.js} +1 -1
  255. package/dist/client/assets/{use-notification-prefs-CtqeH5Pk.js → use-notification-prefs-B-4kZR7I.js} +1 -1
  256. package/dist/client/assets/{use-panel-tab-placements-DFobGBRm.js → use-panel-tab-placements-CCq-mZlY.js} +1 -1
  257. package/dist/client/assets/use-pending-read-C8L_v4Zw.js +1 -0
  258. package/dist/client/assets/{use-personality-commit-BvqCwzAC.js → use-personality-commit-DwSisUfF.js} +1 -1
  259. package/dist/client/assets/{use-promo-activation-Dz5cYm-X.js → use-promo-activation-Botoso6l.js} +3 -3
  260. package/dist/client/assets/{use-promo-dismissals-CuOsnqnZ.js → use-promo-dismissals-RJXp-r_J.js} +1 -1
  261. package/dist/client/assets/{use-pulse-freshness-qcTH6PM7.js → use-pulse-freshness-B3390hGg.js} +1 -1
  262. package/dist/client/assets/{use-relay-config-1mAMDNbc.js → use-relay-config-BV0xcLwS.js} +1 -1
  263. package/dist/client/assets/{use-room-follow-claim-CCGhsyH3.js → use-room-follow-claim-Du4hKHIJ.js} +1 -1
  264. package/dist/client/assets/{use-roving-tab-list-Bsg2dfUx.js → use-roving-tab-list-g2hO6Ruz.js} +1 -1
  265. package/dist/client/assets/{use-session-canvas-awPngMKg.js → use-session-canvas-i30oMO_Q.js} +3 -3
  266. package/dist/client/assets/{use-session-diagnostics-D5g8Mc52.js → use-session-diagnostics-a4b83F5J.js} +2 -2
  267. package/dist/client/assets/{use-unclaimed-chats-Db_wuzt0.js → use-unclaimed-chats-B92om889.js} +1 -1
  268. package/dist/client/assets/use-update-config-Tbn3SodN.js +1 -0
  269. package/dist/client/assets/{useMutationState-BvwBDXKc.js → useMutationState-DdOGdpjP.js} +1 -1
  270. package/dist/client/assets/{usecaseDiagram-WPOLBNNX-1zKygEKR.js → usecaseDiagram-WPOLBNNX-Di5pJvcw.js} +1 -1
  271. package/dist/client/assets/{vennDiagram-Q3Y3IDCW-BR2EbgGY.js → vennDiagram-Q3Y3IDCW-K7KAf26T.js} +1 -1
  272. package/dist/client/assets/{wardleyDiagram-IVAIDKWA-D0OwouJc.js → wardleyDiagram-IVAIDKWA-DVTaxQt9.js} +1 -1
  273. package/dist/client/assets/{xychartDiagram-4URNHDU4-BM-7_FQQ.js → xychartDiagram-4URNHDU4-x-lSJm_B.js} +1 -1
  274. package/dist/client/index.html +1 -1
  275. package/dist/drizzle/20261018210140_remote_command_agent_computer_kind.sql +21 -0
  276. package/dist/drizzle/20261019142317_turn_marks.sql +3 -0
  277. package/dist/drizzle/meta/20261018210140_snapshot.json +14027 -0
  278. package/dist/drizzle/meta/20261019142317_snapshot.json +14048 -0
  279. package/dist/drizzle/meta/_journal.json +14 -0
  280. package/dist/server/index.js +23779 -20674
  281. package/dist/server/index.js.map +2 -2
  282. package/package.json +4 -4
  283. package/dist/client/assets/HandlePage-BKiqymRF.js +0 -1
  284. package/dist/client/assets/McpSigninBody-COIHpHq_.js +0 -1
  285. package/dist/client/assets/NamePage-D7W6VMYd.js +0 -1
  286. package/dist/client/assets/OperatorIdentityForm-C3op6BIC.js +0 -1
  287. package/dist/client/assets/PermissionHistory-CKebTVkq.js +0 -1
  288. package/dist/client/assets/PhotoPage-Ch1at4A6.js +0 -1
  289. package/dist/client/assets/SettingsDialog-Bdws5dbS.js +0 -12
  290. package/dist/client/assets/TaskDialogWrapper-CTcW70s8.js +0 -1
  291. package/dist/client/assets/ToolsPage-D5-fx1EA.js +0 -2
  292. package/dist/client/assets/_shell-BLTSXXDw.js +0 -80
  293. package/dist/client/assets/_shell.channels-D_GQU4RB.js +0 -10
  294. package/dist/client/assets/_shell.connections-DZrlxs4G.js +0 -1
  295. package/dist/client/assets/_shell.marketplace-CZxkAmFz.js +0 -1
  296. package/dist/client/assets/_shell.marketplace_.sources-Q0BTQIuE.js +0 -1
  297. package/dist/client/assets/_shell.session-DvGL0DoX.js +0 -63
  298. package/dist/client/assets/_shell.x._extensionId-B6Tm5KuT.js +0 -1
  299. package/dist/client/assets/_shell.x._extensionId_._-B6Tm5KuT.js +0 -1
  300. package/dist/client/assets/channel-CGffcDRq.js +0 -1
  301. package/dist/client/assets/image-lightbox-BXzbN27o.js +0 -1
  302. package/dist/client/assets/index-1qv8ldHx.js +0 -1
  303. package/dist/client/assets/index-8-iQ6PnT.js +0 -1028
  304. package/dist/client/assets/index-BFitbVs4.js +0 -1
  305. package/dist/client/assets/index-CI84yP-g.js +0 -1
  306. package/dist/client/assets/index-D5zUdnZM.js +0 -1
  307. package/dist/client/assets/index-DX_2Mxwv.js +0 -1
  308. package/dist/client/assets/primer-trigger-CEli_z4n.js +0 -3
  309. package/dist/client/assets/registry-Bnd-HFt3.js +0 -1
  310. package/dist/client/assets/shield-check-CpUB_Ju1.js +0 -6
  311. package/dist/client/assets/signed-in-X2utDqQS.js +0 -1
  312. package/dist/client/assets/swimlanesDiagram-AYQRV4AK-jpZCGfva.js +0 -8
  313. package/dist/client/assets/use-is-below-desktop-DR8FEbRW.js +0 -1
  314. package/dist/client/assets/use-is-hub-BmpgFnFp.js +0 -1
  315. package/dist/client/assets/use-pending-read-Do0_vZ2I.js +0 -1
  316. package/dist/client/assets/use-update-config-DwtH_H9Z.js +0 -1
package/dist/bin/cli.js CHANGED
@@ -26773,7 +26773,7 @@ import path2 from "path";
26773
26773
  import { fileURLToPath } from "url";
26774
26774
  function resolveVersion() {
26775
26775
  if (env2.DORKOS_VERSION_OVERRIDE) return env2.DORKOS_VERSION_OVERRIDE;
26776
- if (true) return "0.123.0";
26776
+ if (true) return "0.124.0";
26777
26777
  const pkgPath = path2.join(path2.dirname(fileURLToPath(import.meta.url)), "../../package.json");
26778
26778
  return JSON.parse(readFileSync(pkgPath, "utf-8")).version;
26779
26779
  }
@@ -29477,11 +29477,11 @@ var require_util = __commonJS({
29477
29477
  return false;
29478
29478
  }
29479
29479
  exports.schemaHasRules = schemaHasRules;
29480
- function schemaHasRulesButRef(schema3, RULES) {
29480
+ function schemaHasRulesButRef(schema3, RULES2) {
29481
29481
  if (typeof schema3 == "boolean")
29482
29482
  return !schema3;
29483
29483
  for (const key in schema3)
29484
- if (key !== "$ref" && RULES.all[key])
29484
+ if (key !== "$ref" && RULES2.all[key])
29485
29485
  return true;
29486
29486
  return false;
29487
29487
  }
@@ -30875,17 +30875,17 @@ var require_validate = __commonJS({
30875
30875
  }
30876
30876
  function schemaKeywords(it, types2, typeErrors, errsCount) {
30877
30877
  const { gen, schema: schema3, data, allErrors, opts, self: self2 } = it;
30878
- const { RULES } = self2;
30879
- if (schema3.$ref && (opts.ignoreKeywordsWithRef || !(0, util_1.schemaHasRulesButRef)(schema3, RULES))) {
30880
- 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));
30881
30881
  return;
30882
30882
  }
30883
30883
  if (!opts.jtd)
30884
30884
  checkStrictTypes(it, types2);
30885
30885
  gen.block(() => {
30886
- for (const group of RULES.rules)
30886
+ for (const group of RULES2.rules)
30887
30887
  groupKeywords(group);
30888
- groupKeywords(RULES.post);
30888
+ groupKeywords(RULES2.post);
30889
30889
  });
30890
30890
  function groupKeywords(group) {
30891
30891
  if (!(0, applicability_1.shouldUseGroup)(schema3, group))
@@ -32984,10 +32984,10 @@ var require_core = __commonJS({
32984
32984
  }
32985
32985
  // Remove keyword
32986
32986
  removeKeyword(keyword) {
32987
- const { RULES } = this;
32988
- delete RULES.keywords[keyword];
32989
- delete RULES.all[keyword];
32990
- 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) {
32991
32991
  const i2 = group.rules.findIndex((rule) => rule.keyword === keyword);
32992
32992
  if (i2 >= 0)
32993
32993
  group.rules.splice(i2, 1);
@@ -33155,9 +33155,9 @@ var require_core = __commonJS({
33155
33155
  }
33156
33156
  var KEYWORD_NAME = /^[a-z_$][a-z0-9_$:-]*$/i;
33157
33157
  function checkKeyword(keyword, def) {
33158
- const { RULES } = this;
33158
+ const { RULES: RULES2 } = this;
33159
33159
  (0, util_1.eachItem)(keyword, (kwd) => {
33160
- if (RULES.keywords[kwd])
33160
+ if (RULES2.keywords[kwd])
33161
33161
  throw new Error(`Keyword ${kwd} is already defined`);
33162
33162
  if (!KEYWORD_NAME.test(kwd))
33163
33163
  throw new Error(`Keyword ${kwd} has invalid name`);
@@ -33173,13 +33173,13 @@ var require_core = __commonJS({
33173
33173
  const post = definition === null || definition === void 0 ? void 0 : definition.post;
33174
33174
  if (dataType && post)
33175
33175
  throw new Error('keyword with "post" flag cannot have "type"');
33176
- const { RULES } = this;
33177
- 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);
33178
33178
  if (!ruleGroup) {
33179
33179
  ruleGroup = { type: dataType, rules: [] };
33180
- RULES.rules.push(ruleGroup);
33180
+ RULES2.rules.push(ruleGroup);
33181
33181
  }
33182
- RULES.keywords[keyword] = true;
33182
+ RULES2.keywords[keyword] = true;
33183
33183
  if (!definition)
33184
33184
  return;
33185
33185
  const rule = {
@@ -33194,7 +33194,7 @@ var require_core = __commonJS({
33194
33194
  addBeforeRule.call(this, ruleGroup, rule, definition.before);
33195
33195
  else
33196
33196
  ruleGroup.rules.push(rule);
33197
- RULES.all[keyword] = rule;
33197
+ RULES2.all[keyword] = rule;
33198
33198
  (_a7 = definition.implements) === null || _a7 === void 0 ? void 0 : _a7.forEach((kwd) => this.addKeyword(kwd));
33199
33199
  }
33200
33200
  function addBeforeRule(ruleGroup, rule, before) {
@@ -49462,6 +49462,98 @@ var init_canvas_doc_incarnation = __esm({
49462
49462
  }
49463
49463
  });
49464
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
+
49465
49557
  // ../../node_modules/.pnpm/@asteasolutions+zod-to-openapi@9.1.0_zod@4.6.5/node_modules/@asteasolutions/zod-to-openapi/dist/index.cjs
49466
49558
  var require_dist2 = __commonJS({
49467
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) {
@@ -51086,92 +51178,22 @@ var init_zod_openapi = __esm({
51086
51178
  });
51087
51179
 
51088
51180
  // ../shared/src/canvas-channel-json.ts
51089
- function containerEntries(value) {
51090
- const prototype = Object.getPrototypeOf(value);
51091
- if (Array.isArray(value)) {
51092
- if (prototype !== Array.prototype) return void 0;
51093
- } else if (prototype !== Object.prototype && prototype !== null) return void 0;
51094
- const descriptors = Object.getOwnPropertyDescriptors(value);
51095
- if (Object.getOwnPropertySymbols(value).length) return void 0;
51096
- const keys = Array.isArray(value) ? Array.from({ length: value.length }, (_3, index2) => String(index2)) : Object.keys(descriptors);
51097
- if (Array.isArray(value) && Object.keys(descriptors).length !== value.length + 1)
51098
- return void 0;
51099
- const entries = [];
51100
- for (const key of keys) {
51101
- const descriptor = descriptors[key];
51102
- if (unsafeKeys.has(key) || !descriptor || !("value" in descriptor) || !descriptor.enumerable)
51103
- return void 0;
51104
- entries.push([key, descriptor.value]);
51105
- }
51106
- return entries;
51107
- }
51108
- function inspectCanvasChannelJson(value, maxBytes = CANVAS_CHANNEL_ENVELOPE_BYTES) {
51109
- const pending2 = [{ value, depth: 0 }];
51110
- const ancestors = /* @__PURE__ */ new Set();
51111
- let bytes = 0;
51112
- while (pending2.length) {
51113
- const item = pending2.pop();
51114
- const current3 = item.value;
51115
- if (item.exit) {
51116
- ancestors.delete(current3);
51117
- continue;
51118
- }
51119
- if (current3 !== null && typeof current3 === "object") {
51120
- if (item.depth > CANVAS_CHANNEL_JSON_DEPTH) return "JSON exceeds the maximum depth";
51121
- if (ancestors.has(current3)) return "JSON must not contain cycles";
51122
- if (Array.isArray(current3) && current3.length > maxBytes) return "JSON exceeds the byte limit";
51123
- const entries = containerEntries(current3);
51124
- if (!entries) return "Expected plain JSON without unsafe keys or accessors";
51125
- bytes += 2 + Math.max(0, entries.length - 1);
51126
- ancestors.add(current3);
51127
- pending2.push({ value: current3, depth: item.depth, exit: true });
51128
- for (const [key, child] of entries) {
51129
- if (!Array.isArray(current3)) bytes += encoder.encode(JSON.stringify(key)).length + 1;
51130
- pending2.push({ value: child, depth: item.depth + 1 });
51131
- }
51132
- } else {
51133
- if (typeof current3 === "number" && !Number.isFinite(current3))
51134
- return "Expected finite JSON numbers";
51135
- if (current3 !== null && !["string", "number", "boolean"].includes(typeof current3))
51136
- return "Expected JSON data";
51137
- bytes += encoder.encode(JSON.stringify(current3)).length;
51138
- }
51139
- if (bytes > maxBytes) return "JSON exceeds the byte limit";
51140
- }
51141
- return void 0;
51142
- }
51143
51181
  function boundedJson(schema3, maxBytes = CANVAS_CHANNEL_ENVELOPE_BYTES) {
51144
- return external_exports.preprocess((value, context2) => {
51145
- const problem = inspectCanvasChannelJson(value, maxBytes);
51146
- if (problem) {
51147
- context2.addIssue({ code: "custom", message: problem });
51148
- return external_exports.NEVER;
51149
- }
51150
- return value;
51151
- }, schema3);
51182
+ return withJsonBounds(schema3, { maxBytes, maxDepth: CANVAS_CHANNEL_JSON_DEPTH });
51152
51183
  }
51153
- 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;
51154
51185
  var init_canvas_channel_json = __esm({
51155
51186
  "../shared/src/canvas-channel-json.ts"() {
51156
51187
  "use strict";
51157
51188
  init_zod();
51189
+ init_bounded_json();
51158
51190
  init_zod_openapi();
51159
51191
  extendZodWithOpenApiOnce();
51160
51192
  CANVAS_CHANNEL_ENVELOPE_BYTES = 16 * 1024;
51161
51193
  CANVAS_CHANNEL_JSON_DEPTH = 32;
51162
51194
  CANVAS_CHANNEL_STATE_BYTES = 256 * 1024;
51163
- unsafeKeys = /* @__PURE__ */ new Set(["__proto__", "prototype", "constructor"]);
51164
- encoder = new TextEncoder();
51165
- RecursiveJsonSchema = external_exports.lazy(
51166
- () => external_exports.union([
51167
- external_exports.string(),
51168
- external_exports.number().finite(),
51169
- external_exports.boolean(),
51170
- external_exports.null(),
51171
- external_exports.array(RecursiveJsonSchema),
51172
- external_exports.object({}).catchall(RecursiveJsonSchema)
51173
- ])
51174
- ).openapi("CanvasChannelJson");
51195
+ unsafeKeys = UNSAFE_JSON_KEYS;
51196
+ RecursiveJsonSchema = external_exports.lazy(() => jsonValueUnion(RecursiveJsonSchema)).openapi("CanvasChannelJson");
51175
51197
  CanvasChannelJsonValueSchema = boundedJson(RecursiveJsonSchema);
51176
51198
  CanvasChannelStateSchema = boundedJson(
51177
51199
  external_exports.object({}).catchall(RecursiveJsonSchema),
@@ -52007,14 +52029,17 @@ function resolveCeilingLevel(declared, ceiling) {
52007
52029
  }
52008
52030
  function stricterLevel(a2, b2) {
52009
52031
  const level = stricterPower(a2, b2);
52010
- return (a2.outsider || b2.outsider) && !level.outsider ? { ...level, outsider: true } : level;
52011
- }
52012
- function ceilingCarriesOutsider(ceiling) {
52013
- if (!Array.isArray(ceiling)) {
52014
- return ceiling === "runtime-default" || ceiling.outsider === true;
52015
- }
52016
- const bounds = ceiling;
52017
- 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];
52018
52043
  }
52019
52044
  function stricterPower(a2, b2) {
52020
52045
  const fits = (inner, outer) => isNoLooserThan(outer, inner) && (!inner.auto || outer.auto === true || outer.asks === "never");
@@ -52046,7 +52071,11 @@ var init_permission_semantics = __esm({
52046
52071
  });
52047
52072
 
52048
52073
  // ../shared/src/permissions/permission-schemas.ts
52049
- 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;
52050
52079
  var init_permission_schemas = __esm({
52051
52080
  "../shared/src/permissions/permission-schemas.ts"() {
52052
52081
  "use strict";
@@ -52123,7 +52152,13 @@ var init_permission_schemas = __esm({
52123
52152
  kind: external_exports.literal("files"),
52124
52153
  /** The runtime whose own stop changed; absent for the global one. */
52125
52154
  runtime: external_exports.string().optional()
52126
- })
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() })
52127
52162
  ]);
52128
52163
  PermissionChangeSchema = external_exports.object({
52129
52164
  target: PermissionChangeTargetSchema,
@@ -52193,6 +52228,14 @@ var init_permission_schemas = __esm({
52193
52228
  undoOf: external_exports.string()
52194
52229
  });
52195
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
+ };
52196
52239
  }
52197
52240
  });
52198
52241
 
@@ -53320,6 +53363,7 @@ var init_capabilities = __esm({
53320
53363
  var PROJECT_NAME_PATTERN, ProjectRefSchema, ProjectInfoSchema, ProjectListResponseSchema, ProjectResolveQuerySchema, ProjectResolveResponseSchema, AccountEligibilityRowSchema, AccountEligibilityQuerySchema, AccountEligibilityResponseSchema, ProjectAccountsRequestSchema, ProjectWithoutCreditsRequestSchema, OnlyProjectsRequestSchema, OnlyProjectsResponseSchema;
53321
53364
  var init_project_schemas = __esm({
53322
53365
  "../shared/src/project-schemas.ts"() {
53366
+ "use strict";
53323
53367
  init_zod();
53324
53368
  init_zod_openapi();
53325
53369
  extendZodWithOpenApiOnce();
@@ -53703,6 +53747,7 @@ var init_account_usage_codex = __esm({
53703
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;
53704
53748
  var init_account_usage = __esm({
53705
53749
  "../shared/src/account-usage.ts"() {
53750
+ "use strict";
53706
53751
  init_zod();
53707
53752
  init_zod_openapi();
53708
53753
  init_ledger_slug();
@@ -54112,7 +54157,7 @@ function isSafeSigninUrl(value) {
54112
54157
  if (url2.protocol !== "http:") return false;
54113
54158
  return url2.hostname === "localhost" || url2.hostname === "127.0.0.1" || url2.hostname === "[::1]";
54114
54159
  }
54115
- 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;
54116
54161
  var init_schemas4 = __esm({
54117
54162
  "../shared/src/schemas.ts"() {
54118
54163
  "use strict";
@@ -56435,6 +56480,9 @@ var init_schemas4 = __esm({
56435
56480
  isLocalCaller: external_exports.boolean().openapi({
56436
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"
56437
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
+ }),
56438
56486
  dismissedUpgradeVersions: external_exports.array(external_exports.string()).openapi({ description: "Versions the user has dismissed upgrade notifications for" }),
56439
56487
  dismissedPromoIds: external_exports.array(external_exports.string()).openapi({
56440
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"
@@ -56890,6 +56938,21 @@ var init_schemas4 = __esm({
56890
56938
  ).refine((s2) => !s2.includes("--"), "Must not contain consecutive hyphens");
56891
56939
  TaskRunStatusSchema = external_exports.enum(["running", "completed", "failed", "cancelled", "skipped", "blocked"]).openapi("TaskRunStatus");
56892
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");
56893
56956
  TaskSchema = external_exports.object({
56894
56957
  id: external_exports.string(),
56895
56958
  name: external_exports.string(),
@@ -57067,6 +57130,12 @@ var init_schemas4 = __esm({
57067
57130
  * such. `null` on every schedule a person or an agent explained themselves.
57068
57131
  */
57069
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(),
57070
57139
  nextRun: external_exports.string().nullable().optional(),
57071
57140
  /**
57072
57141
  * When the schedule last started a run (ISO 8601), or null when it never
@@ -59863,7 +59932,7 @@ function checkContributionShape(contribution, readExtra) {
59863
59932
  }
59864
59933
  function checkDeclaredTools(manifest) {
59865
59934
  return (manifest.tools ?? []).map((tool) => {
59866
- const refused2 = (reason) => ({
59935
+ const refused3 = (reason) => ({
59867
59936
  ok: false,
59868
59937
  name: tool.name,
59869
59938
  title: tool.title,
@@ -59871,7 +59940,7 @@ function checkDeclaredTools(manifest) {
59871
59940
  reason: plainReason(reason)
59872
59941
  });
59873
59942
  const schema3 = checkToolInputSchema(tool.inputSchema);
59874
- if (!schema3.ok) return refused2(schema3.reason);
59943
+ if (!schema3.ok) return refused3(schema3.reason);
59875
59944
  const checked = checkContributionShape(
59876
59945
  {
59877
59946
  owner: manifest.id,
@@ -59889,7 +59958,7 @@ function checkDeclaredTools(manifest) {
59889
59958
  },
59890
59959
  NO_EXTRA
59891
59960
  );
59892
- if (!checked.ok) return refused2(checked.reason);
59961
+ if (!checked.ok) return refused3(checked.reason);
59893
59962
  const timeout = Math.min(
59894
59963
  Math.max(1, Math.trunc(tool.timeoutSeconds ?? EXTENSION_TOOL_TIMEOUT_DEFAULT_SECONDS)),
59895
59964
  EXTENSION_TOOL_TIMEOUT_MAX_SECONDS
@@ -109432,7 +109501,7 @@ var init_billing = __esm({
109432
109501
  });
109433
109502
 
109434
109503
  // ../cloud-api/dist/inference.js
109435
- var InferenceTokenRequestSchema, InferenceEndpointsSchema, InferenceFormatSchema, InferenceLimitsSchema, InferenceTokenSchema, ModelSupportsSchema, InferenceModelSchema, InferenceModelsResponseSchema, InferenceTokenRevokeResponseSchema, InferenceRefusalReasonSchema;
109504
+ var InferenceTokenRequestSchema, InferenceEndpointsSchema, InferenceFormatSchema, InferenceLimitsSchema, InferenceTokenSchema, ModelSupportsSchema, InferenceModelSchema, InferenceModelsResponseSchema, InferenceTokenRevokeResponseSchema, InferenceRefusalReasonSchema, InferenceErrorBodySchema;
109436
109505
  var init_inference = __esm({
109437
109506
  "../cloud-api/dist/inference.js"() {
109438
109507
  "use strict";
@@ -109441,7 +109510,7 @@ var init_inference = __esm({
109441
109510
  InferenceTokenRequestSchema = external_exports.object({
109442
109511
  instanceId: IdSchema,
109443
109512
  seatRef: IdSchema.optional(),
109444
- 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.")
109445
109514
  }).describe("Mint a short-lived inference token for one instance.");
109446
109515
  InferenceEndpointsSchema = external_exports.object({
109447
109516
  anthropicMessages: external_exports.string().url(),
@@ -109497,6 +109566,16 @@ var init_inference = __esm({
109497
109566
  "daily_limit_reached",
109498
109567
  "turn_budget_exhausted"
109499
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.");
109500
109579
  }
109501
109580
  });
109502
109581
 
@@ -109856,6 +109935,11 @@ var init_remote2 = __esm({
109856
109935
  id: IdSchema,
109857
109936
  leaseToken: external_exports.string().min(1)
109858
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."),
109859
109943
  external_exports.object({
109860
109944
  kind: external_exports.literal("keepalive"),
109861
109945
  id: IdSchema,
@@ -110158,7 +110242,7 @@ var init_communities = __esm({
110158
110242
  });
110159
110243
 
110160
110244
  // ../cloud-api/dist/hubs.js
110161
- 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;
110162
110246
  var init_hubs = __esm({
110163
110247
  "../cloud-api/dist/hubs.js"() {
110164
110248
  "use strict";
@@ -110226,6 +110310,10 @@ var init_hubs = __esm({
110226
110310
  CloudComputerTransitionResponseSchema = external_exports.object({
110227
110311
  computer: CloudComputerSchema
110228
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.");
110229
110317
  ViewerOpenResponseSchema = external_exports.object({
110230
110318
  commandId: IdSchema.describe("The command waiting for the computer: the `id` it will see on its stream."),
110231
110319
  queuedAt: TimestampSchema
@@ -110233,6 +110321,28 @@ var init_hubs = __esm({
110233
110321
  CloudComputerDeletedResponseSchema = external_exports.object({
110234
110322
  deletedAt: TimestampSchema
110235
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.");
110236
110346
  }
110237
110347
  });
110238
110348
 
@@ -122982,6 +123092,13 @@ var init_tasks = __esm({
122982
123092
  * what was approved, not an approval.
122983
123093
  */
122984
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"),
122985
123102
  /**
122986
123103
  * The agent's runtime, model or effort that changed outside DorkOS since this
122987
123104
  * schedule was approved, while the schedule follows the agent for that part
@@ -125324,6 +125441,13 @@ var init_rooms2 = __esm({
125324
125441
  * it rather than letting it ride into `RoomEntry`.
125325
125442
  */
125326
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"),
125327
125451
  /** The entry this one answers, in this same room. Null for a top-level entry. */
125328
125452
  parentEntryId: text("parent_entry_id"),
125329
125453
  /**
@@ -126279,6 +126403,8 @@ var init_notifications = __esm({
126279
126403
  "extension.approval",
126280
126404
  "extension.decision",
126281
126405
  "community.owner-replacement",
126406
+ "community.teammate-limit",
126407
+ "community.teammate-limits-reset",
126282
126408
  "heartbeat.credits-offer",
126283
126409
  "connector.destructive_pending",
126284
126410
  "connector.destructive_executed",
@@ -127282,7 +127408,13 @@ var init_commitments = __esm({
127282
127408
  /** When it left `open` (ISO 8601), or NULL while open. */
127283
127409
  closedAt: text("closed_at"),
127284
127410
  /** A short note on how it ended or why it moved, or NULL. */
127285
- 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")
127286
127418
  },
127287
127419
  (table2) => [
127288
127420
  index("commitments_agent_state_idx").on(table2.agentId, table2.state),
@@ -127501,7 +127633,8 @@ var init_remote_commands = __esm({
127501
127633
  "revoke",
127502
127634
  "inbox_pending",
127503
127635
  "viewer_open",
127504
- "hub_assignment_changed"
127636
+ "hub_assignment_changed",
127637
+ "agent_computer_assignment_changed"
127505
127638
  ];
127506
127639
  REMOTE_COMMAND_ACK_STATES = ["pending", "acked", "rejected", "unconfirmed"];
127507
127640
  remoteCommandJournal = sqliteTable(
@@ -127535,7 +127668,7 @@ var init_remote_commands = __esm({
127535
127668
  index("remote_command_journal_ack_idx").on(table2.ackState, table2.receivedAt),
127536
127669
  check3(
127537
127670
  "remote_command_journal_verb",
127538
- 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')`
127539
127672
  ),
127540
127673
  check3(
127541
127674
  "remote_command_journal_ack_state",
@@ -128961,6 +129094,17 @@ var init_session_route = __esm({
128961
129094
  }
128962
129095
  });
128963
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
+
128964
129108
  // ../../apps/server/src/services/core/auth/cookie-security.ts
128965
129109
  var AUTH_COOKIES_SECURE;
128966
129110
  var init_cookie_security = __esm({
@@ -128972,23 +129116,25 @@ var init_cookie_security = __esm({
128972
129116
  });
128973
129117
 
128974
129118
  // ../shared/src/session-relay.ts
128975
- var SESSION_RELAY_MAX_FRAME_LENGTH, SESSION_RELAY_MAX_MESSAGE_LENGTH, SESSION_RELAY_MAX_CHATS, SESSION_RELAY_IDLE_CLOSE_MS, VersionSchema, RelayVersionRangeSchema, AdvertisedFeaturesSchema, RequestIdSchema, StreamIdSchema, SessionIdSchema, AgentIdSchema, ToolCallIdSchema, ResumeCursorSchema, NO_CONTROL, INVISIBLE, RelayDisplayNameSchema, RelayDeviceSchema, base64url3, ChatsListRequestSchema, SessionStreamRequestSchema, SessionSendRequestSchema, SessionInterruptRequestSchema, ApprovalDecisionSchema, InteractionChallengeRequestSchema, RelayApprovalProofSchema, InteractionAnswerSchema, InteractionRespondRequestSchema, RelayRequestSchema, RelayChatSummarySchema, RelayResultBodySchemas, RelayErrorSchema, exactBase64url, RelayEphemeralKeySchema, RelaySignatureSchema, RelayNonceSchema, RelayPinnedHubKeySchema, RelayHelloFrameSchema, RelayHandshakeAnswerSchema, RelaySealedFrameSchema, HeartbeatFrameSchema, RelayWebFrameSchema, RelayStreamFrameSchema, RelayComputerFrameSchema, RelayFinishFrameSchema;
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;
128976
129120
  var init_session_relay = __esm({
128977
129121
  "../shared/src/session-relay.ts"() {
128978
129122
  "use strict";
128979
129123
  init_zod();
128980
129124
  init_schemas4();
128981
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;
128982
129127
  SESSION_RELAY_MAX_MESSAGE_LENGTH = 2e5;
129128
+ RelayMessageContentSchema = external_exports.string().min(1).max(SESSION_RELAY_MAX_MESSAGE_LENGTH);
128983
129129
  SESSION_RELAY_MAX_CHATS = 200;
128984
129130
  SESSION_RELAY_IDLE_CLOSE_MS = 3 * 60 * 1e3;
128985
129131
  VersionSchema = external_exports.number().int().positive();
128986
129132
  RelayVersionRangeSchema = external_exports.strictObject({ min: VersionSchema, max: VersionSchema }).refine((range) => range.min <= range.max, { message: "min must not exceed max" });
128987
- AdvertisedFeaturesSchema = external_exports.array(external_exports.string().min(1).max(64)).max(64);
128988
- RequestIdSchema = external_exports.string().min(1).max(64).regex(/^[\w.:-]+$/);
128989
- StreamIdSchema = RequestIdSchema;
128990
- 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}$/);
128991
- 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}$/);
128992
129138
  ToolCallIdSchema = external_exports.string().min(1).max(256).regex(/^[\w.:-]+$/);
128993
129139
  ResumeCursorSchema = external_exports.string().max(256).regex(/^[0-9a-f-]+-\d+-g\d+-\d+$/);
128994
129140
  NO_CONTROL = /^[^\u0000-\u001f\u007f]*$/;
@@ -129001,36 +129147,36 @@ var init_session_relay = __esm({
129001
129147
  base64url3 = (max2) => external_exports.string().min(1).max(max2).regex(/^[A-Za-z0-9_-]+$/);
129002
129148
  ChatsListRequestSchema = external_exports.strictObject({
129003
129149
  op: external_exports.literal("chats.list"),
129004
- agentId: AgentIdSchema
129150
+ agentId: RelayAgentIdSchema
129005
129151
  });
129006
129152
  SessionStreamRequestSchema = external_exports.strictObject({
129007
129153
  op: external_exports.literal("session.stream"),
129008
129154
  streamId: StreamIdSchema,
129009
- sessionId: SessionIdSchema,
129155
+ sessionId: RelaySessionIdSchema,
129010
129156
  resume: ResumeCursorSchema.optional()
129011
129157
  });
129012
129158
  SessionSendRequestSchema = external_exports.strictObject({
129013
129159
  op: external_exports.literal("session.send"),
129014
- sessionId: SessionIdSchema,
129015
- content: external_exports.string().min(1).max(SESSION_RELAY_MAX_MESSAGE_LENGTH),
129016
- clientMessageId: RequestIdSchema.optional(),
129160
+ sessionId: RelaySessionIdSchema,
129161
+ content: RelayMessageContentSchema,
129162
+ clientMessageId: RelayRequestIdSchema.optional(),
129017
129163
  disposition: MessageDispositionSchema.optional(),
129018
- newChat: external_exports.strictObject({ agentId: AgentIdSchema }).optional()
129164
+ newChat: external_exports.strictObject({ agentId: RelayAgentIdSchema }).optional()
129019
129165
  });
129020
129166
  SessionInterruptRequestSchema = external_exports.strictObject({
129021
129167
  op: external_exports.literal("session.interrupt"),
129022
- sessionId: SessionIdSchema
129168
+ sessionId: RelaySessionIdSchema
129023
129169
  });
129024
129170
  ApprovalDecisionSchema = external_exports.enum(["approve", "deny"]);
129025
129171
  InteractionChallengeRequestSchema = external_exports.strictObject({
129026
129172
  op: external_exports.literal("interaction.challenge"),
129027
- sessionId: SessionIdSchema,
129173
+ sessionId: RelaySessionIdSchema,
129028
129174
  toolCallId: ToolCallIdSchema,
129029
129175
  decision: ApprovalDecisionSchema
129030
129176
  });
129031
129177
  RelayApprovalProofSchema = external_exports.strictObject({
129032
129178
  /** The `challengeId` the computer answered `interaction.challenge` with. */
129033
- challengeId: RequestIdSchema,
129179
+ challengeId: RelayRequestIdSchema,
129034
129180
  credentialId: base64url3(1400),
129035
129181
  clientDataJSON: base64url3(4096),
129036
129182
  authenticatorData: base64url3(1024),
@@ -129057,7 +129203,7 @@ var init_session_relay = __esm({
129057
129203
  ]);
129058
129204
  InteractionRespondRequestSchema = external_exports.strictObject({
129059
129205
  op: external_exports.literal("interaction.respond"),
129060
- sessionId: SessionIdSchema,
129206
+ sessionId: RelaySessionIdSchema,
129061
129207
  answer: InteractionAnswerSchema
129062
129208
  });
129063
129209
  RelayRequestSchema = external_exports.discriminatedUnion("op", [
@@ -129069,7 +129215,7 @@ var init_session_relay = __esm({
129069
129215
  InteractionRespondRequestSchema
129070
129216
  ]);
129071
129217
  RelayChatSummarySchema = external_exports.strictObject({
129072
- sessionId: SessionIdSchema,
129218
+ sessionId: RelaySessionIdSchema,
129073
129219
  title: external_exports.string().max(500),
129074
129220
  updatedAt: external_exports.string().datetime(),
129075
129221
  lastMessagePreview: external_exports.string().max(500).optional()
@@ -129078,13 +129224,13 @@ var init_session_relay = __esm({
129078
129224
  "chats.list": external_exports.strictObject({
129079
129225
  chats: external_exports.array(RelayChatSummarySchema).max(SESSION_RELAY_MAX_CHATS)
129080
129226
  }),
129081
- "session.send": external_exports.strictObject({ sessionId: SessionIdSchema }),
129227
+ "session.send": external_exports.strictObject({ sessionId: RelaySessionIdSchema }),
129082
129228
  "session.interrupt": external_exports.strictObject({
129083
129229
  receipt: InterruptReceiptSchema,
129084
129230
  cancelledQueued: external_exports.array(QueuedMessageSchema)
129085
129231
  }),
129086
129232
  "interaction.challenge": external_exports.strictObject({
129087
- challengeId: RequestIdSchema,
129233
+ challengeId: RelayRequestIdSchema,
129088
129234
  /** The bytes to sign, base64url. Opaque to the web side. */
129089
129235
  challenge: base64url3(256),
129090
129236
  /** When the computer stops accepting a proof over it. */
@@ -129108,7 +129254,7 @@ var init_session_relay = __esm({
129108
129254
  /** The computer's id as its hub knows it. Proved by `finish`, never taken on trust. */
129109
129255
  computerId: external_exports.string().min(1).max(64).regex(/^[\w.:-]+$/),
129110
129256
  versions: RelayVersionRangeSchema,
129111
- features: AdvertisedFeaturesSchema,
129257
+ features: RelayAdvertisedFeaturesSchema,
129112
129258
  /** The computer's DorkOS version, for "needs an update" copy. */
129113
129259
  appVersion: external_exports.string().min(1).max(64),
129114
129260
  nonce: RelayNonceSchema,
@@ -129142,7 +129288,7 @@ var init_session_relay = __esm({
129142
129288
  */
129143
129289
  external_exports.strictObject({
129144
129290
  type: external_exports.literal("request"),
129145
- id: RequestIdSchema,
129291
+ id: RelayRequestIdSchema,
129146
129292
  request: RelayRequestSchema,
129147
129293
  /** The browser that asked; sent only to a computer that advertised `request.device`. */
129148
129294
  device: RelayDeviceSchema.optional()
@@ -129164,13 +129310,13 @@ var init_session_relay = __esm({
129164
129310
  RelayComputerFrameSchema = external_exports.discriminatedUnion("type", [
129165
129311
  external_exports.strictObject({
129166
129312
  type: external_exports.literal("result"),
129167
- id: RequestIdSchema,
129313
+ id: RelayRequestIdSchema,
129168
129314
  ok: external_exports.literal(true),
129169
129315
  body: external_exports.unknown()
129170
129316
  }),
129171
129317
  external_exports.strictObject({
129172
129318
  type: external_exports.literal("error"),
129173
- id: RequestIdSchema,
129319
+ id: RelayRequestIdSchema,
129174
129320
  ok: external_exports.literal(false),
129175
129321
  error: RelayErrorSchema
129176
129322
  }),
@@ -129326,6 +129472,7 @@ var init_session_gate = __esm({
129326
129472
  init_public_computer();
129327
129473
  init_session_relay_link();
129328
129474
  init_session_route();
129475
+ init_live_connections();
129329
129476
  }
129330
129477
  });
129331
129478
 
@@ -129368,6 +129515,7 @@ var init_auth2 = __esm({
129368
129515
  init_seed_legacy_mcp_key();
129369
129516
  init_setup_code_gate();
129370
129517
  init_session_route();
129518
+ init_live_connections();
129371
129519
  init_setup_code();
129372
129520
  init_cookie_security();
129373
129521
  init_session_gate();
@@ -129416,6 +129564,7 @@ function defuseSystemTags(text3, tagNames) {
129416
129564
  var IDENTITY_MAX_LENGTH, INVISIBLE_FORMAT, CONTROL_CHARS, PATTERN_CACHE;
129417
129565
  var init_untrusted_text = __esm({
129418
129566
  "../shared/src/untrusted-text.ts"() {
129567
+ "use strict";
129419
129568
  IDENTITY_MAX_LENGTH = 80;
129420
129569
  INVISIBLE_FORMAT = /[\u00ad\u200b-\u200f\u202a-\u202e\u2060-\u2064\ufeff\ufff9-\ufffb]/g;
129421
129570
  CONTROL_CHARS = /[\u0000-\u001f\u007f-\u009f]/g;
@@ -132699,40 +132848,6 @@ var init_agent_home = __esm({
132699
132848
  }
132700
132849
  });
132701
132850
 
132702
- // ../../apps/server/src/services/core/turn-power/live-outsider-turns.ts
132703
- function homeKey(dir, forAgent) {
132704
- try {
132705
- return homeOf(resolveAgentHome(dir, forAgent));
132706
- } catch {
132707
- return void 0;
132708
- }
132709
- }
132710
- function adjust(key, by) {
132711
- const next = (running.get(key) ?? 0) + by;
132712
- if (next > 0) running.set(key, next);
132713
- else running.delete(key);
132714
- }
132715
- function countWhileRunning(place2, events) {
132716
- const key = homeKey(place2.cwd, place2.forAgent) ?? UNPLACED;
132717
- return (async function* counted() {
132718
- adjust(key, 1);
132719
- try {
132720
- yield* events;
132721
- } finally {
132722
- adjust(key, -1);
132723
- }
132724
- })();
132725
- }
132726
- var UNPLACED, running;
132727
- var init_live_outsider_turns = __esm({
132728
- "../../apps/server/src/services/core/turn-power/live-outsider-turns.ts"() {
132729
- "use strict";
132730
- init_agent_home();
132731
- UNPLACED = "";
132732
- running = /* @__PURE__ */ new Map();
132733
- }
132734
- });
132735
-
132736
132851
  // ../../apps/server/src/services/session/turn-identity/durable-rekey.ts
132737
132852
  var init_durable_rekey = __esm({
132738
132853
  "../../apps/server/src/services/session/turn-identity/durable-rekey.ts"() {
@@ -134694,6 +134809,260 @@ var init_session_key_registry = __esm({
134694
134809
  }
134695
134810
  });
134696
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
+
134697
135066
  // ../../apps/server/src/services/core/turn-power/turn-levels.ts
134698
135067
  function remember(map4, key, level) {
134699
135068
  map4.delete(key);
@@ -134703,10 +135072,11 @@ function remember(map4, key, level) {
134703
135072
  if (oldest !== void 0) map4.delete(oldest);
134704
135073
  }
134705
135074
  }
135075
+ function lastTurnLevelOf(sessionId) {
135076
+ return turnLevels.get(sessionId);
135077
+ }
134706
135078
  function levelForTurn(runtime, stored, opts) {
134707
- const level = powerForTurn(runtime, stored, opts);
134708
- const outsider = opts?.roomTurn?.outsiderInView === true || opts?.permissionCeiling !== void 0 && ceilingCarriesOutsider(opts.permissionCeiling);
134709
- return outsider && !level.outsider ? { ...level, outsider: true } : level;
135079
+ return withMarks(powerForTurn(runtime, stored, opts), marksForTurn(opts));
134710
135080
  }
134711
135081
  function powerForTurn(runtime, stored, opts) {
134712
135082
  let declared;
@@ -134722,18 +135092,26 @@ function powerForTurn(runtime, stored, opts) {
134722
135092
  const base = known.length > 0 ? known.reduce(stricterLevel) : levelOfMode(declared, declared.default) ?? READ_ONLY_LEVEL;
134723
135093
  return opts?.permissionCeiling !== void 0 ? stricterLevel(base, resolveCeilingLevel(declared, opts.permissionCeiling)) : base;
134724
135094
  }
134725
- function placeOf(runtime, sessionId, opts) {
134726
- let cwd = opts?.cwd ?? opts?.roomTurn?.cwd;
134727
- try {
134728
- cwd ??= runtime.getSessionCwd?.(sessionId);
134729
- } catch {
134730
- }
134731
- return { cwd, forAgent: turnAgentOf(opts) };
134732
- }
134733
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) {
134734
135111
  return new Proxy(runtime, {
134735
135112
  get(target, prop) {
134736
- if (prop === "sendMessage") {
135113
+ if ((prop === "sendMessage" || prop === "executeCommandIntent") && typeof target[prop] === "function") {
135114
+ const start = target[prop].bind(target);
134737
135115
  return (sessionId, content, opts) => {
134738
135116
  let stored;
134739
135117
  try {
@@ -134741,8 +135119,7 @@ function recordTurnLevels(runtime, storedModeOf) {
134741
135119
  } catch {
134742
135120
  stored = void 0;
134743
135121
  }
134744
- const level = levelForTurn(target, stored, opts);
134745
- remember(turnLevels, sessionId, level);
135122
+ remember(turnLevels, sessionId, levelForTurn(target, stored, opts));
134746
135123
  const serial = ++nextTurnSerial;
134747
135124
  for (const id of /* @__PURE__ */ new Set([sessionId, primaryOf(sessionId)])) {
134748
135125
  turnSerials.delete(id);
@@ -134751,47 +135128,26 @@ function recordTurnLevels(runtime, storedModeOf) {
134751
135128
  while (turnSerials.size > TURN_LEVEL_MEMORY) {
134752
135129
  turnSerials.delete(turnSerials.keys().next().value);
134753
135130
  }
134754
- const events = target.sendMessage(sessionId, content, opts);
134755
- if (!level.outsider) return events;
134756
- const place2 = placeOf(target, sessionId, opts);
134757
- outsiderPlaces.delete(sessionId);
134758
- outsiderPlaces.set(sessionId, place2);
134759
- if (outsiderPlaces.size > TURN_LEVEL_MEMORY) {
134760
- outsiderPlaces.delete(outsiderPlaces.keys().next().value);
134761
- }
134762
- return countWhileRunning(place2, events);
135131
+ return start(sessionId, content, opts);
134763
135132
  };
134764
135133
  }
134765
- if (prop === "onRuntimeTurn" && typeof target.onRuntimeTurn === "function") {
134766
- const subscribe = target.onRuntimeTurn.bind(target);
134767
- return (listener) => subscribe(
134768
- (sessionId, events) => listener(
134769
- sessionId,
134770
- turnLevels.get(sessionId)?.outsider ? countWhileRunning(
134771
- outsiderPlaces.get(sessionId) ?? placeOf(target, sessionId, void 0),
134772
- events
134773
- ) : events
134774
- )
134775
- );
134776
- }
134777
135134
  const value = Reflect.get(target, prop, target);
134778
135135
  return typeof value === "function" ? value.bind(target) : value;
134779
135136
  }
134780
135137
  });
134781
135138
  }
134782
- 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;
134783
135140
  var init_turn_levels = __esm({
134784
135141
  "../../apps/server/src/services/core/turn-power/turn-levels.ts"() {
134785
135142
  "use strict";
134786
- init_agent_home();
134787
- init_live_outsider_turns();
135143
+ init_turn_marks();
134788
135144
  init_session_key_registry();
135145
+ init_outsider_turns();
134789
135146
  init_permission_semantics();
134790
135147
  TURN_LEVEL_MEMORY = 1e4;
134791
135148
  AUTO_MODE_ID2 = "auto";
134792
135149
  AUTO_FALLBACK_MODE_ID = "default";
134793
135150
  turnLevels = /* @__PURE__ */ new Map();
134794
- outsiderPlaces = /* @__PURE__ */ new Map();
134795
135151
  turnSerials = /* @__PURE__ */ new Map();
134796
135152
  nextTurnSerial = 0;
134797
135153
  }
@@ -134904,38 +135260,6 @@ var init_resolve_session_defaults = __esm({
134904
135260
  }
134905
135261
  });
134906
135262
 
134907
- // ../../apps/server/src/services/session/origin/outsider-turns.ts
134908
- import { AsyncLocalStorage as AsyncLocalStorage5 } from "node:async_hooks";
134909
- function isOutsiderOrigin(origin) {
134910
- if (origin.kind === "room") return origin.externalAuthor;
134911
- return OUTSIDER_ORIGIN_KINDS.has(origin.kind);
134912
- }
134913
- function noteTurnOrigin(sessionId, origin) {
134914
- const messageId = holdingFor.getStore();
134915
- if (messageId === void 0) {
134916
- latest.set(primaryOf(sessionId), isOutsiderOrigin(origin));
134917
- return;
134918
- }
134919
- pending.set(messageId, isOutsiderOrigin(origin));
134920
- if (pending.size > PENDING_MAX) pending.delete(pending.keys().next().value);
134921
- }
134922
- var OUTSIDER_ORIGIN_KINDS, latest, pending, PENDING_MAX, holdingFor;
134923
- var init_outsider_turns = __esm({
134924
- "../../apps/server/src/services/session/origin/outsider-turns.ts"() {
134925
- "use strict";
134926
- init_session_key_registry();
134927
- OUTSIDER_ORIGIN_KINDS = /* @__PURE__ */ new Set([
134928
- "relay-binding",
134929
- "outside-sender",
134930
- "connector-event"
134931
- ]);
134932
- latest = /* @__PURE__ */ new Map();
134933
- pending = /* @__PURE__ */ new Map();
134934
- PENDING_MAX = 1e3;
134935
- holdingFor = new AsyncLocalStorage5();
134936
- }
134937
- });
134938
-
134939
135263
  // ../../apps/server/src/services/session/origin/turn-origin.ts
134940
135264
  function permissionSeedForOrigin(origin) {
134941
135265
  switch (origin.kind) {
@@ -134980,8 +135304,12 @@ function permissionSeedForOrigin(origin) {
134980
135304
  // own: the turn runs at the stricter of the two. On insert only, so an
134981
135305
  // existing chat a person set keeps what they chose. A person who later
134982
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.
134983
135311
  case "chat-message":
134984
- return "configured-stop-on-insert";
135312
+ return origin.marked ? "none" : "configured-stop-on-insert";
134985
135313
  // Everything below seeds nothing, for two different reasons.
134986
135314
  //
134987
135315
  // A schedule's power is already decided and already stored, on the schedule
@@ -135205,6 +135533,16 @@ var init_otel = __esm({
135205
135533
  });
135206
135534
 
135207
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
+ }
135208
135546
  function isAiObservabilityActive() {
135209
135547
  return isTracingEnabled() || bridge !== null;
135210
135548
  }
@@ -135223,7 +135561,7 @@ async function* observeRuntimeTurn(runtimeType, sessionId, source) {
135223
135561
  [ATTR.RUNTIME]: runtimeType,
135224
135562
  [ATTR.SESSION_ID]: sessionId
135225
135563
  }) : null;
135226
- const startedAt = Date.now();
135564
+ const startedAt2 = Date.now();
135227
135565
  const state = {};
135228
135566
  let count2 = 0;
135229
135567
  try {
@@ -135236,8 +135574,8 @@ async function* observeRuntimeTurn(runtimeType, sessionId, source) {
135236
135574
  span?.markError();
135237
135575
  throw err;
135238
135576
  } finally {
135239
- const latencyMs = Date.now() - startedAt;
135240
- 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);
135241
135579
  if (span) {
135242
135580
  span.setAttr(ATTR.EVENT_COUNT, count2);
135243
135581
  span.setAttr(ATTR.GEN_AI_SYSTEM, runtimeType);
@@ -135422,7 +135760,7 @@ function accountOf(runtime, sessionId) {
135422
135760
  }
135423
135761
  }
135424
135762
  async function* watchTurn(runtime, sessionId, source) {
135425
- const startedAt = Date.now();
135763
+ const startedAt2 = Date.now();
135426
135764
  let sawAuthError = false;
135427
135765
  let reachedProvider = false;
135428
135766
  try {
@@ -135448,7 +135786,7 @@ async function* watchTurn(runtime, sessionId, source) {
135448
135786
  throw err;
135449
135787
  }
135450
135788
  if (!sawAuthError && reachedProvider) {
135451
- noteSigninRecovery(runtime.type, accountOf(runtime, sessionId), startedAt);
135789
+ noteSigninRecovery(runtime.type, accountOf(runtime, sessionId), startedAt2);
135452
135790
  }
135453
135791
  }
135454
135792
  function watchRuntimeSignin(runtime) {
@@ -136356,6 +136694,93 @@ var init_hold_during_turn = __esm({
136356
136694
  }
136357
136695
  });
136358
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
+
136359
136784
  // ../../apps/server/src/services/runtimes/shared/dorkos-tool-names.ts
136360
136785
  var DORKOS_MCP_SERVER_NAME, CODEX_DORKOS_TOOL_PREFIX, OPENCODE_DORKOS_TOOL_PREFIX, CLAUDE_CODE_DORKOS_TOOL_PREFIX;
136361
136786
  var init_dorkos_tool_names = __esm({
@@ -137331,7 +137756,7 @@ async function* untilPaused(runtime, pauses, turn, events) {
137331
137756
  yield event;
137332
137757
  }
137333
137758
  }
137334
- function refused(error63) {
137759
+ function refused2(error63) {
137335
137760
  return (async function* () {
137336
137761
  yield* [];
137337
137762
  throw error63;
@@ -137350,7 +137775,7 @@ function holdOrRun(runtime, sessionId, opts, run) {
137350
137775
  const paused2 = pauses.pausedAgentOfSession(sessionId, storedCwdOf(runtime, sessionId), opts);
137351
137776
  if (paused2) {
137352
137777
  pauses.recordHeld(paused2, { via: "turn", sessionId, runtime: runtime.type });
137353
- return refused(new AgentPausedError(paused2));
137778
+ return refused2(new AgentPausedError(paused2));
137354
137779
  }
137355
137780
  const turn = {
137356
137781
  sessionId,
@@ -137444,7 +137869,11 @@ var init_hold_paused_turns = __esm({
137444
137869
  function decorateRuntime(runtime, storedModeOf) {
137445
137870
  return holdPausedAgents(
137446
137871
  holdAwakeDuringTurns(
137447
- recordToolUse(watchRuntimeSignin(traceRuntime(recordTurnLevels(runtime, storedModeOf)))),
137872
+ recordToolUse(
137873
+ watchRuntimeSignin(
137874
+ traceRuntime(meterTeammateTurns(recordTurnLevels(runtime, storedModeOf)))
137875
+ )
137876
+ ),
137448
137877
  keepAwakeService,
137449
137878
  (sessionId) => isSessionPaused(runtime, sessionId)
137450
137879
  )
@@ -137456,6 +137885,7 @@ var init_decorate_runtime = __esm({
137456
137885
  init_observability();
137457
137886
  init_hold_during_turn();
137458
137887
  init_turn_levels();
137888
+ init_teammate_turn_cost();
137459
137889
  init_record_tool_use();
137460
137890
  init_hold_paused_turns();
137461
137891
  init_keep_awake_service();
@@ -138973,11 +139403,11 @@ function createProjectRootResolver(overrides = {}) {
138973
139403
  const previousMisses = byCwd.get(key)?.misses ?? 0;
138974
139404
  const entry = {
138975
139405
  misses: previousMisses,
138976
- root: lookups.run(() => lookUp(key)).then(({ root, answered }) => {
139406
+ root: lookups.run(() => lookUp(key)).then(({ root, answered: answered2 }) => {
138977
139407
  entry.settled = { root };
138978
139408
  if (root === null) {
138979
- if (answered) entry.misses = previousMisses + 1;
138980
- 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);
138981
139411
  }
138982
139412
  return root;
138983
139413
  })
@@ -140935,57 +141365,57 @@ function isHookProjectionApproved(request, decisions = storedHookDecisions()) {
140935
141365
  function isHookProjectionRefused(request, decisions = storedHookDecisions()) {
140936
141366
  return decisions.refused.includes(hookApprovalEntry(request));
140937
141367
  }
140938
- function writeDecisions(reason, approved, refused2) {
141368
+ function writeDecisions(reason, approved, refused3) {
140939
141369
  const harness = configManager.get("harness");
140940
141370
  const sameApproved = approved.length === harness.approvedHooks.length && approved.every((entry, i2) => entry === harness.approvedHooks[i2]);
140941
- 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]);
140942
141372
  if (sameApproved && sameRefused) return;
140943
- configManager.set("harness", { ...harness, approvedHooks: approved, refusedHooks: refused2 });
141373
+ configManager.set("harness", { ...harness, approvedHooks: approved, refusedHooks: refused3 });
140944
141374
  logConfigWrite(reason, "harness", harness, configManager.get("harness"));
140945
141375
  }
140946
141376
  function recordHookApproval(request) {
140947
141377
  recordApprovedEntry(hookApprovalEntry(request), "approving a package hook");
140948
141378
  }
140949
141379
  function recordApprovedEntry(entry, reason, replacing = () => false) {
140950
- const { approved, refused: refused2 } = storedHookDecisions();
141380
+ const { approved, refused: refused3 } = storedHookDecisions();
140951
141381
  const kept = approved.filter((stored) => stored === entry || !replacing(stored));
140952
141382
  writeDecisions(
140953
141383
  reason,
140954
141384
  kept.includes(entry) ? kept : [...kept, entry],
140955
- refused2.filter((stored) => stored !== entry)
141385
+ refused3.filter((stored) => stored !== entry)
140956
141386
  );
140957
141387
  }
140958
141388
  function forgetApprovedEntries(matches, reason) {
140959
- const { approved, refused: refused2 } = storedHookDecisions();
141389
+ const { approved, refused: refused3 } = storedHookDecisions();
140960
141390
  writeDecisions(
140961
141391
  reason,
140962
141392
  approved.filter((stored) => !matches(stored)),
140963
- [...refused2]
141393
+ [...refused3]
140964
141394
  );
140965
141395
  }
140966
141396
  function recordRefusedEntry(entry, reason) {
140967
- const { approved, refused: refused2 } = storedHookDecisions();
141397
+ const { approved, refused: refused3 } = storedHookDecisions();
140968
141398
  writeDecisions(
140969
141399
  reason,
140970
141400
  approved.filter((stored) => stored !== entry),
140971
- refused2.includes(entry) ? [...refused2] : [...refused2, entry]
141401
+ refused3.includes(entry) ? [...refused3] : [...refused3, entry]
140972
141402
  );
140973
141403
  }
140974
141404
  function recordHookRefusal(request) {
140975
141405
  recordRefusedEntry(hookApprovalEntry(request), "turning down a package hook");
140976
141406
  }
140977
141407
  function revokeHookDecisions(packageName) {
140978
- const { approved, refused: refused2 } = storedHookDecisions();
141408
+ const { approved, refused: refused3 } = storedHookDecisions();
140979
141409
  const mine = (entry) => hookEntryPackageName(entry) === packageName;
140980
141410
  const removed = [
140981
141411
  ...approved.filter(mine).map((entry) => ({ entry, decision: "approved" })),
140982
- ...refused2.filter(mine).map((entry) => ({ entry, decision: "refused" }))
141412
+ ...refused3.filter(mine).map((entry) => ({ entry, decision: "refused" }))
140983
141413
  ];
140984
141414
  if (removed.length === 0) return [];
140985
141415
  writeDecisions(
140986
141416
  "revoking a package hook decision",
140987
141417
  approved.filter((entry) => !mine(entry)),
140988
- refused2.filter((entry) => !mine(entry))
141418
+ refused3.filter((entry) => !mine(entry))
140989
141419
  );
140990
141420
  return removed;
140991
141421
  }
@@ -151738,7 +152168,6 @@ function writeGlobalSharing(harnesses, reason, now3 = /* @__PURE__ */ new Date()
151738
152168
  var NOTHING_SHARED;
151739
152169
  var init_global_scope = __esm({
151740
152170
  "../../apps/server/src/services/harness/global-scope.ts"() {
151741
- "use strict";
151742
152171
  init_src5();
151743
152172
  init_config_schema();
151744
152173
  init_boundary();
@@ -154445,7 +154874,7 @@ function parseHarnessHooksArgs(rawArgs) {
154445
154874
  return { list: Boolean(values2.list) || revoke === void 0, revoke };
154446
154875
  }
154447
154876
  async function listDecisions(dorkHome) {
154448
- const { approved, refused: refused2, unreadable } = await readStoredDecisions(dorkHome);
154877
+ const { approved, refused: refused3, unreadable } = await readStoredDecisions(dorkHome);
154449
154878
  if (unreadable !== void 0) {
154450
154879
  console.error(`DorkOS could not read ${configPathFor(dorkHome)}: ${unreadable}`);
154451
154880
  console.error(
@@ -154453,7 +154882,7 @@ async function listDecisions(dorkHome) {
154453
154882
  );
154454
154883
  return 1;
154455
154884
  }
154456
- if (approved.length === 0 && refused2.length === 0) {
154885
+ if (approved.length === 0 && refused3.length === 0) {
154457
154886
  console.log("No hook decisions stored yet.");
154458
154887
  console.log(
154459
154888
  " A package that ships hooks is held back until you allow it, and nothing here has been asked about."
@@ -154473,7 +154902,7 @@ async function listDecisions(dorkHome) {
154473
154902
  console.log(`Hook decisions stored in ${configPathFor(dorkHome)}:`);
154474
154903
  for (const [heading, entries] of [
154475
154904
  ["Allowed to run commands", approved],
154476
- ["Turned down", refused2]
154905
+ ["Turned down", refused3]
154477
154906
  ]) {
154478
154907
  if (entries.length === 0) continue;
154479
154908
  console.log("");
@@ -158198,7 +158627,7 @@ function createInstallationTransaction(configuration, dependencies, generation3)
158198
158627
  check4(bounds, options.signal);
158199
158628
  const candidate = reuse ? await fs40.bindExistingCandidate(reservation, attempt, reserved.installation) : await fs40.stageCandidate(reservation, attempt);
158200
158629
  require2(sameBinding(candidate.binding, binding) && candidate.reuse === reuse, "BINDING_MISMATCH");
158201
- const sink2 = fs40.createJobSink(reservation, attempt);
158630
+ const sink3 = fs40.createJobSink(reservation, attempt);
158202
158631
  let installer = {
158203
158632
  kind: "not-invoked"
158204
158633
  };
@@ -158211,7 +158640,7 @@ function createInstallationTransaction(configuration, dependencies, generation3)
158211
158640
  attempt,
158212
158641
  candidate,
158213
158642
  library,
158214
- sink: sink2,
158643
+ sink: sink3,
158215
158644
  signal: options.signal
158216
158645
  });
158217
158646
  const facts = jobReturned(run, "official-install", binding, bounds, [
@@ -158260,7 +158689,7 @@ function createInstallationTransaction(configuration, dependencies, generation3)
158260
158689
  attempt,
158261
158690
  candidate,
158262
158691
  library,
158263
- sink: sink2,
158692
+ sink: sink3,
158264
158693
  request,
158265
158694
  signal: options.signal
158266
158695
  });
@@ -162774,11 +163203,11 @@ function runProviderCommand(options) {
162774
163203
  if (code !== 0) {
162775
163204
  const errorOutput = Buffer.concat(stderrHead);
162776
163205
  const text3 = errorOutput.toString("utf8");
162777
- const refused2 = isProviderAccessRefusal(text3);
163206
+ const refused3 = isProviderAccessRefusal(text3);
162778
163207
  const keyKindLimited = isProviderKeyKindLimit(text3);
162779
163208
  errorOutput.fill(0);
162780
163209
  scrubStdout();
162781
- return reject(new ProviderCommandError("EXIT", refused2, keyKindLimited));
163210
+ return reject(new ProviderCommandError("EXIT", refused3, keyKindLimited));
162782
163211
  }
162783
163212
  const output2 = Buffer.concat(stdout3);
162784
163213
  try {
@@ -162826,12 +163255,12 @@ var init_provider_process = __esm({
162826
163255
  * @param refused - Whether the service definitely refused the credential.
162827
163256
  * @param keyKindLimited - Whether the endpoint does not serve this kind of key.
162828
163257
  */
162829
- constructor(code, refused2 = false, keyKindLimited = false) {
163258
+ constructor(code, refused3 = false, keyKindLimited = false) {
162830
163259
  super(`Provider command failed (${code})`);
162831
163260
  this.name = "ProviderCommandError";
162832
163261
  this.code = code;
162833
- this.refused = code === "EXIT" && refused2;
162834
- this.keyKindLimited = code === "EXIT" && !refused2 && keyKindLimited;
163262
+ this.refused = code === "EXIT" && refused3;
163263
+ this.keyKindLimited = code === "EXIT" && !refused3 && keyKindLimited;
162835
163264
  }
162836
163265
  };
162837
163266
  }
@@ -163873,7 +164302,7 @@ async function createFlyApp(options, appName, organizationSlug, network, readPro
163873
164302
  const app = parseInput2(ExternalIdentifierSchema, appName);
163874
164303
  const organization2 = parseInput2(ExternalIdentifierSchema, organizationSlug);
163875
164304
  const networkName = parseInput2(ExternalIdentifierSchema, network);
163876
- let refused2 = false;
164305
+ let refused3 = false;
163877
164306
  const created = await runProviderMutation({
163878
164307
  ...options,
163879
164308
  timeoutMs: writeDeadline(options.timeoutMs),
@@ -163905,14 +164334,14 @@ async function createFlyApp(options, appName, organizationSlug, network, readPro
163905
164334
  }
163906
164335
  }).catch((error63) => {
163907
164336
  if (!(error63 instanceof ProviderMutationError) || error63.code !== "ACCESS_DENIED") throw error63;
163908
- refused2 = true;
164337
+ refused3 = true;
163909
164338
  return null;
163910
164339
  });
163911
164340
  if (created) return created;
163912
164341
  const found = await readProvenance(app).catch(() => {
163913
164342
  throw new ProviderMutationError("CREATION_OUTCOME_UNCERTAIN");
163914
164343
  });
163915
- if (refused2 && found === FLY_APP_NOT_FOUND) {
164344
+ if (refused3 && found === FLY_APP_NOT_FOUND) {
163916
164345
  const listed2 = await readFlyApps(options, organization2).catch(() => null);
163917
164346
  if (listed2 !== null && !listed2.some((listedApp) => listedApp.name === app)) {
163918
164347
  throw new ProviderMutationError("ACCESS_DENIED");
@@ -170039,12 +170468,16 @@ async function runAuthEnable(deps) {
170039
170468
  io.error("A password is required.");
170040
170469
  return 1;
170041
170470
  }
170471
+ let signUpToken;
170042
170472
  try {
170043
- await auth.api.signUpEmail({ body: { name: "", email: email3, password } });
170473
+ ({ token: signUpToken } = await auth.api.signUpEmail({
170474
+ body: { name: "", email: email3, password }
170475
+ }));
170044
170476
  } catch (err) {
170045
170477
  io.error(`Could not create the owner account: ${errorMessage(err)}`);
170046
170478
  return 1;
170047
170479
  }
170480
+ if (signUpToken) await (await auth.$context).internalAdapter.deleteSession(signUpToken);
170048
170481
  configStore.setDot("auth.enabled", true);
170049
170482
  io.log(`Owner account created for ${email3}.`);
170050
170483
  io.log("This computer now asks for a password too. Other devices always do.");
@@ -170092,9 +170525,9 @@ async function runAuthResetPassword(deps) {
170092
170525
  io.log(
170093
170526
  `Signed out everywhere (${signedOut} ${signedOut === 1 ? "sign-in" : "sign-ins"} ended). Sign in again with the new password.`
170094
170527
  );
170528
+ io.log("A running DorkOS closes their open chat streams and terminals within a minute.");
170095
170529
  io.log("What this cannot cut off yet:");
170096
170530
  io.log(" - a window already open may keep working for up to 5 minutes;");
170097
- io.log(" - live chat streams and terminals stay open until they reconnect;");
170098
170531
  io.log(" - API keys keep working. Revoke them in Settings > Login & security.");
170099
170532
  return 0;
170100
170533
  }
@@ -172677,6 +173110,40 @@ Examples:
172677
173110
  }
172678
173111
  });
172679
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
+
172680
173147
  // src/commands/permissions.ts
172681
173148
  var permissions_exports = {};
172682
173149
  __export(permissions_exports, {
@@ -172969,18 +173436,6 @@ function defaultKeyOf(target, overview) {
172969
173436
  const area = overview.areas.find((a2) => a2.actions.some((action) => action.id === target.id));
172970
173437
  return area ? { kind: "action", action: target.id, area: area.id } : void 0;
172971
173438
  }
172972
- function valueText(value, key) {
172973
- if (value === null) return "not set";
172974
- const labels = key.kind === "files" ? STOP_LABEL : key.kind === "preset" ? PRESET_LABEL : STATE_LABEL;
172975
- return labels[value] ?? value;
172976
- }
172977
- function skipRow(skip) {
172978
- const { change } = skip;
172979
- const who = change.target.kind === "agent" ? change.target.agentName : "Everyone";
172980
- 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";
172981
- 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";
172982
- return [who, what, valueText(change.before, change.key), why];
172983
- }
172984
173439
  async function runPermissionsUndo(rawArgs) {
172985
173440
  const { values: values2, positionals: positionals2 } = parseArgs27({
172986
173441
  args: rawArgs,
@@ -173013,7 +173468,12 @@ async function runPermissionsUndo(rawArgs) {
173013
173468
  );
173014
173469
  if (result2.skipped.length > 0) {
173015
173470
  console.log("Left alone:");
173016
- 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
+ );
173017
173477
  }
173018
173478
  return 0;
173019
173479
  } catch (err) {
@@ -173021,7 +173481,12 @@ async function runPermissionsUndo(rawArgs) {
173021
173481
  if (err instanceof ApiError && err.body.code === "UNDO_CONFLICT") {
173022
173482
  const conflicts = err.body.conflicts ?? [];
173023
173483
  if (conflicts.length > 0) {
173024
- 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
+ );
173025
173490
  }
173026
173491
  console.error(`Run \`dorkos permissions undo ${eventId} --force\` to set it back anyway.`);
173027
173492
  }
@@ -173113,11 +173578,12 @@ ${usage}`);
173113
173578
  return 1;
173114
173579
  }
173115
173580
  }
173116
- 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;
173117
173582
  var init_permissions2 = __esm({
173118
173583
  "src/commands/permissions.ts"() {
173119
173584
  "use strict";
173120
173585
  init_permissions();
173586
+ init_permission_undo_rows();
173121
173587
  init_api_client();
173122
173588
  init_operator_output();
173123
173589
  PERMISSIONS_HELP = `Usage: dorkos permissions <subcommand> [options]
@@ -173184,6 +173650,7 @@ Examples:
173184
173650
  ask: "Ask",
173185
173651
  allowed: "Allowed"
173186
173652
  };
173653
+ UNDO_LABELS = { stop: STOP_LABEL, preset: PRESET_LABEL, state: STATE_LABEL };
173187
173654
  }
173188
173655
  });
173189
173656
 
@@ -176836,7 +177303,7 @@ if (process.argv[2] === "community") {
176836
177303
  );
176837
177304
  Object.assign(childEnv, credentialEnv.pickCommunityCredentialEnv(rawProcessEnv));
176838
177305
  const exitCode = await dispatcher.runCommunityDispatcher(process.argv.slice(3), {
176839
- cliVersion: "0.123.0",
177306
+ cliVersion: "0.124.0",
176840
177307
  dorkHome: DORK_HOME,
176841
177308
  processEnv: childEnv,
176842
177309
  parseRelease: (bytes) => releaseContract.parseCompatibleCommunityReleaseManifest(
@@ -176854,7 +177321,7 @@ if (process.argv[2] === "community") {
176854
177321
  process.exit(1);
176855
177322
  }
176856
177323
  }
176857
- var cliErrorReporter = initCliErrorReporting({ dorkHome: DORK_HOME, version: "0.123.0" });
177324
+ var cliErrorReporter = initCliErrorReporting({ dorkHome: DORK_HOME, version: "0.124.0" });
176858
177325
  var uninstallCliErrorHandlers = cliErrorReporter ? installCliErrorHandlers(cliErrorReporter) : void 0;
176859
177326
  if (process.argv[2] === "doctor") {
176860
177327
  process.env.DORK_HOME = DORK_HOME;
@@ -176864,7 +177331,7 @@ if (process.argv[2] === "doctor") {
176864
177331
  if (process.argv[2] === "feedback") {
176865
177332
  process.env.DORK_HOME = DORK_HOME;
176866
177333
  const { runFeedback: runFeedback2 } = await Promise.resolve().then(() => (init_feedback2(), feedback_exports));
176867
- process.exit(await runFeedback2(DORK_HOME, "0.123.0", process.argv.slice(3)));
177334
+ process.exit(await runFeedback2(DORK_HOME, "0.124.0", process.argv.slice(3)));
176868
177335
  }
176869
177336
  if (process.argv[2] === "auth") {
176870
177337
  process.env.DORK_HOME = DORK_HOME;
@@ -176963,7 +177430,7 @@ if (process.argv[2] === "agent" || process.argv[2] === "task" || process.argv[2]
176963
177430
  }
176964
177431
  }
176965
177432
  const { runVersionDispatcher: runVersionDispatcher2 } = await Promise.resolve().then(() => (init_version5(), version_exports));
176966
- process.exit(await runVersionDispatcher2("0.123.0", DORK_HOME, subArgs));
177433
+ process.exit(await runVersionDispatcher2("0.124.0", DORK_HOME, subArgs));
176967
177434
  }
176968
177435
  var { values, positionals } = parseCliArgs();
176969
177436
  if (positionals[0] && !knownCommands.has(positionals[0])) {
@@ -177057,14 +177524,14 @@ Examples:
177057
177524
  process.exit(0);
177058
177525
  }
177059
177526
  if (values.version) {
177060
- console.log("0.123.0");
177527
+ console.log("0.124.0");
177061
177528
  process.exit(0);
177062
177529
  }
177063
177530
  if (values["post-install-check"]) {
177064
177531
  const claudeFound = checkClaude();
177065
177532
  const coreExtensionsFound = checkCoreExtensions();
177066
177533
  const extensionsCompile = await checkExtensionCompilation();
177067
- console.log(`dorkos ${"0.123.0"}`);
177534
+ console.log(`dorkos ${"0.124.0"}`);
177068
177535
  if (!coreExtensionsFound) {
177069
177536
  console.log("Installation incomplete \u2014 bundled core extensions are missing.");
177070
177537
  }
@@ -177212,7 +177679,7 @@ if (fs39.existsSync(envPath)) {
177212
177679
  }
177213
177680
  uninstallCliErrorHandlers?.();
177214
177681
  process.env.DORKOS_CLI_ENTRYPOINT = fileURLToPath7(import.meta.url);
177215
- process.env.DORKOS_CLI_VERSION = "0.123.0";
177682
+ process.env.DORKOS_CLI_VERSION = "0.124.0";
177216
177683
  var server;
177217
177684
  try {
177218
177685
  server = await import("../server/index.js");
@@ -177237,7 +177704,7 @@ var ansiReset = "\x1B[0m";
177237
177704
  console.log("");
177238
177705
  console.log(`${purple}${logo}${ansiReset}`);
177239
177706
  console.log("");
177240
- console.log(` DorkOS v${"0.123.0"}`);
177707
+ console.log(` DorkOS v${"0.124.0"}`);
177241
177708
  console.log(` Local: ${link(localUrl, localUrl)}`);
177242
177709
  var nets = networkInterfaces();
177243
177710
  var networkUrl = null;
@@ -177263,9 +177730,9 @@ if (shouldOpenBrowser && process.stdin.isTTY) {
177263
177730
  const openCmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
177264
177731
  exec(`${openCmd} ${localUrl}`);
177265
177732
  }
177266
- checkForUpdate("0.123.0").then((latestVersion) => {
177733
+ checkForUpdate("0.124.0").then((latestVersion) => {
177267
177734
  if (latestVersion) {
177268
- const msg = `Update available: ${"0.123.0"} \u2192 ${latestVersion}`;
177735
+ const msg = `Update available: ${"0.124.0"} \u2192 ${latestVersion}`;
177269
177736
  const cmd = "Run npm install -g dorkos@latest to update";
177270
177737
  const width = Math.max(msg.length, cmd.length) + 6;
177271
177738
  const pad2 = (s2) => `\u2502 ${s2}${" ".repeat(width - s2.length - 6)} \u2502`;