ryco-cli 0.1.25 → 0.1.26
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.
- package/dist/{GrokDriver-CduUwiOH.mjs → AcpAdapter-BemMQNbj.mjs} +102 -604
- package/dist/{GrokDriver-D0jraOC_.cjs → AcpAdapter-CadxcdZV.cjs} +129 -612
- package/dist/AcpNativeLogging-BsbZRRD7.mjs +312 -0
- package/dist/AcpNativeLogging-DZPZNoju.cjs +383 -0
- package/dist/AcpRegistryDriver-BfCPf8FX.cjs +222 -0
- package/dist/AcpRegistryDriver-BpXCjh9I.mjs +221 -0
- package/dist/{AzureDevOpsSourceControlProvider-COmd21c-.cjs → AzureDevOpsSourceControlProvider-B9N_8NJg.cjs} +14 -14
- package/dist/{AzureDevOpsSourceControlProvider-B_E0XXfD.mjs → AzureDevOpsSourceControlProvider-BcQO_CyW.mjs} +3 -3
- package/dist/{BitbucketSourceControlProvider-pUKsNXcg.mjs → BitbucketSourceControlProvider-BTUY2ZT8.mjs} +3 -3
- package/dist/{BitbucketSourceControlProvider-CD8IvXQK.cjs → BitbucketSourceControlProvider-C9WuwvY2.cjs} +14 -14
- package/dist/{BunPTY-TbHbSc8S.mjs → BunPTY-DdnqQAdw.mjs} +1 -1
- package/dist/{ClaudeDriver-Dry5uJfX.cjs → ClaudeDriver-BSTxNNGO.cjs} +162 -126
- package/dist/{ClaudeDriver-CGifBixr.mjs → ClaudeDriver-Csnp78qR.mjs} +129 -93
- package/dist/{CodexDriver-BzR8gA8w.cjs → CodexDriver-BK4HVNV4.cjs} +145 -60
- package/dist/{CodexDriver-V4CL9APE.mjs → CodexDriver-fwcV84hX.mjs} +99 -14
- package/dist/{CodexTextGeneration-DTrSzY-I.cjs → CodexTextGeneration-Y2GSS7f1.cjs} +145 -99
- package/dist/{CodexTextGeneration-DoCidwvI.mjs → CodexTextGeneration-_4aT5BHa.mjs} +141 -95
- package/dist/{CopilotDriver-Dt13X60f.mjs → CopilotDriver-B12ZJ-L_.mjs} +69 -7
- package/dist/{CopilotDriver-rLcA8PSN.cjs → CopilotDriver-C7IyIwVW.cjs} +98 -36
- package/dist/{CursorDriver-C3s-8s9F.cjs → CursorDriver-BWmCfJ-w.cjs} +38 -32
- package/dist/{CursorDriver-HIPUs7cz.mjs → CursorDriver-C_p0v-ul.mjs} +12 -6
- package/dist/{ForgejoSourceControlProvider-JgiyrMqp.cjs → ForgejoSourceControlProvider-DTRrllIH.cjs} +14 -14
- package/dist/{ForgejoSourceControlProvider-CmvOAzEG.mjs → ForgejoSourceControlProvider-DmOGJEaJ.mjs} +3 -3
- package/dist/{GitHubSourceControlProvider-CItCpOcC.cjs → GitHubSourceControlProvider-D-YV8WP6.cjs} +16 -17
- package/dist/{GitHubSourceControlProvider-BYuvbcBf.mjs → GitHubSourceControlProvider-sQGcwnr3.mjs} +6 -7
- package/dist/{GitLabSourceControlProvider-CMce22nU.cjs → GitLabSourceControlProvider-kKYYnpER.cjs} +14 -14
- package/dist/{GitLabSourceControlProvider-DZzEaVSi.mjs → GitLabSourceControlProvider-mIl-K-4F.mjs} +3 -3
- package/dist/GrokDriver-BFOniP_K.cjs +567 -0
- package/dist/GrokDriver-CDcWkiAi.mjs +552 -0
- package/dist/{Metrics-a1h4iBQi.mjs → Metrics-C-3MahDy.mjs} +1 -107
- package/dist/{Metrics-Bcb9vCAe.cjs → Metrics-DCKbdeoH.cjs} +0 -168
- package/dist/{NodePTY-B_p5tLYO.mjs → NodePTY-DArvQ9bX.mjs} +1 -1
- package/dist/{OpenCodeDriver-DxGpgtDS.cjs → OpenCodeDriver-CckbFEQJ.cjs} +459 -141
- package/dist/{OpenCodeDriver-Bz_uJdMA.mjs → OpenCodeDriver-CnWJHyDJ.mjs} +430 -112
- package/dist/SideQuestionIsolation-5eGFRW0t.mjs +26 -0
- package/dist/SideQuestionIsolation-DvVKZWxi.cjs +37 -0
- package/dist/{SourceControlProviderDiscoveryCatalog-ZtwPWoxE.mjs → SourceControlProviderDiscoveryCatalog-BVvq7liJ.mjs} +2 -1
- package/dist/{SourceControlProviderDiscoveryCatalog-Dm_lhrhv.cjs → SourceControlProviderDiscoveryCatalog-CyUhKJLD.cjs} +6 -5
- package/dist/bin.cjs +12537 -3029
- package/dist/bin.mjs +10444 -965
- package/dist/client/assets/AccountSettings-DLbcE2w-.js +1 -0
- package/dist/client/assets/Adobe-CNS1-UCS2-fO900upv.bcmap +0 -0
- package/dist/client/assets/Adobe-GB1-UCS2-BA083yIo.bcmap +0 -0
- package/dist/client/assets/Adobe-Japan1-UCS2-BL-4M2vS.bcmap +0 -0
- package/dist/client/assets/Adobe-Korea1-UCS2-BEQZuOdo.bcmap +0 -0
- package/dist/client/assets/AiFocusSettings-FKvdkl4P.js +1 -0
- package/dist/client/assets/{AnimatedHeight-DPqb09B0.js → AnimatedHeight-CbIEyMLg.js} +1 -1
- package/dist/client/assets/AppearanceSettings-B2LsGKmL.js +1 -0
- package/dist/client/assets/{BranchToolbar.logic-CHRK3hDt.js → BranchToolbar.logic-BqkvYNPk.js} +1 -1
- package/dist/client/assets/{BrowserPanel-2Xu08il5.js → BrowserPanel-C_C4zjrh.js} +1 -1
- package/dist/client/assets/ChatRightPanel-ibiQ79jI.js +195 -0
- package/dist/client/assets/{ChatThreadRouteView-CNww3i2J.js → ChatThreadRouteView-c7AXmbSk.js} +1 -1
- package/dist/client/assets/CommandPaletteDialog-DdPKN6rv.js +1 -0
- package/dist/client/assets/CompositeRoot-DKwS-ADi.js +1 -0
- package/dist/client/assets/{ComputerUseSettings-BJs7jqR0.js → ComputerUseSettings-DM17BYP5.js} +1 -1
- package/dist/client/assets/ConnectionsSettings-D6wysIC8.js +7 -0
- package/dist/client/assets/ContextHandoffEndpointLabel-CsF_maM_.js +4 -0
- package/dist/client/assets/{DiagnosticsSettings-BmrqOKMe.js → DiagnosticsSettings-Bq2l-C4J.js} +2 -2
- package/dist/client/assets/{DialogHandle-pelzaaiH.js → DialogHandle-DuKTleCw.js} +1 -1
- package/dist/client/assets/{DialogPopup-BLM0vN4N.js → DialogPopup-Dt7DzTWv.js} +1 -1
- package/dist/client/assets/DialogRoot-DRyawL6l.js +1 -0
- package/dist/client/assets/{DialogTitle-BvIjMtMm.js → DialogTitle-BaxfPC6e.js} +1 -1
- package/dist/client/assets/DialogTrigger-D0PJ8bRT.js +1 -0
- package/dist/client/assets/{DialogViewport-Cz0OadGI.js → DialogViewport-C3B2JZWQ.js} +1 -1
- package/dist/client/assets/DraftChatThreadRouteView-B8YiD5NP.js +1 -0
- package/dist/client/assets/ETHK-B5-H-1MLb5v9x.bcmap +0 -0
- package/dist/client/assets/{ExternalIdentityWeb.logic-3rlDV7lT.js → ExternalIdentityWeb.logic-CrcNfdHK.js} +1 -1
- package/dist/client/assets/FoxitDingbats-BaQLufoW.pfb +0 -0
- package/dist/client/assets/FoxitFixed-Dyd5Nipw.pfb +0 -0
- package/dist/client/assets/FoxitFixedBold-D5TuYRwj.pfb +0 -0
- package/dist/client/assets/FoxitFixedBoldItalic-BqlXQ_Yv.pfb +0 -0
- package/dist/client/assets/FoxitFixedItalic-DqjQkmbS.pfb +0 -0
- package/dist/client/assets/FoxitSerif-qbgiDIe-.pfb +0 -0
- package/dist/client/assets/FoxitSerifBold-DZZ4CclT.pfb +0 -0
- package/dist/client/assets/FoxitSerifBoldItalic-DSQtwd_X.pfb +0 -0
- package/dist/client/assets/FoxitSerifItalic-CQs5lx9Y.pfb +0 -0
- package/dist/client/assets/FoxitSymbol-BVtbc20u.pfb +0 -0
- package/dist/client/assets/GBK-EUC-H-CAORqCkf.bcmap +0 -0
- package/dist/client/assets/GBK2K-H-Cv55KPk8.bcmap +0 -0
- package/dist/client/assets/GBKp-EUC-H-CElrnV5g.bcmap +0 -0
- package/dist/client/assets/GBT-EUC-H-BTsQIL1M.bcmap +0 -0
- package/dist/client/assets/GBT-H-DL9h-WkS.bcmap +0 -0
- package/dist/client/assets/GBTpc-EUC-H-DnIh5WJ3.bcmap +0 -0
- package/dist/client/assets/{GlassSurface-CEVIdyfP.js → GlassSurface-CBIEgwt1.js} +1 -1
- package/dist/client/assets/HKscs-B5-H-CXbBbq6g.bcmap +0 -0
- package/dist/client/assets/{HostedConnectionControls-r9cyZPyF.js → HostedConnectionControls-DOpTlXzE.js} +1 -1
- package/dist/client/assets/{HostedHubRoot-BkfafJ5x.js → HostedHubRoot-C1jq8cM6.js} +2 -2
- package/dist/client/assets/{HostedNativeAuthorizationRoute-CqHuW853.js → HostedNativeAuthorizationRoute-Clw1DHQW.js} +2 -2
- package/dist/client/assets/{HostedNodeRenameDialog-C7m-nvTj.js → HostedNodeRenameDialog-Bd_Qu_ek.js} +1 -1
- package/dist/client/assets/{HostedRelayTrustNotice-DNZQyAX0.js → HostedRelayTrustNotice-CGcBpT9m.js} +1 -1
- package/dist/client/assets/{IntegrationsSettingsPanel-hul3ysgL.js → IntegrationsSettingsPanel-J0qODRW-.js} +2 -2
- package/dist/client/assets/KSC-Johab-H-CGtV3MPT.bcmap +0 -0
- package/dist/client/assets/{KeybindingsSettings-Cme6omBM.js → KeybindingsSettings-CwxIHsFy.js} +1 -1
- package/dist/client/assets/{LazyBrowserPanel-COJFwNK7.js → LazyBrowserPanel-VNAn6AUL.js} +2 -2
- package/dist/client/assets/LiberationSans-Bold-BPt4bU5Z.ttf +0 -0
- package/dist/client/assets/LiberationSans-BoldItalic-Bj53-jFw.ttf +0 -0
- package/dist/client/assets/LiberationSans-Italic-5QhGB3P9.ttf +0 -0
- package/dist/client/assets/LiberationSans-Regular-cbskN6YR.ttf +0 -0
- package/dist/client/assets/McpServersSettings-1pkIeutq.js +6 -0
- package/dist/client/assets/MobileSheet-DddfN8c2.js +1 -0
- package/dist/client/assets/{NodeSecuritySettings-CwT5nEW9.js → NodeSecuritySettings-BOIZeFZo.js} +1 -1
- package/dist/client/assets/OpinionatedPluginsSettings-oTIrPtIb.js +1 -0
- package/dist/client/assets/PdfAttachmentPreview-BCMO9OHD.js +54 -0
- package/dist/client/assets/{PhoneGetAppInterstitial-BBnGXVkR.js → PhoneGetAppInterstitial-0EOj-PbW.js} +1 -1
- package/dist/client/assets/PhoneHome-Cg7l3b1T.js +1 -0
- package/dist/client/assets/{PhoneSettingsSurface-DdVCndyt.js → PhoneSettingsSurface-BXAUtZ9M.js} +2 -2
- package/dist/client/assets/ProvidersSettingsPanel-BaJgypXu.js +1 -0
- package/dist/client/assets/{QuitShortcutFeedback-mF7X0WMD.js → QuitShortcutFeedback-DgJFEd6b.js} +1 -1
- package/dist/client/assets/{RedactedSensitiveText-DovqFcmM.js → RedactedSensitiveText-D1VC2xa7.js} +1 -1
- package/dist/client/assets/RootAppShell-D2RjZ9jQ.js +7 -0
- package/dist/client/assets/Separator-CeMncdkm.js +1 -0
- package/dist/client/assets/SettingsDialog-B2hEb6u8.js +2 -0
- package/dist/client/assets/SettingsPanels-DtWLQDne.js +3 -0
- package/dist/client/assets/{SettingsPanels.editor-d-rVlbeN.js → SettingsPanels.editor-DJRckD71.js} +1 -1
- package/dist/client/assets/SourceControlSettings-IpoZrjt5.js +1 -0
- package/dist/client/assets/StatisticsPage-CUpE_5Gr.js +1 -0
- package/dist/client/assets/StatisticsPanel-CHrAY5AP.js +1 -0
- package/dist/client/assets/StatisticsSettingsLink-bGWuxNG3.js +1 -0
- package/dist/client/assets/{ThreadTerminalDrawer-DaLrSTn9.js → ThreadTerminalDrawer-BEv83xrk.js} +3 -3
- package/dist/client/assets/ThreadWorkspacePanel-BdMdJVHJ.js +2073 -0
- package/dist/client/assets/UniCNS-UCS2-H-DWzv8UhH.bcmap +0 -0
- package/dist/client/assets/UniCNS-UTF16-H-Bw0JKgCq.bcmap +0 -0
- package/dist/client/assets/UniCNS-UTF32-H-IE_GrH2i.bcmap +0 -0
- package/dist/client/assets/UniCNS-UTF8-H-BbLcFh6Q.bcmap +0 -0
- package/dist/client/assets/UniGB-UCS2-H-D7xzRvZN.bcmap +0 -0
- package/dist/client/assets/UniGB-UTF16-H-DKjbEwc0.bcmap +0 -0
- package/dist/client/assets/UniGB-UTF32-H-Behfouj5.bcmap +0 -0
- package/dist/client/assets/UniGB-UTF8-H-EROft1ro.bcmap +0 -0
- package/dist/client/assets/UniJIS-UCS2-H-2DbZ0MaQ.bcmap +0 -0
- package/dist/client/assets/UniJIS-UTF16-H-BlDDPdCK.bcmap +0 -0
- package/dist/client/assets/UniJIS-UTF32-H-BIQPWkjv.bcmap +0 -0
- package/dist/client/assets/UniJIS-UTF8-H-CGusholx.bcmap +0 -0
- package/dist/client/assets/UniJIS2004-UTF16-H-KXixH-HI.bcmap +0 -0
- package/dist/client/assets/UniJIS2004-UTF32-H-CXrD-9YE.bcmap +0 -0
- package/dist/client/assets/UniJIS2004-UTF8-H-BkOctZjn.bcmap +0 -0
- package/dist/client/assets/UniJISX0213-UTF32-H-BavAhZjb.bcmap +0 -0
- package/dist/client/assets/UniJISX02132004-UTF32-H-DAH-AgUq.bcmap +0 -0
- package/dist/client/assets/UniKS-UCS2-H-YeUc7k1L.bcmap +0 -0
- package/dist/client/assets/UniKS-UTF16-H-B0dvB-Td.bcmap +0 -0
- package/dist/client/assets/UniKS-UTF32-H-olR_LtmR.bcmap +0 -0
- package/dist/client/assets/UniKS-UTF8-H-CbpebD-y.bcmap +0 -0
- package/dist/client/assets/{activity-bn_fBQGf.js → activity-BmRcsTyL.js} +1 -1
- package/dist/client/assets/{alert-BmLJh6DH.js → alert-C5UiA2xk.js} +1 -1
- package/dist/client/assets/{appChrome-Dy57Ve9N.js → appChrome-CsZ2ylc1.js} +1 -1
- package/dist/client/assets/{arrow-left-pzj1cbX3.js → arrow-left-CSz-z20j.js} +1 -1
- package/dist/client/assets/{arrow-right-BW5jU-vo.js → arrow-right-DEi91hao.js} +1 -1
- package/dist/client/assets/{arrow-up-right-AfC5AaSO.js → arrow-up-right-D7SpcTV9.js} +1 -1
- package/dist/client/assets/authorization-B1YXfej3.js +1 -0
- package/dist/client/assets/badge-BjvTY7-E.js +1 -0
- package/dist/client/assets/{bot-CsKkSRlb.js → bot-SC4UGZyw.js} +1 -1
- package/dist/client/assets/{capabilities-DskyVNd2.js → capabilities-BCkDNe83.js} +1 -1
- package/dist/client/assets/{chart-column-DhvWXIiH.js → chart-column-C08MuLgY.js} +1 -1
- package/dist/client/assets/chevron-right-DgB53U1_.js +1 -0
- package/dist/client/assets/{clipboard-copy-fJnfdl4H.js → clipboard-copy-D74Wvnon.js} +1 -1
- package/dist/client/assets/{data-list-_E-Al1sf.js → data-list-CZ4Utnfl.js} +1 -1
- package/dist/client/assets/{desktopWorkspace-DycXKuMm.js → desktopWorkspace-DVfn9ZT_.js} +1 -1
- package/dist/client/assets/{download-CLQzE1di.js → download-Dio40wIJ.js} +1 -1
- package/dist/client/assets/editorPreferences-2dG4uloq.js +1 -0
- package/dist/client/assets/{empty-YXFtCUDN.js → empty-6LExKYgQ.js} +1 -1
- package/dist/client/assets/{group-DOCkUmuY.js → group-D_mu0Kiq.js} +1 -1
- package/dist/client/assets/{hostedConnectionCoordinator-JZ1dLx4v.js → hostedConnectionCoordinator-YkDLnATK.js} +1 -1
- package/dist/client/assets/{hubRoutes-C2S5of9_.js → hubRoutes-D3quWvU7.js} +1 -1
- package/dist/client/assets/{index-CvRFRkBK.js → index-7MTgf8YI.js} +2 -2
- package/dist/client/assets/{input-C2xv8mMt.js → input-CfVJycb1.js} +1 -1
- package/dist/client/assets/jbig2-CNFLgX9F.wasm +0 -0
- package/dist/client/assets/kbd-uFa_tY-L.js +1 -0
- package/dist/client/assets/{key-round-CYcb9lAa.js → key-round-C-oUSjpF.js} +1 -1
- package/dist/client/assets/{layers-CGlOWYxu.js → layers-Co2a5C1k.js} +1 -1
- package/dist/client/assets/{log-out-CZW2EpNJ.js → log-out-pWFhbvwr.js} +1 -1
- package/dist/client/assets/{logging-BpmZOfmu.js → logging-JMrwaeZh.js} +1 -1
- package/dist/client/assets/main-BNPtp9Z0.css +2 -0
- package/dist/client/assets/main-CGeD6yVE.js +9 -0
- package/dist/client/assets/openjpeg-MeY6OQBn.wasm +0 -0
- package/dist/client/assets/{palette-CQOuNfSO.js → palette-B_6C4fD6.js} +1 -1
- package/dist/client/assets/pdf.worker.min-Dswkl-cV.mjs +29 -0
- package/dist/client/assets/{play-CPVy9wwV.js → play-DFtc9zBy.js} +1 -1
- package/dist/client/assets/primary-CNUdEGcv.js +2 -0
- package/dist/client/assets/providerDriverMeta-Cg_XLUfo.js +1 -0
- package/dist/client/assets/{ProviderModelPicker-DoYEUZrn.js → providerInstances-JaDrOWPZ.js} +1 -1
- package/dist/client/assets/providerModels-5uOq3qPC.js +1 -0
- package/dist/client/assets/qcms_bg-3PJi_GXR.wasm +0 -0
- package/dist/client/assets/{qr-code-BPqDlVMn.js → qr-code-BU354aLS.js} +1 -1
- package/dist/client/assets/{qr-code-C6BVTc4V.js → qr-code-DaHWf7Oq.js} +1 -1
- package/dist/client/assets/quickjs-eval-zJSp5SB4.wasm +0 -0
- package/dist/client/assets/radio-group-DKaA1eey.js +2 -0
- package/dist/client/assets/{refresh-cw-B5Cz1z3e.js → refresh-cw-CY5BeUEr.js} +1 -1
- package/dist/client/assets/runtime-BKneT96Q.js +17 -0
- package/dist/client/assets/{save-C7zM6ey6.js → save-DIHMjHXd.js} +1 -1
- package/dist/client/assets/{scroll-area-5OU_pvTW.js → scroll-area-Cq4SX9P8.js} +1 -1
- package/dist/client/assets/{scrollEdges-qnEXfIOg.js → scrollEdges-BaWRjrac.js} +1 -1
- package/dist/client/assets/{separator-B5HfRiaO.js → separator-BN705fC0.js} +1 -1
- package/dist/client/assets/{settingsLayout-CfKq88KD.js → settingsLayout-DQERzSce.js} +1 -1
- package/dist/client/assets/{sheet-B9gQDy_I.js → sheet-CFvRY7T6.js} +1 -1
- package/dist/client/assets/{shield-rdjnBE2Q.js → shield-Zn2kFj5M.js} +1 -1
- package/dist/client/assets/{shield-alert-7yBlEyOs.js → shield-alert-DMB5gKiC.js} +1 -1
- package/dist/client/assets/{shield-check-CnKgVJ0F.js → shield-check-DyNf6Bky.js} +1 -1
- package/dist/client/assets/{sidebar-BdvL1Pbj.js → sidebar-Bsh64sLK.js} +1 -1
- package/dist/client/assets/sidebarProjectFolders-CQbpO9ZI.js +4 -0
- package/dist/client/assets/{sidebarStatusText-CZKsUFBD.js → sidebarStatusText-DCo-whyK.js} +1 -1
- package/dist/client/assets/{skeleton-CoyLqyaB.js → skeleton-DEuowfjY.js} +1 -1
- package/dist/client/assets/{smartphone-CBgpMHXR.js → smartphone-BLWJ7C9-.js} +1 -1
- package/dist/client/assets/{sparkles-w-UZXQx1.js → sparkles-DAXDXp_s.js} +1 -1
- package/dist/client/assets/src-DPpEXU6w.js +14 -0
- package/dist/client/assets/{star-BZ-RtSFD.js → star-CjQxHYbD.js} +1 -1
- package/dist/client/assets/switch-LahPAvrd.js +48 -0
- package/dist/client/assets/{toggle-DVGrNHjq.js → toggle-45lsrmyi.js} +1 -1
- package/dist/client/assets/{toggle-group-CNDOfNhH.js → toggle-group-D5pl24ED.js} +1 -1
- package/dist/client/assets/{tokenModePresentation-CQNdC9CW.js → tokenModePresentation-CPUsUGY4.js} +1 -1
- package/dist/client/assets/tooltip-B8-izeMo.js +1 -0
- package/dist/client/assets/{unplug-CRUwFNFw.js → unplug-Bjpxv8i0.js} +1 -1
- package/dist/client/assets/usage-8vQUo0mr.js +1 -0
- package/dist/client/assets/useAppSidebarCollapsed-uwz9Hlgc.js +1 -0
- package/dist/client/assets/useBaseUiId-BtuL7q77.js +1 -0
- package/dist/client/assets/useLabelableId-N_LsKNbf.js +1 -0
- package/dist/client/assets/useNavigate-DADLi29i.js +1 -0
- package/dist/client/assets/usePhoneThreadActions-B9_HK7tn.js +1 -0
- package/dist/client/assets/usePopupViewport-w8BEny9j.js +1 -0
- package/dist/client/assets/useScrollLock-bCmUzTgK.js +1 -0
- package/dist/client/assets/useStatistics-DJtONxT0.js +55 -0
- package/dist/client/assets/useTriggerFocusGuards-C7JWO2LT.js +1 -0
- package/dist/client/assets/useValueChanged-DkoUO9bY.js +1 -0
- package/dist/client/assets/{user-round-DStbWN3z.js → user-round-DEWIPpNs.js} +1 -1
- package/dist/client/assets/{vscode-icons-BihBo3tb.js → vscode-icons-DTH-Vj-_.js} +1 -1
- package/dist/client/assets/workspaceMetadataProjection-BnpxBe8S.js +1 -0
- package/dist/client/assets/{wrench-BBIgGxy9.js → wrench-36WYdK_a.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/collectUint8StreamText-BAUF-vzz.mjs +37 -0
- package/dist/collectUint8StreamText-vagpNUMJ.cjs +42 -0
- package/dist/deviceHostWorker-C-BSnmkn.mjs +167 -0
- package/dist/deviceHostWorker-CYnrwfrv.cjs +169 -0
- package/dist/git-C4iJMbBu.mjs +132 -0
- package/dist/git-irmB8_k7.cjs +218 -0
- package/dist/{makeManagedServerProvider-CwYhl_P-.mjs → makeManagedServerProvider-BINne1KE.mjs} +3 -38
- package/dist/{makeManagedServerProvider-Dy2Ny9tk.cjs → makeManagedServerProvider-DGbd8BhM.cjs} +1 -60
- package/dist/resource-monitor/ryco-resource-monitor +0 -0
- package/dist/resource-monitor/ryco-resource-monitor.exe +0 -0
- package/dist/resource-monitor/win32-arm64/ryco-resource-monitor.exe +0 -0
- package/dist/resource-monitor/win32-x64/ryco-resource-monitor.exe +0 -0
- package/dist/runtimeSession-Bj0OUcNJ.cjs +63 -0
- package/dist/runtimeSession-CA6cLWg0.mjs +40 -0
- package/dist/schemaJson-CaG1bOvo.mjs +49 -0
- package/dist/schemaJson-CuhFxa8p.cjs +66 -0
- package/dist/{collectUint8StreamText-whblCEfg.cjs → src-BlzIcnVG.cjs} +522 -116
- package/dist/{collectUint8StreamText-CE1Re5Ij.mjs → src-DtEOcXdl.mjs} +350 -94
- package/package.json +1 -1
- package/dist/AcpNativeLogging-CA6XYzIS.cjs +0 -5130
- package/dist/AcpNativeLogging-D4-VoHrq.mjs +0 -5015
- package/dist/client/assets/AccountSettings-Bv57-JYy.js +0 -1
- package/dist/client/assets/AiFocusSettings-DCPHmJpA.js +0 -1
- package/dist/client/assets/AppearanceSettings-EmTrtb_U.js +0 -1
- package/dist/client/assets/ChatRightPanel-C1VD6GCV.js +0 -194
- package/dist/client/assets/CommandPaletteDialog-B_f3fKp7.js +0 -1
- package/dist/client/assets/CompositeRoot-B40iitmH.js +0 -1
- package/dist/client/assets/ConnectionsSettings-B9nfvgLG.js +0 -7
- package/dist/client/assets/ContextHandoffEndpointLabel-BSQOArMR.js +0 -4
- package/dist/client/assets/DialogRoot-CY6ZzEUS.js +0 -1
- package/dist/client/assets/DialogTrigger-CIeVAA-a.js +0 -1
- package/dist/client/assets/DraftChatThreadRouteView-DMIGMESb.js +0 -1
- package/dist/client/assets/McpServersSettings-CPeNF8_u.js +0 -6
- package/dist/client/assets/MobileSheet-BZo-RAfm.js +0 -1
- package/dist/client/assets/OpinionatedPluginsSettings-D8A1CbMG.js +0 -1
- package/dist/client/assets/PhoneHome-BTKOPVjw.js +0 -1
- package/dist/client/assets/ProvidersSettingsPanel-ldDCPVIY.js +0 -1
- package/dist/client/assets/RootAppShell-CzmEWO9w.js +0 -7
- package/dist/client/assets/Separator-BhAVTIOc.js +0 -1
- package/dist/client/assets/SettingsDialog-ByXgBN0U.js +0 -2
- package/dist/client/assets/SettingsPanels-Bgf4vkrJ.js +0 -3
- package/dist/client/assets/SourceControlSettings-dKw0FaN1.js +0 -1
- package/dist/client/assets/StatisticsPage-C2RuqDIK.js +0 -1
- package/dist/client/assets/StatisticsPanel-DqoXnrhQ.js +0 -1
- package/dist/client/assets/StatisticsSettingsLink-C_f31sb4.js +0 -1
- package/dist/client/assets/ThreadWorkspacePanel-BvRZIxZQ.js +0 -2073
- package/dist/client/assets/authorization-7xVVtCBu.js +0 -1
- package/dist/client/assets/badge-DnBuGHGL.js +0 -1
- package/dist/client/assets/chevron-right-CITtTwME.js +0 -1
- package/dist/client/assets/editorPreferences-Bg624RVT.js +0 -1
- package/dist/client/assets/kbd-4-4mGdIa.js +0 -1
- package/dist/client/assets/main-CC-U8LrA.css +0 -2
- package/dist/client/assets/main-CzDOnLFw.js +0 -9
- package/dist/client/assets/primary-CjhRI8fe.js +0 -2
- package/dist/client/assets/providerDriverMeta-BVHpFupf.js +0 -1
- package/dist/client/assets/providerModels-BsybzP4P.js +0 -1
- package/dist/client/assets/radio-group-C8qudOQH.js +0 -2
- package/dist/client/assets/runtime-Bxg7k81u.js +0 -17
- package/dist/client/assets/sidebarProjectFolders-BH8XBqNe.js +0 -4
- package/dist/client/assets/src-Bi-5Nw9C.js +0 -14
- package/dist/client/assets/switch-CEJEmLe7.js +0 -48
- package/dist/client/assets/tooltip-B7Z4qomY.js +0 -1
- package/dist/client/assets/useAppSidebarCollapsed-wq6czkNJ.js +0 -1
- package/dist/client/assets/useBaseUiId-OYaGjnkh.js +0 -1
- package/dist/client/assets/useLabelableId-VMc-yITe.js +0 -1
- package/dist/client/assets/useNavigate-DVi0rBlf.js +0 -1
- package/dist/client/assets/usePhoneThreadActions-CwwHikjB.js +0 -1
- package/dist/client/assets/usePopupViewport-BcSIK_ph.js +0 -1
- package/dist/client/assets/useScrollLock-BQf9VYJT.js +0 -1
- package/dist/client/assets/useStatistics-DczKdEfy.js +0 -55
- package/dist/client/assets/useTriggerFocusGuards-DjP-D0_a.js +0 -1
- package/dist/client/assets/useValueChanged-CRwCkFdy.js +0 -1
- package/dist/client/assets/workspaceMetadataProjection-j3BGlVOB.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{et as e,ft as t,st as n,ut as r}from"./src-DPpEXU6w.js";import{Nn as i}from"./runtime-BKneT96Q.js";function a(e){return typeof e==`object`&&!!e}function o(e){return typeof e==`string`&&e.length>0}function s(e,t){return a(e)&&e.environmentId===t}function c(e,t){if(!a(e)||e.schemaVersion!==1||!o(e.environmentId))return!1;let n=e.environmentId;if(t!==void 0&&n!==t||typeof e.capturedAt!=`number`||!Number.isFinite(e.capturedAt)||!Array.isArray(e.projects)||!Array.isArray(e.worktrees)||!Array.isArray(e.threads))return!1;let r=new Set;for(let t of e.projects){if(!s(t,n)||!o(t.id)||!o(t.name)||typeof t.cwd!=`string`||r.has(t.id))return!1;r.add(t.id)}let i=new Set;for(let t of e.worktrees){if(!s(t,n)||!o(t.id)||!o(t.projectId)||!r.has(t.projectId)||i.has(t.id))return!1;i.add(t.id)}let c=new Set;for(let t of e.threads){if(!s(t,n)||!o(t.id)||!o(t.projectId)||!r.has(t.projectId)||c.has(t.id)||t.worktreeId!=null&&!i.has(t.worktreeId))return!1;c.add(t.id)}return!0}function l(e){return new TextEncoder().encode(JSON.stringify(e)).byteLength}function u(e){return JSON.stringify([e.hubOrigin.replace(/\/+$/g,``).toLowerCase(),e.accountId,e.environmentId])}function d(e){let t=e.maxEntries??32,n=e.maxBytes??16777216;if(e.incoming.payloadBytes>n||t<1)return{accepted:!1,evict:[]};let r=u(e.incoming.namespace),i=e.existing.filter(e=>u(e.namespace)!==r).toSorted((e,t)=>e.updatedAt-t.updatedAt||u(e.namespace).localeCompare(u(t.namespace))),a=i.length+1,o=i.reduce((e,t)=>e+t.payloadBytes,0)+e.incoming.payloadBytes,s=[];for(let e of i){if(a<=t&&o<=n)break;s.push(e.namespace),--a,o-=e.payloadBytes}return{accepted:a<=t&&o<=n,evict:s}}function f(t,n=Date.now(),r=!1){let a=i.getState().environmentStateById[t];if(!a?.bootstrapComplete)return null;let o={schemaVersion:1,environmentId:t,capturedAt:n,projects:a.projectIds.flatMap(e=>{let n=a.projectById[e];return n?[{environmentId:t,id:n.id,name:n.name,cwd:n.cwd,repositoryIdentity:n.repositoryIdentity??null,createdAt:n.createdAt??null,updatedAt:n.updatedAt??null}]:[]}),worktrees:(a.worktreeIds??[]).flatMap(e=>{let n=a.worktreeById?.[e];return n?[{environmentId:t,id:n.id,projectId:n.projectId,title:n.title??null,branch:n.branch,worktreePath:n.worktreePath,workItemLabel:n.workItemKey??n.prTitle??n.issueTitle??null,pullRequestNumber:n.prNumber,archivedAt:n.archivedAt,updatedAt:n.updatedAt}]:[]}),threads:a.threadIds.flatMap(n=>{let i=a.sidebarThreadSummaryById[n];return i?[{environmentId:t,id:i.id,projectId:i.projectId,worktreeId:i.worktreeId?e.make(i.worktreeId):null,title:i.title,createdAt:i.createdAt,updatedAt:i.updatedAt??null,archivedAt:i.archivedAt,settledOverride:i.settledOverride??null,settledAt:i.settledAt??null,snoozedUntil:i.snoozedUntil??null,snoozedAt:i.snoozedAt??null,modelSelection:i.modelSelection??null,providerDriver:i.providerDriver??null,branch:i.branch,hasPendingApprovals:i.hasPendingApprovals,hasPendingUserInput:i.hasPendingUserInput,hasActionableProposedPlan:i.hasActionableProposedPlan,deliveryUnknown:r}]:[]})};return c(o,t)?o:null}function p(e,t){return e.environmentId===t?e:{...e,environmentId:t,projects:e.projects.map(e=>({...e,environmentId:t})),worktrees:e.worktrees.map(e=>({...e,environmentId:t})),threads:e.threads.map(e=>({...e,environmentId:t}))}}function m(e){return{capturedAt:e.capturedAt,projects:e.projects.map(e=>({id:e.id,environmentId:e.environmentId,name:e.name,cwd:e.cwd,repositoryIdentity:e.repositoryIdentity,defaultModelSelection:null,createdAt:e.createdAt??void 0,updatedAt:e.updatedAt??void 0,scripts:[]})),worktrees:e.worktrees.map(e=>({id:e.id,environmentId:e.environmentId,projectId:e.projectId,title:e.title,branch:e.branch,worktreePath:e.worktreePath,origin:`manual`,prNumber:e.pullRequestNumber,issueNumber:null,prTitle:e.workItemLabel,issueTitle:null,prState:null,prIsDraft:null,issueState:null,workItemProvider:null,workItemKey:null,workItemTitle:e.workItemLabel,workItemState:null,workItemStateName:null,workItemUrl:null,createdAt:e.updatedAt,updatedAt:e.updatedAt,archivedAt:e.archivedAt,manualPosition:0})),threads:e.threads.map(e=>{let i=e.providerDriver??r.make(`codex`),a=e.modelSelection??{instanceId:t(i),model:n[i]??`gpt-5.6-terra`};return{shell:{id:e.id,environmentId:e.environmentId,codexThreadId:null,projectId:e.projectId,title:e.title,modelSelection:a,runtimeMode:`full-access`,interactionMode:`default`,error:null,createdAt:e.createdAt,archivedAt:e.archivedAt,settledOverride:e.settledOverride??null,settledAt:e.settledAt??null,snoozedUntil:e.snoozedUntil??null,snoozedAt:e.snoozedAt??null,updatedAt:e.updatedAt??void 0,branch:e.branch,worktreePath:null,worktreeId:e.worktreeId},summary:{id:e.id,environmentId:e.environmentId,projectId:e.projectId,title:e.title,interactionMode:`default`,modelSelection:a,providerDriver:e.providerDriver,session:null,createdAt:e.createdAt,archivedAt:e.archivedAt,settledOverride:e.settledOverride??null,settledAt:e.settledAt??null,snoozedUntil:e.snoozedUntil??null,snoozedAt:e.snoozedAt??null,updatedAt:e.updatedAt??void 0,latestTurn:null,branch:e.branch,worktreePath:null,worktreeId:e.worktreeId,latestUserMessageAt:null,hasPendingApprovals:e.hasPendingApprovals,hasPendingUserInput:e.hasPendingUserInput,hasActionableProposedPlan:e.hasActionableProposedPlan}}})}}export{d as a,c as i,p as n,u as o,m as r,l as s,f as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Pa as e}from"./runtime-BKneT96Q.js";var t={name:`wrench`,size:24,node:[[`path`,{d:`M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z`,key:`1ngwbx`}]]};t.node;var n=e(t);export{n as t};
|
package/dist/client/index.html
CHANGED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { Effect, Stream } from "effect";
|
|
4
|
+
//#region src/stream/collectUint8StreamText.ts
|
|
5
|
+
const collectUint8StreamText = (input) => {
|
|
6
|
+
const decoder = new TextDecoder();
|
|
7
|
+
const maxBytes = input.maxBytes ?? Number.POSITIVE_INFINITY;
|
|
8
|
+
const truncatedMarker = input.truncatedMarker ?? "";
|
|
9
|
+
return input.stream.pipe(Stream.runFold(() => ({
|
|
10
|
+
text: "",
|
|
11
|
+
bytes: 0,
|
|
12
|
+
truncated: false
|
|
13
|
+
}), (state, chunk) => {
|
|
14
|
+
if (state.truncated) return state;
|
|
15
|
+
const remainingBytes = maxBytes - state.bytes;
|
|
16
|
+
if (remainingBytes <= 0) return {
|
|
17
|
+
...state,
|
|
18
|
+
text: `${state.text}${truncatedMarker}`,
|
|
19
|
+
truncated: true
|
|
20
|
+
};
|
|
21
|
+
const nextChunk = chunk.byteLength > remainingBytes ? chunk.slice(0, remainingBytes) : chunk;
|
|
22
|
+
const text = `${state.text}${decoder.decode(nextChunk, { stream: true })}`;
|
|
23
|
+
const bytes = state.bytes + nextChunk.byteLength;
|
|
24
|
+
const truncated = chunk.byteLength > remainingBytes;
|
|
25
|
+
return {
|
|
26
|
+
text: truncated ? `${text}${truncatedMarker}` : text,
|
|
27
|
+
bytes,
|
|
28
|
+
truncated
|
|
29
|
+
};
|
|
30
|
+
}), Effect.map((state) => ({
|
|
31
|
+
text: state.truncated ? state.text : `${state.text}${decoder.decode()}`,
|
|
32
|
+
bytes: state.bytes,
|
|
33
|
+
truncated: state.truncated
|
|
34
|
+
})));
|
|
35
|
+
};
|
|
36
|
+
//#endregion
|
|
37
|
+
export { collectUint8StreamText as t };
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
let effect = require("effect");
|
|
4
|
+
//#region src/stream/collectUint8StreamText.ts
|
|
5
|
+
const collectUint8StreamText = (input) => {
|
|
6
|
+
const decoder = new TextDecoder();
|
|
7
|
+
const maxBytes = input.maxBytes ?? Number.POSITIVE_INFINITY;
|
|
8
|
+
const truncatedMarker = input.truncatedMarker ?? "";
|
|
9
|
+
return input.stream.pipe(effect.Stream.runFold(() => ({
|
|
10
|
+
text: "",
|
|
11
|
+
bytes: 0,
|
|
12
|
+
truncated: false
|
|
13
|
+
}), (state, chunk) => {
|
|
14
|
+
if (state.truncated) return state;
|
|
15
|
+
const remainingBytes = maxBytes - state.bytes;
|
|
16
|
+
if (remainingBytes <= 0) return {
|
|
17
|
+
...state,
|
|
18
|
+
text: `${state.text}${truncatedMarker}`,
|
|
19
|
+
truncated: true
|
|
20
|
+
};
|
|
21
|
+
const nextChunk = chunk.byteLength > remainingBytes ? chunk.slice(0, remainingBytes) : chunk;
|
|
22
|
+
const text = `${state.text}${decoder.decode(nextChunk, { stream: true })}`;
|
|
23
|
+
const bytes = state.bytes + nextChunk.byteLength;
|
|
24
|
+
const truncated = chunk.byteLength > remainingBytes;
|
|
25
|
+
return {
|
|
26
|
+
text: truncated ? `${text}${truncatedMarker}` : text,
|
|
27
|
+
bytes,
|
|
28
|
+
truncated
|
|
29
|
+
};
|
|
30
|
+
}), effect.Effect.map((state) => ({
|
|
31
|
+
text: state.truncated ? state.text : `${state.text}${decoder.decode()}`,
|
|
32
|
+
bytes: state.bytes,
|
|
33
|
+
truncated: state.truncated
|
|
34
|
+
})));
|
|
35
|
+
};
|
|
36
|
+
//#endregion
|
|
37
|
+
Object.defineProperty(exports, "collectUint8StreamText", {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
get: function() {
|
|
40
|
+
return collectUint8StreamText;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { F as deviceHostOperations, I as isDeviceHostOperation, L as HostDeviceBackend, M as DeviceManager, N as DeviceHostRequest, P as decodeDeviceHostValue, R as makeBootOwnershipStore, bt as version, j as localDeviceHost, z as DeviceBackendError } from "./bin.mjs";
|
|
4
|
+
import { createServer } from "node:net";
|
|
5
|
+
import { Schema } from "effect";
|
|
6
|
+
import * as path$1 from "node:path";
|
|
7
|
+
import { homedir } from "node:os";
|
|
8
|
+
//#region src/device/deviceHostWorker.ts
|
|
9
|
+
/**
|
|
10
|
+
* SSH is the authentication boundary. No HTTP/RPC listener, provider sessions or
|
|
11
|
+
* browser credentials are started here. One coding node owns a Mac host at a time.
|
|
12
|
+
* A loopback port is only an OS-owned lock (connections receive no data).
|
|
13
|
+
*/
|
|
14
|
+
async function runDeviceHostWorker() {
|
|
15
|
+
if (process.platform !== "darwin") throw new Error("Device host requires macOS");
|
|
16
|
+
const lock = createServer((socket) => socket.destroy());
|
|
17
|
+
await new Promise((resolve, reject) => {
|
|
18
|
+
lock.once("error", reject);
|
|
19
|
+
lock.listen({
|
|
20
|
+
host: "127.0.0.1",
|
|
21
|
+
port: 49177,
|
|
22
|
+
exclusive: true
|
|
23
|
+
}, resolve);
|
|
24
|
+
});
|
|
25
|
+
const backend = new HostDeviceBackend([localDeviceHost()]);
|
|
26
|
+
const manager = new DeviceManager({
|
|
27
|
+
backend,
|
|
28
|
+
bootOwnership: makeBootOwnershipStore(path$1.join(process.env.RYCO_HOME?.trim() || path$1.join(homedir(), ".ryco"), "device-host", "boot-ownership.json"))
|
|
29
|
+
});
|
|
30
|
+
const session = await startDeviceHostSession(backend, process.stdin, process.stdout, manager).catch(async (error) => {
|
|
31
|
+
await manager.dispose();
|
|
32
|
+
lock.close();
|
|
33
|
+
throw error;
|
|
34
|
+
});
|
|
35
|
+
const stop = () => {
|
|
36
|
+
session.close().finally(() => lock.close());
|
|
37
|
+
};
|
|
38
|
+
process.once("SIGTERM", stop);
|
|
39
|
+
process.once("SIGINT", stop);
|
|
40
|
+
session.done.finally(() => lock.close());
|
|
41
|
+
}
|
|
42
|
+
/** Testable stdio lifecycle; EOF, timeout and protocol failure share one cleanup path. */
|
|
43
|
+
async function startDeviceHostSession(backend, input, output, manager = new DeviceManager({ backend })) {
|
|
44
|
+
let closed = false;
|
|
45
|
+
let queue = Promise.resolve();
|
|
46
|
+
let queued = 0;
|
|
47
|
+
let lastInput = Date.now();
|
|
48
|
+
let buffer = "";
|
|
49
|
+
const send = (value) => {
|
|
50
|
+
if (!closed) output.write(JSON.stringify(value) + "\n");
|
|
51
|
+
};
|
|
52
|
+
let finish;
|
|
53
|
+
const done = new Promise((resolve) => {
|
|
54
|
+
finish = resolve;
|
|
55
|
+
});
|
|
56
|
+
const close = () => {
|
|
57
|
+
if (closed) return done;
|
|
58
|
+
closed = true;
|
|
59
|
+
clearInterval(heartbeat);
|
|
60
|
+
input.pause();
|
|
61
|
+
queue.finally(async () => {
|
|
62
|
+
await manager.dispose();
|
|
63
|
+
input.destroy();
|
|
64
|
+
finish();
|
|
65
|
+
});
|
|
66
|
+
return done;
|
|
67
|
+
};
|
|
68
|
+
const heartbeat = setInterval(() => {
|
|
69
|
+
if (Date.now() - lastInput > 6e4) close();
|
|
70
|
+
}, 1e4);
|
|
71
|
+
input.setEncoding("utf8");
|
|
72
|
+
input.on("end", close);
|
|
73
|
+
input.on("error", close);
|
|
74
|
+
output.on("error", close);
|
|
75
|
+
try {
|
|
76
|
+
await manager.reclaimOrphanedBoots();
|
|
77
|
+
send({
|
|
78
|
+
type: "ready",
|
|
79
|
+
protocol: 1,
|
|
80
|
+
version
|
|
81
|
+
});
|
|
82
|
+
} catch (error) {
|
|
83
|
+
close();
|
|
84
|
+
throw error;
|
|
85
|
+
}
|
|
86
|
+
input.on("data", (chunk) => {
|
|
87
|
+
if (closed) return;
|
|
88
|
+
lastInput = Date.now();
|
|
89
|
+
buffer += chunk;
|
|
90
|
+
if (Buffer.byteLength(buffer) > 65536) {
|
|
91
|
+
close();
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
let newline;
|
|
95
|
+
while ((newline = buffer.indexOf("\n")) >= 0) {
|
|
96
|
+
const line = buffer.slice(0, newline);
|
|
97
|
+
buffer = buffer.slice(newline + 1);
|
|
98
|
+
try {
|
|
99
|
+
const raw = JSON.parse(line);
|
|
100
|
+
if (raw && typeof raw === "object" && "type" in raw && raw.type === "ping") {
|
|
101
|
+
send({ type: "pong" });
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const request = Schema.decodeUnknownSync(DeviceHostRequest)(raw);
|
|
105
|
+
if (!isDeviceHostOperation(request.method)) throw new Error("method");
|
|
106
|
+
const method = request.method;
|
|
107
|
+
const args = decodeDeviceHostValue(deviceHostOperations[method].input, request.args.map((v) => v === null ? void 0 : v));
|
|
108
|
+
if (++queued > 32) {
|
|
109
|
+
close();
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
queue = queue.then(async () => {
|
|
113
|
+
if (closed) return;
|
|
114
|
+
try {
|
|
115
|
+
let result;
|
|
116
|
+
const udid = args[0];
|
|
117
|
+
if (method === "boot") {
|
|
118
|
+
const boot = await manager.boot(udid);
|
|
119
|
+
if (boot.kind !== "booted") throw new DeviceBackendError("Remote host boot limit reached");
|
|
120
|
+
result = boot.device;
|
|
121
|
+
} else if (method === "shutdown") await manager.shutdown(udid);
|
|
122
|
+
else if (method === "attachStream") {
|
|
123
|
+
let awaitingKeyframe = false;
|
|
124
|
+
await backend.attachStream(udid, (frame) => {
|
|
125
|
+
if (!frame.codecConfig && output.writableLength > 4194304) {
|
|
126
|
+
awaitingKeyframe = true;
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
if (awaitingKeyframe && !frame.codecConfig && !frame.keyframe) return;
|
|
130
|
+
if (frame.keyframe) awaitingKeyframe = false;
|
|
131
|
+
send({
|
|
132
|
+
type: "frame",
|
|
133
|
+
udid,
|
|
134
|
+
streamId: request.id,
|
|
135
|
+
...frame,
|
|
136
|
+
data: Buffer.from(frame.data).toString("base64")
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
result = backend.geometry(udid);
|
|
140
|
+
} else result = await backend[method].apply(backend, args);
|
|
141
|
+
send({
|
|
142
|
+
id: request.id,
|
|
143
|
+
result: result ?? null
|
|
144
|
+
});
|
|
145
|
+
} catch (error) {
|
|
146
|
+
send({
|
|
147
|
+
id: request.id,
|
|
148
|
+
error: error instanceof Error ? error.message.slice(0, 2048) : "Device operation failed",
|
|
149
|
+
retryable: error instanceof DeviceBackendError && error.retryable
|
|
150
|
+
});
|
|
151
|
+
} finally {
|
|
152
|
+
queued -= 1;
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
} catch {
|
|
156
|
+
close();
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
return {
|
|
162
|
+
close,
|
|
163
|
+
done
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
//#endregion
|
|
167
|
+
export { runDeviceHostWorker };
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const require_rolldown_runtime = require("./rolldown-runtime-LGfotAqq.cjs");
|
|
4
|
+
const require_bin = require("./bin.cjs");
|
|
5
|
+
let node_net = require("node:net");
|
|
6
|
+
let effect = require("effect");
|
|
7
|
+
let node_path = require("node:path");
|
|
8
|
+
node_path = require_rolldown_runtime.__toESM(node_path, 1);
|
|
9
|
+
let node_os = require("node:os");
|
|
10
|
+
//#region src/device/deviceHostWorker.ts
|
|
11
|
+
/**
|
|
12
|
+
* SSH is the authentication boundary. No HTTP/RPC listener, provider sessions or
|
|
13
|
+
* browser credentials are started here. One coding node owns a Mac host at a time.
|
|
14
|
+
* A loopback port is only an OS-owned lock (connections receive no data).
|
|
15
|
+
*/
|
|
16
|
+
async function runDeviceHostWorker() {
|
|
17
|
+
if (process.platform !== "darwin") throw new Error("Device host requires macOS");
|
|
18
|
+
const lock = (0, node_net.createServer)((socket) => socket.destroy());
|
|
19
|
+
await new Promise((resolve, reject) => {
|
|
20
|
+
lock.once("error", reject);
|
|
21
|
+
lock.listen({
|
|
22
|
+
host: "127.0.0.1",
|
|
23
|
+
port: 49177,
|
|
24
|
+
exclusive: true
|
|
25
|
+
}, resolve);
|
|
26
|
+
});
|
|
27
|
+
const backend = new require_bin.HostDeviceBackend([require_bin.localDeviceHost()]);
|
|
28
|
+
const manager = new require_bin.DeviceManager({
|
|
29
|
+
backend,
|
|
30
|
+
bootOwnership: require_bin.makeBootOwnershipStore(node_path.join(process.env.RYCO_HOME?.trim() || node_path.join((0, node_os.homedir)(), ".ryco"), "device-host", "boot-ownership.json"))
|
|
31
|
+
});
|
|
32
|
+
const session = await startDeviceHostSession(backend, process.stdin, process.stdout, manager).catch(async (error) => {
|
|
33
|
+
await manager.dispose();
|
|
34
|
+
lock.close();
|
|
35
|
+
throw error;
|
|
36
|
+
});
|
|
37
|
+
const stop = () => {
|
|
38
|
+
session.close().finally(() => lock.close());
|
|
39
|
+
};
|
|
40
|
+
process.once("SIGTERM", stop);
|
|
41
|
+
process.once("SIGINT", stop);
|
|
42
|
+
session.done.finally(() => lock.close());
|
|
43
|
+
}
|
|
44
|
+
/** Testable stdio lifecycle; EOF, timeout and protocol failure share one cleanup path. */
|
|
45
|
+
async function startDeviceHostSession(backend, input, output, manager = new require_bin.DeviceManager({ backend })) {
|
|
46
|
+
let closed = false;
|
|
47
|
+
let queue = Promise.resolve();
|
|
48
|
+
let queued = 0;
|
|
49
|
+
let lastInput = Date.now();
|
|
50
|
+
let buffer = "";
|
|
51
|
+
const send = (value) => {
|
|
52
|
+
if (!closed) output.write(JSON.stringify(value) + "\n");
|
|
53
|
+
};
|
|
54
|
+
let finish;
|
|
55
|
+
const done = new Promise((resolve) => {
|
|
56
|
+
finish = resolve;
|
|
57
|
+
});
|
|
58
|
+
const close = () => {
|
|
59
|
+
if (closed) return done;
|
|
60
|
+
closed = true;
|
|
61
|
+
clearInterval(heartbeat);
|
|
62
|
+
input.pause();
|
|
63
|
+
queue.finally(async () => {
|
|
64
|
+
await manager.dispose();
|
|
65
|
+
input.destroy();
|
|
66
|
+
finish();
|
|
67
|
+
});
|
|
68
|
+
return done;
|
|
69
|
+
};
|
|
70
|
+
const heartbeat = setInterval(() => {
|
|
71
|
+
if (Date.now() - lastInput > 6e4) close();
|
|
72
|
+
}, 1e4);
|
|
73
|
+
input.setEncoding("utf8");
|
|
74
|
+
input.on("end", close);
|
|
75
|
+
input.on("error", close);
|
|
76
|
+
output.on("error", close);
|
|
77
|
+
try {
|
|
78
|
+
await manager.reclaimOrphanedBoots();
|
|
79
|
+
send({
|
|
80
|
+
type: "ready",
|
|
81
|
+
protocol: 1,
|
|
82
|
+
version: require_bin.version
|
|
83
|
+
});
|
|
84
|
+
} catch (error) {
|
|
85
|
+
close();
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
88
|
+
input.on("data", (chunk) => {
|
|
89
|
+
if (closed) return;
|
|
90
|
+
lastInput = Date.now();
|
|
91
|
+
buffer += chunk;
|
|
92
|
+
if (Buffer.byteLength(buffer) > 65536) {
|
|
93
|
+
close();
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
let newline;
|
|
97
|
+
while ((newline = buffer.indexOf("\n")) >= 0) {
|
|
98
|
+
const line = buffer.slice(0, newline);
|
|
99
|
+
buffer = buffer.slice(newline + 1);
|
|
100
|
+
try {
|
|
101
|
+
const raw = JSON.parse(line);
|
|
102
|
+
if (raw && typeof raw === "object" && "type" in raw && raw.type === "ping") {
|
|
103
|
+
send({ type: "pong" });
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const request = effect.Schema.decodeUnknownSync(require_bin.DeviceHostRequest)(raw);
|
|
107
|
+
if (!require_bin.isDeviceHostOperation(request.method)) throw new Error("method");
|
|
108
|
+
const method = request.method;
|
|
109
|
+
const args = require_bin.decodeDeviceHostValue(require_bin.deviceHostOperations[method].input, request.args.map((v) => v === null ? void 0 : v));
|
|
110
|
+
if (++queued > 32) {
|
|
111
|
+
close();
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
queue = queue.then(async () => {
|
|
115
|
+
if (closed) return;
|
|
116
|
+
try {
|
|
117
|
+
let result;
|
|
118
|
+
const udid = args[0];
|
|
119
|
+
if (method === "boot") {
|
|
120
|
+
const boot = await manager.boot(udid);
|
|
121
|
+
if (boot.kind !== "booted") throw new require_bin.DeviceBackendError("Remote host boot limit reached");
|
|
122
|
+
result = boot.device;
|
|
123
|
+
} else if (method === "shutdown") await manager.shutdown(udid);
|
|
124
|
+
else if (method === "attachStream") {
|
|
125
|
+
let awaitingKeyframe = false;
|
|
126
|
+
await backend.attachStream(udid, (frame) => {
|
|
127
|
+
if (!frame.codecConfig && output.writableLength > 4194304) {
|
|
128
|
+
awaitingKeyframe = true;
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (awaitingKeyframe && !frame.codecConfig && !frame.keyframe) return;
|
|
132
|
+
if (frame.keyframe) awaitingKeyframe = false;
|
|
133
|
+
send({
|
|
134
|
+
type: "frame",
|
|
135
|
+
udid,
|
|
136
|
+
streamId: request.id,
|
|
137
|
+
...frame,
|
|
138
|
+
data: Buffer.from(frame.data).toString("base64")
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
result = backend.geometry(udid);
|
|
142
|
+
} else result = await backend[method].apply(backend, args);
|
|
143
|
+
send({
|
|
144
|
+
id: request.id,
|
|
145
|
+
result: result ?? null
|
|
146
|
+
});
|
|
147
|
+
} catch (error) {
|
|
148
|
+
send({
|
|
149
|
+
id: request.id,
|
|
150
|
+
error: error instanceof Error ? error.message.slice(0, 2048) : "Device operation failed",
|
|
151
|
+
retryable: error instanceof require_bin.DeviceBackendError && error.retryable
|
|
152
|
+
});
|
|
153
|
+
} finally {
|
|
154
|
+
queued -= 1;
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
} catch {
|
|
158
|
+
close();
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
return {
|
|
164
|
+
close,
|
|
165
|
+
done
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
//#endregion
|
|
169
|
+
exports.runDeviceHostWorker = runDeviceHostWorker;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { Mr as DEFAULT_WORKTREE_BRANCH_PREFIX } from "./src-DtEOcXdl.mjs";
|
|
4
|
+
import { n as detectSourceControlProviderFromRemoteUrl } from "./sourceControl-BiEBxN01.mjs";
|
|
5
|
+
import * as Effect from "effect/Effect";
|
|
6
|
+
import * as Random from "effect/Random";
|
|
7
|
+
//#region ../../packages/shared/src/git.ts
|
|
8
|
+
const WORKTREE_BRANCH_PREFIX = DEFAULT_WORKTREE_BRANCH_PREFIX;
|
|
9
|
+
const LEGACY_WORKTREE_BRANCH_PREFIX = "ryco";
|
|
10
|
+
/**
|
|
11
|
+
* Sanitize an arbitrary string into a valid, lowercase git refName fragment.
|
|
12
|
+
* Strips quotes, collapses separators, limits to 64 chars.
|
|
13
|
+
*/
|
|
14
|
+
function sanitizeBranchFragment(raw) {
|
|
15
|
+
const branchFragment = raw.trim().toLowerCase().replace(/['"`]/g, "").replace(/^[./\s_-]+|[./\s_-]+$/g, "").replace(/[^a-z0-9/_-]+/g, "-").replace(/\/+/g, "/").replace(/-+/g, "-").replace(/^[./_-]+|[./_-]+$/g, "").slice(0, 64).replace(/[./_-]+$/g, "");
|
|
16
|
+
return branchFragment.length > 0 ? branchFragment : "update";
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Sanitize a string into a `feature/…` refName name.
|
|
20
|
+
* Preserves an existing `feature/` prefix or slash-separated namespace.
|
|
21
|
+
*/
|
|
22
|
+
function sanitizeFeatureBranchName(raw) {
|
|
23
|
+
const sanitized = sanitizeBranchFragment(raw);
|
|
24
|
+
if (sanitized.includes("/")) return sanitized.startsWith("feature/") ? sanitized : `feature/${sanitized}`;
|
|
25
|
+
return `feature/${sanitized}`;
|
|
26
|
+
}
|
|
27
|
+
const AUTO_FEATURE_BRANCH_FALLBACK = "feature/update";
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a unique `feature/…` refName name that doesn't collide with
|
|
30
|
+
* any existing refName. Appends a numeric suffix when needed.
|
|
31
|
+
*/
|
|
32
|
+
function resolveAutoFeatureBranchName(existingBranchNames, preferredBranch) {
|
|
33
|
+
const preferred = preferredBranch?.trim();
|
|
34
|
+
const resolvedBase = sanitizeFeatureBranchName(preferred && preferred.length > 0 ? preferred : AUTO_FEATURE_BRANCH_FALLBACK);
|
|
35
|
+
const existingNames = new Set(existingBranchNames.map((refName) => refName.toLowerCase()));
|
|
36
|
+
if (!existingNames.has(resolvedBase)) return resolvedBase;
|
|
37
|
+
let suffix = 2;
|
|
38
|
+
while (existingNames.has(`${resolvedBase}-${suffix}`)) suffix += 1;
|
|
39
|
+
return `${resolvedBase}-${suffix}`;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Strip the remote prefix from a remote ref such as `origin/feature/demo`.
|
|
43
|
+
*/
|
|
44
|
+
function deriveLocalBranchNameFromRemoteRef(branchName) {
|
|
45
|
+
const firstSeparatorIndex = branchName.indexOf("/");
|
|
46
|
+
if (firstSeparatorIndex <= 0 || firstSeparatorIndex === branchName.length - 1) return branchName;
|
|
47
|
+
return branchName.slice(firstSeparatorIndex + 1);
|
|
48
|
+
}
|
|
49
|
+
/** Prefixes are validated by WorktreeBranchPrefix at the server settings boundary. */
|
|
50
|
+
function prefixWorktreeBranch(fragment, prefix) {
|
|
51
|
+
return prefix.length > 0 ? `${prefix}/${fragment}` : fragment;
|
|
52
|
+
}
|
|
53
|
+
function buildTemporaryWorktreeBranchName(prefix = WORKTREE_BRANCH_PREFIX) {
|
|
54
|
+
return prefixWorktreeBranch(Effect.runSync(Random.nextIntBetween(0, 4294967295)).toString(16).padStart(8, "0"), prefix);
|
|
55
|
+
}
|
|
56
|
+
/** Returns the original namespace, retaining legacy drafts after a settings change. */
|
|
57
|
+
function extractTemporaryWorktreeBranchPrefix(refName, prefix = WORKTREE_BRANCH_PREFIX) {
|
|
58
|
+
const ref = refName.trim();
|
|
59
|
+
for (const candidate of [prefix, LEGACY_WORKTREE_BRANCH_PREFIX]) {
|
|
60
|
+
const namespace = candidate.length > 0 ? `${candidate}/` : "";
|
|
61
|
+
if (ref.toLowerCase().startsWith(namespace.toLowerCase()) && /^[0-9a-f]{8}$/i.test(ref.slice(namespace.length))) return ref.slice(0, candidate.length);
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
function isTemporaryWorktreeBranch(refName, prefix = WORKTREE_BRANCH_PREFIX) {
|
|
66
|
+
return extractTemporaryWorktreeBranchPrefix(refName, prefix) !== null;
|
|
67
|
+
}
|
|
68
|
+
/** An empty namespace cannot establish ownership of arbitrary named branches. */
|
|
69
|
+
function isManagedWorktreeBranch(refName, prefix = WORKTREE_BRANCH_PREFIX) {
|
|
70
|
+
const ref = refName.trim();
|
|
71
|
+
return [prefix, LEGACY_WORKTREE_BRANCH_PREFIX].some((candidate) => candidate.length > 0 && ref.startsWith(`${candidate}/`) && ref.length > candidate.length + 1) || isTemporaryWorktreeBranch(ref, prefix);
|
|
72
|
+
}
|
|
73
|
+
function buildGeneratedWorktreeBranchName(raw, prefix = WORKTREE_BRANCH_PREFIX) {
|
|
74
|
+
const normalized = raw.trim().replace(/^refs\/heads\//i, "").replace(/['"`]/g, "");
|
|
75
|
+
const existingPrefix = [prefix, LEGACY_WORKTREE_BRANCH_PREFIX].find((candidate) => candidate.length > 0 && normalized.toLowerCase().startsWith(`${candidate.toLowerCase()}/`));
|
|
76
|
+
return prefixWorktreeBranch(sanitizeBranchFragment(existingPrefix === void 0 ? normalized : normalized.slice(existingPrefix.length + 1)), prefix);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Normalize a git remote URL into a stable comparison key.
|
|
80
|
+
*/
|
|
81
|
+
function normalizeGitRemoteUrl(value) {
|
|
82
|
+
const normalized = value.trim().replace(/\/+$/g, "").replace(/\.git$/i, "").toLowerCase();
|
|
83
|
+
if (/^(?:ssh|https?|git):\/\//i.test(normalized)) try {
|
|
84
|
+
const url = new URL(normalized);
|
|
85
|
+
const repositoryPath = url.pathname.split("/").filter((segment) => segment.length > 0).join("/");
|
|
86
|
+
if (url.hostname && repositoryPath.includes("/")) return `${url.hostname}/${repositoryPath}`;
|
|
87
|
+
} catch {
|
|
88
|
+
return normalized;
|
|
89
|
+
}
|
|
90
|
+
const scpStyleHostAndPath = /^git@([^:/\s]+)[:/]([^/\s]+(?:\/[^/\s]+)+)$/i.exec(normalized);
|
|
91
|
+
if (scpStyleHostAndPath?.[1] && scpStyleHostAndPath[2]) return `${scpStyleHostAndPath[1]}/${scpStyleHostAndPath[2]}`;
|
|
92
|
+
return normalized;
|
|
93
|
+
}
|
|
94
|
+
function deriveLocalBranchNameCandidatesFromRemoteRef(branchName, remoteName) {
|
|
95
|
+
const candidates = /* @__PURE__ */ new Set();
|
|
96
|
+
const firstSlashCandidate = deriveLocalBranchNameFromRemoteRef(branchName);
|
|
97
|
+
if (firstSlashCandidate.length > 0) candidates.add(firstSlashCandidate);
|
|
98
|
+
if (remoteName) {
|
|
99
|
+
const remotePrefix = `${remoteName}/`;
|
|
100
|
+
if (branchName.startsWith(remotePrefix) && branchName.length > remotePrefix.length) candidates.add(branchName.slice(remotePrefix.length));
|
|
101
|
+
}
|
|
102
|
+
return [...candidates];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Hide `origin/*` remote refs when a matching local refName already exists.
|
|
106
|
+
*/
|
|
107
|
+
function dedupeRemoteBranchesWithLocalMatches(refs) {
|
|
108
|
+
const localBranchNames = new Set(refs.filter((refName) => !refName.isRemote).map((refName) => refName.name));
|
|
109
|
+
return refs.filter((refName) => {
|
|
110
|
+
if (!refName.isRemote) return true;
|
|
111
|
+
if (refName.remoteName !== "origin") return true;
|
|
112
|
+
return !deriveLocalBranchNameCandidatesFromRemoteRef(refName.name, refName.remoteName).some((candidate) => localBranchNames.has(candidate));
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
function detectSourceControlProviderFromGitRemoteUrl(remoteUrl) {
|
|
116
|
+
return detectSourceControlProviderFromRemoteUrl(remoteUrl);
|
|
117
|
+
}
|
|
118
|
+
const EMPTY_GIT_STATUS_REMOTE = {
|
|
119
|
+
hasUpstream: false,
|
|
120
|
+
aheadCount: 0,
|
|
121
|
+
behindCount: 0,
|
|
122
|
+
aheadOfDefaultCount: 0,
|
|
123
|
+
pr: null
|
|
124
|
+
};
|
|
125
|
+
function mergeGitStatusParts(local, remote) {
|
|
126
|
+
return {
|
|
127
|
+
...local,
|
|
128
|
+
...remote ?? EMPTY_GIT_STATUS_REMOTE
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
//#endregion
|
|
132
|
+
export { detectSourceControlProviderFromGitRemoteUrl as a, isTemporaryWorktreeBranch as c, prefixWorktreeBranch as d, resolveAutoFeatureBranchName as f, dedupeRemoteBranchesWithLocalMatches as i, mergeGitStatusParts as l, sanitizeFeatureBranchName as m, buildGeneratedWorktreeBranchName as n, extractTemporaryWorktreeBranchPrefix as o, sanitizeBranchFragment as p, buildTemporaryWorktreeBranchName as r, isManagedWorktreeBranch as s, WORKTREE_BRANCH_PREFIX as t, normalizeGitRemoteUrl as u };
|