@readmagic/workmate 0.0.5 → 0.0.7
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/chunks/{AddWorkspaceDirectory-DJRkEz7o.js → AddWorkspaceDirectory-CFrrXnt9.js} +1 -1
- package/dist/chunks/{App-iJu5qyiF.js → App-Buad9Llp.js} +1 -1
- package/dist/chunks/{ApproveApiKey-CRejTHUw.js → ApproveApiKey-B2HJUD7h.js} +1 -1
- package/dist/chunks/ApproveApiKey-BQbHdvc3.js +1 -0
- package/dist/chunks/{AssistantSessionChooser-CBLQ1v-J.js → AssistantSessionChooser-4lm4eXQ8.js} +1 -1
- package/dist/chunks/BackgroundTasksDialog-D4qA0M5O.js +2 -0
- package/dist/chunks/{BypassPermissionsModeDialog-D1FCKVOi.js → BypassPermissionsModeDialog-DllL8dxU.js} +1 -1
- package/dist/chunks/ClaudeMdExternalIncludesDialog--ywODh81.js +1 -0
- package/dist/chunks/{ClaudeMdExternalIncludesDialog-CI0yF6sZ.js → ClaudeMdExternalIncludesDialog-BZSyRqeq.js} +1 -1
- package/dist/chunks/ConsoleOAuthFlow-Wkfw7Ts-.js +1 -0
- package/dist/chunks/{DesktopHandoff-D1rrMxeP.js → DesktopHandoff-DaP4Riar.js} +1 -1
- package/dist/chunks/{DiffDialog-BKcfKx7O.js → DiffDialog-B7hx8i_Y.js} +2 -2
- package/dist/chunks/Doctor-89OgoAUA.js +1 -0
- package/dist/chunks/Doctor-CuKJ-nGt.js +3 -0
- package/dist/chunks/ExitFlow-DnPydE17.js +2 -0
- package/dist/chunks/{Feedback-bEUtrHia.js → Feedback-SmGiR3mf.js} +2 -2
- package/dist/chunks/Grove-CjN9DO47.js +11 -0
- package/dist/chunks/Grove-Cq88VBmM.js +1 -0
- package/dist/chunks/{HybridTransport-9fTBC2Pv.js → HybridTransport-rK83Qijz.js} +1 -1
- package/dist/chunks/{InvalidConfigDialog-9M-1nfZ6.js → InvalidConfigDialog-DdO0AxyF.js} +1 -1
- package/dist/chunks/{InvalidSettingsDialog-B2F6pryH.js → InvalidSettingsDialog-s1G0DwXF.js} +1 -1
- package/dist/chunks/MCPConnectionManager-NRfIjdlj.js +1 -0
- package/dist/chunks/{McpParsingWarnings-BPBb7Npe.js → McpParsingWarnings-Du5IxZos.js} +1 -1
- package/dist/chunks/MessageSelector-iIroHvXo.js +3 -0
- package/dist/chunks/Messages-D4Hm4gaY.js +11 -0
- package/dist/chunks/{Onboarding-cHcnsBGp.js → Onboarding-BiZByBK-.js} +1 -1
- package/dist/chunks/{OverageCreditUpsell-CWCD_RpM.js → OverageCreditUpsell-BM7szLgm.js} +1 -1
- package/dist/chunks/PluginSettings-uY5KTCtK.js +17 -0
- package/dist/chunks/{PromptInputFooterSuggestions-D5sAO6y-.js → PromptInputFooterSuggestions-BmsFdOu9.js} +1 -1
- package/dist/chunks/{PromptInputHelpMenu-n6hAdsto.js → PromptInputHelpMenu-DX-0wEDo.js} +1 -1
- package/dist/chunks/QueryEngine-CGYaShXD.js +1 -0
- package/dist/chunks/REPL-CRJB2t2z.js +142 -0
- package/dist/chunks/REPL-u4Yq29Du.js +1 -0
- package/dist/chunks/{RemoteCallout-CiA4rCEs.js → RemoteCallout-B-tyvQOe.js} +1 -1
- package/dist/chunks/{RemoteSessionManager-zdHfmvfj.js → RemoteSessionManager-DCd0O5_l.js} +2 -2
- package/dist/chunks/ResumeConversation-DAAXlOCd.js +1 -0
- package/dist/chunks/{SSETransport-BPbhCa2f.js → SSETransport-5VK5okFv.js} +1 -1
- package/dist/chunks/SearchExtraToolsTool-B-7Bworf.js +1 -0
- package/dist/chunks/Settings-CUjWlncb.js +2 -0
- package/dist/chunks/{TeleportProgress-DrulEQ7z.js → TeleportProgress-DxN0bQL2.js} +1 -1
- package/dist/chunks/{TeleportRepoMismatchDialog-D3FOLr0P.js → TeleportRepoMismatchDialog-A5Ss0kuk.js} +1 -1
- package/dist/chunks/{TeleportResumeWrapper-DI5iRFND.js → TeleportResumeWrapper-Bz14mUqR.js} +1 -1
- package/dist/chunks/{ThemePicker-CQ7dfFtv.js → ThemePicker-CVSRqTzW.js} +1 -1
- package/dist/chunks/TrustDialog-CY8an_Tg.js +1 -0
- package/dist/chunks/{ValidationErrorsList-CPYeuppg.js → ValidationErrorsList-BYsDtAvX.js} +1 -1
- package/dist/chunks/{WelcomeV2-C-UXdIng.js → WelcomeV2-C1BfrqC5.js} +1 -1
- package/dist/chunks/{add-dir-xTz4COgn.js → add-dir-DfLYgwox.js} +1 -1
- package/dist/chunks/{agentDisplay-BuSReYxu.js → agentDisplay-CMmHIl86.js} +1 -1
- package/dist/chunks/{agents-CiLlKN2I.js → agents-DE_4mAHG.js} +1 -1
- package/dist/chunks/agents-DJtPfvnL.js +103 -0
- package/dist/chunks/allErrors-CQE2k0zO.js +1 -0
- package/dist/chunks/{ant-CBIfqmAb.js → ant-ClQkuQjZ.js} +1 -1
- package/dist/chunks/{api-B-5jqiMg.js → api-2cdIPaeq.js} +1 -1
- package/dist/chunks/api-CG-lhKe-.js +1 -0
- package/dist/chunks/{assistant-XOnU01yl.js → assistant-Bje16tQx.js} +1 -1
- package/dist/chunks/auth-DMfEiQrC.js +1 -0
- package/dist/chunks/auth-D_cGl8WD.js +1 -0
- package/dist/chunks/{auth-DT2yxy94.js → auth-DqcKPbw8.js} +1 -1
- package/dist/chunks/{autoMode-CEMflt3g.js → autoMode-ZW70mpr0.js} +5 -5
- package/dist/chunks/{autonomy-_N8aDaA8.js → autonomy-CwbWsCnv.js} +1 -1
- package/dist/chunks/autonomy-Oui8yK8G.js +15 -0
- package/dist/chunks/{autonomyPanel-I4yCy3Fr.js → autonomyPanel-Mq50H7iM.js} +1 -1
- package/dist/chunks/backgroundHousekeeping-BpLtI45r.js +1 -0
- package/dist/chunks/backgroundHousekeeping-DtJNx4Ja.js +17 -0
- package/dist/chunks/{branch-BIX-pyHp.js → branch-DU5O9KZ0.js} +1 -1
- package/dist/chunks/{break-cache-BQfgkNAo.js → break-cache-C_p7Kmx2.js} +3 -3
- package/dist/chunks/{bridge-CYskzVt8.js → bridge-DNNxtPlz.js} +2 -2
- package/dist/chunks/{bridgeConfig-5p_w4s5r.js → bridgeConfig-CE6dMsiJ.js} +1 -1
- package/dist/chunks/bridgeConfig-DP9dD1Cv.js +1 -0
- package/dist/chunks/{bridgeEnabled-DhFrLTbG.js → bridgeEnabled-Cc0mGlTb.js} +1 -1
- package/dist/chunks/bridgeEnabled-D8wP3DWQ.js +1 -0
- package/dist/chunks/bridgeMain-CwxMa_pd.js +1 -0
- package/dist/chunks/bridgeMain-D11t1BYQ.js +68 -0
- package/dist/chunks/{bridgeMessaging-B5Lbzr8e.js → bridgeMessaging-DdvApEqW.js} +1 -1
- package/dist/chunks/{bridgePointer-MqLe5Asm.js → bridgePointer-DqHMHa2B.js} +1 -1
- package/dist/chunks/{btw-CWWFO7u8.js → btw-CejSEdNl.js} +1 -1
- package/dist/chunks/{caches-DPqPIogk.js → caches-5HVQSevy.js} +2 -2
- package/dist/chunks/caches-B-nJoHLM.js +1 -0
- package/dist/chunks/{ccrClient-CTLnU9Y1.js → ccrClient-BFyfO67b.js} +1 -1
- package/dist/chunks/{claudeDesktop-Cx31Ugjp.js → claudeDesktop-Fe-QL-sN.js} +1 -1
- package/dist/chunks/{clear-DCAgZwc4.js → clear-D8m2utXW.js} +1 -1
- package/dist/chunks/client-C6MbjvOB.js +17 -0
- package/dist/chunks/client-DKXCfdde.js +1 -0
- package/dist/chunks/client-xxikkAoZ.js +1 -0
- package/dist/chunks/{color-CmJGInHL.js → color-DWhgZH7A.js} +1 -1
- package/dist/chunks/commands-CxJpmEKF.js +1 -0
- package/dist/chunks/commitAttribution-DM6SBMwl.js +1 -0
- package/dist/chunks/{commitAttribution-CGZr7XNO.js → commitAttribution-DPnHHKSA.js} +1 -1
- package/dist/chunks/compact-CblM7306.js +2 -0
- package/dist/chunks/config-BLVBFi5v.js +1 -0
- package/dist/chunks/config-CMnqm6Se.js +1 -0
- package/dist/chunks/{config-3m_9zSrj.js → config-DRDuVyzE.js} +2 -2
- package/dist/chunks/{context-C9V4GF0n.js → context-CdSMMM-0.js} +1 -1
- package/dist/chunks/context-noninteractive-CPkf2vB9.js +1 -0
- package/dist/chunks/{context-noninteractive-BmC4o5xo.js → context-noninteractive-DNury4JI.js} +5 -5
- package/dist/chunks/conversation-DCMw_rsE.js +1 -0
- package/dist/chunks/conversation-pUtvc-cE.js +1 -0
- package/dist/chunks/{createSSHSession-BL6j0AU5.js → createSSHSession-BOdTAX3N.js} +1 -1
- package/dist/chunks/{createSession-D_sgO1Xy.js → createSession-8Ei-Lj7V.js} +1 -1
- package/dist/chunks/createSession-CjqxVh_Q.js +1 -0
- package/dist/chunks/crossProjectResume-Bj_Pe8oe.js +40 -0
- package/dist/chunks/{datadog-UkGdjL8-.js → datadog-DqHxqiwY.js} +1 -1
- package/dist/chunks/{desktop-HbYKh-VK.js → desktop-Z5FAfunZ.js} +1 -1
- package/dist/chunks/{diff-nTV17iWX.js → diff-CJEKvOA5.js} +1 -1
- package/dist/chunks/doctor-BA2ZLDTl.js +1 -0
- package/dist/chunks/{entry-CCFI6-gM.js → entry-DE0uMIf0.js} +4 -4
- package/dist/chunks/envLessBridgeConfig-B-LKYNvv.js +1 -0
- package/dist/chunks/envLessBridgeConfig-DyD9XCda.js +1 -0
- package/dist/chunks/{esm-CGoYrggU.js → esm-5w3xFBnt.js} +1 -1
- package/dist/chunks/exit-Dt9kHtJO.js +1 -0
- package/dist/chunks/{extra-usage-g2Pw4zt_.js → extra-usage-C7E2Z1p1.js} +1 -1
- package/dist/chunks/extra-usage-D0Kkjp-2.js +1 -0
- package/dist/chunks/{extra-usage-core-DLYHAInT.js → extra-usage-core-DjdaD1qO.js} +1 -1
- package/dist/chunks/{extra-usage-noninteractive-D8iszH3c.js → extra-usage-noninteractive-BnD1RhKK.js} +1 -1
- package/dist/chunks/{extraUsage-C2Ylufhj.js → extraUsage-CpgRTcMk.js} +1 -1
- package/dist/chunks/extractMemories-DhUprYa7.js +1 -0
- package/dist/chunks/{fast-Dx2fTmWr.js → fast-C4ZevUNL.js} +1 -1
- package/dist/chunks/fast-CChxlAAF.js +1 -0
- package/dist/chunks/{feedback-DCQ4pJ3v.js → feedback-BIhBhV6n.js} +1 -1
- package/dist/chunks/{firstPartyEventLogger-BNGPPBNP.js → firstPartyEventLogger-BXY1IJ2D.js} +2 -2
- package/dist/chunks/firstPartyEventLogger-CnkGSojw.js +1 -0
- package/dist/chunks/{flushGate-XaheIZZT.js → flushGate-CgHq81Gw.js} +1 -1
- package/dist/chunks/{gemini-BCCLHK3K.js → gemini-C1J-x1g7.js} +1 -1
- package/dist/chunks/generateRecap-C0jjCg0Z.js +1 -0
- package/dist/chunks/generateSessionName-w0BMtwS7.js +1 -0
- package/dist/chunks/{githubRepoPathMapping-B4AM8luI.js → githubRepoPathMapping-8D0kpsif.js} +1 -1
- package/dist/chunks/{goal-Bp6fyGqo.js → goal-B4GsR54_.js} +3 -3
- package/dist/chunks/grok-ffNyU3Lt.js +1 -0
- package/dist/chunks/{grove-DrBVaZSN.js → grove-BQisE2JM.js} +1 -1
- package/dist/chunks/{heapdump-JseysNDr.js → heapdump-DiCjAPR3.js} +1 -1
- package/dist/chunks/{help-DR9hKneR.js → help-2hn8VK2-.js} +1 -1
- package/dist/chunks/hooks-CBmrBO-J.js +1 -0
- package/dist/chunks/{hooks-C5n23H1E.js → hooks-CkA9bhHl.js} +2 -2
- package/dist/chunks/hostGuard-BHI6Q8Mt.js +1 -0
- package/dist/chunks/inboundAttachments-C5K3XPTC.js +1 -0
- package/dist/chunks/{inboundAttachments-Cp8XvLMZ.js → inboundAttachments-IH-g95jo.js} +1 -1
- package/dist/chunks/initReplBridge-C-P4dgAG.js +1 -0
- package/dist/chunks/{install-C7qTB0V5.js → install-Dzlm4u58.js} +1 -1
- package/dist/chunks/{instrumentation-CLZttr_u.js → instrumentation-Yt31gxWN.js} +3 -3
- package/dist/chunks/{job-BhiazwPH.js → job-BXujwZNa.js} +1 -1
- package/dist/chunks/{keybindings-CkL8BzUt.js → keybindings-D8FXoO89.js} +2 -2
- package/dist/chunks/language-Baosud0X.js +1 -0
- package/dist/chunks/{language-DIw2871r.js → language-Ca4B018X.js} +1 -1
- package/dist/chunks/{launchAgentsPlatform-j-mWpwW1.js → launchAgentsPlatform-D6DmNuDt.js} +1 -1
- package/dist/chunks/{launchLocalMemory-DmoXp0Xo.js → launchLocalMemory-C0FzUq7x.js} +2 -2
- package/dist/chunks/{launchLocalVault-1uKe0HjA.js → launchLocalVault-DkYAre4O.js} +3 -3
- package/dist/chunks/{launchMemoryStores-SxDKjHJ3.js → launchMemoryStores-D2rKWAPs.js} +1 -1
- package/dist/chunks/{launchOnboarding-CTtpnXcs.js → launchOnboarding-gOVAFEFp.js} +1 -1
- package/dist/chunks/{launchSchedule-BDVnGhaL.js → launchSchedule-IZdFstT_.js} +1 -1
- package/dist/chunks/{launchSkillStore-SmMLxp4K.js → launchSkillStore-B7LamM1d.js} +1 -1
- package/dist/chunks/{launchTeleport-B472ZSGz.js → launchTeleport-C2BQMfYP.js} +3 -3
- package/dist/chunks/{launchVault-CsyBgxle.js → launchVault-C60WUcCI.js} +1 -1
- package/dist/chunks/{lazySchema-DcIJE_0i.js → lazySchema-DULtBUCI.js} +1 -1
- package/dist/chunks/loadAgentsDir-B9c3Emvg.js +1 -0
- package/dist/chunks/{loadAgentsDir-Clu7Uk6a.js → loadAgentsDir-x3rlgED4.js} +693 -695
- package/dist/chunks/loadPluginHooks-BhNdAjeY.js +1 -0
- package/dist/chunks/localSearch-BLCGsdyM.js +1 -0
- package/dist/chunks/{localSearch-iA6JTk19.js → localSearch-DtplGF-l.js} +1 -1
- package/dist/chunks/{logoV2Utils-YHBJLIrC.js → logoV2Utils-gGK9gErT.js} +1 -1
- package/dist/chunks/{magicDocs-Bf1fqnHN.js → magicDocs-qdDB_mKb.js} +2 -2
- package/dist/chunks/{main-gtV_TqXP.js → main-OWFSddRx.js} +84 -84
- package/dist/chunks/managedEnv-Aq5BXfY7.js +1 -0
- package/dist/chunks/managedEnv-BHoeDjpS.js +1 -0
- package/dist/chunks/managedEnvConstants-BPwL2aWI.js +1 -0
- package/dist/chunks/{mappers-C8lYERPX.js → mappers-04gNXJ3w.js} +1 -1
- package/dist/chunks/mcp-BSNdwbxR.js +1 -0
- package/dist/chunks/mcp-CMnDNI-4.js +6 -0
- package/dist/chunks/mcp-D1yA9E56.js +2 -0
- package/dist/chunks/memory-D1zbyjxN.js +1 -0
- package/dist/chunks/{mode-DO6g7nkX.js → mode-DY087x_x.js} +2 -2
- package/dist/chunks/model-CZViyZnE.js +1 -0
- package/dist/chunks/{model-DLXL0CNu.js → model-D0EfJBuw.js} +1 -1
- package/dist/chunks/model-DLLkVV6S.js +1 -0
- package/dist/chunks/{nativeInstaller-OPuO2sm_.js → nativeInstaller-yj81F75v.js} +1 -1
- package/dist/chunks/onChangeAppState-DhGKPG9g.js +1 -0
- package/dist/chunks/{openai-HOebt-8k.js → openai-EYRnUsco.js} +3 -3
- package/dist/chunks/{overageCreditGrant-Bi1CTBAx.js → overageCreditGrant-Du3dOYVu.js} +1 -1
- package/dist/chunks/{panel-CrTPqXCv.js → panel-BSZGX6jN.js} +1 -1
- package/dist/chunks/{panelCall-D0eURklm.js → panelCall-dMvRPAGE.js} +1 -1
- package/dist/chunks/{partition-C8RSL3SQ.js → partition-C4FWzYVm.js} +1 -1
- package/dist/chunks/{passes-BJci5SM_.js → passes-Daz-ARWD.js} +1 -1
- package/dist/chunks/permissions-DF8tAmDF.js +3 -0
- package/dist/chunks/{pidLock-Bd2e6xuT.js → pidLock-CbC_il6r.js} +2 -2
- package/dist/chunks/{plan-D4gMsK7i.js → plan-rsb_83Fo.js} +1 -1
- package/dist/chunks/{plugin-CwCo5Kik.js → plugin-Cm31-nej.js} +1 -1
- package/dist/chunks/pluginAutoupdate-0k03PVff.js +1 -0
- package/dist/chunks/pluginBlocklist-wPFCUPdm.js +1 -0
- package/dist/chunks/pluginCliCommands-DhL9LbH0.js +1 -0
- package/dist/chunks/{pluginFlagging-DNPBbJZo.js → pluginFlagging-CAdaFV_D.js} +1 -1
- package/dist/chunks/pluginOperations-Cs_Z4C6O.js +2 -0
- package/dist/chunks/pluginStartupCheck-BRXGKGjG.js +1 -0
- package/dist/chunks/pluginStartupCheck-KeU0efTj.js +1 -0
- package/dist/chunks/{plugins-CzJIuPfb.js → plugins-CQNKZmjP.js} +4 -4
- package/dist/chunks/policyLimits-D2s8M8P2.js +1 -0
- package/dist/chunks/{pollConfig-DH2oCtFS.js → pollConfig-2nFzv6Hy.js} +1 -1
- package/dist/chunks/{poor-Dha9p9RF.js → poor-DXumVTR4.js} +1 -1
- package/dist/chunks/{poorMode-1NLYiS3Y.js → poorMode-CBOtooa0.js} +1 -1
- package/dist/chunks/poorMode-yNZL5uYf.js +1 -0
- package/dist/chunks/print-uxCF5ka5.js +23 -0
- package/dist/chunks/{privacy-settings-6ZWxR4Qt.js → privacy-settings-BncbJCV0.js} +1 -1
- package/dist/chunks/processBashCommand-CGdwvPmD.js +1 -0
- package/dist/chunks/processSlashCommand-DQarepEb.js +5 -0
- package/dist/chunks/prompt-BgOdcHkd.js +1 -0
- package/dist/chunks/{prompt-Bg_1U0gO.js → prompt-CE3sFmZV.js} +5 -5
- package/dist/chunks/prompt-CLJKFebn.js +1 -0
- package/dist/chunks/{promptEditor-BhYDmwdS.js → promptEditor-CyTzyjwG.js} +2 -2
- package/dist/chunks/{protocolHandler-Dnb7lITm.js → protocolHandler-JR8pASdH.js} +1 -1
- package/dist/chunks/rate-limit-options-C-EqWjeI.js +1 -0
- package/dist/chunks/{rcDebugLog-VKwMl0yg.js → rcDebugLog-DBB9r8aw.js} +1 -1
- package/dist/chunks/reconciler-CYD_XpG4.js +4 -0
- package/dist/chunks/{referral-BlrMpBAV.js → referral-CKmHHxj_.js} +1 -1
- package/dist/chunks/refresh-ZqZdmLK5.js +1 -0
- package/dist/chunks/{registerProtocol-CuKZAiCc.js → registerProtocol-wZv2uiW_.js} +1 -1
- package/dist/chunks/{release-notes-BgP8u7NE.js → release-notes-B5K7wVqZ.js} +1 -1
- package/dist/chunks/{releaseNotes-CunqVlbU.js → releaseNotes-B8gbyFFJ.js} +2 -2
- package/dist/chunks/{reload-plugins-CD9TzvFm.js → reload-plugins-B9ApSp2m.js} +1 -1
- package/dist/chunks/{remote-env-QaP_W_sv.js → remote-env-CAt1dHIS.js} +1 -1
- package/dist/chunks/{remoteBridgeCore-9-HVMo63.js → remoteBridgeCore-Bk3UdSLJ.js} +1 -1
- package/dist/chunks/remoteManagedSettings-bswzAB6W.js +1 -0
- package/dist/chunks/rename-CE_U6KE6.js +1 -0
- package/dist/chunks/{resume-D-SpOy_1.js → resume-BicEjsPd.js} +2 -2
- package/dist/chunks/{runtimeObserver-Dm3LIUMp.js → runtimeObserver-BrGF5QWX.js} +4 -4
- package/dist/chunks/{runtimeObserver-DOEcrylu.js → runtimeObserver-CiwnPFjK.js} +1 -1
- package/dist/chunks/sandbox-adapter-BtMiHImm.js +1 -0
- package/dist/chunks/{sandbox-toggle-B61AeBor.js → sandbox-toggle-D8eebdyI.js} +1 -1
- package/dist/chunks/searchExtraTools-hLLPuh7c.js +1 -0
- package/dist/chunks/{session-RwJCIIcs.js → session-BZIlR9Gc.js} +2 -2
- package/dist/chunks/{sessionDiscovery-dkFeWcA3.js → sessionDiscovery-DfDqTrF1.js} +1 -1
- package/dist/chunks/sessionFileAccessHooks-Bm8wiqwe.js +1 -0
- package/dist/chunks/sessionMemory-D37S0-jX.js +1 -0
- package/dist/chunks/sessionMemory-DmlAG3jq.js +1 -0
- package/dist/chunks/sessionMemoryUtils-6EWDHSGU.js +1 -0
- package/dist/chunks/sessionObserver-BUw2rzKl.js +1 -0
- package/dist/chunks/{sessionObserver-CSOYgsvH.js → sessionObserver-KgquhGWw.js} +1 -1
- package/dist/chunks/sessionStorage-CucBSK5Q.js +1 -0
- package/dist/chunks/{sessionTitle-CLOlPZ_M.js → sessionTitle-DAnM73S0.js} +2 -2
- package/dist/chunks/{sessionTracing-D8wr9j4X.js → sessionTracing-_Hh5VXxt.js} +1 -1
- package/dist/chunks/settings-BeLFUeie.js +19 -0
- package/dist/chunks/settings-Cl16Haug.js +1 -0
- package/dist/chunks/settingsSync-BNvFYH3c.js +1 -0
- package/dist/chunks/setup-D8kXv3ts.js +3 -0
- package/dist/chunks/{shadowedRuleDetection-CXsmUY2o.js → shadowedRuleDetection-C6R5zOUe.js} +1 -1
- package/dist/chunks/{sideQuestion-CHpOVzY5.js → sideQuestion-hUhxls9r.js} +3 -3
- package/dist/chunks/{sinks-1hFrW9HK.js → sinks-BuE17DeZ.js} +2 -2
- package/dist/chunks/sinks-FevoYQqP.js +1 -0
- package/dist/chunks/{skill-learning-Ck17rwH8.js → skill-learning-CMdxGtxr.js} +1 -1
- package/dist/chunks/skillChangeDetector-C65ZLSYV.js +1 -0
- package/dist/chunks/{skillGapStore-DyqNKuNy.js → skillGapStore-D18LRJAM.js} +2 -2
- package/dist/chunks/{skillGapStore-BJ1h2LVr.js → skillGapStore-Ep62R-2_.js} +1 -1
- package/dist/chunks/{skillGenerator-BT8NGzXT.js → skillGenerator-Bc7WwNT8.js} +2 -2
- package/dist/chunks/{skillLearning-Cn9Uw0Kd.js → skillLearning-Cs9fJgkV.js} +1 -1
- package/dist/chunks/skillLearning-duPZl69A.js +1 -0
- package/dist/chunks/{skillPanel-N0GoWjIi.js → skillPanel-Cyzby746.js} +3 -3
- package/dist/chunks/{skillSearchPanel-CTwtgTzy.js → skillSearchPanel-Cll9ccA5.js} +4 -4
- package/dist/chunks/{skills-Bv3lH-aA.js → skills-BPPeYBy7.js} +1 -1
- package/dist/chunks/{stats-C1Ff6w4i.js → stats-CqfF4Axp.js} +1 -1
- package/dist/chunks/{status-FD7HVYS7.js → status-CC9Q-2Yn.js} +1 -1
- package/dist/chunks/{status-DyXiBa0m.js → status-D4IQpsNK.js} +2 -2
- package/dist/chunks/statusNoticeHelpers-CEGvdm5d.js +1 -0
- package/dist/chunks/syncCache-CANQZ9mQ.js +1 -0
- package/dist/chunks/{tag-RzOSA5T0.js → tag-DDbNqBMu.js} +2 -2
- package/dist/chunks/{tasks-eJrOcdhB.js → tasks-CZvWJYGr.js} +1 -1
- package/dist/chunks/teleport-Dk5j03Ix.js +1 -0
- package/dist/chunks/{templateJobs-BnOBSFtq.js → templateJobs-D1BdhZsv.js} +1 -1
- package/dist/chunks/{terminalSetup-D_P5iZmq.js → terminalSetup-3JNy6i_J.js} +5 -5
- package/dist/chunks/{terminalSetup-BfvmoJaK.js → terminalSetup-Cn6jeYw1.js} +1 -1
- package/dist/chunks/{theme-S0kVMVt4.js → theme-Cg4GNOoQ.js} +1 -1
- package/dist/chunks/thinkback-p-vKIRW_.js +1 -0
- package/dist/chunks/thinkback-play-DnPTDE8B.js +1 -0
- package/dist/chunks/{thinkback-HyW_R_88.js → thinkback-rFA1do6F.js} +1 -1
- package/dist/chunks/{toolEventObserver--Z6jENks.js → toolEventObserver-CzsCuUMc.js} +1 -1
- package/dist/chunks/{toolEventObserver-BAFzvePj.js → toolEventObserver-SFwURL5F.js} +1 -1
- package/dist/chunks/toolPool-BR27AMJO.js +1 -0
- package/dist/chunks/trustedDevice-BYt39fui.js +1 -0
- package/dist/chunks/{trustedDevice-Dn4rXbxT.js → trustedDevice-CKedohmT.js} +1 -1
- package/dist/chunks/{types-C-MRCL8J.js → types-Dut4311z.js} +2 -2
- package/dist/chunks/{ultrareviewCommand-mYDTBCFD.js → ultrareviewCommand-C_4OSBTW.js} +2 -2
- package/dist/chunks/{undercover-CdapzvNH.js → undercover-D30rKimg.js} +2 -2
- package/dist/chunks/undercover-DRSwLozU.js +1 -0
- package/dist/chunks/{updateCCB-DPShheOr.js → updateCCB-C2G-U-qA.js} +1 -1
- package/dist/chunks/upgrade-Bi-bIz7R.js +1 -0
- package/dist/chunks/{upgrade-BOeakAP6.js → upgrade-Chs-OQFd.js} +1 -1
- package/dist/chunks/{upload-BXQsDtLW.js → upload-D8FWMSQx.js} +1 -1
- package/dist/chunks/{usage-iNQzY960.js → usage-BxVeUt60.js} +1 -1
- package/dist/chunks/usage-DUO7Yy1f.js +1 -0
- package/dist/chunks/{useExitOnCtrlCDWithKeybindings-CntByfTQ.js → useExitOnCtrlCDWithKeybindings-BwsZ5f0s.js} +1 -1
- package/dist/chunks/useMainLoopModel-Gy1Vv4Qr.js +1 -0
- package/dist/chunks/useManagePlugins-B11_87VN.js +1 -0
- package/dist/chunks/useMergedTools-CR56my9t.js +1 -0
- package/dist/chunks/{useSearchInput-H-8hJeFD.js → useSearchInput-C5OzQnX6.js} +1 -1
- package/dist/chunks/{useSettingsErrors-BF5i5Xju.js → useSettingsErrors-B9vOZL41.js} +1 -1
- package/dist/chunks/{util-CoicMvOv.js → util-8EHwfg4A.js} +1 -1
- package/dist/chunks/validatePlugin-6q1qmnAC.js +1 -0
- package/dist/chunks/{vim-DdvQlLDm.js → vim-CNDzwoTd.js} +1 -1
- package/dist/chunks/{workerRegistry-CzqQwCHC.js → workerRegistry-CvyHvwx-.js} +1 -1
- package/dist/chunks/worktree-ogmNCIpz.js +1 -0
- package/dist/cli.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/ApproveApiKey-CKfn7U1R.js +0 -1
- package/dist/chunks/BackgroundTasksDialog-CyoLEYWH.js +0 -2
- package/dist/chunks/ClaudeMdExternalIncludesDialog-TypH-X8e.js +0 -1
- package/dist/chunks/ConsoleOAuthFlow-wGQuFt41.js +0 -1
- package/dist/chunks/Doctor-CcJUwSQn.js +0 -1
- package/dist/chunks/Doctor-Yco1McrL.js +0 -3
- package/dist/chunks/ExitFlow-D3csukbB.js +0 -2
- package/dist/chunks/Grove-DPkIjqg8.js +0 -1
- package/dist/chunks/Grove-Dsd7F39b.js +0 -11
- package/dist/chunks/MCPConnectionManager-MWpKjeZT.js +0 -1
- package/dist/chunks/MessageSelector-DsQmqFt2.js +0 -3
- package/dist/chunks/Messages-B3sGRx5A.js +0 -11
- package/dist/chunks/PluginSettings-B0jbwB2M.js +0 -17
- package/dist/chunks/QueryEngine-cwdsr4dr.js +0 -1
- package/dist/chunks/REPL-CJzScgbZ.js +0 -142
- package/dist/chunks/REPL-DlBJIPCw.js +0 -1
- package/dist/chunks/ResumeConversation-Rxwd6HAJ.js +0 -1
- package/dist/chunks/SearchExtraToolsTool-VP87ErGx.js +0 -1
- package/dist/chunks/Settings-CxI_KHUj.js +0 -2
- package/dist/chunks/TrustDialog-CnVKrdxQ.js +0 -1
- package/dist/chunks/agents-Du9KYHqN.js +0 -103
- package/dist/chunks/allErrors-P3utlEeA.js +0 -1
- package/dist/chunks/api-BiwZmmsh.js +0 -1
- package/dist/chunks/auth-BQa4kzQo.js +0 -1
- package/dist/chunks/auth-UAJhZNmZ.js +0 -1
- package/dist/chunks/autonomy-Cg5zweUa.js +0 -15
- package/dist/chunks/backgroundHousekeeping-BUUZ7Csq.js +0 -1
- package/dist/chunks/backgroundHousekeeping-DhF2lrQ9.js +0 -17
- package/dist/chunks/bridgeConfig-DWEqKbXk.js +0 -1
- package/dist/chunks/bridgeEnabled-CjVCMwnq.js +0 -1
- package/dist/chunks/bridgeMain-6lollTtZ.js +0 -1
- package/dist/chunks/bridgeMain-BX2AkLPs.js +0 -68
- package/dist/chunks/caches-C46fa77L.js +0 -1
- package/dist/chunks/client-Bup0Sgcn.js +0 -1
- package/dist/chunks/commands-BdB1eFvP.js +0 -1
- package/dist/chunks/commitAttribution-D6J3NuhB.js +0 -1
- package/dist/chunks/compact-C6-lMHgn.js +0 -2
- package/dist/chunks/config-Bxt1UH1T.js +0 -1
- package/dist/chunks/config-CjjXZfNi.js +0 -1
- package/dist/chunks/context-noninteractive-DvGo1l7b.js +0 -1
- package/dist/chunks/conversation-CH9ouFai.js +0 -1
- package/dist/chunks/conversation-CYqqk0o7.js +0 -1
- package/dist/chunks/createSession-DUfOAeyE.js +0 -1
- package/dist/chunks/crossProjectResume-D5hTOfnE.js +0 -40
- package/dist/chunks/doctor-7fgVhEKL.js +0 -1
- package/dist/chunks/envLessBridgeConfig-B2HYnEKo.js +0 -1
- package/dist/chunks/envLessBridgeConfig-DXd10GXD.js +0 -1
- package/dist/chunks/exit-ropaQiOr.js +0 -1
- package/dist/chunks/extra-usage-CLhv1Z4g.js +0 -1
- package/dist/chunks/extractMemories-B2IAvbXM.js +0 -1
- package/dist/chunks/fast-_G6zcFye.js +0 -1
- package/dist/chunks/firstPartyEventLogger-C9LzVy6y.js +0 -1
- package/dist/chunks/generateRecap-BhvbixY2.js +0 -1
- package/dist/chunks/generateSessionName-CN1oh7Fa.js +0 -1
- package/dist/chunks/grok-ax26ju8y.js +0 -1
- package/dist/chunks/hooks-BUJLxdFJ.js +0 -1
- package/dist/chunks/hostGuard-C5xydXZI.js +0 -1
- package/dist/chunks/inboundAttachments-C0nMTtCi.js +0 -1
- package/dist/chunks/initReplBridge-DJs28ZkI.js +0 -1
- package/dist/chunks/language-DfOAuDFc.js +0 -1
- package/dist/chunks/loadAgentsDir-DTbJJff-.js +0 -1
- package/dist/chunks/loadPluginHooks-Cvd5VdjQ.js +0 -1
- package/dist/chunks/localSearch-DKv8PRLD.js +0 -1
- package/dist/chunks/mcp-CNuhEGP6.js +0 -6
- package/dist/chunks/mcp-Ci0OPVrR.js +0 -1
- package/dist/chunks/mcp-CwIYauZl.js +0 -2
- package/dist/chunks/memory-DCGqfQ1U.js +0 -1
- package/dist/chunks/model-BQF64tZx.js +0 -1
- package/dist/chunks/model-DvrvG6BB.js +0 -1
- package/dist/chunks/onChangeAppState-CHhRDkM7.js +0 -1
- package/dist/chunks/permissions-JU9CGHgI.js +0 -3
- package/dist/chunks/pluginAutoupdate-CO-n9bqe.js +0 -1
- package/dist/chunks/pluginBlocklist-5qbaTRbV.js +0 -1
- package/dist/chunks/pluginCliCommands-I-lsw_us.js +0 -1
- package/dist/chunks/pluginOperations-Cz6eQ0Vu.js +0 -2
- package/dist/chunks/pluginStartupCheck-CoW7073W.js +0 -1
- package/dist/chunks/pluginStartupCheck-DJ9fslCK.js +0 -1
- package/dist/chunks/policyLimits-BkjgMQD0.js +0 -1
- package/dist/chunks/poorMode-qlxqU8Hm.js +0 -1
- package/dist/chunks/print-BL4EUT5Z.js +0 -23
- package/dist/chunks/processBashCommand-BZs9wggV.js +0 -1
- package/dist/chunks/processSlashCommand-D8lKLNzM.js +0 -5
- package/dist/chunks/prompt-CN7gBNKS.js +0 -1
- package/dist/chunks/prompt-D-zHhqp8.js +0 -1
- package/dist/chunks/rate-limit-options-DVzT3eWH.js +0 -1
- package/dist/chunks/reconciler-BdRXZTJf.js +0 -4
- package/dist/chunks/refresh-jwqnoK2h.js +0 -1
- package/dist/chunks/remoteManagedSettings-jZ6u8ZBT.js +0 -1
- package/dist/chunks/rename-29qxHf8W.js +0 -1
- package/dist/chunks/sandbox-adapter-LzTcKwBp.js +0 -1
- package/dist/chunks/searchExtraTools-CbJJQqzH.js +0 -1
- package/dist/chunks/sessionFileAccessHooks-B_nNW0zE.js +0 -1
- package/dist/chunks/sessionMemory-C4JAUZ6V.js +0 -1
- package/dist/chunks/sessionMemory-btARBn8H.js +0 -1
- package/dist/chunks/sessionMemoryUtils-BlqAy8oR.js +0 -1
- package/dist/chunks/sessionObserver-DMvWci8-.js +0 -1
- package/dist/chunks/sessionStorage-Diyuvt20.js +0 -1
- package/dist/chunks/settings-Dlp5JTa_.js +0 -19
- package/dist/chunks/settingsSync-QWA0VZSu.js +0 -1
- package/dist/chunks/setup-UI9uv2-K.js +0 -3
- package/dist/chunks/sinks-CXq8-7Qn.js +0 -1
- package/dist/chunks/skillChangeDetector-s0F9Yf9a.js +0 -1
- package/dist/chunks/skillLearning-1ZfYIzfL.js +0 -1
- package/dist/chunks/statusNoticeHelpers-kTp9Rdk6.js +0 -1
- package/dist/chunks/teleport-ABA-hdmP.js +0 -1
- package/dist/chunks/thinkback-C6gV2LpU.js +0 -1
- package/dist/chunks/thinkback-play-H6md4czq.js +0 -1
- package/dist/chunks/toolPool-CR61XXm3.js +0 -1
- package/dist/chunks/trustedDevice-DUrFWupL.js +0 -1
- package/dist/chunks/undercover-k3JoOKAb.js +0 -1
- package/dist/chunks/upgrade-D7iGU0PQ.js +0 -1
- package/dist/chunks/usage-DbRdMJog.js +0 -1
- package/dist/chunks/useMainLoopModel-DHkRIgNs.js +0 -1
- package/dist/chunks/useManagePlugins-B8HD0RUh.js +0 -1
- package/dist/chunks/useMergedTools-DfchLQZC.js +0 -1
- package/dist/chunks/validatePlugin-z2fcngf8.js +0 -1
- package/dist/chunks/worktree-DMhP5T0p.js +0 -1
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import{l as e,o as t,u as n}from"./envUtils-DSxRz_kt.js";import{Gr as r,di as i,t as a,ui as o}from"./src-CDCSSo0U2.js";import{Aa as s,Et as c,Fa as l,Ma as u,NC as d,Na as f,PC as p,Pa as m,ax as h,dx as g,ix as _,ja as v,jt as y,lx as b,nx as ee,ox as x,sx as S,ux as C,vt as w}from"./loadAgentsDir-Clu7Uk6a.js";import{C as T,F as E,S as D,a as O,l as k,w as A,z as j}from"./debug-BrXObCdR.js";import{Gt as M,Kt as N,Wt as te}from"./settings-Dlp5JTa_.js";import{M as P,j as F}from"./git-Do0wJvux.js";import{o as I,s as L}from"./log-BMCygSzM.js";import{i as R,n as z,r as B}from"./analytics-BotDBGh0.js";import{T as V,b as H,u as U}from"./startupProfiler-xa3NmN7Z.js";import{_n as W,vn as G}from"./model-BQF64tZx.js";import{n as K,t as q}from"./rcDebugLog-VKwMl0yg.js";import{c as J,d as ne,f as re,n as Y,o as X,r as ie}from"./debugUtils-NO5KtXqi.js";import{n as ae,s as oe}from"./firstPartyEventLogger-BNGPPBNP.js";import{n as se,t as ce}from"./datadog-UkGdjL8-.js";import{a as le,t as ue}from"./types-Bh9S_JG5.js";import{i as de,n as Z,r as Q}from"./cliLaunch-BkPAatcs.js";import{t as $}from"./lib-BlVGipXx.js";import{t as fe}from"./capacityWake-CV_x9H8j.js";import{t as pe}from"./jwtUtils-DE2GPUcx.js";import{t as me}from"./pollConfig-DH2oCtFS.js";import{i as he}from"./trustedDevice-Dn4rXbxT.js";import{a as ge,i as _e,n as ve,r as ye,t as be}from"./workSecret-CNWiR2uQ.js";import{hostname as xe,tmpdir as Se}from"os";import{basename as Ce,dirname as we,join as Te,resolve as Ee}from"path";import{createWriteStream as De}from"fs";import{randomUUID as Oe}from"crypto";import{spawn as ke}from"child_process";import{createInterface as Ae}from"readline";t(),j(),D(),F(),I(),z(),H(),W(),p(),ce(),ae(),X(),q(),le(),u(),c(),de(),i();var je=$();N(),a(),O(),b();var Me={type:`utf8`,errorCorrectionLevel:`L`,small:!0};async function Ne(e){return(await(0,je.toString)(e,Me)).split(`
|
|
2
|
-
`).filter(e=>e.length>0)}function Pe(e){let t=e.write??(e=>process.stdout.write(e)),n=e.verbose,i=0,a=`idle`,s=`Ready`,c=``,l=``,u=``,d=``,f=``,p=``,m=null,v=[],y=!1,b=null,w=0,T=0,E=1,D=null,O=`single-session`,A=new Map,j=null,N=0;function P(e){let t=process.stdout.columns||80,n=0;for(let i of e.split(`
|
|
3
|
-
`)){if(i.length===0){n++;continue}let e=r(i);n+=Math.max(1,Math.ceil(e/t))}return e.endsWith(`
|
|
4
|
-
`)&&n--,n}function F(e){t(e),i+=P(e)}function I(){i<=0||(k(`[bridge:ui] clearStatusLines count=${i}`),t(`\x1b[${i}A`),t(`\x1B[J`),i=0)}function L(e){I(),t(e)}function R(e){Ne(e).then(e=>{v=e,W()}).catch(e=>{k(`QR code generation failed: ${e}`,{level:`error`})})}function z(){I();let e=M[N%M.length],t=``;c&&(t+=o.dim(` · `)+o.dim(c)),l&&(t+=o.dim(` · `)+o.dim(l)),F(`${o.yellow(e)} ${o.yellow(`Connecting`)}${t}\n`)}function B(){H(),z(),j=setInterval(()=>{N++,z()},150)}function H(){j&&(clearInterval(j),j=null)}function W(){if(a===`reconnecting`||a===`failed`)return;I();let e=a===`idle`;if(y)for(let e of v)F(`${o.dim(e)}\n`);let t=te,n=e?o.green:o.cyan,r=(e?o.green:o.cyan)(s),i=``;if(c&&(i+=o.dim(` · `)+o.dim(c)),l&&O!==`worktree`&&(i+=o.dim(` · `)+o.dim(l)),process.env.USER_TYPE===`ant`&&u&&F(`${o.yellow(`[ANT-ONLY] Logs:`)} ${o.dim(u)}\n`),F(`${n(t)} ${r}${i}\n`),E>1){let e=O===`worktree`?`New sessions will be created in an isolated worktree`:`New sessions will be created in the current directory`;F(` ${o.dim(`Capacity: ${T}/${E} \u00b7 ${e}`)}\n`);for(let[,e]of A){let t=g(e.title?V(e.title,35):o.dim(`Attached`),e.url),n=e.activity;F(` ${t}${n&&n.type!==`result`&&n.type!==`error`?o.dim(` ${V(n.summary,40)}`):``}
|
|
5
|
-
`)}}if(E===1){let e=O===`single-session`?`Single session · exits when complete`:O===`worktree`?`Capacity: ${T}/1 \u00b7 New sessions will be created in an isolated worktree`:`Capacity: ${T}/1 \u00b7 New sessions will be created in the current directory`;F(` ${o.dim(e)}\n`)}E===1&&!e&&b&&Date.now()-w<3e4&&F(` ${o.dim(V(b,60))}\n`);let f=m??d;if(f){F(`
|
|
6
|
-
`);let t=e?S(f):_(f),n=y?o.dim.italic(`space to hide QR code`):o.dim.italic(`space to show QR code`),r=D?o.dim.italic(` · w to toggle spawn mode`):``;F(`${o.dim(t)}\n`),F(`${n}${r}\n`)}}return{printBanner(e,r){f=e.sessionIngressUrl,p=r,d=h(r,f),R(d),n&&t(o.dim(`Remote Control`)+` v0.0.5
|
|
7
|
-
`),n&&(e.spawnMode!==`single-session`&&(t(o.dim(`Spawn mode: `)+`${e.spawnMode}\n`),t(o.dim(`Max concurrent sessions: `)+`${e.maxSessions}\n`)),t(o.dim(`Environment ID: `)+`${r}\n`)),e.sandbox&&t(o.dim(`Sandbox: `)+`${o.green(`Enabled`)}\n`),t(`
|
|
8
|
-
`),B()},logSessionStart(e,t){if(n){let n=V(t,80);L(o.dim(`[${C()}]`)+` Session started: ${o.white(`"${n}"`)} (${o.dim(e)})\n`)}},logSessionComplete(e,t){L(o.dim(`[${C()}]`)+` Session ${o.green(`completed`)} (${U(t)}) ${o.dim(e)}\n`)},logSessionFailed(e,t){L(o.dim(`[${C()}]`)+` Session ${o.red(`failed`)}: ${t} ${o.dim(e)}\n`)},logStatus(e){L(o.dim(`[${C()}]`)+` ${e}\n`)},logVerbose(e){n&&L(o.dim(`[${C()}] ${e}`)+`
|
|
9
|
-
`)},logError(e){L(o.red(`[${C()}] Error: ${e}`)+`
|
|
10
|
-
`)},logReconnected(e){L(o.dim(`[${C()}]`)+` ${o.green(`Reconnected`)} after ${U(e)}\n`)},setRepoInfo(e,t){c=e,l=t},setDebugLogPath(e){u=e},updateIdleStatus(){H(),a=`idle`,s=`Ready`,b=null,w=0,m=null,R(d),W()},setAttached(e){H(),a=`attached`,s=`Connected`,b=null,w=0,E<=1&&(m=x(e,p,f),R(m)),W()},updateReconnectingStatus(e,t){if(H(),I(),a=`reconnecting`,y)for(let e of v)F(`${o.dim(e)}\n`);let n=M[N%M.length];N++,F(`${o.yellow(n)} ${o.yellow(`Reconnecting`)} ${o.dim(`·`)} ${o.dim(`retrying in ${e}`)} ${o.dim(`·`)} ${o.dim(`disconnected ${t}`)}\n`)},updateFailedStatus(e){H(),I(),a=`failed`;let t=``;c&&(t+=o.dim(` · `)+o.dim(c)),l&&(t+=o.dim(` · `)+o.dim(l)),F(`${o.red(`×`)} ${o.red(`Remote Control Failed`)}${t}\n`),F(`${o.dim(ee)}\n`),e&&F(`${o.red(e)}\n`)},updateSessionStatus(e,t,n,r){n.type===`tool_start`&&(b=n.summary,w=Date.now()),W()},clearStatus(){H(),I()},toggleQr(){y=!y,W()},updateSessionCount(e,t,n){T===e&&E===t&&O===n||(T=e,E=t,O=n)},setSpawnModeDisplay(e){D!==e&&(D=e,e&&(O=e))},addSession(e,t){A.set(e,{url:t})},updateSessionActivity(e,t){let n=A.get(e);n&&(n.activity=t)},setSessionTitle(e,t){let n=A.get(e);n&&(n.title=t,!(a===`reconnecting`||a===`failed`)&&(E===1&&(a=`titled`,s=V(t,40)),W()))},removeSession(e){A.delete(e)},refreshDisplay(){a===`reconnecting`||a===`failed`||W()}}}J();var Fe=10,Ie=10;function Le(e){return e.replace(/[^a-zA-Z0-9_-]/g,`_`)}var Re={Read:`Reading`,Write:`Writing`,Edit:`Editing`,MultiEdit:`Editing`,Bash:`Running`,Glob:`Searching`,Grep:`Searching`,WebFetch:`Fetching`,WebSearch:`Searching`,Task:`Running task`,FileReadTool:`Reading`,FileWriteTool:`Writing`,FileEditTool:`Editing`,GlobTool:`Searching`,GrepTool:`Searching`,BashTool:`Running`,NotebookEditTool:`Editing notebook`,LSP:`LSP`};function ze(e,t){let n=Re[e]??e,r=t.file_path??t.filePath??t.pattern??t.command?.slice(0,60)??t.url??t.query??``;return r?`${n} ${r}`:n}function Be(e,t,n){let r;try{r=T(e)}catch{return[]}if(!r||typeof r!=`object`)return[];let i=r,a=[],o=Date.now();switch(i.type){case`assistant`:{let e=i.message;if(!e)break;let r=e.content;if(!Array.isArray(r))break;for(let e of r){if(!e||typeof e!=`object`)continue;let r=e;if(r.type===`tool_use`){let e=r.name??`Tool`,i=r.input??{},s=ze(e,i);a.push({type:`tool_start`,summary:s,timestamp:o}),n(`[bridge:activity] sessionId=${t} tool_use name=${e} ${He(i)}`)}else if(r.type===`text`){let e=r.text??``;e.length>0&&(a.push({type:`text`,summary:e.slice(0,80),timestamp:o}),n(`[bridge:activity] sessionId=${t} text "${e.slice(0,100)}"`))}}break}case`result`:{let e=i.subtype;if(e===`success`)a.push({type:`result`,summary:`Session completed`,timestamp:o}),n(`[bridge:activity] sessionId=${t} result subtype=success`);else if(e){let r=i.errors?.[0]??`Error: ${e}`;a.push({type:`error`,summary:r,timestamp:o}),n(`[bridge:activity] sessionId=${t} result subtype=${e} error="${r}"`)}else n(`[bridge:activity] sessionId=${t} result subtype=undefined`);break}default:break}return a}function Ve(e){if(e.parent_tool_use_id!=null||e.isSynthetic||e.isReplay)return;let t=e.message?.content,n;if(typeof t==`string`)n=t;else if(Array.isArray(t)){for(let e of t)if(e&&typeof e==`object`&&e.type===`text`){n=e.text;break}}return n=n?.trim(),n||void 0}function He(e){let t=[];for(let[n,r]of Object.entries(e))if(typeof r==`string`&&t.push(`${n}="${r.slice(0,100)}"`),t.length>=3)break;return t.join(` `)}function Ue(e){return{spawn(t,n){let r=Le(t.sessionId),i;if(e.debugFile){let t=e.debugFile.lastIndexOf(`.`);i=t>0?`${e.debugFile.slice(0,t)}-${r}${e.debugFile.slice(t)}`:`${e.debugFile}-${r}`}else(e.verbose||process.env.USER_TYPE===`ant`)&&(i=Te(Se(),`claude`,`bridge-session-${r}.log`));let a=null,o;e.debugFile&&(o=Te(we(e.debugFile),`bridge-transcript-${r}.jsonl`),a=De(o,{flags:`a`}),a.on(`error`,t=>{e.onDebug(`[bridge:session] Transcript write error: ${t.message}`),a=null}),e.onDebug(`[bridge:session] Transcript log: ${o}`));let s=[...e.scriptArgs,`--print`,`--sdk-url`,t.sdkUrl,`--session-id`,t.sessionId,`--input-format`,`stream-json`,`--output-format`,`stream-json`,`--replay-user-messages`,...e.verbose?[`--verbose`]:[],...i?[`--debug-file`,i]:[],...e.permissionMode?[`--permission-mode`,e.permissionMode]:[]],c={...e.env,CLAUDE_CODE_OAUTH_TOKEN:void 0,CLAUDE_CODE_ENVIRONMENT_KIND:`bridge`,...e.sandbox&&{CLAUDE_CODE_FORCE_SANDBOX:`1`},CLAUDE_CODE_SESSION_ACCESS_TOKEN:t.accessToken,CLAUDE_CODE_POST_FOR_SESSION_INGRESS_V2:`1`,...t.useCcrV2&&{CLAUDE_CODE_USE_CCR_V2:`1`,CLAUDE_CODE_WORKER_EPOCH:String(t.workerEpoch)}};e.onDebug(`[bridge:session] Spawning sessionId=${t.sessionId} sdkUrl=${t.sdkUrl} accessToken=${t.accessToken?`present`:`MISSING`}`),e.onDebug(`[bridge:session] Child args: ${s.join(` `)}`),i&&e.onDebug(`[bridge:session] Debug log: ${i}`);let l=ke(e.execPath,s,{cwd:n,stdio:[`pipe`,`pipe`,`pipe`],env:c,windowsHide:!0});e.onDebug(`[bridge:session] sessionId=${t.sessionId} pid=${l.pid}`);let u=[],d=null,f=[],p=!1,m=!1;l.stderr&&Ae({input:l.stderr}).on(`line`,t=>{e.verbose&&process.stderr.write(t+`
|
|
11
|
-
`),f.length>=Ie&&f.shift(),f.push(t)}),l.stdout&&Ae({input:l.stdout}).on(`line`,n=>{a&&a.write(n+`
|
|
12
|
-
`),e.onDebug(`[bridge:ws] sessionId=${t.sessionId} <<< ${Y(n)}`),e.verbose&&process.stderr.write(n+`
|
|
13
|
-
`);let r=Be(n,t.sessionId,e.onDebug);for(let n of r)u.length>=Fe&&u.shift(),u.push(n),d=n,e.onActivity?.(t.sessionId,n);{let r;try{r=T(n)}catch{}if(r&&typeof r==`object`){let n=r;if(n.type===`control_request`)n.request?.subtype===`can_use_tool`&&e.onPermissionRequest&&e.onPermissionRequest(t.sessionId,r,t.accessToken);else if(n.type===`user`&&!m&&t.onFirstUserMessage){let e=Ve(n);e&&(m=!0,t.onFirstUserMessage(e))}}}});let h=new Promise(n=>{l.on(`close`,(r,i)=>{a&&(a.end(),a=null),i===`SIGTERM`||i===`SIGINT`?(e.onDebug(`[bridge:session] sessionId=${t.sessionId} interrupted signal=${i} pid=${l.pid}`),n(`interrupted`)):r===0?(e.onDebug(`[bridge:session] sessionId=${t.sessionId} completed exit_code=0 pid=${l.pid}`),n(`completed`)):(e.onDebug(`[bridge:session] sessionId=${t.sessionId} failed exit_code=${r} pid=${l.pid}`),n(`failed`))}),l.on(`error`,r=>{e.onDebug(`[bridge:session] sessionId=${t.sessionId} spawn error: ${r.message}`),n(`failed`)})}),g={sessionId:t.sessionId,done:h,activities:u,accessToken:t.accessToken,lastStderr:f,get currentActivity(){return d},kill(){l.killed||(e.onDebug(`[bridge:session] Sending SIGTERM to sessionId=${t.sessionId} pid=${l.pid}`),process.platform===`win32`?l.kill():l.kill(`SIGTERM`))},forceKill(){!p&&l.pid&&(p=!0,e.onDebug(`[bridge:session] Sending SIGKILL to sessionId=${t.sessionId} pid=${l.pid}`),process.platform===`win32`?l.kill():l.kill(`SIGKILL`))},writeStdin(n){l.stdin&&!l.stdin.destroyed&&(e.onDebug(`[bridge:ws] sessionId=${t.sessionId} >>> ${Y(n)}`),l.stdin.write(n))},updateAccessToken(n){g.accessToken=n,g.writeStdin(A({type:`update_environment_variables`,variables:{CLAUDE_CODE_SESSION_ACCESS_TOKEN:n}})+`
|
|
14
|
-
`),e.onDebug(`[bridge:session] Sent token refresh via stdin for sessionId=${t.sessionId}`)}};return g}}}O(),b(),X();var We={connInitialMs:2e3,connCapMs:12e4,connGiveUpMs:6e5,generalInitialMs:500,generalCapMs:3e4,generalGiveUpMs:6e5},Ge=1e3,Ke=32;async function qe(){return!1}function Je(e){return e.connCapMs*2}function Ye(){let e=[...Z()],t=Q();return t&&e.push(t),e}function Xe(e,t,n){try{return e.spawn(t,n)}catch(e){let t=E(e);return L(Error(`Session spawn failed: ${t}`)),t}}async function Ze(t,r,i,a,o,c,u,p=We,h,g){let _=new AbortController;u.aborted?_.abort():u.addEventListener(`abort`,()=>_.abort(),{once:!0});let v=_.signal,b=new Map,ee=new Map,x=new Map,S=new Map,C=new Map,T=new Map,D=new Set,O=new Map,A=new Set,j=new Set,M=fe(v);async function N(){K(`heartbeat: checking ${b.size} active session(s)`);let e=!1,t=!1,n=[];for(let[i]of b){let o=x.get(i),c=C.get(i);if(!(!o||!c))try{await a.heartbeatWork(r,o,c),e=!0}catch(e){k(`[bridge:heartbeat] Failed for sessionId=${i} workId=${o}: ${E(e)}`),e instanceof s&&(B(`tengu_bridge_heartbeat_error`,{status:e.status,error_type:e.status===401||e.status===403?`auth_failed`:`fatal`}),e.status===401||e.status===403?n.push(i):t=!0)}}for(let e of n){c.logVerbose(`Session ${e} token expired — re-queuing via bridge/reconnect`);try{await a.reconnectSession(r,e),k(`[bridge:heartbeat] Re-queued sessionId=${e} via bridge/reconnect`)}catch(t){c.logError(`Failed to refresh session ${e} token: ${E(t)}`),k(`[bridge:heartbeat] reconnectSession(${e}) failed: ${E(t)}`,{level:`error`})}}return t?`fatal`:n.length>0?`auth_failed`:e?`ok`:`failed`}let te=new Set,F=g?pe({getAccessToken:g,onRefresh:(e,t)=>{let n=b.get(e);n&&(te.has(e)?(c.logVerbose(`Refreshing session ${e} token via bridge/reconnect`),a.reconnectSession(r,e).catch(t=>{c.logError(`Failed to refresh session ${e} token: ${E(t)}`),k(`[bridge:token] reconnectSession(${e}) failed: ${E(t)}`,{level:`error`})})):n.updateAccessToken(t))},label:`bridge`}):null,I=Date.now(),R=new Set;function z(e){R.add(e),e.finally(()=>R.delete(e))}let V=0,H=0,W=null,q=null,J=null,re=null,Y=!1;if(k(`[bridge:work] Starting poll loop spawnMode=${t.spawnMode} maxSessions=${t.maxSessions} environmentId=${r}`),P(`info`,`bridge_loop_started`,{max_sessions:t.maxSessions,spawn_mode:t.spawnMode}),process.env.USER_TYPE===`ant`){let e;if(t.debugFile){let n=t.debugFile.lastIndexOf(`.`);e=n>0?`${t.debugFile.slice(0,n)}-*${t.debugFile.slice(n)}`:`${t.debugFile}-*`}else e=Te(Se(),`claude`,`bridge-session-*.log`);c.setDebugLogPath(e)}c.printBanner(t,r),c.updateSessionCount(0,t.maxSessions,t.spawnMode),h&&c.setAttached(h);function X(){c.updateSessionCount(b.size,t.maxSessions,t.spawnMode);for(let[e,t]of b){let n=t.currentActivity;n&&c.updateSessionActivity(S.get(e)??e,n)}if(b.size===0){c.updateIdleStatus();return}let[e,n]=[...b.entries()].pop(),r=ee.get(e);if(!r)return;let i=n.currentActivity;if(!i||i.type===`result`||i.type===`error`){t.maxSessions>1&&c.refreshDisplay();return}let a=U(Date.now()-r),o=n.activities.filter(e=>e.type===`tool_start`).slice(-5).map(e=>e.summary);c.updateSessionStatus(e,a,i,o)}function ae(){oe(),X(),re=setInterval(X,Ge)}function oe(){re&&(clearInterval(re),re=null)}function se(e,n,i){return o=>{let s=x.get(e);K(`session done: sessionId=${e} workId=${s??`none`} status=${o} wasTimedOut=${A.has(e)} duration=${Math.round((Date.now()-n)/1e3)}s stderr=${i.lastStderr.length>0?i.lastStderr.join(`\\n`).slice(0,500):`(none)`}`),b.delete(e),ee.delete(e),x.delete(e),C.delete(e);let l=S.get(e)??e;S.delete(e),c.removeSession(l),j.delete(l),te.delete(e);let u=T.get(e);u&&(clearTimeout(u),T.delete(e)),F?.cancel(e),M.wake();let d=A.delete(e),f=d&&o===`interrupted`?`failed`:o,m=Date.now()-n;k(`[bridge:session] sessionId=${e} workId=${s??`unknown`} exited status=${f} duration=${U(m)}`),B(`tengu_bridge_session_done`,{status:f,duration_ms:m}),P(`info`,`bridge_session_done`,{status:f,duration_ms:m}),c.clearStatus(),oe();let h=i.lastStderr.length>0?i.lastStderr.join(`
|
|
15
|
-
`):void 0,g;switch(f){case`completed`:c.logSessionComplete(e,m);break;case`failed`:!d&&!v.aborted&&(g=h??`Process exited with error`,c.logSessionFailed(e,g),L(Error(`Bridge session failed: ${g}`)));break;case`interrupted`:c.logVerbose(`Session ${e} interrupted`);break}f!==`interrupted`&&s&&(z(rt(a,r,s,c,p.stopWorkBaseDelayMs)),D.add(s));let w=O.get(e);if(w&&(O.delete(e),z(y(w.worktreePath,w.worktreeBranch,w.gitRoot,w.hookBased).catch(e=>c.logVerbose(`Failed to remove worktree ${w.worktreePath}: ${E(e)}`)))),f!==`interrupted`&&!v.aborted)if(t.spawnMode!==`single-session`)z(a.archiveSession(l).catch(t=>c.logVerbose(`Failed to archive session ${e}: ${E(t)}`))),k(`[bridge:session] Session ${f}, returning to idle (multi-session mode)`);else{k(`[bridge:session] Session ${f}, aborting poll loop to tear down environment`),_.abort();return}v.aborted||ae()}}for(h||ae();!v.aborted;){let u=me();try{K(`poll: envId=${r} activeSessions=${b.size}`);let s=await a.pollForWork(r,i,v,u.reclaim_older_than_ms);if(W!==null||q!==null){let e=Date.now()-(W??q??Date.now());c.logReconnected(e),k(`[bridge:poll] Reconnected after ${U(e)}`),B(`tengu_bridge_reconnected`,{disconnected_ms:e})}if(V=0,H=0,W=null,q=null,J=null,!s){if(b.size>=t.maxSessions){let e=u.multisession_poll_interval_ms_at_capacity;if(u.non_exclusive_heartbeat_interval_ms>0){B(`tengu_bridge_heartbeat_mode_entered`,{active_sessions:b.size,heartbeat_interval_ms:u.non_exclusive_heartbeat_interval_ms});let n=e>0?Date.now()+e:null,r=`ok`,i=0;for(;!v.aborted&&b.size>=t.maxSessions&&(n===null||Date.now()<n);){let e=me();if(e.non_exclusive_heartbeat_interval_ms<=0)break;let t=M.signal();if(r=await N(),r===`auth_failed`||r===`fatal`){t.cleanup();break}i++,await G(e.non_exclusive_heartbeat_interval_ms,t.signal),t.cleanup()}let a=r===`auth_failed`||r===`fatal`?r:v.aborted?`shutdown`:b.size<t.maxSessions?`capacity_changed`:n!==null&&Date.now()>=n?`poll_due`:`config_disabled`;if(B(`tengu_bridge_heartbeat_mode_exited`,{reason:a,heartbeat_cycles:i,active_sessions:b.size}),a===`poll_due`&&k(`[bridge:poll] Heartbeat poll_due after ${i} cycles — falling through to pollForWork`),r===`auth_failed`||r===`fatal`){let t=M.signal();await G(e>0?e:u.non_exclusive_heartbeat_interval_ms,t.signal),t.cleanup()}}else if(e>0){let t=M.signal();await G(e,t.signal),t.cleanup()}}else await G(b.size>0?u.multisession_poll_interval_ms_partial_capacity:u.multisession_poll_interval_ms_not_at_capacity,v);continue}let f=b.size>=t.maxSessions;if(D.has(s.id)){if(k(`[bridge:work] Skipping already-completed workId=${s.id}`),f){let e=M.signal();u.non_exclusive_heartbeat_interval_ms>0?(await N(),await G(u.non_exclusive_heartbeat_interval_ms,e.signal)):u.multisession_poll_interval_ms_at_capacity>0&&await G(u.multisession_poll_interval_ms_at_capacity,e.signal),e.cleanup()}else await G(1e3,v);continue}let m;try{m=ye(s.secret)}catch(e){let t=E(e);if(c.logError(`Failed to decode work secret for workId=${s.id}: ${t}`),B(`tengu_bridge_work_secret_failed`,{}),D.add(s.id),z(rt(a,r,s.id,c,p.stopWorkBaseDelayMs)),f){let e=M.signal();u.non_exclusive_heartbeat_interval_ms>0?(await N(),await G(u.non_exclusive_heartbeat_interval_ms,e.signal)):u.multisession_poll_interval_ms_at_capacity>0&&await G(u.multisession_poll_interval_ms_at_capacity,e.signal),e.cleanup()}continue}let g=async()=>{k(`[bridge:work] Acknowledging workId=${s.id}`);try{await a.acknowledgeWork(r,s.id,m.session_ingress_token)}catch(e){k(`[bridge:work] Acknowledge failed workId=${s.id}: ${E(e)}`)}},_=s.data.type;switch(s.data.type){case`healthcheck`:await g(),k(`[bridge:work] Healthcheck received`),c.logVerbose(`Healthcheck received`);break;case`session`:{let i=s.data.id;K(`work received: type=session sessionId=${i} workId=${s.id}`);try{l(i,`session_id`)}catch{await g(),c.logError(`Invalid session_id received: ${i}`);break}let u=b.get(i);if(u){u.updateAccessToken(m.session_ingress_token),C.set(i,m.session_ingress_token),x.set(i,s.id),F?.schedule(i,m.session_ingress_token),k(`[bridge:work] Updated access token for existing sessionId=${i} workId=${s.id}`),await g();break}if(b.size>=t.maxSessions){k(`[bridge:work] At capacity (${b.size}/${t.maxSessions}), cannot spawn new session for workId=${s.id}`);break}await g();let f=Date.now(),_,M=!1,N;if(m.use_code_sessions===!0||e(process.env.CLAUDE_BRIDGE_USE_CCR_V2)){_=be(t.apiBaseUrl,i);for(let e=1;e<=2;e++)try{N=await _e(_,m.session_ingress_token),M=!0,k(`[bridge:session] CCR v2: registered worker sessionId=${i} epoch=${N} attempt=${e}`);break}catch(t){let n=E(t);if(e<2){if(k(`[bridge:session] CCR v2: registerWorker attempt ${e} failed, retrying: ${n}`),await G(2e3,v),v.aborted)break;continue}c.logError(`CCR v2 worker registration failed for session ${i}: ${n}`),L(Error(`registerWorker failed: ${n}`)),D.add(s.id),z(rt(a,r,s.id,c,p.stopWorkBaseDelayMs))}if(!M)break}else _=ve(t.sessionIngressUrl,i);let I=t.spawnMode,R=t.dir,V=0;if(I===`worktree`&&(h===void 0||!ge(i,h))){let e=Date.now();try{let t=await w(`bridge-${Le(i)}`);V=Date.now()-e,O.set(i,{worktreePath:t.worktreePath,worktreeBranch:t.worktreeBranch,gitRoot:t.gitRoot,hookBased:t.hookBased}),R=t.worktreePath,k(`[bridge:session] Created worktree for sessionId=${i} at ${t.worktreePath}`)}catch(e){let t=E(e);c.logError(`Failed to create worktree for session ${i}: ${t}`),L(Error(`Worktree creation failed: ${t}`)),D.add(s.id),z(rt(a,r,s.id,c,p.stopWorkBaseDelayMs));break}}k(`[bridge:session] Spawning sessionId=${i} sdkUrl=${_}`);let H=ne(i);K(`spawning session: sessionId=${i} sdkUrl=${_} useCcrV2=${M} workerEpoch=${N} dir=${R} accessToken=${m.session_ingress_token?m.session_ingress_token.slice(0,8)+`...`:`NONE`}`);let U=Xe(o,{sessionId:i,sdkUrl:_,accessToken:m.session_ingress_token,useCcrV2:M,workerEpoch:N,onFirstUserMessage:e=>{if(j.has(H))return;j.add(H);let n=dt(e);c.setSessionTitle(H,n),k(`[bridge:title] derived title for ${H}: ${n}`),import(`./createSession-DUfOAeyE.js`).then(({updateBridgeSessionTitle:e})=>e(H,n,{baseUrl:t.apiBaseUrl})).catch(e=>k(`[bridge:title] failed to update title for ${H}: ${e}`,{level:`error`}))}},R);if(typeof U==`string`){c.logError(`Failed to spawn session ${i}: ${U}`);let e=O.get(i);e&&(O.delete(i),z(y(e.worktreePath,e.worktreeBranch,e.gitRoot,e.hookBased).catch(t=>c.logVerbose(`Failed to remove worktree ${e.worktreePath}: ${E(t)}`)))),D.add(s.id),z(rt(a,r,s.id,c,p.stopWorkBaseDelayMs));break}let W=U,q=Date.now()-f;B(`tengu_bridge_session_started`,{active_sessions:b.size,spawn_mode:I,in_worktree:O.has(i),spawn_duration_ms:q,worktree_create_ms:V,inProtectedNamespace:n()}),P(`info`,`bridge_session_started`,{spawn_mode:I,in_worktree:O.has(i),spawn_duration_ms:q,worktree_create_ms:V}),b.set(i,W),x.set(i,s.id),C.set(i,m.session_ingress_token),S.set(i,H);let J=Date.now();ee.set(i,J),c.logSessionStart(i,`Session ${i}`);let re=Le(i),Y;if(t.debugFile){let e=t.debugFile.lastIndexOf(`.`);Y=e>0?`${t.debugFile.slice(0,e)}-${re}${t.debugFile.slice(e)}`:`${t.debugFile}-${re}`}else(t.verbose||process.env.USER_TYPE===`ant`)&&(Y=Te(Se(),`claude`,`bridge-session-${re}.log`));Y&&c.logVerbose(`Debug log: ${Y}`),c.addSession(H,d(H,t.sessionIngressUrl)),ae(),c.setAttached(H),ft(H,t.apiBaseUrl).then(e=>{e&&b.has(i)&&(j.add(H),c.setSessionTitle(H,e),k(`[bridge:title] server title for ${H}: ${e}`))}).catch(e=>k(`[bridge:title] failed to fetch title for ${H}: ${e}`,{level:`error`}));let X=t.sessionTimeoutMs??864e5;if(X>0){let e=setTimeout(it,X,i,X,c,A,W);T.set(i,e)}M&&te.add(i),F?.schedule(i,m.session_ingress_token),W.done.then(se(i,J,W));break}default:await g(),k(`[bridge:work] Unknown work type: ${_}, skipping`);break}if(f){let e=M.signal();u.non_exclusive_heartbeat_interval_ms>0?(await N(),await G(u.non_exclusive_heartbeat_interval_ms,e.signal)):u.multisession_poll_interval_ms_at_capacity>0&&await G(u.multisession_poll_interval_ms_at_capacity,e.signal),e.cleanup()}}catch(e){if(v.aborted)break;if(e instanceof s){Y=!0,f(e.errorType)?c.logStatus(e.message):m(e)?k(`[bridge:work] Suppressed 403 error: ${e.message}`):(c.logError(e.message),L(e)),B(`tengu_bridge_fatal_error`,{status:e.status,error_type:e.errorType}),P(f(e.errorType)?`info`:`error`,`bridge_fatal_error`,{status:e.status,error_type:e.errorType});break}let t=ie(e);if(K(`poll error: ${t} isConn=${$e(e)} isServer=${et(e)} activeSessions=${b.size}`),$e(e)||et(e)){let e=Date.now();J!==null&&e-J>Je(p)&&(k(`[bridge:work] Detected system sleep (${Math.round((e-J)/1e3)}s gap), resetting error budget`),P(`info`,`bridge_poll_sleep_detected`,{gapMs:e-J}),W=null,V=0,q=null,H=0),J=e,W||(W=e);let n=e-W;if(n>=p.connGiveUpMs){c.logError(`Server unreachable for ${Math.round(n/6e4)} minutes, giving up.`),B(`tengu_bridge_poll_give_up`,{error_type:`connection`,elapsed_ms:n}),P(`error`,`bridge_poll_give_up`,{error_type:`connection`,elapsed_ms:n}),Y=!0;break}q=null,H=0,V=V?Math.min(V*2,p.connCapMs):p.connInitialMs;let r=tt(V);c.logVerbose(`Connection error, retrying in ${nt(r)} (${Math.round(n/1e3)}s elapsed): ${t}`),c.updateReconnectingStatus(nt(r),U(n)),me().non_exclusive_heartbeat_interval_ms>0&&await N(),await G(r,v)}else{let e=Date.now();J!==null&&e-J>Je(p)&&(k(`[bridge:work] Detected system sleep (${Math.round((e-J)/1e3)}s gap), resetting error budget`),P(`info`,`bridge_poll_sleep_detected`,{gapMs:e-J}),W=null,V=0,q=null,H=0),J=e,q||(q=e);let n=e-q;if(n>=p.generalGiveUpMs){c.logError(`Persistent errors for ${Math.round(n/6e4)} minutes, giving up.`),B(`tengu_bridge_poll_give_up`,{error_type:`general`,elapsed_ms:n}),P(`error`,`bridge_poll_give_up`,{error_type:`general`,elapsed_ms:n}),Y=!0;break}W=null,V=0,H=H?Math.min(H*2,p.generalCapMs):p.generalInitialMs;let r=tt(H);c.logVerbose(`Poll failed, retrying in ${nt(r)} (${Math.round(n/1e3)}s elapsed): ${t}`),c.updateReconnectingStatus(nt(r),U(n)),me().non_exclusive_heartbeat_interval_ms>0&&await N(),await G(r,v)}}}oe(),c.clearStatus();let ce=Date.now()-I;B(`tengu_bridge_shutdown`,{active_sessions:b.size,loop_duration_ms:ce}),P(`info`,`bridge_shutdown`,{active_sessions:b.size,loop_duration_ms:ce});let le=new Set(b.keys());h&&le.add(h);let ue=new Map(S);if(b.size>0){k(`[bridge:shutdown] Shutting down ${b.size} active session(s)`),c.logStatus(`Shutting down ${b.size} active session(s)\u2026`);let e=new Map(x);for(let[e,t]of b.entries())k(`[bridge:shutdown] Sending SIGTERM to sessionId=${e}`),t.kill();let t=new AbortController;await Promise.race([Promise.allSettled([...b.values()].map(e=>e.done)),G(p.shutdownGraceMs??3e4,t.signal)]),t.abort();for(let[e,t]of b.entries())k(`[bridge:shutdown] Force-killing stuck sessionId=${e}`),t.forceKill();for(let e of T.values())clearTimeout(e);if(T.clear(),F?.cancelAll(),O.size>0){let e=[...O.values()];O.clear(),k(`[bridge:shutdown] Cleaning up ${e.length} worktree(s)`),await Promise.allSettled(e.map(e=>y(e.worktreePath,e.worktreeBranch,e.gitRoot,e.hookBased)))}await Promise.allSettled([...e.entries()].map(([e,t])=>a.stopWork(r,t,!0).catch(n=>c.logVerbose(`Failed to stop work ${t} for session ${e}: ${E(n)}`))))}if(R.size>0&&await Promise.allSettled([...R]),t.spawnMode===`single-session`&&h&&!Y){c.logStatus("Resume this session by running `claude remote-control --continue`"),k(`[bridge:shutdown] Skipping archive+deregister to allow resume of session ${h}`);return}le.size>0&&(k(`[bridge:shutdown] Archiving ${le.size} session(s)`),await Promise.allSettled([...le].map(e=>a.archiveSession(ue.get(e)??ne(e)).catch(t=>c.logVerbose(`Failed to archive session ${e}: ${E(t)}`)))));try{await a.deregisterEnvironment(r),k(`[bridge:shutdown] Environment deregistered, bridge offline`),c.logVerbose(`Environment deregistered.`)}catch(e){c.logVerbose(`Failed to deregister environment: ${E(e)}`)}let{clearBridgePointer:de}=await import(`./bridgePointer-MqLe5Asm.js`);await de(t.dir),c.logVerbose(`Environment offline.`)}var Qe=new Set([`ECONNREFUSED`,`ECONNRESET`,`ETIMEDOUT`,`ENETUNREACH`,`EHOSTUNREACH`]);function $e(e){return!!(e&&typeof e==`object`&&`code`in e&&typeof e.code==`string`&&Qe.has(e.code))}function et(e){return!!e&&typeof e==`object`&&`code`in e&&typeof e.code==`string`&&e.code===`ERR_BAD_RESPONSE`}function tt(e){return Math.max(0,e+e*.25*(2*Math.random()-1))}function nt(e){return e>=1e3?`${(e/1e3).toFixed(1)}s`:`${Math.round(e)}ms`}async function rt(e,t,n,r,i=1e3){for(let a=1;a<=3;a++)try{await e.stopWork(t,n,!1),k(`[bridge:work] stopWork succeeded for workId=${n} on attempt ${a}/3`);return}catch(e){if(e instanceof s){m(e)?k(`[bridge:work] Suppressed stopWork 403 for ${n}: ${e.message}`):r.logError(`Failed to stop work ${n}: ${e.message}`),P(`error`,`bridge_stop_work_failed`,{attempts:a,fatal:!0});return}let t=E(e);if(a<3){let e=tt(i*2**(a-1));r.logVerbose(`Failed to stop work ${n} (attempt ${a}/3), retrying in ${nt(e)}: ${t}`),await G(e)}else r.logError(`Failed to stop work ${n} after 3 attempts: ${t}`),P(`error`,`bridge_stop_work_failed`,{attempts:3})}}function it(e,t,n,r,i){k(`[bridge:session] sessionId=${e} timed out after ${U(t)}`),B(`tengu_bridge_session_timeout`,{timeout_ms:t}),n.logSessionFailed(e,`Session timed out after ${U(t)}`),r.add(e),i.kill()}var at=[`session`,`same-dir`,`worktree`];function ot(e){return e===`session`?`single-session`:e===`same-dir`?`same-dir`:e===`worktree`?`worktree`:`--spawn requires one of: ${at.join(`, `)} (got: ${e??`<missing>`})`}function st(e){let t=e===void 0?NaN:parseInt(e,10);return isNaN(t)||t<1?`--capacity requires a positive integer (got: ${e??`<missing>`})`:t}function ct(e){let t=!1,n=!1,r,i,a,o,s=!1,c,l,u,d,f=!1;for(let m=0;m<e.length;m++){let h=e[m];if(h===`--help`||h===`-h`)s=!0;else if(h===`--verbose`||h===`-v`)t=!0;else if(h===`--sandbox`)n=!0;else if(h===`--no-sandbox`)n=!1;else if(h===`--debug-file`&&m+1<e.length)r=Ee(e[++m]);else if(h.startsWith(`--debug-file=`))r=Ee(h.slice(13));else if(h===`--session-timeout`&&m+1<e.length)i=parseInt(e[++m],10)*1e3;else if(h.startsWith(`--session-timeout=`))i=parseInt(h.slice(18),10)*1e3;else if(h===`--permission-mode`&&m+1<e.length)a=e[++m];else if(h.startsWith(`--permission-mode=`))a=h.slice(18);else if(h===`--name`&&m+1<e.length)o=e[++m];else if(h.startsWith(`--name=`))o=h.slice(7);else if(h===`--session-id`&&m+1<e.length){if(d=e[++m],!d)return p(`--session-id requires a value`)}else if(h.startsWith(`--session-id=`)){if(d=h.slice(13),!d)return p(`--session-id requires a value`)}else if(h===`--continue`||h===`-c`)f=!0;else if(h===`--spawn`||h.startsWith(`--spawn=`)){if(c!==void 0)return p(`--spawn may only be specified once`);let t=ot(h.startsWith(`--spawn=`)?h.slice(8):e[++m]);if(t===`single-session`||t===`same-dir`||t===`worktree`)c=t;else return p(t)}else if(h===`--capacity`||h.startsWith(`--capacity=`)){if(l!==void 0)return p(`--capacity may only be specified once`);let t=st(h.startsWith(`--capacity=`)?h.slice(11):e[++m]);if(typeof t==`number`)l=t;else return p(t)}else if(h===`--create-session-in-dir`)u=!0;else if(h===`--no-create-session-in-dir`)u=!1;else return p(`Unknown argument: ${h}\nRun 'claude remote-control --help' for usage.`)}if(c===`single-session`&&l!==void 0)return p(`--capacity cannot be used with --spawn=session (single-session mode has fixed capacity 1).`);if((d||f)&&(c!==void 0||l!==void 0||u!==void 0))return p(`--session-id and --continue cannot be used with --spawn, --capacity, or --create-session-in-dir.`);if(d&&f)return p(`--session-id and --continue cannot be used together.`);return{verbose:t,sandbox:n,debugFile:r,sessionTimeoutMs:i,permissionMode:a,name:o,spawnMode:c,capacity:l,createSessionInDir:u,sessionId:d,continueSession:f,help:s};function p(e){return{verbose:t,sandbox:n,debugFile:r,sessionTimeoutMs:i,permissionMode:a,name:o,spawnMode:c,capacity:l,createSessionInDir:u,sessionId:d,continueSession:f,help:s,error:e}}}async function lt(){let{EXTERNAL_PERMISSION_MODES:e}=await import(`./permissions-CeYKbtSC.js`),t=e.join(`, `),n=await qe(),r=`
|
|
16
|
-
Remote Control - Connect your local environment to claude.ai/code
|
|
17
|
-
|
|
18
|
-
USAGE
|
|
19
|
-
claude remote-control [options]
|
|
20
|
-
OPTIONS
|
|
21
|
-
--name <name> Name for the session (shown in claude.ai/code)
|
|
22
|
-
-c, --continue Resume the last session in this directory
|
|
23
|
-
--session-id <id> Resume a specific session by ID (cannot be
|
|
24
|
-
used with spawn flags or --continue)
|
|
25
|
-
--permission-mode <mode> Permission mode for spawned sessions
|
|
26
|
-
(${t})
|
|
27
|
-
--debug-file <path> Write debug logs to file
|
|
28
|
-
-v, --verbose Enable verbose output
|
|
29
|
-
-h, --help Show this help
|
|
30
|
-
${n?` --spawn <mode> Spawn mode: same-dir, worktree, session
|
|
31
|
-
(default: same-dir)
|
|
32
|
-
--capacity <N> Max concurrent sessions in worktree or
|
|
33
|
-
same-dir mode (default: ${Ke})
|
|
34
|
-
--[no-]create-session-in-dir Pre-create a session in the current
|
|
35
|
-
directory; in worktree mode this session
|
|
36
|
-
stays in cwd while on-demand sessions get
|
|
37
|
-
isolated worktrees (default: on)
|
|
38
|
-
`:``}
|
|
39
|
-
DESCRIPTION
|
|
40
|
-
Remote Control allows you to control sessions on your local device from
|
|
41
|
-
claude.ai/code (https://claude.ai/code). Run this command in the
|
|
42
|
-
directory you want to work in, then connect from the Claude app or web.
|
|
43
|
-
${n?`
|
|
44
|
-
Remote Control runs as a persistent server that accepts multiple concurrent
|
|
45
|
-
sessions in the current directory. One session is pre-created on start so
|
|
46
|
-
you have somewhere to type immediately. Use --spawn=worktree to isolate
|
|
47
|
-
each on-demand session in its own git worktree, or --spawn=session for
|
|
48
|
-
the classic single-session mode (exits when that session ends). Press 'w'
|
|
49
|
-
during runtime to toggle between same-dir and worktree.
|
|
50
|
-
`:``}
|
|
51
|
-
NOTES
|
|
52
|
-
- You must be logged in with a Claude account that has a subscription
|
|
53
|
-
- Run \`claude\` first in the directory to accept the workspace trust dialog
|
|
54
|
-
${n?` - Worktree mode requires a git repository or WorktreeCreate/WorktreeRemove hooks
|
|
55
|
-
`:``}`;console.log(r)}var ut=80;function dt(e){return V(e.replace(/\s+/g,` `).trim(),ut)}async function ft(e,t){let{getBridgeSession:n}=await import(`./createSession-DUfOAeyE.js`);return(await n(e,{baseUrl:t}))?.title||void 0}async function pt(e){let t=ct(e);if(t.help){await lt();return}t.error&&(console.error(`Error: ${t.error}`),process.exit(1));let{verbose:n,sandbox:r,debugFile:i,sessionTimeoutMs:a,permissionMode:o,name:c,spawnMode:u,capacity:d,createSessionInDir:f,sessionId:p,continueSession:m}=t,h=p,g,_=u!==void 0||d!==void 0||f!==void 0;if(o!==void 0){let{PERMISSION_MODES:e}=await import(`./permissions-CeYKbtSC.js`),t=e;t.includes(o)||(console.error(`Error: Invalid permission mode '${o}'. Valid modes: ${t.join(`, `)}`),process.exit(1))}let y=Ee(`.`),{enableConfigs:b,checkHasTrustDialogAccepted:ee}=await import(`./config-Bxt1UH1T.js`);b();let{initSinks:x}=await import(`./sinks-CXq8-7Qn.js`);x();let S=await qe();_&&!S&&(await R(`tengu_bridge_multi_session_denied`,{used_spawn:u!==void 0,used_capacity:d!==void 0,used_create_session_in_dir:f!==void 0}),await Promise.race([Promise.all([oe(),se()]),G(500,void 0,{unref:!0})]).catch(()=>{}),console.error(`Error: Multi-session Remote Control is not enabled for your account yet.`),process.exit(1));let{setOriginalCwd:C,setCwdState:w}=await import(`./state-BOa-3Av3.js`);C(y),w(y),ee()||(console.error(`Error: Workspace not trusted. Please run \`claude\` in ${y} first to review and accept the workspace trust dialog.`),process.exit(1));let{clearOAuthTokenCache:T,checkAndRefreshOAuthTokenIfNeeded:D}=await import(`./auth-BQa4kzQo.js`),{getBridgeAccessToken:O,getBridgeBaseUrl:A}=await import(`./bridgeConfig-DWEqKbXk.js`);O()||(console.error(ue),process.exit(1));let{getGlobalConfig:j,saveGlobalConfig:M,getCurrentProjectConfig:N,saveCurrentProjectConfig:te}=await import(`./config-Bxt1UH1T.js`);if(!j().remoteDialogSeen){let e=(await import(`readline`)).createInterface({input:process.stdin,output:process.stdout});console.log(`
|
|
56
|
-
Remote Control lets you access this CLI session from the web (claude.ai/code)
|
|
57
|
-
or the Claude app, so you can pick up where you left off on any device.
|
|
58
|
-
|
|
59
|
-
You can disconnect remote access anytime by running /remote-control again.
|
|
60
|
-
`);let t=await new Promise(t=>{e.question(`Enable Remote Control? (y/n) `,t)});e.close(),M(e=>e.remoteDialogSeen?e:{...e,remoteDialogSeen:!0}),t.toLowerCase()!==`y`&&t.toLowerCase()!==`yes`&&process.exit(0)}if(m){let{readBridgePointerAcrossWorktrees:e}=await import(`./bridgePointer-MqLe5Asm.js`),t=await e(y);t||(console.error("Error: No recent session found in this directory or its worktrees. Run `claude remote-control` to start a new one."),process.exit(1));let{pointer:n,dir:r}=t,i=Math.round(n.ageMs/6e4),a=i<60?`${i}m`:`${Math.round(i/60)}h`,o=r===y?``:` from worktree ${r}`;console.error(`Resuming session ${n.sessionId} (${a} ago)${o}\u2026`),h=n.sessionId,g=r}let F=A();F.startsWith(`http://`)&&!F.includes(`localhost`)&&!F.includes(`127.0.0.1`)&&(console.error(`Error: Remote Control base URL uses HTTP. Only HTTPS or localhost HTTP is allowed.`),process.exit(1));let I=process.env.CLAUDE_BRIDGE_SESSION_INGRESS_URL||F,{getBranch:z,getRemoteUrl:V,findGitRoot:H}=await import(`./git-CbcnOf0E.js`),{hasWorktreeCreateHook:U}=await import(`./hooks-BUJLxdFJ.js`),W=U()||H(y)!==null,K=S?N().remoteControlSpawnMode:void 0;if(K===`worktree`&&!W&&(console.error(`Warning: Saved spawn mode is worktree but this directory is not a git repository. Falling back to same-dir.`),K=void 0,te(e=>e.remoteControlSpawnMode===void 0?e:{...e,remoteControlSpawnMode:void 0})),S&&!K&&W&&u===void 0&&!h&&process.stdin.isTTY){let e=(await import(`readline`)).createInterface({input:process.stdin,output:process.stdout});console.log(`
|
|
61
|
-
Claude Remote Control is launching in spawn mode which lets you create new sessions in this project from Work Mate on Web or your Mobile app. Learn more here: https://code.claude.com/docs/en/remote-control
|
|
62
|
-
|
|
63
|
-
Spawn mode for this project:
|
|
64
|
-
[1] same-dir — sessions share the current directory (default)
|
|
65
|
-
[2] worktree — each session gets an isolated git worktree
|
|
66
|
-
|
|
67
|
-
This can be changed later or explicitly set with --spawn=same-dir or --spawn=worktree.
|
|
68
|
-
`);let t=await new Promise(t=>{e.question(`Choose [1/2] (default: 1): `,t)});e.close();let n=t.trim()===`2`?`worktree`:`same-dir`;K=n,B(`tengu_bridge_spawn_mode_chosen`,{spawn_mode:n}),te(e=>e.remoteControlSpawnMode===n?e:{...e,remoteControlSpawnMode:n})}let q,J;h?(J=`single-session`,q=`resume`):u===void 0?K===void 0?(J=S?`same-dir`:`single-session`,q=`gate_default`):(J=K,q=`saved`):(J=u,q=`flag`);let ne=J===`single-session`?1:d??Ke,Y=f??!0;if(!h){let{clearBridgePointer:e}=await import(`./bridgePointer-MqLe5Asm.js`);await e(y)}J===`worktree`&&!W&&(console.error(`Error: Worktree mode requires a git repository or WorktreeCreate hooks configured. Use --spawn=session for single-session mode.`),process.exit(1));let X=await z(),ie=await V(),ae=xe(),ce=Oe(),{handleOAuth401Error:le}=await import(`./auth-BQa4kzQo.js`),de=v({baseUrl:F,getAccessToken:O,runnerVersion:`0.0.5`,onDebug:k,onAuth401:le,getTrustedDeviceToken:he}),Z;if(h){try{l(h,`sessionId`)}catch{console.error(`Error: Invalid session ID "${h}". Session IDs must not contain unsafe characters.`),process.exit(1)}await D(),T();let{getBridgeSession:e}=await import(`./createSession-DUfOAeyE.js`),t=await e(h,{baseUrl:F,getAccessToken:O});if(!t){if(g){let{clearBridgePointer:e}=await import(`./bridgePointer-MqLe5Asm.js`);await e(g)}console.error(`Error: Session ${h} not found. It may have been archived or expired.`),process.exit(1)}if(!t.environment_id){if(g){let{clearBridgePointer:e}=await import(`./bridgePointer-MqLe5Asm.js`);await e(g)}console.error(`Error: Session ${h} has no environment_id. It may never have been attached to a bridge.`),process.exit(1)}Z=t.environment_id,k(`[bridge:init] Resuming session ${h} on environment ${Z}`)}let Q={dir:y,machineName:ae,branch:X,gitRepoUrl:ie,maxSessions:ne,spawnMode:J,verbose:n,sandbox:r,bridgeId:ce,workerType:`claude_code`,environmentId:Oe(),reuseEnvironmentId:Z,apiBaseUrl:F,sessionIngressUrl:I,debugFile:i,sessionTimeoutMs:a};k(`[bridge:init] bridgeId=${ce}${Z?` reuseEnvironmentId=${Z}`:``} dir=${y} branch=${X} gitRepoUrl=${ie} machine=${ae}`),k(`[bridge:init] apiBaseUrl=${F} sessionIngressUrl=${I}`),k(`[bridge:init] sandbox=${r}${i?` debugFile=${i}`:``}`);let $,fe;try{let e=await de.registerBridgeEnvironment(Q);$=e.environment_id,fe=e.environment_secret}catch(e){B(`tengu_bridge_registration_failed`,{status:e instanceof s?e.status:void 0}),console.error(e instanceof s&&e.status===404?`Remote Control environments are not available for your account.`:`Error: ${E(e)}`),process.exit(1)}let pe;if(h)if(Z&&$!==Z)L(Error(`Bridge resume env mismatch: requested ${Z}, backend returned ${$}. Falling back to fresh session.`)),console.warn(`Warning: Could not resume session ${h} — its environment has expired. Creating a fresh session instead.`);else{let e=re(h),t=e===h?[h]:[h,e],n=!1,r;for(let e of t)try{await de.reconnectSession($,e),k(`[bridge:init] Session ${e} re-queued via bridge/reconnect`),pe=h,n=!0;break}catch(t){r=t,k(`[bridge:init] reconnectSession(${e}) failed: ${E(t)}`)}if(!n){let e=r,t=e instanceof s;if(g&&t){let{clearBridgePointer:e}=await import(`./bridgePointer-MqLe5Asm.js`);await e(g)}console.error(t?`Error: ${E(e)}`:`Error: Failed to reconnect session ${h}: ${E(e)}\nThe session may still be resumable — try running the same command again.`),process.exit(1)}}k(`[bridge:init] Registered, server environmentId=${$}`);let ge=me();B(`tengu_bridge_started`,{max_sessions:Q.maxSessions,has_debug_file:!!Q.debugFile,sandbox:Q.sandbox,verbose:Q.verbose,heartbeat_interval_ms:ge.non_exclusive_heartbeat_interval_ms,spawn_mode:Q.spawnMode,spawn_mode_source:q,multi_session_gate:S,pre_create_session:Y,worktree_available:W}),P(`info`,`bridge_started`,{max_sessions:Q.maxSessions,sandbox:Q.sandbox,spawn_mode:Q.spawnMode});let _e=Ue({execPath:process.execPath,scriptArgs:Ye(),env:process.env,verbose:n,sandbox:r,debugFile:i,permissionMode:o,onDebug:k,onActivity:(e,t)=>{k(`[bridge:activity] sessionId=${e} ${t.type} ${t.summary}`)},onPermissionRequest:(e,t,n)=>{k(`[bridge:perm] sessionId=${e} tool=${t.request.tool_name} request_id=${t.request_id} (not auto-approving)`)}}),ve=Pe({verbose:n}),{parseGitHubRepository:ye}=await import(`./detectRepository-BTPgN89l.js`),be=ie?ye(ie):null,Se=be?be.split(`/`).pop():Ce(y);ve.setRepoInfo(Se,X);let we=J!==`single-session`&&W;we&&ve.setSpawnModeDisplay(J);let Te=e=>{if(e[0]===3||e[0]===4){process.emit(`SIGINT`);return}if(e[0]===32){ve.toggleQr();return}if(e[0]===119){if(!we)return;let e=Q.spawnMode===`same-dir`?`worktree`:`same-dir`;Q.spawnMode=e,B(`tengu_bridge_spawn_mode_toggled`,{spawn_mode:e}),ve.logStatus(e===`worktree`?`Spawn mode: worktree (new sessions get isolated git worktrees)`:`Spawn mode: same-dir (new sessions share the current directory)`),ve.setSpawnModeDisplay(e),ve.refreshDisplay(),te(t=>t.remoteControlSpawnMode===e?t:{...t,remoteControlSpawnMode:e});return}};process.stdin.isTTY&&(process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.on(`data`,Te));let De=new AbortController,ke=()=>{k(`[bridge:shutdown] SIGINT received, shutting down`),De.abort()},Ae=()=>{k(`[bridge:shutdown] SIGTERM received, shutting down`),De.abort()};process.on(`SIGINT`,ke),process.on(`SIGTERM`,Ae);let je=pe||null;if(Y&&!pe){let{createBridgeSession:e}=await import(`./createSession-DUfOAeyE.js`);try{je=await e({environmentId:$,title:c,events:[],gitRepoUrl:ie,branch:X,signal:De.signal,baseUrl:F,getAccessToken:O,permissionMode:o}),je&&k(`[bridge:init] Created initial session ${je}`)}catch(e){k(`[bridge:init] Session creation failed (non-fatal): ${E(e)}`)}}let Me=null;if(je&&J===`single-session`){let{writeBridgePointer:e}=await import(`./bridgePointer-MqLe5Asm.js`),t={sessionId:je,environmentId:$,source:`standalone`};await e(Q.dir,t),Me=setInterval(e,3600*1e3,Q.dir,t),Me.unref?.()}try{await Ze(Q,$,fe,de,_e,ve,De.signal,void 0,je??void 0,async()=>(T(),await D(),O()))}finally{Me!==null&&clearInterval(Me),process.off(`SIGINT`,ke),process.off(`SIGTERM`,Ae),process.stdin.off(`data`,Te),process.stdin.isTTY&&process.stdin.setRawMode(!1),process.stdin.pause()}process.exit(0)}var mt=class extends Error{constructor(e){super(e),this.name=`BridgeHeadlessPermanentError`}};async function ht(e,t){let{dir:n,log:r}=e;process.chdir(n);let{setOriginalCwd:i,setCwdState:a}=await import(`./state-BOa-3Av3.js`);i(n),a(n);let{enableConfigs:o,checkHasTrustDialogAccepted:s}=await import(`./config-Bxt1UH1T.js`);o();let{initSinks:c}=await import(`./sinks-CXq8-7Qn.js`);if(c(),!s())throw new mt(`Workspace not trusted: ${n}. Run \`claude\` in that directory first to accept the trust dialog.`);if(!e.getAccessToken())throw Error(ue);let{getBridgeBaseUrl:l}=await import(`./bridgeConfig-DWEqKbXk.js`),u=l();if(u.startsWith(`http://`)&&!u.includes(`localhost`)&&!u.includes(`127.0.0.1`))throw new mt(`Remote Control base URL uses HTTP. Only HTTPS or localhost HTTP is allowed.`);let d=process.env.CLAUDE_BRIDGE_SESSION_INGRESS_URL||u,{getBranch:f,getRemoteUrl:p,findGitRoot:m}=await import(`./git-CbcnOf0E.js`),{hasWorktreeCreateHook:h}=await import(`./hooks-BUJLxdFJ.js`);if(e.spawnMode===`worktree`&&!(h()||m(n)!==null))throw new mt(`Worktree mode requires a git repository or WorktreeCreate hooks. Directory ${n} has neither.`);let g=await f(),_=await p(),y=xe(),b=Oe(),ee={dir:n,machineName:y,branch:g,gitRepoUrl:_,maxSessions:e.capacity,spawnMode:e.spawnMode,verbose:!1,sandbox:e.sandbox,bridgeId:b,workerType:`claude_code`,environmentId:Oe(),apiBaseUrl:u,sessionIngressUrl:d,sessionTimeoutMs:e.sessionTimeoutMs},x=v({baseUrl:u,getAccessToken:e.getAccessToken,runnerVersion:`0.0.5`,onDebug:r,onAuth401:e.onAuth401,getTrustedDeviceToken:he}),S,C;try{let e=await x.registerBridgeEnvironment(ee);S=e.environment_id,C=e.environment_secret}catch(e){throw Error(`Bridge registration failed: ${E(e)}`)}let w=Ue({execPath:process.execPath,scriptArgs:Ye(),env:process.env,verbose:!1,sandbox:e.sandbox,permissionMode:e.permissionMode,onDebug:r}),T=gt(r);T.printBanner(ee,S);let D;if(e.createSessionOnStart){let{createBridgeSession:n}=await import(`./createSession-DUfOAeyE.js`);try{let i=await n({environmentId:S,title:e.name,events:[],gitRepoUrl:_,branch:g,signal:t,baseUrl:u,getAccessToken:e.getAccessToken,permissionMode:e.permissionMode});i&&(D=i,r(`created initial session ${i}`))}catch(e){r(`session pre-creation failed (non-fatal): ${E(e)}`)}}await Ze(ee,S,C,x,w,T,t,void 0,D,async()=>e.getAccessToken())}function gt(e){let t=()=>{};return{printBanner:(t,n)=>e(`registered environmentId=${n} dir=${t.dir} spawnMode=${t.spawnMode} capacity=${t.maxSessions}`),logSessionStart:(t,n)=>e(`session start ${t}`),logSessionComplete:(t,n)=>e(`session complete ${t} (${n}ms)`),logSessionFailed:(t,n)=>e(`session failed ${t}: ${n}`),logStatus:e,logVerbose:e,logError:t=>e(`error: ${t}`),logReconnected:t=>e(`reconnected after ${t}ms`),addSession:(t,n)=>e(`session attached ${t}`),removeSession:t=>e(`session detached ${t}`),updateIdleStatus:t,updateReconnectingStatus:t,updateSessionStatus:t,updateSessionActivity:t,updateSessionCount:t,updateFailedStatus:t,setSpawnModeDisplay:t,setRepoInfo:t,setDebugLogPath:t,setAttached:t,setSessionTitle:t,clearStatus:t,toggleQr:t,refreshDisplay:t}}export{ct as a,et as i,pt as n,ht as o,$e as r,Ze as s,mt as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,t}from"./caches-DPqPIogk.js";e();export{t as clearSessionCaches};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Lr as e,Rr as t}from"./model-BQF64tZx.js";t();export{e as getOrganizationUUID};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Qi as e,Vi as t,qi as n}from"./loadAgentsDir-Clu7Uk6a.js";e();export{t as clearCommandsCache,n as getCommands};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as e,l as t}from"./commitAttribution-CGZr7XNO.js";t();export{e as isInternalModelRepo};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{di as t,ui as n}from"./src-CDCSSo0U2.js";import{en as r,rn as i}from"./state-ix0xIunV.js";import{Ao as a,DS as o,ES as s,Gu as c,KE as l,ME as u,NE as d,Sl as f,Wu as p,XE as m,ZE as h,_l as g,bE as _,dl as v,eD as y,fh as b,hl as x,jE as S,ll as C,lt as w,mE as T,ph as E,qE as D,tD as O,ut as k,vl as A,xl as j,yl as M,yn as N,zo as P}from"./loadAgentsDir-Clu7Uk6a.js";import{R as F,z as I}from"./debug-BrXObCdR.js";import{o as L,s as R}from"./log-BMCygSzM.js";function z(e,t){let r=b(`tip`),i=s(`app:toggleTranscript`,`Global`,`ctrl+o`),a=[...e.options.verbose?[]:[`(${i} to see full summary)`],...t?[t]:[],...r?[r]:[]];return n.dim(`Compacted `+a.join(`
|
|
2
|
-
`))}async function B(e,t){let n=e.getAppState(),r=await w(e.options.tools,e.options.mainLoopModel,Array.from(n.toolPermissionContext.additionalWorkingDirectories.keys()),e.options.mcpClients),i=p({mainThreadAgentDefinition:void 0,toolUseContext:e,customSystemPrompt:e.options.customSystemPrompt,defaultSystemPrompt:r,appendSystemPrompt:e.options.appendSystemPrompt}),[a,o]=await Promise.all([u(),S()]);return{systemPrompt:i,userContext:a,systemContext:o,toolUseContext:e,forkContextMessages:t}}var V;e((()=>{t(),r(),k(),d(),o(),y(),f(),m(),l(),x(),C(),T(),I(),N(),L(),P(),E(),c(),V=async(e,t)=>{let{abortController:n}=t,{messages:r}=t;if(r=a(r),r.length===0)throw Error(`No messages to compact`);let o=e.trim();try{if(!o){let e=await v(r,t.agentId);if(e)return u.cache.clear?.(),g(),O(t.options.querySource??`compact`,t.agentId),i(),h(),{type:`compact`,compactionResult:e,displayText:z(t)}}let e=(await D(r,t)).messages,n=await j(e,t,await B(t,e),!1,o,!1);return _(void 0),h(),u.cache.clear?.(),g(),{type:`compact`,compactionResult:n,displayText:z(t,n.userDisplayMessage)}}catch(e){throw n.signal.aborted?Error(`Compaction canceled.`):F(e,`Not enough messages to compact. Send a few more messages first, then try again.`)?Error(M):F(e,`Compaction interrupted · This may be due to network issues — please try again.`)?Error(A):(R(e),Error(`Error during compaction: ${e}`))}}}))();export{V as call};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./loadAgentsDir-Clu7Uk6a.js";import{b as e,c as t,g as n,n as r,o as i,r as a,y as o}from"./config-3m_9zSrj.js";n();export{r as checkHasTrustDialogAccepted,a as enableConfigs,i as getCurrentProjectConfig,t as getGlobalConfig,o as saveCurrentProjectConfig,e as saveGlobalConfig};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{t}from"./jsx-runtime-Bb4Xn-E0.js";import{n,t as r}from"./Settings-CxI_KHUj.js";var i,a;e((()=>{n(),i=t(),a=async(e,t)=>(0,i.jsx)(r,{onClose:e,context:t,defaultTab:`Config`})}))();export{a as call};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,r as t,t as n}from"./context-noninteractive-BmC4o5xo.js";t();export{n as call,e as collectContextData};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,t}from"./conversation-CYqqk0o7.js";e();export{t as clearConversation};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,n as t}from"./rolldown-runtime-DaDcL9Zw.js";import{Fn as n,In as r,Rn as i,cn as a,en as o,ht as s,nt as c,q as l,un as u}from"./state-ix0xIunV.js";import{Au as d,Bl as f,Ci as p,Ct as m,Ei as h,Et as g,Gp as _,Il as v,Ky as y,LC as b,Mn as x,Wp as S,Zt as ee,ab as te,dn as C,dr as w,eg as T,fb as E,fi as D,jn as O,jr as k,ju as A,kn as j,nr as M,qy as N,tg as P,yn as F,zC as I}from"./loadAgentsDir-Clu7Uk6a.js";import{o as L,s as ne}from"./log-BMCygSzM.js";import{n as R,r as z}from"./analytics-BotDBGh0.js";import{C as B,y as V}from"./rcDebugLog-VKwMl0yg.js";import{l as H,r as U}from"./commitAttribution-CGZr7XNO.js";import{c as W,d as G}from"./debugUtils-NO5KtXqi.js";import{n as K,t as q}from"./caches-DPqPIogk.js";import{randomUUID as J}from"crypto";function Y(e){Q=e,f(Z()??null).catch(()=>{})}function X(){return Q}function Z(){let e=X();return e?G(e.bridgeSessionId):void 0}var Q,$=t((()=>{v(),W(),Q=null}));function re(){let e=X();if(!e)return;e.markTranscriptReset?.();let t={type:`status`,subtype:`status`,status:`conversation_cleared`,message:`conversation_cleared`,uuid:J()};e.writeSdkMessages([t])}async function ie({setMessages:t,readFileState:o,discoveredSkillNames:d,loadedNestedMemoryPaths:f,getAppState:g,setAppState:v,setConversationId:y}){let x=C();await ee(`clear`,{getAppState:g,setAppState:v,signal:AbortSignal.timeout(x),timeoutMs:x});let S=l();S&&z(`tengu_cache_eviction_hint`,{scope:`conversation_clear`,last_request_id:S});let T=new Set,E=[],F=e=>`isBackgrounded`in e&&e.isBackgrounded===!1;if(g)for(let e of Object.values(g().tasks))F(e)||A(e)&&(T.add(e.agentId),E.push(e));t(()=>[]),re();{let{setContextBlocked:t}=(V(),e(B));t(!1)}y&&y(J()),q(T),n(null),r(null),i(null),u(),_(c()),o.clear(),d?.clear(),f?.clear(),v&&v(e=>{let t={};for(let[n,r]of Object.entries(e.tasks)){if(!F(r)){t[n]=r;continue}try{r.status===`running`&&(P(r)&&(r.shellCommand?.kill(),r.shellCommand?.cleanup(),r.cleanupTimeoutId&&clearTimeout(r.cleanupTimeoutId)),`abortController`in r&&r.abortController?.abort(),`unregisterCleanup`in r&&r.unregisterCleanup?.())}catch(e){ne(e)}j(n)}return{...e,tasks:t,attribution:U(),standaloneAgentContext:void 0,fileHistory:{snapshots:[],trackedFiles:new Set,snapshotSequence:0},mcp:{clients:[],tools:[],commands:[],resources:{},pluginReconnectKey:e.mcp.pluginReconnectKey}}}),te(),M(),a({setCurrentAsParent:!0}),process.env.USER_TYPE===`ant`&&process.env.CLAUDE_CODE_SESSION_ID&&(process.env.CLAUDE_CODE_SESSION_ID=s()),await D();for(let e of E)e.status===`running`&&O(e.id,w(b(e.agentId)));let{saveMode:I}=(k(),e(h));I(`normal`);let L=m();L&&p(L);let R=await N(`clear`);R.length>0&&t(()=>R)}var ae=t((()=>{$(),o(),R(),d(),T(),I(),H(),F(),L(),E(),S(),y(),k(),x(),g(),K()}));export{Y as i,ae as n,$ as r,ie as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,i as t,n,r}from"./createSession-D_sgO1Xy.js";t();export{n as createBridgeSession,r as getBridgeSession,e as updateBridgeSessionTitle};
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import{n as e,o as t}from"./rolldown-runtime-DaDcL9Zw.js";import{n,t as r}from"./figures-5ThXQEtq.js";import{C as i,D as a,Gr as o,H as s,I as c,P as l,T as u,Wt as d,Xn as f,ai as p,di as m,fi as h,hn as ee,k as te,ot as ne,p as re,t as g,ui as _}from"./src-CDCSSo0U2.js";import{t as v}from"./jsx-runtime-Bb4Xn-E0.js";import{en as y,ht as ie,nt as ae}from"./state-ix0xIunV.js";import{Cr as b,Fb as oe,Fh as x,Fi as se,Fr as S,Fx as C,Gb as ce,Ju as w,Kb as le,Nb as ue,Nr as de,Ph as fe,Pi as pe,Px as me,Sx as T,Wr as he,Xu as E,aC as ge,hr as _e,jr as D,mx as ve,px as ye,vi as be,xx as O}from"./loadAgentsDir-Clu7Uk6a.js";import{C as k,S as xe,a as A,l as j}from"./debug-BrXObCdR.js";import{_n as Se,gn as Ce}from"./settings-Dlp5JTa_.js";import{_ as we,i as Te}from"./git-Do0wJvux.js";import{a as Ee,o as De,s as Oe}from"./log-BMCygSzM.js";import{n as ke,r as M}from"./analytics-BotDBGh0.js";import{T as Ae,b as je,f as Me,h as Ne}from"./startupProfiler-xa3NmN7Z.js";import{_ as Pe,h as Fe}from"./model-BQF64tZx.js";import{i as N,r as P}from"./shellQuote-DkSy9MYE.js";import{u as Ie}from"./referral-BlrMpBAV.js";import{n as Le,t as Re}from"./useExitOnCtrlCDWithKeybindings-CntByfTQ.js";import{t as ze}from"./SearchBox-vfLXEPed.js";import{n as Be,t as Ve}from"./useSearchInput-H-8hJeFD.js";import{d as He,n as F,t as Ue,u as We}from"./Messages-B3sGRx5A.js";import{sep as I}from"path";function Ge({log:e,onExit:t,onSelect:n}){let[r,i]=L.useState(null);L.useEffect(()=>{i(null),S(e)&&he(e).then(i)},[e]);let o=S(e)&&r===null,s=r??e,f=b(s)||``,p=w();return d(`confirm:no`,t,{context:`Confirmation`}),d(`confirm:yes`,(0,L.useCallback)(()=>{n(r??e)},[n,r,e]),{context:`Confirmation`}),o?(0,R.jsxs)(c,{flexDirection:`column`,padding:1,children:[(0,R.jsx)(re,{message:`Loading session…`}),(0,R.jsx)(l,{dimColor:!0,children:(0,R.jsx)(u,{children:(0,R.jsx)(O,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`cancel`})})})]}):(0,R.jsxs)(c,{flexDirection:`column`,children:[(0,R.jsx)(Ue,{messages:s.messages,tools:p,commands:[],verbose:!0,toolJSX:null,toolUseConfirmQueue:[],inProgressToolUseIDs:new Set,isMessageSelectorVisible:!1,conversationId:f,screen:`transcript`,streamingToolUses:[],showAllInTranscript:!0,isLoading:!1}),(0,R.jsxs)(c,{flexShrink:0,flexDirection:`column`,borderTopDimColor:!0,borderBottom:!1,borderLeft:!1,borderRight:!1,borderStyle:`single`,paddingLeft:2,children:[(0,R.jsxs)(l,{children:[Ne(s.modified),` · `,s.messageCount,` messages`,s.gitBranch?` · ${s.gitBranch}`:``]}),(0,R.jsx)(l,{dimColor:!0,children:(0,R.jsxs)(u,{children:[(0,R.jsx)(a,{shortcut:`Enter`,action:`resume`}),(0,R.jsx)(O,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`cancel`})]})})]})]})}var L,R,z=e((()=>{L=t(h(),1),g(),Ie(),E(),je(),D(),T(),F(),R=v()}));function Ke(e,t){if(e===V)return 5;let n=o(e),r=t?Math.min(n,t-H-U):n;return Math.max(0,r)+H+U}function qe(e,t){let n=t-H-U;return o(e)<=n?e:n<=1?e.charAt(0):Ae(e,n)}function Je({tabs:e,selectedIndex:t,availableWidth:n,showAllProjects:r=!1}){let i=r?`Resume (All Projects)`:`Resume`,a=i.length+1,o=Math.max(et,W),s=n-a-o-2,u=Math.max(0,Math.min(t,e.length-1)),d=Math.max(20,Math.floor(s/2)),f=e.map(e=>Ke(e,d)),p=0,m=e.length;if(f.reduce((e,t,n)=>e+t+ +(n<f.length-1),0)>s){let t=s-$e,n=f[u]??0;for(p=u,m=u+1;p>0||m<e.length;){let r=p>0,i=m<e.length;if(r){let e=(f[p-1]??0)+1;if(n+e<=t){p--,n+=e;continue}}if(i){let e=(f[m]??0)+1;if(n+e<=t){m++,n+=e;continue}}break}}let h=p,ee=e.length-m,te=e.slice(p,m),ne=te.map((e,t)=>p+t);return(0,B.jsxs)(c,{flexDirection:`row`,gap:1,children:[(0,B.jsx)(l,{color:`suggestion`,children:i}),h>0&&(0,B.jsxs)(l,{dimColor:!0,children:[Ye,h]}),te.map((e,t)=>{let n=ne[t]===u,r=e===V?e:`#${qe(e,d-H)}`;return(0,B.jsxs)(l,{backgroundColor:n?`suggestion`:void 0,color:n?`inverseText`:void 0,bold:n,children:[` `,r,` `]},e)}),ee>0?(0,B.jsxs)(l,{dimColor:!0,children:[Xe,ee,Ze]}):(0,B.jsx)(l,{dimColor:!0,children:Qe})]})}var B,V,H,U,Ye,Xe,Ze,Qe,$e,et,W,G=e((()=>{h(),g(),je(),B=v(),V=`All`,H=2,U=1,Ye=`← `,Xe=`→`,Ze=` (tab to cycle)`,Qe=`(tab to cycle)`,$e=5,et=18,W=14}));function tt({nodes:e,onSelect:t,onCancel:n,onFocus:r,focusNodeId:i,visibleOptionCount:a,layout:o=`expanded`,isDisabled:s=!1,hideIndexes:l=!1,isNodeExpanded:u,onExpand:d,onCollapse:f,getParentPrefix:p,getChildPrefix:m,onUpFromFirstItem:h}){let[ee,te]=K.useState(new Set),ne=K.useRef(!1),re=K.useRef(null),g=K.useCallback(e=>u?u(e):ee.has(e),[u,ee]),_=K.useMemo(()=>{let t=[];function n(e,r,i){let a=!!e.children&&e.children.length>0,o=g(e.id);if(t.push({node:e,depth:r,isExpanded:o,hasChildren:a,parentId:i}),a&&o&&e.children)for(let t of e.children)n(t,r+1,e.id)}for(let t of e)n(t,0);return t},[e,g]),v=K.useCallback(e=>e?`▼ `:`▶ `,[]),y=K.useCallback(e=>` ▸ `,[]),ie=p??v,ae=m??y,b=K.useCallback(e=>{let t=``;return e.hasChildren?t=ie(e.isExpanded):e.depth>0&&(t=ae(e.depth)),t+e.node.label},[ie,ae]),oe=K.useMemo(()=>_.map(e=>({label:b(e),description:e.node.description,dimDescription:e.node.dimDescription??!0,value:e.node.id})),[_,b]),x=K.useMemo(()=>{let e=new Map;return _.forEach(t=>e.set(t.node.id,t.node)),e},[_]),se=K.useCallback(e=>_.find(t=>t.node.id===e),[_]),S=K.useCallback((e,t)=>{let n=se(e);!n||!n.hasChildren||(t?d?d(e):te(t=>new Set(t).add(e)):f?f(e):te(t=>{let n=new Set(t);return n.delete(e),n}))},[se,d,f]);return(0,nt.jsx)(c,{tabIndex:0,autoFocus:!0,onKeyDown:e=>{if(!i||s)return;let t=se(i);if(t){if(e.key===`right`&&t.hasChildren)e.preventDefault(),S(i,!0);else if(e.key===`left`){if(t.hasChildren&&t.isExpanded)e.preventDefault(),S(i,!1);else if(t.parentId!==void 0&&(e.preventDefault(),ne.current=!0,S(t.parentId,!1),r)){let e=x.get(t.parentId);e&&r(e)}}}},children:(0,nt.jsx)(ye,{options:oe,onChange:K.useCallback(e=>{let n=x.get(e);n&&t(n)},[x,t]),onFocus:K.useCallback(e=>{if(ne.current){ne.current=!1;return}if(re.current!==e&&(re.current=e,r)){let t=x.get(e);t&&r(t)}},[r,x]),onCancel:n,defaultFocusValue:i,visibleOptionCount:a,layout:o,isDisabled:s,hideIndexes:l,onUpFromFirstItem:h})})}var K,nt,rt=e((()=>{K=t(h(),1),g(),ve(),nt=v()}));function it(e,t){return Ae(e.replace(/\s+/g,` `).trim(),t)}function at({before:e,match:t,after:n},r){return _.dim(e)+r(t)+_.dim(n)}function ot(e,t,n){let r=e.toLowerCase().indexOf(t.toLowerCase());if(r===-1)return null;let i=r+t.length,a=Math.max(0,r-n),o=Math.min(e.length,i+n),s=e.slice(a,r),c=e.slice(r,i),l=e.slice(i,o);return{before:(a>0?`…`:``)+s.replace(/\s+/g,` `).trimStart(),match:c.trim(),after:l.replace(/\s+/g,` `).trimEnd()+(o<e.length?`…`:``)}}function st(e,t,n){let{isGroupHeader:r=!1,isChild:i=!1,forkCount:a=0}=n||{},o=r&&a>0?mt:i?ht:0,s=r&&a>0?` (+${a} other ${a===1?`session`:`sessions`})`:``,c=e.isSidechain?` (sidechain)`:``,l=t-o-c.length-s.length;return`${it(Ee(e),l)}${c}${s}`}function ct(e,t){let{isChild:n=!1,showProjectPath:r=!1}=t||{},i=n?` `:``,a=Me(e),o=r&&e.projectPath?` · ${e.projectPath}`:``;return i+a+o}function lt({logs:e,maxHeight:t=1/0,forceWidth:n,onCancel:o,onSelect:m,onLogsChanged:h,onLoadMore:re,initialSearchQuery:g,showAllProjects:_=!1,onToggleAllProjects:v,onAgenticSearch:y}){let oe=ne(),x=n===void 0?oe.columns:n,se=Le(o),S=f(),C=de(),w=process.env.USER_TYPE===`ant`,[le]=s(),fe=ce(le),T=q.useMemo(()=>e=>p(e,fe.warning),[fe.warning]),he=process.env.USER_TYPE===`ant`,[E,ge]=q.useState(null),[D,ve]=q.useState(!1),[k,xe]=q.useState(!1),[A,j]=q.useState(!1),Se=q.useMemo(()=>ae(),[]),[Ce,we]=q.useState(``),[De,Oe]=q.useState(0),[ke,Ae]=q.useState(new Set),[je,Ne]=q.useState(null),[Pe,Fe]=q.useState(1),[N,P]=q.useState(`list`),[Ie,Re]=q.useState(null),ze=q.useRef(null),[Ve,He]=q.useState(0),[F,Ue]=q.useState({status:`idle`}),[I,L]=q.useState(!1),R=q.useRef(null),{query:z,setQuery:Ke,cursorOffset:qe}=Be({isActive:N===`search`&&F.status!==`searching`,onExit:()=>{P(`list`),M(`tengu_session_search_toggled`,{enabled:!1})},onExitUp:()=>{P(`list`),M(`tengu_session_search_toggled`,{enabled:!1})},passthroughCtrlKeys:[`n`],initialQuery:g||``}),B=q.useDeferredValue(z),[V,H]=q.useState(``);q.useEffect(()=>{if(!B){H(``);return}let e=setTimeout(H,300,B);return()=>clearTimeout(e)},[B]);let[U,Ye]=q.useState(null),[Xe,Ze]=q.useState(!1);q.useEffect(()=>{Te().then(e=>ge(e)),pe(Se).then(e=>{j(e.length>1)})},[Se]);let Qe=q.useMemo(()=>new Map(e.map(e=>[e,dt(e)])),[e]),$e=q.useMemo(()=>w?new We(e.map(e=>({log:e,searchableText:Qe.get(e)??``})).filter(e=>e.searchableText),{keys:[`searchableText`],threshold:gt,ignoreLocation:!0,includeScore:!0}):null,[e,Qe,w]),et=q.useMemo(()=>pt(e),[e]),W=et.length>0,G=q.useMemo(()=>W?[`All`,...et]:[],[W,et]),K=G.length>0&&Ve<G.length?Ve:0,nt=G[K],rt=nt===`All`?void 0:nt,lt=+!!W,ut=q.useMemo(()=>{let t=e;return C&&(t=e.filter(e=>{let t=ie(),n=b(e);return!!(t&&n===t||e.customTitle||_e(e.messages)||e.firstPrompt||e.customTitle)})),rt!==void 0&&(t=t.filter(e=>e.tag===rt)),D&&E&&(t=t.filter(e=>e.gitBranch===E)),A&&!k&&(t=t.filter(e=>e.projectPath===Se)),t},[e,C,rt,D,E,A,k,Se]),mt=q.useMemo(()=>{if(!z)return ut;let e=z.toLowerCase();return ut.filter(t=>{let n=Ee(t).toLowerCase(),r=(t.gitBranch||``).toLowerCase(),i=(t.tag||``).toLowerCase(),a=t.prNumber?`pr #${t.prNumber} ${t.prRepository||``}`.toLowerCase():``;return n.includes(e)||r.includes(e)||i.includes(e)||a.includes(e)})},[ut,z]);q.useEffect(()=>{w&&B&&B!==V&&Ze(!0)},[B,V,w]),q.useEffect(()=>{if(!w||!V||!$e){Ye(null),Ze(!1);return}let e=setTimeout((e,t,n,r)=>{let i=e.search(t);i.sort((e,t)=>{let n=new Date(e.item.log.modified).getTime(),r=new Date(t.item.log.modified).getTime()-n;return Math.abs(r)>_t?r:(e.score??1)-(t.score??1)}),n({results:i.map(e=>({log:e.item.log,score:e.score,searchableText:e.item.searchableText})),query:t}),r(!1)},0,$e,V,Ye,Ze);return()=>{clearTimeout(e)}},[V,$e,w]);let{filteredLogs:ht,snippets:Y}=q.useMemo(()=>{let e=new Map,t=mt;if(U&&V&&U.query===V){for(let t of U.results)if(t.searchableText){let n=ot(t.searchableText,V,vt);n&&e.set(t.log,n)}let n=new Set(t.map(e=>e.messages[0]?.uuid)),r=U.results.map(e=>e.log).filter(e=>!n.has(e.messages[0]?.uuid));t=[...t,...r]}return{filteredLogs:t,snippets:e}},[mt,U,V]),X=q.useMemo(()=>F.status===`results`&&F.results.length>0?F.results:ht,[F,ht]),Z=Math.max(30,x-4),yt=q.useMemo(()=>{if(!C)return[];let e=ft(X);return Array.from(e.entries()).map(([e,t])=>{let n=t[0],r=X.indexOf(n),i=Y.get(n),a=i?at(i,T):null;if(t.length===1){let t=ct(n,{showProjectPath:_});return{id:`log:${e}:0`,value:{log:n,indexInFiltered:r},label:st(n,Z),description:a?`${t}\n ${a}`:t,dimDescription:!0}}let o=t.length-1,s=t.slice(1).map((t,n)=>{let r=X.indexOf(t),i=Y.get(t),a=i?at(i,T):null,o=ct(t,{isChild:!0,showProjectPath:_});return{id:`log:${e}:${n+1}`,value:{log:t,indexInFiltered:r},label:st(t,Z,{isChild:!0}),description:a?`${o}\n ${a}`:o,dimDescription:!0}}),c=ct(n,{showProjectPath:_});return{id:`group:${e}`,value:{log:n,indexInFiltered:r},label:st(n,Z,{isGroupHeader:!0,forkCount:o}),description:a?`${c}\n ${a}`:c,dimDescription:!0,children:s}})},[C,X,Z,_,Y,T]),bt=q.useMemo(()=>C?[]:X.map((e,t)=>{let n=it(Ee(e)+(e.isSidechain?` (sidechain)`:``),Z),r=Me(e),i=_&&e.projectPath?` · ${e.projectPath}`:``,a=Y.get(e),o=a?at(a,T):null;return{label:n,description:o?`${r}${i}\n ${o}`:r+i,dimDescription:!0,value:t.toString()}}),[C,X,T,Z,_,Y]),Q=je?.value.log??null,xt=()=>{if(!C||!Q)return``;let e=b(Q);if(!e)return``;let t=X.filter(t=>b(t)===e);if(!(t.length>1))return``;let n=ke.has(e);return t.indexOf(Q)>0||n?`← to collapse`:`→ to expand`},St=q.useCallback(async()=>{let e=Q?b(Q):void 0;if(!Q||!e){P(`list`),we(``);return}Ce.trim()&&(await be(e,Ce.trim(),Q.fullPath),C&&h&&h()),P(`list`),we(``)},[Q,Ce,h,C]),Ct=q.useCallback(()=>{P(`list`),M(`tengu_session_search_toggled`,{enabled:!1})},[]),wt=q.useCallback(()=>{P(`search`),M(`tengu_session_search_toggled`,{enabled:!0})},[]),Tt=q.useCallback(async()=>{if(!z.trim()||!y||!he)return;R.current?.abort();let t=new AbortController;R.current=t,Ue({status:`searching`}),M(`tengu_agentic_search_started`,{query_length:z.length});try{let n=await y(z,e,t.signal);if(t.signal.aborted)return;Ue({status:`results`,results:n,query:z}),M(`tengu_agentic_search_completed`,{query_length:z.length,results_count:n.length})}catch(e){if(t.signal.aborted)return;Ue({status:`error`,message:e instanceof Error?e.message:`Search failed`}),M(`tengu_agentic_search_error`,{query_length:z.length})}},[z,y,he,e]);q.useEffect(()=>{F.status!==`idle`&&F.status!==`searching`&&(F.status===`results`&&F.query!==z||F.status===`error`)&&Ue({status:`idle`})},[z,F]),q.useEffect(()=>()=>{R.current?.abort()},[]);let Et=q.useRef(F.status);q.useEffect(()=>{let e=Et.current;if(Et.current=F.status,e===`searching`&&F.status===`results`){if(C&&yt.length>0)Ne(yt[0]);else if(!C&&X.length>0){let e=X[0];Ne({id:`0`,value:{log:e,indexInFiltered:0},label:``})}}},[F.status,C,yt,X]);let Dt=q.useCallback(e=>{let t=parseInt(e,10),n=X[t];!n||ze.current===t.toString()||(ze.current=t.toString(),Ne({id:t.toString(),value:{log:n,indexInFiltered:t},label:``}),Fe(t+1))},[X]),Ot=q.useCallback(e=>{Ne(e);let t=X.findIndex(t=>b(t)===b(e.value.log));t>=0&&Fe(t+1)},[X]);d(`confirm:no`,()=>{R.current?.abort(),Ue({status:`idle`}),M(`tengu_agentic_search_cancelled`,{})},{context:`Confirmation`,isActive:N!==`preview`&&F.status===`searching`}),d(`confirm:no`,()=>{P(`list`),we(``)},{context:`Settings`,isActive:N===`rename`&&F.status!==`searching`}),d(`confirm:no`,()=>{Ke(``),L(!1),o?.()},{context:`Confirmation`,isActive:N!==`preview`&&N!==`rename`&&N!==`search`&&I&&F.status!==`searching`}),ee((e,t)=>{if(N!==`preview`&&F.status!==`searching`&&N!==`rename`)if(N===`search`)e.toLowerCase()===`n`&&t.ctrl?Ct():(t.return||t.downArrow)&&z.trim()&&y&&he&&F.status!==`results`&&L(!0);else{if(I){if(t.return){Tt(),L(!1);return}else if(t.downArrow){L(!1);return}else if(t.upArrow){P(`search`),L(!1);return}}if(W&&t.tab){let e=t.shift?-1:1;He(t=>{let n=((t<G.length?t:0)+G.length+e)%G.length,r=G[n];return M(`tengu_session_tag_filter_changed`,{is_all:r===`All`,tag_count:et.length}),n});return}let n=!t.ctrl&&!t.meta,r=e.toLowerCase();if(r===`a`&&t.ctrl&&v)v(),M(`tengu_session_all_projects_toggled`,{enabled:!_});else if(r===`b`&&t.ctrl){let e=!D;ve(e),M(`tengu_session_branch_filter_toggled`,{enabled:e})}else if(r===`w`&&t.ctrl&&A){let e=!k;xe(e),M(`tengu_session_worktree_filter_toggled`,{enabled:e})}else r===`/`&&n?(P(`search`),M(`tengu_session_search_toggled`,{enabled:!0})):r===`r`&&t.ctrl&&Q?(P(`rename`),we(``),M(`tengu_session_rename_started`,{})):r===`v`&&t.ctrl&&Q?(Re(Q),P(`preview`),M(`tengu_session_preview_opened`,{messageCount:Q.messageCount})):Q&&n&&e.length>0&&!/^\s+$/.test(e)&&(P(`search`),Ke(e),M(`tengu_session_search_toggled`,{enabled:!0}))}},{isActive:!0});let kt=[];D&&E&&kt.push(E),A&&!k&&kt.push(`current worktree`);let At=8+ +(kt.length>0&&N!==`search`)+lt,$=Math.max(1,Math.floor((t-At-2)/3));return q.useEffect(()=>{if(!re)return;let e=$*2;Pe+e>=X.length&&re($*3)},[Pe,$,X.length,re]),e.length===0?null:N===`preview`&&Ie&&C?(0,J.jsx)(Ge,{log:Ie,onExit:()=>{P(`list`),Re(null)},onSelect:m}):(0,J.jsxs)(c,{flexDirection:`column`,height:t-1,children:[(0,J.jsx)(c,{flexShrink:0,children:(0,J.jsx)(i,{color:`suggestion`})}),(0,J.jsx)(c,{flexShrink:0,children:(0,J.jsx)(l,{children:` `})}),W?(0,J.jsx)(Je,{tabs:G,selectedIndex:K,availableWidth:x,showAllProjects:_}):(0,J.jsx)(c,{flexShrink:0,children:(0,J.jsxs)(l,{bold:!0,color:`suggestion`,children:[`Resume Session`,N===`list`&&X.length>$&&(0,J.jsxs)(l,{dimColor:!0,children:[` `,`(`,Pe,` of `,X.length,`)`]})]})}),(0,J.jsx)(te,{query:z,isFocused:N===`search`,isTerminalFocused:S,cursorOffset:qe}),kt.length>0&&N!==`search`&&(0,J.jsx)(c,{flexShrink:0,paddingLeft:2,children:(0,J.jsx)(l,{dimColor:!0,children:(0,J.jsx)(u,{children:kt})})}),(0,J.jsx)(c,{flexShrink:0,children:(0,J.jsx)(l,{children:` `})}),F.status===`searching`&&(0,J.jsxs)(c,{paddingLeft:1,flexShrink:0,children:[(0,J.jsx)(ue,{}),(0,J.jsx)(l,{children:` Searching…`})]}),F.status===`results`&&F.results.length>0&&(0,J.jsx)(c,{paddingLeft:1,marginBottom:1,flexShrink:0,children:(0,J.jsx)(l,{dimColor:!0,italic:!0,children:`Claude found these results:`})}),F.status===`results`&&F.results.length===0&&ht.length===0&&(0,J.jsx)(c,{paddingLeft:1,marginBottom:1,flexShrink:0,children:(0,J.jsx)(l,{dimColor:!0,italic:!0,children:`No matching sessions found.`})}),F.status===`error`&&ht.length===0&&(0,J.jsx)(c,{paddingLeft:1,marginBottom:1,flexShrink:0,children:(0,J.jsx)(l,{dimColor:!0,italic:!0,children:`No matching sessions found.`})}),!!z.trim()&&y&&he&&F.status!==`searching`&&F.status!==`results`&&F.status!==`error`&&(0,J.jsxs)(c,{flexShrink:0,flexDirection:`column`,children:[(0,J.jsxs)(c,{flexDirection:`row`,gap:1,children:[(0,J.jsx)(l,{color:I?`suggestion`:void 0,children:I?r.pointer:` `}),(0,J.jsx)(l,{color:I?`suggestion`:void 0,bold:I,children:`Search deeply using Claude →`})]}),(0,J.jsx)(c,{height:1})]}),F.status===`searching`?null:N===`rename`&&Q?(0,J.jsxs)(c,{paddingLeft:2,flexDirection:`column`,children:[(0,J.jsx)(l,{bold:!0,children:`Rename session:`}),(0,J.jsx)(c,{paddingTop:1,children:(0,J.jsx)(me,{value:Ce,onChange:we,onSubmit:St,placeholder:Ee(Q,`Enter new session name`),columns:x,cursorOffset:De,onChangeCursorOffset:Oe,showCursor:!0})})]}):C?(0,J.jsx)(tt,{nodes:yt,onSelect:e=>{m(e.value.log)},onFocus:Ot,onCancel:o,focusNodeId:je?.id,visibleOptionCount:$,layout:`expanded`,isDisabled:N===`search`||I,hideIndexes:!1,isNodeExpanded:e=>{if(N===`search`||D)return!0;let t=typeof e==`string`&&e.startsWith(`group:`)?e.substring(6):null;return t?ke.has(t):!1},onExpand:e=>{let t=typeof e==`string`&&e.startsWith(`group:`)?e.substring(6):null;t&&(Ae(e=>new Set(e).add(t)),M(`tengu_session_group_expanded`,{}))},onCollapse:e=>{let t=typeof e==`string`&&e.startsWith(`group:`)?e.substring(6):null;t&&Ae(e=>{let n=new Set(e);return n.delete(t),n})},onUpFromFirstItem:wt}):(0,J.jsx)(ye,{options:bt,onChange:e=>{let t=X[parseInt(e,10)];t&&m(t)},visibleOptionCount:$,onCancel:o,onFocus:Dt,defaultFocusValue:je?.id.toString(),layout:`expanded`,isDisabled:N===`search`||I,onUpFromFirstItem:wt}),(0,J.jsx)(c,{paddingLeft:2,children:se.pending?(0,J.jsxs)(l,{dimColor:!0,children:[`Press `,se.keyName,` again to exit`]}):N===`rename`?(0,J.jsx)(l,{dimColor:!0,children:(0,J.jsxs)(u,{children:[(0,J.jsx)(a,{shortcut:`Enter`,action:`save`}),(0,J.jsx)(O,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`cancel`})]})}):F.status===`searching`?(0,J.jsx)(l,{dimColor:!0,children:(0,J.jsxs)(u,{children:[(0,J.jsx)(l,{children:`Searching with Claude…`}),(0,J.jsx)(O,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`cancel`})]})}):I?(0,J.jsx)(l,{dimColor:!0,children:(0,J.jsxs)(u,{children:[(0,J.jsx)(a,{shortcut:`Enter`,action:`search`}),(0,J.jsx)(a,{shortcut:`↓`,action:`skip`}),(0,J.jsx)(O,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`cancel`})]})}):N===`search`?(0,J.jsx)(l,{dimColor:!0,children:(0,J.jsxs)(u,{children:[(0,J.jsx)(l,{children:Xe&&w?`Searching…`:`Type to Search`}),(0,J.jsx)(a,{shortcut:`Enter`,action:`select`}),(0,J.jsx)(O,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`clear`})]})}):(0,J.jsx)(l,{dimColor:!0,children:(0,J.jsxs)(u,{children:[v&&(0,J.jsx)(a,{shortcut:`Ctrl+A`,action:`show ${_?`current dir`:`all projects`}`}),E&&(0,J.jsx)(a,{shortcut:`Ctrl+B`,action:`toggle branch`}),A&&(0,J.jsx)(a,{shortcut:`Ctrl+W`,action:`show ${k?`current worktree`:`all worktrees`}`}),(0,J.jsx)(a,{shortcut:`Ctrl+V`,action:`preview`}),(0,J.jsx)(a,{shortcut:`Ctrl+R`,action:`rename`}),(0,J.jsx)(l,{children:`Type to search`}),(0,J.jsx)(O,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`cancel`}),xt()&&(0,J.jsx)(l,{children:xt()})]})})})]})}function ut(e){if(e.type!==`user`&&e.type!==`assistant`)return``;let t=`message`in e?e.message?.content:void 0;return t?typeof t==`string`?t:Array.isArray(t)?t.map(e=>typeof e==`string`?e:`text`in e&&typeof e.text==`string`?e.text:``).filter(Boolean).join(` `):``:``}function dt(e){let t=(e.messages.length<=Y?e.messages:[...e.messages.slice(0,X),...e.messages.slice(-1e3)]).map(ut).filter(Boolean).join(` `),n=`${[e.customTitle,e.summary,e.firstPrompt,e.gitBranch,e.tag,e.prNumber?`PR #${e.prNumber}`:void 0,e.prRepository].filter(Boolean).join(` `)} ${t}`.trim();return n.length>Z?n.slice(0,Z):n}function ft(e){let t=new Map;for(let n of e){let e=b(n);if(e){let r=t.get(e);r?r.push(n):t.set(e,[n])}}return t.forEach(e=>e.sort((e,t)=>new Date(t.modified).getTime()-new Date(e.modified).getTime())),t}function pt(e){let t=new Set;for(let n of e)n.tag&&t.add(n.tag);return Array.from(t).sort((e,t)=>e.localeCompare(t))}var q,J,mt,ht,Y,X,Z,gt,_t,vt,yt=e((()=>{m(),n(),He(),q=t(h(),1),y(),Re(),Ve(),ge(),g(),Ie(),ke(),je(),se(),we(),De(),D(),le(),T(),ve(),ze(),z(),oe(),G(),C(),rt(),J=v(),mt=2,ht=4,Y=2e3,X=1e3,Z=5e4,gt=.3,_t=60*1e3,vt=50}));function bt(e){if(e.type!==`user`&&e.type!==`assistant`)return``;let t=`message`in e?e.message?.content:void 0;return t?typeof t==`string`?t:Array.isArray(t)?t.map(e=>typeof e==`string`?e:`text`in e&&typeof e.text==`string`?e.text:``).filter(Boolean).join(` `):``:``}function Q(e){if(e.length===0)return``;let t=(e.length<=wt?e:[...e.slice(0,wt/2),...e.slice(-100/2)]).map(bt).filter(Boolean).join(` `).replace(/\s+/g,` `).trim();return t.length>Ct?t.slice(0,Ct)+`…`:t}function xt(e,t){return!!(Ee(e).toLowerCase().includes(t)||e.customTitle?.toLowerCase().includes(t)||e.tag?.toLowerCase().includes(t)||e.gitBranch?.toLowerCase().includes(t)||e.summary?.toLowerCase().includes(t)||e.firstPrompt?.toLowerCase().includes(t)||e.messages&&e.messages.length>0&&Q(e.messages).toLowerCase().includes(t))}async function St(e,t,n){if(!e.trim()||t.length===0)return[];let r=e.toLowerCase(),i=t.filter(e=>xt(e,r)),a;if(i.length>=Tt)a=i.slice(0,Tt);else{let e=t.filter(e=>!xt(e,r)),n=Tt-i.length;a=[...i,...e.slice(0,n)]}j(`Agentic search: ${a.length}/${t.length} logs, query="${e}", matching: ${i.length}, with messages: ${Ce(a,e=>e.messages?.length>0)}`);let o=a.map(async e=>{if(S(e))try{return await he(e)}catch(t){return Oe(t),e}return e}),s=await Promise.all(o);j(`Agentic search: loaded ${Ce(s,e=>e.messages?.length>0)}/${a.length} logs with transcripts`);let c=`Sessions:
|
|
2
|
-
${s.map((e,t)=>{let n=[`${t}:`],r=Ee(e);if(n.push(r),e.customTitle&&e.customTitle!==r&&n.push(`[custom title: ${e.customTitle}]`),e.tag&&n.push(`[tag: ${e.tag}]`),e.gitBranch&&n.push(`[branch: ${e.gitBranch}]`),e.summary&&n.push(`- Summary: ${e.summary}`),e.firstPrompt&&e.firstPrompt!==`No prompt`&&n.push(`- First message: ${e.firstPrompt.slice(0,300)}`),e.messages&&e.messages.length>0){let t=Q(e.messages);t&&n.push(`- Transcript: ${t}`)}return n.join(` `)}).join(`
|
|
3
|
-
`)}
|
|
4
|
-
|
|
5
|
-
Search query: "${e}"
|
|
6
|
-
|
|
7
|
-
Find the sessions that are most relevant to this query.`;j(`Agentic search prompt (first 500 chars): ${c.slice(0,500)}...`);try{let e=Fe();j(`Agentic search using model: ${e}`);let t=(await x({model:e,system:Et,messages:[{role:`user`,content:c}],signal:n,querySource:`session_search`})).content.find(e=>e.type===`text`);if(!t||t.type!==`text`)return j(`No text content in agentic search response`),[];j(`Agentic search response: ${t.text}`);let r=t.text.match(/\{[\s\S]*\}/);if(!r)return j(`Could not find JSON in agentic search response`),[];let i=(k(r[0]).relevant_indices||[]).filter(e=>e>=0&&e<s.length).map(e=>s[e]);return j(`Agentic search found ${i.length} relevant sessions`),i}catch(e){return Oe(e),j(`Agentic search error: ${e}`),[]}}var Ct,wt,Tt,Et,Dt=e((()=>{Se(),A(),De(),Pe(),D(),fe(),xe(),Ct=2e3,wt=100,Tt=100,Et=`Your goal is to find relevant sessions based on a user's search query.
|
|
8
|
-
|
|
9
|
-
You will be given a list of sessions with their metadata and a search query. Identify which sessions are most relevant to the query.
|
|
10
|
-
|
|
11
|
-
Each session may include:
|
|
12
|
-
- Title (display name or custom title)
|
|
13
|
-
- Tag (user-assigned category, shown as [tag: name] - users tag sessions with /tag command to categorize them)
|
|
14
|
-
- Branch (git branch name, shown as [branch: name])
|
|
15
|
-
- Summary (AI-generated summary)
|
|
16
|
-
- First message (beginning of the conversation)
|
|
17
|
-
- Transcript (excerpt of conversation content)
|
|
18
|
-
|
|
19
|
-
IMPORTANT: Tags are user-assigned labels that indicate the session's topic or category. If the query matches a tag exactly or partially, those sessions should be highly prioritized.
|
|
20
|
-
|
|
21
|
-
For each session, consider (in order of priority):
|
|
22
|
-
1. Exact tag matches (highest priority - user explicitly categorized this session)
|
|
23
|
-
2. Partial tag matches or tag-related terms
|
|
24
|
-
3. Title matches (custom titles or first message content)
|
|
25
|
-
4. Branch name matches
|
|
26
|
-
5. Summary and transcript content matches
|
|
27
|
-
6. Semantic similarity and related concepts
|
|
28
|
-
|
|
29
|
-
CRITICAL: Be VERY inclusive in your matching. Include sessions that:
|
|
30
|
-
- Contain the query term anywhere in any field
|
|
31
|
-
- Are semantically related to the query (e.g., "testing" matches sessions about "tests", "unit tests", "QA", etc.)
|
|
32
|
-
- Discuss topics that could be related to the query
|
|
33
|
-
- Have transcripts that mention the concept even in passing
|
|
34
|
-
|
|
35
|
-
When in doubt, INCLUDE the session. It's better to return too many results than too few. The user can easily scan through results, but missing relevant sessions is frustrating.
|
|
36
|
-
|
|
37
|
-
Return sessions ordered by relevance (most relevant first). If truly no sessions have ANY connection to the query, return an empty array - but this should be rare.
|
|
38
|
-
|
|
39
|
-
Respond with ONLY the JSON object, no markdown formatting:
|
|
40
|
-
{"relevant_indices": [2, 5, 0]}`}));function Ot(e,t,n){let r=ae();if(!t||!e.projectPath||e.projectPath===r)return{isCrossProject:!1};if(process.env.USER_TYPE!==`ant`){let t=b(e);return{isCrossProject:!0,isSameRepoWorktree:!1,command:`cd ${N([e.projectPath])} && claude --resume ${t}`,projectPath:e.projectPath}}if(n.some(t=>e.projectPath===t||e.projectPath.startsWith(t+I)))return{isCrossProject:!0,isSameRepoWorktree:!0,projectPath:e.projectPath};let i=b(e);return{isCrossProject:!0,isSameRepoWorktree:!1,command:`cd ${N([e.projectPath])} && claude --resume ${i}`,projectPath:e.projectPath}}var kt=e((()=>{y(),P(),D()}));export{lt as a,Dt as i,kt as n,yt as o,St as r,Ot as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{t}from"./jsx-runtime-Bb4Xn-E0.js";import{n,t as r}from"./Doctor-Yco1McrL.js";var i,a;e((()=>{n(),i=t(),a=(e,t,n)=>Promise.resolve((0,i.jsx)(r,{onDone:e}))}))();export{a as call};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,i as t}from"./envLessBridgeConfig-DXd10GXD.js";t();export{e as shouldShowAppUpgradeMessage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{E as t,M as n,T as r,g as i,n as a,r as o,t as s}from"./lazySchema-DcIJE_0i.js";import{i as c,r as l}from"./semver-BMRJYn3q.js";import{r as u,s as d}from"./bridgeEnabled-DhFrLTbG.js";async function f(){let e=h,t=g().safeParse(e);return t.success?t.data:h}async function p(){let e=await f();return e.min_version&&c(`0.0.5`,e.min_version)?`Your version of Work Mate (0.0.5) is too old for Remote Control.\nVersion ${e.min_version} or higher is required. Run \`claude update\` to update.`:null}async function m(){return d()?(await f()).should_show_app_upgrade_message:!1}var h,g,_=e((()=>{o(),s(),l(),u(),h={init_retry_max_attempts:3,init_retry_base_delay_ms:500,init_retry_jitter_fraction:.25,init_retry_max_delay_ms:4e3,http_timeout_ms:1e4,uuid_dedup_buffer_size:2e3,heartbeat_interval_ms:2e4,heartbeat_jitter_fraction:.1,token_refresh_buffer_ms:3e5,teardown_archive_timeout_ms:1500,connect_timeout_ms:15e3,min_version:`0.0.0`,should_show_app_upgrade_message:!1},g=a(()=>t({init_retry_max_attempts:r().int().min(1).max(10).default(3),init_retry_base_delay_ms:r().int().min(100).default(500),init_retry_jitter_fraction:r().min(0).max(1).default(.25),init_retry_max_delay_ms:r().int().min(500).default(4e3),http_timeout_ms:r().int().min(2e3).default(1e4),uuid_dedup_buffer_size:r().int().min(100).max(5e4).default(2e3),heartbeat_interval_ms:r().int().min(5e3).max(3e4).default(2e4),heartbeat_jitter_fraction:r().min(0).max(.5).default(.1),token_refresh_buffer_ms:r().int().min(3e4).max(18e5).default(3e5),teardown_archive_timeout_ms:r().int().min(500).max(2e3).default(1500),connect_timeout_ms:r().int().min(5e3).max(6e4).default(15e3),min_version:n().refine(e=>{try{return c(e,`0.0.0`),!0}catch{return!1}}).default(`0.0.0`),should_show_app_upgrade_message:i().default(!1)}))}));export{m as a,_ as i,p as n,f as r,h as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{fi as t}from"./src-CDCSSo0U2.js";import{t as n}from"./jsx-runtime-Bb4Xn-E0.js";import{Ct as r,Et as i,FD as a,ID as o,Il as s,Ll as c,cC as l,oC as u}from"./loadAgentsDir-Clu7Uk6a.js";import{n as d,t as f}from"./ExitFlow-D3csukbB.js";import{spawnSync as p}from"child_process";function m(){return o(_)??`Goodbye!`}async function h(e){if(c())return e(),p(`tmux`,[`detach-client`],{stdio:`ignore`}),null;let t=r()!==null;return t?(0,g.jsx)(f,{showWorktree:t,onDone:e,onCancel:()=>e()}):(e(m()),await u(0,`prompt_input_exit`),null)}var g,_;e((()=>{a(),t(),d(),s(),l(),i(),g=n(),_=[`Goodbye!`,`See ya!`,`Bye!`,`Catch you later!`]}))();export{h as call};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,t}from"./extra-usage-g2Pw4zt_.js";e();export{t as call};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{eu as e,nu as t,ru as n,tu as r}from"./loadAgentsDir-Clu7Uk6a.js";n();export{e as drainPendingExtraction,r as executeExtractMemories,t as initExtractMemories};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,r as t,t as n}from"./fast-Dx2fTmWr.js";t();export{n as FastModePicker,e as call};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,r as t}from"./firstPartyEventLogger-BNGPPBNP.js";e();export{t as initialize1PEventLogging};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{Al as t,Do as n,Ml as r,So as i,kl as a,zo as o}from"./loadAgentsDir-Clu7Uk6a.js";import{G as s,Q as c,a as l,l as u}from"./debug-BrXObCdR.js";async function d(){try{let{getResolvedLanguage:e}=await import(`./language-DfOAuDFc.js`);return e()===`zh`?m:p}catch{return p}}async function f(e){let t=a();if(!t)return u(`[recap] no CacheSafeParams saved, skipping`),{kind:`no-turn`};let o=new AbortController;e.addEventListener(`abort`,()=>o.abort(),{once:!0});try{let{messages:a}=await r({promptMessages:[i({content:await d()})],cacheSafeParams:t,canUseTool:async()=>({behavior:`deny`,message:`Recap cannot use tools`,decisionReason:{type:`other`,reason:`away_summary`}}),overrides:{abortController:o},querySource:`away_summary`,forkLabel:`away_summary`,maxTurns:1,skipCacheWrite:!0,skipTranscript:!0});if(e.aborted)return{kind:`aborted`};let s=a.find(e=>e.type===`assistant`&&e.isApiErrorMessage);if(s)return{kind:`api-error`,text:n(s)??``};let c=a.filter(e=>e.type===`assistant`&&!e.isApiErrorMessage).pop();if(!c)return{kind:`failed`};let l=n(c);return!l||l.trim().length===0?{kind:`failed`}:{kind:`ok`,text:l.trim()}}catch(t){return t instanceof c||e.aborted||o.signal.aborted?{kind:`aborted`}:(u(`[recap] generation failed: ${t}`),{kind:`failed`})}}var p,m;e((()=>{s(),l(),t(),o(),p=`The user stepped away and is coming back. Recap in under 40 words, 1-2 plain sentences, no markdown. Lead with the overall goal and current task, then the one next action. Skip root-cause narrative, fix internals, secondary to-dos, and em-dash tangents.`,m=`用户离开后回来了。用中文写 1-2 句话,不超过 60 字,无 markdown。先说明高层目标和当前任务,再说明下一步操作。跳过根因分析和次要待办。`}))();export{f as generateRecap};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{To as t,ZT as n,et as r,tt as i,zo as a}from"./loadAgentsDir-Clu7Uk6a.js";import{F as o,a as s,l as c,z as l}from"./debug-BrXObCdR.js";import{s as u,u as d}from"./types-C-MRCL8J.js";import{st as f}from"./rcDebugLog-VKwMl0yg.js";import{r as p,t as m}from"./sessionTitle-CLOlPZ_M.js";async function h(e,n){let r=m(e);if(!r)return null;try{let e=await i({systemPrompt:f([`Generate a short kebab-case name (2-4 words) that captures the main topic of this conversation. Use lowercase words separated by hyphens. Examples: "fix-login-bug", "add-auth-feature", "refactor-api-client", "debug-test-failures". Return JSON with a "name" field.`]),userPrompt:r,outputFormat:{type:`json_schema`,schema:{type:`object`,properties:{name:{type:`string`}},required:[`name`],additionalProperties:!1}},signal:n,options:{querySource:`rename_generate_name`,agents:[],isNonInteractiveSession:!1,hasAppendSystemPrompt:!1,mcpTools:[]}}),a=d(Array.isArray(e.message.content)?t(e.message.content):e.message.content);return a&&typeof a==`object`&&`name`in a&&typeof a.name==`string`?a.name:null}catch(e){return c(`generateSessionName failed: ${o(e)}`,{level:`error`}),null}}var g=e((()=>{r(),s(),l(),u(),a(),p(),n()}));export{g as n,h as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{Ih as t,Jo as n,Ko as r,Lh as i,at as a,ct as o,fo as s,np as c,op as l,zo as u}from"./loadAgentsDir-Clu7Uk6a.js";import{a as d,l as f}from"./debug-BrXObCdR.js";import{V as p,W as m}from"./model-BQF64tZx.js";import{B as h,F as g,L as _,P as v,R as y,it as b}from"./rcDebugLog-VKwMl0yg.js";import{n as x,t as S}from"./openaiShared-G2-w4gJt.js";import{randomUUID as C}from"crypto";async function*w(e,i,a,l,u){try{let s=b(u.model),d=n(e,a),m=(await Promise.all(a.map(e=>o(e,{getToolPermissionContext:u.getToolPermissionContext,tools:a,agents:u.agents,allowedAgentTypes:u.allowedAgentTypes,model:u.model})))).filter(e=>{let t=e;return t.type!==`advisor_20260301`&&t.type!==`computer_20250124`}),v=h(d,i),S=y(m),w=_(u.toolChoice),T=t({maxRetries:0,fetchOverride:u.fetchOverride,source:u.querySource});f(`[Grok] Calling model=${s}, messages=${v.length}, tools=${S.length}`);let E=g(await T.chat.completions.create({model:s,messages:v,...S.length>0&&{tools:S,...w&&{tool_choice:w}},stream:!0,stream_options:{include_usage:!0},...u.temperatureOverride!==void 0&&{temperature:u.temperatureOverride}},{signal:l}),s),D={},O=null,k={input_tokens:0,output_tokens:0,cache_creation_input_tokens:0,cache_read_input_tokens:0},A=0,j=Date.now();for await(let e of E){switch(e.type){case`message_start`:O=e.message,A=Date.now()-j,e.message.usage&&(k=x(k,e.message.usage));break;case`content_block_start`:{let t=e.index,n=e.content_block;n.type===`tool_use`?D[t]={...n,input:``}:n.type===`text`?D[t]={...n,text:``}:n.type===`thinking`?D[t]={...n,thinking:``,signature:``}:D[t]={...n};break}case`content_block_delta`:{let t=e.index,n=e.delta,r=D[t];if(!r)break;n.type===`text_delta`?r.text=(r.text||``)+n.text:n.type===`input_json_delta`?r.input=(r.input||``)+n.partial_json:n.type===`thinking_delta`?r.thinking=(r.thinking||``)+n.thinking:n.type===`signature_delta`&&(r.signature=n.signature);break}case`content_block_stop`:{let t=D[e.index];if(!t||!O)break;yield{message:{...O,content:r([t],a,u.agentId)},requestId:void 0,type:`assistant`,uuid:C(),timestamp:new Date().toISOString()};break}case`message_delta`:{let t=e.usage;t&&(k=x(k,t));break}case`message_stop`:break}e.type===`message_stop`&&k.input_tokens+k.output_tokens>0&&c(p(s,k),k,u.model),yield{type:`stream_event`,event:e,...e.type===`message_start`?{ttftMs:A}:void 0}}}catch(e){let t=e instanceof Error?e.message:String(e);f(`[Grok] Error: ${t}`,{level:`error`}),yield s({content:`API Error: ${t}`,apiError:`api_error`,error:e instanceof Error?e:Error(String(e))})}}e((()=>{i(),S(),v(),u(),a(),d(),l(),m()}))();export{w as queryModelGrok};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Zt as e,dn as t,vn as n,yn as r}from"./loadAgentsDir-Clu7Uk6a.js";r();export{e as executeSessionEndHooks,t as getSessionEndHookTimeoutMs,n as hasWorktreeCreateHook};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{o as t}from"./log-BMCygSzM.js";function n(e){let t;try{t=new URL(e).hostname}catch{throw Error(`assertWorkspaceHost: invalid URL "${e}". Workspace API key requests must target ${i}.`)}if(t!==i)throw Error(`assertWorkspaceHost: refusing to send workspace API key to non-Anthropic host "${t}". Workspace API key requests must target ${i}. If you are using a custom base URL, workspace endpoints are only available on the Anthropic API.`)}function r(e){let t;try{t=new URL(e).hostname}catch{throw Error(`assertSubscriptionBaseUrl: invalid URL "${e}". Subscription OAuth requests must target ${i}.`)}if(t!==i)throw Error(`assertSubscriptionBaseUrl: refusing subscription OAuth request to non-Anthropic host "${t}". Subscription OAuth requests must target ${i}.`)}var i,a=e((()=>{t(),i=`api.anthropic.com`}));export{n,a as r,r as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./inboundAttachments-Cp8XvLMZ.js";export{e as resolveAndPrepend};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-DaDcL9Zw.js";import{l as t,o as n,u as r}from"./envUtils-DSxRz_kt.js";import{en as i,ht as a,nt as o}from"./state-ix0xIunV.js";import{Aa as s,Ao as c,Bl as l,Da as u,Ea as d,Fa as f,Il as p,Ma as m,Na as h,Oa as g,Oo as _,Pa as ee,Ta as v,Ua as y,Uo as b,Va as x,Ya as S,hb as C,ja as w,jr as te,ka as T,mb as ne,mr as re,zo as E}from"./loadAgentsDir-Clu7Uk6a.js";import{F as D,a as ie,l as O,nt as ae,rt as oe,z as k}from"./debug-BrXObCdR.js";import{b as se,c as ce,g as le}from"./config-3m_9zSrj.js";import{M as A,_ as ue,i as j,j as de,p as fe}from"./git-Do0wJvux.js";import{g as pe,m as M}from"./log-BMCygSzM.js";import{n as me,r as N}from"./analytics-BotDBGh0.js";import{Bt as P,It as F,Lr as I,Ot as L,Rr as he,_n as ge,mt as R,vn as z}from"./model-BQF64tZx.js";import{O as B,_ as _e,d as ve,k as ye,n as be,t as V}from"./rcDebugLog-VKwMl0yg.js";import{a as H,c as U,d as xe,f as Se,o as W,r as G,s as K,u as q}from"./debugUtils-NO5KtXqi.js";import{a as Ce,i as J,n as we,o as Y,t as X}from"./bridgeConfig-5p_w4s5r.js";import{a as Z,o as Q,r as Te,s as Ee,t as De}from"./bridgeEnabled-DhFrLTbG.js";import{i as Oe,t as ke}from"./assistant-C83quuNj.js";import{t as Ae}from"./capacityWake-CV_x9H8j.js";import{n as je,t as Me}from"./pollConfig-DH2oCtFS.js";import{i as Ne}from"./trustedDevice-Dn4rXbxT.js";import{a as Pe,n as Fe,r as Ie,t as Le}from"./workSecret-CNWiR2uQ.js";import{a as Re,i as $,n as ze,t as Be}from"./createSession-D_sgO1Xy.js";import{i as Ve,n as He}from"./envLessBridgeConfig-DXd10GXD.js";import{n as Ue,o as We}from"./mappers-C8lYERPX.js";import{n as Ge,r as Ke,t as qe}from"./sessionTitle-CLOlPZ_M.js";import{a as Je,i as Ye,n as Xe,o as Ze,r as Qe,t as $e}from"./bridgeMessaging-B5Lbzr8e.js";import{t as et}from"./HybridTransport-9fTBC2Pv.js";import{n as tt,r as nt,t as rt}from"./flushGate-XaheIZZT.js";import{hostname as it}from"os";import{randomUUID as at}from"crypto";i(),M(),ue(),le(),he(),P(),Ce(),C(),Te(),E(),x(),te(),$(),Ve(),Ue(),Ke(),m(),ie(),V(),de(),me(),ae(),U(),p(),B(),ve(),n(),W(),k(),ge(),d();var ot=2e3,st=6e4,ct=900*1e3,lt=0;async function ut(e){let{dir:n,machineName:i,branch:a,gitRepoUrl:o,title:s,baseUrl:c,sessionIngressUrl:d,workerType:f,getAccessToken:p,createSession:m,archiveSession:h,getCurrentTitle:_=()=>s,toSDKMessages:ee=()=>{throw Error(`BridgeCoreParams.toSDKMessages not provided. Pass it if you use writeMessages() or initialMessages — daemon callers that only use writeSdkMessages() never hit this path.`)},onAuth401:y,getPollIntervalConfig:b=()=>je,initialHistoryCap:x=200,initialMessages:S,previouslyFlushedUUIDs:C,onInboundMessage:te,onPermissionResponse:ne,onInterrupt:re,onSetModel:E,onSetMaxThinkingTokens:ie,onSetPermissionMode:ae,onStateChange:k,onUserMessage:se,perpetual:ce,initialSSESequenceNum:le=0}=e,ue=++lt,{writeBridgePointer:j,clearBridgePointer:de,readBridgePointer:fe}=await import(`./bridgePointer-MqLe5Asm.js`),pe=ce?await fe(n):null,M=pe?.source===`repl`?pe:null;O(`[bridge:repl] initBridgeCore #${ue} starting (initialMessages=${S?.length??0}${M?` perpetual prior=env:${M.environmentId}`:``})`);let me=w({baseUrl:c,getAccessToken:p,runnerVersion:`0.0.5`,onDebug:O,onAuth401:y,getTrustedDeviceToken:Ne}),P=process.env.USER_TYPE===`ant`?T(me):me,F={dir:n,machineName:i,branch:a,gitRepoUrl:o,maxSessions:1,spawnMode:`single-session`,verbose:!1,sandbox:!1,bridgeId:at(),workerType:f,environmentId:at(),reuseEnvironmentId:M?.environmentId,apiBaseUrl:c,sessionIngressUrl:d},I,L;try{let e=await P.registerBridgeEnvironment(F);I=e.environment_id,L=e.environment_secret}catch(e){return K(`registration_failed`,`[bridge:repl] Environment registration failed: ${D(e)}`),M&&await de(n),k?.(`failed`,D(e)),null}O(`[bridge:repl] Environment registered: ${I}`),A(`info`,`bridge_repl_env_registered`),N(`tengu_bridge_repl_env_registered`,{});async function he(e,t){if(I!==e)return O(`[bridge:repl] Env mismatch (requested ${e}, got ${I}) — cannot reconnect in place`),!1;let n=Se(t),r=n===t?[t]:[t,n];for(let e of r)try{return await P.reconnectSession(I,e),O(`[bridge:repl] Reconnected session ${e} in place on env ${I}`),!0}catch(t){O(`[bridge:repl] reconnectSession(${e}) failed: ${D(t)}`)}return O(`[bridge:repl] reconnectSession exhausted — falling through to fresh session`),!1}let ge=M?await he(M.environmentId,M.sessionId):!1;M&&!ge&&await de(n);let R;if(ge&&M){if(R=M.sessionId,O(`[bridge:repl] Perpetual session reused: ${R}`),S&&C)for(let e of S)C.add(e.uuid)}else{let e=await m({environmentId:I,title:s,gitRepoUrl:o,branch:a,signal:AbortSignal.timeout(15e3)});if(!e)return O(`[bridge:repl] Session creation failed, deregistering environment`),N(`tengu_bridge_repl_session_failed`,{}),await P.deregisterEnvironment(I).catch(()=>{}),k?.(`failed`,`Session creation failed`),null;R=e,O(`[bridge:repl] Session created: ${R}`)}await j(n,{sessionId:R,environmentId:I,source:`repl`}),A(`info`,`bridge_repl_session_created`),N(`tengu_bridge_repl_started`,{has_initial_messages:!!(S&&S.length>0),inProtectedNamespace:r()});let z=new Set;if(S)for(let e of S)z.add(e.uuid);let B=new $e(2e3);for(let e of z)B.add(e);let ve=new $e(2e3),V=new AbortController,H=null;_e(e=>{V.signal.aborted||H?.reportMetadata(e)},{replayCurrent:!0});let U=0,W=ge?le:0,G=null,q=null,Ce=Ae(V.signal),J=Ce.wake,we=Ce.signal,Y=new rt,X=!se,Z=0,Q=null;async function Te(){if(Q)return Q;Q=Ee();try{return await Q}finally{Q=null}}async function Ee(){if(Z++,be(`doReconnect: attempt=${Z}/3 envId=${I} sessionId=${R} workId=${G}`),U++,O(`[bridge:repl] Reconnecting after env lost (attempt ${Z}/3)`),Z>3)return O(`[bridge:repl] Environment reconnect limit reached (3), giving up`),!1;if(H){let e=H.getLastSequenceNum();e>W&&(W=e),H.close(),H=null}if(J(),Y.drop(),G){let e=G;if(await P.stopWork(I,e,!1).catch(()=>{}),G!==e)return O(`[bridge:repl] Poll loop recovered during stopWork await — deferring to it`),Z=0,!0;G=null,q=null}if(V.signal.aborted)return O(`[bridge:repl] Reconnect aborted by teardown`),!1;let e=I;F.reuseEnvironmentId=e;try{let e=await P.registerBridgeEnvironment(F);I=e.environment_id,L=e.environment_secret}catch(e){return F.reuseEnvironmentId=void 0,O(`[bridge:repl] Environment re-registration failed: ${D(e)}`),!1}if(F.reuseEnvironmentId=void 0,O(`[bridge:repl] Re-registered: requested=${e} got=${I}`),V.signal.aborted)return O(`[bridge:repl] Reconnect aborted after env registration, cleaning up`),await P.deregisterEnvironment(I).catch(()=>{}),!1;if(H!==null)return O(`[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it`),Z=0,!0;if(await he(e,R))return N(`tengu_bridge_repl_reconnected_in_place`,{}),Z=0,!0;if(I!==e&&N(`tengu_bridge_repl_env_expired_fresh_session`,{}),await h(R),V.signal.aborted)return O(`[bridge:repl] Reconnect aborted after archive, cleaning up`),await P.deregisterEnvironment(I).catch(()=>{}),!1;let t=_(),r=await m({environmentId:I,title:t,gitRepoUrl:o,branch:a,signal:AbortSignal.timeout(15e3)});return r?V.signal.aborted?(O(`[bridge:repl] Reconnect aborted after session creation, cleaning up`),await h(r),!1):(R=r,l(xe(r)).catch(()=>{}),W=0,ve.clear(),X=!se,O(`[bridge:repl] Re-created session: ${R}`),await j(n,{sessionId:R,environmentId:I,source:`repl`}),C?.clear(),Z=0,!0):(O(`[bridge:repl] Session creation failed during reconnection`),!1)}function De(){return p()}function Oe(){let e=Y.end();if(e.length===0)return;if(!H){O(`[bridge:repl] Cannot drain ${e.length} pending message(s): no transport`);return}for(let t of e)B.add(t.uuid);let t=ee(e).map(e=>({...e,session_id:R}));O(`[bridge:repl] Drained ${e.length} pending message(s) after flush`),H.writeBatch(t)}let ke=null;function Me(){ke?.()}function Ie(e){if(be(`handleTransportPermanentClose: code=${e} transport=${H?`exists`:`null`} pollAborted=${V.signal.aborted}`),O(`[bridge:repl] Transport permanently closed: code=${e}`),N(`tengu_bridge_repl_ws_closed`,{code:e}),H){let e=H.getLastSequenceNum();e>W&&(W=e),H=null}J();let t=Y.drop();if(t>0&&O(`[bridge:repl] Dropping ${t} pending message(s) on transport close (code=${e})`,{level:`warn`}),e===1e3){k?.(`failed`,`session ended`),V.abort(),Me();return}k?.(`reconnecting`,`Remote Control connection lost (code ${e})`),O(`[bridge:repl] Transport reconnect budget exhausted (code=${e}), attempting env reconnect`),Te().then(t=>{t||V.signal.aborted||(O(`[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down`),N(`tengu_bridge_repl_reconnect_failed`,{close_code:e}),k?.(`failed`,`reconnection failed`),Me())})}let Re;process.env.USER_TYPE===`ant`&&process.platform!==`win32`&&(Re=()=>{O(`[bridge:repl] SIGUSR2 received — forcing doReconnect() for testing`),Te()},process.on(`SIGUSR2`,Re));let $=null;process.env.USER_TYPE===`ant`&&g({fireClose:e=>{if(!$){O(`[bridge:debug] fireClose: no transport wired yet`);return}O(`[bridge:debug] fireClose(${e}) — injecting`),$(e)},forceReconnect:()=>{O(`[bridge:debug] forceReconnect — injecting`),Te()},injectFault:u,wakePollLoop:J,describe:()=>`env=${I} session=${R} transport=${H?.getStateLabel()??`null`} workId=${G??`null`}`}),dt({api:P,getCredentials:()=>({environmentId:I,environmentSecret:L}),signal:V.signal,getPollIntervalConfig:b,onStateChange:k,getWsState:()=>H?.getStateLabel()??`null`,isAtCapacity:()=>H!==null,capacitySignal:we,onFatalError:Me,getHeartbeatInfo:()=>!G||!q?null:{environmentId:I,workId:G,sessionToken:q},onHeartbeatFatal:e=>{if(O(`[bridge:repl] heartbeatWork fatal (status=${e.status}) — tearing down work item for fast re-dispatch`),H){let e=H.getLastSequenceNum();e>W&&(W=e),H.close(),H=null}Y.drop(),G&&P.stopWork(I,G,!1).catch(e=>{O(`[bridge:repl] stopWork after heartbeat fatal: ${D(e)}`)}),G=null,q=null,J(),k?.(`reconnecting`,`Work item lease expired, fetching fresh token`)},async onEnvironmentLost(){return await Te()?{environmentId:I,environmentSecret:L}:null},onWorkReceived:(e,r,i,a)=>{if(H?.isConnectedStatus()&&O(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${i})`),O(`[bridge:repl] Work received: workId=${i} workSessionId=${e} currentSessionId=${R} match=${Pe(e,R)}`),j(n,{sessionId:R,environmentId:I,source:`repl`}),!Pe(e,R)){O(`[bridge:repl] Rejecting foreign session: expected=${R} got=${e}`);return}G=i,q=r;let o=a||t(process.env.CLAUDE_BRIDGE_USE_CCR_V2),s;if(!o){if(s=De(),!s){O(`[bridge:repl] No OAuth token available for session ingress, skipping work`);return}ye(s)}if(N(`tengu_bridge_repl_work_received`,{}),H){let e=H;H=null;let t=e.getLastSequenceNum();t>W&&(W=t),e.close()}Y.deactivate();let l=e=>Ye(e,{transport:H,sessionId:R,onInterrupt:re,onSetModel:E,onSetMaxThinkingTokens:ie,onSetPermissionMode:ae}),u=!1,f=e=>{H=e,e.setOnConnect(()=>{if(H===e){if(O(`[bridge:repl] Ingress transport connected`),N(`tengu_bridge_repl_ws_connected`,{}),!o){let e=De();e&&ye(e)}if(He=!1,!u&&S&&S.length>0){u=!0;let t=x,n=S.filter(e=>Je(e)&&!C?.has(e.uuid)),r=t>0&&n.length>t?n.slice(-t):n;r.length<n.length&&(O(`[bridge:repl] Capped initial flush: ${n.length} -> ${r.length} (cap=${t})`),N(`tengu_bridge_repl_history_capped`,{eligible_count:n.length,capped_count:r.length}));let i=ee(r);if(i.length>0){O(`[bridge:repl] Flushing ${i.length} initial message(s) via transport`);let t=i.map(e=>({...e,session_id:R})),n=e.droppedBatchCount;e.writeBatch(t).then(()=>{if(e.droppedBatchCount>n){O(`[bridge:repl] Initial flush dropped ${e.droppedBatchCount-n} batch(es) — not marking ${i.length} UUID(s) as flushed`);return}if(C)for(let e of i)e.uuid&&C.add(e.uuid)}).catch(e=>O(`[bridge:repl] Initial flush failed: ${e}`)).finally(()=>{H===e&&(Oe(),k?.(`connected`))})}else Oe(),k?.(`connected`)}else Y.active||k?.(`connected`)}}),e.setOnData(e=>{try{let t=JSON.parse(e);be(`ingress: type=${t.type}${t.type===`control_request`?` subtype=${t.request?.subtype} request_id=${t.request_id}`:``}${t.type===`control_response`?` subtype=${t.response?.subtype} request_id=${t.response?.request_id}`:``}${t.type===`user`?` uuid=${t.uuid}`:``}${t.type===`keep_alive`?``:` len=${e.length}`}`)}catch{be(`ingress (non-JSON): ${String(e).slice(0,200)}`)}Qe(e,B,ve,te,ne,l)}),$=Ie,e.setOnClose(t=>{H===e&&(be(`transport onClose: code=${t} connected=${e.isConnectedStatus()} state=${e.getStateLabel()} seq=${e.getLastSequenceNum()}`),Ie(t))}),!u&&S&&S.length>0&&Y.start(),e.connect()};if(U++,o){let t=Le(c,e),n=U;O(`[bridge:repl] CCR v2: sessionUrl=${t} session=${e} gen=${n}`),nt({sessionUrl:t,ingressToken:r,sessionId:e,initialSequenceNum:W}).then(e=>{if(V.signal.aborted){e.close();return}if(n!==U){O(`[bridge:repl] CCR v2: discarding stale handshake gen=${n} current=${U}`),e.close();return}f(e)},e=>{O(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${D(e)}`,{level:`error`}),N(`tengu_bridge_repl_ccr_v2_init_failed`,{}),n===U&&(G&&(P.stopWork(I,G,!1).catch(e=>{O(`[bridge:repl] stopWork after v2 init failure: ${D(e)}`)}),G=null,q=null),J())})}else{let t=Fe(d,e);O(`[bridge:repl] Ingress URL: ${t}`),O(`[bridge:repl] Creating HybridTransport: session=${e}`);let n=s??``;f(tt(new et(new URL(t),{Authorization:`Bearer ${n}`,"anthropic-version":`2023-06-01`},e,()=>({Authorization:`Bearer ${De()??n}`,"anthropic-version":`2023-06-01`}),{maxConsecutiveFailures:50,isBridge:!0,onBatchDropped:()=>{k?.(`reconnecting`,`Lost sync with Remote Control — events could not be delivered`),J()}})))}}});let ze=ce?setInterval(()=>{Q||j(n,{sessionId:R,environmentId:I,source:`repl`})},60*6e4):null;ze?.unref?.();let Be=b().session_keepalive_interval_v2_ms,Ve=Be>0?setInterval(()=>{H&&(O(`[bridge:repl] keep_alive sent`),H.write({type:`keep_alive`}).catch(e=>{O(`[bridge:repl] keep_alive write failed: ${D(e)}`)}))},Be):null;Ve?.unref?.();let He=!1;ke=async()=>{if(He){O(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${I} session=${R}`);return}He=!0;let e=Date.now();if(O(`[bridge:repl] Teardown starting: env=${I} session=${R} workId=${G??`none`} transportState=${H?.getStateLabel()??`null`}`),ze!==null&&clearInterval(ze),Ve!==null&&clearInterval(Ve),Re&&process.off(`SIGUSR2`,Re),process.env.USER_TYPE===`ant`&&(v(),$=null),V.abort(),O(`[bridge:repl] Teardown: poll loop aborted`),H){let e=H.getLastSequenceNum();e>W&&(W=e)}if(ce){H=null,Y.drop(),await j(n,{sessionId:R,environmentId:I,source:`repl`}),O(`[bridge:repl] Teardown (perpetual): leaving env=${I} session=${R} alive on server, duration=${Date.now()-e}ms`);return}let t=H;if(H=null,Y.drop(),t){let e={...Ze(R),session_id:R};t.write(e)}let r=G?P.stopWork(I,G,!0).then(()=>{O(`[bridge:repl] Teardown: stopWork completed`)}).catch(e=>{O(`[bridge:repl] Teardown stopWork failed: ${D(e)}`)}):Promise.resolve();await Promise.all([r,h(R)]),t?.close(),O(`[bridge:repl] Teardown: transport closed`),await P.deregisterEnvironment(I).catch(e=>{O(`[bridge:repl] Teardown deregister failed: ${D(e)}`)}),await de(n),O(`[bridge:repl] Teardown complete: env=${I} duration=${Date.now()-e}ms`)};let Ue=oe(()=>ke?.());return O(`[bridge:repl] Ready: env=${I} session=${R}`),k?.(`ready`),{get bridgeSessionId(){return R},get environmentId(){return I},getSSESequenceNum(){let e=H?.getLastSequenceNum()??0;return Math.max(W,e)},sessionIngressUrl:d,writeMessages(e){let t=e.filter(e=>Je(e)&&!z.has(e.uuid)&&!B.has(e.uuid));if(t.length===0)return;if(!X)for(let e of t){let t=Xe(e);if(t!==void 0&&se?.(t,R)){X=!0;break}}if(Y.enqueue(...t)){O(`[bridge:repl] Queued ${t.length} message(s) during initial flush`);return}if(!H){let e=t.map(e=>e.type).join(`,`);O(`[bridge:repl] Transport not configured, dropping ${t.length} message(s) [${e}] for session=${R}`,{level:`warn`});return}for(let e of t)B.add(e.uuid);O(`[bridge:repl] Sending ${t.length} message(s) via transport`);let n=ee(t).map(e=>({...e,session_id:R}));H.writeBatch(n)},writeSdkMessages(e){let t=e.filter(e=>!e.uuid||!B.has(e.uuid));if(t.length===0)return;if(!H){O(`[bridge:repl] Transport not configured, dropping ${t.length} SDK message(s) for session=${R}`,{level:`warn`});return}for(let e of t)e.uuid&&B.add(e.uuid);let n=t.map(e=>({...e,session_id:R}));H.writeBatch(n)},sendControlRequest(e){if(!H){O(`[bridge:repl] Transport not configured, skipping control_request`);return}let t={...e,session_id:R};H.write(t),O(`[bridge:repl] Sent control_request request_id=${e.request_id}`)},sendControlResponse(e){if(!H){O(`[bridge:repl] Transport not configured, skipping control_response`);return}let t={...e,session_id:R};H.write(t),O(`[bridge:repl] Sent control_response`)},sendControlCancelRequest(e){if(!H){O(`[bridge:repl] Transport not configured, skipping control_cancel_request`);return}let t={type:`control_cancel_request`,request_id:e,session_id:R};H.write(t),O(`[bridge:repl] Sent control_cancel_request request_id=${e}`)},sendResult(){if(!H){O(`[bridge:repl] sendResult: skipping, transport not configured session=${R}`);return}H.reportState(`idle`);let e={...Ze(R),session_id:R};H.write(e),O(`[bridge:repl] Sent result for session=${R}`)},async teardown(){Ue(),await ke?.(),O(`[bridge:repl] Torn down`),N(`tengu_bridge_repl_teardown`,{})}}}async function dt({api:e,getCredentials:t,signal:n,onStateChange:r,onWorkReceived:i,onEnvironmentLost:a,getWsState:o,isAtCapacity:c,capacitySignal:l,onFatalError:u,getPollIntervalConfig:d=()=>je,getHeartbeatInfo:p,onHeartbeatFatal:m}){O(`[bridge:repl] Starting work poll loop for env=${t().environmentId}`);let g=0,_=null,v=null,y=0,b=!1;for(;!n.aborted;){let{environmentId:x,environmentSecret:S}=t(),C=d();try{let t=await e.pollForWork(x,S,n,C.reclaim_older_than_ms);if(y=0,g>0&&(O(`[bridge:repl] Poll recovered after ${g} consecutive error(s)`),g=0,_=null,v=null,r?.(`ready`)),!t){let t=b;if(b=!1,c?.()&&l&&!t){let t=C.poll_interval_ms_at_capacity;if(C.non_exclusive_heartbeat_interval_ms>0&&p){N(`tengu_bridge_heartbeat_mode_entered`,{heartbeat_interval_ms:C.non_exclusive_heartbeat_interval_ms});let r=t>0?Date.now()+t:null,i=!1,a=0;for(;!n.aborted&&c()&&(r===null||Date.now()<r);){let t=d();if(t.non_exclusive_heartbeat_interval_ms<=0)break;let n=p();if(!n)break;let r=l();try{await e.heartbeatWork(n.environmentId,n.workId,n.sessionToken)}catch(e){if(O(`[bridge:repl:heartbeat] Failed: ${D(e)}`),e instanceof s){r.cleanup(),N(`tengu_bridge_heartbeat_error`,{status:e.status,error_type:e.status===401||e.status===403?`auth_failed`:`fatal`}),m?(m(e),O(`[bridge:repl:heartbeat] Fatal (status=${e.status}), work state cleared — fast-polling for re-dispatch`)):i=!0;break}}a++,await z(t.non_exclusive_heartbeat_interval_ms,r.signal),r.cleanup()}let o=i?`error`:n.aborted?`shutdown`:c()?r!==null&&Date.now()>=r?`poll_due`:`config_disabled`:`capacity_changed`;if(N(`tengu_bridge_heartbeat_mode_exited`,{reason:o,heartbeat_cycles:a}),!i){o===`poll_due`&&O(`[bridge:repl] Heartbeat poll_due after ${a} cycles — falling through to pollForWork`);continue}}let r=t>0?t:C.non_exclusive_heartbeat_interval_ms;if(r>0){let e=l(),t=Date.now();await z(r,e.signal),e.cleanup();let n=Date.now()-t-r;n>6e4&&(O(`[bridge:repl] At-capacity sleep overran by ${Math.round(n/1e3)}s — process suspension detected, forcing one fast-poll cycle`),N(`tengu_bridge_repl_suspension_detected`,{overrun_ms:n}),b=!0)}}else await z(C.poll_interval_ms_not_at_capacity,n);continue}let a;try{a=Ie(t.secret)}catch(n){O(`[bridge:repl] Failed to decode work secret: ${D(n)}`),N(`tengu_bridge_repl_work_secret_failed`,{}),await e.stopWork(x,t.id,!1).catch(()=>{});continue}O(`[bridge:repl] Acknowledging workId=${t.id}`);try{await e.acknowledgeWork(x,t.id,a.session_ingress_token)}catch(e){O(`[bridge:repl] Acknowledge failed workId=${t.id}: ${D(e)}`)}if(t.data.type===`healthcheck`){O(`[bridge:repl] Healthcheck received`);continue}if(t.data.type===`session`){let e=t.data.id;try{f(e,`session_id`)}catch{O(`[bridge:repl] Invalid session_id in work: ${e}`);continue}i(e,a.session_ingress_token,t.id,a.use_code_sessions===!0),O(`[bridge:repl] Work accepted, continuing poll loop`)}}catch(i){if(n.aborted)break;if(i instanceof s&&i.status===404&&a){let e=t().environmentId;if(x!==e){O(`[bridge:repl] Stale poll error for old env=${x}, current env=${e} — skipping onEnvironmentLost`),g=0,_=null;continue}if(y++,O(`[bridge:repl] Environment deleted, attempting re-registration (attempt ${y}/3)`),N(`tengu_bridge_repl_env_lost`,{attempt:y}),y>3){O(`[bridge:repl] Environment re-registration limit reached (3), giving up`),r?.(`failed`,`Environment deleted and re-registration limit reached`),u?.();break}r?.(`reconnecting`,`environment lost, recreating session`);let i=await a();if(n.aborted)break;if(i){g=0,_=null,r?.(`ready`),O(`[bridge:repl] Re-registered environment: ${i.environmentId}`);continue}r?.(`failed`,`Environment deleted and re-registration failed`),u?.();break}if(i instanceof s){let e=h(i.errorType),t=ee(i);O(`[bridge:repl] Fatal poll error: ${i.message} (status=${i.status}, type=${i.errorType??`unknown`})${t?` (suppressed)`:``}`),N(`tengu_bridge_repl_fatal_error`,{status:i.status,error_type:i.errorType}),A(e?`info`:`error`,`bridge_repl_fatal_error`,{status:i.status,error_type:i.errorType}),t||r?.(`failed`,e?`session expired · /remote-control to reconnect`:i.message),u?.();break}let c=Date.now();v!==null&&c-v>6e4*2&&(O(`[bridge:repl] Detected system sleep (${Math.round((c-v)/1e3)}s gap), resetting poll error budget`),A(`info`,`bridge_repl_poll_sleep_detected`,{gapMs:c-v}),g=0,_=null),v=c,g++,_===null&&(_=c);let l=c-_,f=H(i),m=G(i),b=o?.()??`unknown`;if(O(`[bridge:repl] Poll error (attempt ${g}, elapsed ${Math.round(l/1e3)}s, ws=${b}): ${m}`),N(`tengu_bridge_repl_poll_error`,{status:f,consecutiveErrors:g,elapsedMs:l}),g===1&&r?.(`reconnecting`,m),l>=9e5){O(`[bridge:repl] Poll failures exceeded ${ct/1e3}s (${g} errors), giving up`),A(`info`,`bridge_repl_poll_give_up`),N(`tengu_bridge_repl_poll_give_up`,{consecutiveErrors:g,elapsedMs:l,lastStatus:f}),r?.(`failed`,`connection to server lost`);break}let S=Math.min(ot*2**(g-1),st);if(d().non_exclusive_heartbeat_interval_ms>0){let t=p?.();if(t)try{await e.heartbeatWork(t.environmentId,t.workId,t.sessionToken)}catch{}}await z(S,n)}}O(`[bridge:repl] Work poll loop ended (aborted=${n.aborted}) env=${t().environmentId}`)}ie(),k(),W(),U();async function ft(t){let{onInboundMessage:n,onPermissionResponse:r,onInterrupt:i,onSetModel:s,onSetMaxThinkingTokens:l,onSetPermissionMode:u,onStateChange:d,initialMessages:f,getMessages:p,previouslyFlushedUUIDs:m,initialName:h,perpetual:g,outboundOnly:ee,tags:v}=t??{};if(q(Q),!await Z())return K(`not_enabled`,`[bridge:repl] Skipping: bridge not enabled`),null;if(!X())return K(`no_oauth`,`[bridge:repl] Skipping: no OAuth tokens`),d?.(`failed`,`authentication required`),null;if(await S(),!y(`allow_remote_control`))return K(`policy_denied`,`[bridge:repl] Skipping: allow_remote_control policy not allowed`),d?.(`failed`,`disabled by your organization's policy`),null;if(!J()){let e=ce();if(e.bridgeOauthDeadExpiresAt!=null&&(e.bridgeOauthDeadFailCount??0)>=3&&L()?.expiresAt===e.bridgeOauthDeadExpiresAt)return O(`[bridge:repl] Skipping: cross-process backoff (dead token seen ${e.bridgeOauthDeadFailCount} times)`),null;await R();let t=L();if(t&&t.expiresAt!==null&&t.expiresAt<=Date.now()){K(`oauth_expired_unrefreshable`,`[bridge:repl] Skipping: OAuth token expired and refresh failed (re-login required)`),d?.(`failed`,`authentication required`);let e=t.expiresAt;return se(t=>({...t,bridgeOauthDeadExpiresAt:e,bridgeOauthDeadFailCount:t.bridgeOauthDeadExpiresAt===e?(t.bridgeOauthDeadFailCount??0)+1:1})),null}}let x=we(),C=`remote-control-${ne()}`,w=!1,te=!1;if(h)C=h,w=!0,te=!0;else{let e=a(),t=e?re(e):void 0;if(t)C=t,w=!0,te=!0;else if(f&&f.length>0)for(let e=f.length-1;e>=0;e--){let t=f[e];if(t.type!==`user`||t.isMeta||t.toolUseResult||t.isCompactSummary||t.origin&&t.origin.kind!==`human`||b(t))continue;let n=_(t.message.content);if(!n)continue;let r=mt(n);if(r){C=r,w=!0;break}}}let T=0,E,ie=0,ae=(e,t,n)=>{w=!0,C=e,O(`[bridge:repl] derived title from message ${n}: ${e}`),Re(t,e,{baseUrl:x,getAccessToken:X}).catch(()=>{})},oe=(e,t)=>{let n=++ie,r=T;Ge(e,AbortSignal.timeout(15e3)).then(e=>{e&&n===ie&&E===t&&!re(a())&&ae(e,t,r)})},k=(e,t)=>{if(te||re(a()))return!0;if(E!==void 0&&E!==t&&(T=0),E=t,T++,T===1&&!w){let n=mt(e);n&&ae(n,t,T),oe(e,t)}else if(T===3){let n=p?.(),r=n?qe(c(n)):e;oe(r,t)}return T>=3},le=Y()?`self-hosted`:await I();if(!le)return K(`no_org_uuid`,`[bridge:repl] Skipping: no org UUID`),d?.(`failed`,`/login`),null;if(Ee()&&!g){let e=await He();if(e)return K(`version_too_old`,`[bridge:repl] Skipping: ${e}`,!0),d?.(`failed`,"run `claude update` to upgrade"),null;O(`[bridge:repl] Using env-less bridge path (tengu_bridge_repl_v2)`);let{initEnvLessBridgeCore:t}=await import(`./remoteBridgeCore-9-HVMo63.js`);return t({baseUrl:x,orgUUID:le,title:C,getAccessToken:X,onAuth401:F,toSDKMessages:We,initialHistoryCap:200,initialMessages:f,onInboundMessage:n,onUserMessage:k,onPermissionResponse:r,onInterrupt:i,onSetModel:s,onSetMaxThinkingTokens:l,onSetPermissionMode:u,onStateChange:d,outboundOnly:ee,tags:v})}let A=De();if(A)return K(`version_too_old`,`[bridge:repl] Skipping: ${A}`),d?.(`failed`,"run `claude update` to upgrade"),null;let ue=await j(),de=await fe(),pe=process.env.CLAUDE_BRIDGE_SESSION_INGRESS_URL||x,M=`claude_code`;{let{isAssistantMode:t}=(Oe(),e(ke));t()&&(M=`claude_code_assistant`)}return ut({dir:o(),machineName:it(),branch:ue,gitRepoUrl:de,title:C,baseUrl:x,sessionIngressUrl:pe,workerType:M,getAccessToken:X,createSession:e=>ze({...e,events:[],baseUrl:x,getAccessToken:X}),archiveSession:e=>Be(e,{baseUrl:x,getAccessToken:X,timeoutMs:1500}).catch(e=>{O(`[bridge:repl] archiveBridgeSession threw: ${D(e)}`,{level:`error`})}),getCurrentTitle:()=>re(a())??C,onUserMessage:k,toSDKMessages:We,onAuth401:F,getPollIntervalConfig:Me,initialHistoryCap:200,initialMessages:f,previouslyFlushedUUIDs:m,onInboundMessage:n,onPermissionResponse:r,onInterrupt:i,onSetModel:s,onSetMaxThinkingTokens:l,onSetPermissionMode:u,onStateChange:d,perpetual:g})}var pt=50;function mt(e){let t=pe(e),n=(/^(.*?[.!?])\s/.exec(t)?.[1]??t).replace(/\s+/g,` `).trim();if(n)return n.length>pt?n.slice(0,pt-1)+`…`:n}export{ft as initReplBridge};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,t}from"./language-DIw2871r.js";e();export{t as getResolvedLanguage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e,t}from"./loadAgentsDir-Clu7Uk6a.js";e();export{t as clearAgentDefinitionsCache};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{$y as e,Qy as t,tb as n}from"./loadAgentsDir-Clu7Uk6a.js";t();export{e as loadPluginHooks,n as setupPluginHookHotReload};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,c as t,o as n,t as r}from"./localSearch-iA6JTk19.js";n();export{r as clearSkillIndexCache,e as getSkillIndex,t as searchSkills};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-DaDcL9Zw.js";import{n as t,t as n}from"./p-map-HKDr3iDo.js";import{D as r,H as i,I as a,P as o,T as s,fi as c,j as ee,kn as l,t as u,y as te}from"./src-CDCSSo0U2.js";import{t as d}from"./jsx-runtime-Bb4Xn-E0.js";import{$g as f,D_ as p,G_ as m,HS as h,I_ as g,O_ as ne,Ob as re,Qg as _,R_ as v,Sx as y,US as b,V_ as x,Xg as ie,Zg as ae,__ as S,ag as oe,cC as C,dg as se,g_ as w,gx as T,hx as E,j_ as D,kb as O,lg as k,oC as A,r_ as j,t_ as M,xx as N,z_ as P}from"./loadAgentsDir-Clu7Uk6a.js";import{H as F,z as I}from"./debug-BrXObCdR.js";import{c as L,g as R,o as z,y as B}from"./config-3m_9zSrj.js";import{n as V,o as H}from"./process-gEbdy6uY.js";import{i as U,o as W}from"./platform-BrYefG_2.js";import{s as ce,u as G}from"./types-C-MRCL8J.js";import{n as le,r as K}from"./analytics-BotDBGh0.js";import{l as q,o as ue}from"./stringUtils-DGLPkqJ4.js";import{n as J,t as Y}from"./exit-BOhGfSlm.js";import{stat as de}from"fs/promises";import{cwd as fe}from"process";n();var X=e(c(),1);C(),V(),u(),x(),ue(),y(),T();var Z=d();function pe({servers:e,scope:t,onDone:n}){let c=Object.keys(e),[l,u]=(0,X.useState)({});(0,X.useEffect)(()=>{g().then(({servers:e})=>u(e))},[]);let d=c.filter(e=>l[e]!==void 0);async function f(n){let r=0;for(let i of n){let n=e[i];if(n){let e=i;if(l[e]!==void 0){let t=1;for(;l[`${i}_${t}`]!==void 0;)t++;e=`${i}_${t}`}await D(e,n,t),r++}}m(r)}let[p]=i(),m=(0,X.useCallback)(e=>{H(e>0?`\n${ee(`success`,p)(`Successfully imported ${e} MCP ${q(e,`server`)} to ${t} config.`)}\n`:`
|
|
2
|
-
No servers were imported.`),n(),A()},[p,t,n]),h=(0,X.useCallback)(()=>{m(0)},[m]);return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(te,{title:`Import MCP Servers from Claude Desktop`,subtitle:`Found ${c.length} MCP ${q(c.length,`server`)} in Claude Desktop.`,color:`success`,onCancel:h,hideInputGuide:!0,children:[d.length>0&&(0,Z.jsx)(o,{color:`warning`,children:`Note: Some servers already exist with the same name. If selected, they will be imported with a numbered suffix.`}),(0,Z.jsx)(o,{children:`Please select the servers you want to import:`}),(0,Z.jsx)(E,{options:c.map(e=>({label:`${e}${d.includes(e)?` (already exists)`:``}`,value:e})),defaultValue:c.filter(e=>!d.includes(e)),onSubmit:f,onCancel:h,hideIndexes:!0})]}),(0,Z.jsx)(a,{paddingX:1,children:(0,Z.jsx)(o,{dimColor:!0,italic:!0,children:(0,Z.jsxs)(s,{children:[(0,Z.jsx)(r,{shortcut:`Space`,action:`select`}),(0,Z.jsx)(r,{shortcut:`Enter`,action:`confirm`}),(0,Z.jsx)(N,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`cancel`})]})})})]})}u(),O(),le(),f(),se(),x(),ne(),b(),R(),I(),C(),ce(),W();async function Q(e,t){try{let n=await oe(e,t);return n.type===`connected`?`✓ Connected`:n.type===`needs-auth`?`! Needs authentication`:`✗ Failed to connect`}catch{return`✗ Connection error`}}async function me({debug:e,verbose:t}){let n=fe();K(`tengu_mcp_start`,{});try{await de(n)}catch(e){throw F(e)&&Y(`Error: Directory ${n} does not exist`),e}try{let{setup:r}=await import(`./setup-UI9uv2-K.js`);await r(n,`default`,!1,!1,void 0,!1);let{startMCPServer:i}=await import(`./mcp-CwIYauZl.js`);await i(n,e??!1,t??!1)}catch(e){Y(`Error: Failed to start MCP server: ${e}`)}}async function he(e,t){let n=v(e),r=()=>{n&&(n.type===`sse`||n.type===`http`)&&(ae(e,n),ie(e,n))};try{if(t.scope){let n=S(t.scope);K(`tengu_mcp_delete`,{name:e,scope:n}),await m(e,n),r(),process.stdout.write(`Removed MCP server ${e} from ${n} config\n`),J(`File modified: ${w(n)}`)}let n=z(),i=L(),{servers:a}=P(`project`),o=!!a[e],s=[];if(n.mcpServers?.[e]&&s.push(`local`),o&&s.push(`project`),i.mcpServers?.[e]&&s.push(`user`),s.length===0)Y(`No MCP server found with name: "${e}"`);else if(s.length===1){let t=s[0];K(`tengu_mcp_delete`,{name:e,scope:t}),await m(e,t),r(),process.stdout.write(`Removed MCP server "${e}" from ${t} config\n`),J(`File modified: ${w(t)}`)}else process.stderr.write(`MCP server "${e}" exists in multiple scopes:\n`),s.forEach(e=>{process.stderr.write(` - ${p(e)} (${w(e)})\n`)}),process.stderr.write(`
|
|
3
|
-
To remove from a specific scope, use:
|
|
4
|
-
`),s.forEach(t=>{process.stderr.write(` claude mcp remove "${e}" -s ${t}\n`)}),Y()}catch(e){Y(e.message)}}async function ge(){K(`tengu_mcp_list`,{});let{servers:e}=await g();if(Object.keys(e).length===0)console.log("No MCP servers configured. Use `claude mcp add` to add a server.");else{console.log(`Checking MCP server health...
|
|
5
|
-
`);let n=await t(Object.entries(e),async([e,t])=>({name:e,server:t,status:await Q(e,t)}),{concurrency:k()});for(let{name:e,server:t,status:r}of n)if(t.type===`sse`)console.log(`${e}: ${t.url} (SSE) - ${r}`);else if(t.type===`http`)console.log(`${e}: ${t.url} (HTTP) - ${r}`);else if(t.type===`claudeai-proxy`)console.log(`${e}: ${t.url} - ${r}`);else if(!t.type||t.type===`stdio`){let n=t,i=Array.isArray(n.args)?n.args:[];console.log(`${e}: ${n.command} ${i.join(` `)} - ${r}`)}}await A(0)}async function $(e){K(`tengu_mcp_get`,{name:e});let t=v(e);t||Y(`No MCP server found with name: ${e}`),console.log(`${e}:`),console.log(` Scope: ${p(t.scope)}`);let n=await Q(e,t);if(console.log(` Status: ${n}`),t.type===`sse`){if(console.log(` Type: sse`),console.log(` URL: ${t.url}`),t.headers){console.log(` Headers:`);for(let[e,n]of Object.entries(t.headers))console.log(` ${e}: ${n}`)}if(t.oauth?.clientId||t.oauth?.callbackPort){let n=[];t.oauth.clientId&&(n.push(`client_id configured`),_(e,t)?.clientSecret&&n.push(`client_secret configured`)),t.oauth.callbackPort&&n.push(`callback_port ${t.oauth.callbackPort}`),console.log(` OAuth: ${n.join(`, `)}`)}}else if(t.type===`http`){if(console.log(` Type: http`),console.log(` URL: ${t.url}`),t.headers){console.log(` Headers:`);for(let[e,n]of Object.entries(t.headers))console.log(` ${e}: ${n}`)}if(t.oauth?.clientId||t.oauth?.callbackPort){let n=[];t.oauth.clientId&&(n.push(`client_id configured`),_(e,t)?.clientSecret&&n.push(`client_secret configured`)),t.oauth.callbackPort&&n.push(`callback_port ${t.oauth.callbackPort}`),console.log(` OAuth: ${n.join(`, `)}`)}}else if(t.type===`stdio`){console.log(` Type: stdio`),console.log(` Command: ${t.command}`);let e=Array.isArray(t.args)?t.args:[];if(console.log(` Args: ${e.join(` `)}`),t.env){console.log(` Environment:`);for(let[e,n]of Object.entries(t.env))console.log(` ${e}=${n}`)}}console.log(`\nTo remove this server, run: claude mcp remove "${e}" -s ${t.scope}`),await A(0)}async function _e(e,t,n){try{let r=S(n.scope),i=G(t),a=n.clientSecret&&i&&typeof i==`object`&&`type`in i&&(i.type===`sse`||i.type===`http`)&&`url`in i&&typeof i.url==`string`&&`oauth`in i&&i.oauth&&typeof i.oauth==`object`&&`clientId`in i.oauth?await M():void 0;await D(e,i,r);let o=i&&typeof i==`object`&&`type`in i?String(i.type||`stdio`):`stdio`;a&&i&&typeof i==`object`&&`type`in i&&(i.type===`sse`||i.type===`http`)&&`url`in i&&typeof i.url==`string`&&j(e,{type:i.type,url:i.url},a),K(`tengu_mcp_add`,{scope:r,source:`json`,type:o}),J(`Added ${o} MCP server ${e} to ${r} config`)}catch(e){Y(e.message)}}async function ve(e){try{let t=S(e.scope);K(`tengu_mcp_add`,{scope:t,platform:U(),source:`desktop`});let{readClaudeDesktopMcpServers:n}=await import(`./claudeDesktop-Cx31Ugjp.js`),r=await n();Object.keys(r).length===0&&J(`No MCP servers found in Claude Desktop configuration or configuration file does not exist.`);let{unmount:i}=await l((0,Z.jsx)(h,{children:(0,Z.jsx)(re,{children:(0,Z.jsx)(pe,{servers:r,scope:t,onDone:()=>{i()}})})}),{exitOnCtrlC:!0})}catch(e){Y(e.message)}}async function ye(){K(`tengu_mcp_reset_mcpjson_choices`,{}),B(e=>({...e,enabledMcpjsonServers:[],disabledMcpjsonServers:[],enableAllProjectMcpServers:!1})),J(`All project-scoped (.mcp.json) server approvals and rejections have been reset.
|
|
6
|
-
You will be prompted for approval next time you start Work Mate.`)}export{ve as mcpAddFromDesktopHandler,_e as mcpAddJsonHandler,$ as mcpGetHandler,ge as mcpListHandler,he as mcpRemoveHandler,ye as mcpResetChoicesHandler,me as mcpServeHandler};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,o as t}from"./rolldown-runtime-DaDcL9Zw.js";import{n,t as r}from"./figures-5ThXQEtq.js";import{D as i,Gt as a,H as o,I as s,Lt as c,P as l,T as u,Wt as d,fi as f,j as p,t as m,y as ee}from"./src-CDCSSo0U2.js";import{t as h}from"./jsx-runtime-Bb4Xn-E0.js";import{$g as g,C_ as _,Fb as v,GS as y,Jg as b,Nb as x,O_ as S,Sx as C,T_ as w,US as T,WS as E,Yg as D,e_ as te,fx as O,g_ as k,px as ne,xx as A}from"./loadAgentsDir-Clu7Uk6a.js";import{a as re,o as ie}from"./debug-BrXObCdR.js";import{l as ae,n as oe,o as j}from"./stringUtils-DGLPkqJ4.js";import{D as se,O as ce}from"./rcDebugLog-VKwMl0yg.js";import{u as M}from"./referral-BlrMpBAV.js";import{i as le,n as N,r as ue}from"./MCPConnectionManager-MWpKjeZT.js";import{n as de,t as fe}from"./McpParsingWarnings-BPBb7Npe.js";import{a as pe,c as P,i as F,l as me,n as he,o as I,r as ge,s as _e,t as ve,u as L}from"./PluginSettings-B0jbwB2M.js";function ye({agentServer:e,onCancel:t,onComplete:n}){let[a]=o(),[f,m]=(0,R.useState)(!1),[h,g]=(0,R.useState)(null),[_,v]=(0,R.useState)(null),y=(0,R.useRef)(null);(0,R.useEffect)(()=>()=>y.current?.abort(),[]),d(`confirm:no`,(0,R.useCallback)(()=>{f&&(y.current?.abort(),y.current=null,m(!1),v(null))},[f]),{context:`Confirmation`,isActive:f});let S=(0,R.useCallback)(async()=>{if(!e.needsAuth||!e.url)return;m(!0),g(null);let t=new AbortController;y.current=t;try{let r={type:e.transport,url:e.url};await te(e.name,r,v,t.signal),n?.(`Authentication successful for ${e.name}. The server will connect when the agent runs.`)}catch(e){e instanceof Error&&!(e instanceof b)&&g(e.message)}finally{m(!1),y.current=null}},[e,n]),C=oe(String(e.name));if(f)return(0,z.jsxs)(s,{flexDirection:`column`,gap:1,padding:1,children:[(0,z.jsxs)(l,{color:`claude`,children:[`Authenticating with `,e.name,`…`]}),(0,z.jsxs)(s,{children:[(0,z.jsx)(x,{}),(0,z.jsx)(l,{children:` A browser window will open for authentication`})]}),_&&(0,z.jsxs)(s,{flexDirection:`column`,children:[(0,z.jsx)(l,{dimColor:!0,children:`If your browser doesn't open automatically, copy this URL manually:`}),(0,z.jsx)(c,{url:_})]}),(0,z.jsx)(s,{marginLeft:3,children:(0,z.jsxs)(l,{dimColor:!0,children:[`Return here after authenticating in your browser.`,` `,(0,z.jsx)(A,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`go back`})]})})]});let w=[];return e.needsAuth&&w.push({label:e.isAuthenticated?`Re-authenticate`:`Authenticate`,value:`auth`}),w.push({label:`Back`,value:`back`}),(0,z.jsxs)(ee,{title:`${C} MCP Server`,subtitle:`agent-only`,onCancel:t,inputGuide:e=>e.pending?(0,z.jsxs)(l,{children:[`Press `,e.keyName,` again to exit`]}):(0,z.jsxs)(u,{children:[(0,z.jsx)(i,{shortcut:`↑↓`,action:`navigate`}),(0,z.jsx)(i,{shortcut:`Enter`,action:`confirm`}),(0,z.jsx)(A,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`go back`})]}),children:[(0,z.jsxs)(s,{flexDirection:`column`,gap:0,children:[(0,z.jsxs)(s,{children:[(0,z.jsx)(l,{bold:!0,children:`Type: `}),(0,z.jsx)(l,{dimColor:!0,children:e.transport})]}),e.url&&(0,z.jsxs)(s,{children:[(0,z.jsx)(l,{bold:!0,children:`URL: `}),(0,z.jsx)(l,{dimColor:!0,children:e.url})]}),e.command&&(0,z.jsxs)(s,{children:[(0,z.jsx)(l,{bold:!0,children:`Command: `}),(0,z.jsx)(l,{dimColor:!0,children:e.command})]}),(0,z.jsxs)(s,{children:[(0,z.jsx)(l,{bold:!0,children:`Used by: `}),(0,z.jsx)(l,{dimColor:!0,children:e.sourceAgents.join(`, `)})]}),(0,z.jsxs)(s,{marginTop:1,children:[(0,z.jsx)(l,{bold:!0,children:`Status: `}),(0,z.jsxs)(l,{children:[p(`inactive`,a)(r.radioOff),` not connected (agent-only)`]})]}),e.needsAuth&&(0,z.jsxs)(s,{children:[(0,z.jsx)(l,{bold:!0,children:`Auth: `}),e.isAuthenticated?(0,z.jsxs)(l,{children:[p(`success`,a)(r.tick),` authenticated`]}):(0,z.jsxs)(l,{children:[p(`warning`,a)(r.triangleUpOutline),` may need authentication`]})]})]}),(0,z.jsx)(s,{children:(0,z.jsx)(l,{dimColor:!0,children:`This server connects only when running the agent.`})}),h&&(0,z.jsx)(s,{children:(0,z.jsxs)(l,{color:`error`,children:[`Error: `,h]})}),(0,z.jsx)(s,{children:(0,z.jsx)(ne,{options:w,onChange:async e=>{switch(e){case`auth`:await S();break;case`back`:t();break}},onCancel:t})})]})}var R,z,B=e((()=>{n(),R=t(f(),1),m(),M(),g(),j(),C(),O(),v(),z=h()}));function V(e){switch(e){case`project`:return{label:`Project MCPs`,path:k(e)};case`user`:return{label:`User MCPs`,path:k(e)};case`local`:return{label:`Local MCPs`,path:k(e)};case`enterprise`:return{label:`Enterprise MCPs`};case`dynamic`:return{label:`Built-in MCPs`,path:`always available`};default:return{label:e}}}function be(e){let t=new Map;for(let n of e){let e=n.scope;t.has(e)||t.set(e,[]),t.get(e).push(n)}for(let[,e]of t)e.sort((e,t)=>e.name.localeCompare(t.name));return t}function xe({servers:e,agentServers:t=[],onSelectServer:n,onSelectAgentServer:d,onComplete:f}){let[m]=o(),[h,g]=(0,H.useState)(0),_=H.useMemo(()=>be(e.filter(e=>e.client.config.type!==`claudeai-proxy`)),[e]),v=H.useMemo(()=>e.filter(e=>e.client.config.type===`claudeai-proxy`).sort((e,t)=>e.name.localeCompare(t.name)),[e]),y=H.useMemo(()=>(_.get(`dynamic`)??[]).sort((e,t)=>e.name.localeCompare(t.name)),[_]),b=V(`dynamic`),x=H.useMemo(()=>{let e=[];for(let t of W){let n=_.get(t)??[];for(let t of n)e.push({type:`server`,server:t})}for(let t of v)e.push({type:`server`,server:t});for(let n of t)e.push({type:`agent-server`,agentServer:n});for(let t of y)e.push({type:`server`,server:t});return e},[_,v,t,y]),S=(0,H.useCallback)(()=>{f(`MCP dialog dismissed`,{display:`system`})},[f]);a({"confirm:previous":()=>g(e=>e===0?x.length-1:e-1),"confirm:next":()=>g(e=>e===x.length-1?0:e+1),"confirm:yes":(0,H.useCallback)(()=>{let e=x[h];e&&(e.type===`server`?n(e.server):e.type===`agent-server`&&d&&d(e.agentServer))},[x,h,n,d]),"confirm:no":S},{context:`Confirmation`});let C=e=>x.findIndex(t=>t.type===`server`&&t.server===e),w=e=>x.findIndex(t=>t.type===`agent-server`&&t.agentServer===e),T=ie(),E=e.some(e=>e.client.type===`failed`);if(e.length===0&&t.length===0)return null;let D=e=>{let t=C(e),n=h===t,i=``,a=``;if(e.client.type===`disabled`)i=p(`inactive`,m)(r.radioOff),a=`disabled`;else if(e.client.type===`connected`)i=p(`success`,m)(r.tick),a=`connected`;else if(e.client.type===`pending`){i=p(`inactive`,m)(r.radioOff);let{reconnectAttempt:t,maxReconnectAttempts:n}=e.client;a=t&&n?`reconnecting (${t}/${n})…`:`connecting…`}else e.client.type===`needs-auth`?(i=p(`warning`,m)(r.triangleUpOutline),a=`needs authentication`):(i=p(`error`,m)(r.cross),a=`failed`);return(0,U.jsxs)(s,{children:[(0,U.jsx)(l,{color:n?`suggestion`:void 0,children:n?`${r.pointer} `:` `}),(0,U.jsx)(l,{color:n?`suggestion`:void 0,children:e.name}),(0,U.jsxs)(l,{dimColor:!n,children:[` · `,i,` `]}),(0,U.jsx)(l,{dimColor:!n,children:a})]},`${e.name}-${t}`)},te=e=>{let t=w(e),n=h===t,i=e.needsAuth?p(`warning`,m)(r.triangleUpOutline):p(`inactive`,m)(r.radioOff),a=e.needsAuth?`may need auth`:`agent-only`;return(0,U.jsxs)(s,{children:[(0,U.jsx)(l,{color:n?`suggestion`:void 0,children:n?`${r.pointer} `:` `}),(0,U.jsx)(l,{color:n?`suggestion`:void 0,children:e.name}),(0,U.jsxs)(l,{dimColor:!n,children:[` · `,i,` `]}),(0,U.jsx)(l,{dimColor:!n,children:a})]},`agent-${e.name}-${t}`)},O=e.length+t.length;return(0,U.jsxs)(s,{flexDirection:`column`,children:[(0,U.jsx)(fe,{}),(0,U.jsx)(ee,{title:`Manage MCP servers`,subtitle:`${O} ${ae(O,`server`)}`,onCancel:S,hideInputGuide:!0,children:(0,U.jsxs)(s,{flexDirection:`column`,children:[W.map(e=>{let t=_.get(e);if(!t||t.length===0)return null;let n=V(e);return(0,U.jsxs)(s,{flexDirection:`column`,marginBottom:1,children:[(0,U.jsxs)(s,{paddingLeft:2,children:[(0,U.jsx)(l,{bold:!0,children:n.label}),n.path&&(0,U.jsxs)(l,{dimColor:!0,children:[` (`,n.path,`)`]})]}),t.map(e=>D(e))]},e)}),v.length>0&&(0,U.jsxs)(s,{flexDirection:`column`,marginBottom:1,children:[(0,U.jsx)(s,{paddingLeft:2,children:(0,U.jsx)(l,{bold:!0,children:`claude.ai`})}),v.map(e=>D(e))]}),t.length>0&&(0,U.jsxs)(s,{flexDirection:`column`,marginBottom:1,children:[(0,U.jsx)(s,{paddingLeft:2,children:(0,U.jsx)(l,{bold:!0,children:`Agent MCPs`})}),[...new Set(t.flatMap(e=>e.sourceAgents))].map(e=>(0,U.jsxs)(s,{flexDirection:`column`,marginTop:1,children:[(0,U.jsx)(s,{paddingLeft:2,children:(0,U.jsxs)(l,{dimColor:!0,children:[`@`,e]})}),t.filter(t=>t.sourceAgents.includes(e)).map(e=>te(e))]},e))]}),y.length>0&&(0,U.jsxs)(s,{flexDirection:`column`,marginBottom:1,children:[(0,U.jsxs)(s,{paddingLeft:2,children:[(0,U.jsx)(l,{bold:!0,children:b.label}),b.path&&(0,U.jsxs)(l,{dimColor:!0,children:[` (`,b.path,`)`]})]}),y.map(e=>D(e))]}),(0,U.jsxs)(s,{flexDirection:`column`,children:[E&&(0,U.jsx)(l,{dimColor:!0,children:T?`※ Error logs shown inline with --debug`:`※ Run claude --debug to see error logs`}),(0,U.jsxs)(l,{dimColor:!0,children:[(0,U.jsx)(c,{url:`https://code.claude.com/docs/en/mcp`,children:`https://code.claude.com/docs/en/mcp`}),` for help`]})]})]})}),(0,U.jsx)(s,{paddingX:1,children:(0,U.jsx)(l,{dimColor:!0,italic:!0,children:(0,U.jsxs)(u,{children:[(0,U.jsx)(i,{shortcut:`↑↓`,action:`navigate`}),(0,U.jsx)(i,{shortcut:`Enter`,action:`confirm`}),(0,U.jsx)(A,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`cancel`})]})})})]})}var H,U,W,G=e((()=>{n(),H=t(f(),1),m(),M(),S(),re(),j(),C(),de(),U=h(),W=[`project`,`local`,`user`,`enterprise`]}));function Se({serverName:e,onComplete:t}){let[n]=o(),i=y(),a=ue(),[c,u]=(0,K.useState)(!0),[d,f]=(0,K.useState)(null);return(0,K.useEffect)(()=>{async function n(){try{if(!i.getState().mcp.clients.find(t=>t.name===e)){f(`MCP server "${e}" not found`),u(!1),t(`MCP server "${e}" not found`);return}switch((await a(e)).client.type){case`connected`:u(!1),t(`Successfully reconnected to ${e}`);break;case`needs-auth`:f(`${e} requires authentication`),u(!1),t(`${e} requires authentication. Use /mcp to authenticate.`);break;case`pending`:case`failed`:case`disabled`:f(`Failed to reconnect to ${e}`),u(!1),t(`Failed to reconnect to ${e}`);break}}catch(e){let n=e instanceof Error?e.message:String(e);f(n),u(!1),t(`Error: ${n}`)}}n()},[e,a,i,t]),c?(0,q.jsxs)(s,{flexDirection:`column`,gap:1,padding:1,children:[(0,q.jsxs)(l,{color:`text`,children:[`Reconnecting to `,(0,q.jsx)(l,{bold:!0,children:e})]}),(0,q.jsxs)(s,{children:[(0,q.jsx)(x,{}),(0,q.jsx)(l,{children:` Establishing connection to MCP server`})]})]}):d?(0,q.jsxs)(s,{flexDirection:`column`,gap:1,padding:1,children:[(0,q.jsxs)(s,{children:[(0,q.jsxs)(l,{children:[p(`error`,n)(r.cross),` `]}),(0,q.jsxs)(l,{color:`error`,children:[`Failed to reconnect to `,e]})]}),(0,q.jsxs)(l,{dimColor:!0,children:[`Error: `,d]})]}):null}var K,q,J=e((()=>{n(),K=t(f(),1),m(),N(),T(),v(),q=h()}));function Y({onComplete:e}){let t=E(e=>e.mcp),n=E(e=>e.agentDefinitions),r=t.clients,[i,a]=X.useState({type:`list`}),[o,s]=X.useState([]),c=(0,X.useMemo)(()=>_(n.allAgents),[n.allAgents]),l=X.useMemo(()=>r.filter(e=>e.name!==`ide`).sort((e,t)=>e.name.localeCompare(t.name)),[r]);switch(X.useEffect(()=>{let e=!1;async function n(){let n=await Promise.all(l.map(async e=>{let n=e.config.scope,r=e.config.type===`sse`,i=e.config.type===`http`,a=e.config.type===`claudeai-proxy`,o;if(r||i){let n=await new D(e.name,e.config).tokens(),r=se()!==null&&e.type===`connected`,i=e.type===`connected`&&w(t.tools,e.name).length>0;o=!!n||r||i}let s={name:e.name,client:e,scope:n};return a?{...s,transport:`claudeai-proxy`,isAuthenticated:!1,config:e.config}:r?{...s,transport:`sse`,isAuthenticated:o,config:e.config}:i?{...s,transport:`http`,isAuthenticated:o,config:e.config}:{...s,transport:`stdio`,config:e.config}}));e||s(n)}return n(),()=>{e=!0}},[l,t.tools]),(0,X.useEffect)(()=>{o.length===0&&l.length>0||o.length===0&&c.length===0&&e("No MCP servers configured. Please run /doctor if this is unexpected. Otherwise, run `claude mcp --help` or visit https://code.claude.com/docs/en/mcp to learn more.")},[o.length,l.length,c.length,e]),i.type){case`list`:return(0,Z.jsx)(xe,{servers:o,agentServers:c,onSelectServer:e=>a({type:`server-menu`,server:e}),onSelectAgentServer:e=>a({type:`agent-server-menu`,agentServer:e}),onComplete:e,defaultTab:i.defaultTab});case`server-menu`:{let n=w(t.tools,i.server.name),r=i.server.transport===`claudeai-proxy`?`claude.ai`:`Work Mate`;return i.server.transport===`stdio`?(0,Z.jsx)(_e,{server:i.server,serverToolsCount:n.length,onViewTools:()=>a({type:`server-tools`,server:i.server}),onCancel:()=>a({type:`list`,defaultTab:r}),onComplete:e}):(0,Z.jsx)(me,{server:i.server,serverToolsCount:n.length,onViewTools:()=>a({type:`server-tools`,server:i.server}),onCancel:()=>a({type:`list`,defaultTab:r}),onComplete:e})}case`server-tools`:return(0,Z.jsx)(ge,{server:i.server,onSelectTool:(e,t)=>a({type:`server-tool-detail`,server:i.server,toolIndex:t}),onBack:()=>a({type:`server-menu`,server:i.server})});case`server-tool-detail`:{let e=w(t.tools,i.server.name)[i.toolIndex];return e?(0,Z.jsx)(pe,{tool:e,server:i.server,onBack:()=>a({type:`server-tools`,server:i.server})}):(a({type:`server-tools`,server:i.server}),null)}case`agent-server-menu`:return(0,Z.jsx)(ye,{agentServer:i.agentServer,onCancel:()=>a({type:`list`,defaultTab:`Agents`}),onComplete:e})}}var X,Z,Ce=e((()=>{X=t(f(),1),g(),S(),T(),ce(),B(),G(),L(),P(),I(),F(),Z=h()})),we=e((()=>{B(),G(),J(),L(),Ce(),P(),I(),F()}));function Te({action:e,target:t,onComplete:n}){let r=E(e=>e.mcp.clients),i=le(),a=(0,Q.useRef)(!1);return(0,Q.useEffect)(()=>{if(a.current)return;a.current=!0;let o=e===`enable`,s=r.filter(e=>e.name!==`ide`),c=t===`all`?s.filter(e=>o?e.type===`disabled`:e.type!==`disabled`):s.filter(e=>e.name===t);if(c.length===0){n(t===`all`?`All MCP servers are already ${o?`enabled`:`disabled`}`:`MCP server "${t}" not found`);return}for(let e of c)i(e.name);n(t===`all`?`${o?`Enabled`:`Disabled`} ${c.length} MCP server(s)`:`MCP server "${t}" ${o?`enabled`:`disabled`}`)},[e,t,r,i,n]),null}async function Ee(e,t,n){if(n){let t=n.trim().split(/\s+/);if(t[0]===`no-redirect`)return(0,$.jsx)(Y,{onComplete:e});if(t[0]===`reconnect`&&t[1])return(0,$.jsx)(Se,{serverName:t.slice(1).join(` `),onComplete:e});if(t[0]===`enable`||t[0]===`disable`)return(0,$.jsx)(Te,{action:t[0],target:t.length>1?t.slice(1).join(` `):`all`,onComplete:e})}return process.env.USER_TYPE===`ant`?(0,$.jsx)(ve,{onComplete:e,args:`manage`,showMcpRedirectMessage:!0}):(0,$.jsx)(Y,{onComplete:e})}var Q,$;e((()=>{Q=t(f(),1),we(),J(),N(),T(),he(),$=h()}))();export{Ee as call};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{$v as e,Av as t,Cv as n,Dv as r,Ev as i,Fv as a,G as o,Gp as s,Gv as ee,Gw as c,Hv as l,Ia as u,Iv as d,Jv as f,Kv as p,La as m,Lv as h,Mv as te,Nv as g,Ov as ne,Pv as _,Qv as v,Rd as y,Sv as b,Tv as x,Uv as S,Vv as C,W as w,Wp as T,Wv as E,Ww as D,Xu as O,Yu as k,Yv as A,aw as j,ay as M,iw as N,iy as P,jv as F,kv as I,nl as L,ny as R,po as z,qv as B,ry as re,tl as V,ty as H,wv as U,zd as W,zo as G,zv as K}from"./loadAgentsDir-Clu7Uk6a.js";import{S as q,w as J}from"./debug-BrXObCdR.js";import{o as Y,s as X}from"./log-BMCygSzM.js";import{_ as ie,u as ae}from"./model-BQF64tZx.js";import{Cn as oe,Tn as se,wn as Z}from"./prompt-Bg_1U0gO.js";import{a as Q,o as ce}from"./fileStateCache-DDW5toIs.js";import $ from"node:process";re(),F(),I(),H();var le=class{constructor(e){this._server=e}requestStream(e,t,n){return this._server.requestStream(e,t,n)}createMessageStream(e,t){let n=this._server.getClientCapabilities();if((e.tools||e.toolChoice)&&!n?.sampling?.tools)throw Error(`Client does not support sampling tools capability.`);if(e.messages.length>0){let t=e.messages[e.messages.length-1],n=Array.isArray(t.content)?t.content:[t.content],r=n.some(e=>e.type===`tool_result`),i=e.messages.length>1?e.messages[e.messages.length-2]:void 0,a=i?Array.isArray(i.content)?i.content:[i.content]:[],o=a.some(e=>e.type===`tool_use`);if(r){if(n.some(e=>e.type!==`tool_result`))throw Error(`The last message must contain only tool_result content if any is present`);if(!o)throw Error(`tool_result blocks are not matching any tool_use from the previous message`)}if(o){let e=new Set(a.filter(e=>e.type===`tool_use`).map(e=>e.id)),t=new Set(n.filter(e=>e.type===`tool_result`).map(e=>e.toolUseId));if(e.size!==t.size||![...e].every(e=>t.has(e)))throw Error(`ids of tool_result blocks and tool_use blocks from previous message do not match`)}}return this.requestStream({method:`sampling/createMessage`,params:e},a,t)}elicitInputStream(e,t){let n=this._server.getClientCapabilities(),r=e.mode??`form`;switch(r){case`url`:if(!n?.elicitation?.url)throw Error(`Client does not support url elicitation.`);break;case`form`:if(!n?.elicitation?.form)throw Error(`Client does not support form elicitation.`);break}let i=r===`form`&&e.mode===void 0?{...e,mode:`form`}:e;return this.requestStream({method:`elicitation/create`,params:i},K,t)}async getTask(e,t){return this._server.getTask({taskId:e},t)}async getTaskResult(e,t,n){return this._server.getTaskResult({taskId:e},t,n)}async listTasks(e,t){return this._server.listTasks(e?{cursor:e}:void 0,t)}async cancelTask(e,t){return this._server.cancelTask({taskId:e},t)}};H(),r();var ue=class extends t{constructor(t,n){super(n),this._serverInfo=t,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(f.options.map((e,t)=>[e,t])),this.isMessageIgnored=(e,t)=>{let n=this._loggingLevels.get(t);return n?this.LOG_LEVEL_SEVERITY.get(e)<this.LOG_LEVEL_SEVERITY.get(n):!1},this._capabilities=n?.capabilities??{},this._instructions=n?.instructions,this._jsonSchemaValidator=n?.jsonSchemaValidator??new ne,this.setRequestHandler(S,e=>this._oninitialize(e)),this.setNotificationHandler(E,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(e,async(e,t)=>{let n=t.sessionId||t.requestInfo?.headers[`mcp-session-id`]||void 0,{level:r}=e.params,i=f.safeParse(r);return i.success&&this._loggingLevels.set(n,i.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new le(this)}),this._experimental}registerCapabilities(e){if(this.transport)throw Error(`Cannot register capabilities after connecting to transport`);this._capabilities=te(this._capabilities,e)}setRequestHandler(e,t){let n=R(e)?.method;if(!n)throw Error(`Schema is missing a method literal`);let r;if(P(n)){let e=n;r=e._zod?.def?.value??e.value}else{let e=n;r=e._def?.value??e.value}if(typeof r!=`string`)throw Error(`Schema method literal must be a string`);return r===`tools/call`?super.setRequestHandler(e,async(e,n)=>{let r=M(g,e);if(!r.success){let e=r.error instanceof Error?r.error.message:String(r.error);throw new A(l.InvalidParams,`Invalid tools/call request: ${e}`)}let{params:i}=r.data,a=await Promise.resolve(t(e,n));if(i.task){let e=M(h,a);if(!e.success){let t=e.error instanceof Error?e.error.message:String(e.error);throw new A(l.InvalidParams,`Invalid task creation result: ${t}`)}return e.data}let o=M(_,a);if(!o.success){let e=o.error instanceof Error?o.error.message:String(o.error);throw new A(l.InvalidParams,`Invalid tools/call result: ${e}`)}return o.data}):super.setRequestHandler(e,t)}assertCapabilityForMethod(e){switch(e){case`sampling/createMessage`:if(!this._clientCapabilities?.sampling)throw Error(`Client does not support sampling (required for ${e})`);break;case`elicitation/create`:if(!this._clientCapabilities?.elicitation)throw Error(`Client does not support elicitation (required for ${e})`);break;case`roots/list`:if(!this._clientCapabilities?.roots)throw Error(`Client does not support listing roots (required for ${e})`);break;case`ping`:break}}assertNotificationCapability(e){switch(e){case`notifications/message`:if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case`notifications/resources/updated`:case`notifications/resources/list_changed`:if(!this._capabilities.resources)throw Error(`Server does not support notifying about resources (required for ${e})`);break;case`notifications/tools/list_changed`:if(!this._capabilities.tools)throw Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case`notifications/prompts/list_changed`:if(!this._capabilities.prompts)throw Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case`notifications/elicitation/complete`:if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support URL elicitation (required for ${e})`);break;case`notifications/cancelled`:break;case`notifications/progress`:break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case`completion/complete`:if(!this._capabilities.completions)throw Error(`Server does not support completions (required for ${e})`);break;case`logging/setLevel`:if(!this._capabilities.logging)throw Error(`Server does not support logging (required for ${e})`);break;case`prompts/get`:case`prompts/list`:if(!this._capabilities.prompts)throw Error(`Server does not support prompts (required for ${e})`);break;case`resources/list`:case`resources/templates/list`:case`resources/read`:if(!this._capabilities.resources)throw Error(`Server does not support resources (required for ${e})`);break;case`tools/call`:case`tools/list`:if(!this._capabilities.tools)throw Error(`Server does not support tools (required for ${e})`);break;case`tasks/get`:case`tasks/list`:case`tasks/result`:case`tasks/cancel`:if(!this._capabilities.tasks)throw Error(`Server does not support tasks capability (required for ${e})`);break;case`ping`:case`initialize`:break}}assertTaskCapability(e){x(this._clientCapabilities?.tasks?.requests,e,`Client`)}assertTaskHandlerCapability(e){this._capabilities&&i(this._capabilities.tasks?.requests,e,`Server`)}async _oninitialize(e){let t=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:v.includes(t)?t:ee,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:`ping`},C)}async createMessage(e,t){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw Error(`Client does not support sampling tools capability.`);if(e.messages.length>0){let t=e.messages[e.messages.length-1],n=Array.isArray(t.content)?t.content:[t.content],r=n.some(e=>e.type===`tool_result`),i=e.messages.length>1?e.messages[e.messages.length-2]:void 0,a=i?Array.isArray(i.content)?i.content:[i.content]:[],o=a.some(e=>e.type===`tool_use`);if(r){if(n.some(e=>e.type!==`tool_result`))throw Error(`The last message must contain only tool_result content if any is present`);if(!o)throw Error(`tool_result blocks are not matching any tool_use from the previous message`)}if(o){let e=new Set(a.filter(e=>e.type===`tool_use`).map(e=>e.id)),t=new Set(n.filter(e=>e.type===`tool_result`).map(e=>e.toolUseId));if(e.size!==t.size||![...e].every(e=>t.has(e)))throw Error(`ids of tool_result blocks and tool_use blocks from previous message do not match`)}}return e.tools?this.request({method:`sampling/createMessage`,params:e},d,t):this.request({method:`sampling/createMessage`,params:e},a,t)}async elicitInput(e,t){switch(e.mode??`form`){case`url`:{if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support url elicitation.`);let n=e;return this.request({method:`elicitation/create`,params:n},K,t)}case`form`:{if(!this._clientCapabilities?.elicitation?.form)throw Error(`Client does not support form elicitation.`);let n=e.mode===`form`?e:{...e,mode:`form`},r=await this.request({method:`elicitation/create`,params:n},K,t);if(r.action===`accept`&&r.content&&n.requestedSchema)try{let e=this._jsonSchemaValidator.getValidator(n.requestedSchema)(r.content);if(!e.valid)throw new A(l.InvalidParams,`Elicitation response content does not match requested schema: ${e.errorMessage}`)}catch(e){throw e instanceof A?e:new A(l.InternalError,`Error validating elicitation response: ${e instanceof Error?e.message:String(e)}`)}return r}}}createElicitationCompletionNotifier(e,t){if(!this._clientCapabilities?.elicitation?.url)throw Error(`Client does not support URL elicitation (required for notifications/elicitation/complete)`);return()=>this.notification({method:`notifications/elicitation/complete`,params:{elicitationId:e}},t)}async listRoots(e,t){return this.request({method:`roots/list`,params:e},p,t)}async sendLoggingMessage(e,t){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,t))return this.notification({method:`notifications/message`,params:e})}async sendResourceUpdated(e){return this.notification({method:`notifications/resources/updated`,params:e})}async sendResourceListChanged(){return this.notification({method:`notifications/resources/list_changed`})}async sendToolListChanged(){return this.notification({method:`notifications/tools/list_changed`})}async sendPromptListChanged(){return this.notification({method:`notifications/prompts/list_changed`})}};n();var de=class{constructor(e=$.stdin,t=$.stdout){this._stdin=e,this._stdout=t,this._readBuffer=new b,this._started=!1,this._ondata=e=>{this._readBuffer.append(e),this.processReadBuffer()},this._onerror=e=>{this.onerror?.(e)}}async start(){if(this._started)throw Error(`StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.`);this._started=!0,this._stdin.on(`data`,this._ondata),this._stdin.on(`error`,this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off(`data`,this._ondata),this._stdin.off(`error`,this._onerror),this._stdin.listenerCount(`data`)===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(t=>{let n=U(e);this._stdout.write(n)?t():this._stdout.once(`drain`,t)})}};H(),j(),u(),se(),O(),c(),ce(),Y(),G(),ie(),o(),T(),q(),W(),V();var fe=[m];async function pe(e,t,n){let r=Q(100);s(e);let i=new ue({name:`claude/tengu`,version:`0.0.5`},{capabilities:{tools:{}}});i.setRequestHandler(B,async()=>{let e=Z(),t=k(e);return{tools:await Promise.all(t.map(async n=>{let r;if(n.outputSchema){let e=L(n.outputSchema);typeof e==`object`&&e&&`type`in e&&e.type===`object`&&(r=e)}return{...n,description:await n.prompt({getToolPermissionContext:async()=>e,tools:t,agents:[]}),inputSchema:L(n.inputSchema),outputSchema:r}}))}}),i.setRequestHandler(g,async({params:{name:e,arguments:i}})=>{let a=k(Z()),o=oe(a,e);if(!o)throw Error(`Tool ${e} not found`);let s={abortController:D(),options:{commands:fe,tools:a,mainLoopModel:ae(),thinkingConfig:{type:`disabled`},mcpClients:[],mcpResources:{},isNonInteractiveSession:!0,debug:t,verbose:n,agentDefinitions:{activeAgents:[],allAgents:[]}},getAppState:()=>N(),setAppState:()=>{},messages:[],readFileState:r,setInProgressToolUseIDs:()=>{},setResponseLength:()=>{},updateFileHistoryState:()=>{},updateAttributionState:()=>{}};try{if(!o.isEnabled())throw Error(`Tool ${e} is not enabled`);let t=await o.validateInput?.(i??{},s);if(t&&!t.result)throw Error(`Tool ${e} input is invalid: ${`message`in t?t.message:String(t)}`);let n=await o.call(i??{},s,w,z({content:[]}));return{content:[{type:`text`,text:typeof n==`string`?n:J(n.data)}]}}catch(e){return X(e),{isError:!0,content:[{type:`text`,text:(e instanceof Error?y(e):[String(e)]).filter(Boolean).join(`
|
|
2
|
-
`).trim()||`Error`}]}}});async function a(){let e=new de;await i.connect(e)}return await a()}export{pe as startMCPServer};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,o as t}from"./rolldown-runtime-DaDcL9Zw.js";import{n,o as r}from"./envUtils-DSxRz_kt.js";import{I as i,Lt as a,P as o,Wt as s,_ as c,di as l,fi as u,t as d,ui as ee,y as f}from"./src-CDCSSo0U2.js";import{t as p}from"./jsx-runtime-Bb4Xn-E0.js";import{en as m,nt as h}from"./state-ix0xIunV.js";import{IE as g,US as _,Un as v,VE as y,Vn as te,WS as b,au as x,fx as S,hf as ne,mf as C,ou as re,px as ie,zE as w}from"./loadAgentsDir-Clu7Uk6a.js";import{n as T,t as E}from"./cwd-CYmmnQVS.js";import{I as D,z as O}from"./debug-BrXObCdR.js";import{g as k,y as A}from"./settings-Dlp5JTa_.js";import{I as j,P as M,j as ae}from"./config-3m_9zSrj.js";import{_ as N,r as P}from"./git-Do0wJvux.js";import{o as F,s as I}from"./log-BMCygSzM.js";import{f as L,l as oe}from"./file-DcZWPH2V.js";import{n as se,r as R}from"./analytics-BotDBGh0.js";import{b as ce,h as z}from"./startupProfiler-xa3NmN7Z.js";import{u as B}from"./referral-BlrMpBAV.js";import{r as V,t as H}from"./browser-BmZuQom6.js";import{n as U,t as W}from"./useExitOnCtrlCDWithKeybindings-CntByfTQ.js";import{r as le,t as ue}from"./promptEditor-BhYDmwdS.js";import{homedir as de}from"os";import{join as G,relative as fe}from"path";import{mkdir as K,writeFile as pe}from"fs/promises";function me(e){return P(e)!==null}var he=e((()=>{N()}));function ge({onSelect:e,onCancel:t}){let r=(0,q.use)(w()),a=G(n(),`CLAUDE.md`),l=G(h(),`CLAUDE.md`),u=r.some(e=>e.path===a),d=r.some(e=>e.path===l),f=[...r.filter(e=>e.type!==`AutoMem`).map(e=>({...e,exists:!0})),...u?[]:[{path:a,type:`User`,content:``,exists:!1}],...d?[]:[{path:l,type:`Project`,content:``,exists:!1}]],p=new Map,m=f.map(e=>{let t=oe(e.path),n=e.exists?``:` (new)`,r=e.parent?(p.get(e.parent)??0)+1:0;p.set(e.path,r);let i=r>0?` `.repeat(r-1):``,o;o=e.type===`User`&&!e.isNested&&e.path===a?`User memory`:e.type===`Project`&&!e.isNested&&e.path===l?`Project memory`:r>0?`${i}L ${t}${n}`:`${t}`;let s,c=me(h());return s=e.type===`User`&&!e.isNested?`Saved in ~/.claude/CLAUDE.md`:e.type===`Project`&&!e.isNested&&e.path===l?`${c?`Checked in at`:`Saved in`} ./CLAUDE.md`:e.parent?`@-imported`:e.isNested?`dynamically loaded`:``,{label:o,value:e.path,description:s}}),g=[],_=b(e=>e.agentDefinitions);if(j()){g.push({label:`Open auto-memory folder`,value:`${X}${ae()}`,description:``});for(let e of _.activeAgents)if(e.memory){let t=te(e.agentType,e.memory);g.push({label:`Open ${ee.bold(e.agentType)} agent memory`,value:`${X}${t}`,description:`${e.memory} scope`})}}m.push(...g);let v=Y&&m.some(e=>e.value===Y)?Y:m[0]?.value||``,[y,x]=(0,q.useState)(j),[S,C]=(0,q.useState)(re),[T]=(0,q.useState)(j),E=b(e=>Object.values(e.tasks).some(e=>e.type===`dream`&&e.status===`running`)),[D,O]=(0,q.useState)(null);(0,q.useEffect)(()=>{T&&ne().then(O)},[T,E]);let k=E?`running`:D===null?``:D===0?`never`:`last ran ${z(new Date(D))}`,[M,N]=(0,q.useState)(null),P=M!==null,F=+!!T;function I(){let e=!y;A(`userSettings`,{autoMemoryEnabled:e}),x(e),R(`tengu_auto_memory_toggled`,{enabled:e})}function L(){let e=!S;A(`userSettings`,{autoDreamEnabled:e}),C(e),R(`tengu_auto_dream_toggled`,{enabled:e})}return U(),s(`confirm:no`,t,{context:`Confirmation`}),s(`confirm:yes`,()=>{M===0?I():M===1&&L()},{context:`Confirmation`,isActive:P}),s(`select:next`,()=>{N(e=>e!==null&&e<F?e+1:null)},{context:`Select`,isActive:P}),s(`select:previous`,()=>{N(e=>e!==null&&e>0?e-1:e)},{context:`Select`,isActive:P}),(0,J.jsxs)(i,{flexDirection:`column`,width:`100%`,children:[(0,J.jsxs)(i,{flexDirection:`column`,marginBottom:1,children:[(0,J.jsx)(c,{isFocused:M===0,children:(0,J.jsxs)(o,{children:[`Auto-memory: `,y?`on`:`off`]})}),T&&(0,J.jsx)(c,{isFocused:M===1,styled:!1,children:(0,J.jsxs)(o,{color:M===1?`suggestion`:void 0,children:[`Auto-dream: `,S?`on`:`off`,k&&(0,J.jsxs)(o,{dimColor:!0,children:[` · `,k]}),!E&&S&&(0,J.jsx)(o,{dimColor:!0,children:` · /dream to run`})]})})]}),(0,J.jsx)(ie,{defaultFocusValue:v,options:m,isDisabled:P,onChange:t=>{if(t.startsWith(X)){let e=t.slice(15);K(e,{recursive:!0}).catch(()=>{}).then(()=>V(e));return}Y=t,e(t)},onCancel:t,onUpFromFirstItem:()=>N(F)})]})}var q,J,Y,X,_e=e((()=>{l(),u(),q=t(u(),1),m(),W(),d(),B(),M(),se(),x(),C(),_(),v(),H(),y(),r(),L(),ce(),he(),k(),S(),J=p(),X=`__open_folder__`}));function ve(e){let t=de(),n=E(),r=e.startsWith(t)?`~`+e.slice(t.length):null,i=e.startsWith(n)?`./`+fe(n,e):null;return r&&i?r.length<=i.length?r:i:r||i||e}var ye=e((()=>{u(),d(),T(),p()}));function be({onDone:e}){let t=async t=>{try{t.includes(n())&&await K(n(),{recursive:!0});try{await pe(t,``,{encoding:`utf8`,flag:`wx`})}catch(e){if(D(e)!==`EEXIST`)throw e}await ue(t);let r=`default`,i=``;process.env.VISUAL?(r=`$VISUAL`,i=process.env.VISUAL):process.env.EDITOR&&(r=`$EDITOR`,i=process.env.EDITOR);let a=r==="default"?``:`Using ${r}="${i}".`,o=a?`> ${a} To change editor, set $EDITOR or $VISUAL environment variable.`:`> To use a different editor, set the $EDITOR or $VISUAL environment variable.`;e(`Opened memory file at ${ve(t)}\n\n${o}`,{display:`system`})}catch(t){I(t),e(`Error opening memory file: ${t}`)}},r=()=>{e(`Cancelled memory editing`,{display:`system`})};return(0,Q.jsx)(f,{title:`Memory`,onCancel:r,color:`remember`,children:(0,Q.jsxs)(i,{flexDirection:`column`,children:[(0,Q.jsx)(Z.Suspense,{fallback:null,children:(0,Q.jsx)(ge,{onSelect:t,onCancel:r})}),(0,Q.jsx)(i,{marginTop:1,children:(0,Q.jsxs)(o,{dimColor:!0,children:[`Learn more: `,(0,Q.jsx)(a,{url:`https://code.claude.com/docs/en/memory`})]})})]})})}var Z,Q,$;e((()=>{Z=t(u(),1),d(),_e(),ye(),y(),r(),O(),F(),le(),Q=p(),$=async e=>(g(),await w(),(0,Q.jsx)(be,{onDone:e}))}))();export{$ as call};
|