dorkos 0.129.0 → 0.130.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 (327) hide show
  1. package/dist/bin/cli.js +694 -513
  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-CML_SdU1.js → AboutPage-B2CzVj5W.js} +1 -1
  5. package/dist/client/assets/{ActivityErrorState-TuQRJopr.js → ActivityErrorState-Dl-P-e0R.js} +1 -1
  6. package/dist/client/assets/{ActivityPage-CmSxeVSK.js → ActivityPage-CW7tqLHb.js} +1 -1
  7. package/dist/client/assets/{ActivityRow-DJhDehIR.js → ActivityRow-Vy4aXWk-.js} +1 -1
  8. package/dist/client/assets/{AdapterIcon-CeRDpZGz.js → AdapterIcon-aabKVZmM.js} +1 -1
  9. package/dist/client/assets/{AdapterSetupWizard-B6KkTuJo.js → AdapterSetupWizard-C5Hs0xkG.js} +2 -2
  10. package/dist/client/assets/{AgentOptionRow-388OJkPc.js → AgentOptionRow-CqIMxq9S.js} +1 -1
  11. package/dist/client/assets/{AgentPicker-C51wqToQ.js → AgentPicker-C6mbTDJJ.js} +1 -1
  12. package/dist/client/assets/{AgentRequestCard-Bz31ewIs.js → AgentRequestCard-C8GV5Sxn.js} +3 -3
  13. package/dist/client/assets/{AppearancePage-DSVeowGb.js → AppearancePage-C0JKrHsO.js} +1 -1
  14. package/dist/client/assets/{ApplyToOverridesDialog-DRtcLrVY.js → ApplyToOverridesDialog-DWEi0MNt.js} +1 -1
  15. package/dist/client/assets/{AttentionSignalRow-CqKZyoxB.js → AttentionSignalRow-Cpu0lKYg.js} +1 -1
  16. package/dist/client/assets/{BaseTanStackRouterDevtoolsPanel-B-iktbLX-DA1jhqFy.js → BaseTanStackRouterDevtoolsPanel-B-iktbLX-_zVrHu5s.js} +1 -1
  17. package/dist/client/assets/{BindingDialog-D25PAed0.js → BindingDialog-4UeaJfUu.js} +1 -1
  18. package/dist/client/assets/BlintzCanvas-DCXIQZM_.js +1231 -0
  19. package/dist/client/assets/{CanvasCsvContent-ZWHWmb88.js → CanvasCsvContent-D-0TuvVs.js} +1 -1
  20. package/dist/client/assets/{CanvasFileContent-DR5pUgca.js → CanvasFileContent-DqSx7lz9.js} +2 -2
  21. package/dist/client/assets/{CanvasModel3dContent-OP1ZOMui.js → CanvasModel3dContent-zTx660yQ.js} +2 -2
  22. package/dist/client/assets/ChannelComposer-D4TYVkvO.js +45 -0
  23. package/dist/client/assets/{ChatAppsOff-ByitL4Xt.js → ChatAppsOff-BzfyQc55.js} +1 -1
  24. package/dist/client/assets/{CodeMirrorDiff-JsV_vWBa.js → CodeMirrorDiff-BLWBYGLp.js} +1 -1
  25. package/dist/client/assets/{CodeMirrorEditor-BfCJG9hQ.js → CodeMirrorEditor-D0q3ETxK.js} +1 -1
  26. package/dist/client/assets/{CommitmentList-yFV3_m00.js → CommitmentList-BoMiLsRe.js} +1 -1
  27. package/dist/client/assets/{CommitmentsPage-DeERVg-2.js → CommitmentsPage-_7mNJVUZ.js} +1 -1
  28. package/dist/client/assets/{ComputerResourceView-CYMMSE8Y.js → ComputerResourceView-Bo2LaCJf.js} +1 -1
  29. package/dist/client/assets/{ComputerViewer-H7kJSIj7.js → ComputerViewer-a4VSdAw_.js} +1 -1
  30. package/dist/client/assets/{ConnectionAccessLists-SRkf7-Y6.js → ConnectionAccessLists-Dvv0YO31.js} +1 -1
  31. package/dist/client/assets/{ConnectionsPage-D6e3hd4L.js → ConnectionsPage-oO8pNgbc.js} +2 -2
  32. package/dist/client/assets/{ConventionPage-CpvRMcSG.js → ConventionPage-CFJjwhBd.js} +2 -2
  33. package/dist/client/assets/{ExtensionPageRoute-CiFv6we8.js → ExtensionPageRoute-BqZN9q7M.js} +2 -2
  34. package/dist/client/assets/{FloatingTanStackRouterDevtools-CqogiFob-D-8CeYC7.js → FloatingTanStackRouterDevtools-CqogiFob-CnSp2ZEM.js} +1 -1
  35. package/dist/client/assets/{ForwardConsentHost-ml3b_fsX.js → ForwardConsentHost-4LhRvCdu.js} +1 -1
  36. package/dist/client/assets/HandlePage-BjoYPqme.js +1 -0
  37. package/dist/client/assets/{HeartbeatPage-C0zSvWH4.js → HeartbeatPage-rJzICayy.js} +1 -1
  38. package/dist/client/assets/{KeyEntry-Dq6eKAbX.js → KeyEntry-BTTuXleL.js} +1 -1
  39. package/dist/client/assets/{LexicalField-CYOqOLpV.js → LexicalField-Dk_SDrjk.js} +1 -1
  40. package/dist/client/assets/{ManagesPage-DZTMD3Al.js → ManagesPage-Cvu3CQDn.js} +1 -1
  41. package/dist/client/assets/{Marketplace-buSfuVrY.js → Marketplace-DPjPPlZz.js} +2 -2
  42. package/dist/client/assets/{MarketplaceSourcesView-BxwvBWgh.js → MarketplaceSourcesView-ChCys0on.js} +1 -1
  43. package/dist/client/assets/{McpAppFrame-CWiRFp8o.js → McpAppFrame-DNamtzOp.js} +2 -2
  44. package/dist/client/assets/{McpSigninBody-BpYSAV1h.js → McpSigninBody-DLw3ZdZE.js} +1 -1
  45. package/dist/client/assets/{Model3dViewer-B2KTvx6d.js → Model3dViewer-IwCBCPZ2.js} +1 -1
  46. package/dist/client/assets/NamePage-FY_D0eA2.js +1 -0
  47. package/dist/client/assets/NewDirectMessageMenu-BB0gvClR.js +1 -0
  48. package/dist/client/assets/{NotificationsPage-CWXIghVM.js → NotificationsPage-aCF0AtqL.js} +1 -1
  49. package/dist/client/assets/{OpenMeshSwitch-C9hiAEHP.js → OpenMeshSwitch-DjCWF2Vy.js} +2 -2
  50. package/dist/client/assets/{OperatorIdentityForm-CjmMoP6n.js → OperatorIdentityForm-Bcveds6f.js} +1 -1
  51. package/dist/client/assets/{PermissionHistory-D_Imuq02.js → PermissionHistory-CYsxFYmV.js} +1 -1
  52. package/dist/client/assets/{PermissionsPage-QMLV8PfB.js → PermissionsPage-sxHkY92V.js} +1 -1
  53. package/dist/client/assets/{PersonalityPopover-BL9DLK0Q.js → PersonalityPopover-BZ20JTnJ.js} +1 -1
  54. package/dist/client/assets/PhotoPage-KBzkb0sT.js +1 -0
  55. package/dist/client/assets/{PreviewRefusedNotice-Dt2hV0aJ.js → PreviewRefusedNotice-BFQPYcUG.js} +1 -1
  56. package/dist/client/assets/{ProfileFields-DD6X85w2.js → ProfileFields-sp17IFo8.js} +1 -1
  57. package/dist/client/assets/{ProfilePanelContainer-DuFEpNJ3.js → ProfilePanelContainer-mA44jh5A.js} +1 -1
  58. package/dist/client/assets/{ProfileRolePicker-CT9eJ1J0.js → ProfileRolePicker-Chh4_ZMB.js} +1 -1
  59. package/dist/client/assets/{PromptSuggestionChips-C8V611-5.js → PromptSuggestionChips-CEi_-fHF.js} +1 -1
  60. package/dist/client/assets/{ReportsToPopover-Bs55bP7b.js → ReportsToPopover-D1uknwnk.js} +1 -1
  61. package/dist/client/assets/RoomSurface-Clf1yLrr.js +1 -0
  62. package/dist/client/assets/{RoomsPage-CDiSwt-I.js → RoomsPage-BtCNzvhQ.js} +1 -1
  63. package/dist/client/assets/{RunsOnPopover-CFBDa9DO.js → RunsOnPopover-LCvBpe9J.js} +1 -1
  64. package/dist/client/assets/{RuntimeConnectFlow-DsawxJN7.js → RuntimeConnectFlow-C5UDeHUC.js} +1 -1
  65. package/dist/client/assets/{RuntimeSetupDialog-bdf844gx.js → RuntimeSetupDialog-Bqh67Vqb.js} +1 -1
  66. package/dist/client/assets/{SeenDevices-Cix5nnGQ.js → SeenDevices-DvCfdeDo.js} +3 -3
  67. package/dist/client/assets/{SessionsPage-CCu8rM-J.js → SessionsPage-DLByE-re.js} +1 -1
  68. package/dist/client/assets/{SettingsDialog-D7sVluoe.js → SettingsDialog-Co-Oxtyw.js} +3 -3
  69. package/dist/client/assets/{SkillsPage-SSq7ofgp.js → SkillsPage-Cc79IstM.js} +1 -1
  70. package/dist/client/assets/{TaskDialogWrapper-CBIuIbmj.js → TaskDialogWrapper-DuYV7Zch.js} +1 -1
  71. package/dist/client/assets/{TasksEmptyState-C0K_NOA3.js → TasksEmptyState-CfmPtBra.js} +2 -2
  72. package/dist/client/assets/{TasksPage-BpSn7GmR.js → TasksPage-DGk0zUhO.js} +1 -1
  73. package/dist/client/assets/{TeamComputerEntry-BAi9omUC.js → TeamComputerEntry-CLHbeX5i.js} +1 -1
  74. package/dist/client/assets/{ToolsPage-nkGWy6MR.js → ToolsPage-CSkDE7rZ.js} +2 -2
  75. package/dist/client/assets/{TopologyGraph-D6SSv0kC.js → TopologyGraph-pBC37k5P.js} +1 -1
  76. package/dist/client/assets/{TourHost-CrZciWIf.js → TourHost-CS9RsLj_.js} +1 -1
  77. package/dist/client/assets/{UnlinkDialog-B9zw8r6F.js → UnlinkDialog-CelhOUZ0.js} +1 -1
  78. package/dist/client/assets/{UnreadDivider-BnJ06LmP.js → UnreadDivider-B_OMR0mQ.js} +1 -1
  79. package/dist/client/assets/{WidgetErrorCard-CQKYI7oK.js → WidgetErrorCard-CsMqCyCb.js} +9 -9
  80. package/dist/client/assets/{WithheldExtensionsNotice-VMM5NjL5.js → WithheldExtensionsNotice-GiKb0iQu.js} +1 -1
  81. package/dist/client/assets/WorkQueuePage-Cu721KyM.js +1 -0
  82. package/dist/client/assets/{WorkView-D5d8DDxS.js → WorkView-CpWEaxMr.js} +1 -1
  83. package/dist/client/assets/_shell-CmGG8Ysk.js +80 -0
  84. package/dist/client/assets/{_shell._home-CcfELPIk.js → _shell._home-BnKkAeSp.js} +1 -1
  85. package/dist/client/assets/{_shell._home.activity-CGKsuLq8.js → _shell._home.activity-DaaLJbvO.js} +1 -1
  86. package/dist/client/assets/{_shell._home.index-DrJRgJCb.js → _shell._home.index-CNPasFxP.js} +2 -2
  87. package/dist/client/assets/_shell._home.tasks-DXEOJ5Nq.js +1 -0
  88. package/dist/client/assets/{_shell._home.workspaces-CjBJymCW.js → _shell._home.workspaces-UeSvmquR.js} +1 -1
  89. package/dist/client/assets/{_shell.channels-CzQFR6pU.js → _shell.channels-NUbf5mcb.js} +1 -1
  90. package/dist/client/assets/{_shell.connections-B5hafeep.js → _shell.connections-BEns4DKb.js} +1 -1
  91. package/dist/client/assets/{_shell.feedback-requests-DtD2bH-4.js → _shell.feedback-requests-NyjHNdnj.js} +2 -2
  92. package/dist/client/assets/_shell.marketplace-BEYqsDKe.js +1 -0
  93. package/dist/client/assets/_shell.marketplace_.sources-D6Ls30FY.js +1 -0
  94. package/dist/client/assets/_shell.session-CVc6i3eN.js +1 -0
  95. package/dist/client/assets/{_shell.team-BrGo-IxK.js → _shell.team-CXeOt4XD.js} +4 -4
  96. package/dist/client/assets/{_shell.threads-Ceq_tmNk.js → _shell.threads-BYdN1UtZ.js} +1 -1
  97. package/dist/client/assets/_shell.x._extensionId-DtJYSfvG.js +1 -0
  98. package/dist/client/assets/_shell.x._extensionId_._-DtJYSfvG.js +1 -0
  99. package/dist/client/assets/{abnfDiagram-WEYOIA3C-BN5bqwbu.js → abnfDiagram-WEYOIA3C-BLCVDt6M.js} +1 -1
  100. package/dist/client/assets/{access-copy-BAhTOOsG.js → access-copy-BSQ3QECN.js} +1 -1
  101. package/dist/client/assets/{arc-BfTE_VoF.js → arc-t4OhsI5R.js} +1 -1
  102. package/dist/client/assets/{architectureDiagram-ZHVYKT53-Dc6keeDz.js → architectureDiagram-ZHVYKT53-BcIfbGZR.js} +1 -1
  103. package/dist/client/assets/{banner-DOgGDCJ5.js → banner-B6xfuDA7.js} +1 -1
  104. package/dist/client/assets/{blockDiagram-RJAE7QA3-B4c6U-ob.js → blockDiagram-RJAE7QA3-DTOlrcEZ.js} +1 -1
  105. package/dist/client/assets/{c4Diagram-XDPPPE54-CCtD8QC8.js → c4Diagram-XDPPPE54-CHGqwaxa.js} +1 -1
  106. package/dist/client/assets/channel-CSk6LhO2.js +1 -0
  107. package/dist/client/assets/{chunk-2E7WHVMD-DcDNqIJG.js → chunk-2E7WHVMD-Bh4L_7yX.js} +1 -1
  108. package/dist/client/assets/{chunk-2Q5K7J3B-DOVVK0B8.js → chunk-2Q5K7J3B-BmouLl8r.js} +1 -1
  109. package/dist/client/assets/{chunk-4EMNKR2T-Cg-Do982.js → chunk-4EMNKR2T-BVhtiAdG.js} +1 -1
  110. package/dist/client/assets/{chunk-55XCU76K-CDmULSeY.js → chunk-55XCU76K-BdbLnE56.js} +1 -1
  111. package/dist/client/assets/{chunk-5VM5RSS4-Bi0yIWW1.js → chunk-5VM5RSS4-Qg9lQpPO.js} +1 -1
  112. package/dist/client/assets/{chunk-JWPE2WC7-ZHaJh6CV.js → chunk-JWPE2WC7-CfIrQaMW.js} +1 -1
  113. package/dist/client/assets/{chunk-VQ5W62QI-DZi6GyW_.js → chunk-VQ5W62QI-BP9oQzc0.js} +1 -1
  114. package/dist/client/assets/{chunk-XXDRQBXY-D18oZOrd.js → chunk-XXDRQBXY-DKzIjnsB.js} +1 -1
  115. package/dist/client/assets/{chunk-ZCHMQSOR-BkZ0l0fE.js → chunk-ZCHMQSOR-DsvG6BGY.js} +2 -2
  116. package/dist/client/assets/{classDiagram-v2-4MYWR3UA-BfmK1buF.js → classDiagram-v2-4MYWR3UA-BSiSmGgP.js} +1 -1
  117. package/dist/client/assets/{command-CZqA020F.js → command-B_FPXirc.js} +1 -1
  118. package/dist/client/assets/{copy-button-ByA00JGh.js → copy-button-Bp75zBSh.js} +1 -1
  119. package/dist/client/assets/{cose-bilkent-JH36ORCC-B1NTVSbk.js → cose-bilkent-JH36ORCC-CXgyrZix.js} +1 -1
  120. package/dist/client/assets/{cpu-DNvpMmNN.js → cpu-DpkNIYeK.js} +1 -1
  121. package/dist/client/assets/{cynefin-EF2NZ3EQ-CB_HMIZ8.js → cynefin-EF2NZ3EQ-DkmPO3hK.js} +1 -1
  122. package/dist/client/assets/{cynefinDiagram-WF24UDRP-MmIWYdc2.js → cynefinDiagram-WF24UDRP-BDknJT17.js} +1 -1
  123. package/dist/client/assets/{dagre-NK4GIZVX-BQay0k4e.js → dagre-NK4GIZVX-BR4J5E3b.js} +1 -1
  124. package/dist/client/assets/{detail-row-290qyusq.js → detail-row-C8zz6mAC.js} +1 -1
  125. package/dist/client/assets/{diagram-CBK3MWTC-C1lRH4cb.js → diagram-CBK3MWTC-CvLKqPry.js} +1 -1
  126. package/dist/client/assets/{diagram-I5XIIV2D-CnANa27A.js → diagram-I5XIIV2D-CVtE60X9.js} +1 -1
  127. package/dist/client/assets/{diagram-ODIL2UCW-Cwt7hxes.js → diagram-ODIL2UCW-B--CpfLk.js} +1 -1
  128. package/dist/client/assets/{diagram-PFBEJUXE-DZtAER77.js → diagram-PFBEJUXE-08gch1t1.js} +1 -1
  129. package/dist/client/assets/{diagram-RJA3I4VV-CbVXbiGs.js → diagram-RJA3I4VV-C2e-ubaD.js} +1 -1
  130. package/dist/client/assets/{diagram-TYUNFSNR-D-AcGdsL.js → diagram-TYUNFSNR-DcpK4OXX.js} +1 -1
  131. package/dist/client/assets/{ebnfDiagram-V4P3TTPT-DLkrFSAy.js → ebnfDiagram-V4P3TTPT-DM44BkBt.js} +1 -1
  132. package/dist/client/assets/{elk-QONTBCTQ-DQM6Glxa.js → elk-QONTBCTQ-maYS1Zzm.js} +1 -1
  133. package/dist/client/assets/{empty-state-BnuM8oop.js → empty-state-HtOTBAoq.js} +1 -1
  134. package/dist/client/assets/{erDiagram-KYQIGQAA-C1qgB1Mn.js → erDiagram-KYQIGQAA-BR7z9r2M.js} +1 -1
  135. package/dist/client/assets/{execution-config-BjLHHc9x.js → execution-config-DYYeJyJh.js} +1 -1
  136. package/dist/client/assets/{file-D7_QdH_S.js → file-VtGYNr9E.js} +1 -1
  137. package/dist/client/assets/{file-exclamation-point-Cdt8YqyQ.js → file-exclamation-point-eBlQssyW.js} +1 -1
  138. package/dist/client/assets/{file-text-CB9l6Ur-.js → file-text-DvNAxTGZ.js} +1 -1
  139. package/dist/client/assets/{find-latest-widget-fence-SQB9WgjN.js → find-latest-widget-fence-C2qXvASs.js} +3 -3
  140. package/dist/client/assets/{flowDiagram-IUGLLWBU-DH-ePeFu.js → flowDiagram-IUGLLWBU-DiuMtMbj.js} +1 -1
  141. package/dist/client/assets/{form--HjBAzX8.js → form-CGIIzr1u.js} +1 -1
  142. package/dist/client/assets/{format-cron-svkfKW5b.js → format-cron-BzJ6ekoo.js} +1 -1
  143. package/dist/client/assets/{ganttDiagram-R7GPNTJY-fjb_iAW1.js → ganttDiagram-R7GPNTJY-Cf_z8Ri1.js} +1 -1
  144. package/dist/client/assets/{git-branch-CPOwiT8a.js → git-branch-BVzjBPW-.js} +1 -1
  145. package/dist/client/assets/{gitGraphDiagram-PDYL7XHY-CcCqH5T3.js → gitGraphDiagram-PDYL7XHY-RZXACCBr.js} +1 -1
  146. package/dist/client/assets/{graph-DS3J2jnN.js → graph-DfAV_ObD.js} +1 -1
  147. package/dist/client/assets/{heart-C6uRnXx3.js → heart-BMOCYMFT.js} +1 -1
  148. package/dist/client/assets/{highlighted-body-KPVGNVTW-CNygKq0i.js → highlighted-body-KPVGNVTW-DrrsaKBc.js} +1 -1
  149. package/dist/client/assets/{image-lightbox-BQV3i0WJ.js → image-lightbox-tAwBNBhm.js} +1 -1
  150. package/dist/client/assets/{image-off-B88WBkcV.js → image-off-BpagBHk1.js} +1 -1
  151. package/dist/client/assets/{index-UJpgX--l.js → index-0uCJUW_h.js} +2 -2
  152. package/dist/client/assets/index-0y0K3rYv.js +1 -0
  153. package/dist/client/assets/{index-B_YZ5cyn.js → index-2GjydAcS.js} +1 -1
  154. package/dist/client/assets/{index-tRdq7FGO.js → index-6dsaPQ7-.js} +1 -1
  155. package/dist/client/assets/{index-DhqeMM58.js → index-7-yzdcAx.js} +3 -3
  156. package/dist/client/assets/{index-DXZ-w0Z9.js → index-A7HgzxSw.js} +1 -1
  157. package/dist/client/assets/{index-BTqJGL1_.js → index-BEqKTiCR.js} +1 -1
  158. package/dist/client/assets/{index-B_v2l2ND.js → index-BIN0yv4s.js} +1 -1
  159. package/dist/client/assets/{index-B6pmysqs.js → index-BL5Vmq62.js} +1 -1
  160. package/dist/client/assets/index-BOvFXsF_.js +1 -0
  161. package/dist/client/assets/{index-BtTqA4_d.js → index-BbcfxnHC.js} +1 -1
  162. package/dist/client/assets/{index-D0QV18E0.js → index-BdKIijqB.js} +1 -1
  163. package/dist/client/assets/{index-CZmU-67J.js → index-BfAymWoj.js} +1 -1
  164. package/dist/client/assets/{index-COXdXByr.js → index-Bgts5its.js} +1 -1
  165. package/dist/client/assets/{index-DYQjub9g.js → index-BiL3chP7.js} +1 -1
  166. package/dist/client/assets/{index-C7I0BjyX.js → index-Bu3PEVA_.js} +1 -1
  167. package/dist/client/assets/{index-BKdXHSbr.js → index-C6DTV4h3.js} +1 -1
  168. package/dist/client/assets/{index-DK8zHloW.js → index-CCH9c-nB.js} +1 -1
  169. package/dist/client/assets/{index-oc-yQ5Q4.js → index-CH4NJ8dD.js} +1 -1
  170. package/dist/client/assets/{index-BxsALYNM.js → index-CKGJp3Cm.js} +1 -1
  171. package/dist/client/assets/{index-BIZNH5u1.js → index-CeqI4FFw.js} +1 -1
  172. package/dist/client/assets/{index-Cbk19RQp.js → index-Cj9-XXKl.js} +1 -1
  173. package/dist/client/assets/{index-um-0KSur.js → index-Cu8tnfM_.js} +1 -1
  174. package/dist/client/assets/{index-B_rc9Pb1.js → index-D4OWRMsG.js} +1 -1
  175. package/dist/client/assets/{index-RQhQx8gq.js → index-D8SP73Xw.js} +1 -1
  176. package/dist/client/assets/{index-CEicS7Zi.js → index-DEJXVqcY.js} +1 -1
  177. package/dist/client/assets/{index-CTJA-mZu.js → index-DEMZynQt.js} +1 -1
  178. package/dist/client/assets/{index-5RD9flqf.js → index-DGzMwE1Z.js} +1 -1
  179. package/dist/client/assets/{index-CLTrC-a-.js → index-DIJdZqg2.js} +3 -3
  180. package/dist/client/assets/{index-Ds9wPt9M.js → index-DIRqrOEK.js} +1 -1
  181. package/dist/client/assets/{index-DBAPfYwE.js → index-DNbdGvs9.js} +1 -1
  182. package/dist/client/assets/{index-D5fV4hrl.js → index-DOBjxRe9.js} +1 -1
  183. package/dist/client/assets/{index-57qzL_5b.js → index-DcBlHsnC.js} +1 -1
  184. package/dist/client/assets/index-DdsaTuqO.js +1 -0
  185. package/dist/client/assets/{index-BN3zOTbR.js → index-Dt4H9Tms.js} +3 -3
  186. package/dist/client/assets/{index-BNq_mnok.js → index-HXC63Ry8.js} +1 -1
  187. package/dist/client/assets/index-MHIn2TC9.js +1063 -0
  188. package/dist/client/assets/{index-DdBvjuc4.js → index-OjJ_8uMM.js} +1 -1
  189. package/dist/client/assets/index-P4Wos1Gi.css +1 -0
  190. package/dist/client/assets/{index-Bktc0aFV.js → index-U5jTIqzv.js} +1 -1
  191. package/dist/client/assets/{index-CLVvKY2v.js → index-ZzPr9GUI.js} +1 -1
  192. package/dist/client/assets/{index-DO8NbOqk.js → index-d9cqTUAj.js} +1 -1
  193. package/dist/client/assets/{index-Cbbw2ByB.js → index-fcfCRITA.js} +1 -1
  194. package/dist/client/assets/{index-3CJSEcZE.js → index-onQlu3UR.js} +1 -1
  195. package/dist/client/assets/{index.esm-B10OaB6F.js → index.esm-DSKTDEoH.js} +1 -1
  196. package/dist/client/assets/{infoDiagram-MVDRKAX5-CGtvYWtj.js → infoDiagram-MVDRKAX5-B8dulOBe.js} +1 -1
  197. package/dist/client/assets/{inline-code-BL-6EKVP.js → inline-code-B3qpjdZ2.js} +1 -1
  198. package/dist/client/assets/{ishikawaDiagram-HPEHV2GE-ICsVVT2t.js → ishikawaDiagram-HPEHV2GE-Cy8aIg0O.js} +1 -1
  199. package/dist/client/assets/{journeyDiagram-BOSHW7O7-DEmSX2Hn.js → journeyDiagram-BOSHW7O7-BZAlejG3.js} +1 -1
  200. package/dist/client/assets/{kanban-definition-FNSA4HC5-SAV5PQOr.js → kanban-definition-FNSA4HC5-BxS1edpe.js} +1 -1
  201. package/dist/client/assets/{layers-Bfdpn7ZM.js → layers-ByCM7XO5.js} +1 -1
  202. package/dist/client/assets/{lightbulb-CSPTiZoi.js → lightbulb-KjW8YTXH.js} +1 -1
  203. package/dist/client/assets/{link-2-ZzmN9B9k.js → link-2-CtFfuMO5.js} +1 -1
  204. package/dist/client/assets/{list-runtime-types-7qV7HQ7K.js → list-runtime-types-DrzHejZo.js} +1 -1
  205. package/dist/client/assets/{markdown-content-CiDXslQf.js → markdown-content-DgiSdNwz.js} +1 -1
  206. package/dist/client/assets/mention-pill-CHPHlu-U.js +1 -0
  207. package/dist/client/assets/{mermaid.core-C-qvGQ5g.js → mermaid.core-ovqlC4PC.js} +4 -4
  208. package/dist/client/assets/{message-square-off-BehEHG9c.js → message-square-off-CEOyy4Pq.js} +1 -1
  209. package/dist/client/assets/{mindmap-definition-6OY57UG3-DzU2APoo.js → mindmap-definition-6OY57UG3-CsngqLzI.js} +1 -1
  210. package/dist/client/assets/{more-details-DF2dJXMV.js → more-details-BW9mauVT.js} +1 -1
  211. package/dist/client/assets/{owner-notice-DoH-_Veh.js → owner-notice-BRUVafHC.js} +1 -1
  212. package/dist/client/assets/{package-Fm_v1gMn.js → package-Bbs99yqi.js} +1 -1
  213. package/dist/client/assets/{page-container-Bcz5wJVR.js → page-container-BVfGgaaJ.js} +1 -1
  214. package/dist/client/assets/{pane-resize-handle-_EuIpxzc.js → pane-resize-handle-BL7Meu5R.js} +1 -1
  215. package/dist/client/assets/{paperclip-AGN67YEM.js → paperclip-QOWXs8-5.js} +1 -1
  216. package/dist/client/assets/{path-input-jrT0Ap4j.js → path-input-BDRHmgzW.js} +1 -1
  217. package/dist/client/assets/{pegDiagram-ECIUJNBX-CAyGJ7fm.js → pegDiagram-ECIUJNBX-DPsWmWqw.js} +1 -1
  218. package/dist/client/assets/{pieDiagram-GNMPY74T-tmLJe1p-.js → pieDiagram-GNMPY74T-BdOIDv4F.js} +1 -1
  219. package/dist/client/assets/{plug-C-4o4Kb8.js → plug-BrsPyUhu.js} +1 -1
  220. package/dist/client/assets/primer-trigger-C97fRm1v.js +3 -0
  221. package/dist/client/assets/{profile-errors-vJU1kT3U.js → profile-errors-nPLX60ha.js} +1 -1
  222. package/dist/client/assets/{progress-BTu_QWg8.js → progress-C9TALtIa.js} +1 -1
  223. package/dist/client/assets/{quadrantDiagram-D57K4MC3-CUr2zJoz.js → quadrantDiagram-D57K4MC3-MzMEunU7.js} +1 -1
  224. package/dist/client/assets/{query-error-state-BCX32dab.js → query-error-state-BJjgx-WC.js} +1 -1
  225. package/dist/client/assets/{radio-DBitPjM1.js → radio-Biql29-B.js} +1 -1
  226. package/dist/client/assets/{railroadDiagram-Y72NRBL7-Bk9OMEWz.js → railroadDiagram-Y72NRBL7-Dzx_PYVW.js} +1 -1
  227. package/dist/client/assets/registry-B0HgbN69.js +1 -0
  228. package/dist/client/assets/registry-fiUD5cv6.js +39 -0
  229. package/dist/client/assets/{relay-trace-schemas-C-1Js81V.js → relay-trace-schemas-BJ4MfChd.js} +2 -2
  230. package/dist/client/assets/{repeat-B1wCYWXI.js → repeat-CKufDGoQ.js} +1 -1
  231. package/dist/client/assets/{requirementDiagram-EQYSW5RA-B2pkljrw.js → requirementDiagram-EQYSW5RA-J0pg6FEt.js} +1 -1
  232. package/dist/client/assets/{room-files-source-BDkq0-fd.js → room-files-source-iaYdshKo.js} +2 -2
  233. package/dist/client/assets/{rotate-ccw-clock-Ds8cHkxD.js → rotate-ccw-clock-CnARSw5V.js} +1 -1
  234. package/dist/client/assets/{rotate-cw-hUzouNTK.js → rotate-cw-BAn_5-Gq.js} +1 -1
  235. package/dist/client/assets/{sankeyDiagram-SY24JHO5-DEW9eIPS.js → sankeyDiagram-SY24JHO5-6V_uy-zQ.js} +1 -1
  236. package/dist/client/assets/{scroll-area-RSd8NjrE.js → scroll-area-XDq7yL_d.js} +1 -1
  237. package/dist/client/assets/{sequenceDiagram-BLEHNHQU-CoiCdD1D.js → sequenceDiagram-BLEHNHQU-C4jZi3N4.js} +1 -1
  238. package/dist/client/assets/{shield-x-KL4ZbHfz.js → shield-x-CpiXuMbN.js} +1 -1
  239. package/dist/client/assets/{signed-in-Dzxe2378.js → signed-in-Rv3Sjk8n.js} +1 -1
  240. package/dist/client/assets/{sizeCapture-INFHLROL-BWGf0Ghs.js → sizeCapture-INFHLROL-B7nxFreb.js} +1 -1
  241. package/dist/client/assets/{soul-file-BQXbWArv.js → soul-file-BQz4TtHo.js} +1 -1
  242. package/dist/client/assets/{stateDiagram-v2-A6IESKWZ-aeqwGZMB.js → stateDiagram-v2-A6IESKWZ-B5rvc4n2.js} +1 -1
  243. package/dist/client/assets/{swimlanes-B3ENRKFQ-BkWhAAlV.js → swimlanes-B3ENRKFQ-DnElusDo.js} +1 -1
  244. package/dist/client/assets/swimlanesDiagram-AYQRV4AK-DLpKz5fF.js +8 -0
  245. package/dist/client/assets/{table-CfLst6CF.js → table-NGiWzPO4.js} +1 -1
  246. package/dist/client/assets/{timeline-definition-JXYKGLGB-C1BUxIfq.js → timeline-definition-JXYKGLGB-DMgyn3XX.js} +1 -1
  247. package/dist/client/assets/{trust-posture-CfEIPM4Z.js → trust-posture-BArJ9H4j.js} +1 -1
  248. package/dist/client/assets/{unplug-B3eDst8L.js → unplug-MSjeZ0tJ.js} +1 -1
  249. package/dist/client/assets/{unverified-catalog-notice-BqIWxQuN.js → unverified-catalog-notice-DA96H8Df.js} +1 -1
  250. package/dist/client/assets/{use-bindings-DhOKnybh.js → use-bindings-BojBqRJS.js} +1 -1
  251. package/dist/client/assets/{use-composer-prefs-_rlNL0D8.js → use-composer-prefs-BDl8aMme.js} +1 -1
  252. package/dist/client/assets/{use-connector-management-CHLdhBhC.js → use-connector-management-FONU6FK8.js} +1 -1
  253. package/dist/client/assets/{use-deep-link-scroll-BVkszEn2.js → use-deep-link-scroll-CtbBPBgi.js} +1 -1
  254. package/dist/client/assets/{use-delete-binding-BET7vH2R.js → use-delete-binding-COhBv6X3.js} +1 -1
  255. package/dist/client/assets/{use-dev-links-BjLPuSUC.js → use-dev-links-Dh0MCiGY.js} +1 -1
  256. package/dist/client/assets/{use-direct-message-panel-ClXVf94w.js → use-direct-message-panel-CYnWunqk.js} +1 -1
  257. package/dist/client/assets/{use-external-adapter-catalog-D1INoacX.js → use-external-adapter-catalog-RTDOW8Yi.js} +1 -1
  258. package/dist/client/assets/{use-filter-state-BRlb3qG3.js → use-filter-state-CSFTDx7z.js} +1 -1
  259. package/dist/client/assets/{use-full-activity-feed-GWBg-_1B.js → use-full-activity-feed-DlY_ZbRZ.js} +1 -1
  260. package/dist/client/assets/use-is-below-desktop-ClzGXlRb.js +1 -0
  261. package/dist/client/assets/{use-local-browser-C-V2n_wd.js → use-local-browser-WwZd-FOP.js} +1 -1
  262. package/dist/client/assets/{use-mesh-topology-BzSFyR_s.js → use-mesh-topology-WnFkjq41.js} +1 -1
  263. package/dist/client/assets/{use-mounted-ref-1T3JbkY1.js → use-mounted-ref-Dz1h70pz.js} +1 -1
  264. package/dist/client/assets/{use-notification-prefs-qcYeVmLQ.js → use-notification-prefs-IrF5_cko.js} +1 -1
  265. package/dist/client/assets/use-pending-read-CnAnzOt_.js +1 -0
  266. package/dist/client/assets/{use-personality-commit-CJb-rqmM.js → use-personality-commit-C4hYkSPy.js} +1 -1
  267. package/dist/client/assets/use-promo-activation-CPVANFBh.js +6 -0
  268. package/dist/client/assets/{use-promo-dismissals-C6bPU5Rm.js → use-promo-dismissals-B9m0HT6L.js} +1 -1
  269. package/dist/client/assets/{use-pulse-freshness-Y11Ibit1.js → use-pulse-freshness-DMySxN8D.js} +1 -1
  270. package/dist/client/assets/{use-room-follow-claim-Di-yvoJD.js → use-room-follow-claim-ByaYVY0o.js} +1 -1
  271. package/dist/client/assets/{use-room-sessions-CPDRbQAW.js → use-room-sessions-DPB29acU.js} +1 -1
  272. package/dist/client/assets/{use-roving-tab-list-DK0OzOUz.js → use-roving-tab-list-BO8kbs-w.js} +1 -1
  273. package/dist/client/assets/{use-session-canvas-DA2i9Mdm.js → use-session-canvas-Cunag2K7.js} +9 -9
  274. package/dist/client/assets/{use-status-budget-jMg_w0rF.js → use-status-budget-jt-9aQR0.js} +2 -2
  275. package/dist/client/assets/{use-transform-BX3r518L.js → use-transform-ydtuYUNp.js} +1 -1
  276. package/dist/client/assets/{use-unclaimed-chats-B0nk8b84.js → use-unclaimed-chats-ClBWJgNm.js} +1 -1
  277. package/dist/client/assets/use-update-config-ZHtOtve0.js +1 -0
  278. package/dist/client/assets/{useMutationState-Rlga1GBT.js → useMutationState-B8ArIqeH.js} +1 -1
  279. package/dist/client/assets/{usecaseDiagram-WPOLBNNX-mjIwRNL1.js → usecaseDiagram-WPOLBNNX-C5JdAkG9.js} +1 -1
  280. package/dist/client/assets/{vennDiagram-Q3Y3IDCW-BcDIpVa6.js → vennDiagram-Q3Y3IDCW-CqLCy7LU.js} +1 -1
  281. package/dist/client/assets/{wardleyDiagram-IVAIDKWA-NFX31kox.js → wardleyDiagram-IVAIDKWA-C9FlHLTd.js} +1 -1
  282. package/dist/client/assets/{xychartDiagram-4URNHDU4-DZZY7dL1.js → xychartDiagram-4URNHDU4-BIm-RUWd.js} +1 -1
  283. package/dist/client/index.html +2 -2
  284. package/dist/drizzle/20261101195529_work_queue.sql +38 -0
  285. package/dist/drizzle/20261101233656_dor3644_session_launched_by.sql +1 -0
  286. package/dist/drizzle/20261102041558_dor3070_marketplace_summary.sql +2 -0
  287. package/dist/drizzle/20261102051715_dor3440_clear_origin_holds.sql +10 -0
  288. package/dist/drizzle/20261102135442_agent_browser_profiles.sql +15 -0
  289. package/dist/drizzle/meta/20261101195529_snapshot.json +14363 -0
  290. package/dist/drizzle/meta/20261101233656_snapshot.json +14370 -0
  291. package/dist/drizzle/meta/20261102041558_snapshot.json +14384 -0
  292. package/dist/drizzle/meta/20261102051715_snapshot.json +14384 -0
  293. package/dist/drizzle/meta/20261102135442_snapshot.json +14483 -0
  294. package/dist/drizzle/meta/_journal.json +35 -0
  295. package/dist/server/extension-child.cjs +1147 -572
  296. package/dist/server/index.js +41788 -36880
  297. package/dist/server/index.js.map +2 -2
  298. package/package.json +3 -3
  299. package/dist/client/assets/BlintzCanvas-BgIQdpTx.js +0 -1231
  300. package/dist/client/assets/ChannelComposer-BJ0nNzQb.js +0 -45
  301. package/dist/client/assets/HandlePage-Bq5qdCfY.js +0 -1
  302. package/dist/client/assets/NamePage-_yT2RQvT.js +0 -1
  303. package/dist/client/assets/NewDirectMessageMenu-CMp4ppiH.js +0 -1
  304. package/dist/client/assets/PhotoPage-Djh4IZBF.js +0 -1
  305. package/dist/client/assets/RoomSurface-DXZ36tmU.js +0 -1
  306. package/dist/client/assets/_shell-CTKp94uQ.js +0 -80
  307. package/dist/client/assets/_shell._home.tasks-B_lv_-fX.js +0 -1
  308. package/dist/client/assets/_shell.marketplace-DUpaCb0r.js +0 -1
  309. package/dist/client/assets/_shell.marketplace_.sources-C3pA7zZW.js +0 -1
  310. package/dist/client/assets/_shell.session-DH_9f3AK.js +0 -1
  311. package/dist/client/assets/_shell.x._extensionId-DaXLhYNr.js +0 -1
  312. package/dist/client/assets/_shell.x._extensionId_._-DaXLhYNr.js +0 -1
  313. package/dist/client/assets/channel-CF9_Q7CV.js +0 -1
  314. package/dist/client/assets/index-3JL8A9YZ.css +0 -1
  315. package/dist/client/assets/index-BPp-rj-W.js +0 -1
  316. package/dist/client/assets/index-C4Uak2ha.js +0 -1
  317. package/dist/client/assets/index-Daoy3TZ8.js +0 -1
  318. package/dist/client/assets/index-YUtEyz7O.js +0 -1053
  319. package/dist/client/assets/mention-pill-CuSUdpn7.js +0 -1
  320. package/dist/client/assets/primer-trigger-CmE4Ib-X.js +0 -3
  321. package/dist/client/assets/registry-DVPRVi8T.js +0 -34
  322. package/dist/client/assets/registry-DiFfRDdW.js +0 -1
  323. package/dist/client/assets/swimlanesDiagram-AYQRV4AK-CS2DMvLi.js +0 -8
  324. package/dist/client/assets/use-is-below-desktop-BjWA-tqP.js +0 -1
  325. package/dist/client/assets/use-pending-read-C1oA2H00.js +0 -1
  326. package/dist/client/assets/use-promo-activation-CAJItujg.js +0 -11
  327. package/dist/client/assets/use-update-config-Ce7sHmp2.js +0 -1
package/dist/bin/cli.js CHANGED
@@ -16831,13 +16831,13 @@ var init_json_schema_processors = __esm({
16831
16831
  ...params,
16832
16832
  path: [...params.path, "propertyNames"]
16833
16833
  });
16834
- let pending2 = pendingRecords.get(ctx);
16835
- if (!pending2) {
16836
- pending2 = [];
16837
- pendingRecords.set(ctx, pending2);
16834
+ let pending = pendingRecords.get(ctx);
16835
+ if (!pending) {
16836
+ pending = [];
16837
+ pendingRecords.set(ctx, pending);
16838
16838
  ctx.deferred.push(() => rewriteKeyNames(ctx));
16839
16839
  }
16840
- pending2.push(schema3);
16840
+ pending.push(schema3);
16841
16841
  }
16842
16842
  json3.additionalProperties = processSchema(def.valueType, ctx, {
16843
16843
  ...params,
@@ -23335,9 +23335,9 @@ var init_account_signin_policy = __esm({
23335
23335
  save(value) {
23336
23336
  const next = PolicySchema.parse(value);
23337
23337
  fs2.mkdirSync(path2.dirname(this.file), { recursive: true });
23338
- const pending2 = this.file + ".pending";
23339
- fs2.writeFileSync(pending2, JSON.stringify(next), { mode: 384 });
23340
- fs2.renameSync(pending2, this.file);
23338
+ const pending = this.file + ".pending";
23339
+ fs2.writeFileSync(pending, JSON.stringify(next), { mode: 384 });
23340
+ fs2.renameSync(pending, this.file);
23341
23341
  this.value = next;
23342
23342
  }
23343
23343
  };
@@ -25767,8 +25767,17 @@ var init_config_sections = __esm({
25767
25767
  * reads as `null`, which is exactly "not chosen", so there is no value a
25768
25768
  * migration could seed that the absence does not already say. Operator-only.
25769
25769
  */
25770
- triageOnCredits: external_exports.boolean().nullable().default(null)
25771
- }).default(() => ({ enabled: true, triageOnCredits: null }));
25770
+ triageOnCredits: external_exports.boolean().nullable().default(null),
25771
+ /**
25772
+ * The room that hears "nothing is running" (DOR-3675): no agent chat on this computer has
25773
+ * run for 30 minutes while work is still open. `null` posts in the team room. An agent
25774
+ * could aim a post its alerts carry at a room of its choosing, so only a person sets it.
25775
+ *
25776
+ * No migration: a stored `heartbeats` section without this leaf reads as `null`, the team
25777
+ * room, which is the default. Operator-only.
25778
+ */
25779
+ idleAlertRoomId: external_exports.string().min(1).nullable().default(null)
25780
+ }).default(() => ({ enabled: true, triageOnCredits: null, idleAlertRoomId: null }));
25772
25781
  ActivityConfigSchema = external_exports.object({
25773
25782
  /**
25774
25783
  * Days of Activity history to keep. `DORKOS_ACTIVITY_RETENTION_DAYS`
@@ -26860,7 +26869,6 @@ function repoUrl(path77 = "") {
26860
26869
  var GITHUB_ORG, links;
26861
26870
  var init_links = __esm({
26862
26871
  "../shared/src/links.ts"() {
26863
- "use strict";
26864
26872
  GITHUB_ORG = "dork-labs";
26865
26873
  links = {
26866
26874
  /** The public origin of the marketing site, the docs and DorkOS Cloud. */
@@ -27294,7 +27302,7 @@ import path3 from "path";
27294
27302
  import { fileURLToPath } from "url";
27295
27303
  function resolveVersion() {
27296
27304
  if (env2.DORKOS_VERSION_OVERRIDE) return env2.DORKOS_VERSION_OVERRIDE;
27297
- if (true) return "0.129.0";
27305
+ if (true) return "0.130.0";
27298
27306
  const pkgPath = path3.join(path3.dirname(fileURLToPath(import.meta.url)), "../../package.json");
27299
27307
  return JSON.parse(readFileSync(pkgPath, "utf-8")).version;
27300
27308
  }
@@ -42996,8 +43004,13 @@ function overrideNames(input4) {
42996
43004
  names.add("OPENCODE_SERVER_PASSWORD");
42997
43005
  names.add("OPENCODE_CONFIG_CONTENT");
42998
43006
  }
43007
+ for (const name2 of Object.keys(flowIdentityEnv(input4.runtime, input4.purpose))) names.add(name2);
42999
43008
  return names;
43000
43009
  }
43010
+ function flowIdentityEnv(runtime, purpose) {
43011
+ if (purpose !== "turn" || runtime === "doe") return {};
43012
+ return { FLOW_RUNTIME: runtime, FLOW_HARNESS: "dorkos" };
43013
+ }
43001
43014
  function projectRuntimeEnvironment(input4) {
43002
43015
  const inherit = RuntimeInheritedEnvNamesSchema.parse(input4.inherit ?? []);
43003
43016
  const allowed = /* @__PURE__ */ new Set([...BASELINE_ENV_NAMES, ...profileNames(input4), ...inherit]);
@@ -43040,7 +43053,14 @@ var init_runtime_environment = __esm({
43040
43053
  function runtimeEnvironment(runtime, purpose, overrides) {
43041
43054
  const inherit = runtimeInheritedNames(runtime);
43042
43055
  return withGitConfigEnv(
43043
- projectRuntimeEnvironment({ parent: process.env, runtime, purpose, inherit, overrides }),
43056
+ projectRuntimeEnvironment({
43057
+ // eslint-disable-next-line no-restricted-syntax -- deliberate ambient-input boundary for the pure child-environment projection
43058
+ parent: process.env,
43059
+ runtime,
43060
+ purpose,
43061
+ inherit,
43062
+ overrides: { ...overrides, ...flowIdentityEnv(runtime, purpose) }
43063
+ }),
43044
43064
  SESSION_GIT_CONFIG
43045
43065
  );
43046
43066
  }
@@ -50159,11 +50179,11 @@ function containerEntries(value) {
50159
50179
  }
50160
50180
  function inspectBoundedJson(value, bounds) {
50161
50181
  const { maxBytes, maxDepth } = bounds;
50162
- const pending2 = [{ value, depth: 0 }];
50182
+ const pending = [{ value, depth: 0 }];
50163
50183
  const ancestors = /* @__PURE__ */ new Set();
50164
50184
  let bytes = 0;
50165
- while (pending2.length) {
50166
- const item = pending2.pop();
50185
+ while (pending.length) {
50186
+ const item = pending.pop();
50167
50187
  const current3 = item.value;
50168
50188
  if (item.exit) {
50169
50189
  ancestors.delete(current3);
@@ -50177,10 +50197,10 @@ function inspectBoundedJson(value, bounds) {
50177
50197
  if (!entries) return "Expected plain JSON without unsafe keys or accessors";
50178
50198
  bytes += 2 + Math.max(0, entries.length - 1);
50179
50199
  ancestors.add(current3);
50180
- pending2.push({ value: current3, depth: item.depth, exit: true });
50200
+ pending.push({ value: current3, depth: item.depth, exit: true });
50181
50201
  for (const [key, child] of entries) {
50182
50202
  if (!Array.isArray(current3)) bytes += encoder.encode(JSON.stringify(key)).length + 1;
50183
- pending2.push({ value: child, depth: item.depth + 1 });
50203
+ pending.push({ value: child, depth: item.depth + 1 });
50184
50204
  }
50185
50205
  } else {
50186
50206
  if (typeof current3 === "number" && !Number.isFinite(current3))
@@ -52309,6 +52329,39 @@ var init_canvas_channel_schemas = __esm({
52309
52329
  }
52310
52330
  });
52311
52331
 
52332
+ // ../shared/src/task-approval-schemas.ts
52333
+ var ScheduleOriginMarksSchema, TaskFolderRulesSchema;
52334
+ var init_task_approval_schemas = __esm({
52335
+ "../shared/src/task-approval-schemas.ts"() {
52336
+ "use strict";
52337
+ init_zod();
52338
+ init_zod_openapi();
52339
+ extendZodWithOpenApiOnce();
52340
+ ScheduleOriginMarksSchema = external_exports.object({
52341
+ /** The turn read words DorkOS can't vouch for: a stranger's message, or another agent's that carried one. */
52342
+ outsider: external_exports.literal(true).optional(),
52343
+ /** Each teammate whose message started the chain, and the space room they wrote in. */
52344
+ teammate: external_exports.array(
52345
+ external_exports.object({
52346
+ roomId: external_exports.string(),
52347
+ authorId: external_exports.string(),
52348
+ /** The teammate's name when the mark was written, or null when it was unknown. */
52349
+ name: external_exports.string().nullable().default(null),
52350
+ /** The room's title when the mark was written, or null when it was unknown. */
52351
+ room: external_exports.string().nullable().default(null)
52352
+ })
52353
+ ).optional()
52354
+ }).openapi("ScheduleOriginMarks");
52355
+ TaskFolderRulesSchema = external_exports.object({
52356
+ status: external_exports.enum(["approved", "waiting", "none", "unavailable"]),
52357
+ /** Only rules that a launch would apply; empty while approval is outstanding. */
52358
+ applied: external_exports.array(external_exports.string()),
52359
+ /** The filtered folder list waiting for a separate person's approval. */
52360
+ pending: external_exports.array(external_exports.string())
52361
+ });
52362
+ }
52363
+ });
52364
+
52312
52365
  // ../shared/src/validation.ts
52313
52366
  var AGENT_NAME_REGEX;
52314
52367
  var init_validation = __esm({
@@ -52720,6 +52773,12 @@ function mergeTeammateOrigins(a2, b2) {
52720
52773
  const added = b2.filter((origin) => !seen.has(key(origin)));
52721
52774
  return added.length === 0 ? a2 : [...a2, ...added];
52722
52775
  }
52776
+ function ceilingOnlyRecords(ceiling) {
52777
+ const bounds = Array.isArray(ceiling) ? ceiling : [ceiling];
52778
+ return bounds.length > 0 && bounds.every(
52779
+ (bound) => bound !== "runtime-default" && bound.asks === "never" && bound.reach === "everything" && bound.outsider !== true
52780
+ );
52781
+ }
52723
52782
  function ceilingHoldsForOutsider(ceiling) {
52724
52783
  if (!Array.isArray(ceiling)) return ceiling === "runtime-default";
52725
52784
  const bounds = ceiling;
@@ -52734,6 +52793,7 @@ function stricterPower(a2, b2) {
52734
52793
  return a2.auto && b2.auto ? { asks, reach, auto: true } : { asks, reach };
52735
52794
  }
52736
52795
  function clampModeToCeiling(declared, modeId, ceiling) {
52796
+ if (ceilingOnlyRecords(ceiling)) return modeId;
52737
52797
  const level = resolveCeilingLevel(declared, ceiling);
52738
52798
  const own2 = declared.values.find((m2) => m2.id === modeId);
52739
52799
  if (own2 && admits(level, own2)) return modeId;
@@ -54232,7 +54292,7 @@ var init_project_schemas = __esm({
54232
54292
  });
54233
54293
 
54234
54294
  // ../shared/src/approval-schemas.ts
54235
- var APPROVAL_SUMMARY_MAX_LENGTH, APPROVAL_CONSEQUENCE_MAX_LENGTH, APPROVAL_DETAIL_MAX_LENGTH, APPROVAL_SUBJECT_LABEL_MAX_LENGTH, APPROVAL_SUBJECT_KINDS, ApprovalSubjectSchema, APPROVAL_SERVICE_ACTION_MAX_DETAILS, APPROVAL_SERVICE_DETAIL_VALUE_MAX_LENGTH, APPROVAL_SERVICE_DETAIL_LABEL_MAX_LENGTH, APPROVAL_SERVICE_NAME_MAX_LENGTH, APPROVAL_SERVICE_FULL_VALUE_MAX_LENGTH, APPROVAL_SERVICE_FULL_MAX_LINES, APPROVAL_SERVICE_FULL_MAX_DEPTH, ApprovalServiceActionLineSchema, ApprovalServiceActionDetailSchema, ApprovalServiceActionSchema, APPROVAL_ORIGINS, APPROVAL_REQUEST_REASON_MAX_LENGTH, PendingApprovalSchema, PendingApprovalsResponseSchema, CAPABILITY_APPROVAL_OUTCOMES, CapabilityApprovalOutcomeSchema, APPROVAL_ANSWERS, GrantApprovalBodySchema, DenyApprovalBodySchema, ApprovalDecisionResponseSchema;
54295
+ var APPROVAL_SUMMARY_MAX_LENGTH, APPROVAL_CONSEQUENCE_MAX_LENGTH, APPROVAL_DETAIL_MAX_LENGTH, APPROVAL_SUBJECT_LABEL_MAX_LENGTH, APPROVAL_SUBJECT_KINDS, ApprovalSubjectSchema, APPROVAL_SERVICE_ACTION_MAX_DETAILS, APPROVAL_SERVICE_DETAIL_VALUE_MAX_LENGTH, APPROVAL_SERVICE_DETAIL_LABEL_MAX_LENGTH, APPROVAL_SERVICE_NAME_MAX_LENGTH, APPROVAL_SERVICE_FULL_VALUE_MAX_LENGTH, APPROVAL_SERVICE_FULL_MAX_LINES, APPROVAL_SERVICE_FULL_MAX_DEPTH, ApprovalServiceActionLineSchema, ApprovalServiceActionDetailSchema, ApprovalServiceActionSchema, APPROVAL_ORIGINS, APPROVAL_REQUEST_REASON_MAX_LENGTH, APPROVAL_FULL_DETAIL_MAX_LENGTH, MARKETPLACE_RISK_KINDS, MARKETPLACE_RISK_CHANGES, MarketplaceRiskSchema, MarketplacePackageSummarySchema, MarketplaceApprovalSummarySchema, ApprovalFullDetailResponseSchema, PendingApprovalSchema, PendingApprovalsResponseSchema, CAPABILITY_APPROVAL_OUTCOMES, CapabilityApprovalOutcomeSchema, APPROVAL_ANSWERS, GrantApprovalBodySchema, DenyApprovalBodySchema, ApprovalDecisionResponseSchema;
54236
54296
  var init_approval_schemas = __esm({
54237
54297
  "../shared/src/approval-schemas.ts"() {
54238
54298
  "use strict";
@@ -54311,6 +54371,59 @@ var init_approval_schemas = __esm({
54311
54371
  }).strict().openapi("ApprovalServiceAction");
54312
54372
  APPROVAL_ORIGINS = ["session", "external-mcp"];
54313
54373
  APPROVAL_REQUEST_REASON_MAX_LENGTH = 500;
54374
+ APPROVAL_FULL_DETAIL_MAX_LENGTH = 2e5;
54375
+ MARKETPLACE_RISK_KINDS = [
54376
+ "extension",
54377
+ "hook",
54378
+ "skillCommand",
54379
+ "mcp",
54380
+ "lsp",
54381
+ "monitor",
54382
+ "executable",
54383
+ "schedule",
54384
+ "host",
54385
+ "secret",
54386
+ "skillTools",
54387
+ "dependency",
54388
+ "unreadable"
54389
+ ];
54390
+ MARKETPLACE_RISK_CHANGES = ["new", "broader", "removed"];
54391
+ MarketplaceRiskSchema = external_exports.object({
54392
+ kind: external_exports.enum(MARKETPLACE_RISK_KINDS),
54393
+ change: external_exports.enum(MARKETPLACE_RISK_CHANGES),
54394
+ /** The row's sentence, with every value quoted and hidden characters shown. */
54395
+ text: external_exports.string().max(4e3),
54396
+ /** The whole command it runs, escaped, never shortened. */
54397
+ command: external_exports.string().max(APPROVAL_FULL_DETAIL_MAX_LENGTH).optional(),
54398
+ /** Broader only: what it was before, in words. */
54399
+ was: external_exports.string().max(APPROVAL_FULL_DETAIL_MAX_LENGTH).optional(),
54400
+ /** Named values under the row: an extension's hosts, a skill's tools. */
54401
+ items: external_exports.array(external_exports.string().max(4e3)).optional()
54402
+ }).openapi("MarketplaceRisk");
54403
+ MarketplacePackageSummarySchema = external_exports.object({
54404
+ name: external_exports.string().max(4e3),
54405
+ /** The package's type and where it is or will be installed, in words. */
54406
+ where: external_exports.string().max(4e3),
54407
+ /** Update only: the version installed now. */
54408
+ fromVersion: external_exports.string().max(4e3).optional(),
54409
+ toVersion: external_exports.string().max(4e3),
54410
+ /** `adds` when any row is New or Broader; decided by the server. */
54411
+ power: external_exports.enum(["adds", "none"]),
54412
+ /** New and Broader rows first, most powerful first; Removed rows last. */
54413
+ risks: external_exports.array(MarketplaceRiskSchema),
54414
+ /** Update only: things it already runs that stay exactly the same. */
54415
+ unchangedCount: external_exports.number().int().min(0)
54416
+ }).openapi("MarketplacePackageSummary");
54417
+ MarketplaceApprovalSummarySchema = external_exports.object({
54418
+ operation: external_exports.enum(["install", "update"]),
54419
+ packages: external_exports.array(MarketplacePackageSummarySchema).min(1),
54420
+ /** How long the full list is, so the link can say what it opens. */
54421
+ fullDetailLength: external_exports.number().int().min(0)
54422
+ }).openapi("MarketplaceApprovalSummary");
54423
+ ApprovalFullDetailResponseSchema = external_exports.object({
54424
+ /** Everything the approval is about, written out whole, swept for secrets. */
54425
+ text: external_exports.string().max(APPROVAL_FULL_DETAIL_MAX_LENGTH)
54426
+ }).openapi("ApprovalFullDetailResponse");
54314
54427
  PendingApprovalSchema = external_exports.object({
54315
54428
  /** ULID identifying the approval. Carries no secret. */
54316
54429
  approvalId: external_exports.string(),
@@ -54415,6 +54528,12 @@ var init_approval_schemas = __esm({
54415
54528
  * at render time.
54416
54529
  */
54417
54530
  detail: external_exports.string().max(APPROVAL_DETAIL_MAX_LENGTH).optional(),
54531
+ /**
54532
+ * A Marketplace install or update whose full list is too long for
54533
+ * {@link detail} (DOR-3070): the card renders this instead of the detail,
54534
+ * and the full list is served by `GET /api/approvals/:id/full-detail`.
54535
+ */
54536
+ marketplaceSummary: MarketplaceApprovalSummarySchema.optional(),
54418
54537
  /**
54419
54538
  * The thing this would act on, named — when the server could name it.
54420
54539
  *
@@ -54978,10 +55097,12 @@ function isSafeSigninUrl(value) {
54978
55097
  if (url2.protocol !== "http:") return false;
54979
55098
  return url2.hostname === "localhost" || url2.hostname === "127.0.0.1" || url2.hostname === "[::1]";
54980
55099
  }
54981
- 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, WorkLeftEndStatusSchema, WorkLeftTaskSchema, WorkLeftRunningEventSchema, WorkLeftEndedEventSchema, 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, WorkLeftRunningPartSchema, 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, FRAME_SCRIPT_HTML_MAX_BYTES, FrameBridgeRefusalSchema, WorkbenchBridgeStatusRequestSchema, WorkbenchBridgeStatusResponseSchema, BrowseDirectoryQuerySchema, DirectoryEntrySchema, BrowseDirectoryResponseSchema, TunnelStatusSchema, LanAccessStatusSchema, RemoteAccessStateSchema, RemoteAccessAvailabilitySchema, RemoteAccessEnrolmentSchema, RemoteAccessReportSchema, HealthResponseSchema, ExecutionDefaultsSchema, ExperimentStateSchema, CompanyCertificatesStatusSchema, ServerConfigSchema2, ModelTierSchema, ModelOptionSchema, SubagentInfoSchema, GitStatusResponseSchema, GitStatusErrorSchema, ErrorResponseSchema, SessionLockedErrorSchema, TaskStatusSchema, SettableTaskStatusSchema, TaskNameSchema, TaskRunStatusSchema, TaskRunOutcomeSchema, TaskFailureReasonSchema, TaskHealthSchema, 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, StreamHealthReportSchema;
55100
+ 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, WorkLeftEndStatusSchema, WorkLeftTaskSchema, WorkLeftRunningEventSchema, WorkLeftEndedEventSchema, 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, WorkLeftRunningPartSchema, 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, FRAME_SCRIPT_HTML_MAX_BYTES, FrameBridgeRefusalSchema, WorkbenchBridgeStatusRequestSchema, WorkbenchBridgeStatusResponseSchema, BrowseDirectoryQuerySchema, DirectoryEntrySchema, BrowseDirectoryResponseSchema, TunnelStatusSchema, LanAccessStatusSchema, RemoteAccessStateSchema, RemoteAccessAvailabilitySchema, RemoteAccessEnrolmentSchema, RemoteAccessReportSchema, HealthResponseSchema, ExecutionDefaultsSchema, ExperimentStateSchema, CompanyCertificatesStatusSchema, ServerConfigSchema2, ModelTierSchema, ModelOptionSchema, SubagentInfoSchema, GitStatusResponseSchema, GitStatusErrorSchema, ErrorResponseSchema, SessionLockedErrorSchema, TaskStatusSchema, SettableTaskStatusSchema, TaskNameSchema, TaskRunStatusSchema, TaskRunOutcomeSchema, TaskFailureReasonSchema, TaskHealthSchema, 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, StreamHealthReportSchema;
54982
55101
  var init_schemas4 = __esm({
54983
55102
  "../shared/src/schemas.ts"() {
54984
55103
  "use strict";
55104
+ init_task_approval_schemas();
55105
+ init_task_approval_schemas();
54985
55106
  init_canvas_channel_schemas();
54986
55107
  init_zod();
54987
55108
  init_zod_openapi();
@@ -57382,6 +57503,13 @@ var init_schemas4 = __esm({
57382
57503
  callerRoute: external_exports.enum(["local", "wifi", "tunnel", "managed", "network", "hub"]).nullable().optional().openapi({
57383
57504
  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"
57384
57505
  }),
57506
+ capacity: external_exports.object({
57507
+ maxAgentChats: external_exports.number().int(),
57508
+ loadAverage: external_exports.number().nullable(),
57509
+ freeDiskBytes: external_exports.number().nullable()
57510
+ }).optional().openapi({
57511
+ description: "How much room this computer has right now, for the Team view: the cap on chats agents may run at once, the one-minute load average (null where the system reports none) and the free bytes on the DorkOS data disk (null when it cannot be read). Absent from an older server"
57512
+ }),
57385
57513
  dismissedUpgradeVersions: external_exports.array(external_exports.string()).openapi({ description: "Versions the user has dismissed upgrade notifications for" }),
57386
57514
  dismissedPromoIds: external_exports.array(external_exports.string()).openapi({
57387
57515
  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"
@@ -57875,21 +58003,6 @@ var init_schemas4 = __esm({
57875
58003
  lastRunId: external_exports.string().nullable()
57876
58004
  }).openapi("TaskHealth");
57877
58005
  TaskRunTriggerSchema = external_exports.enum(["scheduled", "manual", "agent"]).openapi("TaskRunTrigger");
57878
- ScheduleOriginMarksSchema = external_exports.object({
57879
- /** The turn read words DorkOS can't vouch for: a stranger's message, or another agent's that carried one. */
57880
- outsider: external_exports.literal(true).optional(),
57881
- /** Each teammate whose message started the chain, and the space room they wrote in. */
57882
- teammate: external_exports.array(
57883
- external_exports.object({
57884
- roomId: external_exports.string(),
57885
- authorId: external_exports.string(),
57886
- /** The teammate's name when the mark was written, or null when it was unknown. */
57887
- name: external_exports.string().nullable().default(null),
57888
- /** The room's title when the mark was written, or null when it was unknown. */
57889
- room: external_exports.string().nullable().default(null)
57890
- })
57891
- ).optional()
57892
- }).openapi("ScheduleOriginMarks");
57893
58006
  TaskSchema = external_exports.object({
57894
58007
  id: external_exports.string(),
57895
58008
  name: external_exports.string(),
@@ -58016,6 +58129,8 @@ var init_schemas4 = __esm({
58016
58129
  sticky: external_exports.boolean().default(false),
58017
58130
  maxRuntime: external_exports.number().int().nullable(),
58018
58131
  permissionMode: PermissionModeSchema,
58132
+ /** Read-time, person-only preview; absent for older servers and agent callers. */
58133
+ folderRules: TaskFolderRulesSchema.optional(),
58019
58134
  /**
58020
58135
  * Which agent runtime this task's runs execute on, or `null` to follow the
58021
58136
  * task's agent (DOR-1615).
@@ -58074,6 +58189,13 @@ var init_schemas4 = __esm({
58074
58189
  * nothing resolves, which is what the "An agent" fallback is for.
58075
58190
  */
58076
58191
  proposedByName: external_exports.string().nullable().default(null),
58192
+ /**
58193
+ * The name of the agent this schedule runs as (the agent `agentId` names),
58194
+ * resolved when the task is READ, like `proposedByName`, so an approval card
58195
+ * and its notification say whose turn it would be (DOR-3640 R1). `null` for
58196
+ * a global schedule, or when the agent cannot be named; absent on a task not yet read that way.
58197
+ */
58198
+ runsAsName: external_exports.string().nullable().optional(),
58077
58199
  /**
58078
58200
  * Where this schedule came from, when that is not a person using DorkOS.
58079
58201
  *
@@ -61070,11 +61192,11 @@ async function measurePackageTree(root, limits = PACKAGE_SIZE_LIMITS, { countGit
61070
61192
  let entries = 0;
61071
61193
  let bytes = 0;
61072
61194
  let inNodeModules = 0;
61073
- const pending2 = [
61195
+ const pending = [
61074
61196
  { rel: "", underNodeModules: false }
61075
61197
  ];
61076
- while (pending2.length > 0) {
61077
- const { rel, underNodeModules } = pending2.pop();
61198
+ while (pending.length > 0) {
61199
+ const { rel, underNodeModules } = pending.pop();
61078
61200
  let listed2;
61079
61201
  try {
61080
61202
  listed2 = await readdir2(path23.join(root, rel), { withFileTypes: true });
@@ -61093,7 +61215,7 @@ async function measurePackageTree(root, limits = PACKAGE_SIZE_LIMITS, { countGit
61093
61215
  throw new PackageTooLargeError("entries", limits, void 0, inNodeModules);
61094
61216
  }
61095
61217
  if (entry.isDirectory()) {
61096
- pending2.push({ rel: childRel, underNodeModules: inside });
61218
+ pending.push({ rel: childRel, underNodeModules: inside });
61097
61219
  continue;
61098
61220
  }
61099
61221
  const { size } = await lstat2(path23.join(root, childRel));
@@ -64041,9 +64163,9 @@ var init_endpoint_context = __esm({
64041
64163
  getOrCreateEndpointContextStorage = async () => {
64042
64164
  const existing = getExistingEndpointContextStorage();
64043
64165
  if (existing) return existing;
64044
- const AsyncLocalStorage8 = await getAsyncLocalStorage();
64166
+ const AsyncLocalStorage7 = await getAsyncLocalStorage();
64045
64167
  const globalContext = __getBetterAuthGlobal().context;
64046
- return globalContext.endpointContextAsyncStorage ??= new AsyncLocalStorage8();
64168
+ return globalContext.endpointContextAsyncStorage ??= new AsyncLocalStorage7();
64047
64169
  };
64048
64170
  }
64049
64171
  });
@@ -64639,8 +64761,8 @@ var init_request_state = __esm({
64639
64761
  const betterAuthGlobal = __getBetterAuthGlobal();
64640
64762
  const existing = betterAuthGlobal.context.requestStateAsyncStorage;
64641
64763
  if (existing) return existing;
64642
- const AsyncLocalStorage8 = await getAsyncLocalStorage();
64643
- betterAuthGlobal.context.requestStateAsyncStorage ??= new AsyncLocalStorage8();
64764
+ const AsyncLocalStorage7 = await getAsyncLocalStorage();
64765
+ betterAuthGlobal.context.requestStateAsyncStorage ??= new AsyncLocalStorage7();
64644
64766
  return betterAuthGlobal.context.requestStateAsyncStorage;
64645
64767
  };
64646
64768
  }
@@ -65311,8 +65433,8 @@ var init_transaction = __esm({
65311
65433
  const betterAuthGlobal = __getBetterAuthGlobal();
65312
65434
  const existing = betterAuthGlobal.context.adapterAsyncStorage;
65313
65435
  if (existing) return existing;
65314
- const AsyncLocalStorage8 = await getAsyncLocalStorage();
65315
- betterAuthGlobal.context.adapterAsyncStorage ??= new AsyncLocalStorage8();
65436
+ const AsyncLocalStorage7 = await getAsyncLocalStorage();
65437
+ betterAuthGlobal.context.adapterAsyncStorage ??= new AsyncLocalStorage7();
65316
65438
  return betterAuthGlobal.context.adapterAsyncStorage;
65317
65439
  };
65318
65440
  getCurrentAdapter = async (fallback) => {
@@ -67853,14 +67975,14 @@ function isUsableJWK(jwk, entry, alg2, kid) {
67853
67975
  async function importWithAlgCache(cache3, jwk, entry) {
67854
67976
  const cached2 = cache3.get(jwk) || cache3.set(jwk, {}).get(jwk), { alg: alg2 } = entry;
67855
67977
  if (cached2[alg2] === void 0) {
67856
- const pending2 = jwkToKey(entry, jwk, true).then((key) => {
67978
+ const pending = jwkToKey(entry, jwk, true).then((key) => {
67857
67979
  if (key.type !== "public")
67858
67980
  throw new JWKSInvalid("JSON Web Key Set members must be public keys");
67859
67981
  return cached2[alg2] = key, key;
67860
67982
  }).catch((error63) => {
67861
- throw cached2[alg2] === pending2 && delete cached2[alg2], error63;
67983
+ throw cached2[alg2] === pending && delete cached2[alg2], error63;
67862
67984
  });
67863
- cached2[alg2] = pending2;
67985
+ cached2[alg2] = pending;
67864
67986
  }
67865
67987
  return cached2[alg2];
67866
67988
  }
@@ -106726,6 +106848,20 @@ var init_approvals = __esm({
106726
106848
  * longer parses renders as a card with the summary instead of failing.
106727
106849
  */
106728
106850
  serviceAction: text("service_action"),
106851
+ /**
106852
+ * A Marketplace card's summary, as JSON matching the wire schema's
106853
+ * `MarketplaceApprovalSummary`, or null (DOR-3070). Written only when the
106854
+ * full list is too long for `detail`; read back through that schema, so a
106855
+ * row that no longer parses renders with the summary sentence instead.
106856
+ */
106857
+ marketplaceSummary: text("marketplace_summary"),
106858
+ /**
106859
+ * Everything a Marketplace card is about, written out whole and swept for
106860
+ * secrets, or null (DOR-3070). Served by `GET /api/approvals/:id/full-detail`
106861
+ * while the card is pending; the approval itself is bound to the
106862
+ * disclosure this text describes, never to the summary.
106863
+ */
106864
+ fullDetail: text("full_detail"),
106729
106865
  /** Opaque label for who asked — an agent path, a display name, or null. */
106730
106866
  requestedBy: text("requested_by"),
106731
106867
  /**
@@ -107487,6 +107623,12 @@ var init_sessions = __esm({
107487
107623
  // whether a limited session may carry its work to another account (spec
107488
107624
  // `claude-account-fleet` D9). NULL = bound before this column existed.
107489
107625
  launchOrigin: text("launch_origin"),
107626
+ // Who chose where an agent-launched chat runs (DOR-3644): the launching
107627
+ // agent's Mesh id, its home when Mesh could not name it, or `unidentified`.
107628
+ // Written with `launchOrigin`, first-write-wins, never overwritten. NULL = a
107629
+ // person's chat, a chat the server placed itself, or one bound before this
107630
+ // column existed.
107631
+ launchedBy: text("launched_by"),
107490
107632
  // The episode `resetsAt` (else `since`) of the last usage limit core resumed
107491
107633
  // this session from by itself (spec `claude-account-fleet` D9 "Wait, then
107492
107634
  // resume by itself"): at most one automatic resume per window reset. Kept
@@ -111193,6 +111335,33 @@ var init_registry = __esm({
111193
111335
  }
111194
111336
  });
111195
111337
 
111338
+ // ../db/src/schema/browser/agent-profiles.ts
111339
+ var agentBrowserProfiles, agentBrowserProfileAgents;
111340
+ var init_agent_profiles = __esm({
111341
+ "../db/src/schema/browser/agent-profiles.ts"() {
111342
+ "use strict";
111343
+ init_sqlite_core();
111344
+ agentBrowserProfiles = sqliteTable("agent_browser_profiles", {
111345
+ id: text("id").primaryKey(),
111346
+ label: text("label").notNull(),
111347
+ createdAt: text("created_at").notNull()
111348
+ });
111349
+ agentBrowserProfileAgents = sqliteTable(
111350
+ "agent_browser_profile_agents",
111351
+ {
111352
+ profileId: text("profile_id").notNull().references(() => agentBrowserProfiles.id, { onDelete: "cascade" }),
111353
+ agentId: text("agent_id").notNull(),
111354
+ createdAt: text("created_at").notNull(),
111355
+ signature: text("signature").notNull()
111356
+ },
111357
+ (t2) => [
111358
+ primaryKey({ columns: [t2.profileId, t2.agentId] }),
111359
+ index("agent_browser_profile_agents_agent").on(t2.agentId)
111360
+ ]
111361
+ );
111362
+ }
111363
+ });
111364
+
111196
111365
  // ../db/src/schema/session/session-locations.ts
111197
111366
  var sessionLocations;
111198
111367
  var init_session_locations = __esm({
@@ -111399,6 +111568,90 @@ var init_commitments = __esm({
111399
111568
  }
111400
111569
  });
111401
111570
 
111571
+ // ../db/src/schema/work-queue/work-queue.ts
111572
+ var agentWorkQueues, workQueueControl, agentWorkItems;
111573
+ var init_work_queue = __esm({
111574
+ "../db/src/schema/work-queue/work-queue.ts"() {
111575
+ "use strict";
111576
+ init_drizzle_orm();
111577
+ init_sqlite_core();
111578
+ agentWorkQueues = sqliteTable("agent_work_queues", {
111579
+ /** The Mesh id of the agent. */
111580
+ agentId: text("agent_id").primaryKey(),
111581
+ /** Whether a person turned the queue on. Turning it off is how a person pauses it. */
111582
+ enabled: integer2("enabled", { mode: "boolean" }).notNull().default(false),
111583
+ /** How many of the queue's chats may run at once. */
111584
+ target: integer2("target").notNull().default(1),
111585
+ /** The most chats the queue may start in one UTC day. */
111586
+ dailyStartCap: integer2("daily_start_cap").notNull().default(20),
111587
+ /** The UTC day {@link startsToday} counts (`YYYY-MM-DD`), or NULL before the first start. */
111588
+ startsDay: text("starts_day"),
111589
+ /** How many chats the queue started on {@link startsDay}. */
111590
+ startsToday: integer2("starts_today").notNull().default(0),
111591
+ /** When this row last changed (ISO 8601). */
111592
+ updatedAt: text("updated_at").notNull()
111593
+ });
111594
+ workQueueControl = sqliteTable(
111595
+ "work_queue_control",
111596
+ {
111597
+ /** Always 1. */
111598
+ id: integer2("id").primaryKey(),
111599
+ /** Whether a person stopped every queue. */
111600
+ stopped: integer2("stopped", { mode: "boolean" }).notNull(),
111601
+ /** When it last changed (ISO 8601). */
111602
+ updatedAt: text("updated_at").notNull()
111603
+ },
111604
+ (table2) => [check3("work_queue_control_one_row", sql2`${table2.id} = 1`)]
111605
+ );
111606
+ agentWorkItems = sqliteTable(
111607
+ "agent_work_items",
111608
+ {
111609
+ /** ULID. */
111610
+ id: text("id").primaryKey(),
111611
+ /** The Mesh id of the agent whose queue this is. */
111612
+ agentId: text("agent_id").notNull(),
111613
+ /** Where it sits among the queued items: lowest starts first. */
111614
+ position: integer2("position").notNull(),
111615
+ /** A short title, used for the chat it starts. */
111616
+ title: text("title").notNull(),
111617
+ /** The first message of the chat it starts. */
111618
+ prompt: text("prompt").notNull(),
111619
+ /** The folder the chat works in, or NULL for the agent's own. */
111620
+ cwd: text("cwd"),
111621
+ /** Where it stands. */
111622
+ state: text("state", { enum: ["queued", "starting", "running", "ended"] }).notNull(),
111623
+ /** How it ended, or NULL before then. */
111624
+ outcome: text("outcome", {
111625
+ enum: ["finished", "failed", "stopped", "limit", "interrupted"]
111626
+ }),
111627
+ /** A short note on why it ended the way it did, or NULL. */
111628
+ note: text("note"),
111629
+ /** The chat it started, or NULL before then. */
111630
+ sessionId: text("session_id"),
111631
+ /** The account the chat runs on, or NULL when the usual choice decided. */
111632
+ accountId: text("account_id"),
111633
+ /** Who queued it. */
111634
+ addedBy: text("added_by", { enum: ["person", "agent"] }).notNull(),
111635
+ /** When it was queued (ISO 8601). */
111636
+ createdAt: text("created_at").notNull(),
111637
+ /** When its chat started (ISO 8601), or NULL. */
111638
+ startedAt: text("started_at"),
111639
+ /** When it ended (ISO 8601), or NULL. */
111640
+ endedAt: text("ended_at")
111641
+ },
111642
+ (table2) => [
111643
+ index("agent_work_items_agent_state_idx").on(table2.agentId, table2.state, table2.position),
111644
+ index("agent_work_items_session_idx").on(table2.sessionId),
111645
+ check3(
111646
+ "agent_work_items_state",
111647
+ sql2`${table2.state} IN ('queued', 'starting', 'running', 'ended')`
111648
+ ),
111649
+ check3("agent_work_items_title_length", sql2`length(${table2.title}) <= 80`)
111650
+ ]
111651
+ );
111652
+ }
111653
+ });
111654
+
111402
111655
  // ../db/src/schema/heartbeats/heartbeats.ts
111403
111656
  var heartbeatState, heartbeatBeats, heartbeatOutbox, heartbeatReportItems;
111404
111657
  var init_heartbeats = __esm({
@@ -111694,10 +111947,14 @@ __export(schema_exports, {
111694
111947
  account: () => account,
111695
111948
  accountRelations: () => accountRelations,
111696
111949
  activityEvents: () => activityEvents,
111950
+ agentBrowserProfileAgents: () => agentBrowserProfileAgents,
111951
+ agentBrowserProfiles: () => agentBrowserProfiles,
111697
111952
  agentConnectionAttachments: () => agentConnectionAttachments,
111698
111953
  agentDenials: () => agentDenials,
111699
111954
  agentIdentityTokens: () => agentIdentityTokens,
111700
111955
  agentPauses: () => agentPauses,
111956
+ agentWorkItems: () => agentWorkItems,
111957
+ agentWorkQueues: () => agentWorkQueues,
111701
111958
  agents: () => agents,
111702
111959
  apikey: () => apikey,
111703
111960
  approvals: () => approvals,
@@ -111815,6 +112072,7 @@ __export(schema_exports, {
111815
112072
  user: () => user,
111816
112073
  userRelations: () => userRelations,
111817
112074
  verification: () => verification,
112075
+ workQueueControl: () => workQueueControl,
111818
112076
  workspaces: () => workspaces
111819
112077
  });
111820
112078
  var init_schema2 = __esm({
@@ -111860,11 +112118,13 @@ var init_schema2 = __esm({
111860
112118
  init_channel();
111861
112119
  init_file_save_intents();
111862
112120
  init_registry();
112121
+ init_agent_profiles();
111863
112122
  init_session_locations();
111864
112123
  init_session_native_bindings();
111865
112124
  init_session_touches();
111866
112125
  init_chat_messages2();
111867
112126
  init_commitments();
112127
+ init_work_queue();
111868
112128
  init_heartbeats();
111869
112129
  init_remote_commands();
111870
112130
  }
@@ -113970,6 +114230,9 @@ var init_config_disclosure = __esm({
113970
114230
  // Whether cheap checks may run on DorkOS credits (spec `heartbeats` §6.3): a
113971
114231
  // plain yes, no or not answered, so an agent can say where its checks run.
113972
114232
  "heartbeats.triageOnCredits": "expose",
114233
+ // Which room hears "nothing is running" (DOR-3675): a room id, which an agent may read so
114234
+ // it can say where the alert goes. Only a person may change it.
114235
+ "heartbeats.idleAlertRoomId": "expose",
113973
114236
  // How long the Activity feed keeps its rows (spec `audit-trail` §3.5).
113974
114237
  "activity.retentionDays": "expose",
113975
114238
  // Where the company certificates the desktop app trusts live (DOR-3361).
@@ -114744,7 +115007,9 @@ var init_operator_only_stakes = __esm({
114744
115007
  "notifications.sounds.allClear",
114745
115008
  "notifications.sounds.turnEnd",
114746
115009
  "notifications.notifyOnTurnCompleteWhileAway",
114747
- "notifications.browserPermissionPrimerDismissed"
115010
+ "notifications.browserPermissionPrimerDismissed",
115011
+ // Which room is told nothing is running while work is open (DOR-3675).
115012
+ "heartbeats.idleAlertRoomId"
114748
115013
  ]
114749
115014
  }
114750
115015
  ];
@@ -114956,6 +115221,9 @@ var init_config_write_policy = __esm({
114956
115221
  // Whether cheap checks spend DorkOS credits (spec `heartbeats` §6.3). Only a
114957
115222
  // person's **Use credits** may say yes: it spends the account owner's money.
114958
115223
  "heartbeats.triageOnCredits": "operator-only",
115224
+ // Which room hears "nothing is running" (DOR-3675). An agent that could set it could aim
115225
+ // the alert at a room of its choosing, so it is a person's call.
115226
+ "heartbeats.idleAlertRoomId": "operator-only",
114959
115227
  // How long the Activity feed keeps the history people review (spec
114960
115228
  // `audit-trail` §3.5). Shortening it deletes rows a person may not have read
114961
115229
  // yet; lengthening it spends disk. Either is the person's call.
@@ -115750,14 +116018,14 @@ var init_constants8 = __esm({
115750
116018
  * would trade a real resource ceiling for a case nobody has reported.
115751
116019
  */
115752
116020
  INTERACTION_PARK_CEILING_MS: 4 * 60 * 60 * 1e3,
115753
- /** Maximum number of concurrent in-memory sessions. */
116021
+ /** Session-record cache size. At capacity, reclaim LRU idle records; refuse only if all are live. */
115754
116022
  MAX_SESSIONS: 50,
115755
116023
  /**
115756
116024
  * How long a WARM session's subprocess may sit with no turn open before it is
115757
116025
  * given back (spec `persistent-session-runtime` §4.3).
115758
116026
  *
115759
116027
  * This is **not** session eviction. `TIMEOUT_MS` retires the session RECORD
115760
- * after 30 minutes and the person loses their place; this closes a PROCESS
116028
+ * after 30 minutes (or sooner for an idle record at the cap); this closes a PROCESS
115761
116029
  * after 5 minutes and the person cannot tell — the record, the transcript and
115762
116030
  * the conversation are untouched, and the next message resumes. Eviction
115763
116031
  * implies a reap; a reap never implies eviction.
@@ -115779,7 +116047,7 @@ var init_constants8 = __esm({
115779
116047
  * {@link SESSIONS.MAX_WARM_SESSIONS_AUTO}. Twelve was the fixed ceiling until
115780
116048
  * DOR-3012, and a machine with 48 GB filled it with 5.5 GB in use.
115781
116049
  *
115782
- * It is **not** a refusal ceiling in the way `MAX_SESSIONS` is. Warmth is a
116050
+ * Like the session-record cap, it reclaims idle entries first. Warmth is a
115783
116051
  * cache, so a launch past it reclaims the least recently used warm process,
115784
116052
  * and when nothing is reclaimable — every process mid-turn or parked on a
115785
116053
  * person — it waits for one to come free ({@link SESSIONS.WARM_SLOT_WAIT_MS}).
@@ -117161,6 +117429,196 @@ var init_agent_home = __esm({
117161
117429
  }
117162
117430
  });
117163
117431
 
117432
+ // ../../apps/server/src/services/core/turn-power/live-outsider-turns.ts
117433
+ function homeKey(dir, forAgent) {
117434
+ try {
117435
+ return homeOf(resolveAgentHome(dir, forAgent));
117436
+ } catch {
117437
+ return void 0;
117438
+ }
117439
+ }
117440
+ function countWhileRunning(place2, marks, events) {
117441
+ const key = homeKey(place2.cwd, place2.forAgent) ?? UNPLACED;
117442
+ return (async function* counted() {
117443
+ const token = { marks };
117444
+ const turns = running.get(key) ?? /* @__PURE__ */ new Set();
117445
+ turns.add(token);
117446
+ running.set(key, turns);
117447
+ try {
117448
+ yield* events;
117449
+ } finally {
117450
+ turns.delete(token);
117451
+ if (turns.size === 0 && running.get(key) === turns) running.delete(key);
117452
+ }
117453
+ })();
117454
+ }
117455
+ var UNPLACED, running;
117456
+ var init_live_outsider_turns = __esm({
117457
+ "../../apps/server/src/services/core/turn-power/live-outsider-turns.ts"() {
117458
+ "use strict";
117459
+ init_agent_home();
117460
+ UNPLACED = "";
117461
+ running = /* @__PURE__ */ new Map();
117462
+ }
117463
+ });
117464
+
117465
+ // ../../apps/server/src/services/core/turn-power/teammate-mark.ts
117466
+ function teammateTurnRefusal(origins) {
117467
+ const gate = spaceAllows;
117468
+ if (gate && origins.some((origin) => !gate(origin.roomId))) return TEAMMATE_LIMIT_REFUSAL;
117469
+ return null;
117470
+ }
117471
+ var TEAMMATE_LIMIT_REFUSAL, spaceAllows;
117472
+ var init_teammate_mark = __esm({
117473
+ "../../apps/server/src/services/core/turn-power/teammate-mark.ts"() {
117474
+ "use strict";
117475
+ TEAMMATE_LIMIT_REFUSAL = "This space reached its monthly limit for teammates, so this turn didn\u2019t run.";
117476
+ spaceAllows = null;
117477
+ }
117478
+ });
117479
+
117480
+ // ../../apps/server/src/services/core/turn-power/turn-marks.ts
117481
+ function presentKinds(marks) {
117482
+ return TURN_MARK_KINDS.filter((kind) => marks[kind] !== void 0);
117483
+ }
117484
+ function marksFrom(fields) {
117485
+ const kinds = presentKinds(fields);
117486
+ if (kinds.length === 0) return NO_MARKS;
117487
+ return Object.fromEntries(kinds.map((kind) => [kind, fields[kind]]));
117488
+ }
117489
+ function teammateOrigins(marks) {
117490
+ return marks.teammate ?? [];
117491
+ }
117492
+ function marksOfLevel(level) {
117493
+ return level === void 0 ? NO_MARKS : marksFrom(level);
117494
+ }
117495
+ function marksOfCeiling(ceiling) {
117496
+ if (!Array.isArray(ceiling)) {
117497
+ return ceiling === "runtime-default" ? UNKNOWN_SOURCE : marksOfLevel(ceiling);
117498
+ }
117499
+ const bounds = ceiling;
117500
+ if (bounds.length === 0) return UNKNOWN_SOURCE;
117501
+ return bounds.map(marksOfCeiling).reduce(mergeMarks, NO_MARKS);
117502
+ }
117503
+ function marksForTurn(opts) {
117504
+ const ceiling = opts?.continuationHold === true ? withoutContinuationBound(opts.permissionCeiling) : opts?.permissionCeiling;
117505
+ const fromCeiling = ceiling !== void 0 ? marksOfCeiling(ceiling) : NO_MARKS;
117506
+ return opts?.carriedMarks?.outsider === true ? mergeMarks(fromCeiling, { outsider: true }) : fromCeiling;
117507
+ }
117508
+ function withoutContinuationBound(ceiling) {
117509
+ if (ceiling === void 0 || ceiling === "runtime-default") return void 0;
117510
+ if (!Array.isArray(ceiling)) return ceiling;
117511
+ const bounds = [...ceiling];
117512
+ const at = bounds.indexOf("runtime-default");
117513
+ if (at !== -1) bounds.splice(at, 1);
117514
+ return bounds.length === 0 ? void 0 : bounds;
117515
+ }
117516
+ function mergeMarks(a2, b2) {
117517
+ const merged = {};
117518
+ for (const kind of TURN_MARK_KINDS) {
117519
+ const rules = RULES[kind];
117520
+ const value = rules.merge(a2[kind], b2[kind]);
117521
+ if (value !== void 0) merged[kind] = value;
117522
+ }
117523
+ return marksFrom(merged);
117524
+ }
117525
+ function hasMarks(marks) {
117526
+ return presentKinds(marks).length > 0;
117527
+ }
117528
+ function carriesAllMarks(receiver, sender) {
117529
+ return TURN_MARK_KINDS.every(
117530
+ (kind) => RULES[kind].covers(receiver[kind], sender[kind])
117531
+ );
117532
+ }
117533
+ function withMarks(level, marks) {
117534
+ const own2 = marksOfLevel(level);
117535
+ if (carriesAllMarks(own2, marks)) return level;
117536
+ return { ...level, ...mergeMarks(own2, marks) };
117537
+ }
117538
+ async function* refused(reason) {
117539
+ yield* [];
117540
+ throw new Error(reason);
117541
+ }
117542
+ function placeOf(runtime, sessionId, opts) {
117543
+ let cwd = opts?.cwd ?? opts?.roomTurn?.cwd;
117544
+ try {
117545
+ cwd ??= runtime.getSessionCwd?.(sessionId);
117546
+ } catch {
117547
+ }
117548
+ return { cwd, forAgent: turnAgentOf(opts) };
117549
+ }
117550
+ function applyTurnMarks(runtime, marksOfSession, recordRefused) {
117551
+ const places = /* @__PURE__ */ new Map();
117552
+ function markedTurn(target, sessionId, opts, start) {
117553
+ const marks = marksForTurn(opts);
117554
+ if (!hasMarks(marks)) return start(opts);
117555
+ if (marks.teammate !== void 0) {
117556
+ const refusal2 = teammateTurnRefusal(marks.teammate);
117557
+ if (refusal2 !== null) {
117558
+ if (opts) recordRefused?.(sessionId, opts);
117559
+ return refused(refusal2);
117560
+ }
117561
+ }
117562
+ const place2 = placeOf(target, sessionId, opts);
117563
+ places.delete(sessionId);
117564
+ places.set(sessionId, place2);
117565
+ if (places.size > PLACE_MEMORY) places.delete(places.keys().next().value);
117566
+ return countWhileRunning(place2, marks, start(opts));
117567
+ }
117568
+ return new Proxy(runtime, {
117569
+ get(target, prop) {
117570
+ if ((prop === "sendMessage" || prop === "executeCommandIntent") && typeof target[prop] === "function") {
117571
+ const start = target[prop].bind(target);
117572
+ return (sessionId, input4, opts) => markedTurn(target, sessionId, opts, (sent) => start(sessionId, input4, sent));
117573
+ }
117574
+ if (prop === "onRuntimeTurn" && typeof target.onRuntimeTurn === "function") {
117575
+ const subscribe = target.onRuntimeTurn.bind(target);
117576
+ return (listener) => subscribe((sessionId, events) => {
117577
+ const marks = marksOfSession(sessionId);
117578
+ listener(
117579
+ sessionId,
117580
+ hasMarks(marks) ? countWhileRunning(
117581
+ places.get(sessionId) ?? placeOf(target, sessionId, void 0),
117582
+ marks,
117583
+ events
117584
+ ) : events
117585
+ );
117586
+ });
117587
+ }
117588
+ const value = Reflect.get(target, prop, target);
117589
+ return typeof value === "function" ? value.bind(target) : value;
117590
+ }
117591
+ });
117592
+ }
117593
+ var TURN_MARK_KINDS, NO_MARKS, PLACE_MEMORY, UNKNOWN_SOURCE, sameOrigin, RULES;
117594
+ var init_turn_marks = __esm({
117595
+ "../../apps/server/src/services/core/turn-power/turn-marks.ts"() {
117596
+ "use strict";
117597
+ init_permission_semantics();
117598
+ init_agent_home();
117599
+ init_live_outsider_turns();
117600
+ init_teammate_mark();
117601
+ TURN_MARK_KINDS = [
117602
+ "outsider",
117603
+ "teammate"
117604
+ ];
117605
+ NO_MARKS = Object.freeze({});
117606
+ PLACE_MEMORY = 1e4;
117607
+ UNKNOWN_SOURCE = Object.freeze({ outsider: true });
117608
+ sameOrigin = (a2, b2) => a2.roomId === b2.roomId && a2.authorId === b2.authorId;
117609
+ RULES = {
117610
+ outsider: {
117611
+ merge: (a2, b2) => a2 === true || b2 === true ? true : void 0,
117612
+ covers: (outer, inner) => inner !== true || outer === true
117613
+ },
117614
+ teammate: {
117615
+ merge: (a2, b2) => mergeTeammateOrigins(a2, b2),
117616
+ covers: (outer, inner) => inner === void 0 || outer !== void 0 && inner.every((origin) => outer.some((o3) => sameOrigin(o3, origin)))
117617
+ }
117618
+ };
117619
+ }
117620
+ });
117621
+
117164
117622
  // ../../apps/server/src/services/session/turn-identity/durable-rekey.ts
117165
117623
  var init_durable_rekey = __esm({
117166
117624
  "../../apps/server/src/services/session/turn-identity/durable-rekey.ts"() {
@@ -118698,8 +119156,8 @@ var init_devtools_capture_store = __esm({
118698
119156
  * @param pending - The recording id and working directory to write under.
118699
119157
  * @param timeoutMs - How long to wait before giving up on the window.
118700
119158
  */
118701
- awaitRecording(requestId, pending2, timeoutMs) {
118702
- this.pendingRecordings.set(requestId, pending2);
119159
+ awaitRecording(requestId, pending, timeoutMs) {
119160
+ this.pendingRecordings.set(requestId, pending);
118703
119161
  return new Promise((resolve14) => {
118704
119162
  const timer = setTimeout(() => {
118705
119163
  this.recordingWaiters.delete(requestId);
@@ -118720,17 +119178,17 @@ var init_devtools_capture_store = __esm({
118720
119178
  * @param requestId - The round trip id the upload carries.
118721
119179
  */
118722
119180
  pendingRecording(requestId) {
118723
- const pending2 = this.pendingRecordings.get(requestId);
118724
- return pending2 ? { ...pending2 } : void 0;
119181
+ const pending = this.pendingRecordings.get(requestId);
119182
+ return pending ? { ...pending } : void 0;
118725
119183
  }
118726
119184
  /** Recording uploads require the pinned live claim, even while decoder/encoder work is finishing. */
118727
119185
  admitsRecording(requestId, actual) {
118728
- const pending2 = this.pendingRecordings.get(requestId);
118729
- if (!pending2 || !matchesBinding(pending2.binding ?? {}, actual)) return false;
118730
- if (!pending2.binding) return true;
119186
+ const pending = this.pendingRecordings.get(requestId);
119187
+ if (!pending || !matchesBinding(pending.binding ?? {}, actual)) return false;
119188
+ if (!pending.binding) return true;
118731
119189
  return [...this.buffers.values()].some(
118732
119190
  (buffer) => buffer.drivers.some(
118733
- (claim2) => matchesBinding(pending2.binding, claim2) && claim2.activeAt >= Date.now() - WORKBENCH.DEVTOOLS_SEAT_STALE_MS
119191
+ (claim2) => matchesBinding(pending.binding, claim2) && claim2.activeAt >= Date.now() - WORKBENCH.DEVTOOLS_SEAT_STALE_MS
118734
119192
  )
118735
119193
  );
118736
119194
  }
@@ -119143,287 +119601,9 @@ var init_session_key_registry = __esm({
119143
119601
  }
119144
119602
  });
119145
119603
 
119146
- // ../../apps/server/src/services/session/origin/outsider-turns.ts
119147
- import { AsyncLocalStorage as AsyncLocalStorage5 } from "node:async_hooks";
119148
- function noteLatest(sessionId, outsider) {
119149
- const key = primaryOf(sessionId);
119150
- latest.set(key, outsider);
119151
- if (outsider) heard.add(key);
119152
- }
119153
- function isOutsiderOrigin(origin) {
119154
- if (origin.kind === "room") return origin.externalAuthor;
119155
- return OUTSIDER_ORIGIN_KINDS.has(origin.kind);
119156
- }
119157
- function noteTurnOrigin(sessionId, origin) {
119158
- const messageId = holdingFor.getStore();
119159
- if (messageId === void 0) {
119160
- noteLatest(sessionId, isOutsiderOrigin(origin));
119161
- return;
119162
- }
119163
- pending.set(messageId, isOutsiderOrigin(origin));
119164
- if (pending.size > PENDING_MAX) pending.delete(pending.keys().next().value);
119165
- }
119166
- function noteChatHeardOutsider(sessionId) {
119167
- heard.add(primaryOf(sessionId));
119168
- }
119169
- var OUTSIDER_ORIGIN_KINDS, latest, heard, pending, PENDING_MAX, holdingFor;
119170
- var init_outsider_turns = __esm({
119171
- "../../apps/server/src/services/session/origin/outsider-turns.ts"() {
119172
- "use strict";
119173
- init_session_key_registry();
119174
- OUTSIDER_ORIGIN_KINDS = /* @__PURE__ */ new Set([
119175
- "relay-binding",
119176
- "outside-sender",
119177
- "connector-event"
119178
- ]);
119179
- latest = /* @__PURE__ */ new Map();
119180
- heard = /* @__PURE__ */ new Set();
119181
- pending = /* @__PURE__ */ new Map();
119182
- PENDING_MAX = 1e3;
119183
- holdingFor = new AsyncLocalStorage5();
119184
- }
119185
- });
119186
-
119187
- // ../../apps/server/src/services/core/turn-power/live-outsider-turns.ts
119188
- function homeKey(dir, forAgent) {
119189
- try {
119190
- return homeOf(resolveAgentHome(dir, forAgent));
119191
- } catch {
119192
- return void 0;
119193
- }
119194
- }
119195
- function countWhileRunning(place2, marks, events) {
119196
- const key = homeKey(place2.cwd, place2.forAgent) ?? UNPLACED;
119197
- return (async function* counted() {
119198
- const token = { marks };
119199
- const turns = running.get(key) ?? /* @__PURE__ */ new Set();
119200
- turns.add(token);
119201
- running.set(key, turns);
119202
- try {
119203
- yield* events;
119204
- } finally {
119205
- turns.delete(token);
119206
- if (turns.size === 0 && running.get(key) === turns) running.delete(key);
119207
- }
119208
- })();
119209
- }
119210
- var UNPLACED, running;
119211
- var init_live_outsider_turns = __esm({
119212
- "../../apps/server/src/services/core/turn-power/live-outsider-turns.ts"() {
119213
- "use strict";
119214
- init_agent_home();
119215
- UNPLACED = "";
119216
- running = /* @__PURE__ */ new Map();
119217
- }
119218
- });
119219
-
119220
- // ../../apps/server/src/services/core/turn-power/teammate-mark.ts
119221
- function runsTeammateTurns(runtimeType) {
119222
- return TEAMMATE_TURN_RUNTIMES.has(runtimeType);
119223
- }
119224
- function teammateRuntimeRefusal(runtimeType) {
119225
- return `A teammate's message cannot start a turn on ${runtimeType} yet`;
119226
- }
119227
- function teammateTurnRefusal(runtimeType, origins) {
119228
- if (!runsTeammateTurns(runtimeType)) return teammateRuntimeRefusal(runtimeType);
119229
- const gate = spaceAllows;
119230
- if (gate && origins.some((origin) => !gate(origin.roomId))) return TEAMMATE_LIMIT_REFUSAL;
119231
- return null;
119232
- }
119233
- function teammateTurnOpts(opts) {
119234
- const { additionalDirectories: _granted, ...rest } = opts ?? {};
119235
- return {
119236
- ...rest,
119237
- teammate: true,
119238
- unattended: true,
119239
- permissionCeiling: withReadOnly(opts?.permissionCeiling),
119240
- ...opts?.roomTurn ? { roomTurn: { ...opts.roomTurn, teammate: true, untrustedText: true } } : {}
119241
- };
119242
- }
119243
- function withReadOnly(ceiling) {
119244
- if (ceiling === void 0) return READ_ONLY_LEVEL;
119245
- if (Array.isArray(ceiling) && ceiling.length === 0) return ["runtime-default", READ_ONLY_LEVEL];
119246
- const bounds = Array.isArray(ceiling) ? ceiling : [ceiling];
119247
- return [...bounds, READ_ONLY_LEVEL];
119248
- }
119249
- var TEAMMATE_TURN_RUNTIMES, TEAMMATE_LIMIT_REFUSAL, spaceAllows;
119250
- var init_teammate_mark = __esm({
119251
- "../../apps/server/src/services/core/turn-power/teammate-mark.ts"() {
119252
- "use strict";
119253
- init_permission_semantics();
119254
- TEAMMATE_TURN_RUNTIMES = /* @__PURE__ */ new Set(["claude-code", "test-mode"]);
119255
- TEAMMATE_LIMIT_REFUSAL = "This space reached its monthly limit for teammates, so this turn didn\u2019t run.";
119256
- spaceAllows = null;
119257
- }
119258
- });
119259
-
119260
- // ../../apps/server/src/services/core/turn-power/turn-marks.ts
119261
- function presentKinds(marks) {
119262
- return TURN_MARK_KINDS.filter((kind) => marks[kind] !== void 0);
119263
- }
119264
- function marksFrom(fields) {
119265
- const kinds = presentKinds(fields);
119266
- if (kinds.length === 0) return NO_MARKS;
119267
- return Object.fromEntries(kinds.map((kind) => [kind, fields[kind]]));
119268
- }
119269
- function teammateOrigins(marks) {
119270
- return marks.teammate ?? [];
119271
- }
119272
- function marksOfLevel(level) {
119273
- return level === void 0 ? NO_MARKS : marksFrom(level);
119274
- }
119275
- function marksOfCeiling(ceiling) {
119276
- if (!Array.isArray(ceiling)) {
119277
- return ceiling === "runtime-default" ? UNKNOWN_SOURCE : marksOfLevel(ceiling);
119278
- }
119279
- const bounds = ceiling;
119280
- if (bounds.length === 0) return UNKNOWN_SOURCE;
119281
- return bounds.map(marksOfCeiling).reduce(mergeMarks, NO_MARKS);
119282
- }
119283
- function marksForTurn(opts) {
119284
- const ceiling = opts?.continuationHold === true ? withoutContinuationBound(opts.permissionCeiling) : opts?.permissionCeiling;
119285
- const fromCeiling = ceiling !== void 0 ? marksOfCeiling(ceiling) : NO_MARKS;
119286
- return mergeMarks(
119287
- fromCeiling,
119288
- opts?.roomTurn?.outsiderInView === true ? { outsider: true } : NO_MARKS
119289
- );
119290
- }
119291
- function withoutContinuationBound(ceiling) {
119292
- if (ceiling === void 0 || ceiling === "runtime-default") return void 0;
119293
- if (!Array.isArray(ceiling)) return ceiling;
119294
- const bounds = [...ceiling];
119295
- const at = bounds.indexOf("runtime-default");
119296
- if (at !== -1) bounds.splice(at, 1);
119297
- return bounds.length === 0 ? void 0 : bounds;
119298
- }
119299
- function mergeMarks(a2, b2) {
119300
- const merged = {};
119301
- for (const kind of TURN_MARK_KINDS) {
119302
- const rules = RULES[kind];
119303
- const value = rules.merge(a2[kind], b2[kind]);
119304
- if (value !== void 0) merged[kind] = value;
119305
- }
119306
- return marksFrom(merged);
119307
- }
119308
- function hasMarks(marks) {
119309
- return presentKinds(marks).length > 0;
119310
- }
119311
- function carriesAllMarks(receiver, sender) {
119312
- return TURN_MARK_KINDS.every(
119313
- (kind) => RULES[kind].covers(receiver[kind], sender[kind])
119314
- );
119315
- }
119316
- function withMarks(level, marks) {
119317
- const own2 = marksOfLevel(level);
119318
- if (carriesAllMarks(own2, marks)) return level;
119319
- return { ...level, ...mergeMarks(own2, marks) };
119320
- }
119321
- function withCarriedHold(runtimeType, opts, setToFull = false) {
119322
- const ceiling = opts?.permissionCeiling;
119323
- if (ceiling === void 0 || setToFull || GATES_CARRIED_SHELL.has(runtimeType)) return opts;
119324
- if (ceilingHoldsForOutsider(ceiling) || marksOfCeiling(ceiling).outsider !== true) return opts;
119325
- const bounds = Array.isArray(ceiling) ? [...ceiling] : [ceiling];
119326
- bounds.push("runtime-default");
119327
- const { continuationHold: _dropped, ...rest } = opts ?? {};
119328
- return { ...rest, permissionCeiling: bounds.length === 1 ? bounds[0] : bounds };
119329
- }
119330
- async function* refused(reason) {
119331
- yield* [];
119332
- throw new Error(reason);
119333
- }
119334
- function placeOf(runtime, sessionId, opts) {
119335
- let cwd = opts?.cwd ?? opts?.roomTurn?.cwd;
119336
- try {
119337
- cwd ??= runtime.getSessionCwd?.(sessionId);
119338
- } catch {
119339
- }
119340
- return { cwd, forAgent: turnAgentOf(opts) };
119341
- }
119342
- function applyTurnMarks(runtime, marksOfSession, recordRefused, setToFull) {
119343
- const places = /* @__PURE__ */ new Map();
119344
- function markedTurn(target, sessionId, opts, start) {
119345
- const marks = marksForTurn(opts);
119346
- if (!hasMarks(marks)) return start(opts);
119347
- if (marks.outsider === true) noteChatHeardOutsider(sessionId);
119348
- let sent = withCarriedHold(target.type, opts, setToFull?.(sessionId, opts) === true);
119349
- if (marks.teammate !== void 0) {
119350
- sent = teammateTurnOpts(opts);
119351
- const refusal2 = teammateTurnRefusal(target.type, marks.teammate);
119352
- if (refusal2 !== null) {
119353
- recordRefused?.(sessionId, sent);
119354
- return refused(refusal2);
119355
- }
119356
- }
119357
- const place2 = placeOf(target, sessionId, sent);
119358
- places.delete(sessionId);
119359
- places.set(sessionId, place2);
119360
- if (places.size > PLACE_MEMORY) places.delete(places.keys().next().value);
119361
- return countWhileRunning(place2, marks, start(sent));
119362
- }
119363
- return new Proxy(runtime, {
119364
- get(target, prop) {
119365
- if ((prop === "sendMessage" || prop === "executeCommandIntent") && typeof target[prop] === "function") {
119366
- const start = target[prop].bind(target);
119367
- return (sessionId, input4, opts) => markedTurn(target, sessionId, opts, (sent) => start(sessionId, input4, sent));
119368
- }
119369
- if (prop === "onRuntimeTurn" && typeof target.onRuntimeTurn === "function") {
119370
- const subscribe = target.onRuntimeTurn.bind(target);
119371
- return (listener) => subscribe((sessionId, events) => {
119372
- const marks = marksOfSession(sessionId);
119373
- listener(
119374
- sessionId,
119375
- hasMarks(marks) ? countWhileRunning(
119376
- places.get(sessionId) ?? placeOf(target, sessionId, void 0),
119377
- marks,
119378
- events
119379
- ) : events
119380
- );
119381
- });
119382
- }
119383
- const value = Reflect.get(target, prop, target);
119384
- return typeof value === "function" ? value.bind(target) : value;
119385
- }
119386
- });
119387
- }
119388
- var TURN_MARK_KINDS, NO_MARKS, PLACE_MEMORY, UNKNOWN_SOURCE, sameOrigin, RULES, GATES_CARRIED_SHELL;
119389
- var init_turn_marks = __esm({
119390
- "../../apps/server/src/services/core/turn-power/turn-marks.ts"() {
119391
- "use strict";
119392
- init_permission_semantics();
119393
- init_agent_home();
119394
- init_outsider_turns();
119395
- init_live_outsider_turns();
119396
- init_teammate_mark();
119397
- TURN_MARK_KINDS = [
119398
- "outsider",
119399
- "teammate"
119400
- ];
119401
- NO_MARKS = Object.freeze({});
119402
- PLACE_MEMORY = 1e4;
119403
- UNKNOWN_SOURCE = Object.freeze({ outsider: true });
119404
- sameOrigin = (a2, b2) => a2.roomId === b2.roomId && a2.authorId === b2.authorId;
119405
- RULES = {
119406
- outsider: {
119407
- merge: (a2, b2) => a2 === true || b2 === true ? true : void 0,
119408
- covers: (outer, inner) => inner !== true || outer === true
119409
- },
119410
- teammate: {
119411
- merge: (a2, b2) => mergeTeammateOrigins(a2, b2),
119412
- covers: (outer, inner) => inner === void 0 || outer !== void 0 && inner.every((origin) => outer.some((o3) => sameOrigin(o3, origin)))
119413
- }
119414
- };
119415
- GATES_CARRIED_SHELL = /* @__PURE__ */ new Set(["claude-code"]);
119416
- }
119417
- });
119418
-
119419
119604
  // ../../apps/server/src/services/core/turn-power/continuation-hold.ts
119420
- function noteTurnHold(sessionId, held2, carried = false) {
119605
+ function noteTurnHold(sessionId, held2) {
119421
119606
  const key = primaryOf(sessionId);
119422
- carriedOnly.delete(key);
119423
- if (held2 && carried) {
119424
- carriedOnly.add(key);
119425
- if (carriedOnly.size > WRITTEN_MAX) carriedOnly.delete(carriedOnly.values().next().value);
119426
- }
119427
119607
  if (!db) return;
119428
119608
  if (written.get(key) === held2) return;
119429
119609
  try {
@@ -119443,17 +119623,15 @@ function noteTurnHold(sessionId, held2, carried = false) {
119443
119623
  });
119444
119624
  }
119445
119625
  }
119446
- var db, written, WRITTEN_MAX, carriedOnly;
119626
+ var db, written, WRITTEN_MAX;
119447
119627
  var init_continuation_hold = __esm({
119448
119628
  "../../apps/server/src/services/core/turn-power/continuation-hold.ts"() {
119449
119629
  "use strict";
119450
119630
  init_src2();
119451
- init_permission_semantics();
119452
119631
  init_session_key_registry();
119453
119632
  init_logger();
119454
119633
  written = /* @__PURE__ */ new Map();
119455
119634
  WRITTEN_MAX = 1e4;
119456
- carriedOnly = /* @__PURE__ */ new Set();
119457
119635
  }
119458
119636
  });
119459
119637
 
@@ -119626,9 +119804,7 @@ function recordTurnLevels(runtime, storedModeOf) {
119626
119804
  (sessionId) => marksOfLevel(turnLevels.get(sessionId)),
119627
119805
  (sessionId, opts) => {
119628
119806
  recordTurn(runtime, sessionId, storedOf2(sessionId), opts);
119629
- },
119630
- // A chat set to Full is never held for a mark it carries (DOR-3394).
119631
- (sessionId, opts) => isFullLevel(chosenLevelOf(runtime, storedOf2(sessionId), opts))
119807
+ }
119632
119808
  );
119633
119809
  }
119634
119810
  function recordLevels(runtime, storedModeOf) {
@@ -119644,12 +119820,7 @@ function recordLevels(runtime, storedModeOf) {
119644
119820
  stored = void 0;
119645
119821
  }
119646
119822
  const level = recordTurn(target, sessionId, stored, opts);
119647
- if (opts?.continuationHold !== true) {
119648
- const held2 = level.outsider === true;
119649
- const ceiling = opts?.permissionCeiling;
119650
- const carried = held2 && !(ceiling !== void 0 && ceilingHoldsForOutsider(ceiling));
119651
- noteTurnHold(sessionId, held2, carried);
119652
- }
119823
+ if (opts?.continuationHold !== true) noteTurnHold(sessionId, level.outsider === true);
119653
119824
  const serial = ++nextTurnSerial;
119654
119825
  for (const id of /* @__PURE__ */ new Set([sessionId, primaryOf(sessionId)])) {
119655
119826
  turnSerials.delete(id);
@@ -119672,7 +119843,6 @@ var init_turn_levels = __esm({
119672
119843
  "use strict";
119673
119844
  init_turn_marks();
119674
119845
  init_session_key_registry();
119675
- init_outsider_turns();
119676
119846
  init_continuation_hold();
119677
119847
  init_full_autonomy();
119678
119848
  init_permission_semantics();
@@ -119845,10 +120015,7 @@ function permissionSeedForOrigin(origin) {
119845
120015
  // The owner on the web, with the chat's stream open through the relay. A
119846
120016
  // new chat is born at the operator's configured stop, as one started here
119847
120017
  // is, so the chat is the same chat when its owner comes back to this
119848
- // computer. What a relayed TURN may do is bounded separately: every one is
119849
- // held to the runtime's default by the relay (`RELAY_TURN_CEILING`), so it
119850
- // asks before anything that needs a person (spec `everything-is-a-space`
119851
- // B2, the operator's option 2).
120018
+ // computer.
119852
120019
  case "session-relay":
119853
120020
  return "configured-stop";
119854
120021
  // Nobody is watching a room turn either, and that is the reason it follows
@@ -119878,12 +120045,8 @@ function permissionSeedForOrigin(origin) {
119878
120045
  // own: the turn runs at the stricter of the two. On insert only, so an
119879
120046
  // existing chat a person set keeps what they chose. A person who later
119880
120047
  // types into it gets the same stop a chat of their own starts at.
119881
- //
119882
- // A message from a MARKED turn seeds nothing (DOR-3107, Security): the
119883
- // chat it opens never inherits the agent's own level from a turn a
119884
- // stranger's words reached.
119885
120048
  case "chat-message":
119886
- return origin.marked ? "none" : "configured-stop-on-insert";
120049
+ return "configured-stop-on-insert";
119887
120050
  // Everything below seeds nothing, for two different reasons.
119888
120051
  //
119889
120052
  // A schedule's power is already decided and already stored, on the schedule
@@ -119928,14 +120091,9 @@ function permissionSeedForOrigin(origin) {
119928
120091
  }
119929
120092
  }
119930
120093
  }
119931
- function seedForTurn(sessionId, origin) {
119932
- noteTurnOrigin(sessionId, origin);
119933
- return permissionSeedForOrigin(origin);
119934
- }
119935
120094
  var init_turn_origin = __esm({
119936
120095
  "../../apps/server/src/services/session/origin/turn-origin.ts"() {
119937
120096
  "use strict";
119938
- init_outsider_turns();
119939
120097
  }
119940
120098
  });
119941
120099
 
@@ -121385,16 +121543,6 @@ var init_existing_chats_raise = __esm({
121385
121543
  }
121386
121544
  });
121387
121545
 
121388
- // ../../apps/server/src/services/core/permissions/chat-launch-marks.ts
121389
- var init_chat_launch_marks = __esm({
121390
- "../../apps/server/src/services/core/permissions/chat-launch-marks.ts"() {
121391
- "use strict";
121392
- init_src2();
121393
- init_turn_marks();
121394
- init_existing_chats_raise();
121395
- }
121396
- });
121397
-
121398
121546
  // ../../apps/server/src/services/core/turn-power/chat-rise-facts.ts
121399
121547
  function chatRiseFacts() {
121400
121548
  return facts;
@@ -121404,10 +121552,7 @@ var init_chat_rise_facts = __esm({
121404
121552
  "../../apps/server/src/services/core/turn-power/chat-rise-facts.ts"() {
121405
121553
  "use strict";
121406
121554
  init_src2();
121407
- init_chat_launch_marks();
121408
121555
  init_session_key_registry();
121409
- init_outsider_turns();
121410
- init_continuation_hold();
121411
121556
  init_logger();
121412
121557
  facts = null;
121413
121558
  }
@@ -121470,10 +121615,7 @@ async function agentOfTurn(runtime, sessionId, opts, recordedAgentOf) {
121470
121615
  }
121471
121616
  function turnIsMarked(opts) {
121472
121617
  const ceiling = opts?.permissionCeiling;
121473
- if (ceiling !== void 0 && ceilingHoldsForOutsider(ceiling)) return true;
121474
- if (opts?.teammate === true || opts?.roomTurn?.teammate === true) return true;
121475
- if (opts?.roomTurn?.outsiderInView === true) return true;
121476
- return marksForTurn(opts).teammate !== void 0;
121618
+ return ceiling !== void 0 && ceilingHoldsForOutsider(ceiling);
121477
121619
  }
121478
121620
  function rises(runtime, sessionId, agentPath, stored, levelMode, opts) {
121479
121621
  if (opts?.permissionMode !== void 0 || opts?.unattended === true) return false;
@@ -121579,7 +121721,6 @@ var init_agent_level_bound = __esm({
121579
121721
  init_agent_launch_level();
121580
121722
  init_existing_chats_raise();
121581
121723
  init_chat_rise_facts();
121582
- init_turn_marks();
121583
121724
  init_logger();
121584
121725
  COMPUTER_LOCAL_RUNTIME = "computer-local";
121585
121726
  }
@@ -122432,7 +122573,7 @@ function toolFields(event) {
122432
122573
  };
122433
122574
  }
122434
122575
  async function* recordDuring(runtime, sessionId, opts, source) {
122435
- const pending2 = /* @__PURE__ */ new Map();
122576
+ const pending = /* @__PURE__ */ new Map();
122436
122577
  const seen = /* @__PURE__ */ new Set();
122437
122578
  let actor;
122438
122579
  const actorOf = () => actor ??= toolActorOf(runtime.type, opts);
@@ -122475,15 +122616,15 @@ async function* recordDuring(runtime, sessionId, opts, source) {
122475
122616
  seen.add(fields.id);
122476
122617
  if (isFinished(sessionId, fields.id)) return;
122477
122618
  const earlier = stillRunning.get(sessionId)?.get(fields.id);
122478
- let call = pending2.get(fields.id);
122619
+ let call = pending.get(fields.id);
122479
122620
  if (!call && earlier) {
122480
122621
  call = { name: earlier.name, input: earlier.input, inputDone: true };
122481
- pending2.set(fields.id, call);
122622
+ pending.set(fields.id, call);
122482
122623
  }
122483
122624
  if (!call) {
122484
122625
  if (!fields.name || isDorkosTool(runtime.type, fields.name)) return;
122485
122626
  call = { name: fields.name, input: "", inputDone: false };
122486
- pending2.set(fields.id, call);
122627
+ pending.set(fields.id, call);
122487
122628
  }
122488
122629
  if (event.type === "tool_call_end" || event.type !== "tool_call_delta" && fields.input !== void 0 && fields.input !== "") {
122489
122630
  call.inputDone = true;
@@ -122492,7 +122633,7 @@ async function* recordDuring(runtime, sessionId, opts, source) {
122492
122633
  call.input = event.type === "tool_call_delta" ? (call.input + fields.input).slice(0, MAX_INPUT) : fields.input.slice(0, MAX_INPUT);
122493
122634
  }
122494
122635
  if (fields.status === "complete" || fields.status === "error") {
122495
- pending2.delete(fields.id);
122636
+ pending.delete(fields.id);
122496
122637
  const finishedCall = earlier ?? callOf(fields.id, call);
122497
122638
  if (finishedCall) {
122498
122639
  recordRuntimeToolCall(
@@ -122511,7 +122652,7 @@ async function* recordDuring(runtime, sessionId, opts, source) {
122511
122652
  yield event;
122512
122653
  }
122513
122654
  } finally {
122514
- for (const [toolCallId, call] of pending2) {
122655
+ for (const [toolCallId, call] of pending) {
122515
122656
  if (!call.inputDone) continue;
122516
122657
  try {
122517
122658
  const running2 = callOf(toolCallId, call);
@@ -122793,22 +122934,7 @@ var init_decorate_runtime = __esm({
122793
122934
  }
122794
122935
  });
122795
122936
 
122796
- // ../../apps/server/src/services/core/runtime-registry.ts
122797
- function rowToSettings(row2) {
122798
- const settings = {};
122799
- if (row2.permissionMode != null) settings.permissionMode = row2.permissionMode;
122800
- if (row2.model != null) settings.model = row2.model;
122801
- if (row2.effort != null) {
122802
- const effort = EffortLevelSchema.safeParse(row2.effort);
122803
- if (effort.success) settings.effort = effort.data;
122804
- else
122805
- logger.warn("[RuntimeRegistry] ignoring an unreadable stored effort level", {
122806
- stored: row2.effort
122807
- });
122808
- }
122809
- if (row2.fastMode != null) settings.fastMode = row2.fastMode;
122810
- return settings;
122811
- }
122937
+ // ../../apps/server/src/services/core/runtime-seam/session-metadata-columns.ts
122812
122938
  function pickSettings(settings) {
122813
122939
  const patch = {};
122814
122940
  if (settings.permissionMode !== void 0) patch.permissionMode = settings.permissionMode;
@@ -122825,6 +122951,37 @@ function fillNullsWith(seed) {
122825
122951
  }
122826
122952
  return update;
122827
122953
  }
122954
+ function launchColumns(origin, claim2) {
122955
+ const launchedBy = origin.kind === "agent-launch" ? origin.launchedBy : void 0;
122956
+ if (!claim2) return { launchOrigin: origin.kind, ...launchedBy ? { launchedBy } : {} };
122957
+ return {
122958
+ launchOrigin: sql2`coalesce(${sessionMetadata.launchOrigin}, ${origin.kind})`,
122959
+ ...launchedBy ? { launchedBy: sql2`coalesce(${sessionMetadata.launchedBy}, ${launchedBy})` } : {}
122960
+ };
122961
+ }
122962
+ var init_session_metadata_columns = __esm({
122963
+ "../../apps/server/src/services/core/runtime-seam/session-metadata-columns.ts"() {
122964
+ "use strict";
122965
+ init_src2();
122966
+ }
122967
+ });
122968
+
122969
+ // ../../apps/server/src/services/core/runtime-registry.ts
122970
+ function rowToSettings(row2) {
122971
+ const settings = {};
122972
+ if (row2.permissionMode != null) settings.permissionMode = row2.permissionMode;
122973
+ if (row2.model != null) settings.model = row2.model;
122974
+ if (row2.effort != null) {
122975
+ const effort = EffortLevelSchema.safeParse(row2.effort);
122976
+ if (effort.success) settings.effort = effort.data;
122977
+ else
122978
+ logger.warn("[RuntimeRegistry] ignoring an unreadable stored effort level", {
122979
+ stored: row2.effort
122980
+ });
122981
+ }
122982
+ if (row2.fastMode != null) settings.fastMode = row2.fastMode;
122983
+ return settings;
122984
+ }
122828
122985
  function moveSessionContext(db2, fromId, toId) {
122829
122986
  const source = db2.select().from(sessionContext).where(eq(sessionContext.sessionId, fromId)).get();
122830
122987
  if (!source) return;
@@ -122859,6 +123016,7 @@ var init_runtime_registry = __esm({
122859
123016
  init_session_started_by_store();
122860
123017
  init_session_touch_store();
122861
123018
  init_decorate_runtime();
123019
+ init_session_metadata_columns();
122862
123020
  BOUND_RUNTIME_CHUNK_SIZE = 500;
122863
123021
  RuntimeNotRegisteredError = class extends Error {
122864
123022
  constructor(runtime, sessionId) {
@@ -122976,7 +123134,7 @@ var init_runtime_registry = __esm({
122976
123134
  async persistSessionRuntime(sessionId, runtime, origin, agentPath) {
122977
123135
  const db2 = this.requireDb("persistSessionRuntime");
122978
123136
  const agent = await readAgentExecutionDefaults(agentPath);
122979
- const seedPolicy = seedForTurn(sessionId, origin);
123137
+ const seedPolicy = permissionSeedForOrigin(origin);
122980
123138
  const seed = this.seedForNewRow(runtime, { agent, seedPolicy });
122981
123139
  const result2 = await db2.insert(sessionMetadata).values({
122982
123140
  sessionId,
@@ -122985,7 +123143,7 @@ var init_runtime_registry = __esm({
122985
123143
  // What started it, server-held and never overwritten: the fact that
122986
123144
  // decides whether a limited session may carry its work to another
122987
123145
  // account (spec `claude-account-fleet` D9).
122988
- launchOrigin: origin.kind,
123146
+ ...launchColumns(origin),
122989
123147
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
122990
123148
  ...seed
122991
123149
  }).onConflictDoUpdate({
@@ -122998,7 +123156,7 @@ var init_runtime_registry = __esm({
122998
123156
  ...agentPath !== void 0 ? { agentPath } : {},
122999
123157
  ...fillNullsWith(seed),
123000
123158
  // The claim names what started the session only when nothing has yet.
123001
- launchOrigin: sql2`coalesce(${sessionMetadata.launchOrigin}, ${origin.kind})`,
123159
+ ...launchColumns(origin, "claim"),
123002
123160
  // **The UPDATE branch is a CLAIM, and not every origin may seed one.**
123003
123161
  // This row already exists: something created it before the session
123004
123162
  // started, which for a person is their own pre-launch settings change
@@ -123585,6 +123743,7 @@ var init_runtime_registry = __esm({
123585
123743
  fastMode: destination.fastMode ?? source.fastMode,
123586
123744
  agentPath: destination.agentPath ?? source.agentPath,
123587
123745
  launchOrigin: destination.launchOrigin ?? source.launchOrigin,
123746
+ launchedBy: destination.launchedBy ?? source.launchedBy,
123588
123747
  lastAutoResumeFor: destination.lastAutoResumeFor ?? source.lastAutoResumeFor
123589
123748
  }).where(eq(sessionMetadata.sessionId, toId)).run();
123590
123749
  });
@@ -124314,9 +124473,13 @@ var init_safe_git = __esm({
124314
124473
  "blame\\.ignorerevsfile",
124315
124474
  "rerere\\.enabled",
124316
124475
  "lfs\\.repositoryformatversion",
124317
- "gtr\\.[a-z.]+",
124318
- "gc\\.[a-z]+",
124319
- "maintenance\\.[a-z.]+",
124476
+ // Named keys only, never a whole section: `gc.recentObjectsHook` is a
124477
+ // shell command gc runs, and a commit or fetch can start gc by itself
124478
+ // (DOR-3667). `gtr.*` is read by git-worktree-runner, never by git; its
124479
+ // hook and editor keys name programs, so they are left out too.
124480
+ "gtr\\.(?:worktrees\\.(?:dir|prefix)|defaults\\.branch|copy\\.(?:include|exclude|includedirs|excludedirs))",
124481
+ "gc\\.(?:auto|autopacklimit|autodetach|aggressivedepth|aggressivewindow|bigpackthreshold|cruftpacks|maxcruftsize|logexpiry|packrefs|pruneexpire|worktreepruneexpire|reflogexpire|reflogexpireunreachable|rerereresolved|rerereunresolved|writecommitgraph)",
124482
+ "maintenance\\.(?:auto|autodetach|strategy|(?:gc|commit-graph|prefetch|loose-objects|incremental-repack|pack-refs|reflog-expire|worktree-prune|rerere-gc)\\.(?:enabled|schedule|auto)|loose-objects\\.batchsize)",
124320
124483
  "fetch\\.(?:prune|writecommitgraph)",
124321
124484
  "pull\\.rebase",
124322
124485
  "user\\.(?:name|email)"
@@ -124917,18 +125080,18 @@ var init_project_registry = __esm({
124917
125080
  */
124918
125081
  async withSlot(extensionId, root, name2) {
124919
125082
  if (this.reporters.get(root)?.has(extensionId)) return name2();
124920
- let pending2 = this.reserved.get(extensionId);
124921
- if (pending2?.has(root)) return name2();
124922
- if (this.namedBy(extensionId) + (pending2?.size ?? 0) >= MAX_REPORTED_ROOTS_PER_EXTENSION) {
125083
+ let pending = this.reserved.get(extensionId);
125084
+ if (pending?.has(root)) return name2();
125085
+ if (this.namedBy(extensionId) + (pending?.size ?? 0) >= MAX_REPORTED_ROOTS_PER_EXTENSION) {
124923
125086
  return null;
124924
125087
  }
124925
- if (!pending2) this.reserved.set(extensionId, pending2 = /* @__PURE__ */ new Set());
124926
- pending2.add(root);
125088
+ if (!pending) this.reserved.set(extensionId, pending = /* @__PURE__ */ new Set());
125089
+ pending.add(root);
124927
125090
  try {
124928
125091
  return await name2();
124929
125092
  } finally {
124930
- pending2.delete(root);
124931
- if (pending2.size === 0) this.reserved.delete(extensionId);
125093
+ pending.delete(root);
125094
+ if (pending.size === 0) this.reserved.delete(extensionId);
124932
125095
  }
124933
125096
  }
124934
125097
  /**
@@ -133882,7 +134045,9 @@ call.
133882
134045
  the repository is refused. Copy the real content in and commit that instead;
133883
134046
  when the source changes, copy it again.
133884
134047
  - **This room does not have files of its own**: most rooms are conversations.
133885
- There is nothing to merge into, so answer in the room instead.
134048
+ There is nothing to merge into. If this room's work needs shared files, use the
134049
+ tool whose name ends in \`set_up_room_files\`: you don't need to ask anyone, and
134050
+ your copy appears on your next turn. Otherwise answer in the room instead.
133886
134051
 
133887
134052
  ## Your own code
133888
134053
 
@@ -133922,7 +134087,7 @@ var init_using_the_agent_browser = __esm({
133922
134087
  init_tool_name_note();
133923
134088
  usingTheAgentBrowser = {
133924
134089
  name: "using-the-agent-browser",
133925
- description: "Use when you browse a website that needs a sign-in, when a page you opened asks you to sign in, or when the user mentions the signed-in browser or the agent browser. Covers what your browser starts signed in to, why you never type or ask for a password, what to ask the person to run when a sign-in is missing or expired, and how to check which sites are saved.",
134090
+ description: "Use when you browse a website that needs a sign-in, when a page you opened asks you to sign in, or when the user mentions the signed-in browser or the agent browser. Covers what your browser starts signed in to, why you never type or ask for a password, what to do when a browser tool fails or a sign-in is missing, and how to check which sites are saved.",
133926
134091
  body: `# Using the agent browser
133927
134092
 
133928
134093
  ${TOOL_NAME_NOTE}
@@ -133942,6 +134107,10 @@ Two sets of tools can both end in \`browser_navigate\`, \`browser_click\` and so
133942
134107
  - **DorkOS's own browser tools** (\`browser_navigate\`, \`browser_read_page\`,
133943
134108
  \`browser_read_console\` and the rest, on the DorkOS server) drive the browser
133944
134109
  a person can watch in the app. It is NOT signed in to anything.
134110
+ - **The shared browser** (\`local_browser_state\`, \`local_browser_observe\`,
134111
+ \`local_browser_act\`, \`local_browser_screenshot\`) drives a real browser page
134112
+ a person shared with this chat. They sign in there themselves. Only a person
134113
+ can open it: Browser, in the right panel's + menu.
133945
134114
 
133946
134115
  ## What you get
133947
134116
 
@@ -133971,17 +134140,27 @@ Two sets of tools can both end in \`browser_navigate\`, \`browser_click\` and so
133971
134140
  The site is not saved, or its sign-in ran out. Stop and say so, in one message:
133972
134141
 
133973
134142
  1. Name the site you need.
133974
- 2. Ask the person to run \`dorkos browser login <site>\` in a terminal, sign in,
133975
- and press Enter.
133976
- 3. Tell them to start a new session with you afterwards (or re-run the task),
133977
- since your current browser started before the new sign-in.
134143
+ 2. Ask the person to share a browser page with this chat (Browser, in the right
134144
+ panel's + menu) and sign in there.
134145
+ 3. Carry on in that page with your shared-browser tools.
133978
134146
 
133979
- You cannot do this step for them: the command needs a person at the keyboard
133980
- and refuses to run without one.
134147
+ Never send the person to a terminal. Only they can sign in, and the app is where
134148
+ they do it. \`dorkos browser login <site>\` also exists, and may not be installed
134149
+ on their computer, so name it only if they ask for a command-line way.
133981
134150
 
133982
134151
  Do not save a sign-in from inside your own browser. It is thrown away when the
133983
134152
  browser closes, and it would be a login made without the operator watching.
133984
134153
 
134154
+ ## When a browser tool fails
134155
+
134156
+ Say so in plain words, in one message: what you tried and what you need. Then
134157
+ offer the shared browser, as above. A site that blocks you, a browser that will
134158
+ not start and a tool you don't have all get the same answer. Don't hand the person
134159
+ commands to run, and don't try to install or start a browser yourself.
134160
+
134161
+ If nobody is there to share a page (a schedule or a heartbeat), say the work is
134162
+ stuck and why, and stop.
134163
+
133985
134164
  ## Checking what is saved
133986
134165
 
133987
134166
  Your DorkOS context tells you (an \`<agent_browser>\` note) when your browser has
@@ -138858,7 +139037,7 @@ __export(project_with_consent_exports, {
138858
139037
  withProjectLock: () => withProjectLock,
138859
139038
  withProvenInstalls: () => withProvenInstalls
138860
139039
  });
138861
- import { AsyncLocalStorage as AsyncLocalStorage6 } from "node:async_hooks";
139040
+ import { AsyncLocalStorage as AsyncLocalStorage5 } from "node:async_hooks";
138862
139041
  import { realpathSync as realpathSync14 } from "node:fs";
138863
139042
  import { join as join49, resolve as resolve9 } from "node:path";
138864
139043
  function projectLockKey(projectPath) {
@@ -139085,13 +139264,13 @@ var init_project_with_consent = __esm({
139085
139264
  };
139086
139265
  projectLocks = /* @__PURE__ */ new Map();
139087
139266
  projectLockQueue = /* @__PURE__ */ new Map();
139088
- heldByCaller = new AsyncLocalStorage6();
139267
+ heldByCaller = new AsyncLocalStorage5();
139089
139268
  reportedAtFull = /* @__PURE__ */ new Set();
139090
139269
  }
139091
139270
  });
139092
139271
 
139093
139272
  // ../shared/src/atomic-write.ts
139094
- import { AsyncLocalStorage as AsyncLocalStorage7 } from "node:async_hooks";
139273
+ import { AsyncLocalStorage as AsyncLocalStorage6 } from "node:async_hooks";
139095
139274
  import { randomUUID as randomUUID3 } from "node:crypto";
139096
139275
  import { chmod, mkdir as mkdir4, rename as rename2, rm, writeFile as writeFile3 } from "node:fs/promises";
139097
139276
  import { basename as basename8, dirname as dirname13, join as join50, resolve as resolve10 } from "node:path";
@@ -139143,7 +139322,7 @@ var pathLocks, heldLocks;
139143
139322
  var init_atomic_write2 = __esm({
139144
139323
  "../shared/src/atomic-write.ts"() {
139145
139324
  pathLocks = /* @__PURE__ */ new Map();
139146
- heldLocks = new AsyncLocalStorage7();
139325
+ heldLocks = new AsyncLocalStorage6();
139147
139326
  }
139148
139327
  });
139149
139328
 
@@ -145803,17 +145982,17 @@ function launchChromeWithPipe(executable, args, spawnChrome = defaultSpawn) {
145803
145982
  }
145804
145983
  let nextId = 0;
145805
145984
  let exitedFlag = false;
145806
- const pending2 = /* @__PURE__ */ new Map();
145985
+ const pending = /* @__PURE__ */ new Map();
145807
145986
  const listeners = /* @__PURE__ */ new Set();
145808
145987
  const exited = new Promise((resolve14) => {
145809
145988
  const finish = (code, signal) => {
145810
145989
  if (exitedFlag) return;
145811
145990
  exitedFlag = true;
145812
- for (const waiter of pending2.values()) {
145991
+ for (const waiter of pending.values()) {
145813
145992
  clearTimeout(waiter.timer);
145814
145993
  waiter.reject(new ChromeExitedError());
145815
145994
  }
145816
- pending2.clear();
145995
+ pending.clear();
145817
145996
  resolve14({ code, signal });
145818
145997
  };
145819
145998
  child.once("exit", finish);
@@ -145837,9 +146016,9 @@ function launchChromeWithPipe(executable, args, spawnChrome = defaultSpawn) {
145837
146016
  continue;
145838
146017
  }
145839
146018
  if (typeof message2.id === "number") {
145840
- const waiter = pending2.get(message2.id);
146019
+ const waiter = pending.get(message2.id);
145841
146020
  if (!waiter) continue;
145842
- pending2.delete(message2.id);
146021
+ pending.delete(message2.id);
145843
146022
  clearTimeout(waiter.timer);
145844
146023
  if (message2.error) waiter.reject(new Error(message2.error.message ?? "Chrome refused."));
145845
146024
  else waiter.resolve(message2.result ?? {});
@@ -145858,10 +146037,10 @@ function launchChromeWithPipe(executable, args, spawnChrome = defaultSpawn) {
145858
146037
  const id = ++nextId;
145859
146038
  return new Promise((resolve14, reject) => {
145860
146039
  const timer = setTimeout(() => {
145861
- pending2.delete(id);
146040
+ pending.delete(id);
145862
146041
  reject(new Error(`Chrome did not answer ${method} in time.`));
145863
146042
  }, timeoutMs);
145864
- pending2.set(id, { resolve: resolve14, reject, timer });
146043
+ pending.set(id, { resolve: resolve14, reject, timer });
145865
146044
  toChrome.write(
145866
146045
  `${JSON.stringify({ id, method, params, ...sessionId ? { sessionId } : {} })}\0`
145867
146046
  );
@@ -146039,7 +146218,9 @@ var init_profile2 = __esm({
146039
146218
 
146040
146219
  // ../shared/src/cloud-origin.ts
146041
146220
  function normalizeHost2(host) {
146042
- return host.toLowerCase().replace(/\.+$/, "");
146221
+ let end = host.length;
146222
+ while (end > 0 && host[end - 1] === ".") end -= 1;
146223
+ return host.slice(0, end).toLowerCase();
146043
146224
  }
146044
146225
  function entryFor(url2) {
146045
146226
  let parsed;
@@ -146856,9 +147037,9 @@ function formatVersion(version4, source) {
146856
147037
  }
146857
147038
  function formatUpdateLine(check4) {
146858
147039
  const installed = formatVersion(check4.installedVersion, check4.installedVersionSource);
146859
- const latest2 = formatVersion(check4.latestVersion, check4.latestVersionSource);
147040
+ const latest = formatVersion(check4.latestVersion, check4.latestVersionSource);
146860
147041
  const from = check4.marketplace ? ` (${check4.marketplace})` : "";
146861
- return `${labelOf(check4)} ${installed} \u2192 ${latest2}${from}`;
147042
+ return `${labelOf(check4)} ${installed} \u2192 ${latest}${from}`;
146862
147043
  }
146863
147044
  var init_installation_label = __esm({
146864
147045
  "src/lib/installation-label.ts"() {
@@ -150754,7 +150935,7 @@ async function unsetFlyTigrisSecrets(options, appName) {
150754
150935
  }
150755
150936
  function verifyFlyDeployment(inventory, previousReleases, expectedRepository, expectedDigest) {
150756
150937
  const latestRelease = inventory.releases.reduce(
150757
- (latest2, release) => !latest2 || release.version > latest2.version ? release : latest2,
150938
+ (latest, release) => !latest || release.version > latest.version ? release : latest,
150758
150939
  void 0
150759
150940
  );
150760
150941
  const releaseIsNew = latestRelease !== void 0 && !previousReleases.some(
@@ -150767,7 +150948,7 @@ function verifyFlyDeployment(inventory, previousReleases, expectedRepository, ex
150767
150948
  }
150768
150949
  function isInterruptedFlyDeployment(inventory, expectedRepository, expectedDigest) {
150769
150950
  const latestRelease = inventory.releases.reduce(
150770
- (latest2, release) => !latest2 || release.version > latest2.version ? release : latest2,
150951
+ (latest, release) => !latest || release.version > latest.version ? release : latest,
150771
150952
  void 0
150772
150953
  );
150773
150954
  const machine = inventory.machines[0];
@@ -150775,7 +150956,7 @@ function isInterruptedFlyDeployment(inventory, expectedRepository, expectedDiges
150775
150956
  }
150776
150957
  function verifyExistingFlyDeployment(inventory, expectedRepository, expectedDigest) {
150777
150958
  const latestRelease = inventory.releases.reduce(
150778
- (latest2, release) => !latest2 || release.version > latest2.version ? release : latest2,
150959
+ (latest, release) => !latest || release.version > latest.version ? release : latest,
150779
150960
  void 0
150780
150961
  );
150781
150962
  if (inventory.machines.length !== 1 || inventory.machines[0]?.state !== "started" || inventory.machines[0]?.imageRepository !== expectedRepository || inventory.machines[0]?.imageDigest !== expectedDigest || inventory.machines[0]?.checks.length === 0 || inventory.machines[0]?.checks.some((check4) => check4.status !== "passing") || latestRelease?.status !== "complete" || latestRelease.imageRef !== `${expectedRepository}@${expectedDigest}` || inventory.addresses.length === 0) {
@@ -152708,7 +152889,7 @@ async function waitForFlyMachineLeases(options) {
152708
152889
  }
152709
152890
  }
152710
152891
  async function latestLeaseEnd(options) {
152711
- let latest2;
152892
+ let latest;
152712
152893
  for (const machineId of options.machineIds) {
152713
152894
  let lease;
152714
152895
  try {
@@ -152719,10 +152900,10 @@ async function latestLeaseEnd(options) {
152719
152900
  }
152720
152901
  if (!lease) continue;
152721
152902
  if (lease.expiresAtMs !== null && lease.expiresAtMs <= options.now()) continue;
152722
- if (lease.expiresAtMs === null || latest2 === null) latest2 = null;
152723
- else latest2 = latest2 === void 0 ? lease.expiresAtMs : Math.max(latest2, lease.expiresAtMs);
152903
+ if (lease.expiresAtMs === null || latest === null) latest = null;
152904
+ else latest = latest === void 0 ? lease.expiresAtMs : Math.max(latest, lease.expiresAtMs);
152724
152905
  }
152725
- return latest2;
152906
+ return latest;
152726
152907
  }
152727
152908
  async function heldLeaseMinutes(options) {
152728
152909
  const ends = await latestLeaseEnd({
@@ -153818,7 +153999,7 @@ function provesFreshStage(inventory, baseline) {
153818
153999
  function runtimeEvidence(inventory) {
153819
154000
  const machine = inventory.machines[0];
153820
154001
  const release = inventory.releases.reduce(
153821
- (latest2, value) => !latest2 || value.version > latest2.version ? value : latest2,
154002
+ (latest, value) => !latest || value.version > latest.version ? value : latest,
153822
154003
  void 0
153823
154004
  );
153824
154005
  const address = inventory.addresses[0];
@@ -155637,8 +155818,8 @@ function formatCommunityRecovery(journal) {
155637
155818
  Console: https://fly.io/apps/${selection.appName}
155638
155819
  Access key: usually ${tigrisAccessKeyName(selection.bucketName)} in Tigris. Removing the bucket does not remove this key; it keeps working until you remove it in Tigris.` : ` Tigris bucket ${journal.resources.tigrisBucketId} \u2014 saved owner unavailable; may incur charges; private files may exist.` : null
155639
155820
  ].filter((row2) => row2 !== null);
155640
- const pending2 = journal.pendingIntent;
155641
- const tigrisKeysMissing = pending2?.provider === "tigris" && journal.resources.tigrisBucketId !== void 0 && journal.lastSafeError?.code === "MISSING_TIGRIS_SECRETS";
155821
+ const pending = journal.pendingIntent;
155822
+ const tigrisKeysMissing = pending?.provider === "tigris" && journal.resources.tigrisBucketId !== void 0 && journal.lastSafeError?.code === "MISSING_TIGRIS_SECRETS";
155642
155823
  const reconciliation = tigrisKeysMissing ? selection ? [
155643
155824
  `Tigris bucket ${selection.bucketName} exists, but its access keys are not on app ${selection.appName}, and Fly would not return them again. Keep this bucket; setup must not create another.`,
155644
155825
  `1. Open the bucket's Tigris console: fly storage dashboard ${selection.bucketName} --app ${selection.appName}`,
@@ -155647,12 +155828,12 @@ function formatCommunityRecovery(journal) {
155647
155828
  " then type two lines, AWS_ACCESS_KEY_ID=<key id> and AWS_SECRET_ACCESS_KEY=<secret>, and press Ctrl-D.",
155648
155829
  " (Typing them keeps the secret out of your shell history.)",
155649
155830
  "4. Resume with the command below."
155650
- ].join("\n") : `Tigris bucket ${journal.resources.tigrisBucketId} exists, but its access keys are not on the app. Add AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY with fly secrets import --stage, then resume.` : pending2 ? pending2.provider === "fly" ? `Unresolved Fly creation intent for ${pending2.resourceName} in ${pending2.organizationId}. Do not create or adopt a name match. Inspect: fly apps list --org ${pending2.organizationId} --json
155651
- Console: https://fly.io/dashboard/${pending2.organizationId}` : pending2.provider === "neon" ? `Unresolved Neon creation intent for ${pending2.resourceName} in ${pending2.organizationId}. Do not create or adopt a name match. Inspect: neonctl projects list --org-id ${pending2.organizationId} --output json
155652
- Console: https://console.neon.tech` : `Unresolved Tigris creation intent for ${pending2.resourceName} in ${pending2.organizationId}. Do not create or adopt a name match. Inspect: fly storage list --org ${pending2.organizationId}
155653
- Console: https://fly.io/dashboard/${pending2.organizationId}` : null;
155831
+ ].join("\n") : `Tigris bucket ${journal.resources.tigrisBucketId} exists, but its access keys are not on the app. Add AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY with fly secrets import --stage, then resume.` : pending ? pending.provider === "fly" ? `Unresolved Fly creation intent for ${pending.resourceName} in ${pending.organizationId}. Do not create or adopt a name match. Inspect: fly apps list --org ${pending.organizationId} --json
155832
+ Console: https://fly.io/dashboard/${pending.organizationId}` : pending.provider === "neon" ? `Unresolved Neon creation intent for ${pending.resourceName} in ${pending.organizationId}. Do not create or adopt a name match. Inspect: neonctl projects list --org-id ${pending.organizationId} --output json
155833
+ Console: https://console.neon.tech` : `Unresolved Tigris creation intent for ${pending.resourceName} in ${pending.organizationId}. Do not create or adopt a name match. Inspect: fly storage list --org ${pending.organizationId}
155834
+ Console: https://fly.io/dashboard/${pending.organizationId}` : null;
155654
155835
  const command = resumeCommand(journal);
155655
- const noRecordedId = pending2 !== null && !journal.resources[pending2.provider === "fly" ? "flyAppId" : pending2.provider === "neon" ? "neonProjectId" : "tigrisBucketId"];
155836
+ const noRecordedId = pending !== null && !journal.resources[pending.provider === "fly" ? "flyAppId" : pending.provider === "neon" ? "neonProjectId" : "tigrisBucketId"];
155656
155837
  const nextStep = journal.pendingRemoval ? [
155657
155838
  "Next: finish the removal that is in progress with:",
155658
155839
  ` dorkos community deploy --remove-uncertain ${journal.runId}`
@@ -155806,7 +155987,7 @@ async function runCommunityDispatcher(args, context2) {
155806
155987
  `This run stopped while creating a ${SERVICE_LABEL[unresolved.intent.provider]}, and DorkOS has not checked whether it landed. Check it first, and the run can continue: dorkos community deploy --remove-uncertain ${resumeJournal.runId}`
155807
155988
  );
155808
155989
  }
155809
- let latest2 = resumeJournal;
155990
+ let latest = resumeJournal;
155810
155991
  let selection;
155811
155992
  try {
155812
155993
  const appName = required2(parsed.values["app-name"], "--app-name");
@@ -155822,9 +156003,9 @@ async function runCommunityDispatcher(args, context2) {
155822
156003
  bucketName: parsed.values["bucket-name"] ?? appName
155823
156004
  };
155824
156005
  } catch (error63) {
155825
- if (latest2) {
156006
+ if (latest) {
155826
156007
  process.stderr.write(`Space setup stopped.
155827
- ${formatCommunityRecovery(latest2)}
156008
+ ${formatCommunityRecovery(latest)}
155828
156009
  `);
155829
156010
  }
155830
156011
  throw error63;
@@ -155917,7 +156098,7 @@ Journal: ${journalPath}
155917
156098
  if (parsed.values.resume) {
155918
156099
  const existing = resumeJournal;
155919
156100
  assertCommunityLaunchPlanUnchanged(existing, result2.plan);
155920
- latest2 = existing;
156101
+ latest = existing;
155921
156102
  }
155922
156103
  await confirmOwnerClipboardWrite(
155923
156104
  localEnv,
@@ -155926,28 +156107,28 @@ Journal: ${journalPath}
155926
156107
  cancellation.signal
155927
156108
  );
155928
156109
  if (!parsed.values.resume) {
155929
- latest2 = createInitialCommunityLaunchJournal(
156110
+ latest = createInitialCommunityLaunchJournal(
155930
156111
  runId,
155931
156112
  result2.plan,
155932
156113
  (/* @__PURE__ */ new Date()).toISOString()
155933
156114
  );
155934
- await initializeLaunchJournal(journalPath, latest2);
156115
+ await initializeLaunchJournal(journalPath, latest);
155935
156116
  }
155936
- if (!latest2) throw new Error("Space server launch journal was not initialized");
156117
+ if (!latest) throw new Error("Space server launch journal was not initialized");
155937
156118
  const persist3 = async (next, expectedRevision) => {
155938
156119
  await writeLaunchJournal(journalPath, next, expectedRevision);
155939
- latest2 = next;
156120
+ latest = next;
155940
156121
  };
155941
156122
  process.stdout.write(
155942
156123
  "Provisioning Fly, Neon, and private Tigris resources. Progress is saved after each verified identity.\n"
155943
156124
  );
155944
- latest2 = await executeCommunityCreationPhase(
156125
+ latest = await executeCommunityCreationPhase(
155945
156126
  result2.plan,
155946
- latest2,
156127
+ latest,
155947
156128
  createDefaultCommunityCreationDependencies({
155948
156129
  options: serviceOptions,
155949
156130
  plan: result2.plan,
155950
- latestJournal: () => latest2,
156131
+ latestJournal: () => latest,
155951
156132
  persist: persist3,
155952
156133
  now: () => (/* @__PURE__ */ new Date()).toISOString(),
155953
156134
  progress: (service) => process.stdout.write(`Checking ${service} resource identity\u2026
@@ -155964,21 +156145,21 @@ Journal: ${journalPath}
155964
156145
  );
155965
156146
  const deployed = await executeCommunityDeployPhase(
155966
156147
  result2.plan,
155967
- latest2,
156148
+ latest,
155968
156149
  createDefaultCommunityDeployDependencies({
155969
156150
  options: serviceOptions,
155970
156151
  plan: result2.plan,
155971
- latestJournal: () => latest2,
156152
+ latestJournal: () => latest,
155972
156153
  persist: persist3,
155973
156154
  now: () => (/* @__PURE__ */ new Date()).toISOString(),
155974
156155
  resolvePlatformDigest: platformDigest
155975
156156
  })
155976
156157
  );
155977
- latest2 = deployed.journal;
156158
+ latest = deployed.journal;
155978
156159
  process.stdout.write("Verifying the owner handoff and final deployment health\u2026\n");
155979
- latest2 = await executeCommunityOwnerHandoff(
156160
+ latest = await executeCommunityOwnerHandoff(
155980
156161
  result2.plan,
155981
- latest2,
156162
+ latest,
155982
156163
  deployed.bootstrapSecret,
155983
156164
  createDefaultCommunityOwnerDependencies({
155984
156165
  options: serviceOptions,
@@ -155987,13 +156168,13 @@ Journal: ${journalPath}
155987
156168
  persist: persist3,
155988
156169
  now: () => (/* @__PURE__ */ new Date()).toISOString(),
155989
156170
  signal: cancellation.signal,
155990
- platformDigest: async () => latest2?.imagePlatformDigest ?? platformDigest()
156171
+ platformDigest: async () => latest?.imagePlatformDigest ?? platformDigest()
155991
156172
  })
155992
156173
  );
155993
156174
  process.stdout.write(
155994
- latest2.state === "complete" ? `${formatCommunityCompletion(`https://${result2.plan.fly.appName}.fly.dev`)}
156175
+ latest.state === "complete" ? `${formatCommunityCompletion(`https://${result2.plan.fly.appName}.fly.dev`)}
155995
156176
  ` : `Space setup is waiting for owner completion.
155996
- ${formatCommunityRecovery(latest2)}
156177
+ ${formatCommunityRecovery(latest)}
155997
156178
  `
155998
156179
  );
155999
156180
  }
@@ -156001,33 +156182,33 @@ ${formatCommunityRecovery(latest2)}
156001
156182
  );
156002
156183
  return 0;
156003
156184
  } catch (error63) {
156004
- if (latest2 && cancellation.signal.aborted && !latest2.pendingRemoval) {
156005
- const uncertain = latest2.pendingIntent !== null || latest2.state === "uncertain";
156185
+ if (latest && cancellation.signal.aborted && !latest.pendingRemoval) {
156186
+ const uncertain = latest.pendingIntent !== null || latest.state === "uncertain";
156006
156187
  const cancelled = {
156007
- ...latest2,
156008
- revision: latest2.revision + 1,
156009
- state: uncertain ? "uncertain" : latest2.state,
156188
+ ...latest,
156189
+ revision: latest.revision + 1,
156190
+ state: uncertain ? "uncertain" : latest.state,
156010
156191
  lastSafeError: uncertain ? { category: "uncertain", code: "CREATION_OUTCOME_UNCERTAIN" } : { category: "transient", code: "CANCELLED" },
156011
156192
  updatedAt: (/* @__PURE__ */ new Date()).toISOString()
156012
156193
  };
156013
- await writeLaunchJournal(journalPath, cancelled, latest2.revision).catch(() => void 0);
156014
- latest2 = cancelled;
156194
+ await writeLaunchJournal(journalPath, cancelled, latest.revision).catch(() => void 0);
156195
+ latest = cancelled;
156015
156196
  }
156016
- const failed = latest2 && !cancellation.signal.aborted && !(error63 instanceof CommunityCreationRefusedError) ? recordLaunchFailure(latest2, error63, (/* @__PURE__ */ new Date()).toISOString()) : null;
156017
- if (latest2 && failed) {
156018
- const previous = latest2;
156197
+ const failed = latest && !cancellation.signal.aborted && !(error63 instanceof CommunityCreationRefusedError) ? recordLaunchFailure(latest, error63, (/* @__PURE__ */ new Date()).toISOString()) : null;
156198
+ if (latest && failed) {
156199
+ const previous = latest;
156019
156200
  await writeLaunchJournal(journalPath, failed, previous.revision).catch(() => void 0);
156020
- latest2 = failed;
156201
+ latest = failed;
156021
156202
  }
156022
- if (error63 instanceof CommunityCreationRefusedError && latest2) {
156023
- await stopForRefusedCreate(error63, latest2, journalPath, childEnv, formatCommunityRecovery);
156203
+ if (error63 instanceof CommunityCreationRefusedError && latest) {
156204
+ await stopForRefusedCreate(error63, latest, journalPath, childEnv, formatCommunityRecovery);
156024
156205
  }
156025
- if (latest2) {
156206
+ if (latest) {
156026
156207
  process.stderr.write(`Space setup stopped.
156027
- ${formatCommunityRecovery(latest2)}
156208
+ ${formatCommunityRecovery(latest)}
156028
156209
  `);
156029
- if (cancellation.signal.aborted && !latest2.pendingRemoval) {
156030
- process.stderr.write(`${describeStoppedLaunch(latest2)}
156210
+ if (cancellation.signal.aborted && !latest.pendingRemoval) {
156211
+ process.stderr.write(`${describeStoppedLaunch(latest)}
156031
156212
  `);
156032
156213
  return stopExitCode(stopSignal);
156033
156214
  }
@@ -160482,7 +160663,7 @@ var init_internal_adapter = __esm({
160482
160663
  field: "identifier",
160483
160664
  value: id
160484
160665
  }];
160485
- const latest2 = (await txAdapter.findMany({
160666
+ const latest = (await txAdapter.findMany({
160486
160667
  model: "verification",
160487
160668
  where,
160488
160669
  sortBy: {
@@ -160491,16 +160672,16 @@ var init_internal_adapter = __esm({
160491
160672
  },
160492
160673
  limit: 1
160493
160674
  }))[0] ?? null;
160494
- if (!latest2) return null;
160675
+ if (!latest) return null;
160495
160676
  return consumeOneWithHooks("verification", [{
160496
160677
  field: "id",
160497
- value: latest2.id
160678
+ value: latest.id
160498
160679
  }], async () => {
160499
160680
  const row2 = await txAdapter.consumeOne({
160500
160681
  model: "verification",
160501
160682
  where: [{
160502
160683
  field: "id",
160503
- value: latest2.id
160684
+ value: latest.id
160504
160685
  }]
160505
160686
  });
160506
160687
  if (!row2) return null;
@@ -160509,7 +160690,7 @@ var init_internal_adapter = __esm({
160509
160690
  where
160510
160691
  });
160511
160692
  return row2;
160512
- }, latest2);
160693
+ }, latest);
160513
160694
  }));
160514
160695
  for (const stored of identifiersToTry) {
160515
160696
  consumed = await consumeByIdentifier(stored);
@@ -178036,14 +178217,14 @@ function suggestedFilename(disposition, roomId) {
178036
178217
  }
178037
178218
  async function streamExport(body, destination, closeDestination) {
178038
178219
  const decoder2 = new TextDecoder();
178039
- let pending2 = "";
178220
+ let pending = "";
178040
178221
  let lastLine = "";
178041
178222
  const watched = async function* watch() {
178042
178223
  for await (const chunk of Readable.fromWeb(body)) {
178043
178224
  const bytes = chunk;
178044
- pending2 += decoder2.decode(bytes, { stream: true });
178045
- const parts = pending2.split("\n");
178046
- pending2 = parts.pop() ?? "";
178225
+ pending += decoder2.decode(bytes, { stream: true });
178226
+ const parts = pending.split("\n");
178227
+ pending = parts.pop() ?? "";
178047
178228
  for (const part of parts) if (part.trim()) lastLine = part;
178048
178229
  yield bytes;
178049
178230
  }
@@ -178055,7 +178236,7 @@ async function streamExport(body, destination, closeDestination) {
178055
178236
  reason = err instanceof Error ? err.message : String(err);
178056
178237
  }
178057
178238
  try {
178058
- const trailing = pending2.trim() || lastLine;
178239
+ const trailing = pending.trim() || lastLine;
178059
178240
  const parsed = JSON.parse(trailing);
178060
178241
  if (parsed.type === "summary" && typeof parsed.entryCount === "number") {
178061
178242
  if (reason === null) return { entryCount: parsed.entryCount, reason: null };
@@ -180966,7 +181147,7 @@ if (process.argv[2] === "community") {
180966
181147
  );
180967
181148
  Object.assign(childEnv, credentialEnv.pickCommunityCredentialEnv(rawProcessEnv));
180968
181149
  const exitCode = await dispatcher.runCommunityDispatcher(process.argv.slice(3), {
180969
- cliVersion: "0.129.0",
181150
+ cliVersion: "0.130.0",
180970
181151
  dorkHome: DORK_HOME,
180971
181152
  processEnv: childEnv,
180972
181153
  parseRelease: (bytes) => releaseContract.parseCompatibleCommunityReleaseManifest(
@@ -180974,7 +181155,7 @@ if (process.argv[2] === "community") {
180974
181155
  {
180975
181156
  platform: { os: "linux", architecture: "amd64" },
180976
181157
  configSchemaVersion: releaseContract.COMMUNITY_CONFIG_SCHEMA_VERSION,
180977
- migrationCompatibilityId: "sha256:913dcdd9f86a45c66ba3752d59cf3585a5a3d2a73a841137ffe22fa8a052fd89"
181158
+ migrationCompatibilityId: "sha256:58cd9b9199646a5a3dff5317d98138fd846b48aa00e874fe0beadc2ed039073b"
180978
181159
  }
180979
181160
  )
180980
181161
  });
@@ -180984,7 +181165,7 @@ if (process.argv[2] === "community") {
180984
181165
  process.exit(1);
180985
181166
  }
180986
181167
  }
180987
- var cliErrorReporter = initCliErrorReporting({ dorkHome: DORK_HOME, version: "0.129.0" });
181168
+ var cliErrorReporter = initCliErrorReporting({ dorkHome: DORK_HOME, version: "0.130.0" });
180988
181169
  var uninstallCliErrorHandlers = cliErrorReporter ? installCliErrorHandlers(cliErrorReporter) : void 0;
180989
181170
  if (process.argv[2] === "doctor") {
180990
181171
  process.env.DORK_HOME = DORK_HOME;
@@ -180994,7 +181175,7 @@ if (process.argv[2] === "doctor") {
180994
181175
  if (process.argv[2] === "feedback") {
180995
181176
  process.env.DORK_HOME = DORK_HOME;
180996
181177
  const { runFeedback: runFeedback2 } = await Promise.resolve().then(() => (init_feedback2(), feedback_exports));
180997
- process.exit(await runFeedback2(DORK_HOME, "0.129.0", process.argv.slice(3)));
181178
+ process.exit(await runFeedback2(DORK_HOME, "0.130.0", process.argv.slice(3)));
180998
181179
  }
180999
181180
  if (process.argv[2] === "auth") {
181000
181181
  process.env.DORK_HOME = DORK_HOME;
@@ -181093,7 +181274,7 @@ if (process.argv[2] === "agent" || process.argv[2] === "task" || process.argv[2]
181093
181274
  }
181094
181275
  }
181095
181276
  const { runVersionDispatcher: runVersionDispatcher2 } = await Promise.resolve().then(() => (init_version5(), version_exports));
181096
- process.exit(await runVersionDispatcher2("0.129.0", DORK_HOME, subArgs));
181277
+ process.exit(await runVersionDispatcher2("0.130.0", DORK_HOME, subArgs));
181097
181278
  }
181098
181279
  var { values, positionals } = parseCliArgs();
181099
181280
  if (positionals[0] && !knownCommands.has(positionals[0])) {
@@ -181187,14 +181368,14 @@ Examples:
181187
181368
  process.exit(0);
181188
181369
  }
181189
181370
  if (values.version) {
181190
- console.log("0.129.0");
181371
+ console.log("0.130.0");
181191
181372
  process.exit(0);
181192
181373
  }
181193
181374
  if (values["post-install-check"]) {
181194
181375
  const claudeFound = checkClaude();
181195
181376
  const coreExtensionsFound = checkCoreExtensions();
181196
181377
  const extensionsCompile = await checkExtensionCompilation();
181197
- console.log(`dorkos ${"0.129.0"}`);
181378
+ console.log(`dorkos ${"0.130.0"}`);
181198
181379
  if (!coreExtensionsFound) {
181199
181380
  console.log("Installation incomplete \u2014 bundled core extensions are missing.");
181200
181381
  }
@@ -181341,7 +181522,7 @@ if (fs42.existsSync(envPath)) {
181341
181522
  dotenv.config({ path: envPath, override: false });
181342
181523
  }
181343
181524
  uninstallCliErrorHandlers?.();
181344
- stampCliLaunch(process.env, fileURLToPath7(import.meta.url), "0.129.0");
181525
+ stampCliLaunch(process.env, fileURLToPath7(import.meta.url), "0.130.0");
181345
181526
  var server;
181346
181527
  try {
181347
181528
  server = await import("../server/index.js");
@@ -181366,7 +181547,7 @@ var ansiReset = "\x1B[0m";
181366
181547
  console.log("");
181367
181548
  console.log(`${purple}${logo}${ansiReset}`);
181368
181549
  console.log("");
181369
- console.log(` DorkOS v${"0.129.0"}`);
181550
+ console.log(` DorkOS v${"0.130.0"}`);
181370
181551
  console.log(` Local: ${link(localUrl, localUrl)}`);
181371
181552
  var nets = networkInterfaces();
181372
181553
  var networkUrl = null;
@@ -181392,9 +181573,9 @@ if (shouldOpenBrowser && process.stdin.isTTY) {
181392
181573
  const openCmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
181393
181574
  exec(`${openCmd} ${localUrl}`);
181394
181575
  }
181395
- checkForUpdate("0.129.0").then((latestVersion) => {
181576
+ checkForUpdate("0.130.0").then((latestVersion) => {
181396
181577
  if (latestVersion) {
181397
- const msg = `Update available: ${"0.129.0"} \u2192 ${latestVersion}`;
181578
+ const msg = `Update available: ${"0.130.0"} \u2192 ${latestVersion}`;
181398
181579
  const cmd = "Run npm install -g dorkos@latest to update";
181399
181580
  const width = Math.max(msg.length, cmd.length) + 6;
181400
181581
  const pad2 = (s2) => `\u2502 ${s2}${" ".repeat(width - s2.length - 6)} \u2502`;