ryco-cli 0.1.30 → 0.1.31

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 (493) hide show
  1. package/dist/{AcpAdapter-DjP0IHpH.cjs → AcpAdapter-ByUp9-wk.cjs} +71 -51
  2. package/dist/{AcpAdapter-CKWzfB3Q.mjs → AcpAdapter-CY_ANTKu.mjs} +73 -53
  3. package/dist/{AcpNativeLogging-Do0LktDb.mjs → AcpNativeLogging-C7PC6imv.mjs} +30 -4
  4. package/dist/{AcpNativeLogging-5gTPK9Fq.cjs → AcpNativeLogging-OQeAya9d.cjs} +33 -1
  5. package/dist/{AcpRegistryDriver-BblCFfev.cjs → AcpRegistryDriver-CD9GN7rI.cjs} +3 -3
  6. package/dist/{AcpRegistryDriver-BzohT-PC.mjs → AcpRegistryDriver-DMZ5VBWJ.mjs} +4 -4
  7. package/dist/AzureDevOpsSourceControlProvider-5giVYoNi.mjs +2053 -0
  8. package/dist/AzureDevOpsSourceControlProvider-BKMXEUaN.cjs +2055 -0
  9. package/dist/{BitbucketSourceControlProvider-D5UVAc9z.mjs → BitbucketSourceControlProvider-BVUBsEUF.mjs} +63 -23
  10. package/dist/{BitbucketSourceControlProvider-Bvl_q1o2.cjs → BitbucketSourceControlProvider-BWnnrbch.cjs} +62 -22
  11. package/dist/{BunPTY-Dcl1Lp62.mjs → BunPTY-CMbDQ1Xb.mjs} +1 -1
  12. package/dist/{ClaudeDriver-DZkz0QPr.cjs → ClaudeDriver-DCrqouOR.cjs} +1373 -191
  13. package/dist/{ClaudeDriver-BuQ_azDw.mjs → ClaudeDriver-DVOss8cC.mjs} +1375 -193
  14. package/dist/{CodexDriver-6Ph2cjAW.cjs → CodexDriver-CBQPHJqU.cjs} +258 -28
  15. package/dist/{CodexDriver-Bi49RIL4.mjs → CodexDriver-DJoTky7Z.mjs} +261 -31
  16. package/dist/{CodexTextGeneration-C5TIspJA.mjs → CodexTextGeneration-BSgNgfZv.mjs} +6 -6
  17. package/dist/{CodexTextGeneration-sXPR9eld.cjs → CodexTextGeneration-C9MDQmZm.cjs} +7 -7
  18. package/dist/{CopilotDriver-Bcdpz6U_.mjs → CopilotDriver-CUkdPXcH.mjs} +78 -20
  19. package/dist/{CopilotDriver-D6P0xgRX.cjs → CopilotDriver-DbaMDH16.cjs} +76 -18
  20. package/dist/{CursorDriver-CRnDGwEv.mjs → CursorDriver-B-ZilXJB.mjs} +114 -97
  21. package/dist/{CursorDriver-DMJ7sGSx.cjs → CursorDriver-DKQqPbKH.cjs} +114 -97
  22. package/dist/{ForgejoSourceControlProvider-D4jGdaJX.cjs → ForgejoSourceControlProvider-CgpjFECj.cjs} +94 -60
  23. package/dist/{ForgejoSourceControlProvider-Dl_Fk3RY.mjs → ForgejoSourceControlProvider-DemMYUye.mjs} +95 -61
  24. package/dist/{GitHubSourceControlProvider-QMe-zymI.cjs → GitHubSourceControlProvider-C4un6hOK.cjs} +218 -119
  25. package/dist/{GitHubSourceControlProvider-DnwKf0ap.mjs → GitHubSourceControlProvider-CRSDYcjc.mjs} +206 -108
  26. package/dist/GitLabSourceControlProvider-D8W1ZLPh.cjs +2260 -0
  27. package/dist/GitLabSourceControlProvider-DpWkJ0M3.mjs +2258 -0
  28. package/dist/{GrokDriver-jy8JIvYY.cjs → GrokDriver-BQ6G_7ZZ.cjs} +6 -7
  29. package/dist/{GrokDriver-Bvq1jP3S.mjs → GrokDriver-Buvas9-q.mjs} +5 -6
  30. package/dist/{Metrics-CnmjpbWk.mjs → Metrics-C3vLS9rz.mjs} +123 -13
  31. package/dist/{Metrics-C0LSU8s7.cjs → Metrics-DjRPLE98.cjs} +170 -12
  32. package/dist/{NodePTY-D7tFWuQe.mjs → NodePTY-DgnuBruq.mjs} +1 -1
  33. package/dist/{OpenCodeDriver-DhyVaBMT.mjs → OpenCodeDriver-BWEZD841.mjs} +183 -49
  34. package/dist/{OpenCodeDriver-Bu5D19tl.cjs → OpenCodeDriver-qUiX0RLH.cjs} +183 -49
  35. package/dist/{SideQuestionIsolation-B-aE6aBz.mjs → SideQuestionIsolation-B1T-DsR0.mjs} +1 -1
  36. package/dist/{SideQuestionIsolation-CtJ4wX83.cjs → SideQuestionIsolation-BPC-Bxsz.cjs} +1 -1
  37. package/dist/bin.cjs +37021 -10253
  38. package/dist/bin.mjs +36892 -10178
  39. package/dist/client/assets/AccountSettings-B88Q_w9Y.js +1 -0
  40. package/dist/client/assets/AiFocusSettings-Bb0TrCPn.js +1 -0
  41. package/dist/client/assets/{AnimatedHeight-UXn4-nUd.js → AnimatedHeight-epXOsgdm.js} +1 -1
  42. package/dist/client/assets/AppearanceSettings-XS9WRVPU.js +1 -0
  43. package/dist/client/assets/AutomationsDialog-bZckh4Y3.js +1 -0
  44. package/dist/client/assets/AutomationsSummary-wPFZCF49.js +1 -0
  45. package/dist/client/assets/BranchToolbar.logic-DjzLKbbB.js +3 -0
  46. package/dist/client/assets/BrowserPanel-CdBLnnfz.js +1 -0
  47. package/dist/client/assets/ChatRightPanel-BCINd0vP.js +34 -0
  48. package/dist/client/assets/ChatThreadRouteView-BFZ0Si-l.js +1 -0
  49. package/dist/client/assets/ColorSwatchPicker-CGyo99o0.js +1 -0
  50. package/dist/client/assets/CommandPalette.logic-BIOMtnEQ.js +1 -0
  51. package/dist/client/assets/CommandPaletteDialog-Db4LH--z.js +2 -0
  52. package/dist/client/assets/CompositeRoot-DtnwMJKj.js +1 -0
  53. package/dist/client/assets/ComputerUseSettings-CkqCqDsU.js +1 -0
  54. package/dist/client/assets/ConnectionsSettings-B9mxExdG.js +7 -0
  55. package/dist/client/assets/CreatePullRequestDialog-CJ7pNCue.js +1 -0
  56. package/dist/client/assets/CreatePullRequestDialogHost-n4ZjdSr4.js +1 -0
  57. package/dist/client/assets/DiagnosticsSettings-f9rFG9re.js +2 -0
  58. package/dist/client/assets/DiagnosticsSettings.logic-Byf-Bu4S.js +1 -0
  59. package/dist/client/assets/DialogHandle-C0c_rK3I.js +1 -0
  60. package/dist/client/assets/{DialogPopup-NfwDyR5c.js → DialogPopup-BKW1PEEa.js} +1 -1
  61. package/dist/client/assets/DialogRoot-BIubqrv0.js +1 -0
  62. package/dist/client/assets/DialogTitle-BAX_FLoG.js +1 -0
  63. package/dist/client/assets/{DialogViewport-B6w_ROOE.js → DialogViewport-C2iOUx0O.js} +1 -1
  64. package/dist/client/assets/DiffPanel-BkqDt_SS.js +25 -0
  65. package/dist/client/assets/DisclosureRegion-B8556yU0.js +1 -0
  66. package/dist/client/assets/DraftChatThreadRouteView-BKgRKJ2w.js +1 -0
  67. package/dist/client/assets/{ExternalIdentityWeb.logic-BlKX8J9h.js → ExternalIdentityWeb.logic-Cu6suNrN.js} +1 -1
  68. package/dist/client/assets/GlassSurface-DLYYzRdP.js +1 -0
  69. package/dist/client/assets/HostedConnectionControls-CoVqtnrK.js +1 -0
  70. package/dist/client/assets/HostedHubRoot-CM2CwPUr.js +2 -0
  71. package/dist/client/assets/{HostedNativeAuthorizationRoute-j7oSlakZ.js → HostedNativeAuthorizationRoute-Bizmqrh_.js} +2 -2
  72. package/dist/client/assets/HostedNodeRenameDialog-SXWMsTO0.js +1 -0
  73. package/dist/client/assets/HostedRelayTrustNotice-BfTyrBi5.js +1 -0
  74. package/dist/client/assets/InboxStatusGlyph-BPTqzp7l.js +1 -0
  75. package/dist/client/assets/IntegrationsSettingsPanel-DAPvkV4i.js +1 -0
  76. package/dist/client/assets/KeybindingsSettings-B8g-YI2O.js +1 -0
  77. package/dist/client/assets/LazyBrowserPanel-Ds9cdOC_.js +2 -0
  78. package/dist/client/assets/McpServersSettings-Dw6G3ff3.js +6 -0
  79. package/dist/client/assets/MobileSheet-DfgXNWbd.js +1 -0
  80. package/dist/client/assets/ModelTuningDial-DQBAbuNL.js +1 -0
  81. package/dist/client/assets/NewWorktreeDialog-CDZAJmK6.js +4 -0
  82. package/dist/client/assets/NodeSecuritySettings-3MELA9ru.js +1 -0
  83. package/dist/client/assets/NullStore-gT_6_xZE.js +1 -0
  84. package/dist/client/assets/OnboardingDialog-CAAtNnJf.js +1 -0
  85. package/dist/client/assets/OpinionatedPluginsSettings-AiDB0Vl4.js +1 -0
  86. package/dist/client/assets/{PdfAttachmentPreview-C8-hT8KQ.js → PdfAttachmentPreview-BFNW2wjN.js} +2 -2
  87. package/dist/client/assets/{PhoneGetAppInterstitial-Zh0zpBgT.js → PhoneGetAppInterstitial-D8fwZ8E9.js} +1 -1
  88. package/dist/client/assets/PhoneHome-YHgHljA0.js +1 -0
  89. package/dist/client/assets/PhoneSettingsSurface-BVxJppvK.js +2 -0
  90. package/dist/client/assets/PreviewPanel-BYcEnkv9.js +643 -0
  91. package/dist/client/assets/ProjectScriptDialog-K34K2Kzm.js +1 -0
  92. package/dist/client/assets/ProjectsPage-DXnMYLjb.js +1 -0
  93. package/dist/client/assets/PromoteChatDialog-CAY7_wJ-.js +1 -0
  94. package/dist/client/assets/ProviderLimitWindow-CK04BSkM.js +1 -0
  95. package/dist/client/assets/ProviderUpdateLaunchNotification.logic-BMBrDDOC.js +1 -0
  96. package/dist/client/assets/ProvidersSettingsPanel-C85PX9Es.js +1 -0
  97. package/dist/client/assets/PullRequestsPage-C0rgfGwB.js +1 -0
  98. package/dist/client/assets/{QuitShortcutFeedback-Qs9XsuZ4.js → QuitShortcutFeedback-DSkKqETs.js} +1 -1
  99. package/dist/client/assets/RedactedSensitiveText-DQ0YveQd.js +1 -0
  100. package/dist/client/assets/RollingText-BzvpP5fa.js +1 -0
  101. package/dist/client/assets/RootAppShell-BYQ-eGNT.js +6 -0
  102. package/dist/client/assets/{Separator-B6Esv57Y.js → Separator-DpiW19Vw.js} +1 -1
  103. package/dist/client/assets/SettingsPage-BCFN7Ju2.js +2 -0
  104. package/dist/client/assets/SettingsPanels-CP6z2b1x.js +3 -0
  105. package/dist/client/assets/SettingsPanels.editor-D8U-TWWG.js +1 -0
  106. package/dist/client/assets/SettingsSelect-DEhNaz3E.js +1 -0
  107. package/dist/client/assets/Sidebar.logic-D_ODfSpl.js +1 -0
  108. package/dist/client/assets/SimulatorPanel-DCT6fZ0X.js +1 -0
  109. package/dist/client/assets/SourceControlSettings-DxUtvPMK.js +1 -0
  110. package/dist/client/assets/StatisticsPage-C9SrwtM4.js +1 -0
  111. package/dist/client/assets/StatisticsPanel-BMYLETs0.js +1 -0
  112. package/dist/client/assets/ThreadLinkList-BN5z5EpS.js +169 -0
  113. package/dist/client/assets/ThreadTerminalDrawer-CgIFOlR-.js +18 -0
  114. package/dist/client/assets/ThreadWorkspacePanel-DvXoqQPF.js +3 -0
  115. package/dist/client/assets/ToolbarRootContext-8FsV9Cpj.js +1 -0
  116. package/dist/client/assets/TraitsPicker-DcrpJahy.js +1 -0
  117. package/dist/client/assets/Virtualizer-CwXeUPla.js +1345 -0
  118. package/dist/client/assets/WorkspacePullRequestPanel-3mlcJn9G.js +1 -0
  119. package/dist/client/assets/WorkspaceReview-UGbCgXeK.js +2 -0
  120. package/dist/client/assets/{abnfDiagram-N423BO3Z-ByEe3mC0.js → abnfDiagram-N423BO3Z-DVEM6Scc.js} +1 -1
  121. package/dist/client/assets/{activity-CwTUF6lv.js → activity-DVCuAejY.js} +1 -1
  122. package/dist/client/assets/{alert-DQEkrtUJ.js → alert-FV7ZIit_.js} +1 -1
  123. package/dist/client/assets/alert-dialog-CgXR9tED.js +1 -0
  124. package/dist/client/assets/app-window-3xtwqZgI.js +1 -0
  125. package/dist/client/assets/appChrome-COCz-T7w.js +1 -0
  126. package/dist/client/assets/{appearancePreferences-nFx4MHoI.js → appearancePreferences-NnsvXwBe.js} +1 -1
  127. package/dist/client/assets/architecture-7GRP2DOG-DXXb_0_g.js +1 -0
  128. package/dist/client/assets/{architectureDiagram-T3A2C74G-Bd-yxaTr.js → architectureDiagram-T3A2C74G-B6pcKiCj.js} +1 -1
  129. package/dist/client/assets/{arrow-left-DUOpzEbP.js → arrow-left-Blu3LSE2.js} +1 -1
  130. package/dist/client/assets/{arrow-right-HOYJnPKw.js → arrow-right-CO3CH0ne.js} +1 -1
  131. package/dist/client/assets/arrow-up-B69gV2Bq.js +1 -0
  132. package/dist/client/assets/{arrow-up-right-DHnMKuVA.js → arrow-up-right-BbPGFOLA.js} +1 -1
  133. package/dist/client/assets/authorization-Ob6YwWiI.js +1 -0
  134. package/dist/client/assets/autocomplete-RVpjsrDv.js +1 -0
  135. package/dist/client/assets/ban-BIm2PVkE.js +1 -0
  136. package/dist/client/assets/{blockDiagram-VBNYF7ZC-CPDBonMC.js → blockDiagram-VBNYF7ZC-WNerGp9V.js} +1 -1
  137. package/dist/client/assets/{bot-DxjPA7Bw.js → bot-C9nWtaWq.js} +1 -1
  138. package/dist/client/assets/browserState-jt47YsqD.js +1 -0
  139. package/dist/client/assets/{c4Diagram-5PPSVZJV-BM6pAiqT.js → c4Diagram-5PPSVZJV-wp1ioOoM.js} +1 -1
  140. package/dist/client/assets/camera-C13VoW3c.js +1 -0
  141. package/dist/client/assets/capabilities-CfOhq009.js +1 -0
  142. package/dist/client/assets/channel-56r2qL2v.js +1 -0
  143. package/dist/client/assets/{chart-column-Cg7d41tb.js → chart-column-DRv0YtL_.js} +1 -1
  144. package/dist/client/assets/checkbox-CIIIY9FA.js +1 -0
  145. package/dist/client/assets/checks-Dw022Bvy.js +1 -0
  146. package/dist/client/assets/{chunk-2GRJ4B5K-DVKozJ41.js → chunk-2GRJ4B5K-DRl3ILpc.js} +1 -1
  147. package/dist/client/assets/{chunk-4I5QYGJK-BRoMwPkW.js → chunk-4I5QYGJK-CYTRl4bo.js} +1 -1
  148. package/dist/client/assets/{chunk-5RXB4S5H-DFMKyoqP.js → chunk-5RXB4S5H-VCNwRsOa.js} +1 -1
  149. package/dist/client/assets/{chunk-6Q2QTUOP-Ba6UENe9.js → chunk-6Q2QTUOP-DnSeKGPG.js} +1 -1
  150. package/dist/client/assets/{chunk-7Z6QIM7H-B87gYLWH.js → chunk-7Z6QIM7H-Cjilh9TF.js} +1 -1
  151. package/dist/client/assets/{chunk-GF5L2VYU-DZ840GRQ.js → chunk-GF5L2VYU-CGR7AW0t.js} +1 -1
  152. package/dist/client/assets/{chunk-I66GZJ75-BO6p4Aqg.js → chunk-I66GZJ75-CXSn8dDu.js} +1 -1
  153. package/dist/client/assets/{chunk-JQJVKLGR-5dTfVinz.js → chunk-JQJVKLGR-Dro-75lU.js} +1 -1
  154. package/dist/client/assets/{chunk-KBJHAD2P-BeWfBZdP.js → chunk-KBJHAD2P-BDqN2kVf.js} +1 -1
  155. package/dist/client/assets/{chunk-NSK5VX7P-DuRkdn5k.js → chunk-NSK5VX7P-DGo5UczH.js} +1 -1
  156. package/dist/client/assets/{chunk-QR6OTTB3-Duz4Y_uE.js → chunk-QR6OTTB3-RWuyWnBI.js} +1 -1
  157. package/dist/client/assets/{chunk-UBXNYLIW-D-z8URgN.js → chunk-UBXNYLIW-BPRzeB0w.js} +1 -1
  158. package/dist/client/assets/{chunk-W5SLKNZC-AGjFjjoJ.js → chunk-W5SLKNZC-DYWocTFi.js} +1 -1
  159. package/dist/client/assets/{chunk-WRU74C26-BgY3UiXB.js → chunk-WRU74C26-ChbB1jY3.js} +1 -1
  160. package/dist/client/assets/circle-stop-D8B4hRpY.js +1 -0
  161. package/dist/client/assets/circle-x-CNLfrTqR.js +1 -0
  162. package/dist/client/assets/classDiagram-JCYQIIEL-DGvmFev3.js +1 -0
  163. package/dist/client/assets/classDiagram-v2-OCEON4UE-DGvmFev3.js +1 -0
  164. package/dist/client/assets/{clipboard-copy-BWf3JuTE.js → clipboard-copy-DGi8FKNO.js} +1 -1
  165. package/dist/client/assets/clock-3-DmJ4_XPI.js +1 -0
  166. package/dist/client/assets/clock-DZIuPtNG.js +1 -0
  167. package/dist/client/assets/color-picker-BdBXje-a.js +1 -0
  168. package/dist/client/assets/columns-2-CWlMOClK.js +1 -0
  169. package/dist/client/assets/combobox-Dtjtf7AB.js +1 -0
  170. package/dist/client/assets/{cynefin-OW5HDTMX-BuOAGqlK.js → cynefin-OW5HDTMX-TuShvMuM.js} +1 -1
  171. package/dist/client/assets/{cynefinDiagram-MW4NZA55-DqV0Aokp.js → cynefinDiagram-MW4NZA55-B0Edt2Em.js} +1 -1
  172. package/dist/client/assets/{dagre-VZM6K2ZE-D_GFquDW.js → dagre-VZM6K2ZE-D-eiuqHx.js} +1 -1
  173. package/dist/client/assets/{data-list-BJCq3CVP.js → data-list-BAx6jBY1.js} +1 -1
  174. package/dist/client/assets/desktopUpdateAtoms-BjrLa3tl.js +1 -0
  175. package/dist/client/assets/desktopWorkspace-C2wXVBhc.js +1 -0
  176. package/dist/client/assets/{deviceName-C2N8ZRX3.js → deviceName-B4youG0v.js} +1 -1
  177. package/dist/client/assets/{diagram-7IWD3JNH-B1wlsNg2.js → diagram-7IWD3JNH-DgM6lMlR.js} +1 -1
  178. package/dist/client/assets/{diagram-B4RE2ZJO-D-CYoym7.js → diagram-B4RE2ZJO-CyHNDjzV.js} +1 -1
  179. package/dist/client/assets/{diagram-LBJQPF4R-DqJ9NCqt.js → diagram-LBJQPF4R-DDzuLIN5.js} +1 -1
  180. package/dist/client/assets/{diagram-Q27KOJAE-3yp1D2u4.js → diagram-Q27KOJAE-BaBvK9QB.js} +1 -1
  181. package/dist/client/assets/{diagram-UB23O5K3-Byp25nGC.js → diagram-UB23O5K3-CzZ2ewuZ.js} +1 -1
  182. package/dist/client/assets/dialogWords-Cg0YkJVg.js +1 -0
  183. package/dist/client/assets/diffRouteSearch-D2MKN_ah.js +1 -0
  184. package/dist/client/assets/disclosureMotion-cbMJn5-z.js +1 -0
  185. package/dist/client/assets/{download-DsYNYJeu.js → download-TvtXS4hE.js} +1 -1
  186. package/dist/client/assets/{ebnfDiagram-BXEA7PRR-B_IM1l6o.js → ebnfDiagram-BXEA7PRR-CL1vdOKi.js} +1 -1
  187. package/dist/client/assets/editorPreferences-DqKyA-2Z.js +1 -0
  188. package/dist/client/assets/ellipsis-CDK1dNFZ.js +1 -0
  189. package/dist/client/assets/ellipsis-vertical-CwzEUTwV.js +1 -0
  190. package/dist/client/assets/{empty-BbJHvskr.js → empty-BovKoxbn.js} +1 -1
  191. package/dist/client/assets/{erDiagram-JOGREHBK--OtcrCRJ.js → erDiagram-JOGREHBK-DmQR2if6.js} +1 -1
  192. package/dist/client/assets/eventmodeling-NTZA5JFV-D272GIcY.js +1 -0
  193. package/dist/client/assets/external-link-CJeVJZ7s.js +1 -0
  194. package/dist/client/assets/eye-BUmrXqzg.js +1 -0
  195. package/dist/client/assets/file-diff-BWc3mYsz.js +1 -0
  196. package/dist/client/assets/flowDiagram-UKHOOZJN-DLyS38Mm.js +1 -0
  197. package/dist/client/assets/folder-git-2-CPxg5wKP.js +1 -0
  198. package/dist/client/assets/folder-open-DcMymvp1.js +1 -0
  199. package/dist/client/assets/formatCount-B4KLI651.js +1 -0
  200. package/dist/client/assets/{ganttDiagram-PKOTCBZU-w0seBi3Q.js → ganttDiagram-PKOTCBZU-1q2nUL92.js} +1 -1
  201. package/dist/client/assets/git-pull-request-BFPwpm3c.js +1 -0
  202. package/dist/client/assets/{gitGraph-4MIJSDKK-BOJ0lcSW.js → gitGraph-4MIJSDKK-COtwmv2S.js} +1 -1
  203. package/dist/client/assets/{gitGraphDiagram-DS77QQ5N-BMfOCCYn.js → gitGraphDiagram-DS77QQ5N-ChsvaxX4.js} +1 -1
  204. package/dist/client/assets/{group-tVMKGp7Q.js → group-DWWn0dTx.js} +1 -1
  205. package/dist/client/assets/hammer-BXo-EU88.js +1 -0
  206. package/dist/client/assets/hostedConnectionCoordinator-BkAE-RhA.js +1 -0
  207. package/dist/client/assets/{index-BqZvnGNr.js → index-DARIYokI.js} +2 -2
  208. package/dist/client/assets/{info-A6RAGUB7-acjBTQ5o.js → info-A6RAGUB7-CI2qZ9wW.js} +1 -1
  209. package/dist/client/assets/{infoDiagram-6WML65LV-DB01Nc2m.js → infoDiagram-6WML65LV-BPmgcTPH.js} +1 -1
  210. package/dist/client/assets/{input-BDWSVClC.js → input-CCie4mm1.js} +1 -1
  211. package/dist/client/assets/{ishikawaDiagram-WSZJBQD7-KhZTvm-J.js → ishikawaDiagram-WSZJBQD7-LyS9p3Yg.js} +1 -1
  212. package/dist/client/assets/{journeyDiagram-NVQOT4AX-C3JCYk-2.js → journeyDiagram-NVQOT4AX-BYaAmN65.js} +1 -1
  213. package/dist/client/assets/{kanban-definition-27J2QSJJ-Dbo0C1s6.js → kanban-definition-27J2QSJJ-D-pwzqFt.js} +1 -1
  214. package/dist/client/assets/{key-round-CETZqe3h.js → key-round-BlrUTfxB.js} +1 -1
  215. package/dist/client/assets/keyboard-DlBdq6sz.js +1 -0
  216. package/dist/client/assets/label-ChtVI9lp.js +1 -0
  217. package/dist/client/assets/layers-BB-ruGvd.js +1 -0
  218. package/dist/client/assets/lifecycleSuggestionPolicy-0ERe_O53.js +1 -0
  219. package/dist/client/assets/list-checks-BkM_ZRsj.js +1 -0
  220. package/dist/client/assets/loader-3vQnfqIT.js +1 -0
  221. package/dist/client/assets/{log-out-D5-aSBAz.js → log-out-CKq9YiLY.js} +1 -1
  222. package/dist/client/assets/{logging-B_qXVrk6.js → logging-CCg76rgn.js} +1 -1
  223. package/dist/client/assets/main-Ch0bwS-M.js +9 -0
  224. package/dist/client/assets/main-Di0isH9D.css +2 -0
  225. package/dist/client/assets/{mermaid-parser.core-B6Q-3x_q.js → mermaid-parser.core-RK9ah5RM.js} +2 -2
  226. package/dist/client/assets/{mermaidEngine-DksLcesB.js → mermaidEngine-Dr8UsPhH.js} +3 -3
  227. package/dist/client/assets/message-circle-dashed-BrjwqS7-.js +1 -0
  228. package/dist/client/assets/messageQueueDrain-B7R7Qmq6.js +1 -0
  229. package/dist/client/assets/messages-square-cDTkDJv_.js +1 -0
  230. package/dist/client/assets/{mindmap-definition-FAOFIHXS-LaMzRxqw.js → mindmap-definition-FAOFIHXS-DVudWasx.js} +1 -1
  231. package/dist/client/assets/{packet-AYTQ26CC-BHhg59Si.js → packet-AYTQ26CC-DnkTsVhD.js} +1 -1
  232. package/dist/client/assets/panels-top-left-B7jZiLth.js +1 -0
  233. package/dist/client/assets/path-text-3Rfu6lt8.js +1 -0
  234. package/dist/client/assets/{pegDiagram-VL7TDLO6-s7l7UD9d.js → pegDiagram-VL7TDLO6-Do5PIp8B.js} +1 -1
  235. package/dist/client/assets/pencil-Bzg-nc6d.js +1 -0
  236. package/dist/client/assets/{pie-WAS4IAKB-DygX31Z9.js → pie-WAS4IAKB-B_nNQOzn.js} +1 -1
  237. package/dist/client/assets/{pieDiagram-7S7Q4E2Y-bb6I9TtZ.js → pieDiagram-7S7Q4E2Y-D_IG4xwA.js} +1 -1
  238. package/dist/client/assets/{play-DUvOxTpL.js → play-DpXXQ1qB.js} +1 -1
  239. package/dist/client/assets/popover-OWEv6cQz.js +48 -0
  240. package/dist/client/assets/presentationTier-DPVAxTK4.js +1 -0
  241. package/dist/client/assets/previewRouteSearch-BjZdTuSf.js +1 -0
  242. package/dist/client/assets/primary-Cf-xJExj.js +4 -0
  243. package/dist/client/assets/primitives-CxTBN7D4.js +1 -0
  244. package/dist/client/assets/projectCheckouts.logic-DUT4AxXr.js +1 -0
  245. package/dist/client/assets/projectPaths-B8aVmOZX.js +1 -0
  246. package/dist/client/assets/projectPreferences-CzWBItFj.js +1 -0
  247. package/dist/client/assets/providerCapabilities-B2YOPsLN.js +1 -0
  248. package/dist/client/assets/providerDriverMeta-BHHL9uw0.js +1 -0
  249. package/dist/client/assets/providerModels-v9PYbzRE.js +1 -0
  250. package/dist/client/assets/providerStatus-CDPaqb0S.js +1 -0
  251. package/dist/client/assets/pullRequestsModel.logic-Dv_om_C4.js +1 -0
  252. package/dist/client/assets/{qr-code-dbkTo07n.js → qr-code-BlbiBIwH.js} +1 -1
  253. package/dist/client/assets/{qr-code-D4CtBq2F.js → qr-code-DywzVgQC.js} +1 -1
  254. package/dist/client/assets/{quadrantDiagram-CIZ2JOQS-Cj1Y68ZF.js → quadrantDiagram-CIZ2JOQS-DY6fJyrM.js} +1 -1
  255. package/dist/client/assets/{radar-RG4KPBEZ-FHM3ftPp.js → radar-RG4KPBEZ-D9689I5m.js} +1 -1
  256. package/dist/client/assets/radio-group-DVwD6Cuy.js +1 -0
  257. package/dist/client/assets/{railroad-74A4TZTK-CPMn18Cm.js → railroad-74A4TZTK-DVzWbQnl.js} +1 -1
  258. package/dist/client/assets/railroad-abnf-HS5TGJTU-C_2P6umA.js +1 -0
  259. package/dist/client/assets/railroad-ebnf-LZEXJU2U-aGlR3R3z.js +1 -0
  260. package/dist/client/assets/railroad-peg-WCYAUIDC-DCB9oE8y.js +1 -0
  261. package/dist/client/assets/{railroadDiagram-AXF67PYL-DyV3SuDj.js → railroadDiagram-AXF67PYL-D1oJ6Jtl.js} +1 -1
  262. package/dist/client/assets/readCache-B7cDPz2O.js +1 -0
  263. package/dist/client/assets/{refresh-cw-CgDa2Ok_.js → refresh-cw-CRUTivd6.js} +1 -1
  264. package/dist/client/assets/{requirementDiagram-LRYGKXZP-_xEAGWaH.js → requirementDiagram-LRYGKXZP-7RM8iREp.js} +1 -1
  265. package/dist/client/assets/rotate-ccw-BE2ZCwL6.js +1 -0
  266. package/dist/client/assets/roving-radio-group-NMPWrDqe.js +1 -0
  267. package/dist/client/assets/rows-2-DDS4dGTX.js +1 -0
  268. package/dist/client/assets/runtime-DjjjAcTE.js +18 -0
  269. package/dist/client/assets/safePolygon-C1AzMRS4.js +1 -0
  270. package/dist/client/assets/{sankeyDiagram-W5VNT64P-Clf6oTLi.js → sankeyDiagram-W5VNT64P-C1tKAPGN.js} +1 -1
  271. package/dist/client/assets/{save-C8h0AMdl.js → save-OZdkPs_y.js} +1 -1
  272. package/dist/client/assets/scroll-area-80P7vbjw.js +1 -0
  273. package/dist/client/assets/{scrollEdges-BXYnwntN.js → scrollEdges-C0Oc-5qi.js} +1 -1
  274. package/dist/client/assets/select-Cb9FUPHD.js +1 -0
  275. package/dist/client/assets/separator-CO8bC7Wc.js +1 -0
  276. package/dist/client/assets/{sequenceDiagram-SI44F4Z6-CcYtQLSe.js → sequenceDiagram-SI44F4Z6-DGVpb7jL.js} +1 -1
  277. package/dist/client/assets/settings-2-PrRDu6Lc.js +1 -0
  278. package/dist/client/assets/settingsLayout-CRFNCk_D.js +1 -0
  279. package/dist/client/assets/sheet-C5DW7qVO.js +1 -0
  280. package/dist/client/assets/{shield-DPC4oHTi.js → shield-CBHYqlkR.js} +1 -1
  281. package/dist/client/assets/{shield-alert-CwH36qZb.js → shield-alert-Dc2cGwyR.js} +1 -1
  282. package/dist/client/assets/{shield-check-CGD7sEeF.js → shield-check-_wl7R4Js.js} +1 -1
  283. package/dist/client/assets/sidebar-0BBaFNm3.js +1 -0
  284. package/dist/client/assets/sidebarProjectFolders-BjWzbt8C.js +3 -0
  285. package/dist/client/assets/sidebarProjectGrouping-nQRStWrZ.js +1 -0
  286. package/dist/client/assets/sidebarStatusText-BBKuNies.js +1 -0
  287. package/dist/client/assets/sidebarUndo-Dfq1lvyF.js +1 -0
  288. package/dist/client/assets/{skeleton-rS3IgBob.js → skeleton-DfUe6VV_.js} +1 -1
  289. package/dist/client/assets/sliders-horizontal-BGXkwvKv.js +1 -0
  290. package/dist/client/assets/sliding-tabs-BnDSjRU3.js +39 -0
  291. package/dist/client/assets/{smartphone-DgVJfbv3.js → smartphone-OEAQOTdv.js} +1 -1
  292. package/dist/client/assets/spinner-lHRJWsym.js +1 -0
  293. package/dist/client/assets/square-B05NKv3e.js +1 -0
  294. package/dist/client/assets/{star-Cqay-Cae.js → star-C8mHmfZu.js} +1 -1
  295. package/dist/client/assets/{stateDiagram-OKZ733FA-DEKURpRP.js → stateDiagram-OKZ733FA-CCOAegCG.js} +1 -1
  296. package/dist/client/assets/stateDiagram-v2-UEYNNEHI-D60qqBed.js +1 -0
  297. package/dist/client/assets/storeSelectors-BichCKDC.js +1 -0
  298. package/dist/client/assets/surfaceMorph-BTRijmlU.js +1 -0
  299. package/dist/client/assets/{swimlanes-SLNWSIFB-DrR6sbi6.js → swimlanes-SLNWSIFB-CFsLYT4h.js} +1 -1
  300. package/dist/client/assets/swimlanesDiagram-ULZ7WXOC-D0SaJgSn.js +8 -0
  301. package/dist/client/assets/switch-oQc7Ifbl.js +1 -0
  302. package/dist/client/assets/text-wrap-DSRdSfDm.js +1 -0
  303. package/dist/client/assets/textarea-VyiIZ0wQ.js +1 -0
  304. package/dist/client/assets/threadPriorityRefreshRuntime-H656C1J_.js +1 -0
  305. package/dist/client/assets/ticker-CPutfhZ4.js +1 -0
  306. package/dist/client/assets/{timeline-definition-Z64GVDOM-bQJvmJx5.js → timeline-definition-Z64GVDOM-B4agmO7R.js} +1 -1
  307. package/dist/client/assets/toggle-DFqtCPt-.js +1 -0
  308. package/dist/client/assets/toggle-group-C5ICmqkI.js +1 -0
  309. package/dist/client/assets/{tokenModePresentation-BkS-mry_.js → tokenModePresentation-umDRm4k1.js} +1 -1
  310. package/dist/client/assets/tooltip-DbqhseXd.js +1 -0
  311. package/dist/client/assets/{treeView-Q6P3EWNA-D4Ex5QTp.js → treeView-Q6P3EWNA-C_S3udFB.js} +1 -1
  312. package/dist/client/assets/{treemap-WGGIJYW6-C4B6Y6qM.js → treemap-WGGIJYW6-B-kUSAkE.js} +1 -1
  313. package/dist/client/assets/undo-2-lyluTGMW.js +1 -0
  314. package/dist/client/assets/{unplug-B1dczi-t.js → unplug-D6iu-qlh.js} +1 -1
  315. package/dist/client/assets/usage-ClF-eUmy.js +1 -0
  316. package/dist/client/assets/useActiveIndicator-R5NWu8Fg.js +1 -0
  317. package/dist/client/assets/useAppSidebarCollapsed-BbMxfio5.js +1 -0
  318. package/dist/client/assets/useAppearancePreference-Ix13pMKy.js +1 -0
  319. package/dist/client/assets/useAtlassian-BYDCc9lv.js +0 -0
  320. package/dist/client/assets/useCheckoutResolution-CR-oOp5-.js +1 -0
  321. package/dist/client/assets/useDesktopRelaunchGuard-Jmh615iZ.js +1 -0
  322. package/dist/client/assets/useDiffFileNavigation-DeuzdD5E.js +15 -0
  323. package/dist/client/assets/useDiffLayout-DhcXwhBL.js +1 -0
  324. package/dist/client/assets/useEnvironmentSettingsTarget-DM6BRDT7.js +1 -0
  325. package/dist/client/assets/useFocus-CV0KIZwg.js +1 -0
  326. package/dist/client/assets/useGit-CUcs7h5_.js +1 -0
  327. package/dist/client/assets/useGitBranchSearch-CeKFtnCL.js +1 -0
  328. package/dist/client/assets/useHostedDraftExecutionTarget-DvQU5UOq.js +1 -0
  329. package/dist/client/assets/useLabelableId-CEgCRi6q.js +1 -0
  330. package/dist/client/assets/useLandingFlash-BfOOlFtW.js +1 -0
  331. package/dist/client/assets/useLogicalProjectSnapshots-CRNZke74.js +1 -0
  332. package/dist/client/assets/useNavigate-sQZthdyT.js +1 -0
  333. package/dist/client/assets/usePageLeadingInsetClass-Bf4nUvx4.js +1 -0
  334. package/dist/client/assets/usePhoneThreadActions-VaQ-mZex.js +1 -0
  335. package/dist/client/assets/usePopupHandleStore-DimKo2Yy.js +1 -0
  336. package/dist/client/assets/usePopupViewport-YeqX_UM3.js +1 -0
  337. package/dist/client/assets/usePresentationTier-B9kCQ4YH.js +1 -0
  338. package/dist/client/assets/useProject-Kt74Z12J.js +1 -0
  339. package/dist/client/assets/useProviderOptionsUpdater-CTzNh2B7.js +2 -0
  340. package/dist/client/assets/usePullRequestFilesViewed-D5Snmzys.js +1 -0
  341. package/dist/client/assets/usePullRequestsModel-DJL5HHbP.js +40 -0
  342. package/dist/client/assets/useScrollLock-CLZ31xsK.js +1 -0
  343. package/dist/client/assets/useSidebarThreadActions-n6EkLATf.js +6 -0
  344. package/dist/client/assets/{useStatistics-B76_r68I.js → useStatistics-DD0mYS4J.js} +14 -14
  345. package/dist/client/assets/{useTheme-B441xg4F.js → useTheme-Bdy-BDs-.js} +1 -1
  346. package/dist/client/assets/useValueChanged-DoumqMnV.js +1 -0
  347. package/dist/client/assets/{user-round-CLy1Qy1Y.js → user-round-BPDXr8Gq.js} +1 -1
  348. package/dist/client/assets/{vennDiagram-T6HMQDX7-8iiroXim.js → vennDiagram-T6HMQDX7-B1UEn_j_.js} +1 -1
  349. package/dist/client/assets/{vscode-icons-CJBVQtq5.js → vscode-icons-Ccy-gzFN.js} +1 -1
  350. package/dist/client/assets/{wardley-WFR3VGLG-DpyNUbTc.js → wardley-WFR3VGLG-gPdyDc-7.js} +1 -1
  351. package/dist/client/assets/{wardleyDiagram-T6FBY63Y-CI7is3QO.js → wardleyDiagram-T6FBY63Y-2aDcwOA4.js} +1 -1
  352. package/dist/client/assets/workspaceLifecycle-OJ1aKksw.js +3 -0
  353. package/dist/client/assets/workspaceMetadataProjection-CyEyJhUa.js +1 -0
  354. package/dist/client/assets/workspaceRouteSearch-CCavUdbH.js +1 -0
  355. package/dist/client/assets/{wrench-7pbbxqrZ.js → wrench-CPUCA_rn.js} +1 -1
  356. package/dist/client/assets/wsTransport-C88seBPA.js +15 -0
  357. package/dist/client/assets/{xychartDiagram-ELKLHX3M-BTEX3m2y.js → xychartDiagram-ELKLHX3M-C1_7Q-1i.js} +1 -1
  358. package/dist/client/favicon.svg +1 -1
  359. package/dist/client/index.html +1 -1
  360. package/dist/collectUint8StreamText-BsLSgI8i.mjs +710 -0
  361. package/dist/collectUint8StreamText-D5olwfpM.cjs +757 -0
  362. package/dist/{deviceHostWorker-L8C9wy38.mjs → deviceHostWorker-B-Dn-6An.mjs} +1 -1
  363. package/dist/{makeManagedServerProvider-CF776SAO.cjs → makeManagedServerProvider-B5tP7tvg.cjs} +1 -1
  364. package/dist/{makeManagedServerProvider-B90UKjnv.mjs → makeManagedServerProvider-B65ipCxM.mjs} +2 -2
  365. package/dist/resource-monitor/linux-arm64/ryco-resource-monitor +0 -0
  366. package/dist/resource-monitor/ryco-resource-monitor +0 -0
  367. package/dist/resource-monitor/ryco-resource-monitor.exe +0 -0
  368. package/dist/resource-monitor/win32-arm64/ryco-resource-monitor.exe +0 -0
  369. package/dist/resource-monitor/win32-x64/ryco-resource-monitor.exe +0 -0
  370. package/dist/{runtimeSession-V3RIy8Ao.mjs → runtimeSession-D_BZ-wRH.mjs} +1 -1
  371. package/dist/{src-CARHuYkT.cjs → src-FmeCeBJ9.cjs} +2291 -72
  372. package/dist/{src-CtsgPPhb.mjs → src-VTj60bUm.mjs} +1974 -61
  373. package/package.json +1 -1
  374. package/dist/AzureDevOpsSourceControlProvider-CKSvfuDS.cjs +0 -190
  375. package/dist/AzureDevOpsSourceControlProvider-DRWSXTml.mjs +0 -188
  376. package/dist/GitLabSourceControlProvider-Cj07OTBD.mjs +0 -186
  377. package/dist/GitLabSourceControlProvider-CvvN5pHt.cjs +0 -188
  378. package/dist/client/assets/AccountSettings-v6-r6gYl.js +0 -1
  379. package/dist/client/assets/AiFocusSettings-BVdLON0q.js +0 -1
  380. package/dist/client/assets/AppearanceSettings-DRChsQnN.js +0 -1
  381. package/dist/client/assets/BranchToolbar.logic-YN3KjVr9.js +0 -3
  382. package/dist/client/assets/BrowserPanel-Dxw3stFP.js +0 -1
  383. package/dist/client/assets/ChatRightPanel-CygpcJiF.js +0 -201
  384. package/dist/client/assets/ChatThreadRouteView-DYLZFHu0.js +0 -1
  385. package/dist/client/assets/CommandPaletteDialog-BRvBzP1R.js +0 -1
  386. package/dist/client/assets/CompositeRoot-BeEGGWwn.js +0 -1
  387. package/dist/client/assets/ComputerUseSettings-Cq8Pi0ZU.js +0 -1
  388. package/dist/client/assets/ConnectionsSettings-RSYtexxd.js +0 -7
  389. package/dist/client/assets/ContextHandoffEndpointLabel-CeGDLNA4.js +0 -4
  390. package/dist/client/assets/DiagnosticsSettings-CDa6MVx4.js +0 -2
  391. package/dist/client/assets/DialogHandle-BE7egDQQ.js +0 -1
  392. package/dist/client/assets/DialogRoot-C4mtzigX.js +0 -1
  393. package/dist/client/assets/DialogTitle-B_Q4DykI.js +0 -1
  394. package/dist/client/assets/DialogTrigger-BSqd4Crj.js +0 -1
  395. package/dist/client/assets/DraftChatThreadRouteView-JW_bXVrM.js +0 -1
  396. package/dist/client/assets/GlassSurface-DDG4eTlj.js +0 -1
  397. package/dist/client/assets/HostedConnectionControls-CscV6hm1.js +0 -1
  398. package/dist/client/assets/HostedHubRoot-gp7-ClBP.js +0 -2
  399. package/dist/client/assets/HostedNodeRenameDialog-D1DSiTpx.js +0 -1
  400. package/dist/client/assets/HostedRelayTrustNotice-B9jp4SRh.js +0 -1
  401. package/dist/client/assets/IntegrationsSettingsPanel-DH7SfWtV.js +0 -2
  402. package/dist/client/assets/KeybindingsSettings-DkgYYSHS.js +0 -7
  403. package/dist/client/assets/LazyBrowserPanel-D4e76vc_.js +0 -2
  404. package/dist/client/assets/McpServersSettings-Dc1kPa-X.js +0 -6
  405. package/dist/client/assets/MobileSheet-lT--mLEz.js +0 -1
  406. package/dist/client/assets/NodeSecuritySettings-DcfSx4KT.js +0 -1
  407. package/dist/client/assets/NullStore-8d2s-Re3.js +0 -1
  408. package/dist/client/assets/OnboardingDialog-CnLjwM6Z.js +0 -1
  409. package/dist/client/assets/OpinionatedPluginsSettings-BTJyS3rN.js +0 -1
  410. package/dist/client/assets/PhoneHome-CIMkuDJF.js +0 -1
  411. package/dist/client/assets/PhoneSettingsSurface-CfZQxJNI.js +0 -2
  412. package/dist/client/assets/ProvidersSettingsPanel-DAVSiwE1.js +0 -1
  413. package/dist/client/assets/RedactedSensitiveText-BHGbQJwB.js +0 -1
  414. package/dist/client/assets/RootAppShell-T056pByH.js +0 -7
  415. package/dist/client/assets/SettingsDialog-BERU2Qg7.js +0 -2
  416. package/dist/client/assets/SettingsPanels-De_XZOQF.js +0 -3
  417. package/dist/client/assets/SettingsPanels.editor-Dkva9gX_.js +0 -2
  418. package/dist/client/assets/SourceControlSettings-B4HS17cB.js +0 -1
  419. package/dist/client/assets/StatisticsPage-Bj2ftFdH.js +0 -1
  420. package/dist/client/assets/StatisticsPanel-Dw7GBBmd.js +0 -1
  421. package/dist/client/assets/StatisticsSettingsLink-_XL3ABoI.js +0 -1
  422. package/dist/client/assets/ThreadTerminalDrawer-CPPzQSXN.js +0 -18
  423. package/dist/client/assets/ThreadWorkspacePanel-DWKU7Omm.js +0 -2073
  424. package/dist/client/assets/appChrome-TkWLAGxk.js +0 -1
  425. package/dist/client/assets/architecture-7GRP2DOG-HS59zfrk.js +0 -1
  426. package/dist/client/assets/authorization-D8dOcEYq.js +0 -1
  427. package/dist/client/assets/badge-2AZ3HfVS.js +0 -1
  428. package/dist/client/assets/capabilities-CsHjxjab.js +0 -1
  429. package/dist/client/assets/channel-Dn3_cOkm.js +0 -1
  430. package/dist/client/assets/chevron-right-Dsw16yGn.js +0 -1
  431. package/dist/client/assets/classDiagram-JCYQIIEL-ZQvrS8No.js +0 -1
  432. package/dist/client/assets/classDiagram-v2-OCEON4UE-ZQvrS8No.js +0 -1
  433. package/dist/client/assets/compiler-runtime-C4g8XhC5.js +0 -1
  434. package/dist/client/assets/desktopWorkspace-_iM6B9Kf.js +0 -1
  435. package/dist/client/assets/editorPreferences-D8q1ItMW.js +0 -1
  436. package/dist/client/assets/eventmodeling-NTZA5JFV-Dj71kuPV.js +0 -1
  437. package/dist/client/assets/flowDiagram-UKHOOZJN-BaAiwuvL.js +0 -1
  438. package/dist/client/assets/hostedConnectionCoordinator-BuRWCvUG.js +0 -1
  439. package/dist/client/assets/hubRoutes-jcMPIFy3.js +0 -1
  440. package/dist/client/assets/kbd-Dxm5Elqj.js +0 -1
  441. package/dist/client/assets/layers-Dqez1Uq8.js +0 -1
  442. package/dist/client/assets/liquidGlass-CA2o_Cq0.js +0 -1
  443. package/dist/client/assets/liquidGlass.worker-icvLJKHf.js +0 -1
  444. package/dist/client/assets/main-BqSANuAs.css +0 -2
  445. package/dist/client/assets/main-DAbEANjY.js +0 -9
  446. package/dist/client/assets/motion-BdscFixQ.js +0 -1
  447. package/dist/client/assets/palette-92ylWqeC.js +0 -1
  448. package/dist/client/assets/perfInstrumentation-BT27w4tn.js +0 -1
  449. package/dist/client/assets/presentationTier-xlIjcFab.js +0 -1
  450. package/dist/client/assets/primary-DZjgHvyf.js +0 -5
  451. package/dist/client/assets/providerDriverMeta-T2YbXzuS.js +0 -1
  452. package/dist/client/assets/providerStatus-DBGvvkyF.js +0 -1
  453. package/dist/client/assets/radio-group-CRnHYWa8.js +0 -1
  454. package/dist/client/assets/railroad-abnf-HS5TGJTU-DxU7Mt1k.js +0 -1
  455. package/dist/client/assets/railroad-ebnf-LZEXJU2U-BYAPVjRd.js +0 -1
  456. package/dist/client/assets/railroad-peg-WCYAUIDC-BOqgR_X7.js +0 -1
  457. package/dist/client/assets/runtime-BwHA1GUS.js +0 -18
  458. package/dist/client/assets/scroll-area-7n2X_RLQ.js +0 -1
  459. package/dist/client/assets/separator-CL1qjMqJ.js +0 -1
  460. package/dist/client/assets/settingsLayout-DxsFwhF0.js +0 -1
  461. package/dist/client/assets/sheet-CGiaw8-i.js +0 -1
  462. package/dist/client/assets/sidebar-Cc6ANbOP.js +0 -1
  463. package/dist/client/assets/sidebarProjectFolders-DO2Uv84F.js +0 -4
  464. package/dist/client/assets/sidebarStatusText-B4AtFXZo.js +0 -1
  465. package/dist/client/assets/sidebarUndo-gdSrfa4O.js +0 -1
  466. package/dist/client/assets/square-Cr9X8U6y.js +0 -1
  467. package/dist/client/assets/src-C3Y_imaX.js +0 -14
  468. package/dist/client/assets/stateDiagram-v2-UEYNNEHI-CWtHILqh.js +0 -1
  469. package/dist/client/assets/storeSelectors-CTDWheMy.js +0 -1
  470. package/dist/client/assets/swimlanesDiagram-ULZ7WXOC-DuaPce9O.js +0 -8
  471. package/dist/client/assets/switch-DnpJB2xv.js +0 -48
  472. package/dist/client/assets/toggle-D10FsFoE.js +0 -1
  473. package/dist/client/assets/toggle-group-BhzbQPEQ.js +0 -1
  474. package/dist/client/assets/tooltip-BlweKBxc.js +0 -1
  475. package/dist/client/assets/usage-BBwaxMif.js +0 -1
  476. package/dist/client/assets/useAppSidebarCollapsed-CFy476E3.js +0 -1
  477. package/dist/client/assets/useAppearancePreference-Dlh9P8iu.js +0 -1
  478. package/dist/client/assets/useBaseUiId-DKOjzmu3.js +0 -1
  479. package/dist/client/assets/useLabelableId-DQbY2GG1.js +0 -1
  480. package/dist/client/assets/useNavigate-B8oXtF30.js +0 -1
  481. package/dist/client/assets/usePhoneThreadActions-6DCLiyJ5.js +0 -1
  482. package/dist/client/assets/usePopupViewport-CNWcP7Od.js +0 -1
  483. package/dist/client/assets/usePresentationTier-hxB7Yv_Q.js +0 -1
  484. package/dist/client/assets/useScrollLock-BbKeKZdj.js +0 -1
  485. package/dist/client/assets/useTriggerFocusGuards-BC4Wb3GI.js +0 -1
  486. package/dist/client/assets/useValueChanged-BkTbyZdO.js +0 -1
  487. package/dist/client/assets/workspaceMetadataProjection-aqZEXDrQ.js +0 -1
  488. package/dist/collectUint8StreamText-BAUF-vzz.mjs +0 -37
  489. package/dist/collectUint8StreamText-vagpNUMJ.cjs +0 -42
  490. package/dist/git-9xWsJYIH.mjs +0 -132
  491. package/dist/git-xIkXFy_l.cjs +0 -218
  492. package/dist/sourceControl-B0D1Op29.cjs +0 -253
  493. package/dist/sourceControl-BiEBxN01.mjs +0 -224
@@ -285,6 +285,10 @@ const ExecutionEnvironmentCapabilities = effect.Schema.Struct({
285
285
  threadSettlement: effect.Schema.Boolean.pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(false))),
286
286
  threadPriorityRanking: effect.Schema.Boolean.pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(false))),
287
287
  worktreeSubmoduleSettings: effect.Schema.optionalKey(effect.Schema.Boolean),
288
+ /** Usage-limit settings and the resume/snooze worker; absent on older servers. */
289
+ usageLimitRecovery: effect.Schema.optionalKey(effect.Schema.Boolean),
290
+ /** Server-owned worktree notes (`notes.list` / `notes.command`); absent on older servers. */
291
+ worktreeNotes: effect.Schema.optionalKey(effect.Schema.Boolean),
288
292
  fileAttachments: effect.Schema.optional(effect.Schema.Struct({ maxUploadBytes: NonNegativeInt }))
289
293
  });
290
294
  const ExecutionEnvironmentDescriptor = effect.Schema.Struct({
@@ -1832,6 +1836,12 @@ const DESKTOP_NATIVE_NODE_CLAIM_DESCRIPTOR_PATH = "/api/desktop/hub/native-node-
1832
1836
  const DESKTOP_NATIVE_NODE_CLAIM_SIGN_PATH = "/api/desktop/hub/native-node-claim/sign";
1833
1837
  const DESKTOP_NATIVE_NODE_CLAIM_COMMIT_PATH = "/api/desktop/hub/native-node-claim/commit";
1834
1838
  const DESKTOP_NATIVE_NODE_CLAIM_MAX_BODY_BYTES = 16384;
1839
+ /**
1840
+ * Desktop main asks its own backend, over the same per-child local control
1841
+ * channel, whether other devices can reach this node through the Hub, to keep
1842
+ * the machine awake only while they can.
1843
+ */
1844
+ const DESKTOP_HUB_REACHABILITY_PATH = "/api/desktop/hub/reachability";
1835
1845
  const strict = (schema) => schema.annotate({ parseOptions: { onExcessProperty: "error" } });
1836
1846
  strict(effect.Schema.Struct({
1837
1847
  protocolVersion: effect.Schema.Literal(1),
@@ -1869,6 +1879,15 @@ strict(effect.Schema.Struct({
1869
1879
  status: effect.Schema.Literal("active"),
1870
1880
  result: NativeNodeClaimFinishResponse
1871
1881
  }));
1882
+ strict(effect.Schema.Struct({
1883
+ protocolVersion: effect.Schema.Literal(1),
1884
+ reachable: effect.Schema.Boolean,
1885
+ /**
1886
+ * Whether the backend runs its connector at all. A standby launch can
1887
+ * resolve to off, which only a relaunch with an explicit enable changes.
1888
+ */
1889
+ connectorEnabled: effect.Schema.Boolean
1890
+ }));
1872
1891
  strict(effect.Schema.Struct({ error: effect.Schema.Literals([
1873
1892
  "native_node_claim_unavailable",
1874
1893
  "native_node_claim_rejected",
@@ -2556,6 +2575,14 @@ const MODEL_SLUG_ALIASES_BY_PROVIDER = {
2556
2575
  [GROK_DRIVER_KIND]: {},
2557
2576
  [OPENCODE_DRIVER_KIND]: {}
2558
2577
  };
2578
+ const PROVIDER_DISPLAY_NAMES = {
2579
+ [CODEX_DRIVER_KIND]: "Codex",
2580
+ [CLAUDE_DRIVER_KIND]: "Claude",
2581
+ [COPILOT_DRIVER_KIND]: "GitHub Copilot",
2582
+ [CURSOR_DRIVER_KIND]: "Cursor",
2583
+ [GROK_DRIVER_KIND]: "Grok",
2584
+ [OPENCODE_DRIVER_KIND]: "OpenCode"
2585
+ };
2559
2586
  const ThreadPriorityTier = effect.Schema.Literals([
2560
2587
  "now",
2561
2588
  "soon",
@@ -2762,13 +2789,67 @@ const SourceControlCheckRollupItem = effect.Schema.Struct({
2762
2789
  conclusion: effect.Schema.Option(TrimmedNonEmptyString),
2763
2790
  url: effect.Schema.Option(TrimmedNonEmptyString),
2764
2791
  startedAt: effect.Schema.Option(effect.Schema.DateTimeUtc),
2765
- completedAt: effect.Schema.Option(effect.Schema.DateTimeUtc)
2792
+ completedAt: effect.Schema.Option(effect.Schema.DateTimeUtc),
2793
+ /**
2794
+ * The base branch's protection requires this check to pass before merging.
2795
+ * Absent when the host did not say (list rows, hosts without the concept,
2796
+ * or a failed lookup), which is not the same as `false`.
2797
+ */
2798
+ isRequired: effect.Schema.optional(effect.Schema.Boolean)
2766
2799
  });
2767
2800
  const SourceControlLabel = effect.Schema.Struct({
2768
2801
  name: TrimmedNonEmptyString,
2769
2802
  color: effect.Schema.optional(TrimmedNonEmptyString),
2770
2803
  description: effect.Schema.optional(TrimmedNonEmptyString)
2771
2804
  });
2805
+ /** Aggregate review verdict as reported by the host (GitHub `reviewDecision`). */
2806
+ const SourceControlChangeRequestReviewDecision = effect.Schema.Literals([
2807
+ "approved",
2808
+ "changes_requested",
2809
+ "review_required"
2810
+ ]);
2811
+ /**
2812
+ * Why a change request can or cannot merge right now (GitHub `mergeStateStatus`,
2813
+ * lower-cased). `behind` means the head needs the base merged in; `blocked`
2814
+ * means required reviews or checks are missing; `dirty` means conflicts.
2815
+ */
2816
+ const SourceControlChangeRequestMergeStateStatus = effect.Schema.Literals([
2817
+ "behind",
2818
+ "blocked",
2819
+ "clean",
2820
+ "dirty",
2821
+ "draft",
2822
+ "has_hooks",
2823
+ "unknown",
2824
+ "unstable"
2825
+ ]);
2826
+ /** One reviewer's latest standing on a change request. `requested` = asked, not yet reviewed. */
2827
+ const SourceControlChangeRequestReviewerState = effect.Schema.Literals([
2828
+ "approved",
2829
+ "changes_requested",
2830
+ "commented",
2831
+ "dismissed",
2832
+ "requested"
2833
+ ]);
2834
+ const SourceControlChangeRequestReviewer = effect.Schema.Struct({
2835
+ /** User login, or `org/team-slug` for team review requests. */
2836
+ login: TrimmedNonEmptyString,
2837
+ kind: effect.Schema.Literals([
2838
+ "user",
2839
+ "team",
2840
+ "bot"
2841
+ ]),
2842
+ state: SourceControlChangeRequestReviewerState,
2843
+ avatarUrl: effect.Schema.optional(effect.Schema.String),
2844
+ submittedAt: effect.Schema.optional(effect.Schema.DateTimeUtc),
2845
+ /** True when the request came from CODEOWNERS. */
2846
+ isCodeOwner: effect.Schema.optional(effect.Schema.Boolean)
2847
+ });
2848
+ const SourceControlChangeRequestAutoMerge = effect.Schema.Struct({
2849
+ mergeMethod: SourceControlChangeRequestMergeMethod,
2850
+ enabledBy: effect.Schema.optional(TrimmedNonEmptyString),
2851
+ enabledAt: effect.Schema.optional(effect.Schema.DateTimeUtc)
2852
+ });
2772
2853
  const ChangeRequest = effect.Schema.Struct({
2773
2854
  provider: SourceControlProviderKind,
2774
2855
  number: PositiveInt,
@@ -2788,8 +2869,20 @@ const ChangeRequest = effect.Schema.Struct({
2788
2869
  headRepositoryOwnerLogin: effect.Schema.optional(effect.Schema.NullOr(TrimmedNonEmptyString)),
2789
2870
  headSha: effect.Schema.optional(TrimmedNonEmptyString),
2790
2871
  mergeability: effect.Schema.optional(SourceControlChangeRequestMergeability),
2872
+ /**
2873
+ * Why it can or cannot merge right now. Always on the detail where the host
2874
+ * reports readiness; on list rows only where the list payload carries it
2875
+ * (GitLab's `detailed_merge_status`).
2876
+ */
2877
+ mergeStateStatus: effect.Schema.optional(SourceControlChangeRequestMergeStateStatus),
2791
2878
  checkRollup: effect.Schema.optional(effect.Schema.Array(SourceControlCheckRollupItem)),
2792
- stackSummary: effect.Schema.optional(SourceControlChangeRequestStackSummary)
2879
+ stackSummary: effect.Schema.optional(SourceControlChangeRequestStackSummary),
2880
+ createdAt: effect.Schema.optional(effect.Schema.DateTimeUtc),
2881
+ reviewDecision: effect.Schema.optional(effect.Schema.NullOr(SourceControlChangeRequestReviewDecision)),
2882
+ additions: effect.Schema.optional(NonNegativeInt),
2883
+ deletions: effect.Schema.optional(NonNegativeInt),
2884
+ /** Files touched (list rows waiting on the viewer's review show it). */
2885
+ changedFiles: effect.Schema.optional(NonNegativeInt)
2793
2886
  });
2794
2887
  const SOURCE_CONTROL_DETAIL_BODY_MAX_BYTES = 8192;
2795
2888
  const SOURCE_CONTROL_DETAIL_COMMENT_BODY_MAX_BYTES = 2048;
@@ -2874,11 +2967,11 @@ const SourceControlCreateIssueInput = effect.Schema.Struct({
2874
2967
  assignees: effect.Schema.optional(effect.Schema.Array(TrimmedNonEmptyString)),
2875
2968
  worktree: effect.Schema.optional(SourceControlCreateIssueWorktree)
2876
2969
  });
2877
- const NonBlankMarkdownBody = effect.Schema.String.check(effect.Schema.makeFilter((body) => body.trim().length > 0 ? void 0 : "Expected a non-blank Markdown body"));
2970
+ const NonBlankMarkdownBody$1 = effect.Schema.String.check(effect.Schema.makeFilter((body) => body.trim().length > 0 ? void 0 : "Expected a non-blank Markdown body"));
2878
2971
  const SourceControlAddIssueCommentInput = effect.Schema.Struct({
2879
2972
  cwd: TrimmedNonEmptyString,
2880
2973
  reference: TrimmedNonEmptyString,
2881
- body: NonBlankMarkdownBody,
2974
+ body: NonBlankMarkdownBody$1,
2882
2975
  clientMutationId: effect.Schema.optional(TrimmedNonEmptyString)
2883
2976
  });
2884
2977
  const SourceControlAddIssueCommentResult = effect.Schema.Struct({ detail: SourceControlIssueDetail });
@@ -2924,12 +3017,24 @@ const SourceControlChangeRequestDetail = effect.Schema.Struct({
2924
3017
  files: effect.Schema.optional(effect.Schema.Array(SourceControlChangeRequestFile)),
2925
3018
  stack: effect.Schema.optional(SourceControlChangeRequestStack),
2926
3019
  stackMetadataIncomplete: effect.Schema.optional(effect.Schema.Boolean),
2927
- mergeCapabilities: effect.Schema.optional(SourceControlChangeRequestMergeCapabilities)
3020
+ mergeCapabilities: effect.Schema.optional(SourceControlChangeRequestMergeCapabilities),
3021
+ /** Per-reviewer latest state, including pending (requested) reviewers. */
3022
+ reviewerStates: effect.Schema.optional(effect.Schema.Array(SourceControlChangeRequestReviewer)),
3023
+ autoMerge: effect.Schema.optional(effect.Schema.NullOr(SourceControlChangeRequestAutoMerge)),
3024
+ closedAt: effect.Schema.optional(effect.Schema.DateTimeUtc),
3025
+ mergedAt: effect.Schema.optional(effect.Schema.DateTimeUtc),
3026
+ mergedBy: effect.Schema.optional(TrimmedNonEmptyString),
3027
+ /** True when the host deletes the head branch automatically after merge. */
3028
+ deleteBranchOnMerge: effect.Schema.optional(effect.Schema.Boolean)
2928
3029
  });
2929
3030
  const SourceControlMergeChangeRequestInput = effect.Schema.Struct({
2930
3031
  cwd: TrimmedNonEmptyString,
2931
3032
  reference: TrimmedNonEmptyString,
2932
- mergeMethod: SourceControlChangeRequestMergeMethod
3033
+ mergeMethod: SourceControlChangeRequestMergeMethod,
3034
+ /** Delete the head branch after a successful (non-queued) merge. */
3035
+ deleteBranch: effect.Schema.optional(effect.Schema.Boolean),
3036
+ /** Refuse to merge when the head moved since the user looked. */
3037
+ expectedHeadSha: effect.Schema.optional(TrimmedNonEmptyString)
2933
3038
  });
2934
3039
  const SourceControlMergeChangeRequestResult = effect.Schema.Struct({ outcome: effect.Schema.Literals(["merged", "enqueued"]) });
2935
3040
  const SOURCE_CONTROL_WORKFLOW_LOG_MAX_BYTES = 204800;
@@ -2946,6 +3051,12 @@ const SourceControlWorkflowRun = effect.Schema.Struct({
2946
3051
  branch: effect.Schema.Option(TrimmedNonEmptyString),
2947
3052
  event: effect.Schema.optional(TrimmedNonEmptyString),
2948
3053
  commit: SourceControlWorkflowRunCommit,
3054
+ /**
3055
+ * The change request head this run verifies when `commit` is not the head
3056
+ * itself but a merge of it into the target (GitLab merged-results and
3057
+ * merge-train pipelines). Absent when the run is on the head commit.
3058
+ */
3059
+ sourceHeadOid: effect.Schema.optional(TrimmedNonEmptyString),
2949
3060
  actor: effect.Schema.Option(TrimmedNonEmptyString),
2950
3061
  status: TrimmedNonEmptyString,
2951
3062
  conclusion: effect.Schema.Option(TrimmedNonEmptyString),
@@ -3034,7 +3145,7 @@ const SourceControlWorkflowRerunResult = effect.Schema.Struct({
3034
3145
  const SourceControlAddChangeRequestCommentInput = effect.Schema.Struct({
3035
3146
  cwd: TrimmedNonEmptyString,
3036
3147
  reference: TrimmedNonEmptyString,
3037
- body: NonBlankMarkdownBody,
3148
+ body: NonBlankMarkdownBody$1,
3038
3149
  clientMutationId: effect.Schema.optional(TrimmedNonEmptyString)
3039
3150
  });
3040
3151
  const SourceControlAddChangeRequestCommentResult = effect.Schema.Struct({ detail: SourceControlChangeRequestDetail });
@@ -3511,6 +3622,8 @@ const StatusBucket = effect.Schema.Literals([
3511
3622
  "done"
3512
3623
  ]);
3513
3624
  const WorktreeCheckoutLocation = effect.Schema.Literals(["appManaged", "projectMetadata"]);
3625
+ /** Why a workspace record no longer has a checkout: removed by Ryco, or found missing. */
3626
+ const WorktreeCheckoutRemovalReason = effect.Schema.Literals(["removed", "missing"]);
3514
3627
  const Worktree = effect.Schema.Struct({
3515
3628
  worktreeId: WorktreeId,
3516
3629
  projectId: ProjectId,
@@ -3525,6 +3638,12 @@ const Worktree = effect.Schema.Struct({
3525
3638
  prState: effect.Schema.optional(effect.Schema.NullOr(PullRequestState)).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(null))),
3526
3639
  prIsDraft: effect.Schema.optional(effect.Schema.NullOr(effect.Schema.Boolean)).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(null))),
3527
3640
  issueState: effect.Schema.optional(effect.Schema.NullOr(IssueState)).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(null))),
3641
+ /**
3642
+ * When the PR reached its current merged/closed state (forge time, else first
3643
+ * observation). `null` while open, unknown, or absent. No decoding default:
3644
+ * an absent key means the server predates the field (legacy settlement rule).
3645
+ */
3646
+ prTerminalAt: effect.Schema.optional(effect.Schema.NullOr(IsoDateTime)),
3528
3647
  workItemProvider: effect.Schema.optional(effect.Schema.NullOr(WorkItemProviderKind)).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(null))),
3529
3648
  workItemKey: effect.Schema.optional(effect.Schema.NullOr(TrimmedNonEmptyString)).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(null))),
3530
3649
  workItemTitle: effect.Schema.optional(effect.Schema.NullOr(TrimmedNonEmptyString)).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(null))),
@@ -3534,6 +3653,12 @@ const Worktree = effect.Schema.Struct({
3534
3653
  createdAt: IsoDateTime,
3535
3654
  updatedAt: IsoDateTime,
3536
3655
  archivedAt: effect.Schema.NullOr(IsoDateTime),
3656
+ /**
3657
+ * Set once the physical checkout is gone (removed or found missing). The record,
3658
+ * `worktreePath` and `branch` stay as provenance. Optional so older peers decode.
3659
+ */
3660
+ checkoutRemovedAt: effect.Schema.optional(effect.Schema.NullOr(IsoDateTime)),
3661
+ checkoutRemovalReason: effect.Schema.optional(effect.Schema.NullOr(WorktreeCheckoutRemovalReason)),
3537
3662
  manualPosition: effect.Schema.Number
3538
3663
  });
3539
3664
  const CreateWorktreeIntent = effect.Schema.Union([
@@ -3655,6 +3780,13 @@ const CONTEXT_HANDOFF_ERROR_MAX_CHARS = 2e3;
3655
3780
  const CONTEXT_HANDOFF_INSPECTION_MAX_RESPONSE_BYTES = 131072;
3656
3781
  const CONTEXT_HANDOFF_INSPECTION_CHUNK_MAX_BYTES = 98304;
3657
3782
  const ContextHandoffMode = effect.Schema.Literal("full-context-fresh-session");
3783
+ /**
3784
+ * Why a thread handed its context to a fresh session:
3785
+ * - `model-change`: the user switched to another provider instance.
3786
+ * - `cwd-relocation`: the thread's working directory moved (for example, a chat became a project)
3787
+ * and the provider cannot resume its conversation there.
3788
+ */
3789
+ const ContextHandoffReason = effect.Schema.Literals(["model-change", "cwd-relocation"]);
3658
3790
  const ContextHandoffEndpointSnapshot = effect.Schema.Struct({
3659
3791
  providerInstanceId: ProviderInstanceId,
3660
3792
  driverKind: ProviderDriverKind,
@@ -3680,6 +3812,8 @@ const ContextHandoffActivityBaseFields = {
3680
3812
  schemaVersion: effect.Schema.Literal(1),
3681
3813
  handoffId: ContextHandoffId,
3682
3814
  mode: ContextHandoffMode,
3815
+ /** Absent on records written before reasons existed: those are model changes. */
3816
+ reason: effect.Schema.optional(ContextHandoffReason),
3683
3817
  targetMessageId: MessageId,
3684
3818
  targetTurnId: effect.Schema.optional(TurnId),
3685
3819
  sourceSelection: ModelSelection,
@@ -3735,6 +3869,44 @@ const ContextHandoffActivityPayload = effect.Schema.Union([
3735
3869
  inspection: effect.Schema.optional(ContextHandoffInspectionSummaryMetadata)
3736
3870
  })
3737
3871
  ]);
3872
+ /**
3873
+ * Lifecycle activity journaling one checkpoint revert. Its id is
3874
+ * `checkpoint-revert:<revertRequestId>`; every phase replaces the same row.
3875
+ */
3876
+ const CHECKPOINT_REVERT_ACTIVITY_KIND = "checkpoint.revert";
3877
+ const CheckpointRevertStatus = effect.Schema.Literals([
3878
+ "requested",
3879
+ "rolling-back",
3880
+ "restoring-files",
3881
+ "completed",
3882
+ "files-not-restored",
3883
+ "failed",
3884
+ "interrupted"
3885
+ ]);
3886
+ const CheckpointRevertFailureReason = effect.Schema.Literals([
3887
+ "thread-busy",
3888
+ "target-unavailable",
3889
+ "handoff-boundary",
3890
+ "not-git",
3891
+ "shared-checkout",
3892
+ "provider-unsupported",
3893
+ "provider-failed",
3894
+ "files-failed",
3895
+ "restart",
3896
+ "internal-error"
3897
+ ]);
3898
+ const CheckpointRevertActivityPayload = effect.Schema.Struct({
3899
+ schemaVersion: effect.Schema.Literal(1),
3900
+ revertRequestId: CommandId,
3901
+ /** Target checkpoint K. */
3902
+ turnCount: NonNegativeInt,
3903
+ fromTurnCount: effect.Schema.optional(NonNegativeInt),
3904
+ status: CheckpointRevertStatus,
3905
+ reason: effect.Schema.optional(CheckpointRevertFailureReason),
3906
+ detail: effect.Schema.optional(TrimmedNonEmptyString),
3907
+ /** Restore cwd, recorded from "rolling-back" on so startup recovery can finish. */
3908
+ cwd: effect.Schema.optional(TrimmedNonEmptyString)
3909
+ });
3738
3910
  const ContextHandoffInspectionScope = effect.Schema.Literals(["sent", "complete"]);
3739
3911
  const ContextHandoffInspectionSection = effect.Schema.Literals([
3740
3912
  "messages",
@@ -3946,6 +4118,25 @@ const UploadChatImageAttachment = effect.Schema.Struct({
3946
4118
  sizeBytes: NonNegativeInt.check(effect.Schema.isLessThanOrEqualTo(PROVIDER_SEND_TURN_MAX_IMAGE_BYTES)),
3947
4119
  dataUrl: TrimmedNonEmptyString.check(effect.Schema.isMaxLength(PROVIDER_SEND_TURN_MAX_IMAGE_DATA_URL_CHARS))
3948
4120
  });
4121
+ /**
4122
+ * Marks a `text/html` file attachment as an agent HTML render: a page the agent
4123
+ * published with `ryco_html_render` for clients to show inline in the thread.
4124
+ * Deliberately loose (any finite numbers, no length caps) so a newer server's
4125
+ * metadata can never fail an older client's decode; `@ryco/shared/htmlRender`
4126
+ * `readHtmlRenderMetadata` clamps it before use.
4127
+ */
4128
+ const ChatHtmlRenderMetadata = effect.Schema.Struct({
4129
+ title: effect.Schema.String,
4130
+ /** The agent's frame height in CSS pixels, and the cap on any measured height. */
4131
+ height: effect.Schema.Finite,
4132
+ /** `[width, contentHeight]` pairs measured at publish; absent when not measured. */
4133
+ heights: effect.Schema.optional(effect.Schema.Array(effect.Schema.Tuple([effect.Schema.Finite, effect.Schema.Finite]))),
4134
+ /** Small `data:image/...` screenshots of the page's top per appearance; absent when not captured. */
4135
+ thumbnails: effect.Schema.optional(effect.Schema.Struct({
4136
+ dark: effect.Schema.optional(effect.Schema.String),
4137
+ light: effect.Schema.optional(effect.Schema.String)
4138
+ }))
4139
+ });
3949
4140
  const ChatFileAttachment = effect.Schema.Struct({
3950
4141
  type: effect.Schema.Literal("file"),
3951
4142
  id: ChatAttachmentId,
@@ -3953,7 +4144,8 @@ const ChatFileAttachment = effect.Schema.Struct({
3953
4144
  mimeType: ChatAttachmentMimeType,
3954
4145
  sizeBytes: NonNegativeInt.check(effect.Schema.isLessThanOrEqualTo(PROVIDER_SEND_TURN_MAX_FILE_BYTES)),
3955
4146
  width: effect.Schema.optional(NonNegativeInt),
3956
- height: effect.Schema.optional(NonNegativeInt)
4147
+ height: effect.Schema.optional(NonNegativeInt),
4148
+ htmlRender: effect.Schema.optional(ChatHtmlRenderMetadata)
3957
4149
  });
3958
4150
  const CHAT_ATTACHMENT_READ_CHUNK_BYTES = 262144;
3959
4151
  const ChatAttachmentReadChunkInput = effect.Schema.Struct({
@@ -4031,8 +4223,18 @@ const ProjectScript = effect.Schema.Struct({
4031
4223
  const ProjectCustomSystemPrompt = TrimmedNonEmptyString.check(effect.Schema.isMaxLength(2e4));
4032
4224
  const DEFAULT_PROJECT_METADATA_DIR = ".ryco";
4033
4225
  const ProjectMetadataDir = TrimmedNonEmptyString.check(effect.Schema.isMaxLength(256), effect.Schema.isPattern(/^(?![\\/])(?!~)(?![A-Za-z]:[\\/])(?!.*(?:^|[\\/])\.\.(?:[\\/]|$)).+$/));
4226
+ /**
4227
+ * `chat` backs a "No project" chat: one project record per chat, rooted in a Ryco-managed
4228
+ * plain folder under the chats root. Promotion turns it into a regular `project`, never back.
4229
+ * Read it through `@ryco/shared/projectKind`, which treats an absent kind as `project`.
4230
+ */
4231
+ const ProjectKind = effect.Schema.Literals(["project", "chat"]);
4232
+ const DEFAULT_PROJECT_KIND = "project";
4233
+ /** Absent on snapshots, events and nodes that predate chats; those only had regular projects. */
4234
+ const OptionalProjectKind = effect.Schema.optional(ProjectKind).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(DEFAULT_PROJECT_KIND)));
4034
4235
  const OrchestrationProject = effect.Schema.Struct({
4035
4236
  id: ProjectId,
4237
+ kind: OptionalProjectKind,
4036
4238
  title: TrimmedNonEmptyString,
4037
4239
  workspaceRoot: TrimmedNonEmptyString,
4038
4240
  projectMetadataDir: effect.Schema.optional(ProjectMetadataDir).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(DEFAULT_PROJECT_METADATA_DIR))),
@@ -4052,6 +4254,19 @@ const OrchestrationMessageRole = effect.Schema.Literals([
4052
4254
  "system"
4053
4255
  ]);
4054
4256
  const TurnDispatchMode = effect.Schema.Literals(["queue", "steer"]);
4257
+ /**
4258
+ * Why a steer was not applied. `deferred`: the message stays queued and is sent as the next turn
4259
+ * (the turn ended, or the provider could not take it right now). `failed`: a real provider error.
4260
+ * Absent on older events, which read as `failed`.
4261
+ */
4262
+ const TurnSteerRejectionReason = effect.Schema.Literals(["deferred", "failed"]);
4263
+ /**
4264
+ * Set on a `failed` steer rejection the provider may still have received (a restart cut off its
4265
+ * delivery). Clients hold such a message for an explicit retry or removal instead of sending it
4266
+ * again as the next turn. An optional flag rather than a third reason, so older clients that
4267
+ * decode the event keep working and read it as a plain failure.
4268
+ */
4269
+ const TurnSteerDeliveryUncertain = effect.Schema.optionalKey(effect.Schema.Boolean);
4055
4270
  const OrchestrationMessage = effect.Schema.Struct({
4056
4271
  id: MessageId,
4057
4272
  role: OrchestrationMessageRole,
@@ -4142,6 +4357,31 @@ const OrchestrationLatestTurnState = effect.Schema.Literals([
4142
4357
  "completed",
4143
4358
  "error"
4144
4359
  ]);
4360
+ /**
4361
+ * Frozen set of states a turn can end in. New outcomes (for example usage limits)
4362
+ * go into `reason` or a separate field, never into this literal set.
4363
+ */
4364
+ const OrchestrationTerminalTurnState = effect.Schema.Literals([
4365
+ "completed",
4366
+ "error",
4367
+ "interrupted"
4368
+ ]);
4369
+ /** Server-internal: what the caller knows about how the active turn ended. */
4370
+ const OrchestrationTurnOutcome = effect.Schema.Struct({
4371
+ /** Omitted = "the turn this release ends", whichever it is. */
4372
+ turnId: effect.Schema.optional(TurnId),
4373
+ state: OrchestrationTerminalTurnState,
4374
+ /** Open diagnostic string (see TURN_FINALIZATION_REASON). Never a closed literal set. */
4375
+ reason: TrimmedNonEmptyString,
4376
+ completedAt: effect.Schema.optional(IsoDateTime)
4377
+ });
4378
+ /** Decided by the server: the turn this session-set releases, and how it ended. */
4379
+ const OrchestrationReleasedTurn = effect.Schema.Struct({
4380
+ turnId: TurnId,
4381
+ state: OrchestrationTerminalTurnState,
4382
+ completedAt: IsoDateTime,
4383
+ reason: TrimmedNonEmptyString
4384
+ });
4145
4385
  const OrchestrationLatestTurn = effect.Schema.Struct({
4146
4386
  userMessageId: effect.Schema.optional(MessageId),
4147
4387
  turnId: TurnId,
@@ -4152,6 +4392,42 @@ const OrchestrationLatestTurn = effect.Schema.Struct({
4152
4392
  assistantMessageId: effect.Schema.NullOr(MessageId),
4153
4393
  sourceProposedPlan: effect.Schema.optional(SourceProposedPlanReference)
4154
4394
  });
4395
+ const ThreadUsageLimitId = TrimmedNonEmptyString.check(effect.Schema.isMaxLength(512));
4396
+ /**
4397
+ * A provider usage limit stopped this thread's turn. Durable until a turn starts, the
4398
+ * thread is archived or reverted; it only gates the thread while
4399
+ * `modelSelection.instanceId === providerInstanceId`.
4400
+ */
4401
+ const ThreadUsageLimit = effect.Schema.Struct({
4402
+ /** "usage-limit:<threadId>:<turnId>" */
4403
+ limitId: ThreadUsageLimitId,
4404
+ provider: ProviderDriverKind,
4405
+ providerInstanceId: ProviderInstanceId,
4406
+ turnId: TurnId,
4407
+ message: TrimmedNonEmptyString.check(effect.Schema.isMaxLength(1e3)),
4408
+ limitedAt: IsoDateTime,
4409
+ resetAt: effect.Schema.NullOr(IsoDateTime),
4410
+ /** null follows ServerSettings.autoResumeLimitedThreads; a boolean is an explicit per-thread override. */
4411
+ autoResume: effect.Schema.NullOr(effect.Schema.Boolean),
4412
+ updatedAt: IsoDateTime
4413
+ });
4414
+ /** Accepts the resume turn only while this exact limit is still recorded and idle. */
4415
+ const UsageLimitResumeGuard = effect.Schema.Struct({
4416
+ limitId: ThreadUsageLimitId,
4417
+ origin: effect.Schema.Literals(["auto", "manual"])
4418
+ });
4419
+ /**
4420
+ * Server-owned provenance of a thread created on behalf of another thread.
4421
+ * Absent on root threads. Immutable for a thread incarnation. Never authority.
4422
+ * `relationship` is deliberately an open string: a newer server may add kinds
4423
+ * without failing older clients' shell decode. Clients must treat values they
4424
+ * do not know as "no known relationship". Known values: "delegated".
4425
+ */
4426
+ const ThreadLineage = effect.Schema.Struct({
4427
+ parentThreadId: ThreadId,
4428
+ rootThreadId: ThreadId,
4429
+ relationship: TrimmedNonEmptyString.check(effect.Schema.isMaxLength(64))
4430
+ });
4155
4431
  const OrchestrationThread = effect.Schema.Struct({
4156
4432
  id: ThreadId,
4157
4433
  projectId: ProjectId,
@@ -4167,6 +4443,8 @@ const OrchestrationThread = effect.Schema.Struct({
4167
4443
  manualPosition: effect.Schema.optional(effect.Schema.Number),
4168
4444
  latestTurn: effect.Schema.NullOr(OrchestrationLatestTurn),
4169
4445
  goal: effect.Schema.optional(effect.Schema.NullOr(ThreadGoal)).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(null))),
4446
+ /** Server-owned provenance; absent on root threads and from older servers. */
4447
+ lineage: effect.Schema.optional(effect.Schema.NullOr(ThreadLineage)),
4170
4448
  createdAt: IsoDateTime,
4171
4449
  updatedAt: IsoDateTime,
4172
4450
  archivedAt: effect.Schema.NullOr(IsoDateTime).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(null))),
@@ -4174,14 +4452,25 @@ const OrchestrationThread = effect.Schema.Struct({
4174
4452
  settledAt: effect.Schema.NullOr(IsoDateTime).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(null))),
4175
4453
  snoozedUntil: effect.Schema.optional(effect.Schema.NullOr(IsoDateTime)),
4176
4454
  snoozedAt: effect.Schema.optional(effect.Schema.NullOr(IsoDateTime)),
4455
+ /** Optional so mixed-version snapshots decode; older clients strip it. */
4456
+ usageLimit: effect.Schema.optional(effect.Schema.NullOr(ThreadUsageLimit)),
4457
+ /**
4458
+ * Hidden from every live view. A trashed thread also carries `trashedAt` and keeps
4459
+ * its history and assets; without `trashedAt` the deletion is permanent.
4460
+ */
4177
4461
  deletedAt: effect.Schema.NullOr(IsoDateTime),
4462
+ trashedAt: effect.Schema.optional(effect.Schema.NullOr(IsoDateTime)),
4178
4463
  messages: effect.Schema.Array(OrchestrationMessage),
4179
4464
  proposedPlans: effect.Schema.Array(OrchestrationProposedPlan).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed([]))),
4180
4465
  activities: effect.Schema.Array(OrchestrationThreadActivity),
4181
4466
  checkpoints: effect.Schema.Array(OrchestrationCheckpointSummary),
4182
4467
  session: effect.Schema.NullOr(OrchestrationSession)
4183
4468
  });
4184
- const OrchestrationWorktreeShell = Worktree;
4469
+ const OrchestrationWorktreeShell = effect.Schema.Struct({
4470
+ ...Worktree.fields,
4471
+ /** Retired managed path, so persisted drafts can retarget after a cold reconnect. */
4472
+ relocatedFromPath: effect.Schema.optional(effect.Schema.NullOr(TrimmedNonEmptyString))
4473
+ });
4185
4474
  const OrchestrationReadModel = effect.Schema.Struct({
4186
4475
  snapshotSequence: NonNegativeInt,
4187
4476
  projects: effect.Schema.Array(OrchestrationProject),
@@ -4191,6 +4480,7 @@ const OrchestrationReadModel = effect.Schema.Struct({
4191
4480
  });
4192
4481
  const OrchestrationProjectShell = effect.Schema.Struct({
4193
4482
  id: ProjectId,
4483
+ kind: OptionalProjectKind,
4194
4484
  title: TrimmedNonEmptyString,
4195
4485
  workspaceRoot: TrimmedNonEmptyString,
4196
4486
  projectMetadataDir: effect.Schema.optional(ProjectMetadataDir).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(DEFAULT_PROJECT_METADATA_DIR))),
@@ -4236,6 +4526,8 @@ const OrchestrationThreadShell = effect.Schema.Struct({
4236
4526
  settledAt: effect.Schema.NullOr(IsoDateTime).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(null))),
4237
4527
  snoozedUntil: effect.Schema.optional(effect.Schema.NullOr(IsoDateTime)),
4238
4528
  snoozedAt: effect.Schema.optional(effect.Schema.NullOr(IsoDateTime)),
4529
+ /** Optional so mixed-version snapshots decode; older clients strip it. */
4530
+ usageLimit: effect.Schema.optional(effect.Schema.NullOr(ThreadUsageLimit)),
4239
4531
  session: effect.Schema.NullOr(OrchestrationSession),
4240
4532
  latestUserMessageAt: effect.Schema.NullOr(IsoDateTime),
4241
4533
  /** Last successful turn that is no longer active; absent on older servers. */
@@ -4249,6 +4541,8 @@ const OrchestrationThreadShell = effect.Schema.Struct({
4249
4541
  * live work. Optional so old servers/clients interop; absent = none.
4250
4542
  */
4251
4543
  backgroundLiveness: effect.Schema.optional(effect.Schema.NullOr(effect.Schema.Literals(["working", "monitoring"]))),
4544
+ /** Server-owned provenance; absent on root threads and from older servers. */
4545
+ lineage: effect.Schema.optional(effect.Schema.NullOr(ThreadLineage)),
4252
4546
  priority: effect.Schema.optional(ThreadPriorityProjectedRanking)
4253
4547
  });
4254
4548
  const OrchestrationShellSnapshot = effect.Schema.Struct({
@@ -4279,6 +4573,13 @@ const OrchestrationShellStreamEvent = effect.Schema.Union([
4279
4573
  sequence: NonNegativeInt,
4280
4574
  worktree: OrchestrationWorktreeShell
4281
4575
  }),
4576
+ effect.Schema.Struct({
4577
+ kind: effect.Schema.Literal("worktree-relocated"),
4578
+ sequence: NonNegativeInt,
4579
+ worktree: OrchestrationWorktreeShell,
4580
+ sourcePath: TrimmedNonEmptyString,
4581
+ destinationPath: TrimmedNonEmptyString
4582
+ }),
4282
4583
  effect.Schema.Struct({
4283
4584
  kind: effect.Schema.Literal("thread-removed"),
4284
4585
  sequence: NonNegativeInt,
@@ -4360,7 +4661,13 @@ const OrchestrationSubscribeThreadWindowInput = effect.Schema.Struct({
4360
4661
  const OrchestrationThreadWindowSnapshot = effect.Schema.Struct({
4361
4662
  snapshotSequence: NonNegativeInt,
4362
4663
  thread: OrchestrationThread,
4363
- history: OrchestrationThreadHistoryState
4664
+ history: OrchestrationThreadHistoryState,
4665
+ /**
4666
+ * The directory the thread's next turn runs in (its worktree, else its project root), as the
4667
+ * server resolves it when starting a provider session. Absent from older servers and when the
4668
+ * thread has no resolvable project.
4669
+ */
4670
+ workspaceCwd: effect.Schema.optional(TrimmedNonEmptyString)
4364
4671
  });
4365
4672
  const OrchestrationThreadHistoryPageMode = effect.Schema.Struct({
4366
4673
  kind: effect.Schema.Literal("before"),
@@ -4424,6 +4731,8 @@ const ProjectCreateCommand = effect.Schema.Struct({
4424
4731
  type: effect.Schema.Literal("project.create"),
4425
4732
  commandId: CommandId,
4426
4733
  projectId: ProjectId,
4734
+ /** Absent creates a regular project. */
4735
+ kind: effect.Schema.optional(ProjectKind),
4427
4736
  title: TrimmedNonEmptyString,
4428
4737
  workspaceRoot: TrimmedNonEmptyString,
4429
4738
  projectMetadataDir: effect.Schema.optional(ProjectMetadataDir).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(DEFAULT_PROJECT_METADATA_DIR))),
@@ -4439,6 +4748,8 @@ const ProjectMetaUpdateCommand = effect.Schema.Struct({
4439
4748
  projectId: ProjectId,
4440
4749
  /** Optional compare-and-set guard used by governed mutation flows. */
4441
4750
  expectedUpdatedAt: effect.Schema.optional(IsoDateTime),
4751
+ /** Only `chat` -> `project` (promotion) is accepted; the same kind is a no-op. */
4752
+ kind: effect.Schema.optional(ProjectKind),
4442
4753
  title: effect.Schema.optional(TrimmedNonEmptyString),
4443
4754
  workspaceRoot: effect.Schema.optional(TrimmedNonEmptyString),
4444
4755
  projectMetadataDir: effect.Schema.optional(ProjectMetadataDir),
@@ -4477,11 +4788,29 @@ const ThreadCreateCommand = effect.Schema.Struct({
4477
4788
  worktreePath: effect.Schema.NullOr(TrimmedNonEmptyString),
4478
4789
  createdAt: IsoDateTime
4479
4790
  });
4791
+ /** Server-originated only (Agent Control). Never part of ClientOrchestrationCommand. */
4792
+ const ThreadDelegatedCreateCommand = effect.Schema.Struct({
4793
+ ...ThreadCreateCommand.fields,
4794
+ type: effect.Schema.Literal("thread.delegated.create"),
4795
+ parentThreadId: ThreadId
4796
+ });
4797
+ /** Permanent deletion. Only a trashed (or never-used) thread can be deleted. */
4480
4798
  const ThreadDeleteCommand = effect.Schema.Struct({
4481
4799
  type: effect.Schema.Literal("thread.delete"),
4482
4800
  commandId: CommandId,
4483
4801
  threadId: ThreadId
4484
4802
  });
4803
+ /** Recoverable removal: hidden everywhere, history and assets preserved. */
4804
+ const ThreadTrashCommand = effect.Schema.Struct({
4805
+ type: effect.Schema.Literal("thread.trash"),
4806
+ commandId: CommandId,
4807
+ threadId: ThreadId
4808
+ });
4809
+ const ThreadUntrashCommand = effect.Schema.Struct({
4810
+ type: effect.Schema.Literal("thread.untrash"),
4811
+ commandId: CommandId,
4812
+ threadId: ThreadId
4813
+ });
4485
4814
  const ThreadArchiveCommand = effect.Schema.Struct({
4486
4815
  type: effect.Schema.Literal("thread.archive"),
4487
4816
  commandId: CommandId,
@@ -4509,6 +4838,15 @@ const ThreadUnsnoozeCommand = effect.Schema.Struct({
4509
4838
  commandId: CommandId,
4510
4839
  threadId: ThreadId
4511
4840
  });
4841
+ /** Per-thread auto-resume override for the thread's current usage limit. */
4842
+ const ThreadUsageLimitConfigureCommand = effect.Schema.Struct({
4843
+ type: effect.Schema.Literal("thread.usage-limit.configure"),
4844
+ commandId: CommandId,
4845
+ threadId: ThreadId,
4846
+ limitId: ThreadUsageLimitId,
4847
+ autoResume: effect.Schema.NullOr(effect.Schema.Boolean),
4848
+ createdAt: IsoDateTime
4849
+ });
4512
4850
  const ThreadSettleCommand = effect.Schema.Struct({
4513
4851
  type: effect.Schema.Literal("thread.settle"),
4514
4852
  commandId: CommandId,
@@ -4581,36 +4919,81 @@ const ThreadTurnStartBootstrapPrepareWorktree = effect.Schema.Struct({
4581
4919
  baseBranch: TrimmedNonEmptyString,
4582
4920
  branch: effect.Schema.optional(TrimmedNonEmptyString)
4583
4921
  });
4922
+ /**
4923
+ * Shown when work (a turn, provider session, terminal or file write) is refused because the chat's
4924
+ * folder is moving into a project. The move settles in moments, so retrying shortly succeeds.
4925
+ */
4926
+ const PROJECT_RELOCATION_PENDING_MESSAGE = "This chat is being moved into a project. Try again in a moment.";
4927
+ /**
4928
+ * First send of a "No project" chat. The server, not the client, allocates the chat folder
4929
+ * under its chats root, creates a `chat` project with `projectId` there, and then continues
4930
+ * with `createThread` for that project. Mutually exclusive with `prepareWorktree` and
4931
+ * `requireWorktree`: a chat folder is a plain directory, never a Git worktree.
4932
+ */
4933
+ const ThreadTurnStartBootstrapCreateChatProject = effect.Schema.Struct({
4934
+ projectId: ProjectId,
4935
+ /** Seeds the chat title and its folder name; the folder name never changes afterwards. */
4936
+ titleSeed: TrimmedNonEmptyString.check(effect.Schema.isMaxLength(200))
4937
+ });
4584
4938
  const ThreadTurnStartBootstrap = effect.Schema.Struct({
4585
4939
  /** Reject a turn unless this bootstrap creates a fresh isolated Git worktree. */
4586
4940
  requireWorktree: effect.Schema.optional(effect.Schema.Boolean),
4941
+ createChatProject: effect.Schema.optional(ThreadTurnStartBootstrapCreateChatProject),
4587
4942
  createThread: effect.Schema.optional(ThreadTurnStartBootstrapCreateThread),
4588
4943
  prepareWorktree: effect.Schema.optional(ThreadTurnStartBootstrapPrepareWorktree),
4589
4944
  runSetupScript: effect.Schema.optional(effect.Schema.Boolean)
4590
- });
4591
- /** Optimistic identity fence for delayed delegated-result queue delivery. */
4945
+ }).check(effect.Schema.makeFilter((bootstrap) => {
4946
+ if (bootstrap.createChatProject === void 0) return void 0;
4947
+ if (bootstrap.prepareWorktree !== void 0 || bootstrap.requireWorktree === true) return "A chat without a project cannot also prepare a Git worktree";
4948
+ if (bootstrap.createThread?.projectId !== bootstrap.createChatProject.projectId) return "A chat without a project must create its first thread in that chat";
4949
+ }));
4950
+ /**
4951
+ * Delegated-result wake fence. Legacy fields (`turnMessageId`, `turnId`, `runtimeSessionId`,
4952
+ * `providerInstanceId`) are decoded for stored events and ledger commands and ignored.
4953
+ */
4592
4954
  const DelegationReturnGuard = effect.Schema.Struct({
4593
- turnMessageId: MessageId,
4594
4955
  latestUserMessageId: effect.Schema.NullOr(MessageId),
4595
4956
  projectId: ProjectId,
4596
- turnId: TurnId,
4597
- runtimeSessionId: RuntimeSessionId,
4598
- providerInstanceId: ProviderInstanceId,
4599
4957
  runtimeMode: RuntimeMode,
4600
- worktreePath: effect.Schema.NullOr(effect.Schema.String)
4958
+ worktreePath: effect.Schema.NullOr(effect.Schema.String),
4959
+ turnMessageId: effect.Schema.optional(MessageId),
4960
+ turnId: effect.Schema.optional(TurnId),
4961
+ runtimeSessionId: effect.Schema.optional(RuntimeSessionId),
4962
+ providerInstanceId: effect.Schema.optional(ProviderInstanceId)
4601
4963
  });
4602
4964
  const ClaudeResumeGuard = effect.Schema.Struct({
4603
4965
  requireReady: effect.Schema.Boolean,
4604
- runtimeSessionId: RuntimeSessionId,
4966
+ /**
4967
+ * The runtime the review saw. Null when the session had none (it was stopped): the send is
4968
+ * then accepted only while still no runtime is bound, so the review stays current until the
4969
+ * next turn starts one.
4970
+ */
4971
+ runtimeSessionId: effect.Schema.NullOr(RuntimeSessionId),
4605
4972
  latestTurnId: effect.Schema.NullOr(TurnId),
4606
4973
  modelSelection: ModelSelection
4607
4974
  });
4975
+ /**
4976
+ * Server-only optimistic fence for an automatic continuation after a restart. Never part
4977
+ * of `ClientThreadTurnStartCommand`: client decode strips it, so it cannot be forged.
4978
+ */
4979
+ const RestartContinuationGuard = effect.Schema.Struct({
4980
+ sourceTurnId: TurnId,
4981
+ expectedLatestTurnState: effect.Schema.Literals(["interrupted", "completed"]),
4982
+ latestUserMessageId: effect.Schema.NullOr(MessageId),
4983
+ modelSelection: ModelSelection,
4984
+ runtimeMode: RuntimeMode,
4985
+ interactionMode: ProviderInteractionMode,
4986
+ worktreePath: effect.Schema.NullOr(effect.Schema.String),
4987
+ providerInstanceId: ProviderInstanceId
4988
+ });
4608
4989
  const ThreadTurnStartCommand = effect.Schema.Struct({
4609
4990
  claudeResumeGuard: effect.Schema.optional(ClaudeResumeGuard),
4991
+ restartContinuationGuard: effect.Schema.optional(RestartContinuationGuard),
4610
4992
  computerUse: effect.Schema.optionalKey(ComputerTurnIntent),
4611
4993
  projectMemory: effect.Schema.optional(effect.Schema.Never),
4612
4994
  type: effect.Schema.Literal("thread.turn.start"),
4613
4995
  delegationReturnGuard: effect.Schema.optional(DelegationReturnGuard),
4996
+ usageLimitResumeGuard: effect.Schema.optional(UsageLimitResumeGuard),
4614
4997
  commandId: CommandId,
4615
4998
  threadId: ThreadId,
4616
4999
  message: effect.Schema.Struct({
@@ -4636,6 +5019,7 @@ const ClientThreadTurnStartCommand = effect.Schema.Struct({
4636
5019
  projectMemory: effect.Schema.optional(effect.Schema.Never),
4637
5020
  type: effect.Schema.Literal("thread.turn.start"),
4638
5021
  delegationReturnGuard: effect.Schema.optional(DelegationReturnGuard),
5022
+ usageLimitResumeGuard: effect.Schema.optional(UsageLimitResumeGuard),
4639
5023
  commandId: CommandId,
4640
5024
  threadId: ThreadId,
4641
5025
  message: effect.Schema.Struct({
@@ -4778,6 +5162,8 @@ const WorktreeSourceControlStateUpdateCommand = effect.Schema.Struct({
4778
5162
  prTitle: effect.Schema.optional(effect.Schema.NullOr(TrimmedNonEmptyString)),
4779
5163
  prState: effect.Schema.NullOr(PullRequestState),
4780
5164
  prIsDraft: effect.Schema.NullOr(effect.Schema.Boolean),
5165
+ /** When the PR reached its current merged/closed state; see `Worktree.prTerminalAt`. */
5166
+ prTerminalAt: effect.Schema.optional(effect.Schema.NullOr(IsoDateTime)),
4781
5167
  issueState: effect.Schema.NullOr(IssueState),
4782
5168
  updatedAt: IsoDateTime
4783
5169
  });
@@ -4789,6 +5175,11 @@ const WorktreeRestoreCommand = effect.Schema.Struct({
4789
5175
  worktreePath: effect.Schema.optional(effect.Schema.NullOr(TrimmedNonEmptyString)),
4790
5176
  restoredAt: IsoDateTime
4791
5177
  });
5178
+ /**
5179
+ * Drops a workspace record. Never touches conversations: the decider refuses while
5180
+ * any conversation (active, archived or trashed) still references the record.
5181
+ * `sessions` is decoded for stored commands only; "delete" is always refused.
5182
+ */
4792
5183
  const WorktreeDeleteCommand = effect.Schema.Struct({
4793
5184
  sessions: effect.Schema.optional(effect.Schema.Literals(["preserve", "delete"])),
4794
5185
  type: effect.Schema.Literal("worktree.delete"),
@@ -4798,6 +5189,37 @@ const WorktreeDeleteCommand = effect.Schema.Struct({
4798
5189
  deletedAt: IsoDateTime,
4799
5190
  deletedBranch: effect.Schema.Boolean
4800
5191
  });
5192
+ /**
5193
+ * Server-only (workspace lifecycle service): records that the physical checkout is
5194
+ * gone. Archives the record when it is still active; the path and branch stay.
5195
+ */
5196
+ const WorktreeCheckoutRemoveCommand = effect.Schema.Struct({
5197
+ type: effect.Schema.Literal("worktree.checkout.remove"),
5198
+ commandId: CommandId,
5199
+ worktreeId: WorktreeId,
5200
+ reason: WorktreeCheckoutRemovalReason,
5201
+ lifecycleGuard: effect.Schema.optional(WorktreeLifecycleGuard),
5202
+ removedAt: IsoDateTime
5203
+ });
5204
+ /** Server-only: the checkout was recreated at its recorded path. */
5205
+ const WorktreeCheckoutRestoreCommand = effect.Schema.Struct({
5206
+ type: effect.Schema.Literal("worktree.checkout.restore"),
5207
+ commandId: CommandId,
5208
+ worktreeId: WorktreeId,
5209
+ worktreePath: TrimmedNonEmptyString,
5210
+ restoredAt: IsoDateTime
5211
+ });
5212
+ /** Server-only: a verified managed checkout moved under workspace lifecycle admission. */
5213
+ const WorktreeRelocateCommand = effect.Schema.Struct({
5214
+ type: effect.Schema.Literal("worktree.relocate"),
5215
+ commandId: CommandId,
5216
+ worktreeId: WorktreeId,
5217
+ projectId: ProjectId,
5218
+ sourcePath: TrimmedNonEmptyString,
5219
+ destinationPath: TrimmedNonEmptyString,
5220
+ expectedUpdatedAt: IsoDateTime,
5221
+ relocatedAt: IsoDateTime
5222
+ });
4801
5223
  const ThreadAttachToWorktreeCommand = effect.Schema.Struct({
4802
5224
  type: effect.Schema.Literal("thread.attach-to-worktree"),
4803
5225
  commandId: CommandId,
@@ -4833,11 +5255,14 @@ const DispatchableClientOrchestrationCommand = effect.Schema.Union([
4833
5255
  ProjectDeleteCommand,
4834
5256
  ThreadCreateCommand,
4835
5257
  ThreadDeleteCommand,
5258
+ ThreadTrashCommand,
5259
+ ThreadUntrashCommand,
4836
5260
  ThreadArchiveCommand,
4837
5261
  ThreadSidebarUndoCommand,
4838
5262
  ThreadUnarchiveCommand,
4839
5263
  ThreadSnoozeCommand,
4840
5264
  ThreadUnsnoozeCommand,
5265
+ ThreadUsageLimitConfigureCommand,
4841
5266
  ThreadSettleCommand,
4842
5267
  ThreadUnsettleCommand,
4843
5268
  ThreadMetaUpdateCommand,
@@ -4871,11 +5296,14 @@ const ClientOrchestrationCommand = effect.Schema.Union([
4871
5296
  ProjectDeleteCommand,
4872
5297
  ThreadCreateCommand,
4873
5298
  ThreadDeleteCommand,
5299
+ ThreadTrashCommand,
5300
+ ThreadUntrashCommand,
4874
5301
  ThreadArchiveCommand,
4875
5302
  ThreadSidebarUndoCommand,
4876
5303
  ThreadUnarchiveCommand,
4877
5304
  ThreadSnoozeCommand,
4878
5305
  ThreadUnsnoozeCommand,
5306
+ ThreadUsageLimitConfigureCommand,
4879
5307
  ThreadSettleCommand,
4880
5308
  ThreadUnsettleCommand,
4881
5309
  ThreadMetaUpdateCommand,
@@ -4902,11 +5330,25 @@ const ClientOrchestrationCommand = effect.Schema.Union([
4902
5330
  ThreadManualPositionSetCommand,
4903
5331
  WorktreeManualPositionSetCommand
4904
5332
  ]);
5333
+ /**
5334
+ * The runtime a provider-originated session update comes from. The update applies only while
5335
+ * the thread's session is still bound to exactly this provider instance and runtime (null: none),
5336
+ * so a late lifecycle event of a replaced runtime can never overwrite its successor, whatever
5337
+ * order the two writes reach the engine in.
5338
+ */
5339
+ const ThreadSessionSetExpectedRuntime = effect.Schema.Struct({
5340
+ providerInstanceId: effect.Schema.NullOr(ProviderInstanceId),
5341
+ runtimeSessionId: effect.Schema.NullOr(RuntimeSessionId)
5342
+ });
4905
5343
  const ThreadSessionSetCommand = effect.Schema.Struct({
4906
5344
  type: effect.Schema.Literal("thread.session.set"),
4907
5345
  commandId: CommandId,
4908
5346
  threadId: ThreadId,
4909
5347
  session: OrchestrationSession,
5348
+ /** Server-internal precondition; absent for server-decided transitions (bind, stop, restart). */
5349
+ expectedRuntime: effect.Schema.optional(ThreadSessionSetExpectedRuntime),
5350
+ /** Internal hint: how the turn this session-set releases ended, when the caller knows. */
5351
+ turnOutcome: effect.Schema.optional(OrchestrationTurnOutcome),
4910
5352
  createdAt: IsoDateTime
4911
5353
  });
4912
5354
  const ThreadMessageAssistantDeltaCommand = effect.Schema.Struct({
@@ -4991,6 +5433,8 @@ const ThreadTurnSteerResolveCommand = effect.Schema.Union([effect.Schema.Struct(
4991
5433
  resolution: effect.Schema.Struct({
4992
5434
  status: effect.Schema.Literal("rejected"),
4993
5435
  error: TrimmedNonEmptyString.check(effect.Schema.isMaxLength(1e3)),
5436
+ reason: effect.Schema.optionalKey(TurnSteerRejectionReason),
5437
+ deliveryUncertain: TurnSteerDeliveryUncertain,
4994
5438
  resolvedAt: IsoDateTime
4995
5439
  })
4996
5440
  })]);
@@ -4999,6 +5443,8 @@ const ThreadRevertCompleteCommand = effect.Schema.Struct({
4999
5443
  commandId: CommandId,
5000
5444
  threadId: ThreadId,
5001
5445
  turnCount: NonNegativeInt,
5446
+ droppedTurnIds: effect.Schema.optional(effect.Schema.Array(TurnId)),
5447
+ latestTurn: effect.Schema.optional(effect.Schema.NullOr(OrchestrationLatestTurn)),
5002
5448
  createdAt: IsoDateTime
5003
5449
  });
5004
5450
  const ThreadGoalSyncCommand = effect.Schema.Struct({
@@ -5009,6 +5455,19 @@ const ThreadGoalSyncCommand = effect.Schema.Struct({
5009
5455
  expectedRequestId: effect.Schema.optional(effect.Schema.String),
5010
5456
  createdAt: IsoDateTime
5011
5457
  });
5458
+ /** Internal only: clients must never be able to forge a usage limit. */
5459
+ const ThreadUsageLimitRecordCommand = effect.Schema.Struct({
5460
+ type: effect.Schema.Literal("thread.usage-limit.record"),
5461
+ commandId: CommandId,
5462
+ threadId: ThreadId,
5463
+ limitId: ThreadUsageLimitId,
5464
+ provider: ProviderDriverKind,
5465
+ providerInstanceId: ProviderInstanceId,
5466
+ turnId: TurnId,
5467
+ message: TrimmedNonEmptyString.check(effect.Schema.isMaxLength(1e3)),
5468
+ resetAt: effect.Schema.NullOr(IsoDateTime),
5469
+ createdAt: IsoDateTime
5470
+ });
5012
5471
  const ThreadGoalProviderClearCommand = effect.Schema.Struct({
5013
5472
  type: effect.Schema.Literal("thread.goal.provider-clear"),
5014
5473
  commandId: CommandId,
@@ -5017,6 +5476,7 @@ const ThreadGoalProviderClearCommand = effect.Schema.Struct({
5017
5476
  createdAt: IsoDateTime
5018
5477
  });
5019
5478
  const InternalOrchestrationCommand = effect.Schema.Union([
5479
+ ThreadDelegatedCreateCommand,
5020
5480
  effect.Schema.Struct({
5021
5481
  ...ThreadCreateCommand.fields,
5022
5482
  type: effect.Schema.Literal("thread.history.import"),
@@ -5046,7 +5506,11 @@ const InternalOrchestrationCommand = effect.Schema.Union([
5046
5506
  ThreadTurnSteerResolveCommand,
5047
5507
  ThreadRevertCompleteCommand,
5048
5508
  ThreadGoalSyncCommand,
5049
- ThreadGoalProviderClearCommand
5509
+ ThreadGoalProviderClearCommand,
5510
+ ThreadUsageLimitRecordCommand,
5511
+ WorktreeCheckoutRemoveCommand,
5512
+ WorktreeCheckoutRestoreCommand,
5513
+ WorktreeRelocateCommand
5050
5514
  ]);
5051
5515
  const OrchestrationCommand = effect.Schema.Union([DispatchableClientOrchestrationCommand, InternalOrchestrationCommand]);
5052
5516
  const OrchestrationEventType = effect.Schema.Literals([
@@ -5056,12 +5520,16 @@ const OrchestrationEventType = effect.Schema.Literals([
5056
5520
  "project.deleted",
5057
5521
  "thread.created",
5058
5522
  "thread.deleted",
5523
+ "thread.trashed",
5524
+ "thread.untrashed",
5059
5525
  "thread.archived",
5060
5526
  "thread.unarchived",
5061
5527
  "thread.snoozed",
5062
5528
  "thread.unsnoozed",
5063
5529
  "thread.settled",
5064
5530
  "thread.unsettled",
5531
+ "thread.usage-limit-set",
5532
+ "thread.usage-limit-cleared",
5065
5533
  "thread.meta-updated",
5066
5534
  "thread.runtime-mode-set",
5067
5535
  "thread.interaction-mode-set",
@@ -5090,6 +5558,9 @@ const OrchestrationEventType = effect.Schema.Literals([
5090
5558
  "worktree.sourceControlStateUpdated",
5091
5559
  "worktree.restored",
5092
5560
  "worktree.deleted",
5561
+ "worktree.checkoutRemoved",
5562
+ "worktree.checkoutRestored",
5563
+ "worktree.relocated",
5093
5564
  "thread.attachedToWorktree",
5094
5565
  "thread.statusBucketOverridden",
5095
5566
  "thread.manualPositionSet",
@@ -5107,6 +5578,7 @@ const OrchestrationActorKind = effect.Schema.Literals([
5107
5578
  ]);
5108
5579
  const ProjectCreatedPayload = effect.Schema.Struct({
5109
5580
  projectId: ProjectId,
5581
+ kind: OptionalProjectKind,
5110
5582
  title: TrimmedNonEmptyString,
5111
5583
  workspaceRoot: TrimmedNonEmptyString,
5112
5584
  projectMetadataDir: effect.Schema.optional(ProjectMetadataDir).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed(DEFAULT_PROJECT_METADATA_DIR))),
@@ -5119,6 +5591,8 @@ const ProjectCreatedPayload = effect.Schema.Struct({
5119
5591
  });
5120
5592
  const ProjectMetaUpdatedPayload = effect.Schema.Struct({
5121
5593
  projectId: ProjectId,
5594
+ /** Present only when the kind changed, which is always `chat` -> `project`. */
5595
+ kind: effect.Schema.optional(ProjectKind),
5122
5596
  title: effect.Schema.optional(TrimmedNonEmptyString),
5123
5597
  workspaceRoot: effect.Schema.optional(TrimmedNonEmptyString),
5124
5598
  projectMetadataDir: effect.Schema.optional(ProjectMetadataDir),
@@ -5149,12 +5623,22 @@ const ThreadCreatedPayload = effect.Schema.Struct({
5149
5623
  branch: effect.Schema.NullOr(TrimmedNonEmptyString),
5150
5624
  worktreePath: effect.Schema.NullOr(TrimmedNonEmptyString),
5151
5625
  createdAt: IsoDateTime,
5152
- updatedAt: IsoDateTime
5626
+ updatedAt: IsoDateTime,
5627
+ lineage: effect.Schema.optional(ThreadLineage)
5153
5628
  });
5154
5629
  const ThreadDeletedPayload = effect.Schema.Struct({
5155
5630
  threadId: ThreadId,
5156
5631
  deletedAt: IsoDateTime
5157
5632
  });
5633
+ const ThreadTrashedPayload = effect.Schema.Struct({
5634
+ threadId: ThreadId,
5635
+ trashedAt: IsoDateTime,
5636
+ updatedAt: IsoDateTime
5637
+ });
5638
+ const ThreadUntrashedPayload = effect.Schema.Struct({
5639
+ threadId: ThreadId,
5640
+ updatedAt: IsoDateTime
5641
+ });
5158
5642
  const ThreadArchivedPayload = effect.Schema.Struct({
5159
5643
  threadId: ThreadId,
5160
5644
  archivedAt: IsoDateTime,
@@ -5192,6 +5676,20 @@ const ThreadUnsettledPayload = effect.Schema.Struct({
5192
5676
  updatedAt: IsoDateTime,
5193
5677
  restoredSidebarState: effect.Schema.optional(ThreadSidebarRestoreState)
5194
5678
  });
5679
+ const ThreadUsageLimitSetPayload = effect.Schema.Struct({
5680
+ threadId: ThreadId,
5681
+ usageLimit: ThreadUsageLimit
5682
+ });
5683
+ const ThreadUsageLimitClearedPayload = effect.Schema.Struct({
5684
+ threadId: ThreadId,
5685
+ limitId: ThreadUsageLimitId,
5686
+ reason: effect.Schema.Literals([
5687
+ "turn-started",
5688
+ "archived",
5689
+ "reverted"
5690
+ ]),
5691
+ updatedAt: IsoDateTime
5692
+ });
5195
5693
  const ThreadMetaUpdatedPayload = effect.Schema.Struct({
5196
5694
  threadId: ThreadId,
5197
5695
  title: effect.Schema.optional(TrimmedNonEmptyString),
@@ -5261,6 +5759,8 @@ const ThreadTurnSteerRejectedPayload = effect.Schema.Struct({
5261
5759
  messageId: MessageId,
5262
5760
  expectedTurnId: TurnId,
5263
5761
  error: TrimmedNonEmptyString.check(effect.Schema.isMaxLength(1e3)),
5762
+ reason: effect.Schema.optionalKey(TurnSteerRejectionReason),
5763
+ deliveryUncertain: TurnSteerDeliveryUncertain,
5264
5764
  resolvedAt: IsoDateTime
5265
5765
  });
5266
5766
  const ThreadContextHandoffRequestedPayload = effect.Schema.Struct({
@@ -5315,7 +5815,13 @@ const ThreadCheckpointRevertRequestedPayload = effect.Schema.Struct({
5315
5815
  });
5316
5816
  const ThreadRevertedPayload = effect.Schema.Struct({
5317
5817
  threadId: ThreadId,
5318
- turnCount: NonNegativeInt
5818
+ turnCount: NonNegativeInt,
5819
+ /**
5820
+ * Authoritative revert result read from the projection. Absent on legacy
5821
+ * events, which keep the count-based projection.
5822
+ */
5823
+ droppedTurnIds: effect.Schema.optional(effect.Schema.Array(TurnId)),
5824
+ latestTurn: effect.Schema.optional(effect.Schema.NullOr(OrchestrationLatestTurn))
5319
5825
  });
5320
5826
  const ThreadSessionStopRequestedPayload = effect.Schema.Struct({
5321
5827
  threadId: ThreadId,
@@ -5323,7 +5829,9 @@ const ThreadSessionStopRequestedPayload = effect.Schema.Struct({
5323
5829
  });
5324
5830
  const ThreadSessionSetPayload = effect.Schema.Struct({
5325
5831
  threadId: ThreadId,
5326
- session: OrchestrationSession
5832
+ session: OrchestrationSession,
5833
+ /** Decided by the server: the turn this session-set releases and its terminal state. */
5834
+ releasedTurn: effect.Schema.optional(OrchestrationReleasedTurn)
5327
5835
  });
5328
5836
  const ThreadProposedPlanUpsertedPayload = effect.Schema.Struct({
5329
5837
  threadId: ThreadId,
@@ -5379,6 +5887,8 @@ const WorktreeSourceControlStateUpdatedPayload = effect.Schema.Struct({
5379
5887
  prTitle: effect.Schema.optional(effect.Schema.NullOr(TrimmedNonEmptyString)),
5380
5888
  prState: effect.Schema.NullOr(PullRequestState),
5381
5889
  prIsDraft: effect.Schema.NullOr(effect.Schema.Boolean),
5890
+ /** When the PR reached its current merged/closed state; see `Worktree.prTerminalAt`. */
5891
+ prTerminalAt: effect.Schema.optional(effect.Schema.NullOr(IsoDateTime)),
5382
5892
  issueState: effect.Schema.NullOr(IssueState),
5383
5893
  updatedAt: IsoDateTime
5384
5894
  });
@@ -5392,6 +5902,23 @@ const WorktreeDeletedPayload = effect.Schema.Struct({
5392
5902
  deletedAt: IsoDateTime,
5393
5903
  deletedBranch: effect.Schema.Boolean
5394
5904
  });
5905
+ const WorktreeCheckoutRemovedPayload = effect.Schema.Struct({
5906
+ worktreeId: WorktreeId,
5907
+ reason: WorktreeCheckoutRemovalReason,
5908
+ removedAt: IsoDateTime
5909
+ });
5910
+ const WorktreeCheckoutRestoredPayload = effect.Schema.Struct({
5911
+ worktreeId: WorktreeId,
5912
+ worktreePath: TrimmedNonEmptyString,
5913
+ restoredAt: IsoDateTime
5914
+ });
5915
+ const WorktreeRelocatedPayload = effect.Schema.Struct({
5916
+ worktreeId: WorktreeId,
5917
+ projectId: ProjectId,
5918
+ sourcePath: TrimmedNonEmptyString,
5919
+ destinationPath: TrimmedNonEmptyString,
5920
+ relocatedAt: IsoDateTime
5921
+ });
5395
5922
  const ThreadAttachedToWorktreePayload = effect.Schema.Struct({
5396
5923
  threadId: ThreadId,
5397
5924
  worktreeId: WorktreeId,
@@ -5465,6 +5992,16 @@ const OrchestrationEvent = effect.Schema.Union([
5465
5992
  type: effect.Schema.Literal("thread.deleted"),
5466
5993
  payload: ThreadDeletedPayload
5467
5994
  }),
5995
+ effect.Schema.Struct({
5996
+ ...EventBaseFields,
5997
+ type: effect.Schema.Literal("thread.trashed"),
5998
+ payload: ThreadTrashedPayload
5999
+ }),
6000
+ effect.Schema.Struct({
6001
+ ...EventBaseFields,
6002
+ type: effect.Schema.Literal("thread.untrashed"),
6003
+ payload: ThreadUntrashedPayload
6004
+ }),
5468
6005
  effect.Schema.Struct({
5469
6006
  ...EventBaseFields,
5470
6007
  type: effect.Schema.Literal("thread.archived"),
@@ -5495,6 +6032,16 @@ const OrchestrationEvent = effect.Schema.Union([
5495
6032
  type: effect.Schema.Literal("thread.unsettled"),
5496
6033
  payload: ThreadUnsettledPayload
5497
6034
  }),
6035
+ effect.Schema.Struct({
6036
+ ...EventBaseFields,
6037
+ type: effect.Schema.Literal("thread.usage-limit-set"),
6038
+ payload: ThreadUsageLimitSetPayload
6039
+ }),
6040
+ effect.Schema.Struct({
6041
+ ...EventBaseFields,
6042
+ type: effect.Schema.Literal("thread.usage-limit-cleared"),
6043
+ payload: ThreadUsageLimitClearedPayload
6044
+ }),
5498
6045
  effect.Schema.Struct({
5499
6046
  ...EventBaseFields,
5500
6047
  type: effect.Schema.Literal("thread.meta-updated"),
@@ -5635,6 +6182,21 @@ const OrchestrationEvent = effect.Schema.Union([
5635
6182
  type: effect.Schema.Literal("worktree.deleted"),
5636
6183
  payload: WorktreeDeletedPayload
5637
6184
  }),
6185
+ effect.Schema.Struct({
6186
+ ...EventBaseFields,
6187
+ type: effect.Schema.Literal("worktree.checkoutRemoved"),
6188
+ payload: WorktreeCheckoutRemovedPayload
6189
+ }),
6190
+ effect.Schema.Struct({
6191
+ ...EventBaseFields,
6192
+ type: effect.Schema.Literal("worktree.checkoutRestored"),
6193
+ payload: WorktreeCheckoutRestoredPayload
6194
+ }),
6195
+ effect.Schema.Struct({
6196
+ ...EventBaseFields,
6197
+ type: effect.Schema.Literal("worktree.relocated"),
6198
+ payload: WorktreeRelocatedPayload
6199
+ }),
5638
6200
  effect.Schema.Struct({
5639
6201
  ...EventBaseFields,
5640
6202
  type: effect.Schema.Literal("thread.attachedToWorktree"),
@@ -5933,8 +6495,20 @@ var OrchestrationGetSnapshotError = class extends effect.Schema.TaggedError()("O
5933
6495
  message: TrimmedNonEmptyString,
5934
6496
  cause: effect.Schema.optional(effect.Schema.Defect())
5935
6497
  }) {};
6498
+ /**
6499
+ * Machine-readable dispatch failures a client acts on. Absent for every other failure, which a
6500
+ * client only shows by `message`.
6501
+ *
6502
+ * - `chat-project-retired`: a `thread.turn.start` whose `bootstrap.createChatProject` names a
6503
+ * project id this node has already deleted, such as an unused chat removed by startup cleanup.
6504
+ * Nothing was created and the id can never be used again. The client gives the draft a fresh
6505
+ * project id and sends again once.
6506
+ */
6507
+ const OrchestrationDispatchCommandErrorReason = effect.Schema.Literals(["chat-project-retired"]);
5936
6508
  var OrchestrationDispatchCommandError = class extends effect.Schema.TaggedError()("OrchestrationDispatchCommandError", {
5937
6509
  message: TrimmedNonEmptyString,
6510
+ /** Additive: older clients ignore it and show `message`. */
6511
+ reason: effect.Schema.optionalKey(OrchestrationDispatchCommandErrorReason),
5938
6512
  cause: effect.Schema.optional(effect.Schema.Defect())
5939
6513
  }) {};
5940
6514
  var OrchestrationGetTurnDiffError = class extends effect.Schema.TaggedError()("OrchestrationGetTurnDiffError", {
@@ -6075,6 +6649,13 @@ const ClaudeCacheObservation = effect.Schema.Struct({
6075
6649
  providerInstanceId: ProviderInstanceId,
6076
6650
  model: TrimmedNonEmptyString,
6077
6651
  modelSelection: effect.Schema.optional(ModelSelection),
6652
+ /**
6653
+ * The working directory of the runtime that made this request. Claude keeps native
6654
+ * conversations per directory, so once the thread's working directory differs, the next
6655
+ * turn continues in a fresh session instead of resuming this conversation. Absent from
6656
+ * older servers.
6657
+ */
6658
+ cwd: effect.Schema.optional(TrimmedNonEmptyString),
6078
6659
  messageId: TrimmedNonEmptyString,
6079
6660
  directInputTokens: NonNegativeInt,
6080
6661
  cacheReadInputTokens: NonNegativeInt,
@@ -6170,6 +6751,7 @@ const RuntimeErrorClass = effect.Schema.Literals([
6170
6751
  "transport_error",
6171
6752
  "permission_error",
6172
6753
  "validation_error",
6754
+ "usage_limit",
6173
6755
  "unknown"
6174
6756
  ]);
6175
6757
  const TOOL_LIFECYCLE_ITEM_TYPES = [
@@ -6360,7 +6942,25 @@ const ThreadMetadataUpdatedPayload = effect.Schema.Struct({
6360
6942
  });
6361
6943
  const ProviderThreadGoalUpdatedPayload = effect.Schema.Struct({ goal: ThreadGoal });
6362
6944
  const ProviderThreadGoalClearedPayload = effect.Schema.Struct({});
6945
+ /** Billing/work counters are separate from the current context-window gauge. */
6946
+ const ProcessedTokenUsage = effect.Schema.Struct({
6947
+ scope: effect.Schema.Literals([
6948
+ "session",
6949
+ "turn",
6950
+ "request"
6951
+ ]),
6952
+ requestId: effect.Schema.optional(TrimmedNonEmptyStringSchema$1),
6953
+ sessionId: effect.Schema.optional(TrimmedNonEmptyStringSchema$1),
6954
+ /** Includes cache reads and writes. */
6955
+ inputTokens: NonNegativeInt,
6956
+ cachedInputTokens: NonNegativeInt,
6957
+ /** Includes reasoning output; reasoning is not charged a second time. */
6958
+ outputTokens: NonNegativeInt,
6959
+ reasoningOutputTokens: NonNegativeInt,
6960
+ totalTokens: NonNegativeInt
6961
+ });
6363
6962
  const ThreadTokenUsageSnapshot = effect.Schema.Struct({
6963
+ processedUsage: effect.Schema.optional(ProcessedTokenUsage),
6364
6964
  claudeCache: effect.Schema.optional(ClaudeCacheObservation),
6365
6965
  usedTokens: NonNegativeInt,
6366
6966
  totalProcessedTokens: effect.Schema.optional(NonNegativeInt),
@@ -6686,7 +7286,19 @@ const AuthStatusPayload = effect.Schema.Struct({
6686
7286
  error: effect.Schema.optional(TrimmedNonEmptyStringSchema$1)
6687
7287
  });
6688
7288
  const AccountUpdatedPayload = effect.Schema.Struct({ account: effect.Schema.Unknown });
6689
- const AccountRateLimitsUpdatedPayload = effect.Schema.Struct({ rateLimits: effect.Schema.Unknown });
7289
+ /**
7290
+ * Provider-agnostic reading of a rate-limit update. `exhausted` means at least one
7291
+ * window is rejected or at 100%; `resetAt` is when ALL exhausted windows reset, or
7292
+ * null when any of their resets is unknown.
7293
+ */
7294
+ const UsageLimitState = effect.Schema.Struct({
7295
+ exhausted: effect.Schema.Boolean,
7296
+ resetAt: effect.Schema.NullOr(IsoDateTime)
7297
+ });
7298
+ const AccountRateLimitsUpdatedPayload = effect.Schema.Struct({
7299
+ rateLimits: effect.Schema.Unknown,
7300
+ usageLimitState: effect.Schema.optional(UsageLimitState)
7301
+ });
6690
7302
  const McpStatusUpdatedPayload = effect.Schema.Struct({ status: effect.Schema.Unknown });
6691
7303
  const McpOauthCompletedPayload = effect.Schema.Struct({
6692
7304
  success: effect.Schema.Boolean,
@@ -6731,7 +7343,12 @@ const RuntimeWarningPayload = effect.Schema.Struct({
6731
7343
  const RuntimeErrorPayload = effect.Schema.Struct({
6732
7344
  message: TrimmedNonEmptyStringSchema$1,
6733
7345
  class: effect.Schema.optional(RuntimeErrorClass),
6734
- detail: effect.Schema.optional(effect.Schema.Unknown)
7346
+ detail: effect.Schema.optional(effect.Schema.Unknown),
7347
+ /**
7348
+ * Only meaningful for `class: "usage_limit"`: when the limit resets. null = a limit
7349
+ * with an unknown reset; absent = not applicable.
7350
+ */
7351
+ resetAt: effect.Schema.optional(effect.Schema.NullOr(IsoDateTime))
6735
7352
  });
6736
7353
  const ProviderRuntimeSessionStartedEvent = effect.Schema.Struct({
6737
7354
  ...ProviderRuntimeEventBase.fields,
@@ -7101,6 +7718,11 @@ const THREAD_KEYBINDING_COMMANDS = [
7101
7718
  "thread.next",
7102
7719
  ...THREAD_JUMP_KEYBINDING_COMMANDS
7103
7720
  ];
7721
+ /**
7722
+ * Every built-in command a key can be bound to. Some ship without a default
7723
+ * key, so this — not the default keymap — is the list a keybindings editor
7724
+ * offers.
7725
+ */
7104
7726
  const STATIC_KEYBINDING_COMMANDS = [
7105
7727
  "terminal.toggle",
7106
7728
  "terminal.split",
@@ -7116,8 +7738,15 @@ const STATIC_KEYBINDING_COMMANDS = [
7116
7738
  "sidebar.showProjects",
7117
7739
  "chat.new",
7118
7740
  "chat.newLocal",
7741
+ "chat.newWithoutProject",
7119
7742
  "composer.stash",
7120
7743
  "editor.openFavorite",
7744
+ "pane.split",
7745
+ "pane.close",
7746
+ "pane.focusNext",
7747
+ "pane.focusPrevious",
7748
+ "pullRequests.open",
7749
+ "projects.open",
7121
7750
  ...["modelPicker.toggle", ...MODEL_PICKER_JUMP_KEYBINDING_COMMANDS],
7122
7751
  ...THREAD_KEYBINDING_COMMANDS
7123
7752
  ];
@@ -7126,7 +7755,13 @@ const SCRIPT_RUN_COMMAND_PATTERN = effect.Schema.TemplateLiteral([
7126
7755
  effect.Schema.NonEmptyString.check(effect.Schema.isMaxLength(24), effect.Schema.isPattern(/^[a-z0-9][a-z0-9-]*$/)),
7127
7756
  effect.Schema.Literal(".run")
7128
7757
  ]);
7129
- const KeybindingCommand = effect.Schema.Union([effect.Schema.Literals(STATIC_KEYBINDING_COMMANDS), SCRIPT_RUN_COMMAND_PATTERN]);
7758
+ /** Client-owned script commands include the environment and project identity. */
7759
+ const SCOPED_SCRIPT_RUN_COMMAND = effect.Schema.String.check(effect.Schema.isMaxLength(2048), effect.Schema.isPattern(/^projectScript\.[^/]+\/[^/]+\/[a-z0-9][a-z0-9-]{0,23}\.run$/));
7760
+ const KeybindingCommand = effect.Schema.Union([
7761
+ effect.Schema.Literals(STATIC_KEYBINDING_COMMANDS),
7762
+ SCRIPT_RUN_COMMAND_PATTERN,
7763
+ SCOPED_SCRIPT_RUN_COMMAND
7764
+ ]);
7130
7765
  const KeybindingValue = TrimmedString.check(effect.Schema.isMinLength(1), effect.Schema.isMaxLength(64));
7131
7766
  const KeybindingWhen = TrimmedString.check(effect.Schema.isMinLength(1), effect.Schema.isMaxLength(MAX_KEYBINDING_WHEN_LENGTH));
7132
7767
  const KeybindingRule = effect.Schema.Struct({
@@ -7179,6 +7814,10 @@ var KeybindingsConfigError = class extends effect.Schema.TaggedError()("Keybindi
7179
7814
  return `Unable to parse keybindings config at ${this.configPath}: ${this.detail}`;
7180
7815
  }
7181
7816
  };
7817
+ effect.Schema.Struct({
7818
+ rules: KeybindingsConfig,
7819
+ disabledCommands: effect.Schema.Array(KeybindingCommand).check(effect.Schema.isMaxLength(256))
7820
+ });
7182
7821
  //#endregion
7183
7822
  //#region ../../packages/contracts/src/codexResetCredits.ts
7184
7823
  const CodexResetCredit = effect.Schema.Struct({
@@ -7292,25 +7931,252 @@ var StorageError = class extends effect.Schema.TaggedError()("StorageError", { d
7292
7931
  }
7293
7932
  };
7294
7933
  //#endregion
7295
- //#region ../../packages/contracts/src/settings.ts
7296
- const TimestampFormat = effect_Schema.Literals([
7297
- "locale",
7298
- "12-hour",
7299
- "24-hour"
7934
+ //#region ../../packages/contracts/src/workspaceLifecycle.ts
7935
+ /**
7936
+ * Workspace lifecycle is separate from conversation lifecycle. No action here ever
7937
+ * deletes a conversation; checkout removal archives the workspace's conversations
7938
+ * by default and keeps their history and the branch. Only an explicit discard
7939
+ * ("Delete workspace") throws work away, and it moves conversations to Trash.
7940
+ */
7941
+ const WorkspaceLifecycleAction = effect.Schema.Literals([
7942
+ "archive",
7943
+ "restore",
7944
+ "remove-checkout",
7945
+ "remove-stale-record",
7946
+ "recreate-checkout"
7300
7947
  ]);
7301
- const DEFAULT_TIMESTAMP_FORMAT = "locale";
7302
- const SidebarProjectSortOrder = effect_Schema.Literals([
7303
- "updated_at",
7304
- "created_at",
7305
- "manual"
7948
+ /** `removed`: the record says the checkout is gone. `unavailable`: inspection failed. */
7949
+ const WorkspaceCheckoutState = effect.Schema.Literals([
7950
+ "present",
7951
+ "missing",
7952
+ "removed",
7953
+ "unavailable"
7306
7954
  ]);
7307
- const DEFAULT_SIDEBAR_PROJECT_SORT_ORDER = "updated_at";
7308
- const SidebarThreadSortOrder = effect_Schema.Literals(["updated_at", "created_at"]);
7309
- const DEFAULT_SIDEBAR_THREAD_SORT_ORDER = "updated_at";
7310
- const SidebarAutoSettleAfterDays = effect_Schema.NullOr(effect_Schema.Literals([
7311
- 1,
7312
- 3,
7313
- 7,
7955
+ const SamplePaths = effect.Schema.Array(effect.Schema.String).check(effect.Schema.isMaxLength(20));
7956
+ const WorkspaceChangeSummary = effect.Schema.Struct({
7957
+ /** Tracked files with staged, unstaged or conflicted changes. */
7958
+ modified: NonNegativeInt,
7959
+ untracked: NonNegativeInt,
7960
+ /** Ignored content that is not a known regenerable cache (credentials, databases, outputs…). */
7961
+ protectedIgnored: NonNegativeInt,
7962
+ protectedIgnoredSample: SamplePaths,
7963
+ /** Ignored caches/build outputs that `git worktree remove` may discard. */
7964
+ regenerableIgnored: NonNegativeInt,
7965
+ regenerableIgnoredSample: SamplePaths,
7966
+ /** Status output exceeded its bound; treated as blocking. */
7967
+ truncated: effect.Schema.Boolean
7968
+ });
7969
+ const WorkspaceConversationCounts = effect.Schema.Struct({
7970
+ active: NonNegativeInt,
7971
+ archived: NonNegativeInt,
7972
+ trashed: NonNegativeInt
7973
+ });
7974
+ const WorkspaceActionAvailability = effect.Schema.Struct({
7975
+ action: WorkspaceLifecycleAction,
7976
+ available: effect.Schema.Boolean,
7977
+ blockers: effect.Schema.Array(effect.Schema.String)
7978
+ });
7979
+ const WorkspaceLifecycleSummary = effect.Schema.Struct({
7980
+ worktreeId: WorktreeId,
7981
+ projectId: ProjectId,
7982
+ title: effect.Schema.String,
7983
+ branch: TrimmedNonEmptyString,
7984
+ path: effect.Schema.NullOr(effect.Schema.String),
7985
+ origin: WorktreeOrigin,
7986
+ /** The project root/main checkout is never a disposable workspace. */
7987
+ main: effect.Schema.Boolean,
7988
+ archivedAt: effect.Schema.NullOr(IsoDateTime),
7989
+ checkoutRemovedAt: effect.Schema.NullOr(IsoDateTime),
7990
+ checkout: WorkspaceCheckoutState,
7991
+ gitRegistered: effect.Schema.NullOr(effect.Schema.Boolean),
7992
+ branchExists: effect.Schema.NullOr(effect.Schema.Boolean),
7993
+ /** Commits on the branch that the project HEAD does not contain. */
7994
+ unmerged: effect.Schema.NullOr(effect.Schema.Boolean),
7995
+ changes: effect.Schema.NullOr(WorkspaceChangeSummary),
7996
+ conversations: WorkspaceConversationCounts,
7997
+ activeWork: effect.Schema.Array(effect.Schema.String),
7998
+ actions: effect.Schema.Array(WorkspaceActionAvailability),
7999
+ /**
8000
+ * Why "Delete workspace" (`remove-checkout` with `discard`) cannot run; empty
8001
+ * when it can. Absent from nodes that predate it.
8002
+ */
8003
+ discardBlockers: effect.Schema.optional(effect.Schema.Array(effect.Schema.String)),
8004
+ inspectedAt: IsoDateTime
8005
+ });
8006
+ const WorkspaceLifecycleListInput = effect.Schema.Struct({ projectId: ProjectId });
8007
+ const WorkspaceLifecycleRequest = effect.Schema.Struct({
8008
+ worktreeId: WorktreeId,
8009
+ action: WorkspaceLifecycleAction,
8010
+ /** Default true for checkout removal and stale-record cleanup; ignored otherwise. */
8011
+ archiveConversations: effect.Schema.optional(effect.Schema.Boolean),
8012
+ /**
8013
+ * Off by default. Only on removal; a verified merged branch, or any branch when
8014
+ * discarding.
8015
+ */
8016
+ deleteBranch: effect.Schema.optional(effect.Schema.Boolean),
8017
+ /**
8018
+ * Off by default; `remove-checkout` only. "Delete workspace": the checkout is
8019
+ * removed even with uncommitted, untracked or ignored files (they are lost),
8020
+ * an unmerged branch may be deleted, and the workspace's conversations move to
8021
+ * Trash instead of the archive. Also finishes a workspace whose checkout is
8022
+ * already removed. Active work still blocks it.
8023
+ */
8024
+ discard: effect.Schema.optional(effect.Schema.Boolean)
8025
+ });
8026
+ const WorkspaceLifecycleEffects = effect.Schema.Struct({
8027
+ archiveWorkspace: effect.Schema.Boolean,
8028
+ restoreWorkspace: effect.Schema.Boolean,
8029
+ removeCheckout: effect.Schema.Boolean,
8030
+ recreateCheckout: effect.Schema.Boolean,
8031
+ recordCheckoutRemoval: effect.Schema.Boolean,
8032
+ stopSessionThreadIds: effect.Schema.Array(ThreadId),
8033
+ archiveConversationIds: effect.Schema.Array(ThreadId),
8034
+ /** Conversations left exactly as they are (already archived, trashed or never used). */
8035
+ unchangedConversations: NonNegativeInt,
8036
+ discardedRegenerableIgnored: NonNegativeInt,
8037
+ deleteBranch: effect.Schema.Boolean,
8038
+ branch: TrimmedNonEmptyString,
8039
+ /** The request discards ("Delete workspace"). Absent from nodes that predate it. */
8040
+ discard: effect.Schema.optional(effect.Schema.Boolean),
8041
+ /** Conversations moved to Trash, where they stay restorable. */
8042
+ trashConversationIds: effect.Schema.optional(effect.Schema.Array(ThreadId)),
8043
+ /** Work that exists nowhere else is lost: changed or untracked files, unmerged commits. */
8044
+ discardsWork: effect.Schema.optional(effect.Schema.Boolean)
8045
+ });
8046
+ const WorkspaceLifecyclePreview = effect.Schema.Struct({
8047
+ request: WorkspaceLifecycleRequest,
8048
+ workspace: WorkspaceLifecycleSummary,
8049
+ effects: WorkspaceLifecycleEffects,
8050
+ /** One-line exact effect, e.g. "Remove 1 checkout, archive 4 conversations, keep history and branch." */
8051
+ summary: effect.Schema.String,
8052
+ details: effect.Schema.Array(effect.Schema.String),
8053
+ blockers: effect.Schema.Array(effect.Schema.String),
8054
+ /** Binds an apply to exactly the state this preview inspected. */
8055
+ fingerprint: TrimmedNonEmptyString
8056
+ });
8057
+ const WorkspaceLifecycleApplyInput = effect.Schema.Struct({
8058
+ ...WorkspaceLifecycleRequest.fields,
8059
+ expectedFingerprint: TrimmedNonEmptyString
8060
+ });
8061
+ const WorkspaceLifecycleStepId = effect.Schema.Literals([
8062
+ "preflight",
8063
+ "stop-sessions",
8064
+ "fence-checkout",
8065
+ "revalidate",
8066
+ "remove-checkout",
8067
+ "recreate-checkout",
8068
+ "update-record",
8069
+ "archive-conversations",
8070
+ "delete-branch"
8071
+ ]);
8072
+ const WorkspaceLifecycleStep = effect.Schema.Struct({
8073
+ id: WorkspaceLifecycleStepId,
8074
+ status: effect.Schema.Literals([
8075
+ "done",
8076
+ "skipped",
8077
+ "failed"
8078
+ ]),
8079
+ detail: effect.Schema.String
8080
+ });
8081
+ /**
8082
+ * `blocked`: nothing changed. `failed`: nothing durable changed. `partial`: some steps
8083
+ * completed (listed truthfully); retrying the same action resumes safely.
8084
+ */
8085
+ const WorkspaceLifecycleOutcome = effect.Schema.Literals([
8086
+ "completed",
8087
+ "blocked",
8088
+ "partial",
8089
+ "failed"
8090
+ ]);
8091
+ const WorkspaceLifecycleResult = effect.Schema.Struct({
8092
+ outcome: WorkspaceLifecycleOutcome,
8093
+ message: effect.Schema.String,
8094
+ steps: effect.Schema.Array(WorkspaceLifecycleStep)
8095
+ });
8096
+ var WorkspaceLifecycleError = class extends effect.Schema.TaggedError()("WorkspaceLifecycleError", { detail: effect.Schema.String }) {
8097
+ get message() {
8098
+ return this.detail;
8099
+ }
8100
+ };
8101
+ const SuggestionDays = effect.Schema.NullOr(effect.Schema.Int.check(effect.Schema.isBetween({
8102
+ minimum: 1,
8103
+ maximum: 3650
8104
+ })));
8105
+ /** `null` turns a suggestion off. Suggestions never act on their own; each needs approval. */
8106
+ const LifecycleSuggestionPolicy = effect.Schema.Struct({
8107
+ archiveInactiveThreadsDays: SuggestionDays,
8108
+ removeArchivedCheckoutsDays: SuggestionDays
8109
+ });
8110
+ const DEFAULT_LIFECYCLE_SUGGESTION_POLICY = {
8111
+ archiveInactiveThreadsDays: 30,
8112
+ removeArchivedCheckoutsDays: 7
8113
+ };
8114
+ const ThreadArchiveSuggestion = effect.Schema.Struct({
8115
+ threadId: ThreadId,
8116
+ projectId: ProjectId,
8117
+ title: effect.Schema.String,
8118
+ lastActivityAt: IsoDateTime
8119
+ });
8120
+ const CheckoutRemovalSuggestion = effect.Schema.Struct({
8121
+ worktreeId: WorktreeId,
8122
+ projectId: ProjectId,
8123
+ title: effect.Schema.String,
8124
+ branch: TrimmedNonEmptyString,
8125
+ /** When the last of its conversations was archived. */
8126
+ archivedSince: IsoDateTime,
8127
+ conversations: NonNegativeInt
8128
+ });
8129
+ const LifecycleSuggestions = effect.Schema.Struct({
8130
+ generatedAt: IsoDateTime,
8131
+ threads: effect.Schema.Array(ThreadArchiveSuggestion),
8132
+ checkouts: effect.Schema.Array(CheckoutRemovalSuggestion)
8133
+ });
8134
+ const TrashedThreadSummary = effect.Schema.Struct({
8135
+ threadId: ThreadId,
8136
+ projectId: ProjectId,
8137
+ projectTitle: effect.Schema.NullOr(effect.Schema.String),
8138
+ /**
8139
+ * The owning project's kind, so a chat is listed as "No project" without the client's project
8140
+ * store. Absent when the project record is gone, or from a node that predates chats; both read
8141
+ * as a regular project.
8142
+ */
8143
+ projectKind: effect.Schema.optionalKey(ProjectKind),
8144
+ /** False when the owning project was removed; restore is unavailable. */
8145
+ projectAvailable: effect.Schema.Boolean,
8146
+ title: effect.Schema.String,
8147
+ branch: effect.Schema.NullOr(effect.Schema.String),
8148
+ worktreePath: effect.Schema.NullOr(effect.Schema.String),
8149
+ worktreeId: effect.Schema.NullOr(WorktreeId),
8150
+ /** Restoring returns the conversation to this archive state. */
8151
+ archivedAt: effect.Schema.NullOr(IsoDateTime),
8152
+ trashedAt: IsoDateTime,
8153
+ createdAt: IsoDateTime,
8154
+ updatedAt: IsoDateTime
8155
+ });
8156
+ const TrashListResult = effect.Schema.Struct({
8157
+ threads: effect.Schema.Array(TrashedThreadSummary),
8158
+ truncated: effect.Schema.Boolean
8159
+ });
8160
+ //#endregion
8161
+ //#region ../../packages/contracts/src/settings.ts
8162
+ const TimestampFormat = effect_Schema.Literals([
8163
+ "locale",
8164
+ "12-hour",
8165
+ "24-hour"
8166
+ ]);
8167
+ const DEFAULT_TIMESTAMP_FORMAT = "locale";
8168
+ const SidebarProjectSortOrder = effect_Schema.Literals([
8169
+ "updated_at",
8170
+ "created_at",
8171
+ "manual"
8172
+ ]);
8173
+ const DEFAULT_SIDEBAR_PROJECT_SORT_ORDER = "updated_at";
8174
+ const SidebarThreadSortOrder = effect_Schema.Literals(["updated_at", "created_at"]);
8175
+ const DEFAULT_SIDEBAR_THREAD_SORT_ORDER = "updated_at";
8176
+ const SidebarAutoSettleAfterDays = effect_Schema.NullOr(effect_Schema.Literals([
8177
+ 1,
8178
+ 3,
8179
+ 7,
7314
8180
  14,
7315
8181
  30,
7316
8182
  90
@@ -7344,6 +8210,13 @@ const AiFocusRefreshIntervalMs = effect_Schema.Literals([
7344
8210
  864e5
7345
8211
  ]);
7346
8212
  const DEFAULT_AI_FOCUS_REFRESH_INTERVAL_MS = 6e5;
8213
+ /**
8214
+ * What Enter does with a message sent while a turn runs: `queue` waits for the turn to finish,
8215
+ * `steer` adds it to the running turn when the provider supports steering. Mod+Enter does the
8216
+ * opposite.
8217
+ */
8218
+ const FollowUpBehavior = effect_Schema.Literals(["queue", "steer"]);
8219
+ const DEFAULT_FOLLOW_UP_BEHAVIOR = "queue";
7347
8220
  /** Missing effort is a legacy model-only preset; provider remains the stable instance id. */
7348
8221
  const ModelFavorite = effect_Schema.Struct({
7349
8222
  provider: ProviderInstanceId,
@@ -7361,6 +8234,7 @@ const ClientSettingsSchema = effect_Schema.Struct({
7361
8234
  dismissedProviderUpdateNotificationKeys: effect_Schema.Array(TrimmedNonEmptyString).pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed([]))),
7362
8235
  diffIgnoreWhitespace: effect_Schema.Boolean.pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed(true))),
7363
8236
  diffWordWrap: effect_Schema.Boolean.pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed(false))),
8237
+ followUpBehavior: FollowUpBehavior.pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed(DEFAULT_FOLLOW_UP_BEHAVIOR))),
7364
8238
  favorites: effect_Schema.Array(ModelFavorite).pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed([]))),
7365
8239
  providerModelPreferences: effect_Schema.Record(ProviderInstanceId, effect_Schema.Struct({
7366
8240
  hiddenModels: effect_Schema.Array(effect_Schema.String).pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed([]))),
@@ -7632,13 +8506,19 @@ const ServerSettings = effect_Schema.Struct({
7632
8506
  environmentIcon: EnvironmentMachineHint.pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed(null))),
7633
8507
  enableLegacyTokenStreaming: effect_Schema.Boolean.pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed(false))),
7634
8508
  enableProviderUpdateChecks: effect_Schema.Boolean.pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed(true))),
8509
+ continueThreadsAfterRestart: effect_Schema.Boolean.pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed(false))),
8510
+ autoResumeLimitedThreads: effect_Schema.Boolean.pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed(false))),
8511
+ snoozeLimitedThreads: effect_Schema.Boolean.pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed(false))),
7635
8512
  storageRetention: StorageRetentionPolicy.pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed({
7636
8513
  automatic: false,
7637
8514
  completedWorktreeDays: null,
7638
8515
  temporaryDataDays: null
7639
8516
  }))),
7640
8517
  projectStorageRetention: effect_Schema.Record(effect_Schema.String, effect_Schema.NullOr(StorageRetentionPolicy)).pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed({}))),
8518
+ lifecycleSuggestions: LifecycleSuggestionPolicy.pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed(DEFAULT_LIFECYCLE_SUGGESTION_POLICY))),
8519
+ projectLifecycleSuggestions: effect_Schema.Record(effect_Schema.String, effect_Schema.NullOr(LifecycleSuggestionPolicy)).pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed({}))),
7641
8520
  worktreeRoot: WorktreeRoot.pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed(""))),
8521
+ chatsRoot: WorktreeRoot.pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed(""))),
7642
8522
  worktreeSubmodules: WorktreeSubmodules.pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed("recursive"))),
7643
8523
  projectWorktreeSubmodules: effect_Schema.Record(effect_Schema.String, effect_Schema.NullOr(WorktreeSubmodules)).pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed({}))),
7644
8524
  projectWorktreeRoots: effect_Schema.Record(effect_Schema.String, effect_Schema.NullOr(WorktreeRoot)).pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed({}))),
@@ -7733,9 +8613,15 @@ const ServerSettingsPatch = effect_Schema.Struct({
7733
8613
  environmentIcon: effect_Schema.optionalKey(effect_Schema.NullOr(EnvironmentMachineKind)),
7734
8614
  enableLegacyTokenStreaming: effect_Schema.optionalKey(effect_Schema.Boolean),
7735
8615
  enableProviderUpdateChecks: effect_Schema.optionalKey(effect_Schema.Boolean),
8616
+ continueThreadsAfterRestart: effect_Schema.optionalKey(effect_Schema.Boolean),
8617
+ autoResumeLimitedThreads: effect_Schema.optionalKey(effect_Schema.Boolean),
8618
+ snoozeLimitedThreads: effect_Schema.optionalKey(effect_Schema.Boolean),
7736
8619
  storageRetention: effect_Schema.optionalKey(StorageRetentionPolicy),
7737
8620
  projectStorageRetention: effect_Schema.optionalKey(effect_Schema.Record(effect_Schema.String, effect_Schema.NullOr(StorageRetentionPolicy))),
8621
+ lifecycleSuggestions: effect_Schema.optionalKey(LifecycleSuggestionPolicy),
8622
+ projectLifecycleSuggestions: effect_Schema.optionalKey(effect_Schema.Record(effect_Schema.String, effect_Schema.NullOr(LifecycleSuggestionPolicy))),
7738
8623
  worktreeRoot: effect_Schema.optionalKey(WorktreeRoot),
8624
+ chatsRoot: effect_Schema.optionalKey(WorktreeRoot),
7739
8625
  worktreeSubmodules: effect_Schema.optionalKey(WorktreeSubmodules),
7740
8626
  projectWorktreeSubmodules: effect_Schema.optionalKey(effect_Schema.Record(effect_Schema.String, effect_Schema.NullOr(WorktreeSubmodules))),
7741
8627
  projectWorktreeRoots: effect_Schema.optionalKey(effect_Schema.Record(effect_Schema.String, effect_Schema.NullOr(WorktreeRoot))),
@@ -7770,6 +8656,7 @@ effect_Schema.Struct({
7770
8656
  confirmThreadUnpin: effect_Schema.optionalKey(effect_Schema.Boolean),
7771
8657
  diffIgnoreWhitespace: effect_Schema.optionalKey(effect_Schema.Boolean),
7772
8658
  diffWordWrap: effect_Schema.optionalKey(effect_Schema.Boolean),
8659
+ followUpBehavior: effect_Schema.optionalKey(FollowUpBehavior),
7773
8660
  favorites: effect_Schema.optionalKey(effect_Schema.Array(ModelFavorite)),
7774
8661
  providerModelPreferences: effect_Schema.optionalKey(effect_Schema.Record(ProviderInstanceId, effect_Schema.Struct({
7775
8662
  hiddenModels: effect_Schema.Array(effect_Schema.String).pipe(effect_Schema.withDecodingDefault(effect.Effect.succeed([]))),
@@ -7898,6 +8785,27 @@ const ServerProviderRateLimits = effect.Schema.Struct({
7898
8785
  resetCredits: effect.Schema.optional(CodexResetCredits),
7899
8786
  rateLimitReachedType: effect.Schema.optional(TrimmedNonEmptyString)
7900
8787
  });
8788
+ /**
8789
+ * How a provider version fits this Ryco release, per the server's compatibility policy
8790
+ * (code-owned floors + bundled defaults + remote model manifest).
8791
+ * FROZEN: mobile/desktop clients ship separately and decode whole provider lists with this
8792
+ * schema, so an unknown literal would fail the entire `ServerProvider` list. Never add a member —
8793
+ * put new meanings in a new optional field.
8794
+ */
8795
+ const ServerProviderCompatibilityStatus = effect.Schema.Literals([
8796
+ "unknown",
8797
+ "supported",
8798
+ "graceful",
8799
+ "unsupported",
8800
+ "broken"
8801
+ ]);
8802
+ const ServerProviderCompatibilityAdvisory = effect.Schema.Struct({
8803
+ /** Rating of `ServerProvider.version`. */
8804
+ status: ServerProviderCompatibilityStatus,
8805
+ /** Rating of `versionAdvisory.latestVersion`; absent when no latest version is known. */
8806
+ latestVersionStatus: effect.Schema.optionalKey(ServerProviderCompatibilityStatus),
8807
+ message: effect.Schema.NullOr(TrimmedNonEmptyString)
8808
+ });
7901
8809
  const ServerProviderVersionAdvisoryStatus = effect.Schema.Literals([
7902
8810
  "unknown",
7903
8811
  "current",
@@ -7949,6 +8857,7 @@ const ServerProvider = effect.Schema.Struct({
7949
8857
  showInteractionModeToggle: effect.Schema.optional(effect.Schema.Boolean),
7950
8858
  supportsAskMode: effect.Schema.optional(effect.Schema.Boolean),
7951
8859
  supportsTurnSteering: effect.Schema.optional(effect.Schema.Boolean),
8860
+ supportsConversationRollback: effect.Schema.optional(effect.Schema.Boolean),
7952
8861
  enabled: effect.Schema.Boolean,
7953
8862
  installed: effect.Schema.Boolean,
7954
8863
  version: effect.Schema.NullOr(TrimmedNonEmptyString),
@@ -7963,9 +8872,17 @@ const ServerProvider = effect.Schema.Struct({
7963
8872
  skills: effect.Schema.Array(ServerProviderSkill).pipe(effect.Schema.withDecodingDefault(effect.Effect.succeed([]))),
7964
8873
  rateLimits: effect.Schema.optional(ServerProviderRateLimits),
7965
8874
  versionAdvisory: effect.Schema.optionalKey(ServerProviderVersionAdvisory),
8875
+ compatibilityAdvisory: effect.Schema.optionalKey(ServerProviderCompatibilityAdvisory),
7966
8876
  updateState: effect.Schema.optionalKey(ServerProviderUpdateState)
7967
8877
  });
7968
8878
  const ServerProviders = effect.Schema.Array(ServerProvider);
8879
+ /**
8880
+ * Treat the optional `availability` as "available" when absent. This is
8881
+ * the rule legacy producers (which omit the field) and new producers
8882
+ * (which set it explicitly) agree on so consumers never have to thread
8883
+ * `?? "available"` defaults through their code paths.
8884
+ */
8885
+ const isProviderAvailable = (snapshot) => snapshot.availability !== "unavailable";
7969
8886
  const ServerLocalDiagnosticsMetrics = effect.Schema.Struct({
7970
8887
  turnQuiescenceAvgMs: effect.Schema.NullOr(effect.Schema.Number),
7971
8888
  checkpointDurationP95Ms: effect.Schema.NullOr(effect.Schema.Number),
@@ -7985,12 +8902,32 @@ const ServerObservability = effect.Schema.Struct({
7985
8902
  otlpMetricsEnabled: effect.Schema.Boolean,
7986
8903
  localMetrics: effect.Schema.optional(ServerLocalDiagnosticsMetrics)
7987
8904
  });
8905
+ /**
8906
+ * Why "No project" chats are off on this node:
8907
+ * - `inside-git-repository`: the chats root lies in a Git working tree, so every chat would show
8908
+ * the parent repository's branch and diff.
8909
+ * - `root-unavailable`: the chats root cannot be resolved or created.
8910
+ * - `restricted`: the workspace access policy does not allow the chats root.
8911
+ */
8912
+ const ServerChatsUnavailableReason = effect.Schema.Literals([
8913
+ "inside-git-repository",
8914
+ "root-unavailable",
8915
+ "restricted"
8916
+ ]);
8917
+ /** Absent from nodes without chat support; clients then hide every "No project" entry point. */
8918
+ const ServerChatsCapability = effect.Schema.Struct({
8919
+ available: effect.Schema.Boolean,
8920
+ /** Resolved chats root (symlinks resolved), present when it could be determined. */
8921
+ root: effect.Schema.optionalKey(TrimmedNonEmptyString),
8922
+ unavailableReason: effect.Schema.optionalKey(ServerChatsUnavailableReason)
8923
+ });
7988
8924
  const ServerConfig = effect.Schema.Struct({
7989
8925
  usageContractVersion: effect.Schema.optional(NonNegativeInt),
7990
8926
  environment: ExecutionEnvironmentDescriptor,
7991
8927
  auth: ServerAuthDescriptor,
7992
8928
  cwd: TrimmedNonEmptyString,
7993
8929
  workspaceAccessRoot: effect.Schema.optional(TrimmedNonEmptyString),
8930
+ chats: effect.Schema.optionalKey(ServerChatsCapability),
7994
8931
  keybindingsConfigPath: TrimmedNonEmptyString,
7995
8932
  keybindings: ResolvedKeybindingsConfig,
7996
8933
  issues: ServerConfigIssues,
@@ -9521,6 +10458,24 @@ const GitReadLineBlameResult = effect.Schema.Union([effect.Schema.Struct({
9521
10458
  kind: effect.Schema.Literal("unavailable"),
9522
10459
  reason: effect.Schema.String
9523
10460
  })]);
10461
+ /**
10462
+ * One stored blob named by a review patch's `index` line. Patches without
10463
+ * `--full-index` carry abbreviated IDs. No path, index or working-tree lookup.
10464
+ */
10465
+ const GitReadImageBlobInput = effect.Schema.Struct({
10466
+ cwd: TrimmedNonEmptyStringSchema,
10467
+ oid: effect.Schema.String.check(effect.Schema.isPattern(/^(?:[0-9a-f]{4,40}|[0-9a-f]{64})$/))
10468
+ });
10469
+ /** The mime type is sniffed from the blob's bytes, never from a path. */
10470
+ const GitReadImageBlobResult = effect.Schema.Union([effect.Schema.Struct({
10471
+ kind: effect.Schema.Literal("image"),
10472
+ dataBase64: effect.Schema.String,
10473
+ mimeType: TrimmedNonEmptyStringSchema,
10474
+ sizeBytes: NonNegativeInt
10475
+ }), effect.Schema.Struct({
10476
+ kind: effect.Schema.Literal("unavailable"),
10477
+ reason: effect.Schema.String
10478
+ })]);
9524
10479
  const GitLocalChangesInput = effect.Schema.Struct({ cwd: TrimmedNonEmptyStringSchema });
9525
10480
  const GitLocalChangesScope = effect.Schema.Literals(["staged", "unstaged"]);
9526
10481
  const GitLocalPatch = effect.Schema.Struct({
@@ -9549,6 +10504,402 @@ const GitApplyIndexPatchInput = effect.Schema.Struct({
9549
10504
  hunkIndex: effect.Schema.optional(NonNegativeInt)
9550
10505
  });
9551
10506
  //#endregion
10507
+ //#region ../../packages/contracts/src/changeRequestReview.ts
10508
+ /**
10509
+ * Review conversation, timeline, and lifecycle contracts for the dedicated
10510
+ * pull request page. Unlike `SourceControlChangeRequestDetail`, these payloads
10511
+ * are never attached to agent prompts, so they are bounded by page size
10512
+ * rather than by the composer token budget.
10513
+ */
10514
+ const NonBlankMarkdownBody = effect.Schema.String.check(effect.Schema.makeFilter((body) => body.trim().length > 0 ? void 0 : "Expected a non-blank Markdown body"));
10515
+ /** `left` is the base (deleted) side of a diff, `right` the head (added) side. */
10516
+ const ChangeRequestDiffSide = effect.Schema.Literals(["left", "right"]);
10517
+ const ChangeRequestActor = effect.Schema.Struct({
10518
+ login: TrimmedNonEmptyString,
10519
+ avatarUrl: effect.Schema.optional(effect.Schema.String),
10520
+ isBot: effect.Schema.optional(effect.Schema.Boolean)
10521
+ });
10522
+ const ChangeRequestReviewComment = effect.Schema.Struct({
10523
+ /** Host node id; used for replies, reactions, edits, and deletes. */
10524
+ id: TrimmedNonEmptyString,
10525
+ author: ChangeRequestActor,
10526
+ authorAssociation: effect.Schema.optional(effect.Schema.String),
10527
+ body: effect.Schema.String,
10528
+ createdAt: effect.Schema.DateTimeUtc,
10529
+ updatedAt: effect.Schema.optional(effect.Schema.DateTimeUtc),
10530
+ url: effect.Schema.optional(effect.Schema.String),
10531
+ reactions: effect.Schema.optional(effect.Schema.Array(SourceControlCommentReaction)),
10532
+ /** `pending` comments belong to the viewer's unsubmitted host-side review. */
10533
+ state: effect.Schema.optional(effect.Schema.Literals(["pending", "submitted"])),
10534
+ viewerCanUpdate: effect.Schema.optional(effect.Schema.Boolean),
10535
+ viewerCanDelete: effect.Schema.optional(effect.Schema.Boolean),
10536
+ isMinimized: effect.Schema.optional(effect.Schema.Boolean)
10537
+ });
10538
+ const ChangeRequestReviewThread = effect.Schema.Struct({
10539
+ id: TrimmedNonEmptyString,
10540
+ path: TrimmedNonEmptyString,
10541
+ subjectType: effect.Schema.Literals(["line", "file"]),
10542
+ side: ChangeRequestDiffSide,
10543
+ startSide: effect.Schema.optional(ChangeRequestDiffSide),
10544
+ /** Current anchor line; null when the thread is outdated and no longer maps onto the diff. */
10545
+ line: effect.Schema.NullOr(PositiveInt),
10546
+ startLine: effect.Schema.optional(effect.Schema.NullOr(PositiveInt)),
10547
+ originalLine: effect.Schema.optional(effect.Schema.NullOr(PositiveInt)),
10548
+ originalStartLine: effect.Schema.optional(effect.Schema.NullOr(PositiveInt)),
10549
+ /** Commit the first comment was written on; `originalLine` refers to that commit. */
10550
+ originalCommitOid: effect.Schema.optional(TrimmedNonEmptyString),
10551
+ /** Unified diff excerpt the first comment was written against. */
10552
+ diffHunk: effect.Schema.optional(effect.Schema.String),
10553
+ isResolved: effect.Schema.Boolean,
10554
+ isOutdated: effect.Schema.Boolean,
10555
+ resolvedBy: effect.Schema.optional(TrimmedNonEmptyString),
10556
+ viewerCanReply: effect.Schema.Boolean,
10557
+ viewerCanResolve: effect.Schema.Boolean,
10558
+ viewerCanUnresolve: effect.Schema.Boolean,
10559
+ comments: effect.Schema.Array(ChangeRequestReviewComment),
10560
+ /** Total comments on the host; larger than `comments.length` when paged. */
10561
+ totalComments: NonNegativeInt
10562
+ });
10563
+ const TimelineBase = {
10564
+ id: TrimmedNonEmptyString,
10565
+ createdAt: effect.Schema.DateTimeUtc,
10566
+ actor: effect.Schema.optional(ChangeRequestActor)
10567
+ };
10568
+ const ChangeRequestTimelineComment = effect.Schema.Struct({
10569
+ ...TimelineBase,
10570
+ kind: effect.Schema.Literal("comment"),
10571
+ body: effect.Schema.String,
10572
+ authorAssociation: effect.Schema.optional(effect.Schema.String),
10573
+ updatedAt: effect.Schema.optional(effect.Schema.DateTimeUtc),
10574
+ url: effect.Schema.optional(effect.Schema.String),
10575
+ reactions: effect.Schema.optional(effect.Schema.Array(SourceControlCommentReaction)),
10576
+ viewerCanUpdate: effect.Schema.optional(effect.Schema.Boolean),
10577
+ viewerCanDelete: effect.Schema.optional(effect.Schema.Boolean),
10578
+ isMinimized: effect.Schema.optional(effect.Schema.Boolean)
10579
+ });
10580
+ const ChangeRequestTimelineReview = effect.Schema.Struct({
10581
+ ...TimelineBase,
10582
+ kind: effect.Schema.Literal("review"),
10583
+ state: SourceControlReviewState,
10584
+ body: effect.Schema.String,
10585
+ authorAssociation: effect.Schema.optional(effect.Schema.String),
10586
+ url: effect.Schema.optional(effect.Schema.String),
10587
+ reactions: effect.Schema.optional(effect.Schema.Array(SourceControlCommentReaction)),
10588
+ /** Review threads opened by this review, so the timeline can nest them. */
10589
+ threadIds: effect.Schema.Array(TrimmedNonEmptyString),
10590
+ viewerCanUpdate: effect.Schema.optional(effect.Schema.Boolean)
10591
+ });
10592
+ const ChangeRequestTimelineCommit = effect.Schema.Struct({
10593
+ ...TimelineBase,
10594
+ kind: effect.Schema.Literal("commit"),
10595
+ oid: TrimmedNonEmptyString,
10596
+ shortOid: TrimmedNonEmptyString,
10597
+ messageHeadline: effect.Schema.String,
10598
+ messageBody: effect.Schema.optional(effect.Schema.String),
10599
+ /** Rollup of the commit's checks, when the host reports one. */
10600
+ checkState: effect.Schema.optional(effect.Schema.Literals([
10601
+ "success",
10602
+ "failure",
10603
+ "pending",
10604
+ "neutral"
10605
+ ]))
10606
+ });
10607
+ const ChangeRequestTimelineForcePush = effect.Schema.Struct({
10608
+ ...TimelineBase,
10609
+ kind: effect.Schema.Literal("force-pushed"),
10610
+ beforeOid: effect.Schema.optional(TrimmedNonEmptyString),
10611
+ afterOid: effect.Schema.optional(TrimmedNonEmptyString)
10612
+ });
10613
+ const ChangeRequestTimelineReviewRequest = effect.Schema.Struct({
10614
+ ...TimelineBase,
10615
+ kind: effect.Schema.Literals(["review-requested", "review-request-removed"]),
10616
+ reviewer: TrimmedNonEmptyString,
10617
+ reviewerKind: effect.Schema.Literals([
10618
+ "user",
10619
+ "team",
10620
+ "bot"
10621
+ ])
10622
+ });
10623
+ const ChangeRequestTimelineLabel = effect.Schema.Struct({
10624
+ ...TimelineBase,
10625
+ kind: effect.Schema.Literals(["labeled", "unlabeled"]),
10626
+ label: SourceControlLabel
10627
+ });
10628
+ const ChangeRequestTimelineAssignment = effect.Schema.Struct({
10629
+ ...TimelineBase,
10630
+ kind: effect.Schema.Literals(["assigned", "unassigned"]),
10631
+ assignee: TrimmedNonEmptyString
10632
+ });
10633
+ const ChangeRequestTimelineRename = effect.Schema.Struct({
10634
+ ...TimelineBase,
10635
+ kind: effect.Schema.Literal("renamed"),
10636
+ previousTitle: effect.Schema.String,
10637
+ currentTitle: effect.Schema.String
10638
+ });
10639
+ const ChangeRequestTimelineMerged = effect.Schema.Struct({
10640
+ ...TimelineBase,
10641
+ kind: effect.Schema.Literal("merged"),
10642
+ commitOid: effect.Schema.optional(TrimmedNonEmptyString),
10643
+ baseRefName: effect.Schema.optional(TrimmedNonEmptyString)
10644
+ });
10645
+ const ChangeRequestTimelineLifecycle = effect.Schema.Struct({
10646
+ ...TimelineBase,
10647
+ kind: effect.Schema.Literals([
10648
+ "closed",
10649
+ "reopened",
10650
+ "ready-for-review",
10651
+ "converted-to-draft",
10652
+ "head-ref-deleted",
10653
+ "head-ref-restored"
10654
+ ])
10655
+ });
10656
+ const ChangeRequestTimelineBaseChanged = effect.Schema.Struct({
10657
+ ...TimelineBase,
10658
+ kind: effect.Schema.Literal("base-ref-changed"),
10659
+ previousRefName: effect.Schema.optional(TrimmedNonEmptyString),
10660
+ currentRefName: effect.Schema.optional(TrimmedNonEmptyString)
10661
+ });
10662
+ const ChangeRequestTimelineCrossReference = effect.Schema.Struct({
10663
+ ...TimelineBase,
10664
+ kind: effect.Schema.Literal("cross-referenced"),
10665
+ source: effect.Schema.Struct({
10666
+ kind: effect.Schema.Literals(["issue", "change-request"]),
10667
+ number: PositiveInt,
10668
+ title: effect.Schema.String,
10669
+ url: effect.Schema.String,
10670
+ repository: effect.Schema.optional(TrimmedNonEmptyString),
10671
+ state: effect.Schema.optional(effect.Schema.Literals([
10672
+ "open",
10673
+ "closed",
10674
+ "merged"
10675
+ ]))
10676
+ }),
10677
+ willCloseTarget: effect.Schema.optional(effect.Schema.Boolean)
10678
+ });
10679
+ const ChangeRequestTimelineAutoMerge = effect.Schema.Struct({
10680
+ ...TimelineBase,
10681
+ kind: effect.Schema.Literals(["auto-merge-enabled", "auto-merge-disabled"]),
10682
+ mergeMethod: effect.Schema.optional(SourceControlChangeRequestMergeMethod)
10683
+ });
10684
+ const ChangeRequestTimelineReviewDismissed = effect.Schema.Struct({
10685
+ ...TimelineBase,
10686
+ kind: effect.Schema.Literal("review-dismissed"),
10687
+ reviewAuthor: effect.Schema.optional(TrimmedNonEmptyString),
10688
+ message: effect.Schema.optional(effect.Schema.String)
10689
+ });
10690
+ const ChangeRequestTimelineItem = effect.Schema.Union([
10691
+ ChangeRequestTimelineComment,
10692
+ ChangeRequestTimelineReview,
10693
+ ChangeRequestTimelineCommit,
10694
+ ChangeRequestTimelineForcePush,
10695
+ ChangeRequestTimelineReviewRequest,
10696
+ ChangeRequestTimelineLabel,
10697
+ ChangeRequestTimelineAssignment,
10698
+ ChangeRequestTimelineRename,
10699
+ ChangeRequestTimelineMerged,
10700
+ ChangeRequestTimelineLifecycle,
10701
+ ChangeRequestTimelineBaseChanged,
10702
+ ChangeRequestTimelineCrossReference,
10703
+ ChangeRequestTimelineAutoMerge,
10704
+ ChangeRequestTimelineReviewDismissed
10705
+ ]);
10706
+ const ChangeRequestViewerCapabilities = effect.Schema.Struct({
10707
+ login: TrimmedNonEmptyString,
10708
+ isAuthor: effect.Schema.Boolean,
10709
+ /** Edit title/body/base, labels, assignees, reviewers, draft state, close/reopen. */
10710
+ canUpdate: effect.Schema.Boolean,
10711
+ canMerge: effect.Schema.Boolean,
10712
+ canReview: effect.Schema.Boolean,
10713
+ canUpdateBranch: effect.Schema.Boolean,
10714
+ canEnableAutoMerge: effect.Schema.Boolean,
10715
+ canDisableAutoMerge: effect.Schema.Boolean
10716
+ });
10717
+ const ChangeRequestActivityInput = effect.Schema.Struct({
10718
+ cwd: TrimmedNonEmptyString,
10719
+ reference: TrimmedNonEmptyString
10720
+ });
10721
+ const ChangeRequestActivity = effect.Schema.Struct({
10722
+ provider: SourceControlProviderKind,
10723
+ number: PositiveInt,
10724
+ headSha: effect.Schema.NullOr(TrimmedNonEmptyString),
10725
+ viewer: effect.Schema.NullOr(ChangeRequestViewerCapabilities),
10726
+ /** Chronological (oldest first). */
10727
+ timeline: effect.Schema.Array(ChangeRequestTimelineItem),
10728
+ /** True when older timeline items were dropped to stay within the page budget. */
10729
+ timelineTruncated: effect.Schema.Boolean,
10730
+ reviewThreads: effect.Schema.Array(ChangeRequestReviewThread),
10731
+ reviewThreadsTruncated: effect.Schema.Boolean,
10732
+ /** The viewer's unsubmitted host-side review (e.g. started on the web), if any. */
10733
+ pendingReview: effect.Schema.NullOr(effect.Schema.Struct({
10734
+ id: TrimmedNonEmptyString,
10735
+ commentsCount: NonNegativeInt
10736
+ }))
10737
+ });
10738
+ const ChangeRequestReviewEvent = effect.Schema.Literals([
10739
+ "comment",
10740
+ "approve",
10741
+ "request_changes"
10742
+ ]);
10743
+ const ChangeRequestDraftReviewComment = effect.Schema.Struct({
10744
+ path: TrimmedNonEmptyString,
10745
+ body: NonBlankMarkdownBody,
10746
+ /** `file` comments attach to the whole file and ignore line/side. */
10747
+ subjectType: effect.Schema.optional(effect.Schema.Literals(["line", "file"])),
10748
+ line: effect.Schema.optional(PositiveInt),
10749
+ side: effect.Schema.optional(ChangeRequestDiffSide),
10750
+ startLine: effect.Schema.optional(PositiveInt),
10751
+ startSide: effect.Schema.optional(ChangeRequestDiffSide)
10752
+ });
10753
+ const ChangeRequestSubmitReviewInput = effect.Schema.Struct({
10754
+ cwd: TrimmedNonEmptyString,
10755
+ reference: TrimmedNonEmptyString,
10756
+ event: ChangeRequestReviewEvent,
10757
+ body: effect.Schema.optional(effect.Schema.String),
10758
+ comments: effect.Schema.Array(ChangeRequestDraftReviewComment),
10759
+ /** The head the comments were written against; the host anchors lines to it. */
10760
+ expectedHeadSha: TrimmedNonEmptyString
10761
+ });
10762
+ const ChangeRequestSubmitReviewResult = effect.Schema.Struct({
10763
+ reviewId: TrimmedNonEmptyString,
10764
+ state: SourceControlReviewState,
10765
+ url: effect.Schema.optional(effect.Schema.String)
10766
+ });
10767
+ const ChangeRequestReplyToThreadInput = effect.Schema.Struct({
10768
+ cwd: TrimmedNonEmptyString,
10769
+ reference: TrimmedNonEmptyString,
10770
+ threadId: TrimmedNonEmptyString,
10771
+ body: NonBlankMarkdownBody,
10772
+ clientMutationId: effect.Schema.optional(TrimmedNonEmptyString)
10773
+ });
10774
+ const ChangeRequestReplyToThreadResult = effect.Schema.Struct({ thread: ChangeRequestReviewThread });
10775
+ const ChangeRequestSetThreadResolvedInput = effect.Schema.Struct({
10776
+ cwd: TrimmedNonEmptyString,
10777
+ reference: TrimmedNonEmptyString,
10778
+ threadId: TrimmedNonEmptyString,
10779
+ resolved: effect.Schema.Boolean
10780
+ });
10781
+ const ChangeRequestSetThreadResolvedResult = effect.Schema.Struct({
10782
+ threadId: TrimmedNonEmptyString,
10783
+ isResolved: effect.Schema.Boolean,
10784
+ resolvedBy: effect.Schema.optional(TrimmedNonEmptyString)
10785
+ });
10786
+ const ChangeRequestCommentKind = effect.Schema.Literals([
10787
+ "issue-comment",
10788
+ "review-comment",
10789
+ "review"
10790
+ ]);
10791
+ const ChangeRequestUpdateCommentInput = effect.Schema.Union([effect.Schema.Struct({
10792
+ cwd: TrimmedNonEmptyString,
10793
+ reference: TrimmedNonEmptyString,
10794
+ commentId: TrimmedNonEmptyString,
10795
+ commentKind: ChangeRequestCommentKind,
10796
+ action: effect.Schema.Literal("edit"),
10797
+ body: NonBlankMarkdownBody
10798
+ }), effect.Schema.Struct({
10799
+ cwd: TrimmedNonEmptyString,
10800
+ reference: TrimmedNonEmptyString,
10801
+ commentId: TrimmedNonEmptyString,
10802
+ commentKind: effect.Schema.Literals(["issue-comment", "review-comment"]),
10803
+ action: effect.Schema.Literal("delete")
10804
+ })]);
10805
+ const ChangeRequestUpdateCommentResult = effect.Schema.Struct({
10806
+ commentId: TrimmedNonEmptyString,
10807
+ deleted: effect.Schema.Boolean
10808
+ });
10809
+ const ListEdit = {
10810
+ add: effect.Schema.Array(TrimmedNonEmptyString),
10811
+ remove: effect.Schema.Array(TrimmedNonEmptyString)
10812
+ };
10813
+ const ChangeRequestUpdateAction = effect.Schema.Union([
10814
+ effect.Schema.Struct({
10815
+ kind: effect.Schema.Literal("edit"),
10816
+ title: effect.Schema.optional(TrimmedNonEmptyString),
10817
+ body: effect.Schema.optional(effect.Schema.String),
10818
+ baseRefName: effect.Schema.optional(TrimmedNonEmptyString)
10819
+ }),
10820
+ effect.Schema.Struct({
10821
+ kind: effect.Schema.Literal("set-draft"),
10822
+ draft: effect.Schema.Boolean
10823
+ }),
10824
+ effect.Schema.Struct({
10825
+ kind: effect.Schema.Literal("close"),
10826
+ deleteBranch: effect.Schema.optional(effect.Schema.Boolean)
10827
+ }),
10828
+ effect.Schema.Struct({ kind: effect.Schema.Literal("reopen") }),
10829
+ effect.Schema.Struct({
10830
+ kind: effect.Schema.Literal("reviewers"),
10831
+ ...ListEdit
10832
+ }),
10833
+ effect.Schema.Struct({
10834
+ kind: effect.Schema.Literal("labels"),
10835
+ ...ListEdit
10836
+ }),
10837
+ effect.Schema.Struct({
10838
+ kind: effect.Schema.Literal("assignees"),
10839
+ ...ListEdit
10840
+ }),
10841
+ effect.Schema.Struct({
10842
+ kind: effect.Schema.Literal("update-branch"),
10843
+ method: effect.Schema.Literals(["merge", "rebase"]),
10844
+ expectedHeadSha: TrimmedNonEmptyString
10845
+ }),
10846
+ effect.Schema.Struct({
10847
+ kind: effect.Schema.Literal("auto-merge"),
10848
+ enabled: effect.Schema.Boolean,
10849
+ mergeMethod: effect.Schema.optional(SourceControlChangeRequestMergeMethod),
10850
+ /** When enabling: refuse if the head moved since the user looked (as for merges). */
10851
+ expectedHeadSha: effect.Schema.optional(TrimmedNonEmptyString)
10852
+ }),
10853
+ effect.Schema.Struct({ kind: effect.Schema.Literal("delete-branch") })
10854
+ ]);
10855
+ const ChangeRequestUpdateInput = effect.Schema.Struct({
10856
+ cwd: TrimmedNonEmptyString,
10857
+ reference: TrimmedNonEmptyString,
10858
+ action: ChangeRequestUpdateAction
10859
+ });
10860
+ const ChangeRequestUpdateResult = effect.Schema.Struct({
10861
+ /** Fresh, uncapped (`fullContent`) detail after the action. */
10862
+ detail: SourceControlChangeRequestDetail });
10863
+ const ChangeRequestCreateInput = effect.Schema.Struct({
10864
+ cwd: TrimmedNonEmptyString,
10865
+ baseRefName: TrimmedNonEmptyString,
10866
+ /** Branch name, or `owner:branch` for a fork head. */
10867
+ headRefName: TrimmedNonEmptyString,
10868
+ title: TrimmedNonEmptyString,
10869
+ body: effect.Schema.String,
10870
+ draft: effect.Schema.optional(effect.Schema.Boolean)
10871
+ });
10872
+ const CHANGE_REQUEST_FILE_CONTENTS_MAX_BYTES = 1048576;
10873
+ const ChangeRequestFileContentsInput = effect.Schema.Struct({
10874
+ cwd: TrimmedNonEmptyString,
10875
+ reference: TrimmedNonEmptyString,
10876
+ path: TrimmedNonEmptyString,
10877
+ /** Pre-rename path on the base side, when the file moved. */
10878
+ previousPath: effect.Schema.optional(TrimmedNonEmptyString),
10879
+ /**
10880
+ * Old-side revision. Omit for the whole change request: the server resolves
10881
+ * the merge base of the base branch and `headSha`, matching the PR diff.
10882
+ * Pass the parent commit when the diff is scoped to a single commit.
10883
+ */
10884
+ baseSha: effect.Schema.optional(TrimmedNonEmptyString),
10885
+ headSha: TrimmedNonEmptyString
10886
+ });
10887
+ const ChangeRequestFileContents = effect.Schema.Struct({
10888
+ path: TrimmedNonEmptyString,
10889
+ /** Null when the file does not exist on that side (added/deleted) or is binary. */
10890
+ oldContents: effect.Schema.NullOr(effect.Schema.String),
10891
+ newContents: effect.Schema.NullOr(effect.Schema.String),
10892
+ truncated: effect.Schema.Boolean
10893
+ });
10894
+ /** Server-side involvement filter for change request lists (relative to the viewer). */
10895
+ const ChangeRequestInvolvement = effect.Schema.Literals([
10896
+ "authored",
10897
+ "review-requested",
10898
+ "assigned",
10899
+ "mentioned",
10900
+ "involved"
10901
+ ]);
10902
+ //#endregion
9552
10903
  //#region ../../packages/contracts/src/atlassian.ts
9553
10904
  const AtlassianConnectionKind = effect.Schema.Literals([
9554
10905
  "oauth_3lo",
@@ -10519,6 +11870,15 @@ const AgentControlRequestId = TrimmedNonEmptyString.check(effect.Schema.isMaxLen
10519
11870
  * per-provider-runtime, in-memory, thread-bound, and revoked on runtime
10520
11871
  * teardown — none of that credential material appears in this contract.
10521
11872
  */
11873
+ /** Audit-safe target thread state captured at submission and used to reject stale approved plans. */
11874
+ const AgentControlTargetThreadSnapshot = effect.Schema.Struct({
11875
+ threadId: ThreadId,
11876
+ projectId: ProjectId,
11877
+ runtimeMode: RuntimeMode,
11878
+ envMode: ThreadEnvMode,
11879
+ archived: effect.Schema.Boolean,
11880
+ activeTurnId: effect.Schema.NullOr(TurnId)
11881
+ });
10522
11882
  const AgentControlProviderSessionPrincipal = effect.Schema.Struct({
10523
11883
  kind: effect.Schema.Literal("provider-session"),
10524
11884
  threadId: ThreadId,
@@ -10532,28 +11892,26 @@ const AgentControlProviderSessionPrincipal = effect.Schema.Struct({
10532
11892
  originRuntimeMode: effect.Schema.optional(RuntimeMode),
10533
11893
  originEnvMode: effect.Schema.optional(ThreadEnvMode),
10534
11894
  /** Audit-safe target state used to reject stale approved plans. */
10535
- targetSnapshots: effect.Schema.optional(effect.Schema.Array(effect.Schema.Struct({
10536
- threadId: ThreadId,
10537
- projectId: ProjectId,
10538
- runtimeMode: RuntimeMode,
10539
- envMode: ThreadEnvMode,
10540
- archived: effect.Schema.Boolean,
10541
- activeTurnId: effect.Schema.NullOr(TurnId)
10542
- })))
11895
+ targetSnapshots: effect.Schema.optional(effect.Schema.Array(AgentControlTargetThreadSnapshot))
10543
11896
  });
10544
11897
  /**
10545
- * A separately paired local MCP client. Pairing, credential issuance, and
10546
- * scope grants are owned by later PRs; the principal identity is defined
10547
- * here so proposals persist a stable, audit-safe origin from day one.
11898
+ * A separately paired local MCP client. It has no caller thread, so its
11899
+ * privilege evidence is the integration's grant ceiling at submission.
10548
11900
  */
10549
11901
  const AgentControlExternalIntegrationPrincipal = effect.Schema.Struct({
10550
11902
  kind: effect.Schema.Literal("external-integration"),
10551
11903
  integrationId: AgentControlIntegrationId,
10552
11904
  label: effect.Schema.optional(TrimmedNonEmptyString.check(effect.Schema.isMaxLength(120))),
10553
- /** Immutable execution-policy evidence captured when the proposal is created. */
11905
+ /**
11906
+ * Immutable execution-policy evidence captured when the proposal is created:
11907
+ * the task's own policy for created threads, or the integration's runtime
11908
+ * and checkout ceiling for thread control.
11909
+ */
10554
11910
  projectId: effect.Schema.optional(ProjectId),
10555
11911
  runtimeMode: effect.Schema.optional(RuntimeMode),
10556
- envMode: effect.Schema.optional(ThreadEnvMode)
11912
+ envMode: effect.Schema.optional(ThreadEnvMode),
11913
+ /** Audit-safe target state for thread control, used to reject stale approved plans. */
11914
+ targetSnapshots: effect.Schema.optional(effect.Schema.Array(AgentControlTargetThreadSnapshot))
10557
11915
  });
10558
11916
  /** Owner-authored automation only; never accepted from an MCP principal. */
10559
11917
  const AgentControlAutomationOwnerPrincipal = effect.Schema.Struct({
@@ -10577,6 +11935,8 @@ const AgentControlCapability = agentControlSlug.pipe(effect.Schema.brand("AgentC
10577
11935
  const AGENT_CONTROL_CAPABILITIES = {
10578
11936
  read: AgentControlCapability.make("read"),
10579
11937
  attachFile: AgentControlCapability.make("files.attach"),
11938
+ /** Preview HTML pages in Ryco's headless browser and show them inline in the caller's thread. */
11939
+ renderHtml: AgentControlCapability.make("html.render"),
10580
11940
  createThreads: AgentControlCapability.make("threads.create"),
10581
11941
  sendMessage: AgentControlCapability.make("threads.send-message"),
10582
11942
  interruptThread: AgentControlCapability.make("threads.interrupt"),
@@ -10604,7 +11964,13 @@ const AGENT_CONTROL_CAPABILITIES = {
10604
11964
  externalReadAutomations: AgentControlCapability.make("external.automations.read"),
10605
11965
  externalManageAutomations: AgentControlCapability.make("external.automations.manage"),
10606
11966
  externalReadActivity: AgentControlCapability.make("external.activity.read"),
10607
- externalReadDiagnostics: AgentControlCapability.make("external.diagnostics.read")
11967
+ externalReadDiagnostics: AgentControlCapability.make("external.diagnostics.read"),
11968
+ externalReadThreads: AgentControlCapability.make("external.threads.read"),
11969
+ externalReadReviews: AgentControlCapability.make("external.reviews.read"),
11970
+ externalReadFiles: AgentControlCapability.make("external.files.read"),
11971
+ externalReadWorkspaces: AgentControlCapability.make("external.workspaces.read"),
11972
+ externalControlThreads: AgentControlCapability.make("external.threads.control"),
11973
+ externalManageWorkspaces: AgentControlCapability.make("external.workspaces.manage")
10608
11974
  };
10609
11975
  const AgentControlActionKind = effect.Schema.Literals([
10610
11976
  "createThreads",
@@ -11817,6 +13183,7 @@ const AgentControlMcpReadDeviceStateResult = effect.Schema.Struct({
11817
13183
  });
11818
13184
  const AgentControlMcpProjectSummary = effect.Schema.Struct({
11819
13185
  projectId: ProjectId,
13186
+ kind: OptionalProjectKind,
11820
13187
  title: TrimmedNonEmptyString,
11821
13188
  createdAt: IsoDateTime,
11822
13189
  updatedAt: IsoDateTime
@@ -12185,7 +13552,24 @@ const AGENT_CONTROL_EXTERNAL_MCP_TOOLS = {
12185
13552
  recentActivity: "ryco_recent_activity",
12186
13553
  orchestrationEvents: "ryco_orchestration_events",
12187
13554
  providerRuntimeEvents: "ryco_provider_runtime_events",
12188
- diagnosticsSummary: "ryco_diagnostics_summary"
13555
+ diagnosticsSummary: "ryco_diagnostics_summary",
13556
+ readControlRequest: "ryco_read_control_request",
13557
+ waitForControlRequest: "ryco_wait_for_control_request",
13558
+ listThreads: "ryco_list_threads",
13559
+ readThread: "ryco_read_thread",
13560
+ searchThreads: "ryco_search_threads",
13561
+ waitThreads: "ryco_wait_threads",
13562
+ inspectThread: "ryco_inspect_thread",
13563
+ readThreadDiff: "ryco_read_thread_diff",
13564
+ readThreadFile: "ryco_read_thread_file",
13565
+ readProject: "ryco_read_project",
13566
+ listWorkspaces: "ryco_list_workspaces",
13567
+ readWorkspace: "ryco_read_workspace",
13568
+ sendMessage: "ryco_send_message",
13569
+ interruptThread: "ryco_interrupt_thread",
13570
+ updateThread: "ryco_update_thread",
13571
+ planWorkspace: "ryco_plan_workspace_lifecycle",
13572
+ proposeWorkspace: "ryco_propose_workspace_lifecycle"
12189
13573
  };
12190
13574
  const AGENT_CONTROL_EXTERNAL_MCP_TOOL_NAMES = Object.values(AGENT_CONTROL_EXTERNAL_MCP_TOOLS);
12191
13575
  const AgentControlExternalCreateTaskInput = effect.Schema.Struct({
@@ -12374,6 +13758,107 @@ const ProjectReadIconResult = effect.Schema.NullOr(effect.Schema.Struct({
12374
13758
  ])
12375
13759
  }));
12376
13760
  var ProjectReadIconError = class extends effect.Schema.TaggedError()("ProjectReadIconError", { message: TrimmedNonEmptyString }) {};
13761
+ /** Server-local absolute directory; access and filesystem validation belong to the server. */
13762
+ const ProjectChatDestination = TrimmedNonEmptyString.check(effect.Schema.isMaxLength(4096));
13763
+ /**
13764
+ * Where a promoted chat folder would go. Only `available` can be promoted:
13765
+ * - `exists`: something is already at the destination, or another chat is moving there.
13766
+ * - `invalid`: not an absolute path, or its parent is missing or not a writable directory.
13767
+ * - `access-denied`: the workspace access policy rejects it.
13768
+ * - `inside-chats`: it lies inside the chats root.
13769
+ * - `inside-source`: it lies inside the chat folder being moved.
13770
+ * - `retired-checkout`: it is at or inside a workspace checkout Ryco removed (or is removing or
13771
+ * moving). The server keeps new work out of such paths, so a project there could never run.
13772
+ */
13773
+ const ProjectChatDestinationStatus = effect.Schema.Literals([
13774
+ "available",
13775
+ "exists",
13776
+ "invalid",
13777
+ "access-denied",
13778
+ "inside-chats",
13779
+ "inside-source",
13780
+ "retired-checkout"
13781
+ ]);
13782
+ const ProjectsPromoteChatPreviewInput = effect.Schema.Struct({
13783
+ projectId: ProjectId,
13784
+ /** Absent previews the default destination. Any text is accepted and judged in the result. */
13785
+ destination: effect.Schema.optional(effect.Schema.String.check(effect.Schema.isMaxLength(4096)))
13786
+ });
13787
+ /** Read-only: previewing never creates, moves or locks anything. */
13788
+ const ProjectsPromoteChatPreviewResult = effect.Schema.Struct({
13789
+ projectId: ProjectId,
13790
+ /** The chat folder that would move. */
13791
+ source: TrimmedNonEmptyString,
13792
+ /**
13793
+ * A free folder under `addProjectBaseDirectory` (or its default): `<slug>` when nothing is there,
13794
+ * otherwise the first free `<slug>-2`, `<slug>-3`, …
13795
+ */
13796
+ defaultDestination: TrimmedNonEmptyString,
13797
+ /** The destination that was judged: the input's (normalized) or the default. */
13798
+ destination: effect.Schema.String,
13799
+ destinationStatus: ProjectChatDestinationStatus,
13800
+ fileCount: NonNegativeInt,
13801
+ totalBytes: NonNegativeInt,
13802
+ /** The scan stopped at its bound; the counts are lower limits. */
13803
+ countTruncated: effect.Schema.Boolean,
13804
+ /** Threads with live work (running turn, pending approval or input, queued dispatch). */
13805
+ busyThreadIds: effect.Schema.Array(ThreadId),
13806
+ gitAvailable: effect.Schema.Boolean,
13807
+ /** Whether `user.name` and `user.email` resolve, so an initial commit can succeed. */
13808
+ gitIdentityConfigured: effect.Schema.Boolean,
13809
+ /** Source and destination are on different devices: the move is a copy, then a delete. */
13810
+ crossDevice: effect.Schema.Boolean
13811
+ });
13812
+ const ProjectsPromoteChatInput = effect.Schema.Struct({
13813
+ projectId: ProjectId,
13814
+ /** Compare-and-set guard against the project as previewed. */
13815
+ expectedUpdatedAt: effect.Schema.optional(IsoDateTime),
13816
+ title: TrimmedNonEmptyString.check(effect.Schema.isMaxLength(200)),
13817
+ destination: ProjectChatDestination,
13818
+ initializeGit: effect.Schema.Boolean,
13819
+ /** Ignored unless `initializeGit`. */
13820
+ initialCommit: effect.Schema.Boolean,
13821
+ /** Ignored unless `initializeGit`; never overwrites an existing `.gitignore`. */
13822
+ writeGitignore: effect.Schema.Boolean
13823
+ });
13824
+ const ProjectsPromoteChatResult = effect.Schema.Struct({
13825
+ projectId: ProjectId,
13826
+ workspaceRoot: TrimmedNonEmptyString,
13827
+ gitInitialized: effect.Schema.Boolean,
13828
+ initialCommitCreated: effect.Schema.Boolean,
13829
+ /** The project was promoted, but its first commit failed (for example, no Git identity). */
13830
+ commitError: effect.Schema.optional(effect.Schema.String)
13831
+ });
13832
+ /**
13833
+ * The explicit "Also delete files" step for a chat. Refused while the chat still has threads, and
13834
+ * never removes anything outside the chats root.
13835
+ */
13836
+ const ProjectsDeleteChatFolderInput = effect.Schema.Struct({ projectId: ProjectId });
13837
+ const ProjectsDeleteChatFolderResult = effect.Schema.Struct({
13838
+ /** False when the folder was already gone. */
13839
+ deleted: effect.Schema.Boolean });
13840
+ const ProjectChatErrorReason = effect.Schema.Literals([
13841
+ "not-found",
13842
+ "not-chat",
13843
+ "busy",
13844
+ "stale",
13845
+ "destination-exists",
13846
+ "destination-invalid",
13847
+ "destination-inside-chats",
13848
+ "destination-inside-source",
13849
+ "destination-retired-checkout",
13850
+ "access-denied",
13851
+ "move-failed",
13852
+ "git-failed",
13853
+ "chats-unavailable",
13854
+ "has-threads",
13855
+ "outside-chats-root"
13856
+ ]);
13857
+ /** One error for every chat-folder RPC; `reason` is the stable, machine-readable part. */
13858
+ var ProjectChatError = class extends effect.Schema.TaggedError()("ProjectChatError", {
13859
+ reason: ProjectChatErrorReason,
13860
+ message: TrimmedNonEmptyString
13861
+ }) {};
12377
13862
  //#endregion
12378
13863
  //#region ../../packages/contracts/src/filesystem.ts
12379
13864
  const FILESYSTEM_PATH_MAX_LENGTH = 512;
@@ -12397,6 +13882,195 @@ var FilesystemBrowseError = class extends effect.Schema.TaggedError()("Filesyste
12397
13882
  cause: effect.Schema.optional(effect.Schema.Defect())
12398
13883
  }) {};
12399
13884
  //#endregion
13885
+ //#region ../../packages/contracts/src/localTasks.ts
13886
+ const LocalTaskId = effect.Schema.String.check(effect.Schema.isPattern(/^[a-zA-Z0-9_-]{1,128}$/));
13887
+ const Title = effect.Schema.String.check(effect.Schema.isMinLength(1), effect.Schema.isMaxLength(500));
13888
+ const Notes = effect.Schema.String.check(effect.Schema.isMaxLength(2e4));
13889
+ const LocalTaskPriority = effect.Schema.Literals([
13890
+ "low",
13891
+ "normal",
13892
+ "high",
13893
+ "urgent"
13894
+ ]);
13895
+ const LocalTaskFields = {
13896
+ title: Title,
13897
+ notes: Notes,
13898
+ priority: LocalTaskPriority,
13899
+ dueAt: effect.Schema.NullOr(IsoDateTime),
13900
+ projectId: effect.Schema.NullOr(ProjectId)
13901
+ };
13902
+ const LocalTaskStatus = effect.Schema.Literals([
13903
+ "todo",
13904
+ "starting",
13905
+ "running",
13906
+ "needs-you",
13907
+ "review",
13908
+ "failed",
13909
+ "unavailable",
13910
+ "done"
13911
+ ]);
13912
+ const LocalTask = effect.Schema.Struct({
13913
+ taskId: LocalTaskId,
13914
+ revision: NonNegativeInt,
13915
+ ...LocalTaskFields,
13916
+ state: effect.Schema.Literals(["todo", "done"]),
13917
+ status: LocalTaskStatus,
13918
+ delegation: effect.Schema.NullOr(effect.Schema.Struct({
13919
+ threadId: ThreadId,
13920
+ messageId: MessageId,
13921
+ commandId: CommandId,
13922
+ dispatched: effect.Schema.Boolean
13923
+ })),
13924
+ createdAt: IsoDateTime,
13925
+ updatedAt: IsoDateTime
13926
+ });
13927
+ const LocalTaskCreateInput = effect.Schema.Struct({
13928
+ taskId: LocalTaskId,
13929
+ ...LocalTaskFields
13930
+ });
13931
+ const LocalTaskUpdateInput = effect.Schema.Struct({
13932
+ taskId: LocalTaskId,
13933
+ expectedRevision: NonNegativeInt,
13934
+ title: effect.Schema.optional(Title),
13935
+ notes: effect.Schema.optional(Notes),
13936
+ priority: effect.Schema.optional(LocalTaskPriority),
13937
+ dueAt: effect.Schema.optional(effect.Schema.NullOr(IsoDateTime)),
13938
+ projectId: effect.Schema.optional(effect.Schema.NullOr(ProjectId)),
13939
+ state: effect.Schema.optional(effect.Schema.Literals(["todo", "done"]))
13940
+ });
13941
+ const LocalTaskDeleteInput = effect.Schema.Struct({
13942
+ taskId: LocalTaskId,
13943
+ expectedRevision: NonNegativeInt
13944
+ });
13945
+ const LocalTaskListInput = effect.Schema.Struct({
13946
+ limit: effect.Schema.optional(effect.Schema.Int.check(effect.Schema.isBetween({
13947
+ minimum: 1,
13948
+ maximum: 100
13949
+ }))),
13950
+ afterId: effect.Schema.optional(LocalTaskId)
13951
+ });
13952
+ const LocalTaskListResult = effect.Schema.Struct({
13953
+ tasks: effect.Schema.Array(LocalTask),
13954
+ nextCursor: effect.Schema.NullOr(LocalTaskId)
13955
+ });
13956
+ const LocalTaskDelegateInput = effect.Schema.Struct({
13957
+ taskId: LocalTaskId,
13958
+ expectedRevision: NonNegativeInt,
13959
+ command: ClientThreadTurnStartCommand
13960
+ });
13961
+ var LocalTaskError = class extends effect.Schema.TaggedError()("LocalTaskError", {
13962
+ reason: effect.Schema.Literals([
13963
+ "not-found",
13964
+ "conflict",
13965
+ "invalid",
13966
+ "persistence"
13967
+ ]),
13968
+ message: effect.Schema.String
13969
+ }) {};
13970
+ //#endregion
13971
+ //#region ../../packages/contracts/src/notes.ts
13972
+ /** `worktree` belongs to one checkout; `project` is shared by the whole project. */
13973
+ const NoteScope = effect.Schema.Literals(["worktree", "project"]);
13974
+ /** Free text; empty is a cleared document. */
13975
+ const NoteBody = effect.Schema.String.check(effect.Schema.isMaxLength(1e5));
13976
+ /**
13977
+ * One free-text notes document: a checkout's (`scope: "worktree"`, keyed by
13978
+ * its worktree, `null` for the main checkout) or the project's own
13979
+ * (`scope: "project"`, always `worktreeId: null`).
13980
+ */
13981
+ const NotesDocument = effect.Schema.Struct({
13982
+ projectId: ProjectId,
13983
+ scope: NoteScope,
13984
+ worktreeId: effect.Schema.NullOr(WorktreeId),
13985
+ body: NoteBody,
13986
+ /** Bumped by every save; a document never saved is revision 0 and is not listed. */
13987
+ revision: NonNegativeInt,
13988
+ updatedAt: IsoDateTime
13989
+ });
13990
+ const NotesListInput = effect.Schema.Struct({ projectId: ProjectId });
13991
+ const NotesSnapshot = effect.Schema.Struct({
13992
+ projectId: ProjectId,
13993
+ /** The project's document and every live checkout's, in no particular order. */
13994
+ documents: effect.Schema.Array(NotesDocument)
13995
+ });
13996
+ /** Replaces one document's body; judged against the revision the edit started from. */
13997
+ const NotesCommand = effect.Schema.Struct({
13998
+ kind: effect.Schema.Literal("save"),
13999
+ projectId: ProjectId,
14000
+ scope: NoteScope,
14001
+ /** Must be `null` for the project's document. */
14002
+ worktreeId: effect.Schema.NullOr(WorktreeId),
14003
+ body: NoteBody,
14004
+ /** The revision the edit was based on (0 for a document never saved). */
14005
+ expectedRevision: NonNegativeInt
14006
+ }).annotate({ parseOptions: { onExcessProperty: "error" } });
14007
+ var NotesError = class extends effect.Schema.TaggedError()("NotesError", {
14008
+ reason: effect.Schema.Literals([
14009
+ "conflict",
14010
+ "invalid",
14011
+ "persistence"
14012
+ ]),
14013
+ message: effect.Schema.String
14014
+ }) {};
14015
+ //#endregion
14016
+ //#region ../../packages/contracts/src/dailyRecap.ts
14017
+ const DailyRecapRequest = effect.Schema.Struct({
14018
+ date: UsageCalendarDate,
14019
+ timeZone: TrimmedNonEmptyString,
14020
+ /** Maximum threads in each section; defaults to 20. Counts remain complete. */
14021
+ limit: effect.Schema.optional(PositiveInt.check(effect.Schema.isLessThanOrEqualTo(50)))
14022
+ });
14023
+ const DailyRecapThread = effect.Schema.Struct({
14024
+ threadId: ThreadId,
14025
+ threadTitle: effect.Schema.String,
14026
+ projectId: ProjectId,
14027
+ projectTitle: effect.Schema.String,
14028
+ lastActivityAt: IsoDateTime
14029
+ });
14030
+ const DailyRecapAttentionThread = effect.Schema.Struct({
14031
+ ...DailyRecapThread.fields,
14032
+ pendingApprovals: NonNegativeInt,
14033
+ pendingUserInputs: NonNegativeInt,
14034
+ hasProposedPlan: effect.Schema.Boolean,
14035
+ sessionError: effect.Schema.Boolean
14036
+ });
14037
+ const DailyRecapThreadSection = effect.Schema.Struct({
14038
+ totalThreads: NonNegativeInt,
14039
+ threads: effect.Schema.Array(DailyRecapThread),
14040
+ truncated: effect.Schema.Boolean
14041
+ });
14042
+ const DailyRecapSnapshot = effect.Schema.Struct({
14043
+ date: UsageCalendarDate,
14044
+ timeZone: TrimmedNonEmptyString,
14045
+ generatedAt: IsoDateTime,
14046
+ /** Exact UTC interval for the selected local calendar day; end is exclusive. */
14047
+ from: IsoDateTime,
14048
+ to: IsoDateTime,
14049
+ /** Ryco turn outcomes in this day, excluding deleted threads and projects. */
14050
+ counts: effect.Schema.Struct({
14051
+ completedTurns: NonNegativeInt,
14052
+ failedTurns: NonNegativeInt,
14053
+ interruptedTurns: NonNegativeInt
14054
+ }),
14055
+ /** Sections are independent: a thread may have both successful and failed turns. */
14056
+ completed: DailyRecapThreadSection,
14057
+ failed: DailyRecapThreadSection,
14058
+ /** Current outstanding attention, regardless of the selected day; excludes archived threads. */
14059
+ needsAttention: effect.Schema.Struct({
14060
+ totalThreads: NonNegativeInt,
14061
+ threads: effect.Schema.Array(DailyRecapAttentionThread),
14062
+ truncated: effect.Schema.Boolean
14063
+ })
14064
+ });
14065
+ var DailyRecapReadError = class extends effect.Schema.TaggedError()("DailyRecapReadError", {
14066
+ reason: effect.Schema.Literals([
14067
+ "invalid-date",
14068
+ "invalid-time-zone",
14069
+ "query-failed"
14070
+ ]),
14071
+ detail: TrimmedNonEmptyString
14072
+ }) {};
14073
+ //#endregion
12400
14074
  //#region ../../packages/contracts/src/sessionImport.ts
12401
14075
  const SessionImportSource = effect.Schema.Literals(["codex", "claudeAgent"]);
12402
14076
  const ImportKey = effect.Schema.String.check(effect.Schema.isPattern(/^[a-f0-9]{64}$/));
@@ -12584,6 +14258,7 @@ const WS_METHODS = {
12584
14258
  vcsRefreshStatus: "vcs.refreshStatus",
12585
14259
  vcsListRefs: "vcs.listRefs",
12586
14260
  vcsReadLineBlame: "vcs.readLineBlame",
14261
+ vcsReadImageBlob: "vcs.readImageBlob",
12587
14262
  vcsReadLocalChanges: "vcs.readLocalChanges",
12588
14263
  vcsApplyIndexPatch: "vcs.applyIndexPatch",
12589
14264
  vcsReadComparison: "vcs.readComparison",
@@ -12600,10 +14275,18 @@ const WS_METHODS = {
12600
14275
  gitArchiveWorktree: "git.archiveWorktree",
12601
14276
  gitRestoreWorktree: "git.restoreWorktree",
12602
14277
  gitDeleteWorktree: "git.deleteWorktree",
14278
+ lifecycleListWorkspaces: "lifecycle.listWorkspaces",
14279
+ lifecyclePreviewWorkspace: "lifecycle.previewWorkspace",
14280
+ lifecycleApplyWorkspace: "lifecycle.applyWorkspace",
14281
+ lifecycleSuggestions: "lifecycle.suggestions",
14282
+ lifecycleListTrash: "lifecycle.listTrash",
12603
14283
  threadsSetManualBucket: "threads.setManualBucket",
12604
14284
  threadsSetManualPosition: "threads.setManualPosition",
12605
14285
  worktreesSetManualPosition: "worktrees.setManualPosition",
12606
14286
  projectsInitializeGit: "projects.initializeGit",
14287
+ projectsPromoteChatPreview: "projects.promoteChatPreview",
14288
+ projectsPromoteChat: "projects.promoteChat",
14289
+ projectsDeleteChatFolder: "projects.deleteChatFolder",
12607
14290
  searchThreadMessages: "threads.searchMessages",
12608
14291
  threadPriorityEnsureCurrent: "threadPriority.ensureCurrent",
12609
14292
  terminalOpen: "terminal.open",
@@ -12621,6 +14304,15 @@ const WS_METHODS = {
12621
14304
  serverAuthenticateAcpRegistry: "server.authenticateAcpRegistry",
12622
14305
  serverReadCodexResetCredits: "server.readCodexResetCredits",
12623
14306
  serverConsumeCodexResetCredit: "server.consumeCodexResetCredit",
14307
+ serverListLocalTasks: "server.listLocalTasks",
14308
+ serverGetLocalTask: "server.getLocalTask",
14309
+ serverCreateLocalTask: "server.createLocalTask",
14310
+ serverUpdateLocalTask: "server.updateLocalTask",
14311
+ serverDeleteLocalTask: "server.deleteLocalTask",
14312
+ serverDelegateLocalTask: "server.delegateLocalTask",
14313
+ serverGetDailyRecap: "server.getDailyRecap",
14314
+ notesList: "notes.list",
14315
+ notesCommand: "notes.command",
12624
14316
  serverRefreshProviders: "server.refreshProviders",
12625
14317
  serverUpdateProvider: "server.updateProvider",
12626
14318
  serverUpsertKeybinding: "server.upsertKeybinding",
@@ -12670,6 +14362,14 @@ const WS_METHODS = {
12670
14362
  sourceControlGetWorkflowRunJobs: "sourceControl.getWorkflowRunJobs",
12671
14363
  sourceControlGetWorkflowJobLog: "sourceControl.getWorkflowJobLog",
12672
14364
  sourceControlRerunWorkflow: "sourceControl.rerunWorkflow",
14365
+ sourceControlGetChangeRequestActivity: "sourceControl.getChangeRequestActivity",
14366
+ sourceControlGetChangeRequestFileContents: "sourceControl.getChangeRequestFileContents",
14367
+ sourceControlSubmitChangeRequestReview: "sourceControl.submitChangeRequestReview",
14368
+ sourceControlReplyToReviewThread: "sourceControl.replyToReviewThread",
14369
+ sourceControlSetReviewThreadResolved: "sourceControl.setReviewThreadResolved",
14370
+ sourceControlUpdateChangeRequestComment: "sourceControl.updateChangeRequestComment",
14371
+ sourceControlUpdateChangeRequest: "sourceControl.updateChangeRequest",
14372
+ sourceControlCreateChangeRequest: "sourceControl.createChangeRequest",
12673
14373
  textGenerationGenerateIssueContent: "textGeneration.generateIssueContent",
12674
14374
  textGenerationAskSideQuestion: "textGeneration.askSideQuestion",
12675
14375
  textGenerationCancelSideQuestion: "textGeneration.cancelSideQuestion",
@@ -12873,6 +14573,55 @@ const WsServerConsumeCodexResetCreditRpc = effect_unstable_rpc_Rpc.make(WS_METHO
12873
14573
  success: effect.Schema.Struct({ outcome: CodexResetCreditOutcome }),
12874
14574
  error: effect.Schema.Union([CodexResetCreditError, AuthRpcError])
12875
14575
  });
14576
+ const WsServerListLocalTasksRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.serverListLocalTasks, {
14577
+ payload: LocalTaskListInput,
14578
+ success: LocalTaskListResult,
14579
+ error: effect.Schema.Union([LocalTaskError, AuthRpcError])
14580
+ });
14581
+ const WsServerGetLocalTaskRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.serverGetLocalTask, {
14582
+ payload: effect.Schema.Struct({ taskId: LocalTaskId }),
14583
+ success: LocalTask,
14584
+ error: effect.Schema.Union([LocalTaskError, AuthRpcError])
14585
+ });
14586
+ const WsServerCreateLocalTaskRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.serverCreateLocalTask, {
14587
+ payload: LocalTaskCreateInput,
14588
+ success: LocalTask,
14589
+ error: effect.Schema.Union([LocalTaskError, AuthRpcError])
14590
+ });
14591
+ const WsServerUpdateLocalTaskRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.serverUpdateLocalTask, {
14592
+ payload: LocalTaskUpdateInput,
14593
+ success: LocalTask,
14594
+ error: effect.Schema.Union([LocalTaskError, AuthRpcError])
14595
+ });
14596
+ const WsServerDeleteLocalTaskRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.serverDeleteLocalTask, {
14597
+ payload: LocalTaskDeleteInput,
14598
+ success: effect.Schema.Struct({ deleted: effect.Schema.Literal(true) }),
14599
+ error: effect.Schema.Union([LocalTaskError, AuthRpcError])
14600
+ });
14601
+ const WsServerDelegateLocalTaskRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.serverDelegateLocalTask, {
14602
+ payload: LocalTaskDelegateInput,
14603
+ success: LocalTask,
14604
+ error: effect.Schema.Union([
14605
+ LocalTaskError,
14606
+ AuthRpcError,
14607
+ OrchestrationDispatchCommandError
14608
+ ])
14609
+ });
14610
+ const WsNotesListRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.notesList, {
14611
+ payload: NotesListInput,
14612
+ success: NotesSnapshot,
14613
+ error: effect.Schema.Union([NotesError, AuthRpcError])
14614
+ });
14615
+ const WsNotesCommandRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.notesCommand, {
14616
+ payload: NotesCommand,
14617
+ success: NotesSnapshot,
14618
+ error: effect.Schema.Union([NotesError, AuthRpcError])
14619
+ });
14620
+ const WsServerGetDailyRecapRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.serverGetDailyRecap, {
14621
+ payload: DailyRecapRequest,
14622
+ success: DailyRecapSnapshot,
14623
+ error: effect.Schema.Union([DailyRecapReadError, AuthRpcError])
14624
+ });
12876
14625
  const WsServerRefreshProvidersRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.serverRefreshProviders, {
12877
14626
  payload: effect.Schema.Struct({
12878
14627
  /**
@@ -13051,7 +14800,9 @@ const WsSourceControlListChangeRequestsRpc = effect_unstable_rpc_Rpc.make(WS_MET
13051
14800
  "all"
13052
14801
  ]),
13053
14802
  limit: effect.Schema.optional(effect.Schema.Number),
13054
- query: effect.Schema.optional(effect.Schema.String)
14803
+ query: effect.Schema.optional(effect.Schema.String),
14804
+ /** Narrow to change requests involving the authenticated viewer. */
14805
+ involvement: effect.Schema.optional(ChangeRequestInvolvement)
13055
14806
  }),
13056
14807
  success: effect.Schema.Array(ChangeRequest),
13057
14808
  error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
@@ -13088,7 +14839,9 @@ const WsSourceControlGetChangeRequestDiffRpc = effect_unstable_rpc_Rpc.make(WS_M
13088
14839
  payload: effect.Schema.Struct({
13089
14840
  cwd: effect.Schema.String,
13090
14841
  reference: effect.Schema.String,
13091
- expectedHeadSha: effect.Schema.optional(TrimmedNonEmptyString)
14842
+ expectedHeadSha: effect.Schema.optional(TrimmedNonEmptyString),
14843
+ /** Scope the diff to a single commit of the change request. */
14844
+ commitSha: effect.Schema.optional(TrimmedNonEmptyString)
13092
14845
  }),
13093
14846
  success: effect.Schema.String,
13094
14847
  error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
@@ -13137,24 +14890,64 @@ const WsSourceControlListIssueAssigneesRpc = effect_unstable_rpc_Rpc.make(WS_MET
13137
14890
  success: effect.Schema.Array(SourceControlAssigneeCandidate),
13138
14891
  error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
13139
14892
  });
13140
- const WsSourceControlListWorkflowRunsRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlListWorkflowRuns, {
13141
- payload: SourceControlWorkflowRunListInput,
13142
- success: SourceControlWorkflowRunListResult,
14893
+ const WsSourceControlListWorkflowRunsRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlListWorkflowRuns, {
14894
+ payload: SourceControlWorkflowRunListInput,
14895
+ success: SourceControlWorkflowRunListResult,
14896
+ error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
14897
+ });
14898
+ const WsSourceControlGetWorkflowRunJobsRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlGetWorkflowRunJobs, {
14899
+ payload: SourceControlWorkflowRunJobsInput,
14900
+ success: SourceControlWorkflowRunJobsResult,
14901
+ error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
14902
+ });
14903
+ const WsSourceControlGetWorkflowJobLogRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlGetWorkflowJobLog, {
14904
+ payload: SourceControlWorkflowJobLogInput,
14905
+ success: SourceControlWorkflowJobLogResult,
14906
+ error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
14907
+ });
14908
+ const WsSourceControlRerunWorkflowRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlRerunWorkflow, {
14909
+ payload: SourceControlWorkflowRerunInput,
14910
+ success: SourceControlWorkflowRerunResult,
14911
+ error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
14912
+ });
14913
+ const WsSourceControlGetChangeRequestActivityRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlGetChangeRequestActivity, {
14914
+ payload: ChangeRequestActivityInput,
14915
+ success: ChangeRequestActivity,
14916
+ error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
14917
+ });
14918
+ const WsSourceControlGetChangeRequestFileContentsRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlGetChangeRequestFileContents, {
14919
+ payload: ChangeRequestFileContentsInput,
14920
+ success: ChangeRequestFileContents,
14921
+ error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
14922
+ });
14923
+ const WsSourceControlSubmitChangeRequestReviewRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlSubmitChangeRequestReview, {
14924
+ payload: ChangeRequestSubmitReviewInput,
14925
+ success: ChangeRequestSubmitReviewResult,
14926
+ error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
14927
+ });
14928
+ const WsSourceControlReplyToReviewThreadRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlReplyToReviewThread, {
14929
+ payload: ChangeRequestReplyToThreadInput,
14930
+ success: ChangeRequestReplyToThreadResult,
14931
+ error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
14932
+ });
14933
+ const WsSourceControlSetReviewThreadResolvedRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlSetReviewThreadResolved, {
14934
+ payload: ChangeRequestSetThreadResolvedInput,
14935
+ success: ChangeRequestSetThreadResolvedResult,
13143
14936
  error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
13144
14937
  });
13145
- const WsSourceControlGetWorkflowRunJobsRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlGetWorkflowRunJobs, {
13146
- payload: SourceControlWorkflowRunJobsInput,
13147
- success: SourceControlWorkflowRunJobsResult,
14938
+ const WsSourceControlUpdateChangeRequestCommentRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlUpdateChangeRequestComment, {
14939
+ payload: ChangeRequestUpdateCommentInput,
14940
+ success: ChangeRequestUpdateCommentResult,
13148
14941
  error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
13149
14942
  });
13150
- const WsSourceControlGetWorkflowJobLogRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlGetWorkflowJobLog, {
13151
- payload: SourceControlWorkflowJobLogInput,
13152
- success: SourceControlWorkflowJobLogResult,
14943
+ const WsSourceControlUpdateChangeRequestRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlUpdateChangeRequest, {
14944
+ payload: ChangeRequestUpdateInput,
14945
+ success: ChangeRequestUpdateResult,
13153
14946
  error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
13154
14947
  });
13155
- const WsSourceControlRerunWorkflowRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlRerunWorkflow, {
13156
- payload: SourceControlWorkflowRerunInput,
13157
- success: SourceControlWorkflowRerunResult,
14948
+ const WsSourceControlCreateChangeRequestRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.sourceControlCreateChangeRequest, {
14949
+ payload: ChangeRequestCreateInput,
14950
+ success: ChangeRequest,
13158
14951
  error: effect.Schema.Union([SourceControlProviderError, AuthRpcError])
13159
14952
  });
13160
14953
  const WsTextGenerationAskSideQuestionRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.textGenerationAskSideQuestion, {
@@ -13449,6 +15242,31 @@ const WsGitDeleteWorktreeRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.gitDelete
13449
15242
  success: EmptyRpcResult,
13450
15243
  error: effect.Schema.Union([GitManagerServiceError, AuthRpcError])
13451
15244
  });
15245
+ const WsLifecycleListWorkspacesRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.lifecycleListWorkspaces, {
15246
+ payload: WorkspaceLifecycleListInput,
15247
+ success: effect.Schema.Array(WorkspaceLifecycleSummary),
15248
+ error: effect.Schema.Union([WorkspaceLifecycleError, AuthRpcError])
15249
+ });
15250
+ const WsLifecyclePreviewWorkspaceRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.lifecyclePreviewWorkspace, {
15251
+ payload: WorkspaceLifecycleRequest,
15252
+ success: WorkspaceLifecyclePreview,
15253
+ error: effect.Schema.Union([WorkspaceLifecycleError, AuthRpcError])
15254
+ });
15255
+ const WsLifecycleApplyWorkspaceRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.lifecycleApplyWorkspace, {
15256
+ payload: WorkspaceLifecycleApplyInput,
15257
+ success: WorkspaceLifecycleResult,
15258
+ error: effect.Schema.Union([WorkspaceLifecycleError, AuthRpcError])
15259
+ });
15260
+ const WsLifecycleSuggestionsRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.lifecycleSuggestions, {
15261
+ payload: effect.Schema.Struct({}),
15262
+ success: LifecycleSuggestions,
15263
+ error: effect.Schema.Union([WorkspaceLifecycleError, AuthRpcError])
15264
+ });
15265
+ const WsLifecycleListTrashRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.lifecycleListTrash, {
15266
+ payload: effect.Schema.Struct({}),
15267
+ success: TrashListResult,
15268
+ error: effect.Schema.Union([WorkspaceLifecycleError, AuthRpcError])
15269
+ });
13452
15270
  const WsThreadsSetManualBucketRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.threadsSetManualBucket, {
13453
15271
  payload: ThreadsSetManualBucketInput,
13454
15272
  success: EmptyRpcResult,
@@ -13479,11 +15297,31 @@ const WsProjectsInitializeGitRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.proje
13479
15297
  success: EmptyRpcResult,
13480
15298
  error: effect.Schema.Union([GitManagerServiceError, AuthRpcError])
13481
15299
  });
15300
+ const WsProjectsPromoteChatPreviewRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.projectsPromoteChatPreview, {
15301
+ payload: ProjectsPromoteChatPreviewInput,
15302
+ success: ProjectsPromoteChatPreviewResult,
15303
+ error: effect.Schema.Union([ProjectChatError, AuthRpcError])
15304
+ });
15305
+ const WsProjectsPromoteChatRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.projectsPromoteChat, {
15306
+ payload: ProjectsPromoteChatInput,
15307
+ success: ProjectsPromoteChatResult,
15308
+ error: effect.Schema.Union([ProjectChatError, AuthRpcError])
15309
+ });
15310
+ const WsProjectsDeleteChatFolderRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.projectsDeleteChatFolder, {
15311
+ payload: ProjectsDeleteChatFolderInput,
15312
+ success: ProjectsDeleteChatFolderResult,
15313
+ error: effect.Schema.Union([ProjectChatError, AuthRpcError])
15314
+ });
13482
15315
  const WsVcsReadLineBlameRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.vcsReadLineBlame, {
13483
15316
  payload: GitReadLineBlameInput,
13484
15317
  success: GitReadLineBlameResult,
13485
15318
  error: effect.Schema.Union([GitCommandError, AuthRpcError])
13486
15319
  });
15320
+ const WsVcsReadImageBlobRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.vcsReadImageBlob, {
15321
+ payload: GitReadImageBlobInput,
15322
+ success: GitReadImageBlobResult,
15323
+ error: effect.Schema.Union([GitCommandError, AuthRpcError])
15324
+ });
13487
15325
  const WsVcsReadLocalChangesRpc = effect_unstable_rpc_Rpc.make(WS_METHODS.vcsReadLocalChanges, {
13488
15326
  payload: GitLocalChangesInput,
13489
15327
  success: GitLocalChangesResult,
@@ -13762,7 +15600,7 @@ const WsAgentControlDisconnectMcpInstallationRpc = effect_unstable_rpc_Rpc.make(
13762
15600
  error: effect.Schema.Union([AgentControlExternalRpcError, AuthRpcError])
13763
15601
  });
13764
15602
  /** Keep declaration emit bounded as shared settings and RPC schemas grow. */
13765
- const WsRpcGroup = effect_unstable_rpc_RpcGroup.make(WsSessionImportSourcesRpc, WsSessionImportReconcileRpc, WsSessionImportAdoptRpc, WsSessionImportDiscoverRpc, WsSessionImportRunRpc, WsServerGetConfigRpc, WsServerGetAdvertisedEndpointsRpc, WsServerGetDiagnosticsMetricsRpc, WsServerGetStatisticsRpc, WsServerGetUsageSummaryRpc, WsServerSearchAcpRegistryRpc, WsServerInstallAcpRegistryRpc, WsServerGetAcpRegistryAuthMethodsRpc, WsServerAuthenticateAcpRegistryRpc, WsServerReadCodexResetCreditsRpc, WsServerConsumeCodexResetCreditRpc, WsServerRefreshProvidersRpc, WsServerUpdateProviderRpc, WsServerUpsertKeybindingRpc, WsKeybindingsReplaceCustomRpc, WsServerGetProjectPreferencesRpc, WsServerGetSettingsRpc, WsServerUpdateSettingsRpc, WsServerGetDiagnosticsSnapshotRpc, WsServerSignalDiagnosticProcessRpc, WsServerGetResourceTelemetryHistoryRpc, WsServerRetryResourceTelemetryRpc, WsServerDiscoverSourceControlRpc, WsServerListOpinionatedPluginsRpc, WsServerCheckOpinionatedPluginsRpc, WsServerInstallOpinionatedPluginRpc, WsMcpListWorkspacesRpc, WsMcpListServersRpc, WsMcpUpsertServerRpc, WsMcpSetServerEnabledRpc, WsMcpRemoveServerRpc, WsMcpReloadServersRpc, WsMcpStartOauthLoginRpc, WsSourceControlLookupRepositoryRpc, WsSourceControlSearchRepositoriesRpc, WsSourceControlCloneRepositoryRpc, WsSourceControlPublishRepositoryRpc, WsSourceControlListIssuesRpc, WsSourceControlGetIssueRpc, WsSourceControlSearchIssuesRpc, WsSourceControlListChangeRequestsRpc, WsSourceControlSearchChangeRequestsRpc, WsSourceControlGetChangeRequestDetailRpc, WsSourceControlGetChangeRequestFilesViewedRpc, WsSourceControlSetChangeRequestFileViewedRpc, WsSourceControlGetChangeRequestDiffRpc, WsSourceControlMergeChangeRequestRpc, WsSourceControlCreateIssueRpc, WsSourceControlAddIssueCommentRpc, WsSourceControlAddIssueCommentReactionRpc, WsSourceControlAddChangeRequestCommentRpc, WsSourceControlAddChangeRequestCommentReactionRpc, WsSourceControlListIssueLabelsRpc, WsSourceControlListIssueAssigneesRpc, WsSourceControlListWorkflowRunsRpc, WsSourceControlGetWorkflowRunJobsRpc, WsSourceControlGetWorkflowJobLogRpc, WsSourceControlRerunWorkflowRpc, WsTextGenerationAskSideQuestionRpc, WsTextGenerationCancelSideQuestionRpc, WsTextGenerationGenerateIssueContentRpc, WsTextGenerationGenerateBranchNameRpc, WsAtlassianListConnectionsRpc, WsAtlassianStartOAuthRpc, WsAtlassianDisconnectRpc, WsAtlassianRefreshRpc, WsAtlassianListResourcesRpc, WsAtlassianGetProjectLinkRpc, WsAtlassianSaveProjectLinkRpc, WsAtlassianSaveManualBitbucketTokenRpc, WsAtlassianSaveManualJiraTokenRpc, WsWorkItemsListProjectsRpc, WsWorkItemsListRpc, WsWorkItemsSearchRpc, WsWorkItemsGetRpc, WsWorkItemsAddCommentRpc, WsWorkItemsEditCommentRpc, WsWorkItemsUpdateRpc, WsWorkItemsListTransitionsRpc, WsWorkItemsTransitionRpc, WsProjectsListEntriesRpc, WsProjectsSearchEntriesRpc, WsProjectsReadFileRpc, WsProjectsReadIconRpc, WsProjectsReadFileBinaryRpc, WsProjectsWriteFileRpc, WsProjectsStageFileReferenceRpc, WsChatAttachmentsCreateFileUploadRpc, WsChatAttachmentsReadChunkRpc, WsShellOpenInEditorRpc, WsFilesystemBrowseRpc, WsSubscribeVcsStatusRpc, WsVcsPullRpc, WsVcsRefreshStatusRpc, WsGitRunStackedActionRpc, WsGitResolvePullRequestRpc, WsGitPreparePullRequestThreadRpc, WsStorageScanRpc, WsStoragePreviewRpc, WsStorageExecuteRpc, WsGitCreateWorktreeForProjectRpc, WsGitFindWorktreeForOriginRpc, WsGitArchiveWorktreeRpc, WsGitRestoreWorktreeRpc, WsGitDeleteWorktreeRpc, WsThreadsSetManualBucketRpc, WsThreadsSetManualPositionRpc, WsSearchThreadMessagesRpc, WsThreadPriorityEnsureCurrentRpc, WsWorktreesSetManualPositionRpc, WsProjectsInitializeGitRpc, WsVcsReadLineBlameRpc, WsVcsReadLocalChangesRpc, WsVcsApplyIndexPatchRpc, WsVcsReadComparisonRpc, WsVcsListRefsRpc, WsVcsCreateWorktreeRpc, WsVcsRemoveWorktreeRpc, WsVcsCreateRefRpc, WsVcsSwitchRefRpc, WsVcsInitRpc, WsTerminalOpenRpc, WsTerminalWriteRpc, WsTerminalResizeRpc, WsTerminalClearRpc, WsTerminalRestartRpc, WsTerminalCloseRpc, WsSubscribeTerminalEventsRpc, WsSubscribeServerConfigRpc, WsSubscribeServerLifecycleRpc, WsSubscribeAuthAccessRpc, WsAutomationCentreRpc, WsAutomationCommandRpc, WsAgentControlListProposalsRpc, WsAgentControlGetProposalRpc, WsAgentControlAcceptProposalRpc, WsAgentControlRejectProposalRpc, WsAgentControlSubscribeProposalsRpc, WsAgentControlListIntegrationsRpc, WsAgentControlCreateIntegrationRpc, WsAgentControlUpdateIntegrationRpc, WsAgentControlResumeIntegrationPairingRpc, WsAgentControlRevokeIntegrationRpc, WsAgentControlDeleteIntegrationRpc, WsAgentControlListMcpInstallationsRpc, WsAgentControlConnectMcpInstallationRpc, WsAgentControlRepairMcpInstallationRpc, WsAgentControlDisconnectMcpInstallationRpc, WsOrchestrationDispatchCommandRpc, WsOrchestrationGetWorkflowScriptRpc, WsOrchestrationGetTaskOutputRpc, WsOrchestrationStopBackgroundTaskRpc, WsOrchestrationGetTurnDiffRpc, WsOrchestrationGetFullThreadDiffRpc, WsOrchestrationSearchThreadMessagesRpc, WsOrchestrationGetThreadWindowRpc, WsOrchestrationGetThreadHistoryPageRpc, WsOrchestrationReplayEventsRpc, WsOrchestrationReplayEventsPageRpc, WsOrchestrationSubscribeShellRpc, WsOrchestrationSubscribeThreadRpc, WsOrchestrationSubscribeThreadWindowRpc, WsContextHandoffGetInspectionSummaryRpc, WsContextHandoffListInspectionEntriesRpc, WsContextHandoffReadRawPayloadChunkRpc, WsContextHandoffReadExportChunkRpc);
15603
+ const WsRpcGroup = effect_unstable_rpc_RpcGroup.make(WsSessionImportSourcesRpc, WsSessionImportReconcileRpc, WsSessionImportAdoptRpc, WsSessionImportDiscoverRpc, WsSessionImportRunRpc, WsServerGetConfigRpc, WsServerGetAdvertisedEndpointsRpc, WsServerGetDiagnosticsMetricsRpc, WsServerGetStatisticsRpc, WsServerGetUsageSummaryRpc, WsServerSearchAcpRegistryRpc, WsServerInstallAcpRegistryRpc, WsServerGetAcpRegistryAuthMethodsRpc, WsServerAuthenticateAcpRegistryRpc, WsServerReadCodexResetCreditsRpc, WsServerConsumeCodexResetCreditRpc, WsServerListLocalTasksRpc, WsServerGetLocalTaskRpc, WsServerCreateLocalTaskRpc, WsServerUpdateLocalTaskRpc, WsServerDeleteLocalTaskRpc, WsServerDelegateLocalTaskRpc, WsNotesListRpc, WsNotesCommandRpc, WsServerGetDailyRecapRpc, WsServerRefreshProvidersRpc, WsServerUpdateProviderRpc, WsServerUpsertKeybindingRpc, WsKeybindingsReplaceCustomRpc, WsServerGetProjectPreferencesRpc, WsServerGetSettingsRpc, WsServerUpdateSettingsRpc, WsServerGetDiagnosticsSnapshotRpc, WsServerSignalDiagnosticProcessRpc, WsServerGetResourceTelemetryHistoryRpc, WsServerRetryResourceTelemetryRpc, WsServerDiscoverSourceControlRpc, WsServerListOpinionatedPluginsRpc, WsServerCheckOpinionatedPluginsRpc, WsServerInstallOpinionatedPluginRpc, WsMcpListWorkspacesRpc, WsMcpListServersRpc, WsMcpUpsertServerRpc, WsMcpSetServerEnabledRpc, WsMcpRemoveServerRpc, WsMcpReloadServersRpc, WsMcpStartOauthLoginRpc, WsSourceControlLookupRepositoryRpc, WsSourceControlSearchRepositoriesRpc, WsSourceControlCloneRepositoryRpc, WsSourceControlPublishRepositoryRpc, WsSourceControlListIssuesRpc, WsSourceControlGetIssueRpc, WsSourceControlSearchIssuesRpc, WsSourceControlListChangeRequestsRpc, WsSourceControlSearchChangeRequestsRpc, WsSourceControlGetChangeRequestDetailRpc, WsSourceControlGetChangeRequestFilesViewedRpc, WsSourceControlSetChangeRequestFileViewedRpc, WsSourceControlGetChangeRequestDiffRpc, WsSourceControlMergeChangeRequestRpc, WsSourceControlCreateIssueRpc, WsSourceControlAddIssueCommentRpc, WsSourceControlAddIssueCommentReactionRpc, WsSourceControlAddChangeRequestCommentRpc, WsSourceControlAddChangeRequestCommentReactionRpc, WsSourceControlListIssueLabelsRpc, WsSourceControlListIssueAssigneesRpc, WsSourceControlListWorkflowRunsRpc, WsSourceControlGetWorkflowRunJobsRpc, WsSourceControlGetWorkflowJobLogRpc, WsSourceControlRerunWorkflowRpc, WsSourceControlGetChangeRequestActivityRpc, WsSourceControlGetChangeRequestFileContentsRpc, WsSourceControlSubmitChangeRequestReviewRpc, WsSourceControlReplyToReviewThreadRpc, WsSourceControlSetReviewThreadResolvedRpc, WsSourceControlUpdateChangeRequestCommentRpc, WsSourceControlUpdateChangeRequestRpc, WsSourceControlCreateChangeRequestRpc, WsTextGenerationAskSideQuestionRpc, WsTextGenerationCancelSideQuestionRpc, WsTextGenerationGenerateIssueContentRpc, WsTextGenerationGenerateBranchNameRpc, WsAtlassianListConnectionsRpc, WsAtlassianStartOAuthRpc, WsAtlassianDisconnectRpc, WsAtlassianRefreshRpc, WsAtlassianListResourcesRpc, WsAtlassianGetProjectLinkRpc, WsAtlassianSaveProjectLinkRpc, WsAtlassianSaveManualBitbucketTokenRpc, WsAtlassianSaveManualJiraTokenRpc, WsWorkItemsListProjectsRpc, WsWorkItemsListRpc, WsWorkItemsSearchRpc, WsWorkItemsGetRpc, WsWorkItemsAddCommentRpc, WsWorkItemsEditCommentRpc, WsWorkItemsUpdateRpc, WsWorkItemsListTransitionsRpc, WsWorkItemsTransitionRpc, WsProjectsListEntriesRpc, WsProjectsSearchEntriesRpc, WsProjectsReadFileRpc, WsProjectsReadIconRpc, WsProjectsReadFileBinaryRpc, WsProjectsWriteFileRpc, WsProjectsStageFileReferenceRpc, WsChatAttachmentsCreateFileUploadRpc, WsChatAttachmentsReadChunkRpc, WsShellOpenInEditorRpc, WsFilesystemBrowseRpc, WsSubscribeVcsStatusRpc, WsVcsPullRpc, WsVcsRefreshStatusRpc, WsGitRunStackedActionRpc, WsGitResolvePullRequestRpc, WsGitPreparePullRequestThreadRpc, WsStorageScanRpc, WsStoragePreviewRpc, WsStorageExecuteRpc, WsGitCreateWorktreeForProjectRpc, WsGitFindWorktreeForOriginRpc, WsGitArchiveWorktreeRpc, WsGitRestoreWorktreeRpc, WsGitDeleteWorktreeRpc, WsLifecycleListWorkspacesRpc, WsLifecyclePreviewWorkspaceRpc, WsLifecycleApplyWorkspaceRpc, WsLifecycleSuggestionsRpc, WsLifecycleListTrashRpc, WsThreadsSetManualBucketRpc, WsThreadsSetManualPositionRpc, WsSearchThreadMessagesRpc, WsThreadPriorityEnsureCurrentRpc, WsWorktreesSetManualPositionRpc, WsProjectsInitializeGitRpc, WsProjectsPromoteChatPreviewRpc, WsProjectsPromoteChatRpc, WsProjectsDeleteChatFolderRpc, WsVcsReadLineBlameRpc, WsVcsReadImageBlobRpc, WsVcsReadLocalChangesRpc, WsVcsApplyIndexPatchRpc, WsVcsReadComparisonRpc, WsVcsListRefsRpc, WsVcsCreateWorktreeRpc, WsVcsRemoveWorktreeRpc, WsVcsCreateRefRpc, WsVcsSwitchRefRpc, WsVcsInitRpc, WsTerminalOpenRpc, WsTerminalWriteRpc, WsTerminalResizeRpc, WsTerminalClearRpc, WsTerminalRestartRpc, WsTerminalCloseRpc, WsSubscribeTerminalEventsRpc, WsSubscribeServerConfigRpc, WsSubscribeServerLifecycleRpc, WsSubscribeAuthAccessRpc, WsAutomationCentreRpc, WsAutomationCommandRpc, WsAgentControlListProposalsRpc, WsAgentControlGetProposalRpc, WsAgentControlAcceptProposalRpc, WsAgentControlRejectProposalRpc, WsAgentControlSubscribeProposalsRpc, WsAgentControlListIntegrationsRpc, WsAgentControlCreateIntegrationRpc, WsAgentControlUpdateIntegrationRpc, WsAgentControlResumeIntegrationPairingRpc, WsAgentControlRevokeIntegrationRpc, WsAgentControlDeleteIntegrationRpc, WsAgentControlListMcpInstallationsRpc, WsAgentControlConnectMcpInstallationRpc, WsAgentControlRepairMcpInstallationRpc, WsAgentControlDisconnectMcpInstallationRpc, WsOrchestrationDispatchCommandRpc, WsOrchestrationGetWorkflowScriptRpc, WsOrchestrationGetTaskOutputRpc, WsOrchestrationStopBackgroundTaskRpc, WsOrchestrationGetTurnDiffRpc, WsOrchestrationGetFullThreadDiffRpc, WsOrchestrationSearchThreadMessagesRpc, WsOrchestrationGetThreadWindowRpc, WsOrchestrationGetThreadHistoryPageRpc, WsOrchestrationReplayEventsRpc, WsOrchestrationReplayEventsPageRpc, WsOrchestrationSubscribeShellRpc, WsOrchestrationSubscribeThreadRpc, WsOrchestrationSubscribeThreadWindowRpc, WsContextHandoffGetInspectionSummaryRpc, WsContextHandoffListInspectionEntriesRpc, WsContextHandoffReadRawPayloadChunkRpc, WsContextHandoffReadExportChunkRpc);
13766
15604
  /**
13767
15605
  * Hosted relay channels carry both groups through one lifecycle-owned encrypted
13768
15606
  * channel. Direct clients keep the device group on its own low-priority socket
@@ -13945,6 +15783,81 @@ const AgentControlReadThreadFileInput = effect.Schema.Struct({
13945
15783
  threadId: ThreadId,
13946
15784
  relativePath: TrimmedNonEmptyString.check(effect.Schema.isMaxLength(4096))
13947
15785
  });
15786
+ //#endregion
15787
+ //#region ../../packages/contracts/src/agentControlDelegation.ts
15788
+ /**
15789
+ * Private-session tools for tasks a chat delegated with `ryco_create_threads` and
15790
+ * `returnToOrigin`. Like the inspection tools, they are not part of
15791
+ * `AGENT_CONTROL_MCP_TOOLS` and never reach the external endpoint.
15792
+ */
15793
+ const AGENT_CONTROL_DELEGATION_MCP_TOOLS = {
15794
+ taskStatus: "ryco_task_status",
15795
+ taskCancel: "ryco_task_cancel"
15796
+ };
15797
+ const AGENT_CONTROL_TASK_RESULT_MAX_CHARS = 8e3;
15798
+ const AGENT_CONTROL_TASK_NOTICE_MAX_CHARS = 4e3;
15799
+ /** Child-side terminal outcomes a task returns as a server-authored notice instead of a result. */
15800
+ const AgentControlTaskNoticeOutcome = effect.Schema.Literals([
15801
+ "interrupted",
15802
+ "stopped",
15803
+ "start-failed",
15804
+ "advanced",
15805
+ "archived",
15806
+ "request-failed",
15807
+ "expired"
15808
+ ]);
15809
+ const AgentControlTaskStatusInput = effect.Schema.Struct({ taskId: effect.Schema.optional(ThreadId) }).annotate({ parseOptions: { onExcessProperty: "error" } });
15810
+ const AgentControlTaskCancelInput = effect.Schema.Struct({
15811
+ requestId: AgentControlRequestId,
15812
+ taskId: ThreadId
15813
+ }).annotate({ parseOptions: { onExcessProperty: "error" } });
15814
+ const AgentControlTaskRunState = effect.Schema.Literals([
15815
+ "starting",
15816
+ "running",
15817
+ "needs-you",
15818
+ "completed",
15819
+ "failed",
15820
+ "interrupted",
15821
+ "unavailable"
15822
+ ]);
15823
+ const AgentControlTaskStatusEntry = effect.Schema.Struct({
15824
+ taskId: ThreadId,
15825
+ proposalId: AgentControlProposalId,
15826
+ title: effect.Schema.NullOr(effect.Schema.String),
15827
+ return: effect.Schema.Struct({
15828
+ status: AgentControlCompletionReturn.fields.status,
15829
+ detail: AgentControlCompletionReturn.fields.detail,
15830
+ updatedAt: IsoDateTime
15831
+ }),
15832
+ run: effect.Schema.Struct({
15833
+ state: AgentControlTaskRunState,
15834
+ sessionStatus: effect.Schema.NullOr(OrchestrationSessionStatus),
15835
+ hasPendingApprovals: effect.Schema.Boolean,
15836
+ hasPendingUserInput: effect.Schema.Boolean,
15837
+ backgroundLiveness: effect.Schema.NullOr(effect.Schema.Literals(["working", "monitoring"])),
15838
+ advanced: effect.Schema.Boolean
15839
+ }),
15840
+ /** Untrusted child output: reference data, never instructions or approval. */
15841
+ result: effect.Schema.NullOr(effect.Schema.Struct({
15842
+ untrustedChildOutput: effect.Schema.Literal(true),
15843
+ state: effect.Schema.Literals(["completed", "error"]),
15844
+ text: effect.Schema.String.check(effect.Schema.isMaxLength(AGENT_CONTROL_TASK_RESULT_MAX_CHARS)),
15845
+ truncated: effect.Schema.Boolean
15846
+ })),
15847
+ /**
15848
+ * The notice the task returns instead of a result (the same text a wake carries). It is
15849
+ * server-authored, holds no child text and stays visible after an acknowledgement.
15850
+ */
15851
+ notice: effect.Schema.NullOr(effect.Schema.Struct({
15852
+ outcome: AgentControlTaskNoticeOutcome,
15853
+ text: effect.Schema.String.check(effect.Schema.isMaxLength(AGENT_CONTROL_TASK_NOTICE_MAX_CHARS))
15854
+ })),
15855
+ acknowledged: effect.Schema.Boolean
15856
+ });
15857
+ const AgentControlTaskStatusResult = effect.Schema.Struct({
15858
+ tasks: effect.Schema.Array(AgentControlTaskStatusEntry).check(effect.Schema.isMaxLength(20)),
15859
+ truncated: effect.Schema.Boolean
15860
+ });
13948
15861
  /**
13949
15862
  * Exported because it bounds `ComputerActionResult.value`, and the clipboard
13950
15863
  * read path must enforce it before putting clipboard text on that field.
@@ -15043,6 +16956,12 @@ Object.defineProperty(exports, "AGENT_CONTROL_CAPABILITIES", {
15043
16956
  return AGENT_CONTROL_CAPABILITIES;
15044
16957
  }
15045
16958
  });
16959
+ Object.defineProperty(exports, "AGENT_CONTROL_DELEGATION_MCP_TOOLS", {
16960
+ enumerable: true,
16961
+ get: function() {
16962
+ return AGENT_CONTROL_DELEGATION_MCP_TOOLS;
16963
+ }
16964
+ });
15046
16965
  Object.defineProperty(exports, "AGENT_CONTROL_DEVICE_ACTION_KINDS", {
15047
16966
  enumerable: true,
15048
16967
  get: function() {
@@ -15145,6 +17064,18 @@ Object.defineProperty(exports, "AGENT_CONTROL_RISK_TAGS", {
15145
17064
  return AGENT_CONTROL_RISK_TAGS;
15146
17065
  }
15147
17066
  });
17067
+ Object.defineProperty(exports, "AGENT_CONTROL_TASK_NOTICE_MAX_CHARS", {
17068
+ enumerable: true,
17069
+ get: function() {
17070
+ return AGENT_CONTROL_TASK_NOTICE_MAX_CHARS;
17071
+ }
17072
+ });
17073
+ Object.defineProperty(exports, "AGENT_CONTROL_TASK_RESULT_MAX_CHARS", {
17074
+ enumerable: true,
17075
+ get: function() {
17076
+ return AGENT_CONTROL_TASK_RESULT_MAX_CHARS;
17077
+ }
17078
+ });
15148
17079
  Object.defineProperty(exports, "AGENT_CONTROL_TERMINAL_PROPOSAL_STATUSES", {
15149
17080
  enumerable: true,
15150
17081
  get: function() {
@@ -15781,6 +17712,30 @@ Object.defineProperty(exports, "AgentControlSearchThreadsInput", {
15781
17712
  return AgentControlSearchThreadsInput;
15782
17713
  }
15783
17714
  });
17715
+ Object.defineProperty(exports, "AgentControlTaskCancelInput", {
17716
+ enumerable: true,
17717
+ get: function() {
17718
+ return AgentControlTaskCancelInput;
17719
+ }
17720
+ });
17721
+ Object.defineProperty(exports, "AgentControlTaskNoticeOutcome", {
17722
+ enumerable: true,
17723
+ get: function() {
17724
+ return AgentControlTaskNoticeOutcome;
17725
+ }
17726
+ });
17727
+ Object.defineProperty(exports, "AgentControlTaskStatusInput", {
17728
+ enumerable: true,
17729
+ get: function() {
17730
+ return AgentControlTaskStatusInput;
17731
+ }
17732
+ });
17733
+ Object.defineProperty(exports, "AgentControlTaskStatusResult", {
17734
+ enumerable: true,
17735
+ get: function() {
17736
+ return AgentControlTaskStatusResult;
17737
+ }
17738
+ });
15784
17739
  Object.defineProperty(exports, "AgentControlWaitThreadsInput", {
15785
17740
  enumerable: true,
15786
17741
  get: function() {
@@ -15907,12 +17862,24 @@ Object.defineProperty(exports, "BrowserExternalIdentityConnectResponse", {
15907
17862
  return BrowserExternalIdentityConnectResponse;
15908
17863
  }
15909
17864
  });
17865
+ Object.defineProperty(exports, "CHANGE_REQUEST_FILE_CONTENTS_MAX_BYTES", {
17866
+ enumerable: true,
17867
+ get: function() {
17868
+ return CHANGE_REQUEST_FILE_CONTENTS_MAX_BYTES;
17869
+ }
17870
+ });
15910
17871
  Object.defineProperty(exports, "CHAT_ATTACHMENT_READ_CHUNK_BYTES", {
15911
17872
  enumerable: true,
15912
17873
  get: function() {
15913
17874
  return CHAT_ATTACHMENT_READ_CHUNK_BYTES;
15914
17875
  }
15915
17876
  });
17877
+ Object.defineProperty(exports, "CHECKPOINT_REVERT_ACTIVITY_KIND", {
17878
+ enumerable: true,
17879
+ get: function() {
17880
+ return CHECKPOINT_REVERT_ACTIVITY_KIND;
17881
+ }
17882
+ });
15916
17883
  Object.defineProperty(exports, "COMPUTER_BROWSER_DRIVER_NAMES", {
15917
17884
  enumerable: true,
15918
17885
  get: function() {
@@ -15997,6 +17964,30 @@ Object.defineProperty(exports, "CONTEXT_HANDOFF_WS_METHODS", {
15997
17964
  return CONTEXT_HANDOFF_WS_METHODS;
15998
17965
  }
15999
17966
  });
17967
+ Object.defineProperty(exports, "ChangeRequestReviewComment", {
17968
+ enumerable: true,
17969
+ get: function() {
17970
+ return ChangeRequestReviewComment;
17971
+ }
17972
+ });
17973
+ Object.defineProperty(exports, "ChangeRequestReviewThread", {
17974
+ enumerable: true,
17975
+ get: function() {
17976
+ return ChangeRequestReviewThread;
17977
+ }
17978
+ });
17979
+ Object.defineProperty(exports, "ChangeRequestTimelineItem", {
17980
+ enumerable: true,
17981
+ get: function() {
17982
+ return ChangeRequestTimelineItem;
17983
+ }
17984
+ });
17985
+ Object.defineProperty(exports, "ChangeRequestViewerCapabilities", {
17986
+ enumerable: true,
17987
+ get: function() {
17988
+ return ChangeRequestViewerCapabilities;
17989
+ }
17990
+ });
16000
17991
  Object.defineProperty(exports, "ChatAttachment", {
16001
17992
  enumerable: true,
16002
17993
  get: function() {
@@ -16009,12 +18000,30 @@ Object.defineProperty(exports, "ChatAttachmentReadError", {
16009
18000
  return ChatAttachmentReadError;
16010
18001
  }
16011
18002
  });
18003
+ Object.defineProperty(exports, "ChatFileAttachment", {
18004
+ enumerable: true,
18005
+ get: function() {
18006
+ return ChatFileAttachment;
18007
+ }
18008
+ });
16012
18009
  Object.defineProperty(exports, "CheckpointRef", {
16013
18010
  enumerable: true,
16014
18011
  get: function() {
16015
18012
  return CheckpointRef;
16016
18013
  }
16017
18014
  });
18015
+ Object.defineProperty(exports, "CheckpointRevertActivityPayload", {
18016
+ enumerable: true,
18017
+ get: function() {
18018
+ return CheckpointRevertActivityPayload;
18019
+ }
18020
+ });
18021
+ Object.defineProperty(exports, "ClaudeCacheObservation", {
18022
+ enumerable: true,
18023
+ get: function() {
18024
+ return ClaudeCacheObservation;
18025
+ }
18026
+ });
16018
18027
  Object.defineProperty(exports, "ClaudeSettings", {
16019
18028
  enumerable: true,
16020
18029
  get: function() {
@@ -16027,6 +18036,12 @@ Object.defineProperty(exports, "ClientOrchestrationCommand", {
16027
18036
  return ClientOrchestrationCommand;
16028
18037
  }
16029
18038
  });
18039
+ Object.defineProperty(exports, "ClientThreadTurnStartCommand", {
18040
+ enumerable: true,
18041
+ get: function() {
18042
+ return ClientThreadTurnStartCommand;
18043
+ }
18044
+ });
16030
18045
  Object.defineProperty(exports, "CodexResetCreditError", {
16031
18046
  enumerable: true,
16032
18047
  get: function() {
@@ -16147,12 +18162,24 @@ Object.defineProperty(exports, "DEFAULT_GIT_TEXT_GENERATION_OPTIONS_BY_PROVIDER"
16147
18162
  return DEFAULT_GIT_TEXT_GENERATION_OPTIONS_BY_PROVIDER;
16148
18163
  }
16149
18164
  });
18165
+ Object.defineProperty(exports, "DEFAULT_LIFECYCLE_SUGGESTION_POLICY", {
18166
+ enumerable: true,
18167
+ get: function() {
18168
+ return DEFAULT_LIFECYCLE_SUGGESTION_POLICY;
18169
+ }
18170
+ });
16150
18171
  Object.defineProperty(exports, "DEFAULT_MODEL", {
16151
18172
  enumerable: true,
16152
18173
  get: function() {
16153
18174
  return DEFAULT_MODEL;
16154
18175
  }
16155
18176
  });
18177
+ Object.defineProperty(exports, "DEFAULT_PROJECT_KIND", {
18178
+ enumerable: true,
18179
+ get: function() {
18180
+ return DEFAULT_PROJECT_KIND;
18181
+ }
18182
+ });
16156
18183
  Object.defineProperty(exports, "DEFAULT_PROJECT_METADATA_DIR", {
16157
18184
  enumerable: true,
16158
18185
  get: function() {
@@ -16183,6 +18210,12 @@ Object.defineProperty(exports, "DEFAULT_WORKTREE_BRANCH_PREFIX", {
16183
18210
  return DEFAULT_WORKTREE_BRANCH_PREFIX;
16184
18211
  }
16185
18212
  });
18213
+ Object.defineProperty(exports, "DESKTOP_HUB_REACHABILITY_PATH", {
18214
+ enumerable: true,
18215
+ get: function() {
18216
+ return DESKTOP_HUB_REACHABILITY_PATH;
18217
+ }
18218
+ });
16186
18219
  Object.defineProperty(exports, "DESKTOP_NATIVE_NODE_CLAIM_COMMIT_PATH", {
16187
18220
  enumerable: true,
16188
18221
  get: function() {
@@ -16231,6 +18264,18 @@ Object.defineProperty(exports, "DEVICE_WS_METHODS", {
16231
18264
  return DEVICE_WS_METHODS;
16232
18265
  }
16233
18266
  });
18267
+ Object.defineProperty(exports, "DailyRecapReadError", {
18268
+ enumerable: true,
18269
+ get: function() {
18270
+ return DailyRecapReadError;
18271
+ }
18272
+ });
18273
+ Object.defineProperty(exports, "DailyRecapThread", {
18274
+ enumerable: true,
18275
+ get: function() {
18276
+ return DailyRecapThread;
18277
+ }
18278
+ });
16234
18279
  Object.defineProperty(exports, "DesktopNativeNodeClaimCommitRequest", {
16235
18280
  enumerable: true,
16236
18281
  get: function() {
@@ -16501,6 +18546,12 @@ Object.defineProperty(exports, "GitReadComparisonInput", {
16501
18546
  return GitReadComparisonInput;
16502
18547
  }
16503
18548
  });
18549
+ Object.defineProperty(exports, "GitReadImageBlobInput", {
18550
+ enumerable: true,
18551
+ get: function() {
18552
+ return GitReadImageBlobInput;
18553
+ }
18554
+ });
16504
18555
  Object.defineProperty(exports, "GitReadLineBlameInput", {
16505
18556
  enumerable: true,
16506
18557
  get: function() {
@@ -16573,6 +18624,12 @@ Object.defineProperty(exports, "HubIdentitySummary", {
16573
18624
  return HubIdentitySummary;
16574
18625
  }
16575
18626
  });
18627
+ Object.defineProperty(exports, "HubSpaceId", {
18628
+ enumerable: true,
18629
+ get: function() {
18630
+ return HubSpaceId;
18631
+ }
18632
+ });
16576
18633
  Object.defineProperty(exports, "IsoDateTime", {
16577
18634
  enumerable: true,
16578
18635
  get: function() {
@@ -16627,6 +18684,48 @@ Object.defineProperty(exports, "LocalIntroductionCompleteRequest", {
16627
18684
  return LocalIntroductionCompleteRequest;
16628
18685
  }
16629
18686
  });
18687
+ Object.defineProperty(exports, "LocalTask", {
18688
+ enumerable: true,
18689
+ get: function() {
18690
+ return LocalTask;
18691
+ }
18692
+ });
18693
+ Object.defineProperty(exports, "LocalTaskCreateInput", {
18694
+ enumerable: true,
18695
+ get: function() {
18696
+ return LocalTaskCreateInput;
18697
+ }
18698
+ });
18699
+ Object.defineProperty(exports, "LocalTaskDelegateInput", {
18700
+ enumerable: true,
18701
+ get: function() {
18702
+ return LocalTaskDelegateInput;
18703
+ }
18704
+ });
18705
+ Object.defineProperty(exports, "LocalTaskDeleteInput", {
18706
+ enumerable: true,
18707
+ get: function() {
18708
+ return LocalTaskDeleteInput;
18709
+ }
18710
+ });
18711
+ Object.defineProperty(exports, "LocalTaskError", {
18712
+ enumerable: true,
18713
+ get: function() {
18714
+ return LocalTaskError;
18715
+ }
18716
+ });
18717
+ Object.defineProperty(exports, "LocalTaskListInput", {
18718
+ enumerable: true,
18719
+ get: function() {
18720
+ return LocalTaskListInput;
18721
+ }
18722
+ });
18723
+ Object.defineProperty(exports, "LocalTaskUpdateInput", {
18724
+ enumerable: true,
18725
+ get: function() {
18726
+ return LocalTaskUpdateInput;
18727
+ }
18728
+ });
16630
18729
  Object.defineProperty(exports, "MODEL_PICKER_JUMP_KEYBINDING_COMMANDS", {
16631
18730
  enumerable: true,
16632
18731
  get: function() {
@@ -17185,6 +19284,30 @@ Object.defineProperty(exports, "NonNegativeInt", {
17185
19284
  return NonNegativeInt;
17186
19285
  }
17187
19286
  });
19287
+ Object.defineProperty(exports, "NotesCommand", {
19288
+ enumerable: true,
19289
+ get: function() {
19290
+ return NotesCommand;
19291
+ }
19292
+ });
19293
+ Object.defineProperty(exports, "NotesDocument", {
19294
+ enumerable: true,
19295
+ get: function() {
19296
+ return NotesDocument;
19297
+ }
19298
+ });
19299
+ Object.defineProperty(exports, "NotesError", {
19300
+ enumerable: true,
19301
+ get: function() {
19302
+ return NotesError;
19303
+ }
19304
+ });
19305
+ Object.defineProperty(exports, "NotesListInput", {
19306
+ enumerable: true,
19307
+ get: function() {
19308
+ return NotesListInput;
19309
+ }
19310
+ });
17188
19311
  Object.defineProperty(exports, "ORCHESTRATION_WS_METHODS", {
17189
19312
  enumerable: true,
17190
19313
  get: function() {
@@ -17443,12 +19566,24 @@ Object.defineProperty(exports, "PROJECT_READ_FILE_BINARY_MAX_BYTES", {
17443
19566
  return PROJECT_READ_FILE_BINARY_MAX_BYTES;
17444
19567
  }
17445
19568
  });
19569
+ Object.defineProperty(exports, "PROJECT_RELOCATION_PENDING_MESSAGE", {
19570
+ enumerable: true,
19571
+ get: function() {
19572
+ return PROJECT_RELOCATION_PENDING_MESSAGE;
19573
+ }
19574
+ });
17446
19575
  Object.defineProperty(exports, "PROJECT_STAGE_FILE_MAX_BYTES", {
17447
19576
  enumerable: true,
17448
19577
  get: function() {
17449
19578
  return PROJECT_STAGE_FILE_MAX_BYTES;
17450
19579
  }
17451
19580
  });
19581
+ Object.defineProperty(exports, "PROVIDER_DISPLAY_NAMES", {
19582
+ enumerable: true,
19583
+ get: function() {
19584
+ return PROVIDER_DISPLAY_NAMES;
19585
+ }
19586
+ });
17452
19587
  Object.defineProperty(exports, "PROVIDER_SEND_TURN_MAX_ATTACHMENT_TOTAL_BYTES", {
17453
19588
  enumerable: true,
17454
19589
  get: function() {
@@ -17575,6 +19710,12 @@ Object.defineProperty(exports, "ProjectAvatarSetPayload", {
17575
19710
  return ProjectAvatarSetPayload;
17576
19711
  }
17577
19712
  });
19713
+ Object.defineProperty(exports, "ProjectChatError", {
19714
+ enumerable: true,
19715
+ get: function() {
19716
+ return ProjectChatError;
19717
+ }
19718
+ });
17578
19719
  Object.defineProperty(exports, "ProjectCreatedPayload", {
17579
19720
  enumerable: true,
17580
19721
  get: function() {
@@ -17593,6 +19734,12 @@ Object.defineProperty(exports, "ProjectId", {
17593
19734
  return ProjectId;
17594
19735
  }
17595
19736
  });
19737
+ Object.defineProperty(exports, "ProjectKind", {
19738
+ enumerable: true,
19739
+ get: function() {
19740
+ return ProjectKind;
19741
+ }
19742
+ });
17596
19743
  Object.defineProperty(exports, "ProjectListEntriesError", {
17597
19744
  enumerable: true,
17598
19745
  get: function() {
@@ -17959,6 +20106,12 @@ Object.defineProperty(exports, "ServerProvider", {
17959
20106
  return ServerProvider;
17960
20107
  }
17961
20108
  });
20109
+ Object.defineProperty(exports, "ServerProviderCompatibilityStatus", {
20110
+ enumerable: true,
20111
+ get: function() {
20112
+ return ServerProviderCompatibilityStatus;
20113
+ }
20114
+ });
17962
20115
  Object.defineProperty(exports, "ServerProviderUpdateError", {
17963
20116
  enumerable: true,
17964
20117
  get: function() {
@@ -17983,6 +20136,12 @@ Object.defineProperty(exports, "SessionImportError", {
17983
20136
  return SessionImportError;
17984
20137
  }
17985
20138
  });
20139
+ Object.defineProperty(exports, "SourceControlChangeRequestReviewer", {
20140
+ enumerable: true,
20141
+ get: function() {
20142
+ return SourceControlChangeRequestReviewer;
20143
+ }
20144
+ });
17986
20145
  Object.defineProperty(exports, "SourceControlProviderError", {
17987
20146
  enumerable: true,
17988
20147
  get: function() {
@@ -18247,6 +20406,12 @@ Object.defineProperty(exports, "ThreadTokenModeSetPayload", {
18247
20406
  return ThreadTokenModeSetPayload;
18248
20407
  }
18249
20408
  });
20409
+ Object.defineProperty(exports, "ThreadTrashedPayload", {
20410
+ enumerable: true,
20411
+ get: function() {
20412
+ return ThreadTrashedPayload;
20413
+ }
20414
+ });
18250
20415
  Object.defineProperty(exports, "ThreadTurnDiffCompletedPayload", {
18251
20416
  enumerable: true,
18252
20417
  get: function() {
@@ -18277,6 +20442,30 @@ Object.defineProperty(exports, "ThreadUnsnoozedPayload", {
18277
20442
  return ThreadUnsnoozedPayload;
18278
20443
  }
18279
20444
  });
20445
+ Object.defineProperty(exports, "ThreadUntrashedPayload", {
20446
+ enumerable: true,
20447
+ get: function() {
20448
+ return ThreadUntrashedPayload;
20449
+ }
20450
+ });
20451
+ Object.defineProperty(exports, "ThreadUsageLimit", {
20452
+ enumerable: true,
20453
+ get: function() {
20454
+ return ThreadUsageLimit;
20455
+ }
20456
+ });
20457
+ Object.defineProperty(exports, "ThreadUsageLimitClearedPayload", {
20458
+ enumerable: true,
20459
+ get: function() {
20460
+ return ThreadUsageLimitClearedPayload;
20461
+ }
20462
+ });
20463
+ Object.defineProperty(exports, "ThreadUsageLimitSetPayload", {
20464
+ enumerable: true,
20465
+ get: function() {
20466
+ return ThreadUsageLimitSetPayload;
20467
+ }
20468
+ });
18280
20469
  Object.defineProperty(exports, "ToolLifecycleItemType", {
18281
20470
  enumerable: true,
18282
20471
  get: function() {
@@ -18379,6 +20568,12 @@ Object.defineProperty(exports, "WorkItemProviderKind", {
18379
20568
  return WorkItemProviderKind;
18380
20569
  }
18381
20570
  });
20571
+ Object.defineProperty(exports, "WorkspaceLifecycleError", {
20572
+ enumerable: true,
20573
+ get: function() {
20574
+ return WorkspaceLifecycleError;
20575
+ }
20576
+ });
18382
20577
  Object.defineProperty(exports, "Worktree", {
18383
20578
  enumerable: true,
18384
20579
  get: function() {
@@ -18391,6 +20586,18 @@ Object.defineProperty(exports, "WorktreeArchivedPayload", {
18391
20586
  return WorktreeArchivedPayload;
18392
20587
  }
18393
20588
  });
20589
+ Object.defineProperty(exports, "WorktreeCheckoutRemovedPayload", {
20590
+ enumerable: true,
20591
+ get: function() {
20592
+ return WorktreeCheckoutRemovedPayload;
20593
+ }
20594
+ });
20595
+ Object.defineProperty(exports, "WorktreeCheckoutRestoredPayload", {
20596
+ enumerable: true,
20597
+ get: function() {
20598
+ return WorktreeCheckoutRestoredPayload;
20599
+ }
20600
+ });
18394
20601
  Object.defineProperty(exports, "WorktreeCreatedPayload", {
18395
20602
  enumerable: true,
18396
20603
  get: function() {
@@ -18421,6 +20628,12 @@ Object.defineProperty(exports, "WorktreeMetaUpdatedPayload", {
18421
20628
  return WorktreeMetaUpdatedPayload;
18422
20629
  }
18423
20630
  });
20631
+ Object.defineProperty(exports, "WorktreeRelocatedPayload", {
20632
+ enumerable: true,
20633
+ get: function() {
20634
+ return WorktreeRelocatedPayload;
20635
+ }
20636
+ });
18424
20637
  Object.defineProperty(exports, "WorktreeRestoredPayload", {
18425
20638
  enumerable: true,
18426
20639
  get: function() {
@@ -18463,6 +20676,12 @@ Object.defineProperty(exports, "defaultInstanceIdForDriver", {
18463
20676
  return defaultInstanceIdForDriver;
18464
20677
  }
18465
20678
  });
20679
+ Object.defineProperty(exports, "isProviderAvailable", {
20680
+ enumerable: true,
20681
+ get: function() {
20682
+ return isProviderAvailable;
20683
+ }
20684
+ });
18466
20685
  Object.defineProperty(exports, "isProviderDriverKind", {
18467
20686
  enumerable: true,
18468
20687
  get: function() {