ryco-cli 0.1.23 → 0.1.25

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 (305) hide show
  1. package/dist/{AcpNativeLogging-COepku4a.cjs → AcpNativeLogging-CA6XYzIS.cjs} +1 -1
  2. package/dist/{AcpNativeLogging-D7e1dn7s.mjs → AcpNativeLogging-D4-VoHrq.mjs} +1 -1
  3. package/dist/{AzureDevOpsSourceControlProvider-BNGEg1R8.mjs → AzureDevOpsSourceControlProvider-B_E0XXfD.mjs} +2 -2
  4. package/dist/{AzureDevOpsSourceControlProvider-CrvgKNf2.cjs → AzureDevOpsSourceControlProvider-COmd21c-.cjs} +2 -2
  5. package/dist/{BitbucketSourceControlProvider-BzhsQwH-.cjs → BitbucketSourceControlProvider-CD8IvXQK.cjs} +2 -2
  6. package/dist/{BitbucketSourceControlProvider-Bt21jw68.mjs → BitbucketSourceControlProvider-pUKsNXcg.mjs} +2 -2
  7. package/dist/{ClaudeDriver-C4yu7Jit.mjs → ClaudeDriver-CGifBixr.mjs} +2 -2
  8. package/dist/{ClaudeDriver-B7mbf51W.cjs → ClaudeDriver-Dry5uJfX.cjs} +2 -2
  9. package/dist/{CodexDriver-CR0S17Lb.cjs → CodexDriver-BzR8gA8w.cjs} +3 -3
  10. package/dist/{CodexDriver-DnnqkGoY.mjs → CodexDriver-V4CL9APE.mjs} +3 -3
  11. package/dist/{CodexTextGeneration-tlfe1S5W.cjs → CodexTextGeneration-DTrSzY-I.cjs} +1 -1
  12. package/dist/{CodexTextGeneration-Cw-FZbSS.mjs → CodexTextGeneration-DoCidwvI.mjs} +1 -1
  13. package/dist/{CopilotDriver-GxKLX5pL.mjs → CopilotDriver-Dt13X60f.mjs} +3 -3
  14. package/dist/{CopilotDriver-IBd27Ji2.cjs → CopilotDriver-rLcA8PSN.cjs} +3 -3
  15. package/dist/{CursorDriver-C4Enoe9N.cjs → CursorDriver-C3s-8s9F.cjs} +3 -3
  16. package/dist/{CursorDriver-CNo9Uzo8.mjs → CursorDriver-HIPUs7cz.mjs} +3 -3
  17. package/dist/{ForgejoSourceControlProvider-BGXysSX6.mjs → ForgejoSourceControlProvider-CmvOAzEG.mjs} +2 -2
  18. package/dist/{ForgejoSourceControlProvider-Dh6DOoc8.cjs → ForgejoSourceControlProvider-JgiyrMqp.cjs} +2 -2
  19. package/dist/{GitHubSourceControlProvider-CPCYV8Xo.mjs → GitHubSourceControlProvider-BYuvbcBf.mjs} +2 -2
  20. package/dist/{GitHubSourceControlProvider-8hsv_kCE.cjs → GitHubSourceControlProvider-CItCpOcC.cjs} +2 -2
  21. package/dist/{GitLabSourceControlProvider-B0ZbF9Zx.cjs → GitLabSourceControlProvider-CMce22nU.cjs} +2 -2
  22. package/dist/{GitLabSourceControlProvider-Bvknpaon.mjs → GitLabSourceControlProvider-DZzEaVSi.mjs} +2 -2
  23. package/dist/{GrokDriver-DSPEmiwq.mjs → GrokDriver-CduUwiOH.mjs} +3 -3
  24. package/dist/{GrokDriver-RyyFeh_q.cjs → GrokDriver-D0jraOC_.cjs} +3 -3
  25. package/dist/{OpenCodeDriver-0q44rSQX.mjs → OpenCodeDriver-Bz_uJdMA.mjs} +2 -2
  26. package/dist/{OpenCodeDriver-CDcvPT9v.cjs → OpenCodeDriver-DxGpgtDS.cjs} +2 -2
  27. package/dist/{SourceControlProviderDiscoveryCatalog-DreaAH1H.cjs → SourceControlProviderDiscoveryCatalog-Dm_lhrhv.cjs} +1 -1
  28. package/dist/{SourceControlProviderDiscoveryCatalog-B37RHe2u.mjs → SourceControlProviderDiscoveryCatalog-ZtwPWoxE.mjs} +1 -1
  29. package/dist/bin.cjs +518 -263
  30. package/dist/bin.mjs +519 -264
  31. package/dist/client/assets/AccountSettings-Bv57-JYy.js +1 -0
  32. package/dist/client/assets/AiFocusSettings-DCPHmJpA.js +1 -0
  33. package/dist/client/assets/{AnimatedHeight-D9bpLPqe.js → AnimatedHeight-DPqb09B0.js} +1 -1
  34. package/dist/client/assets/AppearanceSettings-EmTrtb_U.js +1 -0
  35. package/dist/client/assets/BranchToolbar.logic-CHRK3hDt.js +1 -0
  36. package/dist/client/assets/BrowserPanel-2Xu08il5.js +1 -0
  37. package/dist/client/assets/ChatRightPanel-C1VD6GCV.js +194 -0
  38. package/dist/client/assets/ChatThreadRouteView-CNww3i2J.js +1 -0
  39. package/dist/client/assets/CommandPaletteDialog-B_f3fKp7.js +1 -0
  40. package/dist/client/assets/CompositeRoot-B40iitmH.js +1 -0
  41. package/dist/client/assets/ComputerUseSettings-BJs7jqR0.js +1 -0
  42. package/dist/client/assets/ConnectionsSettings-B9nfvgLG.js +7 -0
  43. package/dist/client/assets/ContextHandoffEndpointLabel-BSQOArMR.js +4 -0
  44. package/dist/client/assets/DiagnosticsSettings-BmrqOKMe.js +2 -0
  45. package/dist/client/assets/DialogHandle-pelzaaiH.js +1 -0
  46. package/dist/client/assets/DialogPopup-BLM0vN4N.js +1 -0
  47. package/dist/client/assets/DialogRoot-CY6ZzEUS.js +1 -0
  48. package/dist/client/assets/DialogTitle-BvIjMtMm.js +1 -0
  49. package/dist/client/assets/DialogTrigger-CIeVAA-a.js +1 -0
  50. package/dist/client/assets/DialogViewport-Cz0OadGI.js +1 -0
  51. package/dist/client/assets/DraftChatThreadRouteView-DMIGMESb.js +1 -0
  52. package/dist/client/assets/{ExternalIdentityWeb.logic-pjD4pCDd.js → ExternalIdentityWeb.logic-3rlDV7lT.js} +1 -1
  53. package/dist/client/assets/GlassSurface-CEVIdyfP.js +1 -0
  54. package/dist/client/assets/HostedConnectionControls-r9cyZPyF.js +1 -0
  55. package/dist/client/assets/HostedHubRoot-BkfafJ5x.js +2 -0
  56. package/dist/client/assets/HostedNativeAuthorizationRoute-CqHuW853.js +2 -0
  57. package/dist/client/assets/HostedNodeRenameDialog-C7m-nvTj.js +1 -0
  58. package/dist/client/assets/HostedRelayTrustNotice-DNZQyAX0.js +1 -0
  59. package/dist/client/assets/IntegrationsSettingsPanel-hul3ysgL.js +2 -0
  60. package/dist/client/assets/KeybindingsSettings-Cme6omBM.js +7 -0
  61. package/dist/client/assets/LazyBrowserPanel-COJFwNK7.js +2 -0
  62. package/dist/client/assets/McpServersSettings-CPeNF8_u.js +6 -0
  63. package/dist/client/assets/MobileSheet-BZo-RAfm.js +1 -0
  64. package/dist/client/assets/NodeSecuritySettings-CwT5nEW9.js +1 -0
  65. package/dist/client/assets/OpinionatedPluginsSettings-D8A1CbMG.js +1 -0
  66. package/dist/client/assets/PhoneGetAppInterstitial-BBnGXVkR.js +1 -0
  67. package/dist/client/assets/PhoneHome-BTKOPVjw.js +1 -0
  68. package/dist/client/assets/PhoneSettingsSurface-DdVCndyt.js +2 -0
  69. package/dist/client/assets/ProviderModelPicker-DoYEUZrn.js +1 -0
  70. package/dist/client/assets/ProvidersSettingsPanel-ldDCPVIY.js +1 -0
  71. package/dist/client/assets/QuitShortcutFeedback-mF7X0WMD.js +1 -0
  72. package/dist/client/assets/RedactedSensitiveText-DovqFcmM.js +1 -0
  73. package/dist/client/assets/RootAppShell-CzmEWO9w.js +7 -0
  74. package/dist/client/assets/Separator-BhAVTIOc.js +1 -0
  75. package/dist/client/assets/SettingsDialog-ByXgBN0U.js +2 -0
  76. package/dist/client/assets/SettingsPanels-Bgf4vkrJ.js +3 -0
  77. package/dist/client/assets/SettingsPanels.editor-d-rVlbeN.js +1 -0
  78. package/dist/client/assets/SourceControlSettings-dKw0FaN1.js +1 -0
  79. package/dist/client/assets/StatisticsPage-C2RuqDIK.js +1 -0
  80. package/dist/client/assets/StatisticsPanel-DqoXnrhQ.js +1 -0
  81. package/dist/client/assets/StatisticsSettingsLink-C_f31sb4.js +1 -0
  82. package/dist/client/assets/{ThreadTerminalDrawer-DcZk76Y9.js → ThreadTerminalDrawer-DaLrSTn9.js} +11 -11
  83. package/dist/client/assets/ThreadWorkspacePanel-BvRZIxZQ.js +2073 -0
  84. package/dist/client/assets/activity-bn_fBQGf.js +1 -0
  85. package/dist/client/assets/alert-BmLJh6DH.js +1 -0
  86. package/dist/client/assets/{appChrome-CiOQzE1d.js → appChrome-Dy57Ve9N.js} +1 -1
  87. package/dist/client/assets/arrow-left-pzj1cbX3.js +1 -0
  88. package/dist/client/assets/arrow-right-BW5jU-vo.js +1 -0
  89. package/dist/client/assets/arrow-up-right-AfC5AaSO.js +1 -0
  90. package/dist/client/assets/authorization-7xVVtCBu.js +1 -0
  91. package/dist/client/assets/badge-DnBuGHGL.js +1 -0
  92. package/dist/client/assets/bot-CsKkSRlb.js +1 -0
  93. package/dist/client/assets/{capabilities-BTd0MRtv.js → capabilities-DskyVNd2.js} +1 -1
  94. package/dist/client/assets/chart-column-DhvWXIiH.js +1 -0
  95. package/dist/client/assets/chevron-right-CITtTwME.js +1 -0
  96. package/dist/client/assets/clipboard-copy-fJnfdl4H.js +1 -0
  97. package/dist/client/assets/data-list-_E-Al1sf.js +1 -0
  98. package/dist/client/assets/desktopWorkspace-DycXKuMm.js +1 -0
  99. package/dist/client/assets/download-CLQzE1di.js +1 -0
  100. package/dist/client/assets/editorPreferences-Bg624RVT.js +1 -0
  101. package/dist/client/assets/empty-YXFtCUDN.js +1 -0
  102. package/dist/client/assets/group-DOCkUmuY.js +1 -0
  103. package/dist/client/assets/hostedConnectionCoordinator-JZ1dLx4v.js +1 -0
  104. package/dist/client/assets/{hostedPairing-PogXRAb7.js → hostedPairing-B_ylEEDa.js} +1 -1
  105. package/dist/client/assets/hubRoutes-C2S5of9_.js +1 -0
  106. package/dist/client/assets/{index-D5j6WG7w.js → index-CvRFRkBK.js} +2 -2
  107. package/dist/client/assets/input-C2xv8mMt.js +1 -0
  108. package/dist/client/assets/kbd-4-4mGdIa.js +1 -0
  109. package/dist/client/assets/key-round-CYcb9lAa.js +1 -0
  110. package/dist/client/assets/layers-CGlOWYxu.js +1 -0
  111. package/dist/client/assets/log-out-CZW2EpNJ.js +1 -0
  112. package/dist/client/assets/{logging-DfaR8ACp.js → logging-BpmZOfmu.js} +1 -1
  113. package/dist/client/assets/main-CC-U8LrA.css +2 -0
  114. package/dist/client/assets/main-CzDOnLFw.js +9 -0
  115. package/dist/client/assets/palette-CQOuNfSO.js +1 -0
  116. package/dist/client/assets/play-CPVy9wwV.js +1 -0
  117. package/dist/client/assets/primary-CjhRI8fe.js +2 -0
  118. package/dist/client/assets/providerDriverMeta-BVHpFupf.js +1 -0
  119. package/dist/client/assets/providerModels-BsybzP4P.js +1 -0
  120. package/dist/client/assets/{qr-code-Bun4dpvz.js → qr-code-BPqDlVMn.js} +1 -1
  121. package/dist/client/assets/qr-code-C6BVTc4V.js +1 -0
  122. package/dist/client/assets/radio-group-C8qudOQH.js +2 -0
  123. package/dist/client/assets/refresh-cw-B5Cz1z3e.js +1 -0
  124. package/dist/client/assets/runtime-Bxg7k81u.js +17 -0
  125. package/dist/client/assets/save-C7zM6ey6.js +1 -0
  126. package/dist/client/assets/scroll-area-5OU_pvTW.js +1 -0
  127. package/dist/client/assets/scrollEdges-qnEXfIOg.js +1 -0
  128. package/dist/client/assets/separator-B5HfRiaO.js +1 -0
  129. package/dist/client/assets/settingsLayout-CfKq88KD.js +1 -0
  130. package/dist/client/assets/sheet-B9gQDy_I.js +1 -0
  131. package/dist/client/assets/shield-alert-7yBlEyOs.js +1 -0
  132. package/dist/client/assets/shield-check-CnKgVJ0F.js +1 -0
  133. package/dist/client/assets/shield-rdjnBE2Q.js +1 -0
  134. package/dist/client/assets/sidebar-BdvL1Pbj.js +1 -0
  135. package/dist/client/assets/sidebarProjectFolders-BH8XBqNe.js +4 -0
  136. package/dist/client/assets/sidebarStatusText-CZKsUFBD.js +1 -0
  137. package/dist/client/assets/skeleton-CoyLqyaB.js +1 -0
  138. package/dist/client/assets/smartphone-CBgpMHXR.js +1 -0
  139. package/dist/client/assets/sparkles-w-UZXQx1.js +1 -0
  140. package/dist/client/assets/src-Bi-5Nw9C.js +14 -0
  141. package/dist/client/assets/star-BZ-RtSFD.js +1 -0
  142. package/dist/client/assets/switch-CEJEmLe7.js +48 -0
  143. package/dist/client/assets/toastHelpers-CSQRKo4F.js +1 -0
  144. package/dist/client/assets/toggle-DVGrNHjq.js +1 -0
  145. package/dist/client/assets/toggle-group-CNDOfNhH.js +1 -0
  146. package/dist/client/assets/tokenModePresentation-CQNdC9CW.js +1 -0
  147. package/dist/client/assets/tooltip-B7Z4qomY.js +1 -0
  148. package/dist/client/assets/unplug-CRUwFNFw.js +1 -0
  149. package/dist/client/assets/useAppSidebarCollapsed-wq6czkNJ.js +1 -0
  150. package/dist/client/assets/useBaseUiId-OYaGjnkh.js +1 -0
  151. package/dist/client/assets/useLabelableId-VMc-yITe.js +1 -0
  152. package/dist/client/assets/useNavigate-DVi0rBlf.js +1 -0
  153. package/dist/client/assets/usePhoneThreadActions-CwwHikjB.js +1 -0
  154. package/dist/client/assets/usePopupViewport-BcSIK_ph.js +1 -0
  155. package/dist/client/assets/useScrollLock-BQf9VYJT.js +1 -0
  156. package/dist/client/assets/{useStatistics-DfLU9_Qu.js → useStatistics-DczKdEfy.js} +15 -15
  157. package/dist/client/assets/useTriggerFocusGuards-DjP-D0_a.js +1 -0
  158. package/dist/client/assets/useValueChanged-CRwCkFdy.js +1 -0
  159. package/dist/client/assets/user-round-DStbWN3z.js +1 -0
  160. package/dist/client/assets/{vscode-icons-Dgo7Sslf.js → vscode-icons-BihBo3tb.js} +1 -1
  161. package/dist/client/assets/{workspaceMetadataProjection-UiprkDbH.js → workspaceMetadataProjection-j3BGlVOB.js} +1 -1
  162. package/dist/client/assets/wrench-BBIgGxy9.js +1 -0
  163. package/dist/client/index.html +1 -1
  164. package/dist/{collectUint8StreamText-C_VNyArd.mjs → collectUint8StreamText-CE1Re5Ij.mjs} +41 -3
  165. package/dist/{collectUint8StreamText-DStwNTTK.cjs → collectUint8StreamText-whblCEfg.cjs} +52 -2
  166. package/dist/{makeManagedServerProvider-GZcpSLrW.mjs → makeManagedServerProvider-CwYhl_P-.mjs} +1 -1
  167. package/dist/{makeManagedServerProvider-VzxWN-04.cjs → makeManagedServerProvider-Dy2Ny9tk.cjs} +1 -1
  168. package/dist/resource-monitor/ryco-resource-monitor +0 -0
  169. package/dist/resource-monitor/ryco-resource-monitor.exe +0 -0
  170. package/dist/resource-monitor/win32-arm64/ryco-resource-monitor.exe +0 -0
  171. package/dist/resource-monitor/win32-x64/ryco-resource-monitor.exe +0 -0
  172. package/package.json +1 -1
  173. package/dist/client/assets/AccountSettings-DGvZzAqN.js +0 -1
  174. package/dist/client/assets/AiFocusSettings-D8wZfNES.js +0 -1
  175. package/dist/client/assets/AppearanceSettings-BFo6g6_s.js +0 -1
  176. package/dist/client/assets/BranchToolbar.logic-CmO2U1U7.js +0 -1
  177. package/dist/client/assets/BrowserPanel-r6is5C3e.js +0 -1
  178. package/dist/client/assets/ChatRightPanel-BewXBRFZ.js +0 -194
  179. package/dist/client/assets/ChatThreadRouteView-CC_6FmHd.js +0 -1
  180. package/dist/client/assets/CommandPaletteDialog-ftA_Xg2G.js +0 -1
  181. package/dist/client/assets/CompositeRoot-arlgwzfX.js +0 -1
  182. package/dist/client/assets/ComputerUseSettings-V-oMtddy.js +0 -1
  183. package/dist/client/assets/ConnectionsSettings-BrFvrRjz.js +0 -7
  184. package/dist/client/assets/ContextHandoffEndpointLabel-CPeU4K5A.js +0 -4
  185. package/dist/client/assets/DiagnosticsSettings-Dk3JaIOU.js +0 -2
  186. package/dist/client/assets/DialogHandle-00ZXxxpz.js +0 -1
  187. package/dist/client/assets/DialogPopup-mazVJKyB.js +0 -1
  188. package/dist/client/assets/DialogRoot-CWlzx19Z.js +0 -1
  189. package/dist/client/assets/DialogTitle-CKaEtTky.js +0 -1
  190. package/dist/client/assets/DialogTrigger-CiElTNmo.js +0 -1
  191. package/dist/client/assets/DialogViewport-a5beR5bY.js +0 -1
  192. package/dist/client/assets/DraftChatThreadRouteView-DMwnSfgh.js +0 -1
  193. package/dist/client/assets/FloatingPortalLite-DWdtHKob.js +0 -1
  194. package/dist/client/assets/GlassSurface-BqfxDYiR.js +0 -1
  195. package/dist/client/assets/HostedConnectionControls-BmJd89CC.js +0 -1
  196. package/dist/client/assets/HostedHubRoot-CRIiJ67A.js +0 -2
  197. package/dist/client/assets/HostedNativeAuthorizationRoute-DcksCt9n.js +0 -2
  198. package/dist/client/assets/HostedRelayTrustNotice-C9pl5h2a.js +0 -1
  199. package/dist/client/assets/IntegrationsSettingsPanel-BnfjyLrM.js +0 -2
  200. package/dist/client/assets/KeybindingsSettings-CkW7lzvz.js +0 -7
  201. package/dist/client/assets/LazyBrowserPanel-C6uMUmoV.js +0 -2
  202. package/dist/client/assets/McpServersSettings-BdXgS-Pm.js +0 -6
  203. package/dist/client/assets/MobileSheet-D19YdeQ9.js +0 -1
  204. package/dist/client/assets/NodeSecuritySettings-BfcBgtEg.js +0 -1
  205. package/dist/client/assets/OpinionatedPluginsSettings-YY54IT7P.js +0 -1
  206. package/dist/client/assets/PhoneGetAppInterstitial-9r6NwJP8.js +0 -1
  207. package/dist/client/assets/PhoneHome-DnEJp0bU.js +0 -1
  208. package/dist/client/assets/PhoneSettingsSurface-NKJrLCxU.js +0 -2
  209. package/dist/client/assets/ProviderModelPicker-CYGv-4fE.js +0 -1
  210. package/dist/client/assets/ProvidersSettingsPanel-DsXHij4h.js +0 -1
  211. package/dist/client/assets/QuitShortcutFeedback-BVyYaNtd.js +0 -1
  212. package/dist/client/assets/RedactedSensitiveText-D8j7kpow.js +0 -1
  213. package/dist/client/assets/RootAppShell-D7c8sbA0.js +0 -7
  214. package/dist/client/assets/Separator-Bn8l1oSK.js +0 -1
  215. package/dist/client/assets/SettingsDialog-BlPX1mT8.js +0 -2
  216. package/dist/client/assets/SettingsPanels-CeuvwIV_.js +0 -3
  217. package/dist/client/assets/SettingsPanels.editor-CLJJeKLI.js +0 -1
  218. package/dist/client/assets/SourceControlSettings-D-GeZ6PW.js +0 -1
  219. package/dist/client/assets/StatisticsPage-poomFDoQ.js +0 -1
  220. package/dist/client/assets/StatisticsPanel-DbGgCCpZ.js +0 -1
  221. package/dist/client/assets/StatisticsSettingsLink-Brc9--O7.js +0 -1
  222. package/dist/client/assets/ThreadWorkspacePanel-Shhau2BD.js +0 -2073
  223. package/dist/client/assets/activity-Dy-wOS-S.js +0 -1
  224. package/dist/client/assets/alert-4WZo8oMe.js +0 -1
  225. package/dist/client/assets/arrow-left-gLRAasih.js +0 -1
  226. package/dist/client/assets/arrow-right-CAK2t4QL.js +0 -1
  227. package/dist/client/assets/arrow-up-right-DP0hmMEB.js +0 -1
  228. package/dist/client/assets/authorization-K_UCP_xh.js +0 -1
  229. package/dist/client/assets/badge-CYDyJZRJ.js +0 -1
  230. package/dist/client/assets/bot-CCrx5oCt.js +0 -1
  231. package/dist/client/assets/button-QrCU0tNP.js +0 -1
  232. package/dist/client/assets/chart-column-BvK6lSzG.js +0 -1
  233. package/dist/client/assets/chevron-down-yka18-iP.js +0 -1
  234. package/dist/client/assets/chevron-right-CHyIXx5W.js +0 -1
  235. package/dist/client/assets/clamp-D0kAXd-u.js +0 -1
  236. package/dist/client/assets/clipboard-copy-DfdkWOiT.js +0 -1
  237. package/dist/client/assets/copy-riIPLkKV.js +0 -1
  238. package/dist/client/assets/data-list-CsiYTho5.js +0 -1
  239. package/dist/client/assets/download-B0lbSdq5.js +0 -1
  240. package/dist/client/assets/editorPreferences-Cf2Smgu1.js +0 -1
  241. package/dist/client/assets/empty-CHk0OiOB.js +0 -1
  242. package/dist/client/assets/group-DfFZdj79.js +0 -1
  243. package/dist/client/assets/hostedConnectionCoordinator-DZh1yVqz.js +0 -1
  244. package/dist/client/assets/input-BAC5Cd3b.js +0 -1
  245. package/dist/client/assets/kbd-CMUW8K7b.js +0 -1
  246. package/dist/client/assets/key-round-Cm6itp2V.js +0 -1
  247. package/dist/client/assets/layers-DoDpJao_.js +0 -1
  248. package/dist/client/assets/loader-circle-D0CNb5GI.js +0 -1
  249. package/dist/client/assets/log-out-BuoOiS45.js +0 -1
  250. package/dist/client/assets/main-CRk9p9SC.css +0 -2
  251. package/dist/client/assets/main-DaXSCt8g.js +0 -9
  252. package/dist/client/assets/monitor-Dyigmrl2.js +0 -1
  253. package/dist/client/assets/palette-kIM_geXk.js +0 -1
  254. package/dist/client/assets/play-Dh8XDMnw.js +0 -1
  255. package/dist/client/assets/primary-DjXNHNGV.js +0 -2
  256. package/dist/client/assets/providerDriverMeta-Cl-ADdmZ.js +0 -1
  257. package/dist/client/assets/providerModels-dpugJUmV.js +0 -1
  258. package/dist/client/assets/qr-code-CkI1p05P.js +0 -1
  259. package/dist/client/assets/radio-group-Hh0oQGyf.js +0 -2
  260. package/dist/client/assets/react-dom-x9LNwWQc.js +0 -1
  261. package/dist/client/assets/refresh-cw-MqmsC7V0.js +0 -1
  262. package/dist/client/assets/runtime-L56puJDA.js +0 -17
  263. package/dist/client/assets/save-BSB81i-r.js +0 -1
  264. package/dist/client/assets/scroll-area-DCGCzd6v.js +0 -1
  265. package/dist/client/assets/scrollEdges-DIzjkUJG.js +0 -1
  266. package/dist/client/assets/separator-YeH3P39x.js +0 -1
  267. package/dist/client/assets/settingsLayout-CmNqO2kB.js +0 -1
  268. package/dist/client/assets/settingsSections.logic-Bg960p_I.js +0 -1
  269. package/dist/client/assets/sheet-CTbjQ5Bv.js +0 -1
  270. package/dist/client/assets/shield-DlqCO-0N.js +0 -1
  271. package/dist/client/assets/shield-alert-BrZ-Rb8N.js +0 -1
  272. package/dist/client/assets/shield-check-DHxdM6te.js +0 -1
  273. package/dist/client/assets/sidebar-4cwEndEB.js +0 -1
  274. package/dist/client/assets/sidebarProjectFolders-C7WDwUYJ.js +0 -4
  275. package/dist/client/assets/sidebarStatusText-Cq_MMykN.js +0 -1
  276. package/dist/client/assets/skeleton-BlostfCS.js +0 -1
  277. package/dist/client/assets/smartphone-OaA-Xj_d.js +0 -1
  278. package/dist/client/assets/sparkles-BXwkPX2M.js +0 -1
  279. package/dist/client/assets/src-gDjuIvMO.js +0 -14
  280. package/dist/client/assets/star-BjaAYD-x.js +0 -1
  281. package/dist/client/assets/switch-COrEGDkz.js +0 -48
  282. package/dist/client/assets/toast-C_F1LeME.js +0 -1
  283. package/dist/client/assets/toggle-BPNEBXg_.js +0 -1
  284. package/dist/client/assets/toggle-group-BC1zJ9xi.js +0 -1
  285. package/dist/client/assets/tokenModePresentation-DUJ8DMTy.js +0 -1
  286. package/dist/client/assets/tooltip-iy3_osu5.js +0 -1
  287. package/dist/client/assets/triangle-alert-YXqtFxD6.js +0 -1
  288. package/dist/client/assets/unplug-e3z4rXgY.js +0 -1
  289. package/dist/client/assets/useAppSidebarCollapsed-mtvJ7qbW.js +0 -1
  290. package/dist/client/assets/useLabelableId-NJQsKdL6.js +0 -1
  291. package/dist/client/assets/useNavigate-2tVq4iZ2.js +0 -1
  292. package/dist/client/assets/usePhoneThreadActions-97AsVVIR.js +0 -1
  293. package/dist/client/assets/usePopupViewport-8OM2irPK.js +0 -1
  294. package/dist/client/assets/usePositioner-0Kb-C4al.js +0 -1
  295. package/dist/client/assets/useRenderElement-D0HVF5g_.js +0 -1
  296. package/dist/client/assets/useRouter-CcIDS3PN.js +0 -1
  297. package/dist/client/assets/useScrollLock-AUqaSAkf.js +0 -1
  298. package/dist/client/assets/useSwipeDismiss-CcW-GPO_.js +0 -1
  299. package/dist/client/assets/useTriggerFocusGuards-ChBvppef.js +0 -1
  300. package/dist/client/assets/useValueChanged-CThCTn4h.js +0 -1
  301. package/dist/client/assets/user-round-evbX_eto.js +0 -1
  302. package/dist/client/assets/utils-5-6TOrS1.js +0 -1
  303. package/dist/client/assets/visuallyHidden-BRaogTVF.js +0 -1
  304. package/dist/client/assets/wrench-mA--bcId.js +0 -1
  305. package/dist/client/assets/x-_SjFRYll.js +0 -1
package/dist/bin.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { $ as AgentControlExternalCapabilitiesResult, $a as ProviderInstanceId, $i as ThreadMessageSentPayload, $n as UsageReadError, $o as CheckpointRef, $r as OrchestrationActorKind, $t as AgentControlMcpReadDeviceStateResult, A as AGENT_CONTROL_EXTERNAL_MCP_TOOL_NAMES, Aa as WORK_ITEM_DETAIL_COMMENT_BODY_MAX_BYTES, Ai as PROVIDER_SEND_TURN_MAX_FILE_BYTES, An as AtlassianCapability, Ao as RELAY_AUTHENTICATION_DEADLINE_MS, Ar as CHAT_ATTACHMENT_READ_CHUNK_BYTES, At as AgentControlMcpOrchestrationEventsResult, B as AGENT_CONTROL_MCP_WAIT_TIMEOUT_MS_DEFAULT, Bi as ProjectionPendingApprovalStatus, Bn as McpInventoryTool, Bo as RelayEffectiveRole, Br as ContextHandoffActivityPayload, Bt as AgentControlMcpProposeDeviceOpenUrlInput, C as AGENT_CONTROL_AUTOMATION_MIN_INTERVAL_MS, Ca as WorktreeSourceControlStateUpdatedPayload$1, Ci as OrchestrationStopBackgroundTaskError, Cn as DEVICE_SWIPE_DURATION_MAX_MS, Co as NATIVE_E2EE_MAX_GRANT_KEYS, Cr as ProviderRespondToUserInputInput, Ct as AgentControlMcpListDevicesResult, D as AGENT_CONTROL_ERROR_CODES, Da as WorktreeId, Di as OrchestrationThreadHistoryError, Dn as ThreadPriorityBatchSnapshot, Do as HubEnrollmentStartResult, Dr as ProviderStopBackgroundTaskInput, Dt as AgentControlMcpListThreadsResult, E as AGENT_CONTROL_DEVICE_ACTION_KINDS, Ea as Worktree, Ei as OrchestrationThreadHistoryCursor, En as DeviceUdid, Eo as HubEnrollmentCeremonyDetail, Er as ProviderSteerTurnInput, Et as AgentControlMcpListThreadsInput, F as AGENT_CONTROL_MCP_OPERATIONAL_RANGE_MAX_MS, Fa as SourceControlRepositoryError, Fi as ProjectDeletedPayload$1, Fn as GitCommandError, Fo as RELAY_MAX_RETRY_AFTER_MS, Fr as CONTEXT_HANDOFF_MAX_INPUT_CHARS, Ft as AgentControlMcpProposeDeviceBootInput, G as AgentControlActionKind, Ga as ThreadPriorityFingerprint, Gi as ThreadActivityAppendedPayload$1, Gn as McpServer, Go as AuthCreatePairingCredentialInput, Gr as ContextHandoffMode, Gt as AgentControlMcpProposeProjectUpdateInput, H as AGENT_CONTROL_RISK_TAGS, Ha as VcsUnsupportedOperationError, Hi as ProviderInteractionMode, Hn as McpOauthLoginResult, Ho as RelayProtocolVersion, Hr as ContextHandoffDigest, Ht as AgentControlMcpProposeDeviceShutdownInput, I as AGENT_CONTROL_MCP_OPERATIONAL_RETENTION_MS, Ii as ProjectMetaUpdatedPayload$1, In as GitManagerError, Io as RELAY_MAX_RPC_MESSAGE_BYTES, Ir as CONTEXT_HANDOFF_WS_METHODS, It as AgentControlMcpProposeDeviceDetachInput, J as AgentControlAutomationDefinition, Ja as DEFAULT_GIT_TEXT_GENERATION_OPTIONS_BY_PROVIDER, Ji as ThreadCreatedPayload$1, Jn as McpServerWritableConfig, Jo as AuthRpcError, Jr as DEFAULT_PROVIDER_INTERACTION_MODE, Jt as AgentControlMcpReadAutomationInput, K as AgentControlActionPlan, Ki as ThreadArchivedPayload$1, Kn as McpServerConfig, Ko as AuthRevokeClientSessionInput, Kr as DEFAULT_AGENT_TOKEN_MODE, Kt as AgentControlMcpProposeSettingsChangeInput, L as AGENT_CONTROL_MCP_READ_THREAD_TEXT_BUDGET_CHARS, La as VcsDriverKind, Li as ProjectMetadataDir, Ln as TextGenerationError, Lo as RELAY_SUPPORTED_VERSION_RANGE, Lr as ChatAttachment, Lt as AgentControlMcpProposeDeviceInputInput, M as AGENT_CONTROL_EXTERNAL_PROPOSAL_TTL_MS, Ma as WorkItemProviderKind, Mi as PROVIDER_SEND_TURN_MAX_INPUT_CHARS, Mn as AtlassianConnectionKind, Mo as RELAY_MAX_CONTROL_FRAME_BYTES, Mr as CONTEXT_HANDOFF_ERROR_MAX_CHARS, Mt as AgentControlMcpProposeAutomationCreateInput, N as AGENT_CONTROL_MCP_AUTOMATION_LIST_PROMPT_MAX_CHARS, Ni as ProjectAvatarSetPayload$1, Nn as AtlassianConnectionStatus, Nr as CONTEXT_HANDOFF_INSPECTION_CHUNK_MAX_BYTES, Nt as AgentControlMcpProposeAutomationUpdateInput, O as AGENT_CONTROL_EXTERNAL_CREDENTIAL_AUDIENCE, Oa as ThreadGoal, Oi as OrchestrationWorktreeShell, On as ThreadPriorityCandidateRanking, Oo as HubIdentitySummary, Or as ProviderStopSessionInput, Ot as AgentControlMcpMutationResult, P as AGENT_CONTROL_MCP_MESSAGE_TEXT_MAX_CHARS, Pa as SourceControlProviderError, Pi as ProjectCreatedPayload$1, Pn as AtlassianProduct, Po as RELAY_MAX_DATA_FRAME_BYTES, Pt as AgentControlMcpProposeDeviceAttachInput, Q as AgentControlCapability, Qa as ProviderDriverKind, Qi as ThreadInteractionModeSetPayload$1, Qn as OpinionatedPluginError, Qo as AuthSessionId, Qr as ORCHESTRATION_WS_METHODS, Qt as AgentControlMcpReadDeviceStateInput, R as AGENT_CONTROL_MCP_TOOLS, Ri as ProjectScript, Rn as McpInventoryResource, Ro as RelayCapability, Rr as ChatAttachmentReadError, Rt as AgentControlMcpProposeDeviceInstallInput, S as AGENT_CONTROL_AUTOMATION_MAX_HORIZON_MS, Sa as WorktreeRestoredPayload$1, Si as OrchestrationShellSnapshot, Sn as DEVICE_FRAME_MAGIC, So as HubDeviceGrantClaims, Sr as ProviderRespondToRequestInput, St as AgentControlMcpListDevicesInput, T as AGENT_CONTROL_CAPABILITIES, Ta as StatusBucket, Ti as OrchestrationThreadActivityTone, Tn as DeviceRpcError, To as HubConnectorStatus, Tr as ProviderSessionStartInput, Tt as AgentControlMcpListProjectsResult, U as AGENT_CONTROL_TERMINAL_PROPOSAL_STATUSES, Ua as ThreadPriorityBatchId, Ui as ProviderSessionRuntimeStatus, Un as McpProviderCapabilities, Uo as AuthBootstrapInput, Ur as ContextHandoffEndpointSnapshot, Ut as AgentControlMcpProposeProjectCreateInput, V as AGENT_CONTROL_MCP_WAIT_TIMEOUT_MS_MAX, Vn as McpListServersResult, Vo as RelayFrame, Vr as ContextHandoffAppliedBudget, Vt as AgentControlMcpProposeDeviceRecordingInput, W as AGENT_CONTROL_WS_METHODS, Wa as ThreadPriorityCandidateId, Wi as RuntimeMode, Wn as McpProviderSupport, Wo as AuthClientMetadataDeviceType, Wr as ContextHandoffInspectionError, Wt as AgentControlMcpProposeProjectRemoveInput, X as AgentControlAutomationRun, Xa as MODEL_SLUG_ALIASES_BY_PROVIDER, Xi as ThreadGoalClearedPayload$1, Xn as McpWorkspace, Xo as AtlassianConnectionId, Xr as ModelContextWindowMetadata, Xt as AgentControlMcpReadControlRequestInput, Y as AgentControlAutomationId, Ya as DEFAULT_MODEL, Yi as ThreadDeletedPayload$1, Yn as McpSettingsError, Yo as ApprovalRequestId, Yr as FileAttachmentCreateUploadUrlError, Yt as AgentControlMcpReadAutomationResult, Z as AgentControlAutomationRunId, Za as ModelCapabilities, Zi as ThreadGoalUpdatedPayload$1, Zn as McpWorkspaceId, Zo as AtlassianResourceId, Zr as ModelSelection, Zt as AgentControlMcpReadDeviceContentInput, _ as ProjectReadFileError, _a as WorktreeArchivedPayload$1, _i as OrchestrationProposedPlanId, _n as AgentControlRequestId, _r as THREAD_JUMP_KEYBINDING_COMMANDS, _s as TurnId, _t as AgentControlMcpInterruptThreadInput, a as ComputerUseBridgeConfig, aa as ThreadSessionSetPayload$1, ai as OrchestrationDispatchCommandError, an as AgentControlMcpUpdateThreadInput, ao as TerminalNotRunningError, ar as CursorSettings, as as MessageId, at as AgentControlExternalTaskId, b as ProjectWriteFileError, ba as WorktreeManualPositionSetPayload$1, bi as OrchestrationSession, bn as AgentControlRpcError, bo as LocalIntroductionCompleteRequest, br as isToolLifecycleItemType, bt as AgentControlMcpListAutomationsInput, c as WS_METHODS, ca as ThreadSnoozedPayload, ci as OrchestrationEventType, cn as AgentControlOperationId, co as EDITORS, cr as OpenCodeSettings, cs as ProjectId, ct as AgentControlIntegrationId, d as WsRpcGroup, da as ThreadTurnDiffCompletedPayload$1, di as OrchestrationGetTaskOutputError, dn as AgentControlPlanDigest, do as DESKTOP_NATIVE_NODE_CLAIM_DESCRIPTOR_PATH, dr as ThreadEnvMode, dt as AgentControlMcpControlRequestResult, ea as ThreadMetaUpdatedPayload$1, ei as OrchestrationAggregateKind, en as AgentControlMcpReadThreadInput, eo as defaultInstanceIdForDriver, er as ServerProvider, es as CommandId, et as AgentControlExternalCreateTaskInput, f as FilesystemBrowseError, fa as ThreadTurnInterruptRequestedPayload$1, fi as OrchestrationGetTurnDiffError, fn as AgentControlPrincipal, fo as DESKTOP_NATIVE_NODE_CLAIM_MAX_BODY_BYTES, fr as KeybindingRule, fs as RuntimeSessionId, ft as AgentControlMcpCreateThreadsInput, g as ProjectReadFileBinaryError, ga as TurnDispatchMode, gi as OrchestrationMessageRole, gn as AgentControlProposalStatus, go as LOCAL_INTRODUCTION_COMPLETE_PATH, gr as ResolvedKeybindingRule, gs as TrimmedNonEmptyString, gt as AgentControlMcpInstallationId, h as ProjectListEntriesError, ha as ThreadUnsnoozedPayload, hi as OrchestrationMessage, hn as AgentControlProposalId, ho as DesktopNativeNodeClaimSignRequest, hr as MODEL_PICKER_JUMP_KEYBINDING_COMMANDS, hs as ThreadId, ht as AgentControlMcpInstallation, i as fromLenientJson, ia as ThreadRuntimeModeSetPayload$1, ii as OrchestrationCommandReceiptStatus, in as AgentControlMcpSettingsSummaryResult, io as TerminalHistoryError, ir as CopilotSettings, is as IsoDateTime, it as AgentControlExternalRpcError, j as AGENT_CONTROL_EXTERNAL_PAIRING_CODE_TTL_MS, ja as WorkItemProviderError, ji as PROVIDER_SEND_TURN_MAX_IMAGE_BYTES, jn as AtlassianConnectionError, jo as RELAY_FRAME_TYPES, jr as CONTEXT_HANDOFF_ACTIVITY_KIND, jt as AgentControlMcpProposeAutomationCancelInput, k as AGENT_CONTROL_EXTERNAL_MCP_TOOLS, ka as WORK_ITEM_DETAIL_BODY_MAX_BYTES, ki as PROVIDER_SEND_TURN_MAX_ATTACHMENT_TOTAL_BYTES, kn as ThreadPriorityRpcError, ko as HubGrantVerificationKeyId, kr as AgentTokenMode, kt as AgentControlMcpOperationalReadInput, l as WsDeviceRpcGroup, la as ThreadStatusBucketOverriddenPayload$1, li as OrchestrationGetFullThreadDiffError, ln as AgentControlOperationState, lo as OpenError, lr as ServerSettings, lt as AgentControlMcpCapabilitiesResult, ma as ThreadUnsettledPayload$1, mi as OrchestrationGetWorkflowScriptError, mn as AgentControlProposal, mo as DesktopNativeNodeClaimCommitRequest, mr as KeybindingsConfigError, mt as AgentControlMcpDiagnosticsSummaryResult, n as decodeJsonResult, na as ThreadProposedPlanUpsertedPayload$1, ni as OrchestrationCheckpointStatus, nn as AgentControlMcpRecentActivityResult, nr as ClaudeSettings, ns as EnvironmentId, nt as AgentControlExternalOverviewResult, o as ComputerUseRequest, oa as ThreadSettledPayload$1, oi as OrchestrationEvent, on as AgentControlMcpWaitForControlRequestInput, oo as TerminalSessionLookupError, or as DEFAULT_SERVER_SETTINGS, os as NonNegativeInt, ot as AgentControlExternalTaskIdInput, p as PROJECT_READ_FILE_BINARY_MAX_BYTES, pa as ThreadUnarchivedPayload$1, pi as OrchestrationGetTurnDiffResult, pn as AgentControlPromptSummary, po as DESKTOP_NATIVE_NODE_CLAIM_SIGN_PATH, pr as KeybindingsConfig, pt as AgentControlMcpDiagnosticsSummaryInput, q as AgentControlAutomation, qa as DEFAULT_GIT_TEXT_GENERATION_MODEL_BY_PROVIDER, qi as ThreadAttachedToWorktreePayload$1, qn as McpServerName, qo as AuthRevokePairingLinkInput, qr as DEFAULT_PROJECT_METADATA_DIR, qt as AgentControlMcpProviderRuntimeEventsResult, r as formatSchemaError, ra as ThreadRevertedPayload$1, ri as OrchestrationCheckpointSummary, rn as AgentControlMcpSendMessageInput, ro as TerminalCwdError, rr as CodexSettings, rs as EventId, rt as AgentControlExternalProjectScope, s as ComputerUseResult, sa as ThreadSettlementOverride, si as OrchestrationEventMetadata, sn as AgentControlOperation, so as TerminalSubscriptionResyncError, sr as GrokSettings, ss as PositiveInt, st as AgentControlExternalWaitForTaskInput, t as collectUint8StreamText, ta as ThreadPriorityProjectedRanking, ti as OrchestrationCheckpointFile, tn as AgentControlMcpReadThreadResult, to as isProviderDriverKind, tr as ServerProviderUpdateError, ts as ContextHandoffId, tt as AgentControlExternalIntegration, u as WsHostedRpcGroup, ua as ThreadTokenModeSetPayload$1, ui as OrchestrationGetSnapshotError, un as AgentControlOperationStatus, uo as DESKTOP_NATIVE_NODE_CLAIM_COMMIT_PATH, ur as ServerSettingsError, ut as AgentControlMcpContextResult, v as ProjectSearchEntriesError, va as WorktreeCreatedPayload$1, vi as OrchestrationReadModel, vn as AgentControlResultEnvelope, vo as LOCAL_INTRODUCTION_DESCRIPTOR_PATH, vr as RuntimeSubagentStatus, vt as AgentControlMcpListAutomationRunsInput, w as AGENT_CONTROL_AUTOMATION_PROPOSAL_TTL_MS, wa as PullRequestState, wi as OrchestrationThread, wn as DEVICE_WS_METHODS, wo as NodeE2eeAdmissionPolicy, wr as ProviderSendTurnInput, wt as AgentControlMcpListProjectsInput, x as AGENT_CONTROL_ACTION_CAPABILITIES, xa as WorktreeMetaUpdatedPayload$1, xi as OrchestrationSessionStatus, xn as DEVICE_CAPABILITY_LABELS, xo as HUB_DEVICE_GRANT_MAX_BYTES, xr as ProviderInterruptTurnInput, xt as AgentControlMcpListAutomationsResult, y as ProjectStageFileReferenceError, ya as WorktreeDeletedPayload$1, yi as OrchestrationReplayEventsError, yn as AgentControlRiskTag, yo as LOCAL_INTRODUCTION_MAX_BODY_BYTES, yr as ToolLifecycleItemType, yt as AgentControlMcpListAutomationRunsResult, z as AGENT_CONTROL_MCP_TOOL_NAMES, za as VcsProcessExitError, zi as ProjectionPendingApprovalDecision, zn as McpInventoryResourceTemplate, zo as RelayChannelId, zr as ClientOrchestrationCommand, zt as AgentControlMcpProposeDeviceLaunchInput } from "./collectUint8StreamText-C_VNyArd.mjs";
3
+ import { $ as AgentControlAutomationRunId, $a as ModelCapabilities, $i as ThreadGoalUpdatedPayload$1, $n as McpWorkspaceId, $o as AtlassianResourceId, $r as ModelSelection, $t as AgentControlMcpReadDeviceContentInput, A as AGENT_CONTROL_EXTERNAL_CREDENTIAL_AUDIENCE, Aa as ThreadGoal, Ai as OrchestrationWorktreeShell, An as ThreadPriorityCandidateRanking, Ao as HubIdentitySummary, Ar as ProviderStopSessionInput, At as AgentControlMcpMutationResult, B as AGENT_CONTROL_MCP_TOOLS, Bi as ProjectScript, Bn as McpInventoryResource, Bo as RelayCapability, Br as ChatAttachmentReadError, Bt as AgentControlMcpProposeDeviceInstallInput, C as AGENT_CONTROL_ACTION_CAPABILITIES, Ca as WorktreeMetaUpdatedPayload$1, Ci as OrchestrationSessionStatus, Cn as DEVICE_CAPABILITY_LABELS, Co as HUB_DEVICE_GRANT_MAX_BYTES, Cr as ProviderInterruptTurnInput, Ct as AgentControlMcpListAutomationsResult, D as AGENT_CONTROL_CAPABILITIES, Da as StatusBucket, Di as OrchestrationThreadActivityTone, Dn as DeviceRpcError, Do as HubConnectorStatus, Dr as ProviderSessionStartInput, Dt as AgentControlMcpListProjectsResult, E as AGENT_CONTROL_AUTOMATION_PROPOSAL_TTL_MS, Ea as PullRequestState, Ei as OrchestrationThread, En as DEVICE_WS_METHODS, Eo as NodeE2eeAdmissionPolicy, Er as ProviderSendTurnInput, Et as AgentControlMcpListProjectsInput, F as AGENT_CONTROL_MCP_AUTOMATION_LIST_PROMPT_MAX_CHARS, Fi as ProjectAvatarSetPayload$1, Fn as AtlassianConnectionStatus, Fr as CONTEXT_HANDOFF_INSPECTION_CHUNK_MAX_BYTES, Ft as AgentControlMcpProposeAutomationUpdateInput, G as AGENT_CONTROL_TERMINAL_PROPOSAL_STATUSES, Ga as ThreadPriorityBatchId, Gi as ProviderSessionRuntimeStatus, Gn as McpProviderCapabilities, Go as AuthBootstrapInput, Gr as ContextHandoffEndpointSnapshot, Gt as AgentControlMcpProposeProjectCreateInput, H as AGENT_CONTROL_MCP_WAIT_TIMEOUT_MS_DEFAULT, Hi as ProjectionPendingApprovalStatus, Hn as McpInventoryTool, Ho as RelayEffectiveRole, Hr as ContextHandoffActivityPayload, Ht as AgentControlMcpProposeDeviceOpenUrlInput, I as AGENT_CONTROL_MCP_MESSAGE_TEXT_MAX_CHARS, Ia as SourceControlProviderError, Ii as ProjectCreatedPayload$1, In as AtlassianProduct, Io as RELAY_MAX_DATA_FRAME_BYTES, It as AgentControlMcpProposeDeviceAttachInput, J as AgentControlActionPlan, Ji as ThreadArchivedPayload$1, Jn as McpServerConfig, Jo as AuthRevokeClientSessionInput, Jr as DEFAULT_AGENT_TOKEN_MODE, Jt as AgentControlMcpProposeSettingsChangeInput, K as AGENT_CONTROL_WS_METHODS, Ka as ThreadPriorityCandidateId, Ki as RuntimeMode, Kn as McpProviderSupport, Ko as AuthClientMetadataDeviceType, Kr as ContextHandoffInspectionError, Kt as AgentControlMcpProposeProjectRemoveInput, L as AGENT_CONTROL_MCP_OPERATIONAL_RANGE_MAX_MS, La as SourceControlRepositoryError, Li as ProjectDeletedPayload$1, Ln as GitCommandError, Lo as RELAY_MAX_RETRY_AFTER_MS, Lr as CONTEXT_HANDOFF_MAX_INPUT_CHARS, Lt as AgentControlMcpProposeDeviceBootInput, M as AGENT_CONTROL_EXTERNAL_MCP_TOOL_NAMES, Ma as WORK_ITEM_DETAIL_COMMENT_BODY_MAX_BYTES, Mi as PROVIDER_SEND_TURN_MAX_FILE_BYTES, Mn as AtlassianCapability, Mo as RELAY_AUTHENTICATION_DEADLINE_MS, Mr as CHAT_ATTACHMENT_READ_CHUNK_BYTES, Mt as AgentControlMcpOrchestrationEventsResult, N as AGENT_CONTROL_EXTERNAL_PAIRING_CODE_TTL_MS, Na as WorkItemProviderError, Ni as PROVIDER_SEND_TURN_MAX_IMAGE_BYTES, Nn as AtlassianConnectionError, No as RELAY_FRAME_TYPES, Nr as CONTEXT_HANDOFF_ACTIVITY_KIND, Nt as AgentControlMcpProposeAutomationCancelInput, O as AGENT_CONTROL_DEVICE_ACTION_KINDS, Oa as Worktree, Oi as OrchestrationThreadHistoryCursor, On as DeviceUdid, Oo as HubEnrollmentCeremonyDetail, Or as ProviderSteerTurnInput, Ot as AgentControlMcpListThreadsInput, P as AGENT_CONTROL_EXTERNAL_PROPOSAL_TTL_MS, Pa as WorkItemProviderKind, Pi as PROVIDER_SEND_TURN_MAX_INPUT_CHARS, Pn as AtlassianConnectionKind, Po as RELAY_MAX_CONTROL_FRAME_BYTES, Pr as CONTEXT_HANDOFF_ERROR_MAX_CHARS, Pt as AgentControlMcpProposeAutomationCreateInput, Q as AgentControlAutomationRun, Qa as MODEL_SLUG_ALIASES_BY_PROVIDER, Qi as ThreadGoalClearedPayload$1, Qn as McpWorkspace, Qo as AtlassianConnectionId, Qr as ModelContextWindowMetadata, Qt as AgentControlMcpReadControlRequestInput, R as AGENT_CONTROL_MCP_OPERATIONAL_RETENTION_MS, Ri as ProjectMetaUpdatedPayload$1, Rn as GitManagerError, Ro as RELAY_MAX_RPC_MESSAGE_BYTES, Rr as CONTEXT_HANDOFF_WS_METHODS, Rt as AgentControlMcpProposeDeviceDetachInput, S as ProjectWriteFileError, Sa as WorktreeManualPositionSetPayload$1, Si as OrchestrationSession, Sn as AgentControlRpcError, So as LocalIntroductionCompleteRequest, Sr as isToolLifecycleItemType, St as AgentControlMcpListAutomationsInput, T as AGENT_CONTROL_AUTOMATION_MIN_INTERVAL_MS, Ta as WorktreeSourceControlStateUpdatedPayload$1, Ti as OrchestrationStopBackgroundTaskError, Tn as DEVICE_SWIPE_DURATION_MAX_MS, To as NATIVE_E2EE_MAX_GRANT_KEYS, Tr as ProviderRespondToUserInputInput, Tt as AgentControlMcpListDevicesResult, U as AGENT_CONTROL_MCP_WAIT_TIMEOUT_MS_MAX, Un as McpListServersResult, Uo as RelayFrame, Ur as ContextHandoffAppliedBudget, Ut as AgentControlMcpProposeDeviceRecordingInput, V as AGENT_CONTROL_MCP_TOOL_NAMES, Va as VcsProcessExitError, Vi as ProjectionPendingApprovalDecision, Vn as McpInventoryResourceTemplate, Vo as RelayChannelId, Vr as ClientOrchestrationCommand, Vt as AgentControlMcpProposeDeviceLaunchInput, W as AGENT_CONTROL_RISK_TAGS, Wa as VcsUnsupportedOperationError, Wi as ProviderInteractionMode, Wn as McpOauthLoginResult, Wo as RelayProtocolVersion, Wr as ContextHandoffDigest, Wt as AgentControlMcpProposeDeviceShutdownInput, X as AgentControlAutomationDefinition, Xa as DEFAULT_GIT_TEXT_GENERATION_OPTIONS_BY_PROVIDER, Xi as ThreadCreatedPayload$1, Xn as McpServerWritableConfig, Xo as AuthRpcError, Xr as DEFAULT_PROVIDER_INTERACTION_MODE, Xt as AgentControlMcpReadAutomationInput, Y as AgentControlAutomation, Ya as DEFAULT_GIT_TEXT_GENERATION_MODEL_BY_PROVIDER, Yi as ThreadAttachedToWorktreePayload$1, Yn as McpServerName, Yo as AuthRevokePairingLinkInput, Yr as DEFAULT_PROJECT_METADATA_DIR, Yt as AgentControlMcpProviderRuntimeEventsResult, Z as AgentControlAutomationId, Za as DEFAULT_MODEL, Zi as ThreadDeletedPayload$1, Zn as McpSettingsError, Zo as ApprovalRequestId, Zr as FileAttachmentCreateUploadUrlError, Zt as AgentControlMcpReadAutomationResult, _ as ProjectReadFileBinaryError, _a as ThreadUnsnoozedPayload, _i as OrchestrationMessage, _n as AgentControlProposalId, _o as DesktopNativeNodeClaimSignRequest, _r as MODEL_PICKER_JUMP_KEYBINDING_COMMANDS, _s as ThreadId, _t as AgentControlMcpInstallation, a as ComputerUseBridgeConfig, aa as ThreadRevertedPayload$1, ai as OrchestrationCheckpointSummary, an as AgentControlMcpSendMessageInput, ao as TerminalCwdError, ar as CodexSettings, as as EventId, at as AgentControlExternalProjectScope, b as ProjectSearchEntriesError, ba as WorktreeCreatedPayload$1, bi as OrchestrationReadModel, bn as AgentControlResultEnvelope, bo as LOCAL_INTRODUCTION_DESCRIPTOR_PATH, br as RuntimeSubagentStatus, bt as AgentControlMcpListAutomationRunsInput, c as WS_METHODS, ca as ThreadSettledPayload$1, ci as OrchestrationEvent, cn as AgentControlMcpWaitForControlRequestInput, co as TerminalSessionLookupError, cr as DEFAULT_SERVER_SETTINGS, cs as NonNegativeInt, ct as AgentControlExternalTaskIdInput, d as WsRpcGroup, da as ThreadStatusBucketOverriddenPayload$1, di as OrchestrationGetFullThreadDiffError, dn as AgentControlOperationState, do as OpenError, dr as ServerSettings, dt as AgentControlMcpCapabilitiesResult, ea as ThreadInteractionModeSetPayload$1, ei as ORCHESTRATION_WS_METHODS, en as AgentControlMcpReadDeviceStateInput, eo as ProviderDriverKind, er as OpinionatedPluginError, es as AuthSessionId, et as AgentControlCapability, f as FilesystemBrowseError, fa as ThreadTokenModeSetPayload$1, fi as OrchestrationGetSnapshotError, fn as AgentControlOperationStatus, fo as DESKTOP_NATIVE_NODE_CLAIM_COMMIT_PATH, fr as ServerSettingsError, ft as AgentControlMcpContextResult, g as ProjectListEntriesError, ga as ThreadUnsettledPayload$1, gi as OrchestrationGetWorkflowScriptError, gn as AgentControlProposal, go as DesktopNativeNodeClaimCommitRequest, gr as KeybindingsConfigError, gt as AgentControlMcpDiagnosticsSummaryResult, ha as ThreadUnarchivedPayload$1, hi as OrchestrationGetTurnDiffResult, hn as AgentControlPromptSummary, ho as DESKTOP_NATIVE_NODE_CLAIM_SIGN_PATH, hr as KeybindingsConfig, ht as AgentControlMcpDiagnosticsSummaryInput, i as fromLenientJson, ia as ThreadProposedPlanUpsertedPayload$1, ii as OrchestrationCheckpointStatus, in as AgentControlMcpRecentActivityResult, ir as ClaudeSettings, is as EnvironmentId, it as AgentControlExternalOverviewResult, j as AGENT_CONTROL_EXTERNAL_MCP_TOOLS, ja as WORK_ITEM_DETAIL_BODY_MAX_BYTES, ji as PROVIDER_SEND_TURN_MAX_ATTACHMENT_TOTAL_BYTES, jn as ThreadPriorityRpcError, jo as HubGrantVerificationKeyId, jr as AgentTokenMode, jt as AgentControlMcpOperationalReadInput, k as AGENT_CONTROL_ERROR_CODES, ka as WorktreeId, ki as OrchestrationThreadHistoryError, kn as ThreadPriorityBatchSnapshot, ko as HubEnrollmentStartResult, kr as ProviderStopBackgroundTaskInput, kt as AgentControlMcpListThreadsResult, l as WsDeviceRpcGroup, la as ThreadSettlementOverride, li as OrchestrationEventMetadata, ln as AgentControlOperation, lo as TerminalSubscriptionResyncError, lr as GrokSettings, ls as PositiveInt, lt as AgentControlExternalWaitForTaskInput, m as PROJECT_READ_FILE_BINARY_MAX_BYTES, ma as ThreadTurnInterruptRequestedPayload$1, mi as OrchestrationGetTurnDiffError, mn as AgentControlPrincipal, mo as DESKTOP_NATIVE_NODE_CLAIM_MAX_BODY_BYTES, mr as KeybindingRule, ms as RuntimeSessionId, mt as AgentControlMcpCreateThreadsInput, n as decodeJsonResult, na as ThreadMetaUpdatedPayload$1, ni as OrchestrationAggregateKind, nn as AgentControlMcpReadThreadInput, no as defaultInstanceIdForDriver, nr as ServerProvider, ns as CommandId, nt as AgentControlExternalCreateTaskInput, o as ComputerUseRequest, oa as ThreadRuntimeModeSetPayload$1, oi as OrchestrationCommandReceiptStatus, on as AgentControlMcpSettingsSummaryResult, oo as TerminalHistoryError, or as CopilotSettings, os as IsoDateTime, ot as AgentControlExternalRpcError, pa as ThreadTurnDiffCompletedPayload$1, pi as OrchestrationGetTaskOutputError, pn as AgentControlPlanDigest, po as DESKTOP_NATIVE_NODE_CLAIM_DESCRIPTOR_PATH, pr as ThreadEnvMode, pt as AgentControlMcpControlRequestResult, q as AgentControlActionKind, qa as ThreadPriorityFingerprint, qi as ThreadActivityAppendedPayload$1, qn as McpServer, qo as AuthCreatePairingCredentialInput, qr as ContextHandoffMode, qt as AgentControlMcpProposeProjectUpdateInput, r as formatSchemaError, ra as ThreadPriorityProjectedRanking, ri as OrchestrationCheckpointFile, rn as AgentControlMcpReadThreadResult, ro as isProviderDriverKind, rr as ServerProviderUpdateError, rs as ContextHandoffId, rt as AgentControlExternalIntegration, s as ComputerUseResult, sa as ThreadSessionSetPayload$1, si as OrchestrationDispatchCommandError, sn as AgentControlMcpUpdateThreadInput, so as TerminalNotRunningError, sr as CursorSettings, ss as MessageId, st as AgentControlExternalTaskId, t as collectUint8StreamText, ta as ThreadMessageSentPayload, ti as OrchestrationActorKind, tn as AgentControlMcpReadDeviceStateResult, to as ProviderInstanceId, tr as UsageReadError, ts as CheckpointRef, tt as AgentControlExternalCapabilitiesResult, u as WsHostedRpcGroup, ua as ThreadSnoozedPayload, ui as OrchestrationEventType, un as AgentControlOperationId, uo as EDITORS, ur as OpenCodeSettings, us as ProjectId, ut as AgentControlIntegrationId, v as ProjectReadFileError, va as TurnDispatchMode, vi as OrchestrationMessageRole, vn as AgentControlProposalStatus, vo as LOCAL_INTRODUCTION_COMPLETE_PATH, vr as ResolvedKeybindingRule, vs as TrimmedNonEmptyString, vt as AgentControlMcpInstallationId, w as AGENT_CONTROL_AUTOMATION_MAX_HORIZON_MS, wa as WorktreeRestoredPayload$1, wi as OrchestrationShellSnapshot, wn as DEVICE_FRAME_MAGIC, wo as HubDeviceGrantClaims, wr as ProviderRespondToRequestInput, wt as AgentControlMcpListDevicesInput, x as ProjectStageFileReferenceError, xa as WorktreeDeletedPayload$1, xi as OrchestrationReplayEventsError, xn as AgentControlRiskTag, xo as LOCAL_INTRODUCTION_MAX_BODY_BYTES, xr as ToolLifecycleItemType, xt as AgentControlMcpListAutomationRunsResult, y as ProjectReadIconError, ya as WorktreeArchivedPayload$1, yi as OrchestrationProposedPlanId, yn as AgentControlRequestId, yo as LOCAL_INTRODUCTION_CONTROL_HEADER, yr as THREAD_JUMP_KEYBINDING_COMMANDS, ys as TurnId, yt as AgentControlMcpInterruptThreadInput, z as AGENT_CONTROL_MCP_READ_THREAD_TEXT_BUDGET_CHARS, za as VcsDriverKind, zi as ProjectMetadataDir, zn as TextGenerationError, zo as RELAY_SUPPORTED_VERSION_RANGE, zr as ChatAttachment, zt as AgentControlMcpProposeDeviceInputInput } from "./collectUint8StreamText-CE1Re5Ij.mjs";
4
4
  import { $ as normalizeGitRemoteUrl, A as runtimeQueueBlockedDuration, B as startupCommandGateQueueHighWater, C as providerStartupQueueHighWater, Ct as decode, D as providerTurnsTotal, E as providerTurnMetricAttributes, Et as Type, F as runtimeQueueHighWater, G as LocalDiagnosticsMetrics, H as terminalRestartsTotal, I as runtimeQueueOverflowsTotal, J as buildTemporaryWorktreeBranchName, K as LocalDiagnosticsMetricsLive, L as runtimeQueueRecoveriesTotal, M as runtimeQueueDepth, N as runtimeQueueDequeuesTotal, O as rpcRequestDuration, P as runtimeQueueEnqueuesTotal, Q as mergeGitStatusParts, R as startupCommandGateEnqueuesTotal, S as providerStartupQueueDepth, St as Tokeniser, T as providerTurnDuration, Tt as rfc8949EncodeOptions, U as terminalSessionsTotal, V as startupCommandGateQueueWaitDuration, W as withMetrics, X as detectSourceControlProviderFromGitRemoteUrl, Y as dedupeRemoteBranchesWithLocalMatches, Z as isTemporaryWorktreeBranch, _ as providerRuntimeEventsTotal, _t as encodeNodeKeyRotationTranscript, a as contextHandoffsTotal, at as DEFAULT_PORT, b as providerStaleStopTimeoutsTotal, bt as formatNodePublicKeyFingerprint, c as increment, ct as deriveServerPaths, d as orchestrationCommandAckDuration, dt as resolveManagedWorktreesRoot, et as resolveAutoFeatureBranchName, f as orchestrationCommandDuration, ft as resolveNodeE2eePolicyConfig, g as providerMetricAttributes, gt as encodeNodeAuthenticationTranscript, h as providerEventLogRecordsDroppedTotal, ht as encodeNativeNodeClaimTranscript, i as contextHandoffPreparationDuration, it as outcomeFromExit, j as runtimeQueueCoalescedTotal, k as rpcRequestsTotal, l as metricAttributes, lt as ensureServerDirectories, m as orchestrationEventsProcessedTotal, mt as canonicalizeHubOrigin, n as contextHandoffContextEntriesTotal, nt as sanitizeFeatureBranchName, o as gitCommandDuration, ot as RuntimeMode$1, p as orchestrationCommandsTotal, pt as resolveStaticDir, q as WORKTREE_BRANCH_PREFIX, r as contextHandoffDispatchDuration, rt as compactTraceAttributes, s as gitCommandsTotal, st as ServerConfig, t as contextHandoffContextBytesTotal, tt as sanitizeBranchFragment, u as metricNames, ut as resolveHubConnectorConfig, v as providerRuntimeStaleEventsTotal, vt as equalNodeIdentityBytes, w as providerStartupQueueWaitDuration, wt as encode, x as providerStartupAdmissionTotal, xt as normalizeHubNodeName, y as providerSessionsTotal, yt as fingerprintNodePublicKey, z as startupCommandGateQueueDepth } from "./Metrics-a1h4iBQi.mjs";
5
- import { a as makeForgejoDiscovery, c as sourceBranch, d as firstNonEmptyLine, f as probeSourceControlProvider, h as layer$21, i as makeBitbucketDiscovery, m as VcsProcess, n as githubDiscovery, o as SourceControlProvider, p as refineUnknownRemoteProvider, r as gitlabDiscovery, s as parseSourceControlOwnerRef, t as azureDevOpsDiscovery, u as detailFromCause } from "./SourceControlProviderDiscoveryCatalog-B37RHe2u.mjs";
5
+ import { a as makeForgejoDiscovery, c as sourceBranch, d as firstNonEmptyLine, f as probeSourceControlProvider, h as layer$21, i as makeBitbucketDiscovery, m as VcsProcess, n as githubDiscovery, o as SourceControlProvider, p as refineUnknownRemoteProvider, r as gitlabDiscovery, s as parseSourceControlOwnerRef, t as azureDevOpsDiscovery, u as detailFromCause } from "./SourceControlProviderDiscoveryCatalog-ZtwPWoxE.mjs";
6
6
  import { n as detectSourceControlProviderFromRemoteUrl, r as getChangeRequestTerminologyForKind } from "./sourceControl-BiEBxN01.mjs";
7
7
  import * as NodeRuntime from "@effect/platform-node/NodeRuntime";
8
8
  import * as NodeServices from "@effect/platform-node/NodeServices";
@@ -14,7 +14,7 @@ import { Socket, createServer } from "node:net";
14
14
  import { Array as Array$1, Cache, Cause, Clock, Config, Console, Context, Data, DateTime, Deferred, Duration, Effect, Encoding, Equal, Exit, Fiber, FileSystem, Layer, Logger, Metric, Option, Order, Path, Predicate, PubSub, Queue, Redacted, Ref, References, Result, Schedule, Schema, SchemaGetter, SchemaIssue, SchemaTransformation, Scope, Semaphore, Stream, Struct, SubscriptionRef, SynchronizedRef, Tracer, TxQueue, TxRef } from "effect";
15
15
  import * as Schema$1 from "effect/Schema";
16
16
  import * as P from "effect/Predicate";
17
- import { FetchHttpClient, HttpBody, HttpClient, HttpClientRequest, HttpClientResponse, HttpRouter, HttpServer, HttpServerRequest, HttpServerResponse, Multipart } from "effect/unstable/http";
17
+ import { FetchHttpClient, Headers, HttpBody, HttpClient, HttpClientRequest, HttpClientResponse, HttpRouter, HttpServer, HttpServerRequest, HttpServerResponse, Multipart } from "effect/unstable/http";
18
18
  import * as NodePath from "node:path";
19
19
  import path, { basename, dirname, extname, join } from "node:path";
20
20
  import * as Crypto from "node:crypto";
@@ -1381,6 +1381,7 @@ function logPathHydrationWarning(message, error) {
1381
1381
  console.warn(`[server] ${message}`, error instanceof Error ? error.message : error ?? "");
1382
1382
  }
1383
1383
  function fixPath(options = {}) {
1384
+ if (options.inheritedFromDesktop) return;
1384
1385
  const platform = options.platform ?? process.platform;
1385
1386
  const env = options.env ?? process.env;
1386
1387
  const logWarning = options.logWarning ?? logPathHydrationWarning;
@@ -2467,9 +2468,14 @@ const INLINE_ATTACHMENT_EXTENSIONS = /* @__PURE__ */ new Set([
2467
2468
  ".webp"
2468
2469
  ]);
2469
2470
  const STATIC_CONTENT_TYPES = {
2471
+ ".avif": "image/avif",
2472
+ ".bmp": "image/bmp",
2470
2473
  ".css": "text/css; charset=utf-8",
2471
2474
  ".html": "text/html; charset=utf-8",
2475
+ ".gif": "image/gif",
2472
2476
  ".ico": "image/x-icon",
2477
+ ".jpeg": "image/jpeg",
2478
+ ".jpg": "image/jpeg",
2473
2479
  ".js": "text/javascript; charset=utf-8",
2474
2480
  ".json": "application/json; charset=utf-8",
2475
2481
  ".map": "application/json; charset=utf-8",
@@ -2477,7 +2483,8 @@ const STATIC_CONTENT_TYPES = {
2477
2483
  ".svg": "image/svg+xml; charset=utf-8",
2478
2484
  ".txt": "text/plain; charset=utf-8",
2479
2485
  ".wasm": "application/wasm",
2480
- ".webmanifest": "application/manifest+json; charset=utf-8"
2486
+ ".webmanifest": "application/manifest+json; charset=utf-8",
2487
+ ".webp": "image/webp"
2481
2488
  };
2482
2489
  const browserApiCorsLayer = HttpRouter.cors({
2483
2490
  allowedMethods: [
@@ -2796,16 +2803,17 @@ const projectFaviconRouteLayer = HttpRouter.add("GET", "/api/project-favicon", E
2796
2803
  if (Option.isNone(url)) return HttpServerResponse.text("Bad Request", { status: 400 });
2797
2804
  const projectCwd = url.value.searchParams.get("cwd");
2798
2805
  if (!projectCwd) return HttpServerResponse.text("Missing cwd parameter", { status: 400 });
2799
- const faviconFilePath = yield* (yield* ProjectFaviconResolver).resolvePath(projectCwd);
2800
- if (!faviconFilePath) return HttpServerResponse.text(FALLBACK_PROJECT_FAVICON_SVG, {
2806
+ const favicon = yield* (yield* ProjectFaviconResolver).readIcon(projectCwd);
2807
+ if (!favicon) return HttpServerResponse.text(FALLBACK_PROJECT_FAVICON_SVG, {
2801
2808
  status: 200,
2802
2809
  contentType: "image/svg+xml",
2803
2810
  headers: inlineImageResponseHeaders("fallback.svg")
2804
2811
  });
2805
- return yield* HttpServerResponse.file(faviconFilePath, {
2812
+ return HttpServerResponse.uint8Array(favicon.bytes, {
2806
2813
  status: 200,
2807
- headers: inlineImageResponseHeaders(faviconFilePath)
2808
- }).pipe(Effect.catch(() => Effect.succeed(HttpServerResponse.text("Internal Server Error", { status: 500 }))));
2814
+ contentType: resolveStaticContentType(favicon.path, yield* Path.Path),
2815
+ headers: inlineImageResponseHeaders(favicon.path)
2816
+ });
2809
2817
  }).pipe(Effect.catchTag("AuthError", respondToAuthError)));
2810
2818
  const AvatarFormSchema = Schema$1.Struct({ avatar: Multipart.SingleFileSchema });
2811
2819
  const PROJECT_ID_PATTERN = /^[A-Za-z0-9_-]+$/;
@@ -6542,8 +6550,35 @@ const repairProjectionThreadSubagentNestingColumns = Effect$1.fn("repairProjecti
6542
6550
  const repairContextHandoffRuntimeSessions = Effect$1.fn("repairContextHandoffRuntimeSessions")(function* () {
6543
6551
  yield* _042_ContextHandoffRuntimeSessions_default;
6544
6552
  });
6553
+ const repairProjectionThreadSummaryState = Effect$1.gen(function* () {
6554
+ const sql = yield* SqlClient.SqlClient;
6555
+ yield* sql`
6556
+ CREATE TABLE IF NOT EXISTS ryco_compatibility_repairs (
6557
+ repair_key TEXT PRIMARY KEY
6558
+ )
6559
+ `;
6560
+ yield* sql.withTransaction(Effect$1.gen(function* () {
6561
+ const completed = yield* sql`
6562
+ SELECT repair_key FROM ryco_compatibility_repairs
6563
+ WHERE repair_key = 'projection-thread-summary-v1'
6564
+ `;
6565
+ const objects = yield* sql`
6566
+ SELECT name FROM sqlite_master WHERE name IN (
6567
+ 'projection_thread_user_input_requests',
6568
+ 'idx_projection_thread_user_input_requests_thread_pending',
6569
+ 'idx_projection_thread_proposed_plans_thread_turn_updated'
6570
+ )
6571
+ `;
6572
+ if (completed.length > 0 && objects.length === 3) return;
6573
+ yield* _044_ProjectionThreadSummaryState_default;
6574
+ yield* sql`
6575
+ INSERT OR IGNORE INTO ryco_compatibility_repairs (repair_key)
6576
+ VALUES ('projection-thread-summary-v1')
6577
+ `;
6578
+ }));
6579
+ });
6545
6580
  const repairProjectionThreadReadModelMigrations = Effect$1.fn("repairProjectionThreadReadModelMigrations")(function* (toMigrationInclusive) {
6546
- if (toMigrationInclusive >= 44) yield* _044_ProjectionThreadSummaryState_default;
6581
+ if (toMigrationInclusive >= 44) yield* repairProjectionThreadSummaryState;
6547
6582
  if (toMigrationInclusive >= 45) yield* _045_ProjectionThreadHistoryPaginationIndexes_default;
6548
6583
  if (toMigrationInclusive >= 46) yield* _046_ProjectionThreadMessageDispatchMode_default;
6549
6584
  if (toMigrationInclusive >= 47) yield* _047_ProjectionThreadsGoal_default;
@@ -13473,26 +13508,26 @@ const make$13 = Effect.fn("makeSourceControlProviderRegistry")(function* () {
13473
13508
  const azureDevOpsCli = yield* AzureDevOpsCli;
13474
13509
  const fileSystem = yield* FileSystem.FileSystem;
13475
13510
  const github = yield* makeLazyProvider("github", Effect.tryPromise({
13476
- try: () => import("./GitHubSourceControlProvider-CPCYV8Xo.mjs"),
13511
+ try: () => import("./GitHubSourceControlProvider-BYuvbcBf.mjs"),
13477
13512
  catch: (cause) => providerLoadError("github", cause)
13478
13513
  }).pipe(Effect.flatMap((module) => module.make()), Effect.provideService(GitHubCli, githubCli), Effect.provideService(FileSystem.FileSystem, fileSystem)));
13479
13514
  const gitlab = yield* makeLazyProvider("gitlab", Effect.tryPromise({
13480
- try: () => import("./GitLabSourceControlProvider-Bvknpaon.mjs"),
13515
+ try: () => import("./GitLabSourceControlProvider-DZzEaVSi.mjs"),
13481
13516
  catch: (cause) => providerLoadError("gitlab", cause)
13482
13517
  }).pipe(Effect.flatMap((module) => module.make()), Effect.provideService(GitLabCli, gitlabCli)));
13483
13518
  const bitbucket = yield* makeLazyProvider("bitbucket", Effect.tryPromise({
13484
- try: () => import("./BitbucketSourceControlProvider-Bt21jw68.mjs"),
13519
+ try: () => import("./BitbucketSourceControlProvider-pUKsNXcg.mjs"),
13485
13520
  catch: (cause) => providerLoadError("bitbucket", cause)
13486
13521
  }).pipe(Effect.flatMap((module) => module.make()), Effect.provideService(BitbucketApi, bitbucketApi)), {
13487
13522
  searchRepositories: true,
13488
13523
  cloneAuthentication: true
13489
13524
  });
13490
13525
  const forgejo = yield* makeLazyProvider("forgejo", Effect.tryPromise({
13491
- try: () => import("./ForgejoSourceControlProvider-BGXysSX6.mjs"),
13526
+ try: () => import("./ForgejoSourceControlProvider-CmvOAzEG.mjs"),
13492
13527
  catch: (cause) => providerLoadError("forgejo", cause)
13493
13528
  }).pipe(Effect.flatMap((module) => module.make()), Effect.provideService(ForgejoApi, forgejoApi)));
13494
13529
  const azureDevOps = yield* makeLazyProvider("azure-devops", Effect.tryPromise({
13495
- try: () => import("./AzureDevOpsSourceControlProvider-BNGEg1R8.mjs"),
13530
+ try: () => import("./AzureDevOpsSourceControlProvider-B_E0XXfD.mjs"),
13496
13531
  catch: (cause) => providerLoadError("azure-devops", cause)
13497
13532
  }).pipe(Effect.flatMap((module) => module.make()), Effect.provideService(AzureDevOpsCli, azureDevOpsCli)));
13498
13533
  const bitbucketDiscovery = makeBitbucketDiscovery(bitbucketApi);
@@ -33981,7 +34016,7 @@ const BUILT_IN_DRIVERS = [
33981
34016
  configSchema: CodexSettings,
33982
34017
  defaultConfig: () => Schema.decodeSync(CodexSettings)({}),
33983
34018
  create: (input) => Effect.tryPromise({
33984
- try: () => import("./CodexDriver-DnnqkGoY.mjs"),
34019
+ try: () => import("./CodexDriver-V4CL9APE.mjs"),
33985
34020
  catch: (cause) => driverImportError(codexDriverKind, input, cause)
33986
34021
  }).pipe(Effect.flatMap(({ CodexDriver }) => CodexDriver.create(input)))
33987
34022
  },
@@ -33995,7 +34030,7 @@ const BUILT_IN_DRIVERS = [
33995
34030
  configSchema: ClaudeSettings,
33996
34031
  defaultConfig: () => Schema.decodeSync(ClaudeSettings)({}),
33997
34032
  create: (input) => Effect.tryPromise({
33998
- try: () => import("./ClaudeDriver-C4yu7Jit.mjs"),
34033
+ try: () => import("./ClaudeDriver-CGifBixr.mjs"),
33999
34034
  catch: (cause) => driverImportError(claudeDriverKind, input, cause)
34000
34035
  }).pipe(Effect.flatMap(({ ClaudeDriver }) => ClaudeDriver.create(input)))
34001
34036
  },
@@ -34009,7 +34044,7 @@ const BUILT_IN_DRIVERS = [
34009
34044
  configSchema: CopilotSettings,
34010
34045
  defaultConfig: () => Schema.decodeSync(CopilotSettings)({}),
34011
34046
  create: (input) => Effect.tryPromise({
34012
- try: () => import("./CopilotDriver-GxKLX5pL.mjs"),
34047
+ try: () => import("./CopilotDriver-Dt13X60f.mjs"),
34013
34048
  catch: (cause) => driverImportError(copilotDriverKind, input, cause)
34014
34049
  }).pipe(Effect.flatMap(({ CopilotDriver }) => CopilotDriver.create(input)))
34015
34050
  },
@@ -34023,7 +34058,7 @@ const BUILT_IN_DRIVERS = [
34023
34058
  configSchema: CursorSettings,
34024
34059
  defaultConfig: () => Schema.decodeSync(CursorSettings)({}),
34025
34060
  create: (input) => Effect.tryPromise({
34026
- try: () => import("./CursorDriver-CNo9Uzo8.mjs"),
34061
+ try: () => import("./CursorDriver-HIPUs7cz.mjs"),
34027
34062
  catch: (cause) => driverImportError(cursorDriverKind, input, cause)
34028
34063
  }).pipe(Effect.flatMap(({ CursorDriver }) => CursorDriver.create(input)))
34029
34064
  },
@@ -34037,7 +34072,7 @@ const BUILT_IN_DRIVERS = [
34037
34072
  configSchema: GrokSettings,
34038
34073
  defaultConfig: () => Schema.decodeSync(GrokSettings)({}),
34039
34074
  create: (input) => Effect.tryPromise({
34040
- try: () => import("./GrokDriver-DSPEmiwq.mjs"),
34075
+ try: () => import("./GrokDriver-CduUwiOH.mjs"),
34041
34076
  catch: (cause) => driverImportError(grokDriverKind, input, cause)
34042
34077
  }).pipe(Effect.flatMap(({ GrokDriver }) => GrokDriver.create(input)))
34043
34078
  },
@@ -34051,7 +34086,7 @@ const BUILT_IN_DRIVERS = [
34051
34086
  configSchema: OpenCodeSettings,
34052
34087
  defaultConfig: () => Schema.decodeSync(OpenCodeSettings)({}),
34053
34088
  create: (input) => Effect.tryPromise({
34054
- try: () => import("./OpenCodeDriver-0q44rSQX.mjs"),
34089
+ try: () => import("./OpenCodeDriver-Bz_uJdMA.mjs"),
34055
34090
  catch: (cause) => driverImportError(openCodeDriverKind, input, cause)
34056
34091
  }).pipe(Effect.flatMap(({ OpenCodeDriver }) => OpenCodeDriver.create(input)))
34057
34092
  }
@@ -34766,7 +34801,7 @@ const scopedSafeTeardown = (label) => (effect) => Effect.gen(function* () {
34766
34801
  });
34767
34802
  //#endregion
34768
34803
  //#region package.json
34769
- var version$1 = "0.1.23";
34804
+ var version$1 = "0.1.25";
34770
34805
  //#endregion
34771
34806
  //#region src/provider/Layers/CodexProvider.ts
34772
34807
  const PROVIDER_PROBE_TIMEOUT_MS = 8e3;
@@ -43351,6 +43386,36 @@ function resolveWorktreeCheckoutPath(input) {
43351
43386
  return resolveAppManagedWorktreeCheckoutPath(input.appWorktreesRoot, input.projectId, input.branchName);
43352
43387
  }
43353
43388
  //#endregion
43389
+ //#region src/persistence/Services/ProjectionProjects.ts
43390
+ /**
43391
+ * ProjectionProjectRepository - Projection repository interface for projects.
43392
+ *
43393
+ * Owns persistence operations for project rows in the orchestration projection
43394
+ * read model.
43395
+ *
43396
+ * @module ProjectionProjectRepository
43397
+ */
43398
+ const ProjectionProject = Schema.Struct({
43399
+ projectId: ProjectId,
43400
+ title: Schema.String,
43401
+ workspaceRoot: Schema.String,
43402
+ projectMetadataDir: ProjectMetadataDir,
43403
+ defaultModelSelection: Schema.NullOr(ModelSelection),
43404
+ customSystemPrompt: Schema.optional(Schema.NullOr(Schema.String)),
43405
+ customAvatarContentHash: Schema.NullOr(Schema.String),
43406
+ preferredRemoteName: Schema.NullOr(Schema.String),
43407
+ scripts: Schema.Array(ProjectScript),
43408
+ createdAt: IsoDateTime,
43409
+ updatedAt: IsoDateTime,
43410
+ deletedAt: Schema.NullOr(IsoDateTime)
43411
+ });
43412
+ const GetProjectionProjectInput = Schema.Struct({ projectId: ProjectId });
43413
+ const DeleteProjectionProjectInput = Schema.Struct({ projectId: ProjectId });
43414
+ /**
43415
+ * ProjectionProjectRepository - Service tag for project projection persistence.
43416
+ */
43417
+ var ProjectionProjectRepository = class extends Context.Service()("ryco/persistence/Services/ProjectionProjects/ProjectionProjectRepository") {};
43418
+ //#endregion
43354
43419
  //#region src/persistence/Services/ProjectionWorktrees.ts
43355
43420
  /**
43356
43421
  * ProjectionWorktreeRepository - Projection repository interface for worktrees.
@@ -44647,6 +44712,7 @@ const RPC_ACCESS_POLICY = {
44647
44712
  [WS_METHODS.projectsList]: "viewer",
44648
44713
  [WS_METHODS.projectsListEntries]: "operator",
44649
44714
  [WS_METHODS.projectsReadFile]: "operator",
44715
+ [WS_METHODS.projectsReadIcon]: "viewer",
44650
44716
  [WS_METHODS.projectsReadFileBinary]: "operator",
44651
44717
  [WS_METHODS.projectsRemove]: "operator",
44652
44718
  [WS_METHODS.projectsSearchEntries]: "operator",
@@ -46562,6 +46628,9 @@ const makeWsRpcContext = (principal) => Effect.gen(function* () {
46562
46628
  openCodeMcp
46563
46629
  ]);
46564
46630
  const startup = yield* ServerRuntimeStartup;
46631
+ const projectionProjects = yield* Effect.serviceOption(ProjectionProjectRepository);
46632
+ const projectFaviconResolver = yield* Effect.serviceOption(ProjectFaviconResolver);
46633
+ const projectAvatarStore = yield* Effect.serviceOption(ProjectAvatarStore);
46565
46634
  const workspaceEntries = yield* WorkspaceEntries;
46566
46635
  const workspaceFileSystem = yield* WorkspaceFileSystem;
46567
46636
  const workspaceAccessPolicy = yield* WorkspaceAccessPolicy;
@@ -46937,6 +47006,9 @@ const makeWsRpcContext = (principal) => Effect.gen(function* () {
46937
47006
  lifecycleEvents,
46938
47007
  serverSettings,
46939
47008
  mcpRegistry,
47009
+ projectionProjects,
47010
+ projectFaviconResolver,
47011
+ projectAvatarStore,
46940
47012
  workspaceEntries,
46941
47013
  workspaceFileSystem,
46942
47014
  sourceControlDiscovery,
@@ -48084,10 +48156,51 @@ const makeTerminalHandlers = (ctx) => {
48084
48156
  });
48085
48157
  };
48086
48158
  //#endregion
48159
+ //#region src/project/readProjectIcon.ts
48160
+ const iconTypes = {
48161
+ ".png": "image/png",
48162
+ ".jpg": "image/jpeg",
48163
+ ".jpeg": "image/jpeg",
48164
+ ".webp": "image/webp",
48165
+ ".svg": "image/svg+xml",
48166
+ ".ico": "image/x-icon"
48167
+ };
48168
+ /** Resolve only the registered project's artwork; callers cannot supply filesystem paths. */
48169
+ function readProjectIcon(project, services) {
48170
+ return Effect.gen(function* () {
48171
+ if (project.customAvatarContentHash && services.avatar) {
48172
+ const avatar = yield* services.avatar.read(project.id);
48173
+ if (avatar && avatar.bytes.length <= 524288) return {
48174
+ mimeType: "image/png",
48175
+ dataBase64: avatar.bytes.toString("base64")
48176
+ };
48177
+ }
48178
+ const icon = services.favicon ? yield* services.favicon.readIcon(project.workspaceRoot) : null;
48179
+ if (!icon || icon.bytes.length > 524288) return null;
48180
+ const mimeType = iconTypes[extname(icon.path).toLowerCase()];
48181
+ return mimeType ? {
48182
+ mimeType,
48183
+ dataBase64: Buffer.from(icon.bytes).toString("base64")
48184
+ } : null;
48185
+ });
48186
+ }
48187
+ //#endregion
48087
48188
  //#region src/ws/projectRpc.ts
48088
48189
  const makeProjectHandlers = (ctx) => {
48089
48190
  const { ownerEffect, workspaceEntries, workspaceFileSystem, open } = ctx;
48090
48191
  return defineWsHandlers({
48192
+ [WS_METHODS.projectsReadIcon]: (input) => ctx.withAccess("viewer", WS_METHODS.projectsReadIcon, Effect.gen(function* () {
48193
+ if (Option.isNone(ctx.projectionProjects)) return null;
48194
+ const project = yield* ctx.projectionProjects.value.getById(input).pipe(Effect.mapError(() => new ProjectReadIconError({ message: "Could not load project artwork." })));
48195
+ if (Option.isNone(project) || project.value.deletedAt !== null) return null;
48196
+ return yield* readProjectIcon({
48197
+ ...project.value,
48198
+ id: project.value.projectId
48199
+ }, {
48200
+ favicon: Option.getOrNull(ctx.projectFaviconResolver),
48201
+ avatar: Option.getOrNull(ctx.projectAvatarStore)
48202
+ });
48203
+ })),
48091
48204
  [WS_METHODS.projectsSearchEntries]: (input) => observeRpcEffect(WS_METHODS.projectsSearchEntries, ownerEffect(WS_METHODS.projectsSearchEntries, workspaceEntries.search(input).pipe(Effect.mapError((cause) => new ProjectSearchEntriesError({
48092
48205
  message: `Failed to search workspace entries: ${cause.detail}`,
48093
48206
  cause
@@ -49237,7 +49350,7 @@ async function readResourceTelemetryHistory(input) {
49237
49350
  //#endregion
49238
49351
  //#region src/diagnostics/ProcessDiagnostics.ts
49239
49352
  const QUERY_TIMEOUT_MS = 3e3;
49240
- const MAX_OUTPUT_BYTES = 4194304;
49353
+ const MAX_OUTPUT_BYTES$1 = 4194304;
49241
49354
  const MAX_PROCESSES = 2e4;
49242
49355
  /** Parse fixed numeric columns; never capture command-line arguments. */
49243
49356
  function parseProcessTable(output) {
@@ -49318,7 +49431,7 @@ async function queryProcessTable(fresh = false) {
49318
49431
  execFile("/bin/ps", ["-axo", "pid=,ppid=,lstart=,pcpu=,rss=,stat=,etime=,comm="], {
49319
49432
  encoding: "utf8",
49320
49433
  timeout: QUERY_TIMEOUT_MS,
49321
- maxBuffer: MAX_OUTPUT_BYTES,
49434
+ maxBuffer: MAX_OUTPUT_BYTES$1,
49322
49435
  env: {
49323
49436
  ...process.env,
49324
49437
  LC_ALL: "C"
@@ -69796,7 +69909,7 @@ function makeNodeNativeClaimService(options) {
69796
69909
  claim: input.claim,
69797
69910
  requireCurrent: true
69798
69911
  });
69799
- if (input.result.status !== "claimed" || input.result.node.environmentId !== input.claim.environmentId || input.result.node.fingerprint !== input.claim.nodeFingerprint || input.result.node.label !== expectedLabel || input.result.node.effectiveRole !== "owner") return claimError("native_node_claim_conflict");
69912
+ if (input.result.status !== "claimed" || input.result.node.environmentId !== input.claim.environmentId || input.result.node.fingerprint !== input.claim.nodeFingerprint || input.result.node.label !== expectedLabel && !(validated.descriptor.state === "active" && input.result.disposition === "reconnected") || input.result.node.effectiveRole !== "owner") return claimError("native_node_claim_conflict");
69800
69913
  const active = {
69801
69914
  hubOrigin: validated.descriptor.hubOrigin,
69802
69915
  nodeId: input.result.node.id,
@@ -73576,6 +73689,8 @@ var RelayConnectionSession = class {
73576
73689
  #frameDeliveryActive = false;
73577
73690
  #settled = false;
73578
73691
  #closed = false;
73692
+ #authenticationStarted = false;
73693
+ #rejectAuthentication;
73579
73694
  #listeners;
73580
73695
  constructor(options) {
73581
73696
  this.#identity = options.identity;
@@ -73591,8 +73706,21 @@ var RelayConnectionSession = class {
73591
73706
  get ready() {
73592
73707
  return this.#ready;
73593
73708
  }
73594
- async authenticate() {
73595
- if (this.#socket !== void 0) throw new RelayConnectionError("internal_error");
73709
+ authenticate() {
73710
+ if (this.#authenticationStarted || this.#closed) return Promise.reject(new RelayConnectionError("internal_error"));
73711
+ this.#authenticationStarted = true;
73712
+ return new Promise((resolve, reject) => {
73713
+ this.#rejectAuthentication = reject;
73714
+ this.#authenticate().then((ready) => {
73715
+ this.#rejectAuthentication = void 0;
73716
+ resolve(ready);
73717
+ }, (error) => {
73718
+ this.#rejectAuthentication = void 0;
73719
+ reject(error);
73720
+ });
73721
+ });
73722
+ }
73723
+ async #authenticate() {
73596
73724
  let auth;
73597
73725
  try {
73598
73726
  auth = await this.#identity.createRelayAuthenticationFrame(this.#hubOrigin, {
@@ -73641,6 +73769,7 @@ var RelayConnectionSession = class {
73641
73769
  };
73642
73770
  const onOpen = () => {
73643
73771
  if (this.#closed) return;
73772
+ if (this.#timer !== void 0) this.#scheduler.clearTimeout(this.#timer);
73644
73773
  try {
73645
73774
  socket.send(authBytes);
73646
73775
  } catch {
@@ -73714,6 +73843,7 @@ var RelayConnectionSession = class {
73714
73843
  socket.addEventListener("message", onMessage);
73715
73844
  socket.addEventListener("error", onError);
73716
73845
  socket.addEventListener("close", onClose);
73846
+ this.#timer = this.#scheduler.setTimeout(() => fail(new RelayConnectionError("network")), RELAY_AUTHENTICATION_DEADLINE_MS);
73717
73847
  });
73718
73848
  }
73719
73849
  /**
@@ -73745,6 +73875,11 @@ var RelayConnectionSession = class {
73745
73875
  close() {
73746
73876
  if (this.#closed) return;
73747
73877
  this.#closed = true;
73878
+ if (!this.#settled) {
73879
+ this.#settled = true;
73880
+ this.#rejectAuthentication?.(new RelayConnectionError("network"));
73881
+ }
73882
+ this.#rejectAuthentication = void 0;
73748
73883
  for (const frame of this.#pendingPostReadyFrames) clearRelayFrameBytes(frame);
73749
73884
  this.#pendingPostReadyFrames = [];
73750
73885
  this.#clearPendingAuthentication();
@@ -89703,83 +89838,173 @@ const ProviderRegistryLive = Layer.effect(ProviderRegistry, Effect.gen(function*
89703
89838
  };
89704
89839
  }));
89705
89840
  //#endregion
89706
- //#region src/project/Layers/ProjectFaviconResolver.ts
89707
- const FAVICON_CANDIDATES = [
89708
- "favicon.svg",
89709
- "favicon.ico",
89710
- "favicon.png",
89711
- "public/favicon.svg",
89712
- "public/favicon.ico",
89713
- "public/favicon.png",
89714
- "app/favicon.ico",
89715
- "app/favicon.png",
89716
- "app/icon.svg",
89717
- "app/icon.png",
89718
- "app/icon.ico",
89719
- "src/favicon.ico",
89720
- "src/favicon.svg",
89721
- "src/app/favicon.ico",
89722
- "src/app/icon.svg",
89723
- "src/app/icon.png",
89724
- "assets/icon.svg",
89725
- "assets/icon.png",
89726
- "assets/logo.svg",
89727
- "assets/logo.png",
89728
- ".idea/icon.svg"
89729
- ];
89730
- const ICON_SOURCE_FILES = [
89731
- "index.html",
89732
- "public/index.html",
89733
- "app/routes/__root.tsx",
89734
- "src/routes/__root.tsx",
89735
- "app/root.tsx",
89736
- "src/root.tsx",
89737
- "src/index.html"
89738
- ];
89739
- const LINK_ICON_HTML_RE = /<link\b(?=[^>]*\brel=["'](?:icon|shortcut icon)["'])(?=[^>]*\bhref=["']([^"'?]+))[^>]*>/i;
89740
- const LINK_ICON_OBJ_RE = /(?=[^}]*\brel\s*:\s*["'](?:icon|shortcut icon)["'])(?=[^}]*\bhref\s*:\s*["']([^"'?]+))[^}]*/i;
89741
- function extractIconHref(source) {
89742
- const htmlMatch = source.match(LINK_ICON_HTML_RE);
89743
- if (htmlMatch?.[1]) return htmlMatch[1];
89744
- const objMatch = source.match(LINK_ICON_OBJ_RE);
89745
- if (objMatch?.[1]) return objMatch[1];
89746
- return null;
89747
- }
89748
- const makeProjectFaviconResolver = Effect.gen(function* () {
89749
- const fileSystem = yield* FileSystem.FileSystem;
89750
- const path = yield* Path.Path;
89751
- const resolveIconHref = (projectCwd, href) => {
89752
- const clean = href.replace(/^\//, "");
89753
- return [path.join(projectCwd, "public", clean), path.join(projectCwd, clean)];
89754
- };
89755
- const isPathWithinProject = (projectCwd, candidatePath) => {
89756
- const relative = path.relative(path.resolve(projectCwd), path.resolve(candidatePath));
89757
- return relative === "" || !relative.startsWith("..") && !path.isAbsolute(relative);
89758
- };
89759
- const findExistingFile = Effect.fn("ProjectFaviconResolver.findExistingFile")(function* (projectCwd, candidates) {
89841
+ //#region src/project/projectFaviconWorker.ts
89842
+ /**
89843
+ * Serialized into a short-lived Node/Bun child. Keep this function self-contained:
89844
+ * opening a cloud-backed file can block in the kernel even after an async read
89845
+ * is cancelled. A separate process keeps optional icons out of the node's shared
89846
+ * filesystem/DNS worker pool, and lets the parent terminate a stalled read.
89847
+ */
89848
+ function projectFaviconWorkerMain() {
89849
+ const fs = process.getBuiltinModule("node:fs");
89850
+ const path = process.getBuiltinModule("node:path");
89851
+ const iconLimit = 524288;
89852
+ const sourceLimit = 262144;
89853
+ const candidates = [
89854
+ "favicon.svg",
89855
+ "favicon.ico",
89856
+ "favicon.png",
89857
+ "public/favicon.svg",
89858
+ "public/favicon.ico",
89859
+ "public/favicon.png",
89860
+ "app/favicon.ico",
89861
+ "app/favicon.png",
89862
+ "app/icon.svg",
89863
+ "app/icon.png",
89864
+ "app/icon.ico",
89865
+ "src/favicon.ico",
89866
+ "src/favicon.svg",
89867
+ "src/app/favicon.ico",
89868
+ "src/app/icon.svg",
89869
+ "src/app/icon.png",
89870
+ "assets/icon.svg",
89871
+ "assets/icon.png",
89872
+ "assets/logo.svg",
89873
+ "assets/logo.png",
89874
+ ".idea/icon.svg"
89875
+ ];
89876
+ const sources = [
89877
+ "index.html",
89878
+ "public/index.html",
89879
+ "app/routes/__root.tsx",
89880
+ "src/routes/__root.tsx",
89881
+ "app/root.tsx",
89882
+ "src/root.tsx",
89883
+ "src/index.html"
89884
+ ];
89885
+ try {
89886
+ const root = fs.realpathSync(process.argv[1]);
89887
+ const read = (relative, limit) => {
89888
+ let fd;
89889
+ try {
89890
+ const filename = fs.realpathSync(path.resolve(root, relative));
89891
+ const within = path.relative(root, filename);
89892
+ if (within === ".." || within.startsWith(`..${path.sep}`) || path.isAbsolute(within)) return null;
89893
+ fd = fs.openSync(filename, fs.constants.O_RDONLY | fs.constants.O_NONBLOCK);
89894
+ const stats = fs.fstatSync(fd);
89895
+ if (!stats.isFile() || stats.size > limit) return null;
89896
+ const bytes = Buffer.alloc(limit + 1);
89897
+ let length = 0;
89898
+ while (length < bytes.length) {
89899
+ const count = fs.readSync(fd, bytes, length, bytes.length - length, null);
89900
+ if (count === 0) break;
89901
+ length += count;
89902
+ }
89903
+ return length > limit ? null : {
89904
+ path: filename,
89905
+ bytes: bytes.subarray(0, length)
89906
+ };
89907
+ } catch {
89908
+ return null;
89909
+ } finally {
89910
+ if (fd !== void 0) fs.closeSync(fd);
89911
+ }
89912
+ };
89913
+ const send = (icon) => {
89914
+ process.stdout.write(JSON.stringify({
89915
+ path: icon.path,
89916
+ base64: icon.bytes.toString("base64")
89917
+ }));
89918
+ };
89760
89919
  for (const candidate of candidates) {
89761
- if (!isPathWithinProject(projectCwd, candidate)) continue;
89762
- if ((yield* fileSystem.stat(candidate).pipe(Effect.catch(() => Effect.succeed(null))))?.type === "File") return candidate;
89920
+ const icon = read(candidate, iconLimit);
89921
+ if (icon) {
89922
+ send(icon);
89923
+ return;
89924
+ }
89763
89925
  }
89764
- return null;
89765
- });
89766
- return { resolvePath: Effect.fn("ProjectFaviconResolver.resolvePath")(function* (cwd) {
89767
- for (const candidate of FAVICON_CANDIDATES) {
89768
- const resolved = path.join(cwd, candidate);
89769
- const existing = yield* findExistingFile(cwd, [resolved]);
89770
- if (existing) return existing;
89771
- }
89772
- for (const sourceFile of ICON_SOURCE_FILES) {
89773
- const sourcePath = path.join(cwd, sourceFile);
89774
- const source = yield* fileSystem.readFileString(sourcePath).pipe(Effect.catch(() => Effect.succeed(null)));
89775
- if (!source) continue;
89776
- const href = extractIconHref(source);
89926
+ for (const source of sources) {
89927
+ const text = read(source, sourceLimit)?.bytes.toString("utf8");
89928
+ if (!text) continue;
89929
+ const href = text.match(/<link\b(?=[^>]*\brel=["'](?:icon|shortcut icon)["'])(?=[^>]*\bhref=["']([^"'?]+))[^>]*>/i)?.[1] ?? text.match(/(?=[^}]*\brel\s*:\s*["'](?:icon|shortcut icon)["'])(?=[^}]*\bhref\s*:\s*["']([^"'?]+))[^}]*/i)?.[1];
89777
89930
  if (!href) continue;
89778
- const existing = yield* findExistingFile(cwd, resolveIconHref(cwd, href));
89779
- if (existing) return existing;
89931
+ const clean = href.replace(/^\//, "");
89932
+ for (const candidate of [path.join("public", clean), clean]) {
89933
+ const icon = read(candidate, iconLimit);
89934
+ if (icon) {
89935
+ send(icon);
89936
+ return;
89937
+ }
89938
+ }
89780
89939
  }
89781
- return null;
89782
- }) };
89940
+ } catch {}
89941
+ process.stdout.write("null");
89942
+ }
89943
+ const MAX_OUTPUT_BYTES = 786432;
89944
+ const WORKER_SCRIPT = `(${projectFaviconWorkerMain.toString()})()`;
89945
+ function readProjectFavicon(cwd, options = {}) {
89946
+ return new Promise((resolve) => {
89947
+ if (options.signal?.aborted) {
89948
+ resolve(null);
89949
+ return;
89950
+ }
89951
+ let child;
89952
+ const abort = () => {
89953
+ child?.kill("SIGKILL");
89954
+ };
89955
+ const cleanup = () => options.signal?.removeEventListener("abort", abort);
89956
+ options.signal?.addEventListener("abort", abort, { once: true });
89957
+ try {
89958
+ child = (options.execFile ?? execFile)(process.execPath, [
89959
+ "--eval",
89960
+ WORKER_SCRIPT,
89961
+ "--",
89962
+ cwd
89963
+ ], {
89964
+ env: {
89965
+ ...process.env,
89966
+ ELECTRON_RUN_AS_NODE: "1",
89967
+ NODE_OPTIONS: void 0,
89968
+ NODE_PATH: void 0
89969
+ },
89970
+ encoding: "utf8",
89971
+ timeout: options.timeoutMs ?? 1500,
89972
+ killSignal: "SIGKILL",
89973
+ maxBuffer: MAX_OUTPUT_BYTES,
89974
+ windowsHide: true
89975
+ }, (error, stdout) => {
89976
+ cleanup();
89977
+ if (error) {
89978
+ resolve(null);
89979
+ return;
89980
+ }
89981
+ try {
89982
+ const result = JSON.parse(stdout);
89983
+ if (typeof result !== "object" || result === null || !("path" in result) || !("base64" in result) || typeof result.path !== "string" || typeof result.base64 !== "string") {
89984
+ resolve(null);
89985
+ return;
89986
+ }
89987
+ const bytes = Buffer.from(result.base64, "base64");
89988
+ resolve(bytes.length <= 524288 ? {
89989
+ path: result.path,
89990
+ bytes
89991
+ } : null);
89992
+ } catch {
89993
+ resolve(null);
89994
+ }
89995
+ });
89996
+ if (options.signal?.aborted) abort();
89997
+ } catch {
89998
+ cleanup();
89999
+ resolve(null);
90000
+ }
90001
+ });
90002
+ }
90003
+ //#endregion
90004
+ //#region src/project/Layers/ProjectFaviconResolver.ts
90005
+ const makeProjectFaviconResolver = Effect.gen(function* () {
90006
+ const workers = yield* Semaphore$1.make(2);
90007
+ return { readIcon: (cwd) => workers.withPermit(Effect.promise((signal) => readProjectFavicon(cwd, { signal }))).pipe(Effect.timeout("5 seconds"), Effect.catch(() => Effect.succeed(null))) };
89783
90008
  });
89784
90009
  const ProjectFaviconResolverLive = Layer.effect(ProjectFaviconResolver, makeProjectFaviconResolver);
89785
90010
  //#endregion
@@ -89847,22 +90072,25 @@ function buildRepositoryIdentity(input) {
89847
90072
  const DEFAULT_REPOSITORY_IDENTITY_CACHE_CAPACITY = 512;
89848
90073
  const DEFAULT_POSITIVE_CACHE_TTL = Duration.minutes(1);
89849
90074
  const DEFAULT_NEGATIVE_CACHE_TTL = Duration.minutes(1);
90075
+ const GIT_IDENTITY_PROBE_TIMEOUT_MS = 1e3;
89850
90076
  async function resolveRepositoryIdentityCacheKey(cwd) {
89851
- let cacheKey = cwd;
89852
90077
  try {
89853
90078
  const topLevelResult = await runProcess("git", [
89854
90079
  "-C",
89855
90080
  cwd,
89856
90081
  "rev-parse",
89857
90082
  "--show-toplevel"
89858
- ], { allowNonZeroExit: true });
89859
- if (topLevelResult.code !== 0) return cacheKey;
90083
+ ], {
90084
+ allowNonZeroExit: true,
90085
+ timeoutMs: GIT_IDENTITY_PROBE_TIMEOUT_MS
90086
+ });
90087
+ if (topLevelResult.timedOut || topLevelResult.code !== 0) return null;
89860
90088
  const candidate = topLevelResult.stdout.trim();
89861
- if (candidate.length > 0) cacheKey = candidate;
90089
+ if (candidate.length > 0) return candidate;
89862
90090
  } catch {
89863
- return cacheKey;
90091
+ return null;
89864
90092
  }
89865
- return cacheKey;
90093
+ return null;
89866
90094
  }
89867
90095
  async function resolveRepositoryIdentityFromCacheKey(cacheKey) {
89868
90096
  try {
@@ -89871,8 +90099,11 @@ async function resolveRepositoryIdentityFromCacheKey(cacheKey) {
89871
90099
  cacheKey,
89872
90100
  "remote",
89873
90101
  "-v"
89874
- ], { allowNonZeroExit: true });
89875
- if (remoteResult.code !== 0) return null;
90102
+ ], {
90103
+ allowNonZeroExit: true,
90104
+ timeoutMs: GIT_IDENTITY_PROBE_TIMEOUT_MS
90105
+ });
90106
+ if (remoteResult.timedOut || remoteResult.code !== 0) return null;
89876
90107
  const allRemotes = parseRemoteFetchUrls(remoteResult.stdout);
89877
90108
  const remote = pickPrimaryRemote(allRemotes);
89878
90109
  return remote ? buildRepositoryIdentity({
@@ -89885,6 +90116,13 @@ async function resolveRepositoryIdentityFromCacheKey(cacheKey) {
89885
90116
  }
89886
90117
  }
89887
90118
  const makeRepositoryIdentityResolver = Effect.fn("makeRepositoryIdentityResolver")(function* (options = {}) {
90119
+ const workspaceRootCache = yield* Cache.makeWith((cwd) => Effect.promise(() => resolveRepositoryIdentityCacheKey(cwd)), {
90120
+ capacity: options.cacheCapacity ?? DEFAULT_REPOSITORY_IDENTITY_CACHE_CAPACITY,
90121
+ timeToLive: Exit.match({
90122
+ onSuccess: (value) => value === null ? options.negativeCacheTtl ?? DEFAULT_NEGATIVE_CACHE_TTL : options.positiveCacheTtl ?? DEFAULT_POSITIVE_CACHE_TTL,
90123
+ onFailure: () => Duration.zero
90124
+ })
90125
+ });
89888
90126
  const repositoryIdentityCache = yield* Cache.makeWith((cacheKey) => Effect.promise(() => resolveRepositoryIdentityFromCacheKey(cacheKey)), {
89889
90127
  capacity: options.cacheCapacity ?? DEFAULT_REPOSITORY_IDENTITY_CACHE_CAPACITY,
89890
90128
  timeToLive: Exit.match({
@@ -89893,7 +90131,8 @@ const makeRepositoryIdentityResolver = Effect.fn("makeRepositoryIdentityResolver
89893
90131
  })
89894
90132
  });
89895
90133
  return { resolve: Effect.fn("RepositoryIdentityResolver.resolve")(function* (cwd) {
89896
- const cacheKey = yield* Effect.promise(() => resolveRepositoryIdentityCacheKey(cwd));
90134
+ const cacheKey = yield* Cache.get(workspaceRootCache, cwd);
90135
+ if (cacheKey === null) return null;
89897
90136
  return yield* Cache.get(repositoryIdentityCache, cacheKey);
89898
90137
  }) };
89899
90138
  });
@@ -92025,6 +92264,23 @@ const makeTraceSink = Effect.fn("makeTraceSink")(function* (options) {
92025
92264
  };
92026
92265
  });
92027
92266
  //#endregion
92267
+ //#region src/observability/HttpHeaderRedaction.ts
92268
+ /** Capture policy before HTTP tracing defers span completion outside its request context. */
92269
+ function makeHttpHeaderRedactor(names) {
92270
+ const redactedNames = [
92271
+ ...names,
92272
+ LOCAL_INTRODUCTION_CONTROL_HEADER,
92273
+ "dpop",
92274
+ "dpop-nonce"
92275
+ ];
92276
+ return (key, value) => {
92277
+ const match = /^http\.(?:request|response)\.header\.(.+)$/iu.exec(key);
92278
+ if (!match) return value;
92279
+ const name = match[1].toLowerCase();
92280
+ return String(Headers.redact(Headers.fromInput({ [name]: String(value) }), redactedNames)[name]);
92281
+ };
92282
+ }
92283
+ //#endregion
92028
92284
  //#region src/observability/LocalFileTracer.ts
92029
92285
  var LocalFileSpan = class {
92030
92286
  _tag = "Span";
@@ -92041,9 +92297,11 @@ var LocalFileSpan = class {
92041
92297
  events;
92042
92298
  delegate;
92043
92299
  push;
92044
- constructor(options, delegate, push) {
92300
+ redactAttribute;
92301
+ constructor(options, delegate, push, redactAttribute) {
92045
92302
  this.delegate = delegate;
92046
92303
  this.push = push;
92304
+ this.redactAttribute = redactAttribute;
92047
92305
  this.name = delegate.name;
92048
92306
  this.spanId = delegate.spanId;
92049
92307
  this.traceId = delegate.traceId;
@@ -92070,8 +92328,9 @@ var LocalFileSpan = class {
92070
92328
  if (this.sampled) this.push(spanToTraceRecord(this));
92071
92329
  }
92072
92330
  attribute(key, value) {
92073
- this.attributes.set(key, value);
92074
- this.delegate.attribute(key, value);
92331
+ const redacted = this.redactAttribute(key, value);
92332
+ this.attributes.set(key, redacted);
92333
+ this.delegate.attribute(key, redacted);
92075
92334
  }
92076
92335
  event(name, startTime, attributes) {
92077
92336
  const nextAttributes = attributes ?? {};
@@ -92088,6 +92347,7 @@ var LocalFileSpan = class {
92088
92347
  }
92089
92348
  };
92090
92349
  const makeLocalFileTracer = Effect.fn("makeLocalFileTracer")(function* (options) {
92350
+ const redactAttribute = makeHttpHeaderRedactor(yield* Effect.service(Headers.CurrentRedactedNames));
92091
92351
  const sink = options.sink ?? (yield* makeTraceSink({
92092
92352
  filePath: options.filePath,
92093
92353
  maxBytes: options.maxBytes,
@@ -92097,7 +92357,7 @@ const makeLocalFileTracer = Effect.fn("makeLocalFileTracer")(function* (options)
92097
92357
  const delegate = options.delegate ?? Tracer.make({ span: (spanOptions) => new Tracer.NativeSpan(spanOptions) });
92098
92358
  return Tracer.make({
92099
92359
  span(spanOptions) {
92100
- return new LocalFileSpan(spanOptions, delegate.span(spanOptions), sink.push);
92360
+ return new LocalFileSpan(spanOptions, delegate.span(spanOptions), sink.push, redactAttribute);
92101
92361
  },
92102
92362
  ...delegate.context ? { context: delegate.context } : {}
92103
92363
  });
@@ -92213,6 +92473,20 @@ const resolveServerEnvironmentLabel = Effect.fn("resolveServerEnvironmentLabel")
92213
92473
  return normalizeLabel(input.cwdBaseName) ?? "Ryco environment";
92214
92474
  });
92215
92475
  //#endregion
92476
+ //#region ../../packages/shared/src/environmentIcon.ts
92477
+ /** Reuse existing platform/name metadata; icon selection must never probe permissions or delay startup. */
92478
+ function inferEnvironmentMachineKind(platform, label = "") {
92479
+ const name = label.toLowerCase().replaceAll(/[\s_-]+/g, "");
92480
+ if (/macmini|minipc/.test(name)) return "mini-pc";
92481
+ if (/macstudio|workstation/.test(name)) return "workstation";
92482
+ if (/macbook|notebook|laptop/.test(name)) return "laptop";
92483
+ if (/imac|macpro|desktop/.test(name)) return "desktop";
92484
+ if (platform === "windows" || platform === "win32") return "windows";
92485
+ if (platform === "linux") return "linux";
92486
+ if (platform === "darwin") return "desktop";
92487
+ return "server";
92488
+ }
92489
+ //#endregion
92216
92490
  //#region src/environment/Layers/ServerEnvironment.ts
92217
92491
  function platformOs() {
92218
92492
  switch (process.platform) {
@@ -92248,18 +92522,22 @@ const makeServerEnvironment = Effect.fn("makeServerEnvironment")(function* () {
92248
92522
  });
92249
92523
  const environmentId = EnvironmentId.make(environmentIdRaw);
92250
92524
  const cwdBaseName = path.basename(serverConfig.cwd).trim();
92525
+ const label = yield* resolveServerEnvironmentLabel({ cwdBaseName });
92251
92526
  const descriptor = {
92252
92527
  environmentId,
92253
- label: yield* resolveServerEnvironmentLabel({ cwdBaseName }),
92528
+ label,
92254
92529
  platform: {
92255
92530
  os: platformOs(),
92256
- arch: platformArch()
92531
+ arch: platformArch(),
92532
+ machine: inferEnvironmentMachineKind(platformOs(), label)
92257
92533
  },
92258
92534
  serverVersion: version$1,
92259
92535
  capabilities: {
92260
92536
  repositoryIdentity: true,
92261
92537
  threadSettlement: true,
92262
92538
  threadSnooze: true,
92539
+ projectIcons: true,
92540
+ environmentIcon: true,
92263
92541
  threadPriorityRanking: true,
92264
92542
  fileAttachments: { maxUploadBytes: PROVIDER_SEND_TURN_MAX_FILE_BYTES }
92265
92543
  }
@@ -94001,6 +94279,121 @@ const makeProjectAtlassianLinkRepository = Effect.gen(function* () {
94001
94279
  });
94002
94280
  const ProjectAtlassianLinkRepositoryLive = Layer.effect(ProjectAtlassianLinkRepository, makeProjectAtlassianLinkRepository);
94003
94281
  //#endregion
94282
+ //#region src/persistence/Layers/ProjectionProjects.ts
94283
+ const ProjectionProjectDbRow = ProjectionProject.mapFields(Struct.assign({
94284
+ defaultModelSelection: Schema.NullOr(Schema.fromJsonString(ModelSelection)),
94285
+ scripts: Schema.fromJsonString(Schema.Array(ProjectScript))
94286
+ }));
94287
+ const makeProjectionProjectRepository = Effect.gen(function* () {
94288
+ const sql = yield* SqlClient.SqlClient;
94289
+ const upsertProjectionProjectRow = SqlSchema.void({
94290
+ Request: ProjectionProject,
94291
+ execute: (row) => sql`
94292
+ INSERT INTO projection_projects (
94293
+ project_id,
94294
+ title,
94295
+ workspace_root,
94296
+ project_metadata_dir,
94297
+ default_model_selection_json,
94298
+ custom_system_prompt,
94299
+ custom_avatar_content_hash,
94300
+ preferred_remote_name,
94301
+ scripts_json,
94302
+ created_at,
94303
+ updated_at,
94304
+ deleted_at
94305
+ )
94306
+ VALUES (
94307
+ ${row.projectId},
94308
+ ${row.title},
94309
+ ${row.workspaceRoot},
94310
+ ${row.projectMetadataDir},
94311
+ ${row.defaultModelSelection !== null ? JSON.stringify(row.defaultModelSelection) : null},
94312
+ ${row.customSystemPrompt ?? null},
94313
+ ${row.customAvatarContentHash ?? null},
94314
+ ${row.preferredRemoteName ?? null},
94315
+ ${JSON.stringify(row.scripts)},
94316
+ ${row.createdAt},
94317
+ ${row.updatedAt},
94318
+ ${row.deletedAt}
94319
+ )
94320
+ ON CONFLICT (project_id)
94321
+ DO UPDATE SET
94322
+ title = excluded.title,
94323
+ workspace_root = excluded.workspace_root,
94324
+ project_metadata_dir = excluded.project_metadata_dir,
94325
+ default_model_selection_json = excluded.default_model_selection_json,
94326
+ custom_system_prompt = excluded.custom_system_prompt,
94327
+ custom_avatar_content_hash = excluded.custom_avatar_content_hash,
94328
+ preferred_remote_name = excluded.preferred_remote_name,
94329
+ scripts_json = excluded.scripts_json,
94330
+ created_at = excluded.created_at,
94331
+ updated_at = excluded.updated_at,
94332
+ deleted_at = excluded.deleted_at
94333
+ `
94334
+ });
94335
+ const getProjectionProjectRow = SqlSchema.findOneOption({
94336
+ Request: GetProjectionProjectInput,
94337
+ Result: ProjectionProjectDbRow,
94338
+ execute: ({ projectId }) => sql`
94339
+ SELECT
94340
+ project_id AS "projectId",
94341
+ title,
94342
+ workspace_root AS "workspaceRoot",
94343
+ project_metadata_dir AS "projectMetadataDir",
94344
+ default_model_selection_json AS "defaultModelSelection",
94345
+ custom_system_prompt AS "customSystemPrompt",
94346
+ custom_avatar_content_hash AS "customAvatarContentHash",
94347
+ preferred_remote_name AS "preferredRemoteName",
94348
+ scripts_json AS "scripts",
94349
+ created_at AS "createdAt",
94350
+ updated_at AS "updatedAt",
94351
+ deleted_at AS "deletedAt"
94352
+ FROM projection_projects
94353
+ WHERE project_id = ${projectId}
94354
+ `
94355
+ });
94356
+ const listProjectionProjectRows = SqlSchema.findAll({
94357
+ Request: Schema.Void,
94358
+ Result: ProjectionProjectDbRow,
94359
+ execute: () => sql`
94360
+ SELECT
94361
+ project_id AS "projectId",
94362
+ title,
94363
+ workspace_root AS "workspaceRoot",
94364
+ project_metadata_dir AS "projectMetadataDir",
94365
+ default_model_selection_json AS "defaultModelSelection",
94366
+ custom_system_prompt AS "customSystemPrompt",
94367
+ custom_avatar_content_hash AS "customAvatarContentHash",
94368
+ preferred_remote_name AS "preferredRemoteName",
94369
+ scripts_json AS "scripts",
94370
+ created_at AS "createdAt",
94371
+ updated_at AS "updatedAt",
94372
+ deleted_at AS "deletedAt"
94373
+ FROM projection_projects
94374
+ ORDER BY created_at ASC, project_id ASC
94375
+ `
94376
+ });
94377
+ const deleteProjectionProjectRow = SqlSchema.void({
94378
+ Request: DeleteProjectionProjectInput,
94379
+ execute: ({ projectId }) => sql`
94380
+ DELETE FROM projection_projects
94381
+ WHERE project_id = ${projectId}
94382
+ `
94383
+ });
94384
+ const upsert = (row) => upsertProjectionProjectRow(row).pipe(Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.upsert:query")));
94385
+ const getById = (input) => getProjectionProjectRow(input).pipe(Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.getById:query")));
94386
+ const listAll = () => listProjectionProjectRows().pipe(Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.listAll:query")));
94387
+ const deleteById = (input) => deleteProjectionProjectRow(input).pipe(Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.deleteById:query")));
94388
+ return {
94389
+ upsert,
94390
+ getById,
94391
+ listAll,
94392
+ deleteById
94393
+ };
94394
+ });
94395
+ const ProjectionProjectRepositoryLive = Layer.effect(ProjectionProjectRepository, makeProjectionProjectRepository);
94396
+ //#endregion
94004
94397
  //#region src/persistence/Layers/ProjectionWorktrees.ts
94005
94398
  const ProjectionWorktreeDbRowSchema$1 = ProjectionWorktree.mapFields(Struct.assign({ prIsDraft: Schema.NullOr(Schema.Number) }));
94006
94399
  function toProjectionWorktree(row) {
@@ -106924,36 +107317,6 @@ const DeleteProjectionPendingApprovalInput = Schema.Struct({ requestId: Approval
106924
107317
  */
106925
107318
  var ProjectionPendingApprovalRepository = class extends Context.Service()("ryco/persistence/Services/ProjectionPendingApprovals/ProjectionPendingApprovalRepository") {};
106926
107319
  //#endregion
106927
- //#region src/persistence/Services/ProjectionProjects.ts
106928
- /**
106929
- * ProjectionProjectRepository - Projection repository interface for projects.
106930
- *
106931
- * Owns persistence operations for project rows in the orchestration projection
106932
- * read model.
106933
- *
106934
- * @module ProjectionProjectRepository
106935
- */
106936
- const ProjectionProject = Schema.Struct({
106937
- projectId: ProjectId,
106938
- title: Schema.String,
106939
- workspaceRoot: Schema.String,
106940
- projectMetadataDir: ProjectMetadataDir,
106941
- defaultModelSelection: Schema.NullOr(ModelSelection),
106942
- customSystemPrompt: Schema.optional(Schema.NullOr(Schema.String)),
106943
- customAvatarContentHash: Schema.NullOr(Schema.String),
106944
- preferredRemoteName: Schema.NullOr(Schema.String),
106945
- scripts: Schema.Array(ProjectScript),
106946
- createdAt: IsoDateTime,
106947
- updatedAt: IsoDateTime,
106948
- deletedAt: Schema.NullOr(IsoDateTime)
106949
- });
106950
- const GetProjectionProjectInput = Schema.Struct({ projectId: ProjectId });
106951
- const DeleteProjectionProjectInput = Schema.Struct({ projectId: ProjectId });
106952
- /**
106953
- * ProjectionProjectRepository - Service tag for project projection persistence.
106954
- */
106955
- var ProjectionProjectRepository = class extends Context.Service()("ryco/persistence/Services/ProjectionProjects/ProjectionProjectRepository") {};
106956
- //#endregion
106957
107320
  //#region src/persistence/Services/ProjectionState.ts
106958
107321
  /**
106959
107322
  * ProjectionStateRepository - Projection repository interface for projector cursors.
@@ -107240,121 +107603,6 @@ const makeProjectionPendingApprovalRepository = Effect.gen(function* () {
107240
107603
  });
107241
107604
  const ProjectionPendingApprovalRepositoryLive = Layer.effect(ProjectionPendingApprovalRepository, makeProjectionPendingApprovalRepository);
107242
107605
  //#endregion
107243
- //#region src/persistence/Layers/ProjectionProjects.ts
107244
- const ProjectionProjectDbRow = ProjectionProject.mapFields(Struct.assign({
107245
- defaultModelSelection: Schema.NullOr(Schema.fromJsonString(ModelSelection)),
107246
- scripts: Schema.fromJsonString(Schema.Array(ProjectScript))
107247
- }));
107248
- const makeProjectionProjectRepository = Effect.gen(function* () {
107249
- const sql = yield* SqlClient.SqlClient;
107250
- const upsertProjectionProjectRow = SqlSchema.void({
107251
- Request: ProjectionProject,
107252
- execute: (row) => sql`
107253
- INSERT INTO projection_projects (
107254
- project_id,
107255
- title,
107256
- workspace_root,
107257
- project_metadata_dir,
107258
- default_model_selection_json,
107259
- custom_system_prompt,
107260
- custom_avatar_content_hash,
107261
- preferred_remote_name,
107262
- scripts_json,
107263
- created_at,
107264
- updated_at,
107265
- deleted_at
107266
- )
107267
- VALUES (
107268
- ${row.projectId},
107269
- ${row.title},
107270
- ${row.workspaceRoot},
107271
- ${row.projectMetadataDir},
107272
- ${row.defaultModelSelection !== null ? JSON.stringify(row.defaultModelSelection) : null},
107273
- ${row.customSystemPrompt ?? null},
107274
- ${row.customAvatarContentHash ?? null},
107275
- ${row.preferredRemoteName ?? null},
107276
- ${JSON.stringify(row.scripts)},
107277
- ${row.createdAt},
107278
- ${row.updatedAt},
107279
- ${row.deletedAt}
107280
- )
107281
- ON CONFLICT (project_id)
107282
- DO UPDATE SET
107283
- title = excluded.title,
107284
- workspace_root = excluded.workspace_root,
107285
- project_metadata_dir = excluded.project_metadata_dir,
107286
- default_model_selection_json = excluded.default_model_selection_json,
107287
- custom_system_prompt = excluded.custom_system_prompt,
107288
- custom_avatar_content_hash = excluded.custom_avatar_content_hash,
107289
- preferred_remote_name = excluded.preferred_remote_name,
107290
- scripts_json = excluded.scripts_json,
107291
- created_at = excluded.created_at,
107292
- updated_at = excluded.updated_at,
107293
- deleted_at = excluded.deleted_at
107294
- `
107295
- });
107296
- const getProjectionProjectRow = SqlSchema.findOneOption({
107297
- Request: GetProjectionProjectInput,
107298
- Result: ProjectionProjectDbRow,
107299
- execute: ({ projectId }) => sql`
107300
- SELECT
107301
- project_id AS "projectId",
107302
- title,
107303
- workspace_root AS "workspaceRoot",
107304
- project_metadata_dir AS "projectMetadataDir",
107305
- default_model_selection_json AS "defaultModelSelection",
107306
- custom_system_prompt AS "customSystemPrompt",
107307
- custom_avatar_content_hash AS "customAvatarContentHash",
107308
- preferred_remote_name AS "preferredRemoteName",
107309
- scripts_json AS "scripts",
107310
- created_at AS "createdAt",
107311
- updated_at AS "updatedAt",
107312
- deleted_at AS "deletedAt"
107313
- FROM projection_projects
107314
- WHERE project_id = ${projectId}
107315
- `
107316
- });
107317
- const listProjectionProjectRows = SqlSchema.findAll({
107318
- Request: Schema.Void,
107319
- Result: ProjectionProjectDbRow,
107320
- execute: () => sql`
107321
- SELECT
107322
- project_id AS "projectId",
107323
- title,
107324
- workspace_root AS "workspaceRoot",
107325
- project_metadata_dir AS "projectMetadataDir",
107326
- default_model_selection_json AS "defaultModelSelection",
107327
- custom_system_prompt AS "customSystemPrompt",
107328
- custom_avatar_content_hash AS "customAvatarContentHash",
107329
- preferred_remote_name AS "preferredRemoteName",
107330
- scripts_json AS "scripts",
107331
- created_at AS "createdAt",
107332
- updated_at AS "updatedAt",
107333
- deleted_at AS "deletedAt"
107334
- FROM projection_projects
107335
- ORDER BY created_at ASC, project_id ASC
107336
- `
107337
- });
107338
- const deleteProjectionProjectRow = SqlSchema.void({
107339
- Request: DeleteProjectionProjectInput,
107340
- execute: ({ projectId }) => sql`
107341
- DELETE FROM projection_projects
107342
- WHERE project_id = ${projectId}
107343
- `
107344
- });
107345
- const upsert = (row) => upsertProjectionProjectRow(row).pipe(Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.upsert:query")));
107346
- const getById = (input) => getProjectionProjectRow(input).pipe(Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.getById:query")));
107347
- const listAll = () => listProjectionProjectRows().pipe(Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.listAll:query")));
107348
- const deleteById = (input) => deleteProjectionProjectRow(input).pipe(Effect.mapError(toPersistenceSqlError("ProjectionProjectRepository.deleteById:query")));
107349
- return {
107350
- upsert,
107351
- getById,
107352
- listAll,
107353
- deleteById
107354
- };
107355
- });
107356
- const ProjectionProjectRepositoryLive = Layer.effect(ProjectionProjectRepository, makeProjectionProjectRepository);
107357
- //#endregion
107358
107606
  //#region src/persistence/Layers/ProjectionState.ts
107359
107607
  const MinLastAppliedSequenceRowSchema = Schema.Struct({ minLastAppliedSequence: Schema.NullOr(NonNegativeInt) });
107360
107608
  const makeProjectionStateRepository = Effect.gen(function* () {
@@ -109827,7 +110075,14 @@ const makeProjectionSnapshotQuery = Effect.gen(function* () {
109827
110075
  const resolveRepositoryIdentitiesForProjects = Effect.fn("ProjectionSnapshotQuery.resolveRepositoryIdentitiesForProjects")(function* (projectRows, options) {
109828
110076
  const filteredProjectRows = options?.includeDeleted === true ? projectRows : projectRows.filter((row) => row.deletedAt === null);
109829
110077
  const uniqueWorkspaceRoots = [...new Set(filteredProjectRows.map((row) => row.workspaceRoot))];
109830
- const repositoryIdentityByWorkspaceRoot = new Map(yield* Effect.forEach(uniqueWorkspaceRoots, (workspaceRoot) => repositoryIdentityResolver.resolve(workspaceRoot).pipe(Effect.map((identity) => [workspaceRoot, identity])), { concurrency: repositoryIdentityResolutionConcurrency }));
110078
+ const repositoryIdentityByWorkspaceRoot = /* @__PURE__ */ new Map();
110079
+ const resolveIdentities = Effect.forEach(uniqueWorkspaceRoots, (workspaceRoot) => repositoryIdentityResolver.resolve(workspaceRoot).pipe(Effect.tap((identity) => Effect.sync(() => {
110080
+ repositoryIdentityByWorkspaceRoot.set(workspaceRoot, identity);
110081
+ }))), {
110082
+ concurrency: repositoryIdentityResolutionConcurrency,
110083
+ discard: true
110084
+ });
110085
+ yield* options?.timeoutMs === void 0 ? resolveIdentities : resolveIdentities.pipe(Effect.timeoutOption(options.timeoutMs));
109831
110086
  return new Map(filteredProjectRows.map((row) => [row.projectId, repositoryIdentityByWorkspaceRoot.get(row.workspaceRoot) ?? null]));
109832
110087
  });
109833
110088
  const listProjectRows = SqlSchema.findAll({
@@ -111217,7 +111472,7 @@ const makeProjectionSnapshotQuery = Effect.gen(function* () {
111217
111472
  if (row.completedAt !== null) updatedAt = maxIso(updatedAt, row.completedAt);
111218
111473
  }
111219
111474
  for (const row of stateRows) updatedAt = maxIso(updatedAt, row.updatedAt);
111220
- const repositoryIdentities = yield* resolveRepositoryIdentitiesForProjects(projectRows);
111475
+ const repositoryIdentities = yield* resolveRepositoryIdentitiesForProjects(projectRows, { timeoutMs: 1e3 });
111221
111476
  const latestTurnByThread = new Map(latestTurnRows.map((row) => [row.threadId, mapLatestTurn(row)]));
111222
111477
  const sessionByThread = new Map(sessionRows.map((row) => [row.threadId, mapSessionRow(row)]));
111223
111478
  const activeProjectIds = new Set(projectRows.filter((row) => row.deletedAt === null).map((row) => row.projectId));
@@ -111905,7 +112160,7 @@ const WorkspaceLayerLive = Layer.mergeAll(WorkspaceAccessPolicyLive, WorkspacePa
111905
112160
  const AuthLayerLive = ServerAuthLive.pipe(Layer.provideMerge(PersistenceLayerLive), Layer.provide(ServerSecretStoreLive));
111906
112161
  const AtlassianLayerLive = Layer.mergeAll(layer$18, layer$2).pipe(Layer.provideMerge(AtlassianConnectionRepositoryLive), Layer.provideMerge(AtlassianResourceRepositoryLive), Layer.provideMerge(ProjectAtlassianLinkRepositoryLive), Layer.provideMerge(PersistenceLayerLive), Layer.provide(ServerSecretStoreLive));
111907
112162
  const ProviderRuntimeLayerLive = ProviderSessionReaperLive.pipe(Layer.provideMerge(ProviderLayerLive), Layer.provideMerge(OrchestrationLayerLive));
111908
- const RuntimeCoreBaseDependenciesLive = RuntimeFeatureLayerLive.pipe(Layer.provideMerge(CheckpointingLayerLive), Layer.provideMerge(SourceControlProviderRegistryLayerLive), Layer.provideMerge(GitLayerLive), Layer.provideMerge(VcsLayerLive), Layer.provideMerge(ProviderRuntimeLayerLive), Layer.provideMerge(TerminalLayerLive), Layer.provideMerge(AgentControlLayerLive), Layer.provideMerge(PersistenceLayerLive), Layer.provideMerge(ProjectionWorktreeRepositoryLive), Layer.provideMerge(KeybindingsLive), Layer.provideMerge(ProviderRegistryLive), Layer.provideMerge(ProviderInstanceRegistryHydrationLive), Layer.provideMerge(AgentControlSessionRegistryLayerLive), Layer.provideMerge(ProviderEventLoggersLive), Layer.provideMerge(layer$1), Layer.provideMerge(OpenCodeRuntimeLive), Layer.provideMerge(WorkspaceLayerLive), Layer.provideMerge(ProjectFaviconResolverLive), Layer.provideMerge(ProjectAvatarStoreLayerLive));
112163
+ const RuntimeCoreBaseDependenciesLive = RuntimeFeatureLayerLive.pipe(Layer.provideMerge(CheckpointingLayerLive), Layer.provideMerge(SourceControlProviderRegistryLayerLive), Layer.provideMerge(GitLayerLive), Layer.provideMerge(VcsLayerLive), Layer.provideMerge(ProviderRuntimeLayerLive), Layer.provideMerge(TerminalLayerLive), Layer.provideMerge(AgentControlLayerLive), Layer.provideMerge(PersistenceLayerLive), Layer.provideMerge(ProjectionWorktreeRepositoryLive), Layer.provideMerge(ProjectionProjectRepositoryLive), Layer.provideMerge(KeybindingsLive), Layer.provideMerge(ProviderRegistryLive), Layer.provideMerge(ProviderInstanceRegistryHydrationLive), Layer.provideMerge(AgentControlSessionRegistryLayerLive), Layer.provideMerge(ProviderEventLoggersLive), Layer.provideMerge(layer$1), Layer.provideMerge(OpenCodeRuntimeLive), Layer.provideMerge(WorkspaceLayerLive), Layer.provideMerge(ProjectFaviconResolverLive), Layer.provideMerge(ProjectAvatarStoreLayerLive));
111909
112164
  const RuntimeDependenciesLive = Layer.mergeAll(RuntimeCoreBaseDependenciesLive, UsageServiceLive).pipe(Layer.provideMerge(ServerSettingsLive)).pipe(Layer.provideMerge(RepositoryIdentityResolverLive), Layer.provideMerge(ServerEnvironmentLive), Layer.provideMerge(AdvertisedEndpointRegistryLive), Layer.provideMerge(AuthLayerLive), Layer.provideMerge(AtlassianLayerLive)).pipe(Layer.provideMerge(AnalyticsServiceLayerLive), Layer.provideMerge(OpenLive), Layer.provideMerge(ServerLifecycleEventsLive), Layer.provideMerge(ChatAttachmentUploadsLive), Layer.provide(NetService.layer));
111910
112165
  const RuntimeServicesLive = Layer.mergeAll(ServerRuntimeStartupLive, AgentControlMcpServerLive.pipe(Layer.provideMerge(AgentControlDiagnosticsServiceLive), Layer.provideMerge(AgentControlActionValidatorLive), Layer.provideMerge(AgentControlProjectPlansLive)), AgentControlExternalMcpServerLive.pipe(Layer.provideMerge(AgentControlDiagnosticsServiceLive), Layer.provideMerge(AgentControlActionValidatorLive), Layer.provideMerge(AgentControlProjectPlansLive), Layer.provideMerge(AgentControlExternalTaskServiceLive.pipe(Layer.provideMerge(AgentControlActionValidatorLive), Layer.provideMerge(AgentControlProjectPlansLive)))), AgentControlExecutionLive.pipe(Layer.provideMerge(ServerRuntimeStartupLive), Layer.provideMerge(AgentControlActionValidatorLive), Layer.provideMerge(AgentControlProjectPlansLive), Layer.provideMerge(OrchestrationCommandApplicationLive))).pipe(Layer.provideMerge(RuntimeDependenciesLive), Layer.provideMerge(DeviceServiceLive));
111911
112166
  const authRoutesLayer = Layer.mergeAll(authBearerBootstrapRouteLayer, authBootstrapRouteLayer, authClientsRevokeOthersRouteLayer, authClientsRevokeRouteLayer, authClientsRouteLayer, authPairingLinksRevokeRouteLayer, authPairingLinksRouteLayer, authPairingCredentialRouteLayer, authSessionRouteLayer, authWebSocketTokenRouteLayer);
@@ -111913,7 +112168,7 @@ const projectAssetRoutesLayer = Layer.mergeAll(projectFaviconRouteLayer, project
111913
112168
  const makeRoutesLayer = Layer.mergeAll(authRoutesLayer, attachmentsRouteLayer, attachmentUploadRouteLayer, orchestrationDispatchRouteLayer, orchestrationSnapshotRouteLayer, otlpTracesProxyRouteLayer, projectAssetRoutesLayer, serverEnvironmentRouteLayer, legacyServerEnvironmentRouteLayer, staticAndDevRouteLayer, websocketRpcRouteLayer, deviceWebsocketRpcRouteLayer, deviceFrameRouteLayer, hubConnectorRoutesLayer, desktopLocalIntroductionRoutesLayer, desktopNativeNodeClaimRoutesLayer).pipe(Layer.provide(browserApiCorsLayer));
111914
112169
  const makeServerLayer = Layer.unwrap(Effect.gen(function* () {
111915
112170
  const config = yield* ServerConfig;
111916
- fixPath();
112171
+ fixPath({ inheritedFromDesktop: config.mode === "desktop" });
111917
112172
  const httpListeningLayer = Layer.effectDiscard(Effect.gen(function* () {
111918
112173
  yield* HttpServer.HttpServer;
111919
112174
  yield* (yield* ServerRuntimeStartup).markHttpListening;