ryco-cli 0.1.24 → 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-DSPEmiwq.mjs → AcpAdapter-BemMQNbj.mjs} +102 -604
- package/dist/{GrokDriver-RyyFeh_q.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-CrvgKNf2.cjs → AzureDevOpsSourceControlProvider-B9N_8NJg.cjs} +14 -14
- package/dist/{AzureDevOpsSourceControlProvider-BNGEg1R8.mjs → AzureDevOpsSourceControlProvider-BcQO_CyW.mjs} +3 -3
- package/dist/{BitbucketSourceControlProvider-Bt21jw68.mjs → BitbucketSourceControlProvider-BTUY2ZT8.mjs} +3 -3
- package/dist/{BitbucketSourceControlProvider-BzhsQwH-.cjs → BitbucketSourceControlProvider-C9WuwvY2.cjs} +14 -14
- package/dist/{BunPTY-TbHbSc8S.mjs → BunPTY-DdnqQAdw.mjs} +1 -1
- package/dist/{ClaudeDriver-B7mbf51W.cjs → ClaudeDriver-BSTxNNGO.cjs} +162 -126
- package/dist/{ClaudeDriver-C4yu7Jit.mjs → ClaudeDriver-Csnp78qR.mjs} +129 -93
- package/dist/{CodexDriver-CR0S17Lb.cjs → CodexDriver-BK4HVNV4.cjs} +145 -60
- package/dist/{CodexDriver-DnnqkGoY.mjs → CodexDriver-fwcV84hX.mjs} +99 -14
- package/dist/{CodexTextGeneration-tlfe1S5W.cjs → CodexTextGeneration-Y2GSS7f1.cjs} +145 -99
- package/dist/{CodexTextGeneration-Cw-FZbSS.mjs → CodexTextGeneration-_4aT5BHa.mjs} +141 -95
- package/dist/{CopilotDriver-GxKLX5pL.mjs → CopilotDriver-B12ZJ-L_.mjs} +69 -7
- package/dist/{CopilotDriver-IBd27Ji2.cjs → CopilotDriver-C7IyIwVW.cjs} +98 -36
- package/dist/{CursorDriver-C4Enoe9N.cjs → CursorDriver-BWmCfJ-w.cjs} +38 -32
- package/dist/{CursorDriver-CNo9Uzo8.mjs → CursorDriver-C_p0v-ul.mjs} +12 -6
- package/dist/{ForgejoSourceControlProvider-Dh6DOoc8.cjs → ForgejoSourceControlProvider-DTRrllIH.cjs} +14 -14
- package/dist/{ForgejoSourceControlProvider-BGXysSX6.mjs → ForgejoSourceControlProvider-DmOGJEaJ.mjs} +3 -3
- package/dist/{GitHubSourceControlProvider-8hsv_kCE.cjs → GitHubSourceControlProvider-D-YV8WP6.cjs} +16 -17
- package/dist/{GitHubSourceControlProvider-CPCYV8Xo.mjs → GitHubSourceControlProvider-sQGcwnr3.mjs} +6 -7
- package/dist/{GitLabSourceControlProvider-B0ZbF9Zx.cjs → GitLabSourceControlProvider-kKYYnpER.cjs} +14 -14
- package/dist/{GitLabSourceControlProvider-Bvknpaon.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-CDcvPT9v.cjs → OpenCodeDriver-CckbFEQJ.cjs} +459 -141
- package/dist/{OpenCodeDriver-0q44rSQX.mjs → OpenCodeDriver-CnWJHyDJ.mjs} +430 -112
- package/dist/SideQuestionIsolation-5eGFRW0t.mjs +26 -0
- package/dist/SideQuestionIsolation-DvVKZWxi.cjs +37 -0
- package/dist/{SourceControlProviderDiscoveryCatalog-B37RHe2u.mjs → SourceControlProviderDiscoveryCatalog-BVvq7liJ.mjs} +2 -1
- package/dist/{SourceControlProviderDiscoveryCatalog-DreaAH1H.cjs → SourceControlProviderDiscoveryCatalog-CyUhKJLD.cjs} +6 -5
- package/dist/bin.cjs +12772 -3149
- package/dist/bin.mjs +10669 -1075
- 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-i0YhvlGD.js → AnimatedHeight-CbIEyMLg.js} +1 -1
- package/dist/client/assets/AppearanceSettings-B2LsGKmL.js +1 -0
- package/dist/client/assets/{BranchToolbar.logic-AgPy06Mx.js → BranchToolbar.logic-BqkvYNPk.js} +1 -1
- package/dist/client/assets/{BrowserPanel-BWztlNuL.js → BrowserPanel-C_C4zjrh.js} +1 -1
- package/dist/client/assets/ChatRightPanel-ibiQ79jI.js +195 -0
- package/dist/client/assets/{ChatThreadRouteView-CWoBLzR_.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-DM17BYP5.js +1 -0
- package/dist/client/assets/ConnectionsSettings-D6wysIC8.js +7 -0
- package/dist/client/assets/ContextHandoffEndpointLabel-CsF_maM_.js +4 -0
- package/dist/client/assets/{DiagnosticsSettings-DvnNz2AZ.js → DiagnosticsSettings-Bq2l-C4J.js} +2 -2
- package/dist/client/assets/{DialogHandle-8o3kfoiI.js → DialogHandle-DuKTleCw.js} +1 -1
- package/dist/client/assets/{DialogPopup-CLw6NCkW.js → DialogPopup-Dt7DzTWv.js} +1 -1
- package/dist/client/assets/DialogRoot-DRyawL6l.js +1 -0
- package/dist/client/assets/{DialogTitle-DCHX74Tz.js → DialogTitle-BaxfPC6e.js} +1 -1
- package/dist/client/assets/DialogTrigger-D0PJ8bRT.js +1 -0
- package/dist/client/assets/{DialogViewport-DVDl03yd.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-arHvT6AX.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-GY6owikG.js → GlassSurface-CBIEgwt1.js} +1 -1
- package/dist/client/assets/HKscs-B5-H-CXbBbq6g.bcmap +0 -0
- package/dist/client/assets/{HostedConnectionControls-COUhSe9x.js → HostedConnectionControls-DOpTlXzE.js} +1 -1
- package/dist/client/assets/HostedHubRoot-C1jq8cM6.js +2 -0
- package/dist/client/assets/{HostedNativeAuthorizationRoute-DZhYxv--.js → HostedNativeAuthorizationRoute-Clw1DHQW.js} +2 -2
- package/dist/client/assets/HostedNodeRenameDialog-Bd_Qu_ek.js +1 -0
- package/dist/client/assets/{HostedRelayTrustNotice-Bl6On0Yi.js → HostedRelayTrustNotice-CGcBpT9m.js} +1 -1
- package/dist/client/assets/IntegrationsSettingsPanel-J0qODRW-.js +2 -0
- package/dist/client/assets/KSC-Johab-H-CGtV3MPT.bcmap +0 -0
- package/dist/client/assets/{KeybindingsSettings-CPtXx-W2.js → KeybindingsSettings-CwxIHsFy.js} +1 -1
- package/dist/client/assets/{LazyBrowserPanel-SUIBB7B4.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-BFifrshE.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-R0cqI17q.js → PhoneGetAppInterstitial-0EOj-PbW.js} +1 -1
- package/dist/client/assets/PhoneHome-Cg7l3b1T.js +1 -0
- package/dist/client/assets/PhoneSettingsSurface-BXAUtZ9M.js +2 -0
- package/dist/client/assets/ProvidersSettingsPanel-BaJgypXu.js +1 -0
- package/dist/client/assets/{QuitShortcutFeedback-CklL3jMd.js → QuitShortcutFeedback-DgJFEd6b.js} +1 -1
- package/dist/client/assets/{RedactedSensitiveText-CLPBtvH1.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-9pSZP875.js → SettingsPanels.editor-DJRckD71.js} +1 -1
- package/dist/client/assets/{SourceControlSettings-C1F3Brcn.js → SourceControlSettings-IpoZrjt5.js} +1 -1
- 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-CHZ60lPI.js → ThreadTerminalDrawer-BEv83xrk.js} +11 -11
- 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-BMBx2Fu0.js → activity-BmRcsTyL.js} +1 -1
- package/dist/client/assets/{alert-CXnC_RJc.js → alert-C5UiA2xk.js} +1 -1
- package/dist/client/assets/{appChrome-BzM66lXM.js → appChrome-CsZ2ylc1.js} +1 -1
- package/dist/client/assets/{arrow-left-CymyVbCi.js → arrow-left-CSz-z20j.js} +1 -1
- package/dist/client/assets/{arrow-right-9wyq4YVq.js → arrow-right-DEi91hao.js} +1 -1
- package/dist/client/assets/{arrow-up-right-mfU38K6p.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-BR3RyOWP.js → bot-SC4UGZyw.js} +1 -1
- package/dist/client/assets/{capabilities-C8sxDbKT.js → capabilities-BCkDNe83.js} +1 -1
- package/dist/client/assets/{chart-column-CcRi3pAd.js → chart-column-C08MuLgY.js} +1 -1
- package/dist/client/assets/chevron-right-DgB53U1_.js +1 -0
- package/dist/client/assets/{clipboard-copy-ezz8rnaT.js → clipboard-copy-D74Wvnon.js} +1 -1
- package/dist/client/assets/{data-list-ZLhzdlED.js → data-list-CZ4Utnfl.js} +1 -1
- package/dist/client/assets/{desktopWorkspace-P28r2lN2.js → desktopWorkspace-DVfn9ZT_.js} +1 -1
- package/dist/client/assets/{download-BA9L9tK9.js → download-Dio40wIJ.js} +1 -1
- package/dist/client/assets/editorPreferences-2dG4uloq.js +1 -0
- package/dist/client/assets/{empty-3NpXLnAM.js → empty-6LExKYgQ.js} +1 -1
- package/dist/client/assets/{group-D5qBdsaB.js → group-D_mu0Kiq.js} +1 -1
- package/dist/client/assets/{hostedConnectionCoordinator-CLV-JD1S.js → hostedConnectionCoordinator-YkDLnATK.js} +1 -1
- package/dist/client/assets/{hubRoutes-EWJ3Gdod.js → hubRoutes-D3quWvU7.js} +1 -1
- package/dist/client/assets/{index-DxCd1PgA.js → index-7MTgf8YI.js} +2 -2
- package/dist/client/assets/{input-DrOL1KPS.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-D2DtQ7aS.js → key-round-C-oUSjpF.js} +1 -1
- package/dist/client/assets/{layers-DtSJWmwy.js → layers-Co2a5C1k.js} +1 -1
- package/dist/client/assets/{log-out-YAp9fsOg.js → log-out-pWFhbvwr.js} +1 -1
- package/dist/client/assets/{logging-BuUPX1SP.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-D18VboLH.js → palette-B_6C4fD6.js} +1 -1
- package/dist/client/assets/pdf.worker.min-Dswkl-cV.mjs +29 -0
- package/dist/client/assets/{play-d3KUi4G6.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-dwWhl7Uf.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-Bk1kdf_k.js → qr-code-BU354aLS.js} +1 -1
- package/dist/client/assets/{qr-code-MAZkoKtL.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-DY3_Ph-S.js → refresh-cw-CY5BeUEr.js} +1 -1
- package/dist/client/assets/runtime-BKneT96Q.js +17 -0
- package/dist/client/assets/{save-ugJXuJRM.js → save-DIHMjHXd.js} +1 -1
- package/dist/client/assets/{scroll-area-BMnGzd2a.js → scroll-area-Cq4SX9P8.js} +1 -1
- package/dist/client/assets/{scrollEdges-QLSFwGSQ.js → scrollEdges-BaWRjrac.js} +1 -1
- package/dist/client/assets/{separator-BwUYkCkX.js → separator-BN705fC0.js} +1 -1
- package/dist/client/assets/{settingsLayout-C6SUmJVB.js → settingsLayout-DQERzSce.js} +1 -1
- package/dist/client/assets/{sheet-DLy4aeVa.js → sheet-CFvRY7T6.js} +1 -1
- package/dist/client/assets/{shield-Zq_ygsnJ.js → shield-Zn2kFj5M.js} +1 -1
- package/dist/client/assets/{shield-alert-DfUhTI4-.js → shield-alert-DMB5gKiC.js} +1 -1
- package/dist/client/assets/{shield-check-CO4SMhAs.js → shield-check-DyNf6Bky.js} +1 -1
- package/dist/client/assets/{sidebar-DNnW-a2V.js → sidebar-Bsh64sLK.js} +1 -1
- package/dist/client/assets/sidebarProjectFolders-CQbpO9ZI.js +4 -0
- package/dist/client/assets/{sidebarStatusText-CawrXnx0.js → sidebarStatusText-DCo-whyK.js} +1 -1
- package/dist/client/assets/{skeleton-DRm4_OvB.js → skeleton-DEuowfjY.js} +1 -1
- package/dist/client/assets/{smartphone-O2VACDhU.js → smartphone-BLWJ7C9-.js} +1 -1
- package/dist/client/assets/{sparkles-isHutYWU.js → sparkles-DAXDXp_s.js} +1 -1
- package/dist/client/assets/src-DPpEXU6w.js +14 -0
- package/dist/client/assets/{star-7UHEnC3x.js → star-CjQxHYbD.js} +1 -1
- package/dist/client/assets/switch-LahPAvrd.js +48 -0
- package/dist/client/assets/{toggle-CaKBNe6W.js → toggle-45lsrmyi.js} +1 -1
- package/dist/client/assets/{toggle-group-UeFeTI3u.js → toggle-group-D5pl24ED.js} +1 -1
- package/dist/client/assets/{tokenModePresentation-DV56ekA4.js → tokenModePresentation-CPUsUGY4.js} +1 -1
- package/dist/client/assets/tooltip-B8-izeMo.js +1 -0
- package/dist/client/assets/{unplug-DisTpujT.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-DctamWV6.js → user-round-DEWIPpNs.js} +1 -1
- package/dist/client/assets/{vscode-icons-Dw-LGJAv.js → vscode-icons-DTH-Vj-_.js} +1 -1
- package/dist/client/assets/workspaceMetadataProjection-BnpxBe8S.js +1 -0
- package/dist/client/assets/{wrench-Ds8eZerZ.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-GZcpSLrW.mjs → makeManagedServerProvider-BINne1KE.mjs} +3 -38
- package/dist/{makeManagedServerProvider-VzxWN-04.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-DStwNTTK.cjs → src-BlzIcnVG.cjs} +573 -117
- package/dist/{collectUint8StreamText-C_VNyArd.mjs → src-DtEOcXdl.mjs} +389 -95
- package/package.json +1 -1
- package/dist/AcpNativeLogging-COepku4a.cjs +0 -5130
- package/dist/AcpNativeLogging-D7e1dn7s.mjs +0 -5015
- package/dist/client/assets/AccountSettings-ApnDA1f-.js +0 -1
- package/dist/client/assets/AiFocusSettings-CNmGHEcA.js +0 -1
- package/dist/client/assets/AppearanceSettings-BG8W4DP0.js +0 -1
- package/dist/client/assets/ChatRightPanel-a6UOHNMm.js +0 -194
- package/dist/client/assets/CommandPaletteDialog-B2iKWCUi.js +0 -1
- package/dist/client/assets/CompositeRoot-C1G-Ejus.js +0 -1
- package/dist/client/assets/ComputerUseSettings-CPwWoHWj.js +0 -1
- package/dist/client/assets/ConnectionsSettings-CPMkuxza.js +0 -7
- package/dist/client/assets/ContextHandoffEndpointLabel-BildLLDY.js +0 -4
- package/dist/client/assets/DialogRoot-SKkIuQHA.js +0 -1
- package/dist/client/assets/DialogTrigger-Bl_fcIV2.js +0 -1
- package/dist/client/assets/DraftChatThreadRouteView-CEDYjbKq.js +0 -1
- package/dist/client/assets/HostedHubRoot-BTWc0XoQ.js +0 -2
- package/dist/client/assets/IntegrationsSettingsPanel-n9owMZf-.js +0 -2
- package/dist/client/assets/McpServersSettings-BWIUud0Z.js +0 -6
- package/dist/client/assets/MobileSheet-NTayGHF6.js +0 -1
- package/dist/client/assets/OpinionatedPluginsSettings-D7WuuNWZ.js +0 -1
- package/dist/client/assets/PhoneHome-FqWvnJP_.js +0 -1
- package/dist/client/assets/PhoneSettingsSurface-w5PJnoBc.js +0 -2
- package/dist/client/assets/ProvidersSettingsPanel-Ww1ch3xA.js +0 -1
- package/dist/client/assets/RootAppShell-BdQCs2XJ.js +0 -7
- package/dist/client/assets/Separator-CpYBhf-I.js +0 -1
- package/dist/client/assets/SettingsDialog-DeMzEeCP.js +0 -2
- package/dist/client/assets/SettingsPanels-ZxNz9ZfL.js +0 -3
- package/dist/client/assets/StatisticsPage-C7v-6CTr.js +0 -1
- package/dist/client/assets/StatisticsPanel-CeIjiBm8.js +0 -1
- package/dist/client/assets/StatisticsSettingsLink-5s_violW.js +0 -1
- package/dist/client/assets/ThreadWorkspacePanel-Ct5kMcuY.js +0 -2073
- package/dist/client/assets/authorization-CjOFkg7b.js +0 -1
- package/dist/client/assets/badge-Dg7mXiOh.js +0 -1
- package/dist/client/assets/chevron-right-CuUjBsQV.js +0 -1
- package/dist/client/assets/editorPreferences-DeKdSV3s.js +0 -1
- package/dist/client/assets/kbd-rWDjJnWX.js +0 -1
- package/dist/client/assets/main-BbtLAX7M.js +0 -9
- package/dist/client/assets/main-D4CtFNPY.css +0 -2
- package/dist/client/assets/monitor-OyD484tI.js +0 -1
- package/dist/client/assets/primary-D_D7eLwT.js +0 -2
- package/dist/client/assets/providerDriverMeta-DNTocCcU.js +0 -1
- package/dist/client/assets/providerModels-bFbEIfL9.js +0 -1
- package/dist/client/assets/radio-group-D-VCGinX.js +0 -2
- package/dist/client/assets/runtime-Djy96GJd.js +0 -17
- package/dist/client/assets/sidebarProjectFolders-ygpaKZM6.js +0 -4
- package/dist/client/assets/src-BSuAGqhK.js +0 -14
- package/dist/client/assets/switch-DD1qVLgN.js +0 -48
- package/dist/client/assets/tooltip-DXvXxL37.js +0 -1
- package/dist/client/assets/useAppSidebarCollapsed-CaAsLi1q.js +0 -1
- package/dist/client/assets/useBaseUiId-CJN4MvrU.js +0 -1
- package/dist/client/assets/useLabelableId-BsDFG9Oj.js +0 -1
- package/dist/client/assets/useNavigate-cLfxn_9L.js +0 -1
- package/dist/client/assets/usePhoneThreadActions-rekHL1Mi.js +0 -1
- package/dist/client/assets/usePopupViewport-kXU31P6l.js +0 -1
- package/dist/client/assets/useScrollLock-DjMxrUJe.js +0 -1
- package/dist/client/assets/useStatistics-BYP-9CmW.js +0 -55
- package/dist/client/assets/useTriggerFocusGuards-DuAm2B8C.js +0 -1
- package/dist/client/assets/useValueChanged-DreFjrMK.js +0 -1
- package/dist/client/assets/workspaceMetadataProjection-BL4sEIL2.js +0 -1
|
@@ -1,32 +1,36 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { a as
|
|
7
|
-
import { t as
|
|
8
|
-
import { a as makeAcpRequestOpenedEvent, c as makeAcpTokenUsageEvent, d as mapAcpToAdapterError, f as makeAcpSubagentRuntimeEvents, h as AcpTransportError, i as makeAcpPlanUpdatedEvent, l as makeAcpToolCallEvent, m as parsePermissionRequest, n as makeAcpAssistantItemEvent, o as makeAcpRequestResolvedEvent, p as AcpSessionRuntime, r as makeAcpContentDeltaEvent, s as makeAcpThoughtDeltaEvent, t as makeAcpNativeLoggers } from "./AcpNativeLogging-D7e1dn7s.mjs";
|
|
3
|
+
import { As as EventId, Eo as ProviderInstanceId, Rs as RuntimeRequestId, Ss as ApprovalRequestId, Ws as TurnId } from "./src-DtEOcXdl.mjs";
|
|
4
|
+
import { Z as ServerConfig } from "./Metrics-C-3MahDy.mjs";
|
|
5
|
+
import { A as makeEventNdjsonLogger, Ht as ProviderAdapterValidationError, K as parsePermissionRequest, Lt as createProcessDeviceToolBinding, Rt as ProviderAdapterProcessError, Vt as ProviderAdapterSessionNotFoundError, Y as AcpTransportError, _r as resolveAttachmentPath, hr as isPersistableChatAttachment, zt as ProviderAdapterRequestError } from "./bin.mjs";
|
|
6
|
+
import { a as makeAcpRequestOpenedEvent, c as makeAcpTokenUsageEvent, d as mapAcpToAdapterError, f as makeAcpSubagentRuntimeEvents, i as makeAcpPlanUpdatedEvent, l as makeAcpToolCallEvent, n as makeAcpAssistantItemEvent, o as makeAcpRequestResolvedEvent, r as makeAcpContentDeltaEvent, s as makeAcpThoughtDeltaEvent, t as makeAcpNativeLoggers } from "./AcpNativeLogging-BsbZRRD7.mjs";
|
|
7
|
+
import { i as formatAttachmentPathLines, n as stampRuntimeEvent, r as appendAttachmentPathLines, t as requireRuntimeSessionId } from "./runtimeSession-CA6cLWg0.mjs";
|
|
9
8
|
import * as Effect from "effect/Effect";
|
|
10
|
-
import * as Layer from "effect/Layer";
|
|
11
9
|
import * as Schema from "effect/Schema";
|
|
12
|
-
import {
|
|
13
|
-
import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
|
|
10
|
+
import { ChildProcessSpawner } from "effect/unstable/process";
|
|
14
11
|
import * as Semaphore from "effect/Semaphore";
|
|
15
12
|
import * as Scope from "effect/Scope";
|
|
16
|
-
import * as Cause from "effect/Cause";
|
|
17
13
|
import * as Deferred from "effect/Deferred";
|
|
18
14
|
import * as Exit from "effect/Exit";
|
|
19
15
|
import * as Option from "effect/Option";
|
|
20
16
|
import * as Ref from "effect/Ref";
|
|
21
17
|
import * as Stream from "effect/Stream";
|
|
22
|
-
import * as Duration from "effect/Duration";
|
|
23
18
|
import * as Fiber from "effect/Fiber";
|
|
19
|
+
import * as DateTime from "effect/DateTime";
|
|
24
20
|
import * as FileSystem from "effect/FileSystem";
|
|
25
21
|
import * as Path from "effect/Path";
|
|
26
|
-
import * as DateTime from "effect/DateTime";
|
|
27
22
|
import * as PubSub from "effect/PubSub";
|
|
28
23
|
import * as SynchronizedRef from "effect/SynchronizedRef";
|
|
29
|
-
|
|
24
|
+
//#region src/provider/acp/AcpModelSelection.ts
|
|
25
|
+
function currentAcpModelIdFromSessionSetup(sessionSetupResult) {
|
|
26
|
+
const option = sessionSetupResult.configOptions?.find((entry) => entry.category === "model" && entry.type === "select");
|
|
27
|
+
return sessionSetupResult.models?.currentModelId?.trim() || (typeof option?.currentValue === "string" ? option.currentValue : void 0);
|
|
28
|
+
}
|
|
29
|
+
function applyAcpModelSelection(input) {
|
|
30
|
+
if (!(input.requestedModelId !== void 0 && input.requestedModelId !== input.currentModelId)) return Effect.succeed(input.currentModelId);
|
|
31
|
+
return input.runtime.setSessionModel(input.requestedModelId).pipe(Effect.mapError(input.mapError), Effect.as(input.requestedModelId));
|
|
32
|
+
}
|
|
33
|
+
//#endregion
|
|
30
34
|
//#region src/provider/acp/XAiAcpExtension.ts
|
|
31
35
|
const XAiPromptCompleteNotification = Schema.Struct({
|
|
32
36
|
sessionId: Schema.String,
|
|
@@ -300,228 +304,9 @@ function normalizeXAiStopReason(value) {
|
|
|
300
304
|
}
|
|
301
305
|
}
|
|
302
306
|
//#endregion
|
|
303
|
-
//#region src/provider/
|
|
304
|
-
const GROK_API_KEY_ENV = "XAI_API_KEY";
|
|
305
|
-
const GROK_OAUTH2_REFERRER_ENV = "GROK_OAUTH2_REFERRER";
|
|
306
|
-
const RYCO_OAUTH_REFERRER = "ryco";
|
|
307
|
-
const GROK_AUTH_METHOD_API_KEY = "xai.api_key";
|
|
308
|
-
const GROK_AUTH_METHOD_CACHED_TOKEN = "cached_token";
|
|
309
|
-
const GROK_DRIVER_KIND = ProviderDriverKind.make("grok");
|
|
310
|
-
function buildGrokAcpSpawnInput(grokSettings, cwd, environment) {
|
|
311
|
-
return {
|
|
312
|
-
command: grokSettings?.binaryPath || "grok",
|
|
313
|
-
args: ["agent", "stdio"],
|
|
314
|
-
cwd,
|
|
315
|
-
env: {
|
|
316
|
-
...environment,
|
|
317
|
-
[GROK_OAUTH2_REFERRER_ENV]: RYCO_OAUTH_REFERRER
|
|
318
|
-
}
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
function resolveGrokAuthMethodId(environment) {
|
|
322
|
-
return environment?.[GROK_API_KEY_ENV]?.trim() ? GROK_AUTH_METHOD_API_KEY : GROK_AUTH_METHOD_CACHED_TOKEN;
|
|
323
|
-
}
|
|
324
|
-
const makeGrokAcpRuntime = (input) => Effect.gen(function* () {
|
|
325
|
-
const acpContext = yield* Layer.build(AcpSessionRuntime.layer({
|
|
326
|
-
...input,
|
|
327
|
-
spawn: buildGrokAcpSpawnInput(input.grokSettings, input.cwd, input.environment),
|
|
328
|
-
authMethodId: resolveGrokAuthMethodId(input.environment)
|
|
329
|
-
}).pipe(Layer.provide(Layer.succeed(ChildProcessSpawner.ChildProcessSpawner, input.childProcessSpawner))));
|
|
330
|
-
const runtime = yield* Effect.service(AcpSessionRuntime).pipe(Effect.provide(acpContext));
|
|
331
|
-
return yield* makeXAiPromptCompletionRuntime(runtime);
|
|
332
|
-
});
|
|
333
|
-
function resolveGrokAcpBaseModelId(model) {
|
|
334
|
-
const trimmed = model?.trim();
|
|
335
|
-
const base = trimmed && trimmed.length > 0 ? trimmed : "grok-build";
|
|
336
|
-
return normalizeModelSlug(base, GROK_DRIVER_KIND) ?? "grok-build";
|
|
337
|
-
}
|
|
338
|
-
function currentGrokModelIdFromSessionSetup(sessionSetupResult) {
|
|
339
|
-
return sessionSetupResult.models?.currentModelId?.trim() || void 0;
|
|
340
|
-
}
|
|
341
|
-
function applyGrokAcpModelSelection(input) {
|
|
342
|
-
if (!(input.requestedModelId !== void 0 && input.requestedModelId !== input.currentModelId)) return Effect.succeed(input.currentModelId);
|
|
343
|
-
return input.runtime.setSessionModel(input.requestedModelId).pipe(Effect.mapError(input.mapError), Effect.as(input.requestedModelId));
|
|
344
|
-
}
|
|
345
|
-
//#endregion
|
|
346
|
-
//#region src/textGeneration/GrokTextGeneration.ts
|
|
347
|
-
const GROK_TIMEOUT_MS = 18e4;
|
|
348
|
-
function mapGrokAcpError(operation, detail, cause) {
|
|
349
|
-
return new TextGenerationError({
|
|
350
|
-
operation,
|
|
351
|
-
detail,
|
|
352
|
-
...cause !== void 0 ? { cause } : {}
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
function isTextGenerationError(error) {
|
|
356
|
-
return typeof error === "object" && error !== null && "_tag" in error && error._tag === "TextGenerationError";
|
|
357
|
-
}
|
|
358
|
-
const makeGrokTextGeneration = Effect.fn("makeGrokTextGeneration")(function* (grokSettings, environment = process.env) {
|
|
359
|
-
const commandSpawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
360
|
-
const runGrokJson = ({ operation, cwd, prompt, outputSchemaJson, modelSelection }) => Effect.gen(function* () {
|
|
361
|
-
const resolvedModel = resolveGrokAcpBaseModelId(modelSelection.model);
|
|
362
|
-
const outputRef = yield* Ref.make("");
|
|
363
|
-
const runtime = yield* makeGrokAcpRuntime({
|
|
364
|
-
grokSettings,
|
|
365
|
-
environment,
|
|
366
|
-
childProcessSpawner: commandSpawner,
|
|
367
|
-
cwd,
|
|
368
|
-
clientInfo: {
|
|
369
|
-
name: "ryco-git-text",
|
|
370
|
-
version: "0.0.0"
|
|
371
|
-
}
|
|
372
|
-
});
|
|
373
|
-
yield* runtime.handleSessionUpdate((notification) => {
|
|
374
|
-
const update = notification.update;
|
|
375
|
-
if (update.sessionUpdate !== "agent_message_chunk") return Effect.void;
|
|
376
|
-
const content = update.content;
|
|
377
|
-
if (content.type !== "text") return Effect.void;
|
|
378
|
-
return Ref.update(outputRef, (current) => current + content.text);
|
|
379
|
-
});
|
|
380
|
-
const promptResult = yield* Effect.gen(function* () {
|
|
381
|
-
const started = yield* runtime.start();
|
|
382
|
-
yield* applyGrokAcpModelSelection({
|
|
383
|
-
runtime,
|
|
384
|
-
currentModelId: currentGrokModelIdFromSessionSetup(started.sessionSetupResult),
|
|
385
|
-
requestedModelId: resolvedModel,
|
|
386
|
-
mapError: (cause) => mapGrokAcpError(operation, "Failed to set Grok ACP base model for text generation.", cause)
|
|
387
|
-
});
|
|
388
|
-
return yield* runtime.prompt({ prompt: [{
|
|
389
|
-
type: "text",
|
|
390
|
-
text: prompt
|
|
391
|
-
}] });
|
|
392
|
-
}).pipe(Effect.timeoutOption(GROK_TIMEOUT_MS), Effect.flatMap(Option.match({
|
|
393
|
-
onNone: () => Effect.fail(new TextGenerationError({
|
|
394
|
-
operation,
|
|
395
|
-
detail: "Grok ACP request timed out."
|
|
396
|
-
})),
|
|
397
|
-
onSome: (value) => Effect.succeed(value)
|
|
398
|
-
})), Effect.mapError((cause) => isTextGenerationError(cause) ? cause : mapGrokAcpError(operation, "Grok ACP request failed.", cause)));
|
|
399
|
-
const trimmed = (yield* Ref.get(outputRef)).trim();
|
|
400
|
-
if (!trimmed) return yield* new TextGenerationError({
|
|
401
|
-
operation,
|
|
402
|
-
detail: promptResult.stopReason === "cancelled" ? "Grok ACP request was cancelled." : "Grok Agent returned empty output."
|
|
403
|
-
});
|
|
404
|
-
return yield* Schema.decodeEffect(Schema.fromJsonString(outputSchemaJson))(extractJsonObject(trimmed)).pipe(Effect.catchTag("SchemaError", (cause) => Effect.fail(new TextGenerationError({
|
|
405
|
-
operation,
|
|
406
|
-
detail: "Grok Agent returned invalid structured output.",
|
|
407
|
-
cause
|
|
408
|
-
}))));
|
|
409
|
-
}).pipe(Effect.mapError((cause) => isTextGenerationError(cause) ? cause : mapGrokAcpError(operation, "Grok ACP text generation failed.", cause)), Effect.scoped);
|
|
410
|
-
return {
|
|
411
|
-
generateCommitMessage: Effect.fn("GrokTextGeneration.generateCommitMessage")(function* (input) {
|
|
412
|
-
const { prompt, outputSchema } = buildCommitMessagePrompt({
|
|
413
|
-
branch: input.branch,
|
|
414
|
-
stagedSummary: input.stagedSummary,
|
|
415
|
-
stagedPatch: input.stagedPatch,
|
|
416
|
-
includeBranch: input.includeBranch === true
|
|
417
|
-
});
|
|
418
|
-
const generated = yield* runGrokJson({
|
|
419
|
-
operation: "generateCommitMessage",
|
|
420
|
-
cwd: input.cwd,
|
|
421
|
-
prompt,
|
|
422
|
-
outputSchemaJson: outputSchema,
|
|
423
|
-
modelSelection: input.modelSelection
|
|
424
|
-
});
|
|
425
|
-
return {
|
|
426
|
-
subject: sanitizeCommitSubject(generated.subject),
|
|
427
|
-
body: generated.body.trim(),
|
|
428
|
-
..."branch" in generated && typeof generated.branch === "string" ? { branch: sanitizeFeatureBranchName(generated.branch) } : {}
|
|
429
|
-
};
|
|
430
|
-
}),
|
|
431
|
-
generatePrContent: Effect.fn("GrokTextGeneration.generatePrContent")(function* (input) {
|
|
432
|
-
const { prompt, outputSchema } = buildPrContentPrompt({
|
|
433
|
-
baseBranch: input.baseBranch,
|
|
434
|
-
headBranch: input.headBranch,
|
|
435
|
-
commitSummary: input.commitSummary,
|
|
436
|
-
diffSummary: input.diffSummary,
|
|
437
|
-
diffPatch: input.diffPatch
|
|
438
|
-
});
|
|
439
|
-
const generated = yield* runGrokJson({
|
|
440
|
-
operation: "generatePrContent",
|
|
441
|
-
cwd: input.cwd,
|
|
442
|
-
prompt,
|
|
443
|
-
outputSchemaJson: outputSchema,
|
|
444
|
-
modelSelection: input.modelSelection
|
|
445
|
-
});
|
|
446
|
-
return {
|
|
447
|
-
title: sanitizePrTitle(generated.title),
|
|
448
|
-
body: generated.body.trim()
|
|
449
|
-
};
|
|
450
|
-
}),
|
|
451
|
-
generateBranchName: Effect.fn("GrokTextGeneration.generateBranchName")(function* (input) {
|
|
452
|
-
const { prompt, outputSchema } = buildBranchNamePrompt({
|
|
453
|
-
message: input.message,
|
|
454
|
-
attachments: input.attachments
|
|
455
|
-
});
|
|
456
|
-
const generated = yield* runGrokJson({
|
|
457
|
-
operation: "generateBranchName",
|
|
458
|
-
cwd: input.cwd,
|
|
459
|
-
prompt,
|
|
460
|
-
outputSchemaJson: outputSchema,
|
|
461
|
-
modelSelection: input.modelSelection
|
|
462
|
-
});
|
|
463
|
-
return { branch: sanitizeBranchFragment(generated.branch) };
|
|
464
|
-
}),
|
|
465
|
-
generateThreadTitle: Effect.fn("GrokTextGeneration.generateThreadTitle")(function* (input) {
|
|
466
|
-
const { prompt, outputSchema } = buildThreadTitlePrompt({
|
|
467
|
-
message: input.message,
|
|
468
|
-
attachments: input.attachments
|
|
469
|
-
});
|
|
470
|
-
const generated = yield* runGrokJson({
|
|
471
|
-
operation: "generateThreadTitle",
|
|
472
|
-
cwd: input.cwd,
|
|
473
|
-
prompt,
|
|
474
|
-
outputSchemaJson: outputSchema,
|
|
475
|
-
modelSelection: input.modelSelection
|
|
476
|
-
});
|
|
477
|
-
return { title: sanitizeThreadTitle(generated.title) };
|
|
478
|
-
}),
|
|
479
|
-
generateIssueContent: Effect.fn("GrokTextGeneration.generateIssueContent")(function* (input) {
|
|
480
|
-
if (input.mode === "polish") {
|
|
481
|
-
const { prompt, outputSchema } = buildIssueContentPolishPrompt({
|
|
482
|
-
rough: input.rough,
|
|
483
|
-
...input.currentTitle ? { currentTitle: input.currentTitle } : {},
|
|
484
|
-
...input.customInstructions ? { customInstructions: input.customInstructions } : {}
|
|
485
|
-
});
|
|
486
|
-
const decoded = yield* runGrokJson({
|
|
487
|
-
operation: "generateIssueContent",
|
|
488
|
-
cwd: input.cwd,
|
|
489
|
-
prompt,
|
|
490
|
-
outputSchemaJson: outputSchema,
|
|
491
|
-
modelSelection: input.modelSelection
|
|
492
|
-
});
|
|
493
|
-
return {
|
|
494
|
-
title: decoded.title.trim(),
|
|
495
|
-
body: decoded.body.trim()
|
|
496
|
-
};
|
|
497
|
-
}
|
|
498
|
-
const { prompt, outputSchema } = buildIssueContentTitlePrompt({ body: input.body });
|
|
499
|
-
return { title: (yield* runGrokJson({
|
|
500
|
-
operation: "generateIssueContent",
|
|
501
|
-
cwd: input.cwd,
|
|
502
|
-
prompt,
|
|
503
|
-
outputSchemaJson: outputSchema,
|
|
504
|
-
modelSelection: input.modelSelection
|
|
505
|
-
})).title.trim() };
|
|
506
|
-
}),
|
|
507
|
-
rankInboxThreads: Effect.fn("GrokTextGeneration.rankInboxThreads")(function* (input) {
|
|
508
|
-
const { prompt, outputSchema } = buildThreadPriorityPrompt({ serializedCandidates: input.chunk.serializedCandidates });
|
|
509
|
-
const generated = yield* runGrokJson({
|
|
510
|
-
operation: "rankInboxThreads",
|
|
511
|
-
cwd: input.cwd,
|
|
512
|
-
prompt,
|
|
513
|
-
outputSchemaJson: outputSchema,
|
|
514
|
-
modelSelection: input.modelSelection
|
|
515
|
-
});
|
|
516
|
-
return yield* validateRankInboxThreadsResult(input, generated.rankings);
|
|
517
|
-
})
|
|
518
|
-
};
|
|
519
|
-
});
|
|
520
|
-
//#endregion
|
|
521
|
-
//#region src/provider/Layers/GrokAdapter.ts
|
|
307
|
+
//#region src/provider/Layers/AcpAdapter.ts
|
|
522
308
|
const encodeUnknownJsonStringExit = Schema.encodeUnknownExit(Schema.fromJsonString(Schema.Unknown));
|
|
523
|
-
const
|
|
524
|
-
const GROK_RESUME_VERSION = 1;
|
|
309
|
+
const ACP_RESUME_VERSION = 1;
|
|
525
310
|
function encodeJsonStringForDiagnostics(input) {
|
|
526
311
|
const result = encodeUnknownJsonStringExit(input);
|
|
527
312
|
return Exit.isSuccess(result) ? result.value : void 0;
|
|
@@ -535,9 +320,9 @@ function settlePendingUserInputsAsCancelled(pendingUserInputs) {
|
|
|
535
320
|
function isRecord(value) {
|
|
536
321
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
537
322
|
}
|
|
538
|
-
function
|
|
323
|
+
function parseAcpResume(raw) {
|
|
539
324
|
if (!isRecord(raw)) return void 0;
|
|
540
|
-
if (raw.schemaVersion !==
|
|
325
|
+
if (raw.schemaVersion !== ACP_RESUME_VERSION) return void 0;
|
|
541
326
|
if (typeof raw.sessionId !== "string" || !raw.sessionId.trim()) return void 0;
|
|
542
327
|
return { sessionId: raw.sessionId.trim() };
|
|
543
328
|
}
|
|
@@ -548,9 +333,11 @@ function selectPermissionOptionId(request, decision) {
|
|
|
548
333
|
function selectAutoApprovedPermissionOption(request) {
|
|
549
334
|
return selectPermissionOptionId(request, "acceptForSession") ?? selectPermissionOptionId(request, "accept");
|
|
550
335
|
}
|
|
551
|
-
function
|
|
336
|
+
function makeAcpAdapter(options) {
|
|
337
|
+
const PROVIDER = options.provider;
|
|
338
|
+
const normalizeModel = options.normalizeModel;
|
|
552
339
|
return Effect.gen(function* () {
|
|
553
|
-
const boundInstanceId = options?.instanceId ?? ProviderInstanceId.make(
|
|
340
|
+
const boundInstanceId = options?.instanceId ?? ProviderInstanceId.make(PROVIDER);
|
|
554
341
|
const fileSystem = yield* FileSystem.FileSystem;
|
|
555
342
|
const path = yield* Path.Path;
|
|
556
343
|
const childProcessSpawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
@@ -568,7 +355,7 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
568
355
|
createdAt: nowIso
|
|
569
356
|
});
|
|
570
357
|
const mapAcpCallbackFailure = (effect) => effect.pipe(Effect.mapError((cause) => new AcpTransportError({
|
|
571
|
-
detail: "Failed to process
|
|
358
|
+
detail: "Failed to process ACP callback.",
|
|
572
359
|
cause
|
|
573
360
|
})));
|
|
574
361
|
const offerRuntimeEventForRuntime = (runtimeSessionId, event) => {
|
|
@@ -597,14 +384,14 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
597
384
|
event: {
|
|
598
385
|
id: yield* randomUUIDv4,
|
|
599
386
|
kind: "notification",
|
|
600
|
-
provider: PROVIDER
|
|
387
|
+
provider: PROVIDER,
|
|
601
388
|
createdAt: observedAt,
|
|
602
389
|
method,
|
|
603
390
|
threadId,
|
|
604
391
|
payload
|
|
605
392
|
}
|
|
606
393
|
}, threadId);
|
|
607
|
-
}).pipe(Effect.catchCause((cause) => Effect.logWarning("Failed to write native
|
|
394
|
+
}).pipe(Effect.catchCause((cause) => Effect.logWarning("Failed to write native ACP notification log.", {
|
|
608
395
|
cause,
|
|
609
396
|
threadId,
|
|
610
397
|
method
|
|
@@ -615,7 +402,7 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
615
402
|
ctx.lastPlanFingerprint = fingerprint;
|
|
616
403
|
yield* offerRuntimeEventForRuntime(ctx.session.runtimeSessionId, makeAcpPlanUpdatedEvent({
|
|
617
404
|
stamp: yield* makeEventStamp(),
|
|
618
|
-
provider: PROVIDER
|
|
405
|
+
provider: PROVIDER,
|
|
619
406
|
threadId: ctx.threadId,
|
|
620
407
|
turnId: ctx.activeTurnId,
|
|
621
408
|
payload,
|
|
@@ -627,7 +414,7 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
627
414
|
const requireSession = (threadId) => {
|
|
628
415
|
const ctx = sessions.get(threadId);
|
|
629
416
|
if (!ctx || ctx.stopped) return Effect.fail(new ProviderAdapterSessionNotFoundError({
|
|
630
|
-
provider: PROVIDER
|
|
417
|
+
provider: PROVIDER,
|
|
631
418
|
threadId
|
|
632
419
|
}));
|
|
633
420
|
return Effect.succeed(ctx);
|
|
@@ -643,42 +430,42 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
643
430
|
yield* offerRuntimeEventForRuntime(ctx.session.runtimeSessionId, {
|
|
644
431
|
type: "session.exited",
|
|
645
432
|
...yield* makeEventStamp(),
|
|
646
|
-
provider: PROVIDER
|
|
433
|
+
provider: PROVIDER,
|
|
647
434
|
threadId: ctx.threadId,
|
|
648
435
|
payload: { exitKind: "graceful" }
|
|
649
436
|
});
|
|
650
437
|
});
|
|
651
438
|
const startSession = (input) => withThreadLock(input.threadId, Effect.gen(function* () {
|
|
652
|
-
if (input.provider !== void 0 && input.provider !== PROVIDER
|
|
653
|
-
provider: PROVIDER
|
|
439
|
+
if (input.provider !== void 0 && input.provider !== PROVIDER) return yield* new ProviderAdapterValidationError({
|
|
440
|
+
provider: PROVIDER,
|
|
654
441
|
operation: "startSession",
|
|
655
|
-
issue: `Expected provider '${PROVIDER
|
|
442
|
+
issue: `Expected provider '${PROVIDER}' but received '${input.provider}'.`
|
|
656
443
|
});
|
|
657
444
|
if (input.providerInstanceId !== void 0 && input.providerInstanceId !== boundInstanceId) return yield* new ProviderAdapterValidationError({
|
|
658
|
-
provider: PROVIDER
|
|
445
|
+
provider: PROVIDER,
|
|
659
446
|
operation: "startSession",
|
|
660
447
|
issue: `Expected provider instance '${boundInstanceId}' but received '${input.providerInstanceId}'.`
|
|
661
448
|
});
|
|
662
|
-
const runtimeSessionId = yield* requireRuntimeSessionId(PROVIDER
|
|
449
|
+
const runtimeSessionId = yield* requireRuntimeSessionId(PROVIDER, input);
|
|
663
450
|
if (!input.cwd?.trim()) return yield* new ProviderAdapterValidationError({
|
|
664
|
-
provider: PROVIDER
|
|
451
|
+
provider: PROVIDER,
|
|
665
452
|
operation: "startSession",
|
|
666
453
|
issue: "cwd is required and must be non-empty."
|
|
667
454
|
});
|
|
668
455
|
const effectiveResumeCursor = input.resumePolicy === "fresh" ? void 0 : input.resumeCursor;
|
|
669
|
-
const
|
|
670
|
-
if (effectiveResumeCursor !== void 0 &&
|
|
671
|
-
provider: PROVIDER
|
|
456
|
+
const acpResume = effectiveResumeCursor === void 0 ? void 0 : parseAcpResume(effectiveResumeCursor);
|
|
457
|
+
if (effectiveResumeCursor !== void 0 && acpResume === void 0) return yield* new ProviderAdapterValidationError({
|
|
458
|
+
provider: PROVIDER,
|
|
672
459
|
operation: "startSession",
|
|
673
460
|
issue: "resumeCursor must use schema version 1 and contain a non-empty sessionId."
|
|
674
461
|
});
|
|
675
462
|
const cwd = path.resolve(input.cwd.trim());
|
|
676
|
-
const
|
|
463
|
+
const acpModelSelection = input.modelSelection?.instanceId === boundInstanceId ? input.modelSelection : void 0;
|
|
677
464
|
const existing = sessions.get(input.threadId);
|
|
678
465
|
if (existing && !existing.stopped) {
|
|
679
466
|
if (existing.session.runtimeSessionId === runtimeSessionId) return existing.session;
|
|
680
467
|
return yield* new ProviderAdapterValidationError({
|
|
681
|
-
provider: PROVIDER
|
|
468
|
+
provider: PROVIDER,
|
|
682
469
|
operation: "startSession",
|
|
683
470
|
issue: `Thread '${input.threadId}' still has runtime '${existing.session.runtimeSessionId ?? "legacy"}'; stop it before starting '${runtimeSessionId}'.`
|
|
684
471
|
});
|
|
@@ -694,14 +481,13 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
694
481
|
isTurnActive: () => ctx !== void 0 && ctx.activeTurnId !== void 0 && !ctx.stopped
|
|
695
482
|
});
|
|
696
483
|
if (deviceToolBinding) yield* Scope.addFinalizer(sessionScope, Effect.sync(() => deviceToolBinding.dispose()));
|
|
697
|
-
const resumeSessionId =
|
|
484
|
+
const resumeSessionId = acpResume?.sessionId;
|
|
698
485
|
const acpNativeLoggers = makeAcpNativeLoggers({
|
|
699
486
|
nativeEventLogger,
|
|
700
|
-
provider: PROVIDER
|
|
487
|
+
provider: PROVIDER,
|
|
701
488
|
threadId: input.threadId
|
|
702
489
|
});
|
|
703
|
-
const acp = yield*
|
|
704
|
-
grokSettings,
|
|
490
|
+
const acp = yield* options.makeRuntime({
|
|
705
491
|
...options?.environment ? { environment: options.environment } : {},
|
|
706
492
|
childProcessSpawner,
|
|
707
493
|
cwd,
|
|
@@ -721,13 +507,13 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
721
507
|
}] } : {},
|
|
722
508
|
...acpNativeLoggers
|
|
723
509
|
}).pipe(Effect.provideService(Scope.Scope, sessionScope), Effect.mapError((cause) => new ProviderAdapterProcessError({
|
|
724
|
-
provider: PROVIDER
|
|
510
|
+
provider: PROVIDER,
|
|
725
511
|
threadId: input.threadId,
|
|
726
512
|
detail: cause.message,
|
|
727
513
|
cause
|
|
728
514
|
})));
|
|
729
515
|
const started = yield* Effect.gen(function* () {
|
|
730
|
-
yield* Effect.forEach(["x.ai/ask_user_question", "_x.ai/ask_user_question"], (method) => acp.handleExtRequest(method, XAiAskUserQuestionRequest, (params) => mapAcpCallbackFailure(Effect.gen(function* () {
|
|
516
|
+
yield* Effect.forEach(options.xaiExtensions ? ["x.ai/ask_user_question", "_x.ai/ask_user_question"] : [], (method) => acp.handleExtRequest(method, XAiAskUserQuestionRequest, (params) => mapAcpCallbackFailure(Effect.gen(function* () {
|
|
731
517
|
yield* logNative(input.threadId, method, params);
|
|
732
518
|
const requestId = ApprovalRequestId.make(yield* randomUUIDv4);
|
|
733
519
|
const runtimeRequestId = RuntimeRequestId.make(requestId);
|
|
@@ -736,7 +522,7 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
736
522
|
yield* offerRuntimeEventForRuntime(runtimeSessionId, {
|
|
737
523
|
type: "user-input.requested",
|
|
738
524
|
...yield* makeEventStamp(),
|
|
739
|
-
provider: PROVIDER
|
|
525
|
+
provider: PROVIDER,
|
|
740
526
|
threadId: input.threadId,
|
|
741
527
|
turnId: sessions.get(input.threadId)?.activeTurnId,
|
|
742
528
|
requestId: runtimeRequestId,
|
|
@@ -753,7 +539,7 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
753
539
|
yield* offerRuntimeEventForRuntime(runtimeSessionId, {
|
|
754
540
|
type: "user-input.resolved",
|
|
755
541
|
...yield* makeEventStamp(),
|
|
756
|
-
provider: PROVIDER
|
|
542
|
+
provider: PROVIDER,
|
|
757
543
|
threadId: input.threadId,
|
|
758
544
|
turnId: sessions.get(input.threadId)?.activeTurnId,
|
|
759
545
|
requestId: runtimeRequestId,
|
|
@@ -785,7 +571,7 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
785
571
|
pendingApprovals.set(requestId, { decision });
|
|
786
572
|
yield* offerRuntimeEventForRuntime(runtimeSessionId, makeAcpRequestOpenedEvent({
|
|
787
573
|
stamp: yield* makeEventStamp(),
|
|
788
|
-
provider: PROVIDER
|
|
574
|
+
provider: PROVIDER,
|
|
789
575
|
threadId: input.threadId,
|
|
790
576
|
turnId: sessions.get(input.threadId)?.activeTurnId,
|
|
791
577
|
requestId: runtimeRequestId,
|
|
@@ -800,7 +586,7 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
800
586
|
pendingApprovals.delete(requestId);
|
|
801
587
|
yield* offerRuntimeEventForRuntime(runtimeSessionId, makeAcpRequestResolvedEvent({
|
|
802
588
|
stamp: yield* makeEventStamp(),
|
|
803
|
-
provider: PROVIDER
|
|
589
|
+
provider: PROVIDER,
|
|
804
590
|
threadId: input.threadId,
|
|
805
591
|
turnId: sessions.get(input.threadId)?.activeTurnId,
|
|
806
592
|
requestId: runtimeRequestId,
|
|
@@ -814,27 +600,28 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
814
600
|
} : { outcome: "cancelled" } };
|
|
815
601
|
})));
|
|
816
602
|
return yield* acp.start();
|
|
817
|
-
}).pipe(Effect.mapError((error) => mapAcpToAdapterError(PROVIDER
|
|
818
|
-
|
|
819
|
-
const
|
|
603
|
+
}).pipe(Effect.mapError((error) => mapAcpToAdapterError(PROVIDER, input.threadId, "session/start", error)));
|
|
604
|
+
if (options.onStarted) yield* options.onStarted(started);
|
|
605
|
+
const requestedStartModelId = acpModelSelection?.model ? normalizeModel(acpModelSelection.model) : void 0;
|
|
606
|
+
const boundModelId = yield* applyAcpModelSelection({
|
|
820
607
|
runtime: acp,
|
|
821
|
-
currentModelId:
|
|
822
|
-
requestedModelId: requestedStartModelId,
|
|
823
|
-
mapError: (cause) => mapAcpToAdapterError(PROVIDER
|
|
608
|
+
currentModelId: currentAcpModelIdFromSessionSetup(started.sessionSetupResult),
|
|
609
|
+
requestedModelId: requestedStartModelId || void 0,
|
|
610
|
+
mapError: (cause) => mapAcpToAdapterError(PROVIDER, input.threadId, "session/set_model", cause)
|
|
824
611
|
});
|
|
825
612
|
const now = yield* nowIso;
|
|
826
613
|
const session = {
|
|
827
|
-
provider: PROVIDER
|
|
614
|
+
provider: PROVIDER,
|
|
828
615
|
providerInstanceId: boundInstanceId,
|
|
829
616
|
runtimeSessionId,
|
|
830
617
|
status: "ready",
|
|
831
618
|
runtimeMode: input.runtimeMode,
|
|
832
619
|
tokenMode: input.tokenMode ?? "balanced",
|
|
833
620
|
cwd,
|
|
834
|
-
...boundModelId ? { model:
|
|
621
|
+
...boundModelId ? { model: normalizeModel(boundModelId) } : {},
|
|
835
622
|
threadId: input.threadId,
|
|
836
623
|
resumeCursor: {
|
|
837
|
-
schemaVersion:
|
|
624
|
+
schemaVersion: ACP_RESUME_VERSION,
|
|
838
625
|
sessionId: started.sessionId
|
|
839
626
|
},
|
|
840
627
|
createdAt: now,
|
|
@@ -854,14 +641,18 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
854
641
|
lastPlanFingerprint: void 0,
|
|
855
642
|
activeTurnId: void 0,
|
|
856
643
|
currentModelId: boundModelId,
|
|
644
|
+
promptImages: started.initializeResult.agentCapabilities?.promptCapabilities?.image === true,
|
|
857
645
|
stopped: false
|
|
858
646
|
};
|
|
859
647
|
const nf = yield* Stream.runDrain(Stream.mapEffect(acp.getEvents(), (event) => Effect.gen(function* () {
|
|
860
648
|
switch (event._tag) {
|
|
649
|
+
case "CommandsUpdated":
|
|
650
|
+
if (options.onCommands) yield* options.onCommands(event.commands);
|
|
651
|
+
return;
|
|
861
652
|
case "AssistantItemStarted":
|
|
862
653
|
yield* offerRuntimeEventForRuntime(runtimeSessionId, makeAcpAssistantItemEvent({
|
|
863
654
|
stamp: yield* makeEventStamp(),
|
|
864
|
-
provider: PROVIDER
|
|
655
|
+
provider: PROVIDER,
|
|
865
656
|
threadId: ctx.threadId,
|
|
866
657
|
turnId: ctx.activeTurnId,
|
|
867
658
|
itemId: event.itemId,
|
|
@@ -871,7 +662,7 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
871
662
|
case "AssistantItemCompleted":
|
|
872
663
|
yield* offerRuntimeEventForRuntime(runtimeSessionId, makeAcpAssistantItemEvent({
|
|
873
664
|
stamp: yield* makeEventStamp(),
|
|
874
|
-
provider: PROVIDER
|
|
665
|
+
provider: PROVIDER,
|
|
875
666
|
threadId: ctx.threadId,
|
|
876
667
|
turnId: ctx.activeTurnId,
|
|
877
668
|
itemId: event.itemId,
|
|
@@ -886,14 +677,14 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
886
677
|
yield* logNative(ctx.threadId, "session/update", event.rawPayload);
|
|
887
678
|
yield* offerRuntimeEventForRuntime(runtimeSessionId, makeAcpToolCallEvent({
|
|
888
679
|
stamp: yield* makeEventStamp(),
|
|
889
|
-
provider: PROVIDER
|
|
680
|
+
provider: PROVIDER,
|
|
890
681
|
threadId: ctx.threadId,
|
|
891
682
|
turnId: ctx.activeTurnId,
|
|
892
683
|
toolCall: event.toolCall,
|
|
893
684
|
rawPayload: event.rawPayload
|
|
894
685
|
}));
|
|
895
686
|
for (const subagentEvent of yield* ctx.subagentEvents({
|
|
896
|
-
provider: PROVIDER
|
|
687
|
+
provider: PROVIDER,
|
|
897
688
|
threadId: ctx.threadId,
|
|
898
689
|
turnId: ctx.activeTurnId,
|
|
899
690
|
state: event.toolCall.subagent,
|
|
@@ -905,7 +696,7 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
905
696
|
yield* logNative(ctx.threadId, "session/update", event.rawPayload);
|
|
906
697
|
yield* offerRuntimeEventForRuntime(runtimeSessionId, makeAcpContentDeltaEvent({
|
|
907
698
|
stamp: yield* makeEventStamp(),
|
|
908
|
-
provider: PROVIDER
|
|
699
|
+
provider: PROVIDER,
|
|
909
700
|
threadId: ctx.threadId,
|
|
910
701
|
turnId: ctx.activeTurnId,
|
|
911
702
|
...event.itemId ? { itemId: event.itemId } : {},
|
|
@@ -917,7 +708,7 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
917
708
|
yield* logNative(ctx.threadId, "session/update", event.rawPayload);
|
|
918
709
|
yield* offerRuntimeEventForRuntime(runtimeSessionId, makeAcpThoughtDeltaEvent({
|
|
919
710
|
stamp: yield* makeEventStamp(),
|
|
920
|
-
provider: PROVIDER
|
|
711
|
+
provider: PROVIDER,
|
|
921
712
|
threadId: ctx.threadId,
|
|
922
713
|
turnId: ctx.activeTurnId,
|
|
923
714
|
text: event.text,
|
|
@@ -925,10 +716,11 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
925
716
|
}));
|
|
926
717
|
return;
|
|
927
718
|
case "UsageUpdated":
|
|
719
|
+
if (options.onUsage) yield* options.onUsage();
|
|
928
720
|
yield* logNative(ctx.threadId, "session/update", event.rawPayload);
|
|
929
721
|
yield* offerRuntimeEventForRuntime(runtimeSessionId, makeAcpTokenUsageEvent({
|
|
930
722
|
stamp: yield* makeEventStamp(),
|
|
931
|
-
provider: PROVIDER
|
|
723
|
+
provider: PROVIDER,
|
|
932
724
|
threadId: ctx.threadId,
|
|
933
725
|
turnId: ctx.activeTurnId,
|
|
934
726
|
usage: event.usage,
|
|
@@ -943,24 +735,24 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
943
735
|
yield* offerRuntimeEventForRuntime(runtimeSessionId, {
|
|
944
736
|
type: "session.started",
|
|
945
737
|
...yield* makeEventStamp(),
|
|
946
|
-
provider: PROVIDER
|
|
738
|
+
provider: PROVIDER,
|
|
947
739
|
threadId: input.threadId,
|
|
948
740
|
payload: { resume: started.initializeResult }
|
|
949
741
|
});
|
|
950
742
|
yield* offerRuntimeEventForRuntime(runtimeSessionId, {
|
|
951
743
|
type: "session.state.changed",
|
|
952
744
|
...yield* makeEventStamp(),
|
|
953
|
-
provider: PROVIDER
|
|
745
|
+
provider: PROVIDER,
|
|
954
746
|
threadId: input.threadId,
|
|
955
747
|
payload: {
|
|
956
748
|
state: "ready",
|
|
957
|
-
reason: "
|
|
749
|
+
reason: "ACP session ready"
|
|
958
750
|
}
|
|
959
751
|
});
|
|
960
752
|
yield* offerRuntimeEventForRuntime(runtimeSessionId, {
|
|
961
753
|
type: "thread.started",
|
|
962
754
|
...yield* makeEventStamp(),
|
|
963
|
-
provider: PROVIDER
|
|
755
|
+
provider: PROVIDER,
|
|
964
756
|
threadId: input.threadId,
|
|
965
757
|
payload: { providerThreadId: started.sessionId }
|
|
966
758
|
});
|
|
@@ -971,16 +763,16 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
971
763
|
const ctx = yield* requireSession(input.threadId);
|
|
972
764
|
const turnId = TurnId.make(yield* randomUUIDv4);
|
|
973
765
|
const turnModelSelection = input.modelSelection?.instanceId === boundInstanceId ? input.modelSelection : void 0;
|
|
974
|
-
const requestedTurnModelId = turnModelSelection?.model ?
|
|
975
|
-
const currentModelId = yield*
|
|
766
|
+
const requestedTurnModelId = turnModelSelection?.model ? normalizeModel(turnModelSelection.model) : void 0;
|
|
767
|
+
const currentModelId = yield* applyAcpModelSelection({
|
|
976
768
|
runtime: ctx.acp,
|
|
977
769
|
currentModelId: ctx.currentModelId,
|
|
978
|
-
requestedModelId: requestedTurnModelId,
|
|
979
|
-
mapError: (cause) => mapAcpToAdapterError(PROVIDER
|
|
770
|
+
requestedModelId: requestedTurnModelId || void 0,
|
|
771
|
+
mapError: (cause) => mapAcpToAdapterError(PROVIDER, input.threadId, "session/set_model", cause)
|
|
980
772
|
});
|
|
981
773
|
const pathLineEntries = [];
|
|
982
774
|
const imagePromptParts = yield* Effect.forEach(input.attachments ?? [], (attachment) => Effect.gen(function* () {
|
|
983
|
-
if (!isPersistableChatAttachment(attachment) || attachment.type !== "image") {
|
|
775
|
+
if (!isPersistableChatAttachment(attachment) || attachment.type !== "image" || options.respectPromptCapabilities && !ctx.promptImages) {
|
|
984
776
|
pathLineEntries.push({
|
|
985
777
|
attachment,
|
|
986
778
|
...attachment.id === void 0 ? {} : { resolvedPath: resolveAttachmentPath({
|
|
@@ -995,12 +787,12 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
995
787
|
attachment
|
|
996
788
|
});
|
|
997
789
|
if (!attachmentPath) return yield* new ProviderAdapterRequestError({
|
|
998
|
-
provider: PROVIDER
|
|
790
|
+
provider: PROVIDER,
|
|
999
791
|
method: "session/prompt",
|
|
1000
792
|
detail: `Invalid attachment id '${attachment.id}'.`
|
|
1001
793
|
});
|
|
1002
794
|
const bytes = yield* fileSystem.readFile(attachmentPath).pipe(Effect.mapError((cause) => new ProviderAdapterRequestError({
|
|
1003
|
-
provider: PROVIDER
|
|
795
|
+
provider: PROVIDER,
|
|
1004
796
|
method: "session/prompt",
|
|
1005
797
|
detail: cause.message,
|
|
1006
798
|
cause
|
|
@@ -1017,12 +809,12 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
1017
809
|
text: promptText
|
|
1018
810
|
}] : [], ...imagePromptParts.filter((part) => part !== null)];
|
|
1019
811
|
if (promptParts.length === 0) return yield* new ProviderAdapterValidationError({
|
|
1020
|
-
provider: PROVIDER
|
|
812
|
+
provider: PROVIDER,
|
|
1021
813
|
operation: "sendTurn",
|
|
1022
814
|
issue: "Turn requires non-empty text or attachments."
|
|
1023
815
|
});
|
|
1024
816
|
ctx.currentModelId = currentModelId;
|
|
1025
|
-
const displayModel = currentModelId ?
|
|
817
|
+
const displayModel = currentModelId ? normalizeModel(currentModelId) : void 0;
|
|
1026
818
|
ctx.activeTurnId = turnId;
|
|
1027
819
|
ctx.lastPlanFingerprint = void 0;
|
|
1028
820
|
ctx.session = {
|
|
@@ -1034,7 +826,7 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
1034
826
|
yield* offerRuntimeEventForRuntime(ctx.session.runtimeSessionId, {
|
|
1035
827
|
type: "turn.started",
|
|
1036
828
|
...yield* makeEventStamp(),
|
|
1037
|
-
provider: PROVIDER
|
|
829
|
+
provider: PROVIDER,
|
|
1038
830
|
threadId: input.threadId,
|
|
1039
831
|
turnId,
|
|
1040
832
|
payload: displayModel ? { model: displayModel } : {}
|
|
@@ -1047,13 +839,13 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
1047
839
|
turnId
|
|
1048
840
|
};
|
|
1049
841
|
}));
|
|
1050
|
-
const result = yield* prepared.acp.prompt({ prompt: prepared.promptParts }).pipe(Effect.mapError((error) => mapAcpToAdapterError(PROVIDER
|
|
842
|
+
const result = yield* prepared.acp.prompt({ prompt: prepared.promptParts }).pipe(Effect.mapError((error) => mapAcpToAdapterError(PROVIDER, input.threadId, "session/prompt", error)));
|
|
1051
843
|
return yield* withThreadLock(input.threadId, Effect.gen(function* () {
|
|
1052
844
|
const ctx = yield* requireSession(input.threadId);
|
|
1053
845
|
if (ctx.acpSessionId !== prepared.acpSessionId) return yield* new ProviderAdapterRequestError({
|
|
1054
|
-
provider: PROVIDER
|
|
846
|
+
provider: PROVIDER,
|
|
1055
847
|
method: "session/prompt",
|
|
1056
|
-
detail: "
|
|
848
|
+
detail: "ACP session changed before the turn completed."
|
|
1057
849
|
});
|
|
1058
850
|
ctx.turns = [...ctx.turns, {
|
|
1059
851
|
id: prepared.turnId,
|
|
@@ -1071,7 +863,7 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
1071
863
|
yield* offerRuntimeEventForRuntime(ctx.session.runtimeSessionId, {
|
|
1072
864
|
type: "turn.completed",
|
|
1073
865
|
...yield* makeEventStamp(),
|
|
1074
|
-
provider: PROVIDER
|
|
866
|
+
provider: PROVIDER,
|
|
1075
867
|
threadId: input.threadId,
|
|
1076
868
|
turnId: prepared.turnId,
|
|
1077
869
|
payload: {
|
|
@@ -1090,12 +882,12 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
1090
882
|
const ctx = yield* requireSession(threadId);
|
|
1091
883
|
yield* settlePendingApprovalsAsCancelled(ctx.pendingApprovals);
|
|
1092
884
|
yield* settlePendingUserInputsAsCancelled(ctx.pendingUserInputs);
|
|
1093
|
-
yield* Effect.ignore(ctx.acp.cancel.pipe(Effect.mapError((error) => mapAcpToAdapterError(PROVIDER
|
|
885
|
+
yield* Effect.ignore(ctx.acp.cancel.pipe(Effect.mapError((error) => mapAcpToAdapterError(PROVIDER, threadId, "session/cancel", error))));
|
|
1094
886
|
});
|
|
1095
887
|
const respondToRequest = (threadId, requestId, decision) => Effect.gen(function* () {
|
|
1096
888
|
const pending = (yield* requireSession(threadId)).pendingApprovals.get(requestId);
|
|
1097
889
|
if (!pending) return yield* new ProviderAdapterRequestError({
|
|
1098
|
-
provider: PROVIDER
|
|
890
|
+
provider: PROVIDER,
|
|
1099
891
|
method: "session/request_permission",
|
|
1100
892
|
detail: `Unknown pending approval request: ${requestId}`
|
|
1101
893
|
});
|
|
@@ -1104,7 +896,7 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
1104
896
|
const respondToUserInput = (threadId, requestId, answers) => Effect.gen(function* () {
|
|
1105
897
|
const pending = (yield* requireSession(threadId)).pendingUserInputs.get(requestId);
|
|
1106
898
|
if (!pending) return yield* new ProviderAdapterRequestError({
|
|
1107
|
-
provider: PROVIDER
|
|
899
|
+
provider: PROVIDER,
|
|
1108
900
|
method: "_x.ai/ask_user_question",
|
|
1109
901
|
detail: `Unknown pending user-input request: ${requestId}`
|
|
1110
902
|
});
|
|
@@ -1122,14 +914,14 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
1122
914
|
const rollbackThread = (threadId, numTurns) => Effect.gen(function* () {
|
|
1123
915
|
yield* requireSession(threadId);
|
|
1124
916
|
if (!Number.isInteger(numTurns) || numTurns < 1) return yield* new ProviderAdapterValidationError({
|
|
1125
|
-
provider: PROVIDER
|
|
917
|
+
provider: PROVIDER,
|
|
1126
918
|
operation: "rollbackThread",
|
|
1127
919
|
issue: "numTurns must be an integer >= 1."
|
|
1128
920
|
});
|
|
1129
921
|
return yield* new ProviderAdapterRequestError({
|
|
1130
|
-
provider: PROVIDER
|
|
922
|
+
provider: PROVIDER,
|
|
1131
923
|
method: "thread/rollback",
|
|
1132
|
-
detail: "
|
|
924
|
+
detail: "ACP sessions do not support provider-side rollback yet."
|
|
1133
925
|
});
|
|
1134
926
|
});
|
|
1135
927
|
const stopSession = (threadId) => withThreadLock(threadId, Effect.gen(function* () {
|
|
@@ -1145,8 +937,10 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
1145
937
|
yield* Effect.addFinalizer(() => Effect.ignore(stopAll()).pipe(Effect.tap(() => PubSub.shutdown(runtimeEventPubSub)), Effect.tap(() => managedNativeEventLogger?.close() ?? Effect.void)));
|
|
1146
938
|
const streamEvents = Stream.fromPubSub(runtimeEventPubSub);
|
|
1147
939
|
return {
|
|
1148
|
-
provider: PROVIDER
|
|
1149
|
-
capabilities: { sessionModelSwitch
|
|
940
|
+
provider: PROVIDER,
|
|
941
|
+
capabilities: { get sessionModelSwitch() {
|
|
942
|
+
return options.getSessionModelSwitch?.() ?? "unsupported";
|
|
943
|
+
} },
|
|
1150
944
|
startSession,
|
|
1151
945
|
sendTurn,
|
|
1152
946
|
interruptTurn,
|
|
@@ -1163,300 +957,4 @@ function makeGrokAdapter(grokSettings, options) {
|
|
|
1163
957
|
});
|
|
1164
958
|
}
|
|
1165
959
|
//#endregion
|
|
1166
|
-
|
|
1167
|
-
const GROK_PRESENTATION = {
|
|
1168
|
-
displayName: "Grok",
|
|
1169
|
-
badgeLabel: "Early Access",
|
|
1170
|
-
showInteractionModeToggle: false
|
|
1171
|
-
};
|
|
1172
|
-
const PROVIDER = ProviderDriverKind.make("grok");
|
|
1173
|
-
const EMPTY_CAPABILITIES = createModelCapabilities({ optionDescriptors: [] });
|
|
1174
|
-
const VERSION_PROBE_TIMEOUT_MS = 4e3;
|
|
1175
|
-
const GROK_ACP_MODEL_DISCOVERY_TIMEOUT_MS = 15e3;
|
|
1176
|
-
const GROK_BUILT_IN_MODELS = [{
|
|
1177
|
-
slug: "grok-build",
|
|
1178
|
-
name: "Grok Build",
|
|
1179
|
-
isCustom: false,
|
|
1180
|
-
capabilities: EMPTY_CAPABILITIES
|
|
1181
|
-
}];
|
|
1182
|
-
function buildInitialGrokProviderSnapshot(grokSettings) {
|
|
1183
|
-
const checkedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
1184
|
-
const models = grokModelsFromSettings(grokSettings.customModels);
|
|
1185
|
-
if (!grokSettings.enabled) return buildServerProvider({
|
|
1186
|
-
presentation: GROK_PRESENTATION,
|
|
1187
|
-
enabled: false,
|
|
1188
|
-
checkedAt,
|
|
1189
|
-
models,
|
|
1190
|
-
probe: {
|
|
1191
|
-
installed: false,
|
|
1192
|
-
version: null,
|
|
1193
|
-
status: "warning",
|
|
1194
|
-
auth: { status: "unknown" },
|
|
1195
|
-
message: "Grok is disabled in Ryco settings."
|
|
1196
|
-
}
|
|
1197
|
-
});
|
|
1198
|
-
return buildServerProvider({
|
|
1199
|
-
presentation: GROK_PRESENTATION,
|
|
1200
|
-
enabled: true,
|
|
1201
|
-
checkedAt,
|
|
1202
|
-
models,
|
|
1203
|
-
probe: {
|
|
1204
|
-
installed: true,
|
|
1205
|
-
version: null,
|
|
1206
|
-
status: "warning",
|
|
1207
|
-
auth: { status: "unknown" },
|
|
1208
|
-
message: "Checking Grok CLI availability..."
|
|
1209
|
-
}
|
|
1210
|
-
});
|
|
1211
|
-
}
|
|
1212
|
-
function grokModelsFromSettings(customModels, builtInModels = GROK_BUILT_IN_MODELS) {
|
|
1213
|
-
return providerModelsFromSettings(builtInModels, PROVIDER, customModels ?? [], EMPTY_CAPABILITIES);
|
|
1214
|
-
}
|
|
1215
|
-
function buildGrokDiscoveredModelsFromSessionModelState(modelState) {
|
|
1216
|
-
if (!modelState || modelState.availableModels.length === 0) return [];
|
|
1217
|
-
const seen = /* @__PURE__ */ new Set();
|
|
1218
|
-
return modelState.availableModels.map((model) => {
|
|
1219
|
-
const slug = resolveGrokAcpBaseModelId(model.modelId);
|
|
1220
|
-
if (!slug || seen.has(slug)) return;
|
|
1221
|
-
seen.add(slug);
|
|
1222
|
-
return {
|
|
1223
|
-
slug,
|
|
1224
|
-
name: model.name.trim() || slug,
|
|
1225
|
-
isCustom: false,
|
|
1226
|
-
capabilities: EMPTY_CAPABILITIES
|
|
1227
|
-
};
|
|
1228
|
-
}).filter((model) => model !== void 0);
|
|
1229
|
-
}
|
|
1230
|
-
const discoverGrokModelsViaAcp = (grokSettings, environment = process.env) => Effect.gen(function* () {
|
|
1231
|
-
const childProcessSpawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
1232
|
-
return buildGrokDiscoveredModelsFromSessionModelState((yield* (yield* makeGrokAcpRuntime({
|
|
1233
|
-
grokSettings,
|
|
1234
|
-
environment,
|
|
1235
|
-
childProcessSpawner,
|
|
1236
|
-
cwd: process.cwd(),
|
|
1237
|
-
clientInfo: {
|
|
1238
|
-
name: "ryco-provider-probe",
|
|
1239
|
-
version: "0.0.0"
|
|
1240
|
-
}
|
|
1241
|
-
})).start()).sessionSetupResult.models);
|
|
1242
|
-
}).pipe(Effect.scoped);
|
|
1243
|
-
const runGrokVersionCommand = (grokSettings, environment = process.env) => {
|
|
1244
|
-
const command = grokSettings.binaryPath || "grok";
|
|
1245
|
-
return spawnAndCollect(command, ChildProcess.make(command, ["--version"], {
|
|
1246
|
-
env: environment,
|
|
1247
|
-
shell: process.platform === "win32"
|
|
1248
|
-
}));
|
|
1249
|
-
};
|
|
1250
|
-
const checkGrokProviderStatus = Effect.fn("checkGrokProviderStatus")(function* (grokSettings, environment = process.env) {
|
|
1251
|
-
const checkedAt = DateTime.formatIso(yield* DateTime.now);
|
|
1252
|
-
const fallbackModels = grokModelsFromSettings(grokSettings.customModels);
|
|
1253
|
-
if (!grokSettings.enabled) return buildServerProvider({
|
|
1254
|
-
presentation: GROK_PRESENTATION,
|
|
1255
|
-
enabled: false,
|
|
1256
|
-
checkedAt,
|
|
1257
|
-
models: fallbackModels,
|
|
1258
|
-
probe: {
|
|
1259
|
-
installed: false,
|
|
1260
|
-
version: null,
|
|
1261
|
-
status: "warning",
|
|
1262
|
-
auth: { status: "unknown" },
|
|
1263
|
-
message: "Grok is disabled in Ryco settings."
|
|
1264
|
-
}
|
|
1265
|
-
});
|
|
1266
|
-
const versionResult = yield* runGrokVersionCommand(grokSettings, environment).pipe(Effect.timeoutOption(VERSION_PROBE_TIMEOUT_MS), Effect.result);
|
|
1267
|
-
if (Result.isFailure(versionResult)) {
|
|
1268
|
-
const error = versionResult.failure;
|
|
1269
|
-
yield* Effect.logWarning("Grok CLI health check failed.", { errorTag: error.name });
|
|
1270
|
-
return buildServerProvider({
|
|
1271
|
-
presentation: GROK_PRESENTATION,
|
|
1272
|
-
enabled: grokSettings.enabled,
|
|
1273
|
-
checkedAt,
|
|
1274
|
-
models: fallbackModels,
|
|
1275
|
-
probe: {
|
|
1276
|
-
installed: !isCommandMissingCause(error),
|
|
1277
|
-
version: null,
|
|
1278
|
-
status: "error",
|
|
1279
|
-
auth: { status: "unknown" },
|
|
1280
|
-
message: isCommandMissingCause(error) ? "Grok CLI (`grok`) is not installed or not on PATH." : "Failed to execute Grok CLI health check."
|
|
1281
|
-
}
|
|
1282
|
-
});
|
|
1283
|
-
}
|
|
1284
|
-
if (Option.isNone(versionResult.success)) return buildServerProvider({
|
|
1285
|
-
presentation: GROK_PRESENTATION,
|
|
1286
|
-
enabled: grokSettings.enabled,
|
|
1287
|
-
checkedAt,
|
|
1288
|
-
models: fallbackModels,
|
|
1289
|
-
probe: {
|
|
1290
|
-
installed: true,
|
|
1291
|
-
version: null,
|
|
1292
|
-
status: "error",
|
|
1293
|
-
auth: { status: "unknown" },
|
|
1294
|
-
message: "Grok CLI is installed but timed out while running `grok --version`."
|
|
1295
|
-
}
|
|
1296
|
-
});
|
|
1297
|
-
const versionOutput = versionResult.success.value;
|
|
1298
|
-
const version = parseGenericCliVersion(`${versionOutput.stdout}\n${versionOutput.stderr}`);
|
|
1299
|
-
if (versionOutput.code !== 0) {
|
|
1300
|
-
yield* Effect.logWarning("Grok CLI version probe exited with a non-zero status.", {
|
|
1301
|
-
exitCode: versionOutput.code,
|
|
1302
|
-
stdoutLength: versionOutput.stdout.length,
|
|
1303
|
-
stderrLength: versionOutput.stderr.length
|
|
1304
|
-
});
|
|
1305
|
-
return buildServerProvider({
|
|
1306
|
-
presentation: GROK_PRESENTATION,
|
|
1307
|
-
enabled: grokSettings.enabled,
|
|
1308
|
-
checkedAt,
|
|
1309
|
-
models: fallbackModels,
|
|
1310
|
-
probe: {
|
|
1311
|
-
installed: true,
|
|
1312
|
-
version,
|
|
1313
|
-
status: "error",
|
|
1314
|
-
auth: { status: "unknown" },
|
|
1315
|
-
message: "Grok CLI is installed but failed to run."
|
|
1316
|
-
}
|
|
1317
|
-
});
|
|
1318
|
-
}
|
|
1319
|
-
const discoveryExit = yield* discoverGrokModelsViaAcp(grokSettings, environment).pipe(Effect.timeoutOption(GROK_ACP_MODEL_DISCOVERY_TIMEOUT_MS), Effect.exit);
|
|
1320
|
-
if (Exit.isFailure(discoveryExit)) {
|
|
1321
|
-
yield* Effect.logWarning("Grok ACP model discovery failed", { cause: Cause.pretty(discoveryExit.cause) });
|
|
1322
|
-
return buildServerProvider({
|
|
1323
|
-
presentation: GROK_PRESENTATION,
|
|
1324
|
-
enabled: grokSettings.enabled,
|
|
1325
|
-
checkedAt,
|
|
1326
|
-
models: fallbackModels,
|
|
1327
|
-
probe: {
|
|
1328
|
-
installed: true,
|
|
1329
|
-
version,
|
|
1330
|
-
status: "error",
|
|
1331
|
-
auth: { status: "unknown" },
|
|
1332
|
-
message: "Grok CLI is installed but ACP startup failed. Check server logs for details."
|
|
1333
|
-
}
|
|
1334
|
-
});
|
|
1335
|
-
}
|
|
1336
|
-
if (Option.isNone(discoveryExit.value)) {
|
|
1337
|
-
yield* Effect.logWarning(`Grok ACP model discovery timed out after ${GROK_ACP_MODEL_DISCOVERY_TIMEOUT_MS}ms.`);
|
|
1338
|
-
return buildServerProvider({
|
|
1339
|
-
presentation: GROK_PRESENTATION,
|
|
1340
|
-
enabled: grokSettings.enabled,
|
|
1341
|
-
checkedAt,
|
|
1342
|
-
models: fallbackModels,
|
|
1343
|
-
probe: {
|
|
1344
|
-
installed: true,
|
|
1345
|
-
version,
|
|
1346
|
-
status: "error",
|
|
1347
|
-
auth: { status: "unknown" },
|
|
1348
|
-
message: `Grok CLI is installed but ACP startup timed out after ${GROK_ACP_MODEL_DISCOVERY_TIMEOUT_MS}ms.`
|
|
1349
|
-
}
|
|
1350
|
-
});
|
|
1351
|
-
}
|
|
1352
|
-
const discoveredModels = discoveryExit.value.value;
|
|
1353
|
-
const models = discoveredModels.length > 0 ? grokModelsFromSettings(grokSettings.customModels, discoveredModels) : fallbackModels;
|
|
1354
|
-
return buildServerProvider({
|
|
1355
|
-
presentation: GROK_PRESENTATION,
|
|
1356
|
-
enabled: grokSettings.enabled,
|
|
1357
|
-
checkedAt,
|
|
1358
|
-
models,
|
|
1359
|
-
probe: {
|
|
1360
|
-
installed: true,
|
|
1361
|
-
version,
|
|
1362
|
-
status: "ready",
|
|
1363
|
-
auth: { status: "unknown" }
|
|
1364
|
-
}
|
|
1365
|
-
});
|
|
1366
|
-
});
|
|
1367
|
-
const enrichGrokSnapshot = (input) => {
|
|
1368
|
-
const { snapshot, publishSnapshot } = input;
|
|
1369
|
-
return enrichProviderSnapshotWithVersionAdvisory(snapshot, input.maintenanceCapabilities).pipe(Effect.provideService(HttpClient.HttpClient, input.httpClient), Effect.provideService(ServerSettingsService, input.serverSettings), Effect.flatMap((enrichedSnapshot) => publishSnapshot(enrichedSnapshot)), Effect.catchCause((cause) => Effect.logWarning("Grok version advisory enrichment failed", { cause: Cause.pretty(cause) })), Effect.asVoid);
|
|
1370
|
-
};
|
|
1371
|
-
//#endregion
|
|
1372
|
-
//#region src/provider/Drivers/GrokDriver.ts
|
|
1373
|
-
const decodeGrokSettings = Schema.decodeSync(GrokSettings);
|
|
1374
|
-
const DRIVER_KIND = ProviderDriverKind.make("grok");
|
|
1375
|
-
const SNAPSHOT_REFRESH_INTERVAL = Duration.minutes(5);
|
|
1376
|
-
const UPDATE = makeStaticProviderMaintenanceResolver(makeManualOnlyProviderMaintenanceCapabilities({
|
|
1377
|
-
provider: DRIVER_KIND,
|
|
1378
|
-
packageName: null
|
|
1379
|
-
}));
|
|
1380
|
-
const withInstanceIdentity = (input) => (snapshot) => ({
|
|
1381
|
-
...snapshot,
|
|
1382
|
-
instanceId: input.instanceId,
|
|
1383
|
-
driver: DRIVER_KIND,
|
|
1384
|
-
...input.displayName ? { displayName: input.displayName } : {},
|
|
1385
|
-
...input.accentColor ? { accentColor: input.accentColor } : {},
|
|
1386
|
-
continuation: { groupKey: input.continuationGroupKey }
|
|
1387
|
-
});
|
|
1388
|
-
const GrokDriver = {
|
|
1389
|
-
driverKind: DRIVER_KIND,
|
|
1390
|
-
metadata: {
|
|
1391
|
-
displayName: "Grok",
|
|
1392
|
-
supportsMultipleInstances: true
|
|
1393
|
-
},
|
|
1394
|
-
configSchema: GrokSettings,
|
|
1395
|
-
defaultConfig: () => decodeGrokSettings({}),
|
|
1396
|
-
create: ({ instanceId, displayName, accentColor, environment, enabled, config }) => Effect.gen(function* () {
|
|
1397
|
-
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
1398
|
-
const httpClient = yield* HttpClient.HttpClient;
|
|
1399
|
-
const serverSettings = yield* ServerSettingsService;
|
|
1400
|
-
const eventLoggers = yield* ProviderEventLoggers;
|
|
1401
|
-
const processEnv = mergeProviderInstanceEnvironment(environment);
|
|
1402
|
-
const continuationIdentity = defaultProviderContinuationIdentity({
|
|
1403
|
-
driverKind: DRIVER_KIND,
|
|
1404
|
-
instanceId
|
|
1405
|
-
});
|
|
1406
|
-
const stampIdentity = withInstanceIdentity({
|
|
1407
|
-
instanceId,
|
|
1408
|
-
displayName,
|
|
1409
|
-
accentColor,
|
|
1410
|
-
continuationGroupKey: continuationIdentity.continuationKey
|
|
1411
|
-
});
|
|
1412
|
-
const effectiveConfig = {
|
|
1413
|
-
...config,
|
|
1414
|
-
enabled
|
|
1415
|
-
};
|
|
1416
|
-
const maintenanceCapabilities = yield* resolveProviderMaintenanceCapabilitiesEffect(UPDATE, {
|
|
1417
|
-
binaryPath: effectiveConfig.binaryPath,
|
|
1418
|
-
env: processEnv
|
|
1419
|
-
});
|
|
1420
|
-
const adapter = yield* makeGrokAdapter(effectiveConfig, {
|
|
1421
|
-
environment: processEnv,
|
|
1422
|
-
...eventLoggers.native ? { nativeEventLogger: eventLoggers.native } : {},
|
|
1423
|
-
instanceId
|
|
1424
|
-
});
|
|
1425
|
-
const textGeneration = yield* makeGrokTextGeneration(effectiveConfig, processEnv);
|
|
1426
|
-
const checkProvider = checkGrokProviderStatus(effectiveConfig, processEnv).pipe(Effect.map(stampIdentity), Effect.provideService(ChildProcessSpawner.ChildProcessSpawner, spawner));
|
|
1427
|
-
const snapshot = yield* makeManagedServerProvider({
|
|
1428
|
-
maintenanceCapabilities,
|
|
1429
|
-
getSettings: Effect.succeed(effectiveConfig),
|
|
1430
|
-
streamSettings: Stream.never,
|
|
1431
|
-
haveSettingsChanged: () => false,
|
|
1432
|
-
initialSnapshot: (settings) => stampIdentity(buildInitialGrokProviderSnapshot(settings)),
|
|
1433
|
-
checkProvider,
|
|
1434
|
-
enrichSnapshot: ({ snapshot: currentSnapshot, publishSnapshot }) => enrichGrokSnapshot({
|
|
1435
|
-
snapshot: currentSnapshot,
|
|
1436
|
-
maintenanceCapabilities,
|
|
1437
|
-
publishSnapshot,
|
|
1438
|
-
httpClient,
|
|
1439
|
-
serverSettings
|
|
1440
|
-
}),
|
|
1441
|
-
refreshInterval: SNAPSHOT_REFRESH_INTERVAL
|
|
1442
|
-
}).pipe(Effect.mapError((cause) => new ProviderDriverError({
|
|
1443
|
-
driver: DRIVER_KIND,
|
|
1444
|
-
instanceId,
|
|
1445
|
-
detail: `Failed to build Grok snapshot: ${cause.message ?? String(cause)}`,
|
|
1446
|
-
cause
|
|
1447
|
-
})));
|
|
1448
|
-
return {
|
|
1449
|
-
instanceId,
|
|
1450
|
-
driverKind: DRIVER_KIND,
|
|
1451
|
-
continuationIdentity,
|
|
1452
|
-
displayName,
|
|
1453
|
-
accentColor,
|
|
1454
|
-
enabled,
|
|
1455
|
-
snapshot,
|
|
1456
|
-
adapter,
|
|
1457
|
-
textGeneration
|
|
1458
|
-
};
|
|
1459
|
-
})
|
|
1460
|
-
};
|
|
1461
|
-
//#endregion
|
|
1462
|
-
export { GrokDriver };
|
|
960
|
+
export { currentAcpModelIdFromSessionSetup as i, makeXAiPromptCompletionRuntime as n, applyAcpModelSelection as r, makeAcpAdapter as t };
|