dorkos 0.128.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 (375) hide show
  1. package/dist/bin/cli.js +766 -517
  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-CmQERFxo.js → AboutPage-B2CzVj5W.js} +1 -1
  5. package/dist/client/assets/{ActivityErrorState-Dw231W2w.js → ActivityErrorState-Dl-P-e0R.js} +1 -1
  6. package/dist/client/assets/{ActivityPage-DVfeyA9u.js → ActivityPage-CW7tqLHb.js} +1 -1
  7. package/dist/client/assets/ActivityRow-Vy4aXWk-.js +1 -0
  8. package/dist/client/assets/{AdapterIcon-NqCDzgCI.js → AdapterIcon-aabKVZmM.js} +1 -1
  9. package/dist/client/assets/AdapterSetupWizard-C5Hs0xkG.js +2 -0
  10. package/dist/client/assets/{AgentOptionRow-BRJfZo2y.js → AgentOptionRow-CqIMxq9S.js} +1 -1
  11. package/dist/client/assets/{AgentPicker-B7upjYRk.js → AgentPicker-C6mbTDJJ.js} +1 -1
  12. package/dist/client/assets/{AgentRequestCard-DXJnLk6q.js → AgentRequestCard-C8GV5Sxn.js} +4 -4
  13. package/dist/client/assets/AppearancePage-C0JKrHsO.js +1 -0
  14. package/dist/client/assets/{ApplyToOverridesDialog-C_QQhNIf.js → ApplyToOverridesDialog-DWEi0MNt.js} +1 -1
  15. package/dist/client/assets/AttentionSignalRow-Cpu0lKYg.js +1 -0
  16. package/dist/client/assets/{BaseTanStackRouterDevtoolsPanel-B-iktbLX-G7vrCqeA.js → BaseTanStackRouterDevtoolsPanel-B-iktbLX-_zVrHu5s.js} +3 -3
  17. package/dist/client/assets/BindingDialog-4UeaJfUu.js +1 -0
  18. package/dist/client/assets/BlintzCanvas-DCXIQZM_.js +1231 -0
  19. package/dist/client/assets/{CanvasCsvContent-CtLpZnTs.js → CanvasCsvContent-D-0TuvVs.js} +4 -4
  20. package/dist/client/assets/CanvasFileContent-DqSx7lz9.js +2 -0
  21. package/dist/client/assets/CanvasModel3dContent-zTx660yQ.js +2 -0
  22. package/dist/client/assets/ChannelComposer-D4TYVkvO.js +45 -0
  23. package/dist/client/assets/{ChatAppsOff-CCZUzDIH.js → ChatAppsOff-BzfyQc55.js} +2 -2
  24. package/dist/client/assets/{CodeMirrorDiff-BCpYdhgZ.js → CodeMirrorDiff-BLWBYGLp.js} +1 -1
  25. package/dist/client/assets/{CodeMirrorEditor-BeCubxHV.js → CodeMirrorEditor-D0q3ETxK.js} +1 -1
  26. package/dist/client/assets/{CommitmentList-BZtfTnwg.js → CommitmentList-BoMiLsRe.js} +1 -1
  27. package/dist/client/assets/{CommitmentsPage-DmurDgxV.js → CommitmentsPage-_7mNJVUZ.js} +1 -1
  28. package/dist/client/assets/{ComputerResourceView-Bik6GLKp.js → ComputerResourceView-Bo2LaCJf.js} +1 -1
  29. package/dist/client/assets/{ComputerViewer-CksBDqdu.js → ComputerViewer-a4VSdAw_.js} +1 -1
  30. package/dist/client/assets/ConnectionAccessLists-Dvv0YO31.js +1 -0
  31. package/dist/client/assets/{ConnectionsPage-Cgg36gDY.js → ConnectionsPage-oO8pNgbc.js} +2 -2
  32. package/dist/client/assets/{ConventionPage-CNhpF6Z1.js → ConventionPage-CFJjwhBd.js} +2 -2
  33. package/dist/client/assets/{ExtensionPageRoute-C2zue_Pw.js → ExtensionPageRoute-BqZN9q7M.js} +2 -2
  34. package/dist/client/assets/{FloatingTanStackRouterDevtools-CqogiFob-3v1TfY1P.js → FloatingTanStackRouterDevtools-CqogiFob-CnSp2ZEM.js} +1 -1
  35. package/dist/client/assets/{ForwardConsentHost-Mbo0D-zk.js → ForwardConsentHost-4LhRvCdu.js} +1 -1
  36. package/dist/client/assets/HandlePage-BjoYPqme.js +1 -0
  37. package/dist/client/assets/HeartbeatPage-rJzICayy.js +1 -0
  38. package/dist/client/assets/{KeyEntry-C43vkwpA.js → KeyEntry-BTTuXleL.js} +1 -1
  39. package/dist/client/assets/{LexicalField-iAHcvRmI.js → LexicalField-Dk_SDrjk.js} +1 -1
  40. package/dist/client/assets/{ManagesPage-BUIJvLmv.js → ManagesPage-Cvu3CQDn.js} +1 -1
  41. package/dist/client/assets/Marketplace-DPjPPlZz.js +36 -0
  42. package/dist/client/assets/{MarketplaceSourcesView-BZODwhxu.js → MarketplaceSourcesView-ChCys0on.js} +1 -1
  43. package/dist/client/assets/{McpAppFrame-D15nxVaI.js → McpAppFrame-DNamtzOp.js} +2 -2
  44. package/dist/client/assets/{McpSigninBody-DmBxqgxN.js → McpSigninBody-DLw3ZdZE.js} +1 -1
  45. package/dist/client/assets/{Model3dViewer-RGXeJd6a.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-NRfyiinS.js → NotificationsPage-aCF0AtqL.js} +1 -1
  49. package/dist/client/assets/{OpenMeshSwitch-CgQ6uefo.js → OpenMeshSwitch-DjCWF2Vy.js} +2 -2
  50. package/dist/client/assets/OperatorIdentityForm-Bcveds6f.js +1 -0
  51. package/dist/client/assets/{PermissionHistory-DPEPq8D9.js → PermissionHistory-CYsxFYmV.js} +1 -1
  52. package/dist/client/assets/{PermissionsPage--k-xutbJ.js → PermissionsPage-sxHkY92V.js} +1 -1
  53. package/dist/client/assets/{PersonalityPopover-DMMptmPS.js → PersonalityPopover-BZ20JTnJ.js} +1 -1
  54. package/dist/client/assets/PhotoPage-KBzkb0sT.js +1 -0
  55. package/dist/client/assets/PreviewRefusedNotice-BFQPYcUG.js +1 -0
  56. package/dist/client/assets/{ProfileFields-DbPJ7fvN.js → ProfileFields-sp17IFo8.js} +1 -1
  57. package/dist/client/assets/{ProfilePanelContainer-CzwhrIlw.js → ProfilePanelContainer-mA44jh5A.js} +1 -1
  58. package/dist/client/assets/{ProfileRolePicker-CZEXvlJm.js → ProfileRolePicker-Chh4_ZMB.js} +1 -1
  59. package/dist/client/assets/PromptSuggestionChips-CEi_-fHF.js +1 -0
  60. package/dist/client/assets/{ReportsToPopover-YOwGLJy5.js → ReportsToPopover-D1uknwnk.js} +1 -1
  61. package/dist/client/assets/RoomSurface-Clf1yLrr.js +1 -0
  62. package/dist/client/assets/{RoomsPage-CoXjZMWL.js → RoomsPage-BtCNzvhQ.js} +1 -1
  63. package/dist/client/assets/RunsOnPopover-LCvBpe9J.js +1 -0
  64. package/dist/client/assets/RuntimeConnectFlow-C5UDeHUC.js +1 -0
  65. package/dist/client/assets/RuntimeSetupDialog-Bqh67Vqb.js +1 -0
  66. package/dist/client/assets/{SeenDevices-Bh2yh-PW.js → SeenDevices-DvCfdeDo.js} +3 -3
  67. package/dist/client/assets/{SessionsPage-CFvkbT9X.js → SessionsPage-DLByE-re.js} +1 -1
  68. package/dist/client/assets/SettingsDialog-Co-Oxtyw.js +12 -0
  69. package/dist/client/assets/SkillsPage-Cc79IstM.js +1 -0
  70. package/dist/client/assets/TaskDialogWrapper-DuYV7Zch.js +1 -0
  71. package/dist/client/assets/TasksEmptyState-CfmPtBra.js +3 -0
  72. package/dist/client/assets/{TasksPage-D0Zi6Mve.js → TasksPage-DGk0zUhO.js} +1 -1
  73. package/dist/client/assets/{TeamComputerEntry-CY9eLVad.js → TeamComputerEntry-CLHbeX5i.js} +1 -1
  74. package/dist/client/assets/{ToolsPage-0_vx5P-F.js → ToolsPage-CSkDE7rZ.js} +2 -2
  75. package/dist/client/assets/{TopologyGraph-DUZLZZrB.js → TopologyGraph-pBC37k5P.js} +14 -14
  76. package/dist/client/assets/TourHost-CS9RsLj_.js +1 -0
  77. package/dist/client/assets/{UnlinkDialog-ptZy3IN4.js → UnlinkDialog-CelhOUZ0.js} +1 -1
  78. package/dist/client/assets/{UnreadDivider-Ckey1IWn.js → UnreadDivider-B_OMR0mQ.js} +1 -1
  79. package/dist/client/assets/WidgetErrorCard-CsMqCyCb.js +108 -0
  80. package/dist/client/assets/{WithheldExtensionsNotice-7Vu1Jctn.js → WithheldExtensionsNotice-GiKb0iQu.js} +1 -1
  81. package/dist/client/assets/WorkQueuePage-Cu721KyM.js +1 -0
  82. package/dist/client/assets/WorkView-CpWEaxMr.js +51 -0
  83. package/dist/client/assets/_shell-CmGG8Ysk.js +80 -0
  84. package/dist/client/assets/{_shell._home-BRIXhYLg.js → _shell._home-BnKkAeSp.js} +1 -1
  85. package/dist/client/assets/_shell._home.activity-DaaLJbvO.js +1 -0
  86. package/dist/client/assets/_shell._home.index-CNPasFxP.js +3 -0
  87. package/dist/client/assets/_shell._home.tasks-DXEOJ5Nq.js +1 -0
  88. package/dist/client/assets/_shell._home.workspaces-UeSvmquR.js +1 -0
  89. package/dist/client/assets/{_shell.channels-Bx6q9xVH.js → _shell.channels-NUbf5mcb.js} +4 -4
  90. package/dist/client/assets/_shell.connections-BEns4DKb.js +1 -0
  91. package/dist/client/assets/{_shell.feedback-requests-DFznTGbN.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-DmA09abY.js → _shell.team-CXeOt4XD.js} +6 -6
  96. package/dist/client/assets/_shell.threads-BYdN1UtZ.js +1 -0
  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-DxgtVd9I.js → abnfDiagram-WEYOIA3C-BLCVDt6M.js} +1 -1
  100. package/dist/client/assets/{access-copy-Dqct36mi.js → access-copy-BSQ3QECN.js} +1 -1
  101. package/dist/client/assets/{arc-C-67Ef0p.js → arc-t4OhsI5R.js} +1 -1
  102. package/dist/client/assets/{architectureDiagram-ZHVYKT53-B7TjdT-_.js → architectureDiagram-ZHVYKT53-BcIfbGZR.js} +1 -1
  103. package/dist/client/assets/{banner-C9qTs6-C.js → banner-B6xfuDA7.js} +2 -2
  104. package/dist/client/assets/{blockDiagram-RJAE7QA3-DNqxJ3Ww.js → blockDiagram-RJAE7QA3-DTOlrcEZ.js} +1 -1
  105. package/dist/client/assets/{c4Diagram-XDPPPE54-D3jNLV0j.js → c4Diagram-XDPPPE54-CHGqwaxa.js} +1 -1
  106. package/dist/client/assets/channel-CSk6LhO2.js +1 -0
  107. package/dist/client/assets/{chunk-2E7WHVMD-C6OKx0ty.js → chunk-2E7WHVMD-Bh4L_7yX.js} +1 -1
  108. package/dist/client/assets/{chunk-2Q5K7J3B-Dr_6hHrZ.js → chunk-2Q5K7J3B-BmouLl8r.js} +1 -1
  109. package/dist/client/assets/{chunk-4EMNKR2T-CSrZVDEt.js → chunk-4EMNKR2T-BVhtiAdG.js} +1 -1
  110. package/dist/client/assets/{chunk-55XCU76K-CIazeRXO.js → chunk-55XCU76K-BdbLnE56.js} +1 -1
  111. package/dist/client/assets/{chunk-5VM5RSS4-C8IJ3zTR.js → chunk-5VM5RSS4-Qg9lQpPO.js} +1 -1
  112. package/dist/client/assets/{chunk-JWPE2WC7-D9DGXb79.js → chunk-JWPE2WC7-CfIrQaMW.js} +1 -1
  113. package/dist/client/assets/{chunk-VQ5W62QI-B0LNYdif.js → chunk-VQ5W62QI-BP9oQzc0.js} +1 -1
  114. package/dist/client/assets/{chunk-XXDRQBXY-C7IAIbvZ.js → chunk-XXDRQBXY-DKzIjnsB.js} +1 -1
  115. package/dist/client/assets/{chunk-ZCHMQSOR-C79hvjlu.js → chunk-ZCHMQSOR-DsvG6BGY.js} +2 -2
  116. package/dist/client/assets/{classDiagram-v2-4MYWR3UA-0Di1C2ZB.js → classDiagram-v2-4MYWR3UA-BSiSmGgP.js} +1 -1
  117. package/dist/client/assets/{command-BVQb6I3_.js → command-B_FPXirc.js} +1 -1
  118. package/dist/client/assets/copy-button-Bp75zBSh.js +1 -0
  119. package/dist/client/assets/{cose-bilkent-JH36ORCC-rZumaV4b.js → cose-bilkent-JH36ORCC-CXgyrZix.js} +1 -1
  120. package/dist/client/assets/{cpu-DeRuDMl4.js → cpu-DpkNIYeK.js} +1 -1
  121. package/dist/client/assets/{cynefin-EF2NZ3EQ-CI9l9xhM.js → cynefin-EF2NZ3EQ-DkmPO3hK.js} +1 -1
  122. package/dist/client/assets/{cynefinDiagram-WF24UDRP-C8CdorJJ.js → cynefinDiagram-WF24UDRP-BDknJT17.js} +1 -1
  123. package/dist/client/assets/{dagre-NK4GIZVX-AHpsTq1O.js → dagre-NK4GIZVX-BR4J5E3b.js} +1 -1
  124. package/dist/client/assets/detail-row-C8zz6mAC.js +1 -0
  125. package/dist/client/assets/{diagram-CBK3MWTC-BpPLL30n.js → diagram-CBK3MWTC-CvLKqPry.js} +1 -1
  126. package/dist/client/assets/{diagram-I5XIIV2D-D6loMn3G.js → diagram-I5XIIV2D-CVtE60X9.js} +1 -1
  127. package/dist/client/assets/{diagram-ODIL2UCW-BaGNd5eN.js → diagram-ODIL2UCW-B--CpfLk.js} +1 -1
  128. package/dist/client/assets/{diagram-PFBEJUXE-BnDdKu_g.js → diagram-PFBEJUXE-08gch1t1.js} +1 -1
  129. package/dist/client/assets/{diagram-RJA3I4VV-UXagB0_c.js → diagram-RJA3I4VV-C2e-ubaD.js} +1 -1
  130. package/dist/client/assets/{diagram-TYUNFSNR-C-whBP-S.js → diagram-TYUNFSNR-DcpK4OXX.js} +1 -1
  131. package/dist/client/assets/{ebnfDiagram-V4P3TTPT-BbG481iS.js → ebnfDiagram-V4P3TTPT-DM44BkBt.js} +1 -1
  132. package/dist/client/assets/{elk-QONTBCTQ-FtssIxOc.js → elk-QONTBCTQ-maYS1Zzm.js} +1 -1
  133. package/dist/client/assets/{empty-state-CACt-76q.js → empty-state-HtOTBAoq.js} +1 -1
  134. package/dist/client/assets/{erDiagram-KYQIGQAA-PpFgUf4C.js → erDiagram-KYQIGQAA-BR7z9r2M.js} +1 -1
  135. package/dist/client/assets/{execution-config-CGL73sRn.js → execution-config-DYYeJyJh.js} +1 -1
  136. package/dist/client/assets/{file-D80JE_L0.js → file-VtGYNr9E.js} +1 -1
  137. package/dist/client/assets/{file-exclamation-point-CcJ_e4_m.js → file-exclamation-point-eBlQssyW.js} +1 -1
  138. package/dist/client/assets/{file-text-Ds9edaTZ.js → file-text-DvNAxTGZ.js} +1 -1
  139. package/dist/client/assets/{find-latest-widget-fence-BtqFMP_f.js → find-latest-widget-fence-C2qXvASs.js} +5 -5
  140. package/dist/client/assets/{flowDiagram-IUGLLWBU-BIva66g9.js → flowDiagram-IUGLLWBU-DiuMtMbj.js} +1 -1
  141. package/dist/client/assets/form-CGIIzr1u.js +1 -0
  142. package/dist/client/assets/{format-cron-BpGrgPLu.js → format-cron-BzJ6ekoo.js} +1 -1
  143. package/dist/client/assets/format-tokens-DymkROvy.js +1 -0
  144. package/dist/client/assets/{ganttDiagram-R7GPNTJY-CZqips_4.js → ganttDiagram-R7GPNTJY-Cf_z8Ri1.js} +1 -1
  145. package/dist/client/assets/{git-branch-B8JNwQ6q.js → git-branch-BVzjBPW-.js} +1 -1
  146. package/dist/client/assets/{gitGraphDiagram-PDYL7XHY-DoIc3lda.js → gitGraphDiagram-PDYL7XHY-RZXACCBr.js} +1 -1
  147. package/dist/client/assets/{graph-yizM0vwL.js → graph-DfAV_ObD.js} +1 -1
  148. package/dist/client/assets/{heart-BavUIV45.js → heart-BMOCYMFT.js} +1 -1
  149. package/dist/client/assets/{highlighted-body-KPVGNVTW-CGr3AgaU.js → highlighted-body-KPVGNVTW-DrrsaKBc.js} +1 -1
  150. package/dist/client/assets/image-lightbox-tAwBNBhm.js +1 -0
  151. package/dist/client/assets/{image-off-C1uTDs9-.js → image-off-BpagBHk1.js} +1 -1
  152. package/dist/client/assets/{index-CrTmY12y.js → index-0uCJUW_h.js} +2 -2
  153. package/dist/client/assets/index-0y0K3rYv.js +1 -0
  154. package/dist/client/assets/{index-CJXMgnYp.js → index-2GjydAcS.js} +1 -1
  155. package/dist/client/assets/index-6dsaPQ7-.js +1 -0
  156. package/dist/client/assets/{index-X282DRZf.js → index-7-yzdcAx.js} +3 -3
  157. package/dist/client/assets/{index-C8ZpJXTQ.js → index-A7HgzxSw.js} +1 -1
  158. package/dist/client/assets/{index-DW4KUPHp.js → index-BEqKTiCR.js} +1 -1
  159. package/dist/client/assets/{index-56EOd-zy.js → index-BIN0yv4s.js} +1 -1
  160. package/dist/client/assets/{index-FhWMRBQP.js → index-BL5Vmq62.js} +1 -1
  161. package/dist/client/assets/index-BOvFXsF_.js +1 -0
  162. package/dist/client/assets/index-BbcfxnHC.js +1 -0
  163. package/dist/client/assets/{index-DqkFtcGQ.js → index-BdKIijqB.js} +1 -1
  164. package/dist/client/assets/{index-BOEPL6hN.js → index-BfAymWoj.js} +1 -1
  165. package/dist/client/assets/{index-BKWJiERs.js → index-Bgts5its.js} +1 -1
  166. package/dist/client/assets/{index-n_pnc-CO.js → index-BiL3chP7.js} +1 -1
  167. package/dist/client/assets/{index-FI_y_dND.js → index-Bu3PEVA_.js} +1 -1
  168. package/dist/client/assets/{index-BOhSPP-6.js → index-C6DTV4h3.js} +1 -1
  169. package/dist/client/assets/{index-Cdod8zEY.js → index-CCH9c-nB.js} +1 -1
  170. package/dist/client/assets/{index-BkJlIXqM.js → index-CH4NJ8dD.js} +1 -1
  171. package/dist/client/assets/{index-CiGYtR9O.js → index-CKGJp3Cm.js} +1 -1
  172. package/dist/client/assets/{index-DEiSJbvu.js → index-CeqI4FFw.js} +1 -1
  173. package/dist/client/assets/{index-C4t0UTU-.js → index-Cj9-XXKl.js} +1 -1
  174. package/dist/client/assets/{index-ZR5f82z2.js → index-Cu8tnfM_.js} +1 -1
  175. package/dist/client/assets/{index-Dcd4NqFB.js → index-D4OWRMsG.js} +1 -1
  176. package/dist/client/assets/{index-Br6xDNvu.js → index-D8SP73Xw.js} +1 -1
  177. package/dist/client/assets/{index-CoNMlH37.js → index-DEJXVqcY.js} +1 -1
  178. package/dist/client/assets/{index-CoKNU2F9.js → index-DEMZynQt.js} +1 -1
  179. package/dist/client/assets/index-DGzMwE1Z.js +1 -0
  180. package/dist/client/assets/{index-1QfQImuJ.js → index-DIJdZqg2.js} +3 -3
  181. package/dist/client/assets/{index-YSHcMqHa.js → index-DIRqrOEK.js} +1 -1
  182. package/dist/client/assets/{index-CeDn1Ak1.js → index-DNbdGvs9.js} +1 -1
  183. package/dist/client/assets/{index-7XeZCCDI.js → index-DOBjxRe9.js} +1 -1
  184. package/dist/client/assets/{index-BJEt9R_G.js → index-DcBlHsnC.js} +1 -1
  185. package/dist/client/assets/index-DdsaTuqO.js +1 -0
  186. package/dist/client/assets/index-Dt4H9Tms.js +17 -0
  187. package/dist/client/assets/{index-DYEmUa5t.js → index-HXC63Ry8.js} +1 -1
  188. package/dist/client/assets/index-MHIn2TC9.js +1063 -0
  189. package/dist/client/assets/{index-tgbcsB6H.js → index-OjJ_8uMM.js} +1 -1
  190. package/dist/client/assets/index-P4Wos1Gi.css +1 -0
  191. package/dist/client/assets/{index-QSXJR98z.js → index-U5jTIqzv.js} +1 -1
  192. package/dist/client/assets/{index-CXBYgGja.js → index-ZzPr9GUI.js} +1 -1
  193. package/dist/client/assets/index-d9cqTUAj.js +1 -0
  194. package/dist/client/assets/{index-LwL5BpE4.js → index-fcfCRITA.js} +1 -1
  195. package/dist/client/assets/{index-SOKlO1zZ.js → index-onQlu3UR.js} +1 -1
  196. package/dist/client/assets/{index.esm-CAeUe7uQ.js → index.esm-DSKTDEoH.js} +1 -1
  197. package/dist/client/assets/{infoDiagram-MVDRKAX5-DweUdYSy.js → infoDiagram-MVDRKAX5-B8dulOBe.js} +1 -1
  198. package/dist/client/assets/{inline-code-SYHTKcle.js → inline-code-B3qpjdZ2.js} +1 -1
  199. package/dist/client/assets/{ishikawaDiagram-HPEHV2GE-DKNQIv7P.js → ishikawaDiagram-HPEHV2GE-Cy8aIg0O.js} +1 -1
  200. package/dist/client/assets/{journeyDiagram-BOSHW7O7-DPD7F4VO.js → journeyDiagram-BOSHW7O7-BZAlejG3.js} +1 -1
  201. package/dist/client/assets/{kanban-definition-FNSA4HC5-B_uPSwxC.js → kanban-definition-FNSA4HC5-BxS1edpe.js} +1 -1
  202. package/dist/client/assets/{layers-F4mvrI2l.js → layers-ByCM7XO5.js} +1 -1
  203. package/dist/client/assets/{lightbulb-a6nNsrzy.js → lightbulb-KjW8YTXH.js} +1 -1
  204. package/dist/client/assets/{link-2-yI2Tlm7Q.js → link-2-CtFfuMO5.js} +1 -1
  205. package/dist/client/assets/{list-runtime-types-CsGil5te.js → list-runtime-types-DrzHejZo.js} +1 -1
  206. package/dist/client/assets/{markdown-content-Cjhsscbn.js → markdown-content-DgiSdNwz.js} +1 -1
  207. package/dist/client/assets/mention-pill-CHPHlu-U.js +1 -0
  208. package/dist/client/assets/{mermaid.core-9PwG-9fN.js → mermaid.core-ovqlC4PC.js} +4 -4
  209. package/dist/client/assets/{message-square-off-aV4NMCjd.js → message-square-off-CEOyy4Pq.js} +1 -1
  210. package/dist/client/assets/{mindmap-definition-6OY57UG3-BRbWmQkj.js → mindmap-definition-6OY57UG3-CsngqLzI.js} +1 -1
  211. package/dist/client/assets/{more-details-CRLU2HN4.js → more-details-BW9mauVT.js} +1 -1
  212. package/dist/client/assets/{owner-notice-CTJbhUak.js → owner-notice-BRUVafHC.js} +1 -1
  213. package/dist/client/assets/{package-sPggO7Dr.js → package-Bbs99yqi.js} +1 -1
  214. package/dist/client/assets/{page-container-CnfDuiDC.js → page-container-BVfGgaaJ.js} +1 -1
  215. package/dist/client/assets/{pane-resize-handle-63OC5vfI.js → pane-resize-handle-BL7Meu5R.js} +1 -1
  216. package/dist/client/assets/{paperclip-WhPo3_WD.js → paperclip-QOWXs8-5.js} +1 -1
  217. package/dist/client/assets/path-input-BDRHmgzW.js +1 -0
  218. package/dist/client/assets/{pegDiagram-ECIUJNBX-Ct9Li_PA.js → pegDiagram-ECIUJNBX-DPsWmWqw.js} +1 -1
  219. package/dist/client/assets/{pieDiagram-GNMPY74T-BAB5RA5v.js → pieDiagram-GNMPY74T-BdOIDv4F.js} +1 -1
  220. package/dist/client/assets/{plug-_q5iqunq.js → plug-BrsPyUhu.js} +1 -1
  221. package/dist/client/assets/primer-trigger-C97fRm1v.js +3 -0
  222. package/dist/client/assets/{profile-errors-COcBx7w5.js → profile-errors-nPLX60ha.js} +1 -1
  223. package/dist/client/assets/{progress-77FCPL2y.js → progress-C9TALtIa.js} +1 -1
  224. package/dist/client/assets/{quadrantDiagram-D57K4MC3-BqPJVmMS.js → quadrantDiagram-D57K4MC3-MzMEunU7.js} +1 -1
  225. package/dist/client/assets/{query-error-state-5236P3z0.js → query-error-state-BJjgx-WC.js} +1 -1
  226. package/dist/client/assets/{radio-C8xmfoqO.js → radio-Biql29-B.js} +1 -1
  227. package/dist/client/assets/{railroadDiagram-Y72NRBL7-B8U11nT6.js → railroadDiagram-Y72NRBL7-Dzx_PYVW.js} +1 -1
  228. package/dist/client/assets/registry-B0HgbN69.js +1 -0
  229. package/dist/client/assets/registry-fiUD5cv6.js +39 -0
  230. package/dist/client/assets/{relay-trace-schemas-B80E4EUn.js → relay-trace-schemas-BJ4MfChd.js} +2 -2
  231. package/dist/client/assets/{repeat-CHmB_vD7.js → repeat-CKufDGoQ.js} +1 -1
  232. package/dist/client/assets/{requirementDiagram-EQYSW5RA-CzJ1gzTh.js → requirementDiagram-EQYSW5RA-J0pg6FEt.js} +1 -1
  233. package/dist/client/assets/{room-files-source-B0gc97Ri.js → room-files-source-iaYdshKo.js} +2 -2
  234. package/dist/client/assets/{rotate-ccw-clock-CCU6SVnv.js → rotate-ccw-clock-CnARSw5V.js} +1 -1
  235. package/dist/client/assets/{rotate-cw-B8WQa8O-.js → rotate-cw-BAn_5-Gq.js} +1 -1
  236. package/dist/client/assets/{sankeyDiagram-SY24JHO5-D4vQwyve.js → sankeyDiagram-SY24JHO5-6V_uy-zQ.js} +1 -1
  237. package/dist/client/assets/scroll-area-XDq7yL_d.js +1 -0
  238. package/dist/client/assets/{sequenceDiagram-BLEHNHQU-BVnIsPQe.js → sequenceDiagram-BLEHNHQU-C4jZi3N4.js} +1 -1
  239. package/dist/client/assets/{shield-x-ijIbRppV.js → shield-x-CpiXuMbN.js} +1 -1
  240. package/dist/client/assets/signed-in-Rv3Sjk8n.js +1 -0
  241. package/dist/client/assets/{sizeCapture-INFHLROL-DGb1rAJL.js → sizeCapture-INFHLROL-B7nxFreb.js} +1 -1
  242. package/dist/client/assets/{soul-file-CXgYs25S.js → soul-file-BQz4TtHo.js} +1 -1
  243. package/dist/client/assets/{stateDiagram-v2-A6IESKWZ-DeX3IKTm.js → stateDiagram-v2-A6IESKWZ-B5rvc4n2.js} +1 -1
  244. package/dist/client/assets/{swimlanes-B3ENRKFQ-DN5ljYhG.js → swimlanes-B3ENRKFQ-DnElusDo.js} +1 -1
  245. package/dist/client/assets/swimlanesDiagram-AYQRV4AK-DLpKz5fF.js +8 -0
  246. package/dist/client/assets/{table-D9ww_3Ij.js → table-NGiWzPO4.js} +1 -1
  247. package/dist/client/assets/{timeline-definition-JXYKGLGB-DpRthC3r.js → timeline-definition-JXYKGLGB-DMgyn3XX.js} +1 -1
  248. package/dist/client/assets/{trust-posture-Dn2ciEE0.js → trust-posture-BArJ9H4j.js} +1 -1
  249. package/dist/client/assets/{unplug-BZ8zSvfB.js → unplug-MSjeZ0tJ.js} +1 -1
  250. package/dist/client/assets/{unverified-catalog-notice-CGy05tAO.js → unverified-catalog-notice-DA96H8Df.js} +1 -1
  251. package/dist/client/assets/{use-bindings-BLAWQRpe.js → use-bindings-BojBqRJS.js} +1 -1
  252. package/dist/client/assets/{use-composer-prefs-ICOpilWK.js → use-composer-prefs-BDl8aMme.js} +1 -1
  253. package/dist/client/assets/{use-connector-management-DEMGZy9N.js → use-connector-management-FONU6FK8.js} +1 -1
  254. package/dist/client/assets/{use-deep-link-scroll-DxGYrks3.js → use-deep-link-scroll-CtbBPBgi.js} +1 -1
  255. package/dist/client/assets/{use-delete-binding-Bnv3J5Fu.js → use-delete-binding-COhBv6X3.js} +1 -1
  256. package/dist/client/assets/{use-dev-links-BOcktLiE.js → use-dev-links-Dh0MCiGY.js} +1 -1
  257. package/dist/client/assets/{use-direct-message-panel-D38tSozW.js → use-direct-message-panel-CYnWunqk.js} +1 -1
  258. package/dist/client/assets/{use-external-adapter-catalog-9qiNBqpc.js → use-external-adapter-catalog-RTDOW8Yi.js} +1 -1
  259. package/dist/client/assets/use-filter-state-CSFTDx7z.js +6 -0
  260. package/dist/client/assets/use-full-activity-feed-DlY_ZbRZ.js +1 -0
  261. package/dist/client/assets/use-is-below-desktop-ClzGXlRb.js +1 -0
  262. package/dist/client/assets/{use-local-browser-B1huJhdg.js → use-local-browser-WwZd-FOP.js} +1 -1
  263. package/dist/client/assets/{use-mesh-topology-BTYAy6zc.js → use-mesh-topology-WnFkjq41.js} +1 -1
  264. package/dist/client/assets/{use-mounted-ref-CaPc6Prv.js → use-mounted-ref-Dz1h70pz.js} +1 -1
  265. package/dist/client/assets/{use-notification-prefs-u76DPoP0.js → use-notification-prefs-IrF5_cko.js} +1 -1
  266. package/dist/client/assets/use-pending-read-CnAnzOt_.js +1 -0
  267. package/dist/client/assets/use-personality-commit-C4hYkSPy.js +1 -0
  268. package/dist/client/assets/use-promo-activation-CPVANFBh.js +6 -0
  269. package/dist/client/assets/{use-promo-dismissals-CO7-qhEl.js → use-promo-dismissals-B9m0HT6L.js} +1 -1
  270. package/dist/client/assets/{use-pulse-freshness-D07Mv-Sa.js → use-pulse-freshness-DMySxN8D.js} +1 -1
  271. package/dist/client/assets/{use-room-follow-claim-DRQBuAIe.js → use-room-follow-claim-ByaYVY0o.js} +1 -1
  272. package/dist/client/assets/{use-room-sessions-Bzk7rM40.js → use-room-sessions-DPB29acU.js} +1 -1
  273. package/dist/client/assets/{use-roving-tab-list-CcznVldj.js → use-roving-tab-list-BO8kbs-w.js} +1 -1
  274. package/dist/client/assets/{use-session-canvas-CpgE7tFb.js → use-session-canvas-Cunag2K7.js} +9 -9
  275. package/dist/client/assets/use-status-budget-jt-9aQR0.js +21 -0
  276. package/dist/client/assets/{use-transform-ByJGn3hq.js → use-transform-ydtuYUNp.js} +1 -1
  277. package/dist/client/assets/{use-unclaimed-chats-C-z5fstJ.js → use-unclaimed-chats-ClBWJgNm.js} +1 -1
  278. package/dist/client/assets/use-update-config-ZHtOtve0.js +1 -0
  279. package/dist/client/assets/{useMutationState-BF1EFtIZ.js → useMutationState-B8ArIqeH.js} +1 -1
  280. package/dist/client/assets/{usecaseDiagram-WPOLBNNX-efVKbRIX.js → usecaseDiagram-WPOLBNNX-C5JdAkG9.js} +1 -1
  281. package/dist/client/assets/{vennDiagram-Q3Y3IDCW-Bravmwce.js → vennDiagram-Q3Y3IDCW-CqLCy7LU.js} +1 -1
  282. package/dist/client/assets/{wardleyDiagram-IVAIDKWA-fR77zByv.js → wardleyDiagram-IVAIDKWA-C9FlHLTd.js} +1 -1
  283. package/dist/client/assets/{xychartDiagram-4URNHDU4-BphORSLh.js → xychartDiagram-4URNHDU4-BIm-RUWd.js} +1 -1
  284. package/dist/client/index.html +2 -2
  285. package/dist/drizzle/20261031012841_dor3309_file_turn_on_offer.sql +2 -0
  286. package/dist/drizzle/20261101122330_schedule_declined_content_key.sql +1 -0
  287. package/dist/drizzle/20261101195529_work_queue.sql +38 -0
  288. package/dist/drizzle/20261101233656_dor3644_session_launched_by.sql +1 -0
  289. package/dist/drizzle/20261102041558_dor3070_marketplace_summary.sql +2 -0
  290. package/dist/drizzle/20261102051715_dor3440_clear_origin_holds.sql +10 -0
  291. package/dist/drizzle/20261102135442_agent_browser_profiles.sql +15 -0
  292. package/dist/drizzle/meta/20261031012841_snapshot.json +14116 -0
  293. package/dist/drizzle/meta/20261101122330_snapshot.json +14123 -0
  294. package/dist/drizzle/meta/20261101195529_snapshot.json +14363 -0
  295. package/dist/drizzle/meta/20261101233656_snapshot.json +14370 -0
  296. package/dist/drizzle/meta/20261102041558_snapshot.json +14384 -0
  297. package/dist/drizzle/meta/20261102051715_snapshot.json +14384 -0
  298. package/dist/drizzle/meta/20261102135442_snapshot.json +14483 -0
  299. package/dist/drizzle/meta/_journal.json +49 -0
  300. package/dist/server/extension-child.cjs +1147 -572
  301. package/dist/server/index.js +45678 -38894
  302. package/dist/server/index.js.map +2 -2
  303. package/package.json +5 -5
  304. package/dist/client/assets/ActivityRow-DIBH4v9c.js +0 -1
  305. package/dist/client/assets/AdapterSetupWizard-Dle_b9qc.js +0 -2
  306. package/dist/client/assets/AppearancePage-DXbhUt2e.js +0 -1
  307. package/dist/client/assets/AttentionSignalRow-5E7TkG98.js +0 -1
  308. package/dist/client/assets/BindingDialog-q--8SDJF.js +0 -1
  309. package/dist/client/assets/BlintzCanvas-DruVZcDU.js +0 -1231
  310. package/dist/client/assets/CanvasFileContent-BThy5fjD.js +0 -2
  311. package/dist/client/assets/CanvasModel3dContent-BbgR73jh.js +0 -2
  312. package/dist/client/assets/ChannelComposer-qhk0KtW7.js +0 -44
  313. package/dist/client/assets/ConnectionAccessLists-DRwO1v0V.js +0 -1
  314. package/dist/client/assets/HandlePage-B4qbFi40.js +0 -1
  315. package/dist/client/assets/HeartbeatPage-BnNbQLCW.js +0 -1
  316. package/dist/client/assets/Marketplace-DbdLWz0-.js +0 -36
  317. package/dist/client/assets/NamePage-fhxyWDDY.js +0 -1
  318. package/dist/client/assets/NewDirectMessageMenu-DBAdvv5p.js +0 -1
  319. package/dist/client/assets/OperatorIdentityForm-Bls5Vo_u.js +0 -1
  320. package/dist/client/assets/PhotoPage-CNHcXbz4.js +0 -1
  321. package/dist/client/assets/PreviewRefusedNotice-Ds4IO32o.js +0 -1
  322. package/dist/client/assets/PromptSuggestionChips-BXxC799Q.js +0 -1
  323. package/dist/client/assets/RoomSurface-DgH3a_Fv.js +0 -1
  324. package/dist/client/assets/RunsOnPopover-CEkkjrGg.js +0 -1
  325. package/dist/client/assets/RuntimeConnectFlow-DXWGgvCW.js +0 -1
  326. package/dist/client/assets/RuntimeSetupDialog-D6L1QhMF.js +0 -1
  327. package/dist/client/assets/SettingsDialog-BOOqWKcj.js +0 -12
  328. package/dist/client/assets/SkillsPage-ntCEhUIM.js +0 -1
  329. package/dist/client/assets/TaskDialogWrapper-vBWAWwTY.js +0 -1
  330. package/dist/client/assets/TasksEmptyState-C_3UkAbA.js +0 -3
  331. package/dist/client/assets/TourHost-B69XAKpE.js +0 -1
  332. package/dist/client/assets/WidgetErrorCard-BlqaIsPK.js +0 -108
  333. package/dist/client/assets/WorkView-BekLkR4O.js +0 -51
  334. package/dist/client/assets/_shell-Du0F-5fK.js +0 -80
  335. package/dist/client/assets/_shell._home.activity-5rihXoYF.js +0 -1
  336. package/dist/client/assets/_shell._home.index-BsLNqt4f.js +0 -3
  337. package/dist/client/assets/_shell._home.tasks-Cxs5tLWA.js +0 -1
  338. package/dist/client/assets/_shell._home.workspaces-CEHDdfbP.js +0 -1
  339. package/dist/client/assets/_shell.connections-Bm0WmgXH.js +0 -1
  340. package/dist/client/assets/_shell.marketplace-CsQ60Mlc.js +0 -1
  341. package/dist/client/assets/_shell.marketplace_.sources-DNyShS1x.js +0 -1
  342. package/dist/client/assets/_shell.session-BN42bV3w.js +0 -1
  343. package/dist/client/assets/_shell.threads-HH4EvufJ.js +0 -1
  344. package/dist/client/assets/_shell.x._extensionId-3ZlJV1iu.js +0 -1
  345. package/dist/client/assets/_shell.x._extensionId_._-3ZlJV1iu.js +0 -1
  346. package/dist/client/assets/card-DUmTNXJJ.js +0 -1
  347. package/dist/client/assets/channel-B7zgJbnU.js +0 -1
  348. package/dist/client/assets/form-D93N5lrK.js +0 -1
  349. package/dist/client/assets/image-lightbox-vgPEvSCc.js +0 -1
  350. package/dist/client/assets/index-B36osK_S.js +0 -17
  351. package/dist/client/assets/index-B446r3dL.js +0 -1
  352. package/dist/client/assets/index-BGo1YiUE.js +0 -1
  353. package/dist/client/assets/index-BO3yPJt-.js +0 -1
  354. package/dist/client/assets/index-DE6uOpn4.js +0 -1
  355. package/dist/client/assets/index-Dag1qeZI.js +0 -1
  356. package/dist/client/assets/index-Dm0Tav7v.js +0 -1
  357. package/dist/client/assets/index-Dry_agqN.css +0 -1
  358. package/dist/client/assets/index-OQuvRZTD.js +0 -1058
  359. package/dist/client/assets/index-eVrGefuq.js +0 -1
  360. package/dist/client/assets/mention-pill-BsOeTJ2f.js +0 -1
  361. package/dist/client/assets/path-input-C2KIXdON.js +0 -1
  362. package/dist/client/assets/primer-trigger-B2tjuHBx.js +0 -3
  363. package/dist/client/assets/registry-BzXBOE9h.js +0 -34
  364. package/dist/client/assets/registry-sfhDu9q2.js +0 -1
  365. package/dist/client/assets/scroll-area-FwZwM74Q.js +0 -1
  366. package/dist/client/assets/search-x-Q18Wm-C5.js +0 -6
  367. package/dist/client/assets/signed-in-DEOMBWVX.js +0 -1
  368. package/dist/client/assets/swimlanesDiagram-AYQRV4AK-D8kHFWtL.js +0 -8
  369. package/dist/client/assets/use-full-activity-feed-CtQquOBW.js +0 -1
  370. package/dist/client/assets/use-is-below-desktop-CAGEAsCC.js +0 -1
  371. package/dist/client/assets/use-pending-read-D0y6i7G9.js +0 -1
  372. package/dist/client/assets/use-personality-commit-C3h8upDo.js +0 -1
  373. package/dist/client/assets/use-promo-activation-5HG08FlB.js +0 -11
  374. package/dist/client/assets/use-status-budget-Xn2sIeM1.js +0 -16
  375. package/dist/client/assets/use-update-config-L5NCTj3t.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. */
@@ -27128,6 +27136,11 @@ var init_env = __esm({
27128
27136
  // `apps/e2e/playwright.config.ts` sets this on both Express legs; nothing
27129
27137
  // else in the repo does. See services/search/registry.ts `selectSearchSources`.
27130
27138
  DORKOS_SEARCH_NO_EXTERNAL_HISTORY: boolFlag,
27139
+ // Turn off agent introductions in rooms (DOR-2106). An introduction starts a
27140
+ // real agent turn, so a harness that must start none sets this:
27141
+ // `apps/e2e/playwright.config.ts` does on its real-runtime Express legs, whose
27142
+ // fixtures guarantee that no spec reaches a real runtime. Off by default.
27143
+ DORKOS_NO_ROOM_INTRODUCTIONS: boolFlag,
27131
27144
  // Activity feed retention in days. Overrides `activity.retentionDays` (default 365) when set.
27132
27145
  DORKOS_ACTIVITY_RETENTION_DAYS: external_exports.coerce.number().int().min(1).optional(),
27133
27146
  // Test mode — TestModeRuntime is registered instead of ClaudeCodeRuntime
@@ -27289,7 +27302,7 @@ import path3 from "path";
27289
27302
  import { fileURLToPath } from "url";
27290
27303
  function resolveVersion() {
27291
27304
  if (env2.DORKOS_VERSION_OVERRIDE) return env2.DORKOS_VERSION_OVERRIDE;
27292
- if (true) return "0.128.0";
27305
+ if (true) return "0.130.0";
27293
27306
  const pkgPath = path3.join(path3.dirname(fileURLToPath(import.meta.url)), "../../package.json");
27294
27307
  return JSON.parse(readFileSync(pkgPath, "utf-8")).version;
27295
27308
  }
@@ -42991,8 +43004,13 @@ function overrideNames(input4) {
42991
43004
  names.add("OPENCODE_SERVER_PASSWORD");
42992
43005
  names.add("OPENCODE_CONFIG_CONTENT");
42993
43006
  }
43007
+ for (const name2 of Object.keys(flowIdentityEnv(input4.runtime, input4.purpose))) names.add(name2);
42994
43008
  return names;
42995
43009
  }
43010
+ function flowIdentityEnv(runtime, purpose) {
43011
+ if (purpose !== "turn" || runtime === "doe") return {};
43012
+ return { FLOW_RUNTIME: runtime, FLOW_HARNESS: "dorkos" };
43013
+ }
42996
43014
  function projectRuntimeEnvironment(input4) {
42997
43015
  const inherit = RuntimeInheritedEnvNamesSchema.parse(input4.inherit ?? []);
42998
43016
  const allowed = /* @__PURE__ */ new Set([...BASELINE_ENV_NAMES, ...profileNames(input4), ...inherit]);
@@ -43035,7 +43053,14 @@ var init_runtime_environment = __esm({
43035
43053
  function runtimeEnvironment(runtime, purpose, overrides) {
43036
43054
  const inherit = runtimeInheritedNames(runtime);
43037
43055
  return withGitConfigEnv(
43038
- 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
+ }),
43039
43064
  SESSION_GIT_CONFIG
43040
43065
  );
43041
43066
  }
@@ -50154,11 +50179,11 @@ function containerEntries(value) {
50154
50179
  }
50155
50180
  function inspectBoundedJson(value, bounds) {
50156
50181
  const { maxBytes, maxDepth } = bounds;
50157
- const pending2 = [{ value, depth: 0 }];
50182
+ const pending = [{ value, depth: 0 }];
50158
50183
  const ancestors = /* @__PURE__ */ new Set();
50159
50184
  let bytes = 0;
50160
- while (pending2.length) {
50161
- const item = pending2.pop();
50185
+ while (pending.length) {
50186
+ const item = pending.pop();
50162
50187
  const current3 = item.value;
50163
50188
  if (item.exit) {
50164
50189
  ancestors.delete(current3);
@@ -50172,10 +50197,10 @@ function inspectBoundedJson(value, bounds) {
50172
50197
  if (!entries) return "Expected plain JSON without unsafe keys or accessors";
50173
50198
  bytes += 2 + Math.max(0, entries.length - 1);
50174
50199
  ancestors.add(current3);
50175
- pending2.push({ value: current3, depth: item.depth, exit: true });
50200
+ pending.push({ value: current3, depth: item.depth, exit: true });
50176
50201
  for (const [key, child] of entries) {
50177
50202
  if (!Array.isArray(current3)) bytes += encoder.encode(JSON.stringify(key)).length + 1;
50178
- pending2.push({ value: child, depth: item.depth + 1 });
50203
+ pending.push({ value: child, depth: item.depth + 1 });
50179
50204
  }
50180
50205
  } else {
50181
50206
  if (typeof current3 === "number" && !Number.isFinite(current3))
@@ -52304,6 +52329,39 @@ var init_canvas_channel_schemas = __esm({
52304
52329
  }
52305
52330
  });
52306
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
+
52307
52365
  // ../shared/src/validation.ts
52308
52366
  var AGENT_NAME_REGEX;
52309
52367
  var init_validation = __esm({
@@ -52715,6 +52773,12 @@ function mergeTeammateOrigins(a2, b2) {
52715
52773
  const added = b2.filter((origin) => !seen.has(key(origin)));
52716
52774
  return added.length === 0 ? a2 : [...a2, ...added];
52717
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
+ }
52718
52782
  function ceilingHoldsForOutsider(ceiling) {
52719
52783
  if (!Array.isArray(ceiling)) return ceiling === "runtime-default";
52720
52784
  const bounds = ceiling;
@@ -52729,6 +52793,7 @@ function stricterPower(a2, b2) {
52729
52793
  return a2.auto && b2.auto ? { asks, reach, auto: true } : { asks, reach };
52730
52794
  }
52731
52795
  function clampModeToCeiling(declared, modeId, ceiling) {
52796
+ if (ceilingOnlyRecords(ceiling)) return modeId;
52732
52797
  const level = resolveCeilingLevel(declared, ceiling);
52733
52798
  const own2 = declared.values.find((m2) => m2.id === modeId);
52734
52799
  if (own2 && admits(level, own2)) return modeId;
@@ -54116,7 +54181,6 @@ var init_capabilities = __esm({
54116
54181
  var PROJECT_NAME_PATTERN, ProjectRefSchema, ProjectInfoSchema, ProjectListResponseSchema, ProjectResolveQuerySchema, ProjectResolveResponseSchema, AccountEligibilityRowSchema, AccountEligibilityQuerySchema, AccountEligibilityResponseSchema, ProjectAccountsRequestSchema, ProjectWithoutCreditsRequestSchema, OnlyProjectsRequestSchema, OnlyProjectsResponseSchema, NoAutoMoveSchema;
54117
54182
  var init_project_schemas = __esm({
54118
54183
  "../shared/src/project-schemas.ts"() {
54119
- "use strict";
54120
54184
  init_zod();
54121
54185
  init_zod_openapi();
54122
54186
  extendZodWithOpenApiOnce();
@@ -54228,7 +54292,7 @@ var init_project_schemas = __esm({
54228
54292
  });
54229
54293
 
54230
54294
  // ../shared/src/approval-schemas.ts
54231
- var APPROVAL_SUMMARY_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;
54232
54296
  var init_approval_schemas = __esm({
54233
54297
  "../shared/src/approval-schemas.ts"() {
54234
54298
  "use strict";
@@ -54239,6 +54303,7 @@ var init_approval_schemas = __esm({
54239
54303
  init_project_schemas();
54240
54304
  extendZodWithOpenApiOnce();
54241
54305
  APPROVAL_SUMMARY_MAX_LENGTH = 500;
54306
+ APPROVAL_CONSEQUENCE_MAX_LENGTH = 40;
54242
54307
  APPROVAL_DETAIL_MAX_LENGTH = 4e3;
54243
54308
  APPROVAL_SUBJECT_LABEL_MAX_LENGTH = 60;
54244
54309
  APPROVAL_SUBJECT_KINDS = ["agent", "task", "room"];
@@ -54306,6 +54371,59 @@ var init_approval_schemas = __esm({
54306
54371
  }).strict().openapi("ApprovalServiceAction");
54307
54372
  APPROVAL_ORIGINS = ["session", "external-mcp"];
54308
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");
54309
54427
  PendingApprovalSchema = external_exports.object({
54310
54428
  /** ULID identifying the approval. Carries no secret. */
54311
54429
  approvalId: external_exports.string(),
@@ -54315,6 +54433,12 @@ var init_approval_schemas = __esm({
54315
54433
  capabilityTitle: external_exports.string(),
54316
54434
  /** Permission tier of the capability being requested. */
54317
54435
  tier: external_exports.enum(CAPABILITY_TIERS),
54436
+ /**
54437
+ * What a yes does, in a few words ("Runs code on this Mac"), for the badge
54438
+ * in place of the tier's own label. Set by the capability, for cards whose
54439
+ * tier label would mislead (repo pins, DOR-3359); absent everywhere else.
54440
+ */
54441
+ consequence: external_exports.string().max(APPROVAL_CONSEQUENCE_MAX_LENGTH).optional(),
54318
54442
  /** One plain sentence describing what would happen. */
54319
54443
  summary: external_exports.string().max(APPROVAL_SUMMARY_MAX_LENGTH),
54320
54444
  /** Opaque label for who asked, when the request carried one. */
@@ -54404,6 +54528,12 @@ var init_approval_schemas = __esm({
54404
54528
  * at render time.
54405
54529
  */
54406
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(),
54407
54537
  /**
54408
54538
  * The thing this would act on, named — when the server could name it.
54409
54539
  *
@@ -54511,7 +54641,6 @@ var init_account_usage_codex = __esm({
54511
54641
  var LEDGER_RUNTIMES, LEDGER_SOURCES, RateLimitStatusSchema, ISO_TIME_PATTERN, IsoTimeSchema, LedgerSourceSchema, LedgerEntrySchema, WINDOW_KEY_PATTERN, LedgerPlanSchema, LedgerCreditsSchema, LedgerSpendSchema, UsageLedgerSchema, MINUTE_MS, HOUR_MS, FIVE_HOUR_MS, SEVEN_DAY_MS, MAX_FUTURE_SKEW_MS, AccountUsageSchema, LimitResolutionSchema, LimitHistoryEntrySchema, LimitHistoryResponseSchema, FoundClaudeFolderSchema, DismissFoundFolderRequestSchema;
54512
54642
  var init_account_usage = __esm({
54513
54643
  "../shared/src/account-usage.ts"() {
54514
- "use strict";
54515
54644
  init_zod();
54516
54645
  init_zod_openapi();
54517
54646
  init_ledger_slug();
@@ -54968,10 +55097,12 @@ function isSafeSigninUrl(value) {
54968
55097
  if (url2.protocol !== "http:") return false;
54969
55098
  return url2.hostname === "localhost" || url2.hostname === "127.0.0.1" || url2.hostname === "[::1]";
54970
55099
  }
54971
- 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;
54972
55101
  var init_schemas4 = __esm({
54973
55102
  "../shared/src/schemas.ts"() {
54974
55103
  "use strict";
55104
+ init_task_approval_schemas();
55105
+ init_task_approval_schemas();
54975
55106
  init_canvas_channel_schemas();
54976
55107
  init_zod();
54977
55108
  init_zod_openapi();
@@ -57372,6 +57503,13 @@ var init_schemas4 = __esm({
57372
57503
  callerRoute: external_exports.enum(["local", "wifi", "tunnel", "managed", "network", "hub"]).nullable().optional().openapi({
57373
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"
57374
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
+ }),
57375
57513
  dismissedUpgradeVersions: external_exports.array(external_exports.string()).openapi({ description: "Versions the user has dismissed upgrade notifications for" }),
57376
57514
  dismissedPromoIds: external_exports.array(external_exports.string()).openapi({
57377
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"
@@ -57865,21 +58003,6 @@ var init_schemas4 = __esm({
57865
58003
  lastRunId: external_exports.string().nullable()
57866
58004
  }).openapi("TaskHealth");
57867
58005
  TaskRunTriggerSchema = external_exports.enum(["scheduled", "manual", "agent"]).openapi("TaskRunTrigger");
57868
- ScheduleOriginMarksSchema = external_exports.object({
57869
- /** The turn read words DorkOS can't vouch for: a stranger's message, or another agent's that carried one. */
57870
- outsider: external_exports.literal(true).optional(),
57871
- /** Each teammate whose message started the chain, and the space room they wrote in. */
57872
- teammate: external_exports.array(
57873
- external_exports.object({
57874
- roomId: external_exports.string(),
57875
- authorId: external_exports.string(),
57876
- /** The teammate's name when the mark was written, or null when it was unknown. */
57877
- name: external_exports.string().nullable().default(null),
57878
- /** The room's title when the mark was written, or null when it was unknown. */
57879
- room: external_exports.string().nullable().default(null)
57880
- })
57881
- ).optional()
57882
- }).openapi("ScheduleOriginMarks");
57883
58006
  TaskSchema = external_exports.object({
57884
58007
  id: external_exports.string(),
57885
58008
  name: external_exports.string(),
@@ -57929,6 +58052,17 @@ var init_schemas4 = __esm({
57929
58052
  packageOwned: external_exports.enum(["record", "legacy"]).nullable().default(null).openapi({
57930
58053
  description: "Whether an installed package owns this schedule's file: 'record' (the package lists it), 'legacy' (installed before DorkOS kept file lists), or null (the person's own)."
57931
58054
  }),
58055
+ /**
58056
+ * Whether a person declined this schedule as it reads now (DOR-2097).
58057
+ *
58058
+ * Only a schedule an installed package owns can be declined rather than
58059
+ * deleted: removing its file would break the package. A declined schedule
58060
+ * never runs and asks nobody. When the package changes the schedule, it asks
58061
+ * again and this reads false.
58062
+ */
58063
+ declined: external_exports.boolean().optional().openapi({
58064
+ description: "Whether a person declined this schedule as it reads now. A declined schedule never runs and asks again only when its file changes."
58065
+ }),
57932
58066
  /**
57933
58067
  * Whether this is one project's copy of a global schedule marked
57934
58068
  * `scope: project` (DOR-3376). Its switch and timing belong to this project
@@ -57938,6 +58072,14 @@ var init_schemas4 = __esm({
57938
58072
  projectOnly: external_exports.boolean().optional().openapi({
57939
58073
  description: "True when this is one project's copy of a global schedule that only runs inside a project. Its switch and timing are this project's; its file is shared. Absent means false."
57940
58074
  }),
58075
+ /**
58076
+ * Whether a person is offered "Turn on" (DOR-3309): the schedule's file now
58077
+ * says on, and a file may switch a schedule off but never on, so it stayed
58078
+ * off. Absent reads as false.
58079
+ */
58080
+ offersTurnOn: external_exports.boolean().optional().openapi({
58081
+ description: "True when the schedule stayed off although its file now says on. A file can switch a schedule off but never on, so a person is offered Turn on. Absent means false."
58082
+ }),
57941
58083
  /**
57942
58084
  * What changed since this schedule was last approved, for a schedule
57943
58085
  * waiting again (DOR-2323): each part of the approved work that differs,
@@ -57987,6 +58129,8 @@ var init_schemas4 = __esm({
57987
58129
  sticky: external_exports.boolean().default(false),
57988
58130
  maxRuntime: external_exports.number().int().nullable(),
57989
58131
  permissionMode: PermissionModeSchema,
58132
+ /** Read-time, person-only preview; absent for older servers and agent callers. */
58133
+ folderRules: TaskFolderRulesSchema.optional(),
57990
58134
  /**
57991
58135
  * Which agent runtime this task's runs execute on, or `null` to follow the
57992
58136
  * task's agent (DOR-1615).
@@ -58045,6 +58189,13 @@ var init_schemas4 = __esm({
58045
58189
  * nothing resolves, which is what the "An agent" fallback is for.
58046
58190
  */
58047
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(),
58048
58199
  /**
58049
58200
  * Where this schedule came from, when that is not a person using DorkOS.
58050
58201
  *
@@ -58072,6 +58223,12 @@ var init_schemas4 = __esm({
58072
58223
  * the trust preset; approving it clears this.
58073
58224
  */
58074
58225
  originMarks: ScheduleOriginMarksSchema.nullable().optional(),
58226
+ /**
58227
+ * Held for a person, but nothing is waiting on them (DOR-3425): the file of a
58228
+ * schedule whose agent is at Full autonomy asks for more than was approved. It
58229
+ * stays a row under Needs you, with no knock and no escalation.
58230
+ */
58231
+ quietHold: external_exports.boolean().optional(),
58075
58232
  nextRun: external_exports.string().nullable().optional(),
58076
58233
  /**
58077
58234
  * When the schedule last started a run (ISO 8601), or null when it never
@@ -61035,11 +61192,11 @@ async function measurePackageTree(root, limits = PACKAGE_SIZE_LIMITS, { countGit
61035
61192
  let entries = 0;
61036
61193
  let bytes = 0;
61037
61194
  let inNodeModules = 0;
61038
- const pending2 = [
61195
+ const pending = [
61039
61196
  { rel: "", underNodeModules: false }
61040
61197
  ];
61041
- while (pending2.length > 0) {
61042
- const { rel, underNodeModules } = pending2.pop();
61198
+ while (pending.length > 0) {
61199
+ const { rel, underNodeModules } = pending.pop();
61043
61200
  let listed2;
61044
61201
  try {
61045
61202
  listed2 = await readdir2(path23.join(root, rel), { withFileTypes: true });
@@ -61058,7 +61215,7 @@ async function measurePackageTree(root, limits = PACKAGE_SIZE_LIMITS, { countGit
61058
61215
  throw new PackageTooLargeError("entries", limits, void 0, inNodeModules);
61059
61216
  }
61060
61217
  if (entry.isDirectory()) {
61061
- pending2.push({ rel: childRel, underNodeModules: inside });
61218
+ pending.push({ rel: childRel, underNodeModules: inside });
61062
61219
  continue;
61063
61220
  }
61064
61221
  const { size } = await lstat2(path23.join(root, childRel));
@@ -64006,9 +64163,9 @@ var init_endpoint_context = __esm({
64006
64163
  getOrCreateEndpointContextStorage = async () => {
64007
64164
  const existing = getExistingEndpointContextStorage();
64008
64165
  if (existing) return existing;
64009
- const AsyncLocalStorage8 = await getAsyncLocalStorage();
64166
+ const AsyncLocalStorage7 = await getAsyncLocalStorage();
64010
64167
  const globalContext = __getBetterAuthGlobal().context;
64011
- return globalContext.endpointContextAsyncStorage ??= new AsyncLocalStorage8();
64168
+ return globalContext.endpointContextAsyncStorage ??= new AsyncLocalStorage7();
64012
64169
  };
64013
64170
  }
64014
64171
  });
@@ -64604,8 +64761,8 @@ var init_request_state = __esm({
64604
64761
  const betterAuthGlobal = __getBetterAuthGlobal();
64605
64762
  const existing = betterAuthGlobal.context.requestStateAsyncStorage;
64606
64763
  if (existing) return existing;
64607
- const AsyncLocalStorage8 = await getAsyncLocalStorage();
64608
- betterAuthGlobal.context.requestStateAsyncStorage ??= new AsyncLocalStorage8();
64764
+ const AsyncLocalStorage7 = await getAsyncLocalStorage();
64765
+ betterAuthGlobal.context.requestStateAsyncStorage ??= new AsyncLocalStorage7();
64609
64766
  return betterAuthGlobal.context.requestStateAsyncStorage;
64610
64767
  };
64611
64768
  }
@@ -65276,8 +65433,8 @@ var init_transaction = __esm({
65276
65433
  const betterAuthGlobal = __getBetterAuthGlobal();
65277
65434
  const existing = betterAuthGlobal.context.adapterAsyncStorage;
65278
65435
  if (existing) return existing;
65279
- const AsyncLocalStorage8 = await getAsyncLocalStorage();
65280
- betterAuthGlobal.context.adapterAsyncStorage ??= new AsyncLocalStorage8();
65436
+ const AsyncLocalStorage7 = await getAsyncLocalStorage();
65437
+ betterAuthGlobal.context.adapterAsyncStorage ??= new AsyncLocalStorage7();
65281
65438
  return betterAuthGlobal.context.adapterAsyncStorage;
65282
65439
  };
65283
65440
  getCurrentAdapter = async (fallback) => {
@@ -67818,14 +67975,14 @@ function isUsableJWK(jwk, entry, alg2, kid) {
67818
67975
  async function importWithAlgCache(cache3, jwk, entry) {
67819
67976
  const cached2 = cache3.get(jwk) || cache3.set(jwk, {}).get(jwk), { alg: alg2 } = entry;
67820
67977
  if (cached2[alg2] === void 0) {
67821
- const pending2 = jwkToKey(entry, jwk, true).then((key) => {
67978
+ const pending = jwkToKey(entry, jwk, true).then((key) => {
67822
67979
  if (key.type !== "public")
67823
67980
  throw new JWKSInvalid("JSON Web Key Set members must be public keys");
67824
67981
  return cached2[alg2] = key, key;
67825
67982
  }).catch((error63) => {
67826
- throw cached2[alg2] === pending2 && delete cached2[alg2], error63;
67983
+ throw cached2[alg2] === pending && delete cached2[alg2], error63;
67827
67984
  });
67828
- cached2[alg2] = pending2;
67985
+ cached2[alg2] = pending;
67829
67986
  }
67830
67987
  return cached2[alg2];
67831
67988
  }
@@ -106691,6 +106848,20 @@ var init_approvals = __esm({
106691
106848
  * longer parses renders as a card with the summary instead of failing.
106692
106849
  */
106693
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"),
106694
106865
  /** Opaque label for who asked — an agent path, a display name, or null. */
106695
106866
  requestedBy: text("requested_by"),
106696
106867
  /**
@@ -106964,6 +107135,17 @@ var init_tasks = __esm({
106964
107135
  * what was approved, not an approval.
106965
107136
  */
106966
107137
  previousApprovalKey: text("previous_approval_key"),
107138
+ /**
107139
+ * The schedule content a person declined, as a content key, for a schedule
107140
+ * whose file an installed package owns (DOR-2097).
107141
+ *
107142
+ * That file is the package's, so declining cannot remove it, and the decision
107143
+ * lives here instead. While the content that would run still has this key, the
107144
+ * schedule stays waiting, never runs, and asks nobody. A changed file has a
107145
+ * different key, so it asks again. Cleared by an approval. NULL means nobody
107146
+ * declined it.
107147
+ */
107148
+ declinedContentKey: text("declined_content_key"),
106967
107149
  /**
106968
107150
  * The turn marks of the turn that created or last edited this schedule (DOR-3036,
106969
107151
  * `specs/turn-marks`): JSON `{ outsider?: true, teammate?: [{ roomId, authorId, name?, room? }] }`,
@@ -106983,6 +107165,20 @@ var init_tasks = __esm({
106983
107165
  */
106984
107166
  followedAgentChanges: text("followed_agent_changes"),
106985
107167
  enabled: integer2("enabled", { mode: "boolean" }).notNull().default(true),
107168
+ /**
107169
+ * The SKILL.md's own `enabled`, as the last sync read it (DOR-3309). A file
107170
+ * may switch a task off but never on, so the row and its file can disagree;
107171
+ * this is how a sync tells a file that has just started saying "on" from one
107172
+ * that always did. NULL: the row is older than the column, so nothing is
107173
+ * known yet and nothing is offered.
107174
+ */
107175
+ fileEnabled: integer2("file_enabled", { mode: "boolean" }),
107176
+ /**
107177
+ * Whether a person is being offered "Turn on", because the task's file now
107178
+ * says on while the task stays off (DOR-3309). Cleared when anybody switches
107179
+ * the task either way, or the file says off again.
107180
+ */
107181
+ offersTurnOn: integer2("offers_turn_on", { mode: "boolean" }).notNull().default(false),
106986
107182
  /**
106987
107183
  * Whether every fire of this schedule RESUMES one persistent session instead
106988
107184
  * of starting a fresh one (DOR-1571).
@@ -107427,6 +107623,12 @@ var init_sessions = __esm({
107427
107623
  // whether a limited session may carry its work to another account (spec
107428
107624
  // `claude-account-fleet` D9). NULL = bound before this column existed.
107429
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"),
107430
107632
  // The episode `resetsAt` (else `since`) of the last usage limit core resumed
107431
107633
  // this session from by itself (spec `claude-account-fleet` D9 "Wait, then
107432
107634
  // resume by itself"): at most one automatic resume per window reset. Kept
@@ -111133,6 +111335,33 @@ var init_registry = __esm({
111133
111335
  }
111134
111336
  });
111135
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
+
111136
111365
  // ../db/src/schema/session/session-locations.ts
111137
111366
  var sessionLocations;
111138
111367
  var init_session_locations = __esm({
@@ -111339,6 +111568,90 @@ var init_commitments = __esm({
111339
111568
  }
111340
111569
  });
111341
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
+
111342
111655
  // ../db/src/schema/heartbeats/heartbeats.ts
111343
111656
  var heartbeatState, heartbeatBeats, heartbeatOutbox, heartbeatReportItems;
111344
111657
  var init_heartbeats = __esm({
@@ -111634,10 +111947,14 @@ __export(schema_exports, {
111634
111947
  account: () => account,
111635
111948
  accountRelations: () => accountRelations,
111636
111949
  activityEvents: () => activityEvents,
111950
+ agentBrowserProfileAgents: () => agentBrowserProfileAgents,
111951
+ agentBrowserProfiles: () => agentBrowserProfiles,
111637
111952
  agentConnectionAttachments: () => agentConnectionAttachments,
111638
111953
  agentDenials: () => agentDenials,
111639
111954
  agentIdentityTokens: () => agentIdentityTokens,
111640
111955
  agentPauses: () => agentPauses,
111956
+ agentWorkItems: () => agentWorkItems,
111957
+ agentWorkQueues: () => agentWorkQueues,
111641
111958
  agents: () => agents,
111642
111959
  apikey: () => apikey,
111643
111960
  approvals: () => approvals,
@@ -111755,6 +112072,7 @@ __export(schema_exports, {
111755
112072
  user: () => user,
111756
112073
  userRelations: () => userRelations,
111757
112074
  verification: () => verification,
112075
+ workQueueControl: () => workQueueControl,
111758
112076
  workspaces: () => workspaces
111759
112077
  });
111760
112078
  var init_schema2 = __esm({
@@ -111800,11 +112118,13 @@ var init_schema2 = __esm({
111800
112118
  init_channel();
111801
112119
  init_file_save_intents();
111802
112120
  init_registry();
112121
+ init_agent_profiles();
111803
112122
  init_session_locations();
111804
112123
  init_session_native_bindings();
111805
112124
  init_session_touches();
111806
112125
  init_chat_messages2();
111807
112126
  init_commitments();
112127
+ init_work_queue();
111808
112128
  init_heartbeats();
111809
112129
  init_remote_commands();
111810
112130
  }
@@ -113910,6 +114230,9 @@ var init_config_disclosure = __esm({
113910
114230
  // Whether cheap checks may run on DorkOS credits (spec `heartbeats` §6.3): a
113911
114231
  // plain yes, no or not answered, so an agent can say where its checks run.
113912
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",
113913
114236
  // How long the Activity feed keeps its rows (spec `audit-trail` §3.5).
113914
114237
  "activity.retentionDays": "expose",
113915
114238
  // Where the company certificates the desktop app trusts live (DOR-3361).
@@ -114684,7 +115007,9 @@ var init_operator_only_stakes = __esm({
114684
115007
  "notifications.sounds.allClear",
114685
115008
  "notifications.sounds.turnEnd",
114686
115009
  "notifications.notifyOnTurnCompleteWhileAway",
114687
- "notifications.browserPermissionPrimerDismissed"
115010
+ "notifications.browserPermissionPrimerDismissed",
115011
+ // Which room is told nothing is running while work is open (DOR-3675).
115012
+ "heartbeats.idleAlertRoomId"
114688
115013
  ]
114689
115014
  }
114690
115015
  ];
@@ -114896,6 +115221,9 @@ var init_config_write_policy = __esm({
114896
115221
  // Whether cheap checks spend DorkOS credits (spec `heartbeats` §6.3). Only a
114897
115222
  // person's **Use credits** may say yes: it spends the account owner's money.
114898
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",
114899
115227
  // How long the Activity feed keeps the history people review (spec
114900
115228
  // `audit-trail` §3.5). Shortening it deletes rows a person may not have read
114901
115229
  // yet; lengthening it spends disk. Either is the person's call.
@@ -115690,14 +116018,14 @@ var init_constants8 = __esm({
115690
116018
  * would trade a real resource ceiling for a case nobody has reported.
115691
116019
  */
115692
116020
  INTERACTION_PARK_CEILING_MS: 4 * 60 * 60 * 1e3,
115693
- /** Maximum number of concurrent in-memory sessions. */
116021
+ /** Session-record cache size. At capacity, reclaim LRU idle records; refuse only if all are live. */
115694
116022
  MAX_SESSIONS: 50,
115695
116023
  /**
115696
116024
  * How long a WARM session's subprocess may sit with no turn open before it is
115697
116025
  * given back (spec `persistent-session-runtime` §4.3).
115698
116026
  *
115699
116027
  * This is **not** session eviction. `TIMEOUT_MS` retires the session RECORD
115700
- * 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
115701
116029
  * after 5 minutes and the person cannot tell — the record, the transcript and
115702
116030
  * the conversation are untouched, and the next message resumes. Eviction
115703
116031
  * implies a reap; a reap never implies eviction.
@@ -115719,7 +116047,7 @@ var init_constants8 = __esm({
115719
116047
  * {@link SESSIONS.MAX_WARM_SESSIONS_AUTO}. Twelve was the fixed ceiling until
115720
116048
  * DOR-3012, and a machine with 48 GB filled it with 5.5 GB in use.
115721
116049
  *
115722
- * 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
115723
116051
  * cache, so a launch past it reclaims the least recently used warm process,
115724
116052
  * and when nothing is reclaimable — every process mid-turn or parked on a
115725
116053
  * person — it waits for one to come free ({@link SESSIONS.WARM_SLOT_WAIT_MS}).
@@ -117101,6 +117429,196 @@ var init_agent_home = __esm({
117101
117429
  }
117102
117430
  });
117103
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
+
117104
117622
  // ../../apps/server/src/services/session/turn-identity/durable-rekey.ts
117105
117623
  var init_durable_rekey = __esm({
117106
117624
  "../../apps/server/src/services/session/turn-identity/durable-rekey.ts"() {
@@ -118638,8 +119156,8 @@ var init_devtools_capture_store = __esm({
118638
119156
  * @param pending - The recording id and working directory to write under.
118639
119157
  * @param timeoutMs - How long to wait before giving up on the window.
118640
119158
  */
118641
- awaitRecording(requestId, pending2, timeoutMs) {
118642
- this.pendingRecordings.set(requestId, pending2);
119159
+ awaitRecording(requestId, pending, timeoutMs) {
119160
+ this.pendingRecordings.set(requestId, pending);
118643
119161
  return new Promise((resolve14) => {
118644
119162
  const timer = setTimeout(() => {
118645
119163
  this.recordingWaiters.delete(requestId);
@@ -118660,17 +119178,17 @@ var init_devtools_capture_store = __esm({
118660
119178
  * @param requestId - The round trip id the upload carries.
118661
119179
  */
118662
119180
  pendingRecording(requestId) {
118663
- const pending2 = this.pendingRecordings.get(requestId);
118664
- return pending2 ? { ...pending2 } : void 0;
119181
+ const pending = this.pendingRecordings.get(requestId);
119182
+ return pending ? { ...pending } : void 0;
118665
119183
  }
118666
119184
  /** Recording uploads require the pinned live claim, even while decoder/encoder work is finishing. */
118667
119185
  admitsRecording(requestId, actual) {
118668
- const pending2 = this.pendingRecordings.get(requestId);
118669
- if (!pending2 || !matchesBinding(pending2.binding ?? {}, actual)) return false;
118670
- 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;
118671
119189
  return [...this.buffers.values()].some(
118672
119190
  (buffer) => buffer.drivers.some(
118673
- (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
118674
119192
  )
118675
119193
  );
118676
119194
  }
@@ -119083,287 +119601,9 @@ var init_session_key_registry = __esm({
119083
119601
  }
119084
119602
  });
119085
119603
 
119086
- // ../../apps/server/src/services/session/origin/outsider-turns.ts
119087
- import { AsyncLocalStorage as AsyncLocalStorage5 } from "node:async_hooks";
119088
- function noteLatest(sessionId, outsider) {
119089
- const key = primaryOf(sessionId);
119090
- latest.set(key, outsider);
119091
- if (outsider) heard.add(key);
119092
- }
119093
- function isOutsiderOrigin(origin) {
119094
- if (origin.kind === "room") return origin.externalAuthor;
119095
- return OUTSIDER_ORIGIN_KINDS.has(origin.kind);
119096
- }
119097
- function noteTurnOrigin(sessionId, origin) {
119098
- const messageId = holdingFor.getStore();
119099
- if (messageId === void 0) {
119100
- noteLatest(sessionId, isOutsiderOrigin(origin));
119101
- return;
119102
- }
119103
- pending.set(messageId, isOutsiderOrigin(origin));
119104
- if (pending.size > PENDING_MAX) pending.delete(pending.keys().next().value);
119105
- }
119106
- function noteChatHeardOutsider(sessionId) {
119107
- heard.add(primaryOf(sessionId));
119108
- }
119109
- var OUTSIDER_ORIGIN_KINDS, latest, heard, pending, PENDING_MAX, holdingFor;
119110
- var init_outsider_turns = __esm({
119111
- "../../apps/server/src/services/session/origin/outsider-turns.ts"() {
119112
- "use strict";
119113
- init_session_key_registry();
119114
- OUTSIDER_ORIGIN_KINDS = /* @__PURE__ */ new Set([
119115
- "relay-binding",
119116
- "outside-sender",
119117
- "connector-event"
119118
- ]);
119119
- latest = /* @__PURE__ */ new Map();
119120
- heard = /* @__PURE__ */ new Set();
119121
- pending = /* @__PURE__ */ new Map();
119122
- PENDING_MAX = 1e3;
119123
- holdingFor = new AsyncLocalStorage5();
119124
- }
119125
- });
119126
-
119127
- // ../../apps/server/src/services/core/turn-power/live-outsider-turns.ts
119128
- function homeKey(dir, forAgent) {
119129
- try {
119130
- return homeOf(resolveAgentHome(dir, forAgent));
119131
- } catch {
119132
- return void 0;
119133
- }
119134
- }
119135
- function countWhileRunning(place2, marks, events) {
119136
- const key = homeKey(place2.cwd, place2.forAgent) ?? UNPLACED;
119137
- return (async function* counted() {
119138
- const token = { marks };
119139
- const turns = running.get(key) ?? /* @__PURE__ */ new Set();
119140
- turns.add(token);
119141
- running.set(key, turns);
119142
- try {
119143
- yield* events;
119144
- } finally {
119145
- turns.delete(token);
119146
- if (turns.size === 0 && running.get(key) === turns) running.delete(key);
119147
- }
119148
- })();
119149
- }
119150
- var UNPLACED, running;
119151
- var init_live_outsider_turns = __esm({
119152
- "../../apps/server/src/services/core/turn-power/live-outsider-turns.ts"() {
119153
- "use strict";
119154
- init_agent_home();
119155
- UNPLACED = "";
119156
- running = /* @__PURE__ */ new Map();
119157
- }
119158
- });
119159
-
119160
- // ../../apps/server/src/services/core/turn-power/teammate-mark.ts
119161
- function runsTeammateTurns(runtimeType) {
119162
- return TEAMMATE_TURN_RUNTIMES.has(runtimeType);
119163
- }
119164
- function teammateRuntimeRefusal(runtimeType) {
119165
- return `A teammate's message cannot start a turn on ${runtimeType} yet`;
119166
- }
119167
- function teammateTurnRefusal(runtimeType, origins) {
119168
- if (!runsTeammateTurns(runtimeType)) return teammateRuntimeRefusal(runtimeType);
119169
- const gate = spaceAllows;
119170
- if (gate && origins.some((origin) => !gate(origin.roomId))) return TEAMMATE_LIMIT_REFUSAL;
119171
- return null;
119172
- }
119173
- function teammateTurnOpts(opts) {
119174
- const { additionalDirectories: _granted, ...rest } = opts ?? {};
119175
- return {
119176
- ...rest,
119177
- teammate: true,
119178
- unattended: true,
119179
- permissionCeiling: withReadOnly(opts?.permissionCeiling),
119180
- ...opts?.roomTurn ? { roomTurn: { ...opts.roomTurn, teammate: true, untrustedText: true } } : {}
119181
- };
119182
- }
119183
- function withReadOnly(ceiling) {
119184
- if (ceiling === void 0) return READ_ONLY_LEVEL;
119185
- if (Array.isArray(ceiling) && ceiling.length === 0) return ["runtime-default", READ_ONLY_LEVEL];
119186
- const bounds = Array.isArray(ceiling) ? ceiling : [ceiling];
119187
- return [...bounds, READ_ONLY_LEVEL];
119188
- }
119189
- var TEAMMATE_TURN_RUNTIMES, TEAMMATE_LIMIT_REFUSAL, spaceAllows;
119190
- var init_teammate_mark = __esm({
119191
- "../../apps/server/src/services/core/turn-power/teammate-mark.ts"() {
119192
- "use strict";
119193
- init_permission_semantics();
119194
- TEAMMATE_TURN_RUNTIMES = /* @__PURE__ */ new Set(["claude-code", "test-mode"]);
119195
- TEAMMATE_LIMIT_REFUSAL = "This space reached its monthly limit for teammates, so this turn didn\u2019t run.";
119196
- spaceAllows = null;
119197
- }
119198
- });
119199
-
119200
- // ../../apps/server/src/services/core/turn-power/turn-marks.ts
119201
- function presentKinds(marks) {
119202
- return TURN_MARK_KINDS.filter((kind) => marks[kind] !== void 0);
119203
- }
119204
- function marksFrom(fields) {
119205
- const kinds = presentKinds(fields);
119206
- if (kinds.length === 0) return NO_MARKS;
119207
- return Object.fromEntries(kinds.map((kind) => [kind, fields[kind]]));
119208
- }
119209
- function teammateOrigins(marks) {
119210
- return marks.teammate ?? [];
119211
- }
119212
- function marksOfLevel(level) {
119213
- return level === void 0 ? NO_MARKS : marksFrom(level);
119214
- }
119215
- function marksOfCeiling(ceiling) {
119216
- if (!Array.isArray(ceiling)) {
119217
- return ceiling === "runtime-default" ? UNKNOWN_SOURCE : marksOfLevel(ceiling);
119218
- }
119219
- const bounds = ceiling;
119220
- if (bounds.length === 0) return UNKNOWN_SOURCE;
119221
- return bounds.map(marksOfCeiling).reduce(mergeMarks, NO_MARKS);
119222
- }
119223
- function marksForTurn(opts) {
119224
- const ceiling = opts?.continuationHold === true ? withoutContinuationBound(opts.permissionCeiling) : opts?.permissionCeiling;
119225
- const fromCeiling = ceiling !== void 0 ? marksOfCeiling(ceiling) : NO_MARKS;
119226
- return mergeMarks(
119227
- fromCeiling,
119228
- opts?.roomTurn?.outsiderInView === true ? { outsider: true } : NO_MARKS
119229
- );
119230
- }
119231
- function withoutContinuationBound(ceiling) {
119232
- if (ceiling === void 0 || ceiling === "runtime-default") return void 0;
119233
- if (!Array.isArray(ceiling)) return ceiling;
119234
- const bounds = [...ceiling];
119235
- const at = bounds.indexOf("runtime-default");
119236
- if (at !== -1) bounds.splice(at, 1);
119237
- return bounds.length === 0 ? void 0 : bounds;
119238
- }
119239
- function mergeMarks(a2, b2) {
119240
- const merged = {};
119241
- for (const kind of TURN_MARK_KINDS) {
119242
- const rules = RULES[kind];
119243
- const value = rules.merge(a2[kind], b2[kind]);
119244
- if (value !== void 0) merged[kind] = value;
119245
- }
119246
- return marksFrom(merged);
119247
- }
119248
- function hasMarks(marks) {
119249
- return presentKinds(marks).length > 0;
119250
- }
119251
- function carriesAllMarks(receiver, sender) {
119252
- return TURN_MARK_KINDS.every(
119253
- (kind) => RULES[kind].covers(receiver[kind], sender[kind])
119254
- );
119255
- }
119256
- function withMarks(level, marks) {
119257
- const own2 = marksOfLevel(level);
119258
- if (carriesAllMarks(own2, marks)) return level;
119259
- return { ...level, ...mergeMarks(own2, marks) };
119260
- }
119261
- function withCarriedHold(runtimeType, opts, setToFull = false) {
119262
- const ceiling = opts?.permissionCeiling;
119263
- if (ceiling === void 0 || setToFull || GATES_CARRIED_SHELL.has(runtimeType)) return opts;
119264
- if (ceilingHoldsForOutsider(ceiling) || marksOfCeiling(ceiling).outsider !== true) return opts;
119265
- const bounds = Array.isArray(ceiling) ? [...ceiling] : [ceiling];
119266
- bounds.push("runtime-default");
119267
- const { continuationHold: _dropped, ...rest } = opts ?? {};
119268
- return { ...rest, permissionCeiling: bounds.length === 1 ? bounds[0] : bounds };
119269
- }
119270
- async function* refused(reason) {
119271
- yield* [];
119272
- throw new Error(reason);
119273
- }
119274
- function placeOf(runtime, sessionId, opts) {
119275
- let cwd = opts?.cwd ?? opts?.roomTurn?.cwd;
119276
- try {
119277
- cwd ??= runtime.getSessionCwd?.(sessionId);
119278
- } catch {
119279
- }
119280
- return { cwd, forAgent: turnAgentOf(opts) };
119281
- }
119282
- function applyTurnMarks(runtime, marksOfSession, recordRefused, setToFull) {
119283
- const places = /* @__PURE__ */ new Map();
119284
- function markedTurn(target, sessionId, opts, start) {
119285
- const marks = marksForTurn(opts);
119286
- if (!hasMarks(marks)) return start(opts);
119287
- if (marks.outsider === true) noteChatHeardOutsider(sessionId);
119288
- let sent = withCarriedHold(target.type, opts, setToFull?.(sessionId, opts) === true);
119289
- if (marks.teammate !== void 0) {
119290
- sent = teammateTurnOpts(opts);
119291
- const refusal2 = teammateTurnRefusal(target.type, marks.teammate);
119292
- if (refusal2 !== null) {
119293
- recordRefused?.(sessionId, sent);
119294
- return refused(refusal2);
119295
- }
119296
- }
119297
- const place2 = placeOf(target, sessionId, sent);
119298
- places.delete(sessionId);
119299
- places.set(sessionId, place2);
119300
- if (places.size > PLACE_MEMORY) places.delete(places.keys().next().value);
119301
- return countWhileRunning(place2, marks, start(sent));
119302
- }
119303
- return new Proxy(runtime, {
119304
- get(target, prop) {
119305
- if ((prop === "sendMessage" || prop === "executeCommandIntent") && typeof target[prop] === "function") {
119306
- const start = target[prop].bind(target);
119307
- return (sessionId, input4, opts) => markedTurn(target, sessionId, opts, (sent) => start(sessionId, input4, sent));
119308
- }
119309
- if (prop === "onRuntimeTurn" && typeof target.onRuntimeTurn === "function") {
119310
- const subscribe = target.onRuntimeTurn.bind(target);
119311
- return (listener) => subscribe((sessionId, events) => {
119312
- const marks = marksOfSession(sessionId);
119313
- listener(
119314
- sessionId,
119315
- hasMarks(marks) ? countWhileRunning(
119316
- places.get(sessionId) ?? placeOf(target, sessionId, void 0),
119317
- marks,
119318
- events
119319
- ) : events
119320
- );
119321
- });
119322
- }
119323
- const value = Reflect.get(target, prop, target);
119324
- return typeof value === "function" ? value.bind(target) : value;
119325
- }
119326
- });
119327
- }
119328
- var TURN_MARK_KINDS, NO_MARKS, PLACE_MEMORY, UNKNOWN_SOURCE, sameOrigin, RULES, GATES_CARRIED_SHELL;
119329
- var init_turn_marks = __esm({
119330
- "../../apps/server/src/services/core/turn-power/turn-marks.ts"() {
119331
- "use strict";
119332
- init_permission_semantics();
119333
- init_agent_home();
119334
- init_outsider_turns();
119335
- init_live_outsider_turns();
119336
- init_teammate_mark();
119337
- TURN_MARK_KINDS = [
119338
- "outsider",
119339
- "teammate"
119340
- ];
119341
- NO_MARKS = Object.freeze({});
119342
- PLACE_MEMORY = 1e4;
119343
- UNKNOWN_SOURCE = Object.freeze({ outsider: true });
119344
- sameOrigin = (a2, b2) => a2.roomId === b2.roomId && a2.authorId === b2.authorId;
119345
- RULES = {
119346
- outsider: {
119347
- merge: (a2, b2) => a2 === true || b2 === true ? true : void 0,
119348
- covers: (outer, inner) => inner !== true || outer === true
119349
- },
119350
- teammate: {
119351
- merge: (a2, b2) => mergeTeammateOrigins(a2, b2),
119352
- covers: (outer, inner) => inner === void 0 || outer !== void 0 && inner.every((origin) => outer.some((o3) => sameOrigin(o3, origin)))
119353
- }
119354
- };
119355
- GATES_CARRIED_SHELL = /* @__PURE__ */ new Set(["claude-code"]);
119356
- }
119357
- });
119358
-
119359
119604
  // ../../apps/server/src/services/core/turn-power/continuation-hold.ts
119360
- function noteTurnHold(sessionId, held2, carried = false) {
119605
+ function noteTurnHold(sessionId, held2) {
119361
119606
  const key = primaryOf(sessionId);
119362
- carriedOnly.delete(key);
119363
- if (held2 && carried) {
119364
- carriedOnly.add(key);
119365
- if (carriedOnly.size > WRITTEN_MAX) carriedOnly.delete(carriedOnly.values().next().value);
119366
- }
119367
119607
  if (!db) return;
119368
119608
  if (written.get(key) === held2) return;
119369
119609
  try {
@@ -119383,17 +119623,15 @@ function noteTurnHold(sessionId, held2, carried = false) {
119383
119623
  });
119384
119624
  }
119385
119625
  }
119386
- var db, written, WRITTEN_MAX, carriedOnly;
119626
+ var db, written, WRITTEN_MAX;
119387
119627
  var init_continuation_hold = __esm({
119388
119628
  "../../apps/server/src/services/core/turn-power/continuation-hold.ts"() {
119389
119629
  "use strict";
119390
119630
  init_src2();
119391
- init_permission_semantics();
119392
119631
  init_session_key_registry();
119393
119632
  init_logger();
119394
119633
  written = /* @__PURE__ */ new Map();
119395
119634
  WRITTEN_MAX = 1e4;
119396
- carriedOnly = /* @__PURE__ */ new Set();
119397
119635
  }
119398
119636
  });
119399
119637
 
@@ -119566,9 +119804,7 @@ function recordTurnLevels(runtime, storedModeOf) {
119566
119804
  (sessionId) => marksOfLevel(turnLevels.get(sessionId)),
119567
119805
  (sessionId, opts) => {
119568
119806
  recordTurn(runtime, sessionId, storedOf2(sessionId), opts);
119569
- },
119570
- // A chat set to Full is never held for a mark it carries (DOR-3394).
119571
- (sessionId, opts) => isFullLevel(chosenLevelOf(runtime, storedOf2(sessionId), opts))
119807
+ }
119572
119808
  );
119573
119809
  }
119574
119810
  function recordLevels(runtime, storedModeOf) {
@@ -119584,12 +119820,7 @@ function recordLevels(runtime, storedModeOf) {
119584
119820
  stored = void 0;
119585
119821
  }
119586
119822
  const level = recordTurn(target, sessionId, stored, opts);
119587
- if (opts?.continuationHold !== true) {
119588
- const held2 = level.outsider === true;
119589
- const ceiling = opts?.permissionCeiling;
119590
- const carried = held2 && !(ceiling !== void 0 && ceilingHoldsForOutsider(ceiling));
119591
- noteTurnHold(sessionId, held2, carried);
119592
- }
119823
+ if (opts?.continuationHold !== true) noteTurnHold(sessionId, level.outsider === true);
119593
119824
  const serial = ++nextTurnSerial;
119594
119825
  for (const id of /* @__PURE__ */ new Set([sessionId, primaryOf(sessionId)])) {
119595
119826
  turnSerials.delete(id);
@@ -119612,7 +119843,6 @@ var init_turn_levels = __esm({
119612
119843
  "use strict";
119613
119844
  init_turn_marks();
119614
119845
  init_session_key_registry();
119615
- init_outsider_turns();
119616
119846
  init_continuation_hold();
119617
119847
  init_full_autonomy();
119618
119848
  init_permission_semantics();
@@ -119785,10 +120015,7 @@ function permissionSeedForOrigin(origin) {
119785
120015
  // The owner on the web, with the chat's stream open through the relay. A
119786
120016
  // new chat is born at the operator's configured stop, as one started here
119787
120017
  // is, so the chat is the same chat when its owner comes back to this
119788
- // computer. What a relayed TURN may do is bounded separately: every one is
119789
- // held to the runtime's default by the relay (`RELAY_TURN_CEILING`), so it
119790
- // asks before anything that needs a person (spec `everything-is-a-space`
119791
- // B2, the operator's option 2).
120018
+ // computer.
119792
120019
  case "session-relay":
119793
120020
  return "configured-stop";
119794
120021
  // Nobody is watching a room turn either, and that is the reason it follows
@@ -119818,12 +120045,8 @@ function permissionSeedForOrigin(origin) {
119818
120045
  // own: the turn runs at the stricter of the two. On insert only, so an
119819
120046
  // existing chat a person set keeps what they chose. A person who later
119820
120047
  // types into it gets the same stop a chat of their own starts at.
119821
- //
119822
- // A message from a MARKED turn seeds nothing (DOR-3107, Security): the
119823
- // chat it opens never inherits the agent's own level from a turn a
119824
- // stranger's words reached.
119825
120048
  case "chat-message":
119826
- return origin.marked ? "none" : "configured-stop-on-insert";
120049
+ return "configured-stop-on-insert";
119827
120050
  // Everything below seeds nothing, for two different reasons.
119828
120051
  //
119829
120052
  // A schedule's power is already decided and already stored, on the schedule
@@ -119868,14 +120091,9 @@ function permissionSeedForOrigin(origin) {
119868
120091
  }
119869
120092
  }
119870
120093
  }
119871
- function seedForTurn(sessionId, origin) {
119872
- noteTurnOrigin(sessionId, origin);
119873
- return permissionSeedForOrigin(origin);
119874
- }
119875
120094
  var init_turn_origin = __esm({
119876
120095
  "../../apps/server/src/services/session/origin/turn-origin.ts"() {
119877
120096
  "use strict";
119878
- init_outsider_turns();
119879
120097
  }
119880
120098
  });
119881
120099
 
@@ -121325,16 +121543,6 @@ var init_existing_chats_raise = __esm({
121325
121543
  }
121326
121544
  });
121327
121545
 
121328
- // ../../apps/server/src/services/core/permissions/chat-launch-marks.ts
121329
- var init_chat_launch_marks = __esm({
121330
- "../../apps/server/src/services/core/permissions/chat-launch-marks.ts"() {
121331
- "use strict";
121332
- init_src2();
121333
- init_turn_marks();
121334
- init_existing_chats_raise();
121335
- }
121336
- });
121337
-
121338
121546
  // ../../apps/server/src/services/core/turn-power/chat-rise-facts.ts
121339
121547
  function chatRiseFacts() {
121340
121548
  return facts;
@@ -121344,10 +121552,7 @@ var init_chat_rise_facts = __esm({
121344
121552
  "../../apps/server/src/services/core/turn-power/chat-rise-facts.ts"() {
121345
121553
  "use strict";
121346
121554
  init_src2();
121347
- init_chat_launch_marks();
121348
121555
  init_session_key_registry();
121349
- init_outsider_turns();
121350
- init_continuation_hold();
121351
121556
  init_logger();
121352
121557
  facts = null;
121353
121558
  }
@@ -121410,10 +121615,7 @@ async function agentOfTurn(runtime, sessionId, opts, recordedAgentOf) {
121410
121615
  }
121411
121616
  function turnIsMarked(opts) {
121412
121617
  const ceiling = opts?.permissionCeiling;
121413
- if (ceiling !== void 0 && ceilingHoldsForOutsider(ceiling)) return true;
121414
- if (opts?.teammate === true || opts?.roomTurn?.teammate === true) return true;
121415
- if (opts?.roomTurn?.outsiderInView === true) return true;
121416
- return marksForTurn(opts).teammate !== void 0;
121618
+ return ceiling !== void 0 && ceilingHoldsForOutsider(ceiling);
121417
121619
  }
121418
121620
  function rises(runtime, sessionId, agentPath, stored, levelMode, opts) {
121419
121621
  if (opts?.permissionMode !== void 0 || opts?.unattended === true) return false;
@@ -121519,7 +121721,6 @@ var init_agent_level_bound = __esm({
121519
121721
  init_agent_launch_level();
121520
121722
  init_existing_chats_raise();
121521
121723
  init_chat_rise_facts();
121522
- init_turn_marks();
121523
121724
  init_logger();
121524
121725
  COMPUTER_LOCAL_RUNTIME = "computer-local";
121525
121726
  }
@@ -122372,7 +122573,7 @@ function toolFields(event) {
122372
122573
  };
122373
122574
  }
122374
122575
  async function* recordDuring(runtime, sessionId, opts, source) {
122375
- const pending2 = /* @__PURE__ */ new Map();
122576
+ const pending = /* @__PURE__ */ new Map();
122376
122577
  const seen = /* @__PURE__ */ new Set();
122377
122578
  let actor;
122378
122579
  const actorOf = () => actor ??= toolActorOf(runtime.type, opts);
@@ -122415,15 +122616,15 @@ async function* recordDuring(runtime, sessionId, opts, source) {
122415
122616
  seen.add(fields.id);
122416
122617
  if (isFinished(sessionId, fields.id)) return;
122417
122618
  const earlier = stillRunning.get(sessionId)?.get(fields.id);
122418
- let call = pending2.get(fields.id);
122619
+ let call = pending.get(fields.id);
122419
122620
  if (!call && earlier) {
122420
122621
  call = { name: earlier.name, input: earlier.input, inputDone: true };
122421
- pending2.set(fields.id, call);
122622
+ pending.set(fields.id, call);
122422
122623
  }
122423
122624
  if (!call) {
122424
122625
  if (!fields.name || isDorkosTool(runtime.type, fields.name)) return;
122425
122626
  call = { name: fields.name, input: "", inputDone: false };
122426
- pending2.set(fields.id, call);
122627
+ pending.set(fields.id, call);
122427
122628
  }
122428
122629
  if (event.type === "tool_call_end" || event.type !== "tool_call_delta" && fields.input !== void 0 && fields.input !== "") {
122429
122630
  call.inputDone = true;
@@ -122432,7 +122633,7 @@ async function* recordDuring(runtime, sessionId, opts, source) {
122432
122633
  call.input = event.type === "tool_call_delta" ? (call.input + fields.input).slice(0, MAX_INPUT) : fields.input.slice(0, MAX_INPUT);
122433
122634
  }
122434
122635
  if (fields.status === "complete" || fields.status === "error") {
122435
- pending2.delete(fields.id);
122636
+ pending.delete(fields.id);
122436
122637
  const finishedCall = earlier ?? callOf(fields.id, call);
122437
122638
  if (finishedCall) {
122438
122639
  recordRuntimeToolCall(
@@ -122451,7 +122652,7 @@ async function* recordDuring(runtime, sessionId, opts, source) {
122451
122652
  yield event;
122452
122653
  }
122453
122654
  } finally {
122454
- for (const [toolCallId, call] of pending2) {
122655
+ for (const [toolCallId, call] of pending) {
122455
122656
  if (!call.inputDone) continue;
122456
122657
  try {
122457
122658
  const running2 = callOf(toolCallId, call);
@@ -122733,22 +122934,7 @@ var init_decorate_runtime = __esm({
122733
122934
  }
122734
122935
  });
122735
122936
 
122736
- // ../../apps/server/src/services/core/runtime-registry.ts
122737
- function rowToSettings(row2) {
122738
- const settings = {};
122739
- if (row2.permissionMode != null) settings.permissionMode = row2.permissionMode;
122740
- if (row2.model != null) settings.model = row2.model;
122741
- if (row2.effort != null) {
122742
- const effort = EffortLevelSchema.safeParse(row2.effort);
122743
- if (effort.success) settings.effort = effort.data;
122744
- else
122745
- logger.warn("[RuntimeRegistry] ignoring an unreadable stored effort level", {
122746
- stored: row2.effort
122747
- });
122748
- }
122749
- if (row2.fastMode != null) settings.fastMode = row2.fastMode;
122750
- return settings;
122751
- }
122937
+ // ../../apps/server/src/services/core/runtime-seam/session-metadata-columns.ts
122752
122938
  function pickSettings(settings) {
122753
122939
  const patch = {};
122754
122940
  if (settings.permissionMode !== void 0) patch.permissionMode = settings.permissionMode;
@@ -122765,6 +122951,37 @@ function fillNullsWith(seed) {
122765
122951
  }
122766
122952
  return update;
122767
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
+ }
122768
122985
  function moveSessionContext(db2, fromId, toId) {
122769
122986
  const source = db2.select().from(sessionContext).where(eq(sessionContext.sessionId, fromId)).get();
122770
122987
  if (!source) return;
@@ -122799,6 +123016,7 @@ var init_runtime_registry = __esm({
122799
123016
  init_session_started_by_store();
122800
123017
  init_session_touch_store();
122801
123018
  init_decorate_runtime();
123019
+ init_session_metadata_columns();
122802
123020
  BOUND_RUNTIME_CHUNK_SIZE = 500;
122803
123021
  RuntimeNotRegisteredError = class extends Error {
122804
123022
  constructor(runtime, sessionId) {
@@ -122916,7 +123134,7 @@ var init_runtime_registry = __esm({
122916
123134
  async persistSessionRuntime(sessionId, runtime, origin, agentPath) {
122917
123135
  const db2 = this.requireDb("persistSessionRuntime");
122918
123136
  const agent = await readAgentExecutionDefaults(agentPath);
122919
- const seedPolicy = seedForTurn(sessionId, origin);
123137
+ const seedPolicy = permissionSeedForOrigin(origin);
122920
123138
  const seed = this.seedForNewRow(runtime, { agent, seedPolicy });
122921
123139
  const result2 = await db2.insert(sessionMetadata).values({
122922
123140
  sessionId,
@@ -122925,7 +123143,7 @@ var init_runtime_registry = __esm({
122925
123143
  // What started it, server-held and never overwritten: the fact that
122926
123144
  // decides whether a limited session may carry its work to another
122927
123145
  // account (spec `claude-account-fleet` D9).
122928
- launchOrigin: origin.kind,
123146
+ ...launchColumns(origin),
122929
123147
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
122930
123148
  ...seed
122931
123149
  }).onConflictDoUpdate({
@@ -122938,7 +123156,7 @@ var init_runtime_registry = __esm({
122938
123156
  ...agentPath !== void 0 ? { agentPath } : {},
122939
123157
  ...fillNullsWith(seed),
122940
123158
  // The claim names what started the session only when nothing has yet.
122941
- launchOrigin: sql2`coalesce(${sessionMetadata.launchOrigin}, ${origin.kind})`,
123159
+ ...launchColumns(origin, "claim"),
122942
123160
  // **The UPDATE branch is a CLAIM, and not every origin may seed one.**
122943
123161
  // This row already exists: something created it before the session
122944
123162
  // started, which for a person is their own pre-launch settings change
@@ -123525,6 +123743,7 @@ var init_runtime_registry = __esm({
123525
123743
  fastMode: destination.fastMode ?? source.fastMode,
123526
123744
  agentPath: destination.agentPath ?? source.agentPath,
123527
123745
  launchOrigin: destination.launchOrigin ?? source.launchOrigin,
123746
+ launchedBy: destination.launchedBy ?? source.launchedBy,
123528
123747
  lastAutoResumeFor: destination.lastAutoResumeFor ?? source.lastAutoResumeFor
123529
123748
  }).where(eq(sessionMetadata.sessionId, toId)).run();
123530
123749
  });
@@ -124254,9 +124473,13 @@ var init_safe_git = __esm({
124254
124473
  "blame\\.ignorerevsfile",
124255
124474
  "rerere\\.enabled",
124256
124475
  "lfs\\.repositoryformatversion",
124257
- "gtr\\.[a-z.]+",
124258
- "gc\\.[a-z]+",
124259
- "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)",
124260
124483
  "fetch\\.(?:prune|writecommitgraph)",
124261
124484
  "pull\\.rebase",
124262
124485
  "user\\.(?:name|email)"
@@ -124857,18 +125080,18 @@ var init_project_registry = __esm({
124857
125080
  */
124858
125081
  async withSlot(extensionId, root, name2) {
124859
125082
  if (this.reporters.get(root)?.has(extensionId)) return name2();
124860
- let pending2 = this.reserved.get(extensionId);
124861
- if (pending2?.has(root)) return name2();
124862
- 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) {
124863
125086
  return null;
124864
125087
  }
124865
- if (!pending2) this.reserved.set(extensionId, pending2 = /* @__PURE__ */ new Set());
124866
- pending2.add(root);
125088
+ if (!pending) this.reserved.set(extensionId, pending = /* @__PURE__ */ new Set());
125089
+ pending.add(root);
124867
125090
  try {
124868
125091
  return await name2();
124869
125092
  } finally {
124870
- pending2.delete(root);
124871
- if (pending2.size === 0) this.reserved.delete(extensionId);
125093
+ pending.delete(root);
125094
+ if (pending.size === 0) this.reserved.delete(extensionId);
124872
125095
  }
124873
125096
  }
124874
125097
  /**
@@ -133822,7 +134045,9 @@ call.
133822
134045
  the repository is refused. Copy the real content in and commit that instead;
133823
134046
  when the source changes, copy it again.
133824
134047
  - **This room does not have files of its own**: most rooms are conversations.
133825
- 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.
133826
134051
 
133827
134052
  ## Your own code
133828
134053
 
@@ -133862,7 +134087,7 @@ var init_using_the_agent_browser = __esm({
133862
134087
  init_tool_name_note();
133863
134088
  usingTheAgentBrowser = {
133864
134089
  name: "using-the-agent-browser",
133865
- 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.",
133866
134091
  body: `# Using the agent browser
133867
134092
 
133868
134093
  ${TOOL_NAME_NOTE}
@@ -133882,6 +134107,10 @@ Two sets of tools can both end in \`browser_navigate\`, \`browser_click\` and so
133882
134107
  - **DorkOS's own browser tools** (\`browser_navigate\`, \`browser_read_page\`,
133883
134108
  \`browser_read_console\` and the rest, on the DorkOS server) drive the browser
133884
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.
133885
134114
 
133886
134115
  ## What you get
133887
134116
 
@@ -133911,17 +134140,27 @@ Two sets of tools can both end in \`browser_navigate\`, \`browser_click\` and so
133911
134140
  The site is not saved, or its sign-in ran out. Stop and say so, in one message:
133912
134141
 
133913
134142
  1. Name the site you need.
133914
- 2. Ask the person to run \`dorkos browser login <site>\` in a terminal, sign in,
133915
- and press Enter.
133916
- 3. Tell them to start a new session with you afterwards (or re-run the task),
133917
- 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.
133918
134146
 
133919
- You cannot do this step for them: the command needs a person at the keyboard
133920
- 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.
133921
134150
 
133922
134151
  Do not save a sign-in from inside your own browser. It is thrown away when the
133923
134152
  browser closes, and it would be a login made without the operator watching.
133924
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
+
133925
134164
  ## Checking what is saved
133926
134165
 
133927
134166
  Your DorkOS context tells you (an \`<agent_browser>\` note) when your browser has
@@ -134009,6 +134248,10 @@ the person, or paused at an account limit, its last message arrives in your
134009
134248
  chat as a report. If you are idle, the report starts a turn for you. It does
134010
134249
  not report when a turn ends only to wait.
134011
134250
 
134251
+ Started from a room, the report comes to your chat in that room as a turn
134252
+ only you see. Nobody else in the room reads it. Post there only if the room
134253
+ needs to know.
134254
+
134012
134255
  So after you start one, end your turn. Do not poll it.
134013
134256
 
134014
134257
  ## Check on one
@@ -138440,7 +138683,9 @@ function fileFingerprint(abs) {
138440
138683
  }
138441
138684
  if (stat6.isDirectory()) return "dir";
138442
138685
  if (!stat6.isFile()) return "unreadable";
138443
- if (stat6.size > MAX_HASHED_BYTES) return `large:${stat6.size}:${stat6.mtimeMs}`;
138686
+ if (stat6.size > MAX_HASHED_BYTES) {
138687
+ return `large:${stat6.size}:${stat6.mtimeMs}:${stat6.ctimeMs}:${stat6.ino}`;
138688
+ }
138444
138689
  try {
138445
138690
  return createHash7("sha256").update(readFileSync22(abs)).digest("hex");
138446
138691
  } catch {
@@ -138792,7 +139037,7 @@ __export(project_with_consent_exports, {
138792
139037
  withProjectLock: () => withProjectLock,
138793
139038
  withProvenInstalls: () => withProvenInstalls
138794
139039
  });
138795
- import { AsyncLocalStorage as AsyncLocalStorage6 } from "node:async_hooks";
139040
+ import { AsyncLocalStorage as AsyncLocalStorage5 } from "node:async_hooks";
138796
139041
  import { realpathSync as realpathSync14 } from "node:fs";
138797
139042
  import { join as join49, resolve as resolve9 } from "node:path";
138798
139043
  function projectLockKey(projectPath) {
@@ -139019,13 +139264,13 @@ var init_project_with_consent = __esm({
139019
139264
  };
139020
139265
  projectLocks = /* @__PURE__ */ new Map();
139021
139266
  projectLockQueue = /* @__PURE__ */ new Map();
139022
- heldByCaller = new AsyncLocalStorage6();
139267
+ heldByCaller = new AsyncLocalStorage5();
139023
139268
  reportedAtFull = /* @__PURE__ */ new Set();
139024
139269
  }
139025
139270
  });
139026
139271
 
139027
139272
  // ../shared/src/atomic-write.ts
139028
- import { AsyncLocalStorage as AsyncLocalStorage7 } from "node:async_hooks";
139273
+ import { AsyncLocalStorage as AsyncLocalStorage6 } from "node:async_hooks";
139029
139274
  import { randomUUID as randomUUID3 } from "node:crypto";
139030
139275
  import { chmod, mkdir as mkdir4, rename as rename2, rm, writeFile as writeFile3 } from "node:fs/promises";
139031
139276
  import { basename as basename8, dirname as dirname13, join as join50, resolve as resolve10 } from "node:path";
@@ -139077,7 +139322,7 @@ var pathLocks, heldLocks;
139077
139322
  var init_atomic_write2 = __esm({
139078
139323
  "../shared/src/atomic-write.ts"() {
139079
139324
  pathLocks = /* @__PURE__ */ new Map();
139080
- heldLocks = new AsyncLocalStorage7();
139325
+ heldLocks = new AsyncLocalStorage6();
139081
139326
  }
139082
139327
  });
139083
139328
 
@@ -145737,17 +145982,17 @@ function launchChromeWithPipe(executable, args, spawnChrome = defaultSpawn) {
145737
145982
  }
145738
145983
  let nextId = 0;
145739
145984
  let exitedFlag = false;
145740
- const pending2 = /* @__PURE__ */ new Map();
145985
+ const pending = /* @__PURE__ */ new Map();
145741
145986
  const listeners = /* @__PURE__ */ new Set();
145742
145987
  const exited = new Promise((resolve14) => {
145743
145988
  const finish = (code, signal) => {
145744
145989
  if (exitedFlag) return;
145745
145990
  exitedFlag = true;
145746
- for (const waiter of pending2.values()) {
145991
+ for (const waiter of pending.values()) {
145747
145992
  clearTimeout(waiter.timer);
145748
145993
  waiter.reject(new ChromeExitedError());
145749
145994
  }
145750
- pending2.clear();
145995
+ pending.clear();
145751
145996
  resolve14({ code, signal });
145752
145997
  };
145753
145998
  child.once("exit", finish);
@@ -145771,9 +146016,9 @@ function launchChromeWithPipe(executable, args, spawnChrome = defaultSpawn) {
145771
146016
  continue;
145772
146017
  }
145773
146018
  if (typeof message2.id === "number") {
145774
- const waiter = pending2.get(message2.id);
146019
+ const waiter = pending.get(message2.id);
145775
146020
  if (!waiter) continue;
145776
- pending2.delete(message2.id);
146021
+ pending.delete(message2.id);
145777
146022
  clearTimeout(waiter.timer);
145778
146023
  if (message2.error) waiter.reject(new Error(message2.error.message ?? "Chrome refused."));
145779
146024
  else waiter.resolve(message2.result ?? {});
@@ -145792,10 +146037,10 @@ function launchChromeWithPipe(executable, args, spawnChrome = defaultSpawn) {
145792
146037
  const id = ++nextId;
145793
146038
  return new Promise((resolve14, reject) => {
145794
146039
  const timer = setTimeout(() => {
145795
- pending2.delete(id);
146040
+ pending.delete(id);
145796
146041
  reject(new Error(`Chrome did not answer ${method} in time.`));
145797
146042
  }, timeoutMs);
145798
- pending2.set(id, { resolve: resolve14, reject, timer });
146043
+ pending.set(id, { resolve: resolve14, reject, timer });
145799
146044
  toChrome.write(
145800
146045
  `${JSON.stringify({ id, method, params, ...sessionId ? { sessionId } : {} })}\0`
145801
146046
  );
@@ -145973,7 +146218,9 @@ var init_profile2 = __esm({
145973
146218
 
145974
146219
  // ../shared/src/cloud-origin.ts
145975
146220
  function normalizeHost2(host) {
145976
- 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();
145977
146224
  }
145978
146225
  function entryFor(url2) {
145979
146226
  let parsed;
@@ -146790,9 +147037,9 @@ function formatVersion(version4, source) {
146790
147037
  }
146791
147038
  function formatUpdateLine(check4) {
146792
147039
  const installed = formatVersion(check4.installedVersion, check4.installedVersionSource);
146793
- const latest2 = formatVersion(check4.latestVersion, check4.latestVersionSource);
147040
+ const latest = formatVersion(check4.latestVersion, check4.latestVersionSource);
146794
147041
  const from = check4.marketplace ? ` (${check4.marketplace})` : "";
146795
- return `${labelOf(check4)} ${installed} \u2192 ${latest2}${from}`;
147042
+ return `${labelOf(check4)} ${installed} \u2192 ${latest}${from}`;
146796
147043
  }
146797
147044
  var init_installation_label = __esm({
146798
147045
  "src/lib/installation-label.ts"() {
@@ -150688,7 +150935,7 @@ async function unsetFlyTigrisSecrets(options, appName) {
150688
150935
  }
150689
150936
  function verifyFlyDeployment(inventory, previousReleases, expectedRepository, expectedDigest) {
150690
150937
  const latestRelease = inventory.releases.reduce(
150691
- (latest2, release) => !latest2 || release.version > latest2.version ? release : latest2,
150938
+ (latest, release) => !latest || release.version > latest.version ? release : latest,
150692
150939
  void 0
150693
150940
  );
150694
150941
  const releaseIsNew = latestRelease !== void 0 && !previousReleases.some(
@@ -150701,7 +150948,7 @@ function verifyFlyDeployment(inventory, previousReleases, expectedRepository, ex
150701
150948
  }
150702
150949
  function isInterruptedFlyDeployment(inventory, expectedRepository, expectedDigest) {
150703
150950
  const latestRelease = inventory.releases.reduce(
150704
- (latest2, release) => !latest2 || release.version > latest2.version ? release : latest2,
150951
+ (latest, release) => !latest || release.version > latest.version ? release : latest,
150705
150952
  void 0
150706
150953
  );
150707
150954
  const machine = inventory.machines[0];
@@ -150709,7 +150956,7 @@ function isInterruptedFlyDeployment(inventory, expectedRepository, expectedDiges
150709
150956
  }
150710
150957
  function verifyExistingFlyDeployment(inventory, expectedRepository, expectedDigest) {
150711
150958
  const latestRelease = inventory.releases.reduce(
150712
- (latest2, release) => !latest2 || release.version > latest2.version ? release : latest2,
150959
+ (latest, release) => !latest || release.version > latest.version ? release : latest,
150713
150960
  void 0
150714
150961
  );
150715
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) {
@@ -152642,7 +152889,7 @@ async function waitForFlyMachineLeases(options) {
152642
152889
  }
152643
152890
  }
152644
152891
  async function latestLeaseEnd(options) {
152645
- let latest2;
152892
+ let latest;
152646
152893
  for (const machineId of options.machineIds) {
152647
152894
  let lease;
152648
152895
  try {
@@ -152653,10 +152900,10 @@ async function latestLeaseEnd(options) {
152653
152900
  }
152654
152901
  if (!lease) continue;
152655
152902
  if (lease.expiresAtMs !== null && lease.expiresAtMs <= options.now()) continue;
152656
- if (lease.expiresAtMs === null || latest2 === null) latest2 = null;
152657
- 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);
152658
152905
  }
152659
- return latest2;
152906
+ return latest;
152660
152907
  }
152661
152908
  async function heldLeaseMinutes(options) {
152662
152909
  const ends = await latestLeaseEnd({
@@ -153752,7 +153999,7 @@ function provesFreshStage(inventory, baseline) {
153752
153999
  function runtimeEvidence(inventory) {
153753
154000
  const machine = inventory.machines[0];
153754
154001
  const release = inventory.releases.reduce(
153755
- (latest2, value) => !latest2 || value.version > latest2.version ? value : latest2,
154002
+ (latest, value) => !latest || value.version > latest.version ? value : latest,
153756
154003
  void 0
153757
154004
  );
153758
154005
  const address = inventory.addresses[0];
@@ -155571,8 +155818,8 @@ function formatCommunityRecovery(journal) {
155571
155818
  Console: https://fly.io/apps/${selection.appName}
155572
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
155573
155820
  ].filter((row2) => row2 !== null);
155574
- const pending2 = journal.pendingIntent;
155575
- 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";
155576
155823
  const reconciliation = tigrisKeysMissing ? selection ? [
155577
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.`,
155578
155825
  `1. Open the bucket's Tigris console: fly storage dashboard ${selection.bucketName} --app ${selection.appName}`,
@@ -155581,12 +155828,12 @@ function formatCommunityRecovery(journal) {
155581
155828
  " then type two lines, AWS_ACCESS_KEY_ID=<key id> and AWS_SECRET_ACCESS_KEY=<secret>, and press Ctrl-D.",
155582
155829
  " (Typing them keeps the secret out of your shell history.)",
155583
155830
  "4. Resume with the command below."
155584
- ].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
155585
- 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
155586
- 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}
155587
- 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;
155588
155835
  const command = resumeCommand(journal);
155589
- 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"];
155590
155837
  const nextStep = journal.pendingRemoval ? [
155591
155838
  "Next: finish the removal that is in progress with:",
155592
155839
  ` dorkos community deploy --remove-uncertain ${journal.runId}`
@@ -155740,7 +155987,7 @@ async function runCommunityDispatcher(args, context2) {
155740
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}`
155741
155988
  );
155742
155989
  }
155743
- let latest2 = resumeJournal;
155990
+ let latest = resumeJournal;
155744
155991
  let selection;
155745
155992
  try {
155746
155993
  const appName = required2(parsed.values["app-name"], "--app-name");
@@ -155756,9 +156003,9 @@ async function runCommunityDispatcher(args, context2) {
155756
156003
  bucketName: parsed.values["bucket-name"] ?? appName
155757
156004
  };
155758
156005
  } catch (error63) {
155759
- if (latest2) {
156006
+ if (latest) {
155760
156007
  process.stderr.write(`Space setup stopped.
155761
- ${formatCommunityRecovery(latest2)}
156008
+ ${formatCommunityRecovery(latest)}
155762
156009
  `);
155763
156010
  }
155764
156011
  throw error63;
@@ -155851,7 +156098,7 @@ Journal: ${journalPath}
155851
156098
  if (parsed.values.resume) {
155852
156099
  const existing = resumeJournal;
155853
156100
  assertCommunityLaunchPlanUnchanged(existing, result2.plan);
155854
- latest2 = existing;
156101
+ latest = existing;
155855
156102
  }
155856
156103
  await confirmOwnerClipboardWrite(
155857
156104
  localEnv,
@@ -155860,28 +156107,28 @@ Journal: ${journalPath}
155860
156107
  cancellation.signal
155861
156108
  );
155862
156109
  if (!parsed.values.resume) {
155863
- latest2 = createInitialCommunityLaunchJournal(
156110
+ latest = createInitialCommunityLaunchJournal(
155864
156111
  runId,
155865
156112
  result2.plan,
155866
156113
  (/* @__PURE__ */ new Date()).toISOString()
155867
156114
  );
155868
- await initializeLaunchJournal(journalPath, latest2);
156115
+ await initializeLaunchJournal(journalPath, latest);
155869
156116
  }
155870
- 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");
155871
156118
  const persist3 = async (next, expectedRevision) => {
155872
156119
  await writeLaunchJournal(journalPath, next, expectedRevision);
155873
- latest2 = next;
156120
+ latest = next;
155874
156121
  };
155875
156122
  process.stdout.write(
155876
156123
  "Provisioning Fly, Neon, and private Tigris resources. Progress is saved after each verified identity.\n"
155877
156124
  );
155878
- latest2 = await executeCommunityCreationPhase(
156125
+ latest = await executeCommunityCreationPhase(
155879
156126
  result2.plan,
155880
- latest2,
156127
+ latest,
155881
156128
  createDefaultCommunityCreationDependencies({
155882
156129
  options: serviceOptions,
155883
156130
  plan: result2.plan,
155884
- latestJournal: () => latest2,
156131
+ latestJournal: () => latest,
155885
156132
  persist: persist3,
155886
156133
  now: () => (/* @__PURE__ */ new Date()).toISOString(),
155887
156134
  progress: (service) => process.stdout.write(`Checking ${service} resource identity\u2026
@@ -155898,21 +156145,21 @@ Journal: ${journalPath}
155898
156145
  );
155899
156146
  const deployed = await executeCommunityDeployPhase(
155900
156147
  result2.plan,
155901
- latest2,
156148
+ latest,
155902
156149
  createDefaultCommunityDeployDependencies({
155903
156150
  options: serviceOptions,
155904
156151
  plan: result2.plan,
155905
- latestJournal: () => latest2,
156152
+ latestJournal: () => latest,
155906
156153
  persist: persist3,
155907
156154
  now: () => (/* @__PURE__ */ new Date()).toISOString(),
155908
156155
  resolvePlatformDigest: platformDigest
155909
156156
  })
155910
156157
  );
155911
- latest2 = deployed.journal;
156158
+ latest = deployed.journal;
155912
156159
  process.stdout.write("Verifying the owner handoff and final deployment health\u2026\n");
155913
- latest2 = await executeCommunityOwnerHandoff(
156160
+ latest = await executeCommunityOwnerHandoff(
155914
156161
  result2.plan,
155915
- latest2,
156162
+ latest,
155916
156163
  deployed.bootstrapSecret,
155917
156164
  createDefaultCommunityOwnerDependencies({
155918
156165
  options: serviceOptions,
@@ -155921,13 +156168,13 @@ Journal: ${journalPath}
155921
156168
  persist: persist3,
155922
156169
  now: () => (/* @__PURE__ */ new Date()).toISOString(),
155923
156170
  signal: cancellation.signal,
155924
- platformDigest: async () => latest2?.imagePlatformDigest ?? platformDigest()
156171
+ platformDigest: async () => latest?.imagePlatformDigest ?? platformDigest()
155925
156172
  })
155926
156173
  );
155927
156174
  process.stdout.write(
155928
- latest2.state === "complete" ? `${formatCommunityCompletion(`https://${result2.plan.fly.appName}.fly.dev`)}
156175
+ latest.state === "complete" ? `${formatCommunityCompletion(`https://${result2.plan.fly.appName}.fly.dev`)}
155929
156176
  ` : `Space setup is waiting for owner completion.
155930
- ${formatCommunityRecovery(latest2)}
156177
+ ${formatCommunityRecovery(latest)}
155931
156178
  `
155932
156179
  );
155933
156180
  }
@@ -155935,33 +156182,33 @@ ${formatCommunityRecovery(latest2)}
155935
156182
  );
155936
156183
  return 0;
155937
156184
  } catch (error63) {
155938
- if (latest2 && cancellation.signal.aborted && !latest2.pendingRemoval) {
155939
- 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";
155940
156187
  const cancelled = {
155941
- ...latest2,
155942
- revision: latest2.revision + 1,
155943
- state: uncertain ? "uncertain" : latest2.state,
156188
+ ...latest,
156189
+ revision: latest.revision + 1,
156190
+ state: uncertain ? "uncertain" : latest.state,
155944
156191
  lastSafeError: uncertain ? { category: "uncertain", code: "CREATION_OUTCOME_UNCERTAIN" } : { category: "transient", code: "CANCELLED" },
155945
156192
  updatedAt: (/* @__PURE__ */ new Date()).toISOString()
155946
156193
  };
155947
- await writeLaunchJournal(journalPath, cancelled, latest2.revision).catch(() => void 0);
155948
- latest2 = cancelled;
156194
+ await writeLaunchJournal(journalPath, cancelled, latest.revision).catch(() => void 0);
156195
+ latest = cancelled;
155949
156196
  }
155950
- const failed = latest2 && !cancellation.signal.aborted && !(error63 instanceof CommunityCreationRefusedError) ? recordLaunchFailure(latest2, error63, (/* @__PURE__ */ new Date()).toISOString()) : null;
155951
- if (latest2 && failed) {
155952
- 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;
155953
156200
  await writeLaunchJournal(journalPath, failed, previous.revision).catch(() => void 0);
155954
- latest2 = failed;
156201
+ latest = failed;
155955
156202
  }
155956
- if (error63 instanceof CommunityCreationRefusedError && latest2) {
155957
- await stopForRefusedCreate(error63, latest2, journalPath, childEnv, formatCommunityRecovery);
156203
+ if (error63 instanceof CommunityCreationRefusedError && latest) {
156204
+ await stopForRefusedCreate(error63, latest, journalPath, childEnv, formatCommunityRecovery);
155958
156205
  }
155959
- if (latest2) {
156206
+ if (latest) {
155960
156207
  process.stderr.write(`Space setup stopped.
155961
- ${formatCommunityRecovery(latest2)}
156208
+ ${formatCommunityRecovery(latest)}
155962
156209
  `);
155963
- if (cancellation.signal.aborted && !latest2.pendingRemoval) {
155964
- process.stderr.write(`${describeStoppedLaunch(latest2)}
156210
+ if (cancellation.signal.aborted && !latest.pendingRemoval) {
156211
+ process.stderr.write(`${describeStoppedLaunch(latest)}
155965
156212
  `);
155966
156213
  return stopExitCode(stopSignal);
155967
156214
  }
@@ -160416,7 +160663,7 @@ var init_internal_adapter = __esm({
160416
160663
  field: "identifier",
160417
160664
  value: id
160418
160665
  }];
160419
- const latest2 = (await txAdapter.findMany({
160666
+ const latest = (await txAdapter.findMany({
160420
160667
  model: "verification",
160421
160668
  where,
160422
160669
  sortBy: {
@@ -160425,16 +160672,16 @@ var init_internal_adapter = __esm({
160425
160672
  },
160426
160673
  limit: 1
160427
160674
  }))[0] ?? null;
160428
- if (!latest2) return null;
160675
+ if (!latest) return null;
160429
160676
  return consumeOneWithHooks("verification", [{
160430
160677
  field: "id",
160431
- value: latest2.id
160678
+ value: latest.id
160432
160679
  }], async () => {
160433
160680
  const row2 = await txAdapter.consumeOne({
160434
160681
  model: "verification",
160435
160682
  where: [{
160436
160683
  field: "id",
160437
- value: latest2.id
160684
+ value: latest.id
160438
160685
  }]
160439
160686
  });
160440
160687
  if (!row2) return null;
@@ -160443,7 +160690,7 @@ var init_internal_adapter = __esm({
160443
160690
  where
160444
160691
  });
160445
160692
  return row2;
160446
- }, latest2);
160693
+ }, latest);
160447
160694
  }));
160448
160695
  for (const stored of identifiersToTry) {
160449
160696
  consumed = await consumeByIdentifier(stored);
@@ -174680,7 +174927,6 @@ var init_connection_copy = __esm({
174680
174927
  var CONNECTOR_OPERATION_SELECTION_LIMIT, CONNECTOR_AUTHENTICATION_FLOW_TTL_MS, CONNECTOR_EVENT_REVIEW_SCOPE_LIMIT, ConnectorJsonValueSchema, ConnectorJsonObjectSchema, ConnectorProviderInstanceIdSchema, ConnectionIdSchema, ConnectorExternalAccountRefSchema, ConnectorProviderModeSchema, ConnectorProviderHealthSchema, ConnectorGrantReconciliationStatusSchema, ConnectorOperationClassificationSchema, ConnectorAccessLevelSchema, ConnectorRetryPolicySchema, ConnectorOperationRevisionSchema, ConnectorOperationPageSchema, ConnectorCapabilityAvailabilitySchema, ConnectorUnsupportedResultSchema, ConnectorProviderCapabilitySetSchema, ConnectorToolkitVersionResultSchema, ConnectorProviderExecuteResultSchema, ConnectorAuthenticationFlowSchema, ConnectorExecutionTargetSchema, ConnectorProgramExecutionRequestSchema, ConnectorExecutionPublicResultSchema, ConnectorExecutionResponseSchema, ConnectionReadinessStateSchema, ConnectionReadinessReasonSchema, ConnectionFixActionSchema, ConnectionFixSchema, ConnectionReadinessSchema, AccessibleConnectorConnectionSchema, AccessibleConnectorOperationSchema, ConnectorAccessibleConnectionsResponseSchema, ConnectorAccessibleOperationsResponseSchema, ConnectorUsageItemSchema, ConnectorUsagePageSchema, ConnectorReconciliationPreviewRequestSchema, ConnectorReconciliationGrantSelectionSchema, ConnectorReconciliationEveryAgentSelectionSchema, ConnectorReconciliationEveryAgentStateSchema, ConnectorEveryAgentRevokeResponseSchema, ConnectorReconciliationAgentSchema, ConnectorReconciliationCandidateSchema, ConnectorReconciliationPreviewSchema, ConnectorReconciliationApplyRequestSchema, ConnectorReconciliationApplyResponseSchema, ReviewActionBaseSchema, ConnectionTargetSchema, ConnectorRequestAccessSchema, ConnectorReviewActionSchema, ConnectorAgentConnectionRequestInputSchema, ConnectorAgentRequestBaseSchema, ConnectorRequestNotGrantedSchema, ConnectorAgentRequestStatusSchema, ConnectorAgentRequestItemSchema, ConnectorAgentRequestListResponseSchema, ConnectorManagementConnectActionSchema, ConnectorManagementAppliedActionSchema, ConnectorManagementReviewActionSchema, ConnectorManagementReviewCreateRequestSchema, ConnectorManagementReviewOutcomeSchema, ConnectorManagementReviewOperationContextSchema, ConnectorManagementReviewConnectionContextSchema, ConnectorManagementReviewAgentContextSchema, ConnectorManagementReviewContextSchema, ManagementReviewItemBaseShape, ConnectorPendingManagementReviewItemSchema, ConnectorResolvingManagementReviewItemSchema, ConnectorExpiredManagementReviewItemSchema, ConnectorDeniedManagementReviewItemSchema, ConnectorApprovedAppliedManagementReviewItemSchema, ConnectorApprovedConnectManagementReviewItemSchema, ConnectorApprovedUnknownManagementReviewItemSchema, ConnectorManagementReviewItemSchema, ProgramReviewStatusBaseShape, ConnectorProgramReviewStatusSchema, ConnectorManagementReviewDecisionSchema, ConnectorManagementReviewDecisionResultSchema;
174681
174928
  var init_connector_schemas = __esm({
174682
174929
  "../connector-providers/src/connector-schemas.ts"() {
174683
- "use strict";
174684
174930
  init_zod();
174685
174931
  init_connection_copy();
174686
174932
  CONNECTOR_OPERATION_SELECTION_LIMIT = 1e5;
@@ -177971,14 +178217,14 @@ function suggestedFilename(disposition, roomId) {
177971
178217
  }
177972
178218
  async function streamExport(body, destination, closeDestination) {
177973
178219
  const decoder2 = new TextDecoder();
177974
- let pending2 = "";
178220
+ let pending = "";
177975
178221
  let lastLine = "";
177976
178222
  const watched = async function* watch() {
177977
178223
  for await (const chunk of Readable.fromWeb(body)) {
177978
178224
  const bytes = chunk;
177979
- pending2 += decoder2.decode(bytes, { stream: true });
177980
- const parts = pending2.split("\n");
177981
- pending2 = parts.pop() ?? "";
178225
+ pending += decoder2.decode(bytes, { stream: true });
178226
+ const parts = pending.split("\n");
178227
+ pending = parts.pop() ?? "";
177982
178228
  for (const part of parts) if (part.trim()) lastLine = part;
177983
178229
  yield bytes;
177984
178230
  }
@@ -177990,7 +178236,7 @@ async function streamExport(body, destination, closeDestination) {
177990
178236
  reason = err instanceof Error ? err.message : String(err);
177991
178237
  }
177992
178238
  try {
177993
- const trailing = pending2.trim() || lastLine;
178239
+ const trailing = pending.trim() || lastLine;
177994
178240
  const parsed = JSON.parse(trailing);
177995
178241
  if (parsed.type === "summary" && typeof parsed.entryCount === "number") {
177996
178242
  if (reason === null) return { entryCount: parsed.entryCount, reason: null };
@@ -180510,6 +180756,7 @@ var MAX_FEEDBACK_SESSION_ID_LEN = 128;
180510
180756
  var MAX_FEEDBACK_SCREENSHOT_DATA_URL_LEN = 85e4;
180511
180757
  var MAX_REPORTER_NAME_LEN = 128;
180512
180758
  var MAX_TRANSCRIPT_LEN = 2e4;
180759
+ var MAX_FEEDBACK_ROOM_ID_LEN = 128;
180513
180760
  var MAX_LOG_EXCERPT_LEN = 8e3;
180514
180761
  var MAX_BREADCRUMBS = 50;
180515
180762
  var MAX_BREADCRUMB_MESSAGE_LEN = 300;
@@ -180630,6 +180877,8 @@ var FeedbackSubmissionSchema = external_exports.object({
180630
180877
  contact: external_exports.string().min(1).max(MAX_FEEDBACK_CONTACT_LEN).optional(),
180631
180878
  route: external_exports.string().min(1).max(MAX_FEEDBACK_ROUTE_LEN).optional(),
180632
180879
  sessionId: external_exports.string().min(1).max(MAX_FEEDBACK_SESSION_ID_LEN).optional(),
180880
+ roomId: external_exports.string().min(1).max(MAX_FEEDBACK_ROOM_ID_LEN).optional(),
180881
+ roomThroughSeq: external_exports.number().int().min(1).optional(),
180633
180882
  diagnostics: FeedbackDiagnosticsSchema.optional(),
180634
180883
  transcriptExcerpt: external_exports.string().max(MAX_TRANSCRIPT_LEN).optional(),
180635
180884
  screenshot: FeedbackScreenshotSchema.optional(),
@@ -180898,7 +181147,7 @@ if (process.argv[2] === "community") {
180898
181147
  );
180899
181148
  Object.assign(childEnv, credentialEnv.pickCommunityCredentialEnv(rawProcessEnv));
180900
181149
  const exitCode = await dispatcher.runCommunityDispatcher(process.argv.slice(3), {
180901
- cliVersion: "0.128.0",
181150
+ cliVersion: "0.130.0",
180902
181151
  dorkHome: DORK_HOME,
180903
181152
  processEnv: childEnv,
180904
181153
  parseRelease: (bytes) => releaseContract.parseCompatibleCommunityReleaseManifest(
@@ -180906,7 +181155,7 @@ if (process.argv[2] === "community") {
180906
181155
  {
180907
181156
  platform: { os: "linux", architecture: "amd64" },
180908
181157
  configSchemaVersion: releaseContract.COMMUNITY_CONFIG_SCHEMA_VERSION,
180909
- migrationCompatibilityId: "sha256:913dcdd9f86a45c66ba3752d59cf3585a5a3d2a73a841137ffe22fa8a052fd89"
181158
+ migrationCompatibilityId: "sha256:58cd9b9199646a5a3dff5317d98138fd846b48aa00e874fe0beadc2ed039073b"
180910
181159
  }
180911
181160
  )
180912
181161
  });
@@ -180916,7 +181165,7 @@ if (process.argv[2] === "community") {
180916
181165
  process.exit(1);
180917
181166
  }
180918
181167
  }
180919
- var cliErrorReporter = initCliErrorReporting({ dorkHome: DORK_HOME, version: "0.128.0" });
181168
+ var cliErrorReporter = initCliErrorReporting({ dorkHome: DORK_HOME, version: "0.130.0" });
180920
181169
  var uninstallCliErrorHandlers = cliErrorReporter ? installCliErrorHandlers(cliErrorReporter) : void 0;
180921
181170
  if (process.argv[2] === "doctor") {
180922
181171
  process.env.DORK_HOME = DORK_HOME;
@@ -180926,7 +181175,7 @@ if (process.argv[2] === "doctor") {
180926
181175
  if (process.argv[2] === "feedback") {
180927
181176
  process.env.DORK_HOME = DORK_HOME;
180928
181177
  const { runFeedback: runFeedback2 } = await Promise.resolve().then(() => (init_feedback2(), feedback_exports));
180929
- process.exit(await runFeedback2(DORK_HOME, "0.128.0", process.argv.slice(3)));
181178
+ process.exit(await runFeedback2(DORK_HOME, "0.130.0", process.argv.slice(3)));
180930
181179
  }
180931
181180
  if (process.argv[2] === "auth") {
180932
181181
  process.env.DORK_HOME = DORK_HOME;
@@ -181025,7 +181274,7 @@ if (process.argv[2] === "agent" || process.argv[2] === "task" || process.argv[2]
181025
181274
  }
181026
181275
  }
181027
181276
  const { runVersionDispatcher: runVersionDispatcher2 } = await Promise.resolve().then(() => (init_version5(), version_exports));
181028
- process.exit(await runVersionDispatcher2("0.128.0", DORK_HOME, subArgs));
181277
+ process.exit(await runVersionDispatcher2("0.130.0", DORK_HOME, subArgs));
181029
181278
  }
181030
181279
  var { values, positionals } = parseCliArgs();
181031
181280
  if (positionals[0] && !knownCommands.has(positionals[0])) {
@@ -181119,14 +181368,14 @@ Examples:
181119
181368
  process.exit(0);
181120
181369
  }
181121
181370
  if (values.version) {
181122
- console.log("0.128.0");
181371
+ console.log("0.130.0");
181123
181372
  process.exit(0);
181124
181373
  }
181125
181374
  if (values["post-install-check"]) {
181126
181375
  const claudeFound = checkClaude();
181127
181376
  const coreExtensionsFound = checkCoreExtensions();
181128
181377
  const extensionsCompile = await checkExtensionCompilation();
181129
- console.log(`dorkos ${"0.128.0"}`);
181378
+ console.log(`dorkos ${"0.130.0"}`);
181130
181379
  if (!coreExtensionsFound) {
181131
181380
  console.log("Installation incomplete \u2014 bundled core extensions are missing.");
181132
181381
  }
@@ -181273,7 +181522,7 @@ if (fs42.existsSync(envPath)) {
181273
181522
  dotenv.config({ path: envPath, override: false });
181274
181523
  }
181275
181524
  uninstallCliErrorHandlers?.();
181276
- stampCliLaunch(process.env, fileURLToPath7(import.meta.url), "0.128.0");
181525
+ stampCliLaunch(process.env, fileURLToPath7(import.meta.url), "0.130.0");
181277
181526
  var server;
181278
181527
  try {
181279
181528
  server = await import("../server/index.js");
@@ -181298,7 +181547,7 @@ var ansiReset = "\x1B[0m";
181298
181547
  console.log("");
181299
181548
  console.log(`${purple}${logo}${ansiReset}`);
181300
181549
  console.log("");
181301
- console.log(` DorkOS v${"0.128.0"}`);
181550
+ console.log(` DorkOS v${"0.130.0"}`);
181302
181551
  console.log(` Local: ${link(localUrl, localUrl)}`);
181303
181552
  var nets = networkInterfaces();
181304
181553
  var networkUrl = null;
@@ -181324,9 +181573,9 @@ if (shouldOpenBrowser && process.stdin.isTTY) {
181324
181573
  const openCmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
181325
181574
  exec(`${openCmd} ${localUrl}`);
181326
181575
  }
181327
- checkForUpdate("0.128.0").then((latestVersion) => {
181576
+ checkForUpdate("0.130.0").then((latestVersion) => {
181328
181577
  if (latestVersion) {
181329
- const msg = `Update available: ${"0.128.0"} \u2192 ${latestVersion}`;
181578
+ const msg = `Update available: ${"0.130.0"} \u2192 ${latestVersion}`;
181330
181579
  const cmd = "Run npm install -g dorkos@latest to update";
181331
181580
  const width = Math.max(msg.length, cmd.length) + 6;
181332
181581
  const pad2 = (s2) => `\u2502 ${s2}${" ".repeat(width - s2.length - 6)} \u2502`;