claude-code-best 2.6.6 → 2.6.8
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/README.md +3 -5
- package/dist/chunks/{AddWorkspaceDirectory-Bb6crGWh.js → AddWorkspaceDirectory-YmrkKVv2.js} +1 -1
- package/dist/chunks/{App-CW0Y4ceR.js → App-IAjCdPUn.js} +1 -1
- package/dist/chunks/ApproveApiKey-CAvlRKLr.js +1 -0
- package/dist/chunks/{ApproveApiKey-9rkwQfgT.js → ApproveApiKey-DhsT69v7.js} +1 -1
- package/dist/chunks/{AssistantSessionChooser-XzXZZdiH.js → AssistantSessionChooser-DCUVNGfn.js} +1 -1
- package/dist/chunks/BackgroundTasksDialog-Di_gH2TW.js +2 -0
- package/dist/chunks/{BypassPermissionsModeDialog-DlLWAKw2.js → BypassPermissionsModeDialog-BeZqE75e.js} +1 -1
- package/dist/chunks/{ClaudeInChromeOnboarding-CjGydpBk.js → ClaudeInChromeOnboarding-CZHktpPE.js} +1 -1
- package/dist/chunks/{ClaudeMdExternalIncludesDialog-B04cjDwX.js → ClaudeMdExternalIncludesDialog-Dofr1TYr.js} +1 -1
- package/dist/chunks/ClaudeMdExternalIncludesDialog-DrkzPawC.js +1 -0
- package/dist/chunks/ConsoleOAuthFlow-CtqOQRDT.js +1 -0
- package/dist/chunks/{DesktopHandoff-CFBUqcCf.js → DesktopHandoff-C8_CDNft.js} +1 -1
- package/dist/chunks/{DevChannelsDialog-ByTf41du.js → DevChannelsDialog-DkGWCFpL.js} +1 -1
- package/dist/chunks/{DiffDialog-CY-8kw_Q.js → DiffDialog-93P95op8.js} +2 -2
- package/dist/chunks/Doctor-CheDaF3O.js +1 -0
- package/dist/chunks/Doctor-Zd0UaR5d.js +3 -0
- package/dist/chunks/{ExitFlow-BlON8IgH.js → ExitFlow-4edARxmd.js} +2 -2
- package/dist/chunks/{Feedback-CSeD3k4M.js → Feedback-CZY-BikO.js} +2 -2
- package/dist/chunks/Grove-CbcR0CsI.js +1 -0
- package/dist/chunks/{Grove-Tp_UtIMg.js → Grove-TYf1glGP.js} +1 -1
- package/dist/chunks/{HybridTransport-CAko699F.js → HybridTransport-BNexuwcN.js} +1 -1
- package/dist/chunks/{ITermBackend-5P3WJumD.js → ITermBackend-DuomVpsD.js} +1 -1
- package/dist/chunks/{InvalidConfigDialog-CVcdra9v.js → InvalidConfigDialog-Byury3Zx.js} +1 -1
- package/dist/chunks/{InvalidSettingsDialog-CfLdbmSI.js → InvalidSettingsDialog-B8_0AvWo.js} +1 -1
- package/dist/chunks/{MCPConnectionManager-BK_3uwQj.js → MCPConnectionManager-xL_wQCda.js} +1 -1
- package/dist/chunks/{McpParsingWarnings-BOj-T8F3.js → McpParsingWarnings-C6u4RM2a.js} +1 -1
- package/dist/chunks/MessageSelector-DAyH1noQ.js +3 -0
- package/dist/chunks/Messages-QH8_sB13.js +11 -0
- package/dist/chunks/{Onboarding-C06Mxlf-.js → Onboarding-XWhelEBr.js} +1 -1
- package/dist/chunks/{OverageCreditUpsell-abcPm3PB.js → OverageCreditUpsell-BvPz1jLU.js} +1 -1
- package/dist/chunks/PluginSettings-D1YHfrE1.js +17 -0
- package/dist/chunks/{PromptInputFooterSuggestions-ihnbjU0K.js → PromptInputFooterSuggestions-rqUoa9Ch.js} +1 -1
- package/dist/chunks/{PromptInputHelpMenu-CMm8z7Gk.js → PromptInputHelpMenu-OTViHSR0.js} +1 -1
- package/dist/chunks/QueryEngine-DigBggXq.js +1 -0
- package/dist/chunks/REPL-Cxh0Qnnt.js +1 -0
- package/dist/chunks/{REPL-CBFcgD4r.js → REPL-D2p-vgct.js} +34 -34
- package/dist/chunks/{RemoteCallout-Cy6lH-CZ.js → RemoteCallout-CCIWIrd-.js} +1 -1
- package/dist/chunks/{RemoteSessionManager-C7iGd5Og.js → RemoteSessionManager-Dx81p5dH.js} +2 -2
- package/dist/chunks/ResumeConversation-73r3Zh5P.js +1 -0
- package/dist/chunks/{SSETransport-B5xlXeAN.js → SSETransport-C9hd2v-w.js} +1 -1
- package/dist/chunks/SearchExtraToolsTool-BNpA8JzR.js +1 -0
- package/dist/chunks/SentryErrorBoundary-BFwcMSIK.js +1 -0
- package/dist/chunks/{SentryErrorBoundary-iih9eFpM.js → SentryErrorBoundary-z8tMb-zO.js} +1 -1
- package/dist/chunks/Settings-D9qdaMe5.js +2 -0
- package/dist/chunks/{TeleportProgress-BX-uLwuL.js → TeleportProgress-CPXN7u3Z.js} +1 -1
- package/dist/chunks/{TeleportRepoMismatchDialog-D8oPPTWd.js → TeleportRepoMismatchDialog-CiyXjTxq.js} +1 -1
- package/dist/chunks/{TeleportResumeWrapper-B_CvNDbr.js → TeleportResumeWrapper-Dao8ktHk.js} +1 -1
- package/dist/chunks/{ThemePicker-BG1ykSpX.js → ThemePicker-CFYFNnPp.js} +1 -1
- package/dist/chunks/{TmuxBackend-CnMCWNS4.js → TmuxBackend-B5DBBugq.js} +1 -1
- package/dist/chunks/{TrustDialog-Z_maAYj8.js → TrustDialog-DtIXHMR_.js} +1 -1
- package/dist/chunks/{ValidationErrorsList-C9swVkZ-.js → ValidationErrorsList-BK0wOS55.js} +1 -1
- package/dist/chunks/{WelcomeV2-Au_5ddlT.js → WelcomeV2-BjUbi9vp.js} +1 -1
- package/dist/chunks/{WindowsTerminalBackend-CGxaYH74.js → WindowsTerminalBackend-DFLLlAOp.js} +1 -1
- package/dist/chunks/{add-dir-Cm9u56YX.js → add-dir-JoVgNFOk.js} +1 -1
- package/dist/chunks/{agentDisplay-Bi_bEyEn.js → agentDisplay-B3RjWR-3.js} +1 -1
- package/dist/chunks/{agents-CMF9fLzV.js → agents-BUyLUAIu.js} +7 -7
- package/dist/chunks/{agents-CbjR7hNr.js → agents-UqS5PhD2.js} +1 -1
- package/dist/chunks/{ant-Bu1Gs4WJ.js → ant-Bq1wIvnP.js} +1 -1
- package/dist/chunks/{api-D_t0nHsS.js → api-O4eHGLTY.js} +1 -1
- package/dist/chunks/api-kAjsowcb.js +1 -0
- package/dist/chunks/{assistant-C_pfWe2a.js → assistant-CMIbt3Ir.js} +1 -1
- package/dist/chunks/{assistant-EA-MHNQ-.js → assistant-D5Tg_1ry.js} +1 -1
- package/dist/chunks/assistant-nOCkNa3_.js +1 -0
- package/dist/chunks/auth-CDOk9J9A.js +1 -0
- package/dist/chunks/{auth-D7PZvVPf.js → auth-D3SKo0wT.js} +1 -1
- package/dist/chunks/{autoMode-B8iO05xy.js → autoMode-BIVJlkBM.js} +1 -1
- package/dist/chunks/{autonomy-dQVtSiCJ.js → autonomy-BYi6z9LD.js} +1 -1
- package/dist/chunks/{autonomy-CaLvE5N6.js → autonomy-Mi7Fkq1J.js} +12 -12
- package/dist/chunks/{autonomyPanel-DSswVlCF.js → autonomyPanel-D_GsUMOf.js} +1 -1
- package/dist/chunks/backgroundHousekeeping-BG_UYxFF.js +17 -0
- package/dist/chunks/backgroundHousekeeping-wHy1eAso.js +1 -0
- package/dist/chunks/{branch-C7pM8Sjh.js → branch-BC-K45fw.js} +1 -1
- package/dist/chunks/{bridge-CTYdzSWg.js → bridge-DBteRzgS.js} +2 -2
- package/dist/chunks/{bridgeConfig-Df6uyp3q.js → bridgeConfig-C_GoD1k5.js} +1 -1
- package/dist/chunks/bridgeConfig-V_pmBzSH.js +1 -0
- package/dist/chunks/bridgeEnabled-BxtxHb8R.js +1 -0
- package/dist/chunks/{bridgeEnabled-A-_xJ94c.js → bridgeEnabled-cSK8a7tN.js} +1 -1
- package/dist/chunks/bridgeMain-CMNptMs4.js +1 -0
- package/dist/chunks/bridgeMain-QbfEOTqV.js +68 -0
- package/dist/chunks/{bridgeMessaging-DPVLAIzl.js → bridgeMessaging-CqXQzew4.js} +1 -1
- package/dist/chunks/{btw-CqgjLlFN.js → btw-DBtPlEWc.js} +1 -1
- package/dist/chunks/{buddy-DCGBAqF2.js → buddy-BYwTgNnf.js} +1 -1
- package/dist/chunks/{bypassPermissionsKillswitch-CK0jeZTW.js → bypassPermissionsKillswitch-DkYLp9m0.js} +1 -1
- package/dist/chunks/caches-B-GiT9hm.js +1 -0
- package/dist/chunks/{caches-CdVW8fYV.js → caches-DGW9ovtw.js} +2 -2
- package/dist/chunks/{ccrClient-B_3AmY7K.js → ccrClient-B9pi3b8Y.js} +1 -1
- package/dist/chunks/changeDetector-S1Jti1bW.js +1 -0
- package/dist/chunks/channelNotification-Bx6dpA7I.js +1 -0
- package/dist/chunks/{channelNotification-BbDQdLZC.js → channelNotification-n7Avue-9.js} +1 -1
- package/dist/chunks/{chrome-CGyqsCkL.js → chrome-BwZPfW9Z.js} +1 -1
- package/dist/chunks/clear-BXv0Sq3m.js +1 -0
- package/dist/chunks/client-DNQukPEE.js +1 -0
- package/dist/chunks/color-BsBrog6H.js +1 -0
- package/dist/chunks/commands-BK3ugb0u.js +1 -0
- package/dist/chunks/commitAttribution-CtQYmnw-.js +1 -0
- package/dist/chunks/{commitAttribution-e0kkanVT.js → commitAttribution-q7SEukgl.js} +1 -1
- package/dist/chunks/{compact-Dh9RewNA.js → compact-DiY1w7pT.js} +3 -3
- package/dist/chunks/{companion-DVFacTUw.js → companion-D18UNnC7.js} +1 -1
- package/dist/chunks/{config-CkSmYDJY.js → config-CSHnElBp.js} +1 -1
- package/dist/chunks/{config-DwiVCSrY.js → config-D3QKcEKz.js} +1 -1
- package/dist/chunks/{context-B8VDDHTv.js → context-DnyYrN2X.js} +1 -1
- package/dist/chunks/context-noninteractive-0YpW67KZ.js +1 -0
- package/dist/chunks/{context-noninteractive-IZfWniex.js → context-noninteractive-CFlod2Eg.js} +2 -2
- package/dist/chunks/conversation-CRoOMglD.js +1 -0
- package/dist/chunks/conversation-DCG0fiGV.js +1 -0
- package/dist/chunks/{copy-CIjrYoFa.js → copy-CHGX-YpC.js} +2 -2
- package/dist/chunks/{createSSHSession-ArNlbIZB.js → createSSHSession-Bf-8h3Sw.js} +1 -1
- package/dist/chunks/createSession-BYf27ahD.js +1 -0
- package/dist/chunks/{createSession-CBheIT_G.js → createSession-rRZIkjl3.js} +1 -1
- package/dist/chunks/{cronJitterConfig-DcMGWOa-.js → cronJitterConfig-DmBBJDTf.js} +3 -3
- package/dist/chunks/{crossProjectResume-Z-aR2q-d.js → crossProjectResume-BQxLBpDD.js} +3 -3
- package/dist/chunks/{datadog-BK8eJz8B.js → datadog-Bb65d6yd.js} +1 -1
- package/dist/chunks/datadog-NnzM1Mu3.js +1 -0
- package/dist/chunks/{desktop-B9vWJeRu.js → desktop-DiCA6RUU.js} +1 -1
- package/dist/chunks/{diff-BTV7_Dca.js → diff-BvLQ-t8P.js} +1 -1
- package/dist/chunks/{doctor-Dpbh0aRz.js → doctor-bmTXLycZ.js} +1 -1
- package/dist/chunks/{effort-Czlwa5qF.js → effort-CSTwkB2B.js} +2 -2
- package/dist/chunks/{entry-CdfuWjKu.js → entry-BUwwv2dM.js} +4 -4
- package/dist/chunks/{envLessBridgeConfig-BAFYaZ0E.js → envLessBridgeConfig-DJJKeDBT.js} +1 -1
- package/dist/chunks/envLessBridgeConfig-Dq02Vvx1.js +1 -0
- package/dist/chunks/{exit-DzOm62Dn.js → exit-eirVuF-n.js} +1 -1
- package/dist/chunks/{export-DHOR3z3Z.js → export-CcJD8r8U.js} +1 -1
- package/dist/chunks/{exportRenderer-CiNXeNr9.js → exportRenderer-DtezFcml.js} +1 -1
- package/dist/chunks/{extra-usage-DIYR_3ZR.js → extra-usage-CBcgeIcJ.js} +1 -1
- package/dist/chunks/extra-usage-DhB0NElh.js +1 -0
- package/dist/chunks/{extra-usage-core-C3uM9bOP.js → extra-usage-core-DWM0Q56J.js} +1 -1
- package/dist/chunks/{extra-usage-noninteractive-Ctz9TfY8.js → extra-usage-noninteractive-BvJEi4WX.js} +1 -1
- package/dist/chunks/{extraUsage-CBwIvl73.js → extraUsage-CWde-Mi0.js} +1 -1
- package/dist/chunks/extractMemories-wcRNh_jz.js +1 -0
- package/dist/chunks/{fast-BpBwjbSD.js → fast-DQyJ7c7s.js} +1 -1
- package/dist/chunks/fast-ukzN3wl2.js +1 -0
- package/dist/chunks/{feedback-BkVnsZVx.js → feedback-BzBBKT2y.js} +1 -1
- package/dist/chunks/{firstPartyEventLogger-BCzGkdpd.js → firstPartyEventLogger-BOHIpp-w.js} +1 -1
- package/dist/chunks/{flushGate-CQsnMw8g.js → flushGate-DeCDhkKp.js} +1 -1
- package/dist/chunks/{gates-CxWIWtmd.js → gates-CAVdjC23.js} +1 -1
- package/dist/chunks/gates-CB_pFChT.js +1 -0
- package/dist/chunks/{gemini-BbV8D2SS.js → gemini-CFrOUVS4.js} +1 -1
- package/dist/chunks/{generateRecap-B3j2nUgh.js → generateRecap-Bcp5DiiO.js} +1 -1
- package/dist/chunks/{generateSessionName-aGnXSNgN.js → generateSessionName-DeFGkHct.js} +1 -1
- package/dist/chunks/{githubRepoPathMapping-DCJLSTLl.js → githubRepoPathMapping-B07Wb07_.js} +1 -1
- package/dist/chunks/grok-DtidcVWD.js +1 -0
- package/dist/chunks/{growthbook-prtWhMRg.js → growthbook-gLwBDK-r.js} +1 -1
- package/dist/chunks/{heapdump-Czm-2XiG.js → heapdump-BxQYlnPR.js} +1 -1
- package/dist/chunks/{help-CSAFsN0-.js → help-Bi0sABuv.js} +1 -1
- package/dist/chunks/hooks-BTBhK9sh.js +1 -0
- package/dist/chunks/{hooks-DkbOP-bI.js → hooks-Cc_DxF9N.js} +2 -2
- package/dist/chunks/{hostAdapter-BcdDPVTj.js → hostAdapter-D9_d4gU0.js} +1 -1
- package/dist/chunks/{ide-BXERRFZF.js → ide-3wDIOoZF.js} +2 -2
- package/dist/chunks/inboundAttachments-DBaPmCTv.js +1 -0
- package/dist/chunks/{inboundAttachments-7rXrAtkb.js → inboundAttachments-DPMETKd6.js} +1 -1
- package/dist/chunks/initReplBridge-BWP41EGm.js +1 -0
- package/dist/chunks/{insights-DrvqJgF8.js → insights-w7qM4YyA.js} +5 -5
- package/dist/chunks/{install-BGnxwO00.js → install-N2FgArWv.js} +1 -1
- package/dist/chunks/{install-github-app-CIpBHlr9.js → install-github-app-By39Zi78.js} +2 -2
- package/dist/chunks/{install-slack-app-By4Lh7ww.js → install-slack-app-CVwZphU-.js} +1 -1
- package/dist/chunks/{instrumentation-D9y7Ph_R.js → instrumentation-BkLEupDC.js} +3 -3
- package/dist/chunks/{job-BPVIMW_P.js → job-CgBE27O7.js} +1 -1
- package/dist/chunks/{keybindings-Ce6AHMLI.js → keybindings-DHXJzU3E.js} +2 -2
- package/dist/chunks/{lang-DfDG_fSa.js → lang-DLneRt1b.js} +1 -1
- package/dist/chunks/{language-yGoDFP3X.js → language-BVAzlrRz.js} +1 -1
- package/dist/chunks/language-ZBygqv6V.js +1 -0
- package/dist/chunks/{launchAgentsPlatform-DT01xZM7.js → launchAgentsPlatform-CtfK0qPa.js} +1 -1
- package/dist/chunks/{launchAutofixPr-DrYd7WVf.js → launchAutofixPr-CQBv0rQ0.js} +3 -3
- package/dist/chunks/{launchLocalMemory-Bt3tMYVJ.js → launchLocalMemory-BNE09TKr.js} +2 -2
- package/dist/chunks/{launchLocalVault-jyRHEa_Y.js → launchLocalVault-Dw_NJUnd.js} +3 -3
- package/dist/chunks/{launchMemoryStores-cmXnLAF5.js → launchMemoryStores-CRRB6Z5A.js} +1 -1
- package/dist/chunks/{launchOnboarding-BPTNFftb.js → launchOnboarding-nMAF5iv7.js} +1 -1
- package/dist/chunks/{launchSchedule-141GqGC8.js → launchSchedule-Akq1AmK8.js} +1 -1
- package/dist/chunks/{launchSkillStore-Bz0lok_o.js → launchSkillStore-Zwtasj13.js} +1 -1
- package/dist/chunks/{launchTeleport-BMquJxIq.js → launchTeleport-BzlIYyll.js} +3 -3
- package/dist/chunks/{launchVault-Bsuwqad6.js → launchVault-BevXlxJB.js} +1 -1
- package/dist/chunks/{loadAgentsDir-D7kapZB5.js → loadAgentsDir-DF6FgRn-.js} +810 -791
- package/dist/chunks/loadAgentsDir-OIIKHPq9.js +1 -0
- package/dist/chunks/loadPluginHooks-DBHkyJaj.js +1 -0
- package/dist/chunks/localSearch-DslXIfeC.js +1 -0
- package/dist/chunks/{localSearch-r1_G8kfV.js → localSearch-v4itMlCM.js} +1 -1
- package/dist/chunks/{login-7MvpaOkt.js → login-CKodBzyZ.js} +1 -1
- package/dist/chunks/login-CTIVwgFU.js +1 -0
- package/dist/chunks/{logoV2Utils-DjThKW15.js → logoV2Utils-VebeEs7Y.js} +1 -1
- package/dist/chunks/logout-B3MyP8fk.js +1 -0
- package/dist/chunks/{magicDocs-Dy72LHIj.js → magicDocs-uX5n3NKh.js} +2 -2
- package/dist/chunks/{main-CF6Im-LV.js → main-Cd_i0ZPo.js} +48 -48
- package/dist/chunks/{mappers-CkMESMy7.js → mappers-CPL2ni36.js} +1 -1
- package/dist/chunks/{mcp-BTgHgOhR.js → mcp-Ci_TbB5m.js} +2 -2
- package/dist/chunks/mcp-DeWOD4B4.js +1 -0
- package/dist/chunks/mcp-Dhp1SaId.js +6 -0
- package/dist/chunks/{mcpServer-BueM5fWI.js → mcpServer-CPJo2eKm.js} +1 -1
- package/dist/chunks/{mcpServer-Dqm2PQQx.js → mcpServer-CTuPkyD6.js} +1 -1
- package/dist/chunks/{memory-BNZmqma1.js → memory-enMuKEnU.js} +1 -1
- package/dist/chunks/{model-DOw7wIKQ.js → model-4f3U2YMu.js} +1 -1
- package/dist/chunks/model-BsHyPvD0.js +1 -0
- package/dist/chunks/{onChangeAppState-Cb9_yIuW.js → onChangeAppState-DxTGoS7j.js} +1 -1
- package/dist/chunks/openai-CwG_KpH1.js +10 -0
- package/dist/chunks/openaiShared-Bjrci9n8.js +1 -0
- package/dist/chunks/{overageCreditGrant-BrN7dk3d.js → overageCreditGrant-CCkJVN9k.js} +1 -1
- package/dist/chunks/{passes-vgcY8_l8.js → passes-O0VEQz1a.js} +1 -1
- package/dist/chunks/{paths-1ngPRtu3.js → paths-o5iA-EnQ.js} +6 -6
- package/dist/chunks/permissions-BtYQvivG.js +3 -0
- package/dist/chunks/{pipeTransport-KU8psPDI.js → pipeTransport-BEfqa7Uh.js} +1 -1
- package/dist/chunks/{plan-5NVPuxp6.js → plan-Jw4GjVL0.js} +1 -1
- package/dist/chunks/{plugin-t8jMqdsY.js → plugin-DZq0voFR.js} +1 -1
- package/dist/chunks/{pluginAutoupdate-CAa4KLro.js → pluginAutoupdate-D19vNoOp.js} +1 -1
- package/dist/chunks/{pluginBlocklist-BG2LkLq1.js → pluginBlocklist-DeX8I4dK.js} +1 -1
- package/dist/chunks/{pluginCliCommands-vqAtVibb.js → pluginCliCommands-CMgqxOaT.js} +1 -1
- package/dist/chunks/{pluginFlagging-BFCtv3kY.js → pluginFlagging-DFLE5fkh.js} +1 -1
- package/dist/chunks/{pluginOperations-C9XP-mko.js → pluginOperations-BTz69m3_.js} +2 -2
- package/dist/chunks/{pluginStartupCheck-RRcAbKfx.js → pluginStartupCheck-CWWKwD5F.js} +1 -1
- package/dist/chunks/pluginStartupCheck-Non969kz.js +1 -0
- package/dist/chunks/plugins-BPUnAc0r.js +4 -0
- package/dist/chunks/policyLimits-D6dpS-CU.js +1 -0
- package/dist/chunks/{pollConfig-DTYIJ8lQ.js → pollConfig-DyHumJli.js} +1 -1
- package/dist/chunks/{poor-Dw5dMZpM.js → poor-CHHZIPDW.js} +1 -1
- package/dist/chunks/{poorMode-CsGLI_hm.js → poorMode-7N6J6YN2.js} +1 -1
- package/dist/chunks/poorMode-DX4EXe0o.js +1 -0
- package/dist/chunks/print-QCXJDmz0.js +39 -0
- package/dist/chunks/{privacy-settings-P2r-kg2i.js → privacy-settings-DR0_P3JF.js} +1 -1
- package/dist/chunks/{processBashCommand-a8W8aTRu.js → processBashCommand-CkqKsBSD.js} +1 -1
- package/dist/chunks/processSlashCommand-DIk_hLHW.js +6 -0
- package/dist/chunks/prompt-2ia5b-QO.js +1 -0
- package/dist/chunks/prompt-CNtVpGdl.js +1 -0
- package/dist/chunks/{prompt-BBg3jtfc.js → prompt-DiHksuOs.js} +1 -1
- package/dist/chunks/{promptEditor-CvaugNTt.js → promptEditor-B3S5E5Q7.js} +2 -2
- package/dist/chunks/{protocolHandler-DxBaHlaD.js → protocolHandler-D1XT2l3j.js} +1 -1
- package/dist/chunks/{rate-limit-options-Df_sgE0b.js → rate-limit-options-DHh1ksB5.js} +1 -1
- package/dist/chunks/{rcDebugLog-CPGWJbI4.js → rcDebugLog-BNojB_eB.js} +1 -1
- package/dist/chunks/{referral-BKeCKnOJ.js → referral-BADm5sBf.js} +1 -1
- package/dist/chunks/refresh-D48fjYJ4.js +1 -0
- package/dist/chunks/{registerProtocol-DLuRm0mf.js → registerProtocol-Dzmi6VC4.js} +1 -1
- package/dist/chunks/{registry-DVSgtCq5.js → registry-CEu_N3dS.js} +1 -1
- package/dist/chunks/{release-notes-CZcf8zB7.js → release-notes-Dr61jYDO.js} +1 -1
- package/dist/chunks/{releaseNotes-CvfZb3fZ.js → releaseNotes-5SV7C5aV.js} +2 -2
- package/dist/chunks/{reload-plugins-pSlDLk3b.js → reload-plugins-BxuE-21F.js} +1 -1
- package/dist/chunks/{remote-env-BH89NuwC.js → remote-env-BaQjT5em.js} +1 -1
- package/dist/chunks/{remoteBridgeCore-CrXlWEL1.js → remoteBridgeCore-B8MjcW6f.js} +1 -1
- package/dist/chunks/{remoteControlServer-BSOnq4yY.js → remoteControlServer-BvoNcg9D.js} +2 -2
- package/dist/chunks/{rename-DNGvNQm2.js → rename-B3q0tgmd.js} +1 -1
- package/dist/chunks/{resume-6UL38yL3.js → resume-BSGOqus7.js} +2 -2
- package/dist/chunks/{runtimeObserver-Cp-DN8fP.js → runtimeObserver-Bb6wSUMJ.js} +1 -1
- package/dist/chunks/{runtimeObserver-BhvHeiwD.js → runtimeObserver-BbwUiToa.js} +4 -4
- package/dist/chunks/sandbox-adapter-Cr6f6gjf.js +1 -0
- package/dist/chunks/{sandbox-toggle-D19YbI5G.js → sandbox-toggle-L7YPKXba.js} +1 -1
- package/dist/chunks/searchExtraTools-DRVIhwVJ.js +1 -0
- package/dist/chunks/{sentry-BZmpC-iI.js → sentry-DG3ru8XE.js} +1 -1
- package/dist/chunks/{session-lLpGqp0B.js → session-B5wA2K9M.js} +1 -1
- package/dist/chunks/{sessionDiscovery-BX3fjgzD.js → sessionDiscovery-DijWFNjj.js} +1 -1
- package/dist/chunks/sessionFileAccessHooks-DnbPctQc.js +1 -0
- package/dist/chunks/sessionMemory-BOT9f5f0.js +1 -0
- package/dist/chunks/sessionMemory-CeWjRuFL.js +1 -0
- package/dist/chunks/sessionMemoryUtils-B47JMJa2.js +1 -0
- package/dist/chunks/sessionObserver-BNZflr2e.js +1 -0
- package/dist/chunks/{sessionObserver-CujNIWks.js → sessionObserver-CsDT2GnB.js} +1 -1
- package/dist/chunks/sessionStorage-BUuPrnU0.js +1 -0
- package/dist/chunks/{sessionTitle-QxXslbJY.js → sessionTitle-CxmvZO71.js} +2 -2
- package/dist/chunks/{sessionTracing-DognYcDf.js → sessionTracing-Cy5dAplG.js} +1 -1
- package/dist/chunks/{settingsSync-DEPET5O1.js → settingsSync-54E8xV8N.js} +1 -1
- package/dist/chunks/setup-B5CMpp0c.js +2 -0
- package/dist/chunks/{setup-C6G0lasE.js → setup-GJtdESQj.js} +1 -1
- package/dist/chunks/{setup-BUBUidOg.js → setup-KWELOokh.js} +1 -1
- package/dist/chunks/{shadowedRuleDetection-CQayPrmM.js → shadowedRuleDetection-C4NGjljb.js} +1 -1
- package/dist/chunks/{sideQuestion-B9EE1vTM.js → sideQuestion-DBrzdgkl.js} +1 -1
- package/dist/chunks/{sink-Cugto5We.js → sink-BKc24wdw.js} +1 -1
- package/dist/chunks/sink-DG0SNHP7.js +1 -0
- package/dist/chunks/{sinks-B9A94oIj.js → sinks-BTS1DWM4.js} +2 -2
- package/dist/chunks/sinks-Cbp-8X1S.js +1 -0
- package/dist/chunks/{skill-learning-CroDcatu.js → skill-learning-C5NrosiL.js} +1 -1
- package/dist/chunks/skillChangeDetector-NJrEtU47.js +1 -0
- package/dist/chunks/{skillGapStore-91Mb3xDY.js → skillGapStore-D1rkePoo.js} +2 -2
- package/dist/chunks/{skillGapStore-LKwap3o4.js → skillGapStore-uXpRqLGG.js} +1 -1
- package/dist/chunks/{skillGenerator-B9GM0LHk.js → skillGenerator-Deog7yBO.js} +2 -2
- package/dist/chunks/{skillLearning-DbOOqb6b.js → skillLearning-BHjRTDJw.js} +1 -1
- package/dist/chunks/skillLearning-By7jxHSI.js +1 -0
- package/dist/chunks/{skillPanel-rIIYgnBE.js → skillPanel-Bx63GX9w.js} +3 -3
- package/dist/chunks/{skillSearchPanel-xAL-6uJF.js → skillSearchPanel-CM5EZGkH.js} +4 -4
- package/dist/chunks/{skills-Doe47wxK.js → skills-JvC7Ms0P.js} +1 -1
- package/dist/chunks/{sprites-D11F3i1M.js → sprites-YBiqlYch.js} +1 -1
- package/dist/chunks/{stats-WNUyieG-.js → stats-BJMKNvVK.js} +1 -1
- package/dist/chunks/{status-CjBS9SkF.js → status-DAJ28yxZ.js} +1 -1
- package/dist/chunks/{statusNoticeHelpers-cnI4TiGw.js → statusNoticeHelpers-B7nbsqLz.js} +1 -1
- package/dist/chunks/{tag-Gfb8vTAR.js → tag-B4y7cBqH.js} +2 -2
- package/dist/chunks/{tasks-BwX1rzOD.js → tasks-CSye58Ap.js} +1 -1
- package/dist/chunks/{teamHelpers-DEgaCpta.js → teamHelpers-BFZ4eVwW.js} +1 -1
- package/dist/chunks/teamHelpers-CKBoDEPj.js +1 -0
- package/dist/chunks/teammateModeSnapshot-BfOLEMKn.js +1 -0
- package/dist/chunks/{teammateModeSnapshot-Dyukgtp9.js → teammateModeSnapshot-DXc2vyo2.js} +1 -1
- package/dist/chunks/teleport-NN6zSxxe.js +1 -0
- package/dist/chunks/{templateJobs-DQXuFnkl.js → templateJobs-DAVqqU0g.js} +1 -1
- package/dist/chunks/{terminalSetup-bSbq4LE7.js → terminalSetup-DqL65XR2.js} +1 -1
- package/dist/chunks/{terminalSetup-CTEIn08j.js → terminalSetup-jZKBoPTc.js} +1 -1
- package/dist/chunks/{theme-DazaKPy8.js → theme-DPv2L3ut.js} +1 -1
- package/dist/chunks/thinkback-B0OSwcPG.js +1 -0
- package/dist/chunks/thinkback-play-D_uOESmO.js +1 -0
- package/dist/chunks/thinkback-tcfR5Uod.js +1 -0
- package/dist/chunks/{toolEventObserver-D4h-QqVP.js → toolEventObserver-CtApZXry.js} +1 -1
- package/dist/chunks/{toolEventObserver-Dfvv2trb.js → toolEventObserver-D6ZTtdh_.js} +1 -1
- package/dist/chunks/toolPool-DFpa-yul.js +1 -0
- package/dist/chunks/toolPool-DqemSx_r.js +1 -0
- package/dist/chunks/{trustedDevice-rdvUkS1W.js → trustedDevice-Bxn7WW5C.js} +1 -1
- package/dist/chunks/{trustedDevice-CQ9PK-8m.js → trustedDevice-DsgCQRsJ.js} +1 -1
- package/dist/chunks/{ultrareviewCommand-Zf9hO4wr.js → ultrareviewCommand-BfuSrdXz.js} +2 -2
- package/dist/chunks/undercover-B-R6dhHB.js +1 -0
- package/dist/chunks/{undercover-DLyKv5TE.js → undercover-CM8zTx5g.js} +1 -1
- package/dist/chunks/{updateCCB-7WQRz9lW.js → updateCCB-DTArxdyR.js} +1 -1
- package/dist/chunks/upgrade-CCrHxXrm.js +1 -0
- package/dist/chunks/{upgrade-ByIumMQe.js → upgrade-CEd1Jxw_.js} +1 -1
- package/dist/chunks/{upload-CvOMbA9_.js → upload-DNo3bZLc.js} +1 -1
- package/dist/chunks/{usage-C_d-Z-eb.js → usage-DEwRsc7E.js} +1 -1
- package/dist/chunks/{usage-DE4PSQiF.js → usage-X4-qec8g.js} +1 -1
- package/dist/chunks/{useMainLoopModel-Os8Ao8-x.js → useMainLoopModel-2A9HV1H3.js} +1 -1
- package/dist/chunks/{useManagePlugins-BYBubfHU.js → useManagePlugins-D9MBag8O.js} +1 -1
- package/dist/chunks/{useMergedTools-BJAn2i-F.js → useMergedTools-DCYrP_YE.js} +1 -1
- package/dist/chunks/{useSearchInput-CF77X2OV.js → useSearchInput-CepwLBvi.js} +1 -1
- package/dist/chunks/useSettingsErrors-C8ffWXbY.js +1 -0
- package/dist/chunks/{useVoice-DwzMN0fq.js → useVoice-vHZVaTAN.js} +1 -1
- package/dist/chunks/{util-DD30Y4o8.js → util-B13MVSse.js} +1 -1
- package/dist/chunks/utils-C-vk0zpl.js +1 -0
- package/dist/chunks/validatePlugin-Cf_toBOJ.js +1 -0
- package/dist/chunks/{vim-zc9EiMil.js → vim-6p7eiRPG.js} +1 -1
- package/dist/chunks/{voice-BRhZt4jW.js → voice-Bvc_BxoI.js} +2 -2
- package/dist/chunks/{voiceModeEnabled-168-1Ocs.js → voiceModeEnabled-BPbOh6jd.js} +1 -1
- package/dist/chunks/voiceModeEnabled-JSBux8GA.js +1 -0
- package/dist/chunks/{voiceStreamSTT-B80UegKG.js → voiceStreamSTT-CzCUhap3.js} +1 -1
- package/dist/chunks/voiceStreamSTT-D9ER6Ml3.js +1 -0
- package/dist/chunks/{workerRegistry-s8nnpmUO.js → workerRegistry-DCtC-WN3.js} +1 -1
- package/dist/chunks/worktree-Dv0mPuy_.js +1 -0
- package/dist/chunks/{xml-DTMvLcPg.js → xml-CqxiCY4v.js} +1 -1
- package/dist/cli.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/ApproveApiKey-BhMr2Y5F.js +0 -1
- package/dist/chunks/BackgroundTasksDialog-BL_dfbZP.js +0 -2
- package/dist/chunks/ClaudeMdExternalIncludesDialog-DPki55Xa.js +0 -1
- package/dist/chunks/ConsoleOAuthFlow-D_j1NebK.js +0 -1
- package/dist/chunks/Doctor-2D5Wz58o.js +0 -1
- package/dist/chunks/Doctor-CDez_u_U.js +0 -3
- package/dist/chunks/Grove-Dwu_0zRw.js +0 -1
- package/dist/chunks/MessageSelector-BRkxpO1O.js +0 -3
- package/dist/chunks/Messages-wyMyMP7U.js +0 -11
- package/dist/chunks/PluginSettings-DGpIVGvV.js +0 -17
- package/dist/chunks/QueryEngine-I3Bqzbiz.js +0 -1
- package/dist/chunks/REPL-BxAsVlx3.js +0 -1
- package/dist/chunks/ResumeConversation-AdLtgdVB.js +0 -1
- package/dist/chunks/SearchExtraToolsTool-BJ8Nx_Nu.js +0 -1
- package/dist/chunks/SentryErrorBoundary-Bs7mtkPb.js +0 -1
- package/dist/chunks/Settings-PioHwsvg.js +0 -2
- package/dist/chunks/api-CFNGoLoL.js +0 -1
- package/dist/chunks/assistant-BLd4y2FJ.js +0 -1
- package/dist/chunks/auth-DGfZCD_B.js +0 -1
- package/dist/chunks/backgroundHousekeeping-Ckj8W3RO.js +0 -1
- package/dist/chunks/backgroundHousekeeping-D2_Uopt7.js +0 -17
- package/dist/chunks/bridgeConfig-7c07tJm9.js +0 -1
- package/dist/chunks/bridgeEnabled-Z2S8lk0l.js +0 -1
- package/dist/chunks/bridgeMain-B7FZpvo0.js +0 -68
- package/dist/chunks/bridgeMain-C5UxF8ST.js +0 -1
- package/dist/chunks/caches-Dt52PedI.js +0 -1
- package/dist/chunks/changeDetector-uO9CBvut.js +0 -1
- package/dist/chunks/channelNotification-DzTzUrCe.js +0 -1
- package/dist/chunks/clear-B_cVk64B.js +0 -1
- package/dist/chunks/client-BcqXgcrx.js +0 -1
- package/dist/chunks/color-DEXUx7gE.js +0 -1
- package/dist/chunks/commands-BX0_wEGw.js +0 -1
- package/dist/chunks/commitAttribution-CSVDcgTO.js +0 -1
- package/dist/chunks/context-noninteractive-SBxqQ3iu.js +0 -1
- package/dist/chunks/conversation-CQBl9Yy2.js +0 -1
- package/dist/chunks/conversation-DVZplNag.js +0 -1
- package/dist/chunks/createSession-DfEQy2dZ.js +0 -1
- package/dist/chunks/datadog-Uj6FjEuU.js +0 -1
- package/dist/chunks/envLessBridgeConfig-DOO9eX07.js +0 -1
- package/dist/chunks/extra-usage-CJcyfVCt.js +0 -1
- package/dist/chunks/extractMemories-C3SU-Osb.js +0 -1
- package/dist/chunks/fast-7iinMwk-.js +0 -1
- package/dist/chunks/gates-qgzva-fO.js +0 -1
- package/dist/chunks/grok-C4QFXJnR.js +0 -1
- package/dist/chunks/hooks-Ch2vPE8u.js +0 -1
- package/dist/chunks/inboundAttachments-C0rkLl2x.js +0 -1
- package/dist/chunks/initReplBridge-tXqkba08.js +0 -1
- package/dist/chunks/language-B1yHC1d6.js +0 -1
- package/dist/chunks/loadAgentsDir-DxPE2bIO.js +0 -1
- package/dist/chunks/loadPluginHooks-CL5aGDrb.js +0 -1
- package/dist/chunks/localSearch-iozuZZhZ.js +0 -1
- package/dist/chunks/login-Dxza_KNT.js +0 -1
- package/dist/chunks/logout-BeGQR78E.js +0 -1
- package/dist/chunks/mcp-UJZ22IDJ.js +0 -6
- package/dist/chunks/mcp-fHf8Uc7h.js +0 -1
- package/dist/chunks/model-D3g2QdU-.js +0 -1
- package/dist/chunks/openai-Bvo0Gcec.js +0 -10
- package/dist/chunks/openaiShared-D5lOejS1.js +0 -16
- package/dist/chunks/permissions-BDbIjTT6.js +0 -3
- package/dist/chunks/pluginStartupCheck-DZp0wnXP.js +0 -1
- package/dist/chunks/plugins-0SyID4Kx.js +0 -4
- package/dist/chunks/policyLimits-Cmmzuv-E.js +0 -1
- package/dist/chunks/poorMode-D_hB-rDf.js +0 -1
- package/dist/chunks/print-Ct8N4PYT.js +0 -39
- package/dist/chunks/processSlashCommand-BaUdUg3T.js +0 -6
- package/dist/chunks/prompt-B1Qy8mi4.js +0 -1
- package/dist/chunks/prompt-D4kWWEZC.js +0 -1
- package/dist/chunks/refresh-Cjv4jA6L.js +0 -1
- package/dist/chunks/sandbox-adapter-DGVtPPD0.js +0 -1
- package/dist/chunks/searchExtraTools-DXWkpOIg.js +0 -1
- package/dist/chunks/sessionFileAccessHooks-BeuS4m7a.js +0 -1
- package/dist/chunks/sessionMemory-LMOQk90c.js +0 -1
- package/dist/chunks/sessionMemory-UpILj5ww.js +0 -1
- package/dist/chunks/sessionMemoryUtils-DE7AezA0.js +0 -1
- package/dist/chunks/sessionObserver-HqvTXhs9.js +0 -1
- package/dist/chunks/sessionStorage-BN56DAAd.js +0 -1
- package/dist/chunks/setup-BZMVuIIx.js +0 -2
- package/dist/chunks/sink-BRrEbL6h.js +0 -1
- package/dist/chunks/sinks-CKaSBvU8.js +0 -1
- package/dist/chunks/skillChangeDetector-DnyEQqe6.js +0 -1
- package/dist/chunks/skillLearning-D6latSKi.js +0 -1
- package/dist/chunks/teamHelpers-EJxTXoTV.js +0 -1
- package/dist/chunks/teammateModeSnapshot-BgUQ4Phz.js +0 -1
- package/dist/chunks/teleport-B4p8XlAv.js +0 -1
- package/dist/chunks/thinkback-BOfZP_QG.js +0 -1
- package/dist/chunks/thinkback-CxWZV2Oz.js +0 -1
- package/dist/chunks/thinkback-play-CHe1x2Hc.js +0 -1
- package/dist/chunks/toolPool-BHChMuLr.js +0 -1
- package/dist/chunks/toolPool-C5K43w4_.js +0 -1
- package/dist/chunks/undercover-DNS9V_JT.js +0 -1
- package/dist/chunks/upgrade-bK4x32Ma.js +0 -1
- package/dist/chunks/useSettingsErrors-DD7fQ-fU.js +0 -1
- package/dist/chunks/utils-D44M8obg.js +0 -1
- package/dist/chunks/validatePlugin-DpHiJRsT.js +0 -1
- package/dist/chunks/voiceModeEnabled-CTT25yFj.js +0 -1
- package/dist/chunks/voiceStreamSTT-BpYhKo2H.js +0 -1
- package/dist/chunks/worktree-CkB4jLXK.js +0 -1
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import{d as e,s as t,u as n}from"./envUtils-BWeoiL4Y.js";import{Cn as r,In as i,Ln as a,t as o}from"./src-Di342QoJ.js";import{Gs as s,M as c,S as l,Us as u,Ws as d,l as f,z as p}from"./paths-1ngPRtu3.js";import{E as m,L as h,T as g,V as _,d as v,s as y,w as b}from"./debug-UI3T040K.js";import{i as x,n as S,r as C}from"./analytics-DqMQntaB.js";import{F as w,P as T}from"./git-CN3qtTb_.js";import{o as E,s as D}from"./log-CzsijfHZ.js";import{E as O,d as k,x as A}from"./startupProfiler-DnXZaX4A.js";import{n as j,t as M}from"./sleep-8Eb9j_Ly.js";import{Aa as N,Da as P,Ma as F,Oa as ee,cE as te,cb as I,db as L,fb as R,gt as z,ib as B,ja as V,ka as H,kt as ne,lb as U,ob as W,pb as G,sE as re,sb as K,wt as q}from"./loadAgentsDir-D7kapZB5.js";import{n as ie,t as J}from"./rcDebugLog-CPGWJbI4.js";import{c as Y,d as ae,f as oe,n as se,o as ce,r as le}from"./debugUtils-BBMFODKH.js";import{r as ue,t as de}from"./datadog-BK8eJz8B.js";import{a as X,i as fe}from"./trustedDevice-rdvUkS1W.js";import{a as Z,t as pe}from"./types-RJTEOuIt.js";import{t as Q}from"./lib-B4Q0Nrpb.js";import{i as me,n as he,r as ge}from"./cliLaunch-BQa48gsr.js";import{t as _e}from"./capacityWake-BXlUpptF.js";import{t as $}from"./jwtUtils-CpXwh_du.js";import{t as ve}from"./pollConfig-DTYIJ8lQ.js";import{a as ye,i as be,n as xe,r as Se,t as Ce}from"./workSecret-mS2OrpxF.js";import{hostname as we,tmpdir as Te}from"os";import{basename as Ee,dirname as De,join as Oe,resolve as ke}from"path";import{createWriteStream as Ae}from"fs";import{randomUUID as je}from"crypto";import{spawn as Me}from"child_process";import{createInterface as Ne}from"readline";t(),S(),_(),b(),T(),E(),A(),M(),c(),l(),te(),de(),ce(),J(),Z(),H(),q(),me(),a();var Pe=Q();s(),o(),y(),L();var Fe={type:`utf8`,errorCorrectionLevel:`L`,small:!0};async function Ie(e){return(await(0,Pe.toString)(e,Fe)).split(`
|
|
2
|
-
`).filter(e=>e.length>0)}function Le(e){let t=e.write??(e=>process.stdout.write(e)),n=e.verbose,a=0,o=`idle`,s=`Ready`,c=``,l=``,f=``,p=``,m=``,h=``,g=null,_=[],y=!1,b=null,x=0,S=0,C=1,w=null,T=`single-session`,E=new Map,D=null,A=0;function j(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 M(e){t(e),a+=j(e)}function N(){a<=0||(v(`[bridge:ui] clearStatusLines count=${a}`),t(`\x1b[${a}A`),t(`\x1B[J`),a=0)}function P(e){N(),t(e)}function F(e){Ie(e).then(e=>{_=e,z()}).catch(e=>{v(`QR code generation failed: ${e}`,{level:`error`})})}function ee(){N();let e=d[A%d.length],t=``;c&&(t+=i.dim(` · `)+i.dim(c)),l&&(t+=i.dim(` · `)+i.dim(l)),M(`${i.yellow(e)} ${i.yellow(`Connecting`)}${t}\n`)}function te(){L(),ee(),D=setInterval(()=>{A++,ee()},150)}function L(){D&&(clearInterval(D),D=null)}function z(){if(o===`reconnecting`||o===`failed`)return;N();let e=o===`idle`;if(y)for(let e of _)M(`${i.dim(e)}\n`);let t=u,n=e?i.green:i.cyan,r=(e?i.green:i.cyan)(s),a=``;if(c&&(a+=i.dim(` · `)+i.dim(c)),l&&T!==`worktree`&&(a+=i.dim(` · `)+i.dim(l)),process.env.USER_TYPE===`ant`&&f&&M(`${i.yellow(`[ANT-ONLY] Logs:`)} ${i.dim(f)}\n`),M(`${n(t)} ${r}${a}\n`),C>1){let e=T===`worktree`?`New sessions will be created in an isolated worktree`:`New sessions will be created in the current directory`;M(` ${i.dim(`Capacity: ${S}/${C} \u00b7 ${e}`)}\n`);for(let[,e]of E){let t=G(e.title?O(e.title,35):i.dim(`Attached`),e.url),n=e.activity;M(` ${t}${n&&n.type!==`result`&&n.type!==`error`?i.dim(` ${O(n.summary,40)}`):``}
|
|
5
|
-
`)}}if(C===1){let e=T===`single-session`?`Single session · exits when complete`:T===`worktree`?`Capacity: ${S}/1 \u00b7 New sessions will be created in an isolated worktree`:`Capacity: ${S}/1 \u00b7 New sessions will be created in the current directory`;M(` ${i.dim(e)}\n`)}C===1&&!e&&b&&Date.now()-x<3e4&&M(` ${i.dim(O(b,60))}\n`);let d=g??p;if(d){M(`
|
|
6
|
-
`);let t=e?U(d):W(d),n=y?i.dim.italic(`space to hide QR code`):i.dim.italic(`space to show QR code`),r=w?i.dim.italic(` · w to toggle spawn mode`):``;M(`${i.dim(t)}\n`),M(`${n}${r}\n`)}}return{printBanner(e,r){m=e.sessionIngressUrl,h=r,p=K(r,m),F(p),n&&t(i.dim(`Remote Control`)+` v2.6.6
|
|
7
|
-
`),n&&(e.spawnMode!==`single-session`&&(t(i.dim(`Spawn mode: `)+`${e.spawnMode}\n`),t(i.dim(`Max concurrent sessions: `)+`${e.maxSessions}\n`)),t(i.dim(`Environment ID: `)+`${r}\n`)),e.sandbox&&t(i.dim(`Sandbox: `)+`${i.green(`Enabled`)}\n`),t(`
|
|
8
|
-
`),te()},logSessionStart(e,t){if(n){let n=O(t,80);P(i.dim(`[${R()}]`)+` Session started: ${i.white(`"${n}"`)} (${i.dim(e)})\n`)}},logSessionComplete(e,t){P(i.dim(`[${R()}]`)+` Session ${i.green(`completed`)} (${k(t)}) ${i.dim(e)}\n`)},logSessionFailed(e,t){P(i.dim(`[${R()}]`)+` Session ${i.red(`failed`)}: ${t} ${i.dim(e)}\n`)},logStatus(e){P(i.dim(`[${R()}]`)+` ${e}\n`)},logVerbose(e){n&&P(i.dim(`[${R()}] ${e}`)+`
|
|
9
|
-
`)},logError(e){P(i.red(`[${R()}] Error: ${e}`)+`
|
|
10
|
-
`)},logReconnected(e){P(i.dim(`[${R()}]`)+` ${i.green(`Reconnected`)} after ${k(e)}\n`)},setRepoInfo(e,t){c=e,l=t},setDebugLogPath(e){f=e},updateIdleStatus(){L(),o=`idle`,s=`Ready`,b=null,x=0,g=null,F(p),z()},setAttached(e){L(),o=`attached`,s=`Connected`,b=null,x=0,C<=1&&(g=I(e,h,m),F(g)),z()},updateReconnectingStatus(e,t){if(L(),N(),o=`reconnecting`,y)for(let e of _)M(`${i.dim(e)}\n`);let n=d[A%d.length];A++,M(`${i.yellow(n)} ${i.yellow(`Reconnecting`)} ${i.dim(`·`)} ${i.dim(`retrying in ${e}`)} ${i.dim(`·`)} ${i.dim(`disconnected ${t}`)}\n`)},updateFailedStatus(e){L(),N(),o=`failed`;let t=``;c&&(t+=i.dim(` · `)+i.dim(c)),l&&(t+=i.dim(` · `)+i.dim(l)),M(`${i.red(`×`)} ${i.red(`Remote Control Failed`)}${t}\n`),M(`${i.dim(B)}\n`),e&&M(`${i.red(e)}\n`)},updateSessionStatus(e,t,n,r){n.type===`tool_start`&&(b=n.summary,x=Date.now()),z()},clearStatus(){L(),N()},toggleQr(){y=!y,z()},updateSessionCount(e,t,n){S===e&&C===t&&T===n||(S=e,C=t,T=n)},setSpawnModeDisplay(e){w!==e&&(w=e,e&&(T=e))},addSession(e,t){E.set(e,{url:t})},updateSessionActivity(e,t){let n=E.get(e);n&&(n.activity=t)},setSessionTitle(e,t){let n=E.get(e);n&&(n.title=t,!(o===`reconnecting`||o===`failed`)&&(C===1&&(o=`titled`,s=O(t,40)),z()))},removeSession(e){E.delete(e)},refreshDisplay(){o===`reconnecting`||o===`failed`||z()}}}Y();var Re=10,ze=10;function Be(e){return e.replace(/[^a-zA-Z0-9_-]/g,`_`)}var Ve={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 He(e,t){let n=Ve[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 Ue(e,t,n){let r;try{r=g(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=He(e,i);a.push({type:`tool_start`,summary:s,timestamp:o}),n(`[bridge:activity] sessionId=${t} tool_use name=${e} ${Ge(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 We(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 Ge(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 Ke(e){return{spawn(t,n){let r=Be(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=Oe(Te(),`claude`,`bridge-session-${r}.log`));let a=null,o;e.debugFile&&(o=Oe(De(e.debugFile),`bridge-transcript-${r}.jsonl`),a=Ae(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=Me(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,h=!1;l.stderr&&Ne({input:l.stderr}).on(`line`,t=>{e.verbose&&process.stderr.write(t+`
|
|
11
|
-
`),f.length>=ze&&f.shift(),f.push(t)}),l.stdout&&Ne({input:l.stdout}).on(`line`,n=>{a&&a.write(n+`
|
|
12
|
-
`),e.onDebug(`[bridge:ws] sessionId=${t.sessionId} <<< ${se(n)}`),e.verbose&&process.stderr.write(n+`
|
|
13
|
-
`);let r=Ue(n,t.sessionId,e.onDebug);for(let n of r)u.length>=Re&&u.shift(),u.push(n),d=n,e.onActivity?.(t.sessionId,n);{let r;try{r=g(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`&&!h&&t.onFirstUserMessage){let e=We(n);e&&(h=!0,t.onFirstUserMessage(e))}}}});let _=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`)})}),v={sessionId:t.sessionId,done:_,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} >>> ${se(n)}`),l.stdin.write(n))},updateAccessToken(n){v.accessToken=n,v.writeStdin(m({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 v}}}y(),L(),ce(),X();var qe={connInitialMs:2e3,connCapMs:12e4,connGiveUpMs:6e5,generalInitialMs:500,generalCapMs:3e4,generalGiveUpMs:6e5},Je=1e3,Ye=32;async function Xe(){return f(`tengu_ccr_bridge_multi_session`)}function Ze(e){return e.connCapMs*2}function Qe(){let e=[...he()],t=ge();return t&&e.push(t),e}function $e(e,t,n){try{return e.spawn(t,n)}catch(e){let t=h(e);return D(Error(`Session spawn failed: ${t}`)),t}}async function et(t,r,i,a,o,s,c,l=qe,u,d){let f=new AbortController;c.aborted?f.abort():c.addEventListener(`abort`,()=>f.abort(),{once:!0});let p=f.signal,m=new Map,g=new Map,_=new Map,y=new Map,b=new Map,x=new Map,S=new Set,T=new Map,E=new Set,O=new Set,A=_e(p);async function M(){ie(`heartbeat: checking ${m.size} active session(s)`);let e=!1,t=!1,n=[];for(let[i]of m){let o=_.get(i),s=b.get(i);if(!(!o||!s))try{await a.heartbeatWork(r,o,s),e=!0}catch(e){v(`[bridge:heartbeat] Failed for sessionId=${i} workId=${o}: ${h(e)}`),e instanceof P&&(C(`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){s.logVerbose(`Session ${e} token expired — re-queuing via bridge/reconnect`);try{await a.reconnectSession(r,e),v(`[bridge:heartbeat] Re-queued sessionId=${e} via bridge/reconnect`)}catch(t){s.logError(`Failed to refresh session ${e} token: ${h(t)}`),v(`[bridge:heartbeat] reconnectSession(${e}) failed: ${h(t)}`,{level:`error`})}}return t?`fatal`:n.length>0?`auth_failed`:e?`ok`:`failed`}let ee=new Set,te=d?$({getAccessToken:d,onRefresh:(e,t)=>{let n=m.get(e);n&&(ee.has(e)?(s.logVerbose(`Refreshing session ${e} token via bridge/reconnect`),a.reconnectSession(r,e).catch(t=>{s.logError(`Failed to refresh session ${e} token: ${h(t)}`),v(`[bridge:token] reconnectSession(${e}) failed: ${h(t)}`,{level:`error`})})):n.updateAccessToken(t))},label:`bridge`}):null,I=Date.now(),L=new Set;function R(e){L.add(e),e.finally(()=>L.delete(e))}let B=0,H=0,U=null,W=null,G=null,K=null,q=!1;if(v(`[bridge:work] Starting poll loop spawnMode=${t.spawnMode} maxSessions=${t.maxSessions} environmentId=${r}`),w(`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=Oe(Te(),`claude`,`bridge-session-*.log`);s.setDebugLogPath(e)}s.printBanner(t,r),s.updateSessionCount(0,t.maxSessions,t.spawnMode),u&&s.setAttached(u);function J(){s.updateSessionCount(m.size,t.maxSessions,t.spawnMode);for(let[e,t]of m){let n=t.currentActivity;n&&s.updateSessionActivity(y.get(e)??e,n)}if(m.size===0){s.updateIdleStatus();return}let[e,n]=[...m.entries()].pop(),r=g.get(e);if(!r)return;let i=n.currentActivity;if(!i||i.type===`result`||i.type===`error`){t.maxSessions>1&&s.refreshDisplay();return}let a=k(Date.now()-r),o=n.activities.filter(e=>e.type===`tool_start`).slice(-5).map(e=>e.summary);s.updateSessionStatus(e,a,i,o)}function Y(){oe(),J(),K=setInterval(J,Je)}function oe(){K&&(clearInterval(K),K=null)}function se(e,n,i){return o=>{let c=_.get(e);ie(`session done: sessionId=${e} workId=${c??`none`} status=${o} wasTimedOut=${E.has(e)} duration=${Math.round((Date.now()-n)/1e3)}s stderr=${i.lastStderr.length>0?i.lastStderr.join(`\\n`).slice(0,500):`(none)`}`),m.delete(e),g.delete(e),_.delete(e),b.delete(e);let u=y.get(e)??e;y.delete(e),s.removeSession(u),O.delete(u),ee.delete(e);let d=x.get(e);d&&(clearTimeout(d),x.delete(e)),te?.cancel(e),A.wake();let j=E.delete(e),M=j&&o===`interrupted`?`failed`:o,N=Date.now()-n;v(`[bridge:session] sessionId=${e} workId=${c??`unknown`} exited status=${M} duration=${k(N)}`),C(`tengu_bridge_session_done`,{status:M,duration_ms:N}),w(`info`,`bridge_session_done`,{status:M,duration_ms:N}),s.clearStatus(),oe();let P=i.lastStderr.length>0?i.lastStderr.join(`
|
|
15
|
-
`):void 0,F;switch(M){case`completed`:s.logSessionComplete(e,N);break;case`failed`:!j&&!p.aborted&&(F=P??`Process exited with error`,s.logSessionFailed(e,F),D(Error(`Bridge session failed: ${F}`)));break;case`interrupted`:s.logVerbose(`Session ${e} interrupted`);break}M!==`interrupted`&&c&&(R(ot(a,r,c,s,l.stopWorkBaseDelayMs)),S.add(c));let I=T.get(e);if(I&&(T.delete(e),R(ne(I.worktreePath,I.worktreeBranch,I.gitRoot,I.hookBased).catch(e=>s.logVerbose(`Failed to remove worktree ${I.worktreePath}: ${h(e)}`)))),M!==`interrupted`&&!p.aborted)if(t.spawnMode!==`single-session`)R(a.archiveSession(u).catch(t=>s.logVerbose(`Failed to archive session ${e}: ${h(t)}`))),v(`[bridge:session] Session ${M}, returning to idle (multi-session mode)`);else{v(`[bridge:session] Session ${M}, aborting poll loop to tear down environment`),f.abort();return}p.aborted||Y()}}for(u||Y();!p.aborted;){let c=ve();try{ie(`poll: envId=${r} activeSessions=${m.size}`);let d=await a.pollForWork(r,i,p,c.reclaim_older_than_ms);if(U!==null||W!==null){let e=Date.now()-(U??W??Date.now());s.logReconnected(e),v(`[bridge:poll] Reconnected after ${k(e)}`),C(`tengu_bridge_reconnected`,{disconnected_ms:e})}if(B=0,H=0,U=null,W=null,G=null,!d){if(m.size>=t.maxSessions){let e=c.multisession_poll_interval_ms_at_capacity;if(c.non_exclusive_heartbeat_interval_ms>0){C(`tengu_bridge_heartbeat_mode_entered`,{active_sessions:m.size,heartbeat_interval_ms:c.non_exclusive_heartbeat_interval_ms});let n=e>0?Date.now()+e:null,r=`ok`,i=0;for(;!p.aborted&&m.size>=t.maxSessions&&(n===null||Date.now()<n);){let e=ve();if(e.non_exclusive_heartbeat_interval_ms<=0)break;let t=A.signal();if(r=await M(),r===`auth_failed`||r===`fatal`){t.cleanup();break}i++,await j(e.non_exclusive_heartbeat_interval_ms,t.signal),t.cleanup()}let a=r===`auth_failed`||r===`fatal`?r:p.aborted?`shutdown`:m.size<t.maxSessions?`capacity_changed`:n!==null&&Date.now()>=n?`poll_due`:`config_disabled`;if(C(`tengu_bridge_heartbeat_mode_exited`,{reason:a,heartbeat_cycles:i,active_sessions:m.size}),a===`poll_due`&&v(`[bridge:poll] Heartbeat poll_due after ${i} cycles — falling through to pollForWork`),r===`auth_failed`||r===`fatal`){let t=A.signal();await j(e>0?e:c.non_exclusive_heartbeat_interval_ms,t.signal),t.cleanup()}}else if(e>0){let t=A.signal();await j(e,t.signal),t.cleanup()}}else await j(m.size>0?c.multisession_poll_interval_ms_partial_capacity:c.multisession_poll_interval_ms_not_at_capacity,p);continue}let f=m.size>=t.maxSessions;if(S.has(d.id)){if(v(`[bridge:work] Skipping already-completed workId=${d.id}`),f){let e=A.signal();c.non_exclusive_heartbeat_interval_ms>0?(await M(),await j(c.non_exclusive_heartbeat_interval_ms,e.signal)):c.multisession_poll_interval_ms_at_capacity>0&&await j(c.multisession_poll_interval_ms_at_capacity,e.signal),e.cleanup()}else await j(1e3,p);continue}let N;try{N=Se(d.secret)}catch(e){let t=h(e);if(s.logError(`Failed to decode work secret for workId=${d.id}: ${t}`),C(`tengu_bridge_work_secret_failed`,{}),S.add(d.id),R(ot(a,r,d.id,s,l.stopWorkBaseDelayMs)),f){let e=A.signal();c.non_exclusive_heartbeat_interval_ms>0?(await M(),await j(c.non_exclusive_heartbeat_interval_ms,e.signal)):c.multisession_poll_interval_ms_at_capacity>0&&await j(c.multisession_poll_interval_ms_at_capacity,e.signal),e.cleanup()}continue}let P=async()=>{v(`[bridge:work] Acknowledging workId=${d.id}`);try{await a.acknowledgeWork(r,d.id,N.session_ingress_token)}catch(e){v(`[bridge:work] Acknowledge failed workId=${d.id}: ${h(e)}`)}},I=d.data.type;switch(d.data.type){case`healthcheck`:await P(),v(`[bridge:work] Healthcheck received`),s.logVerbose(`Healthcheck received`);break;case`session`:{let i=d.data.id;ie(`work received: type=session sessionId=${i} workId=${d.id}`);try{F(i,`session_id`)}catch{await P(),s.logError(`Invalid session_id received: ${i}`);break}let c=m.get(i);if(c){c.updateAccessToken(N.session_ingress_token),b.set(i,N.session_ingress_token),_.set(i,d.id),te?.schedule(i,N.session_ingress_token),v(`[bridge:work] Updated access token for existing sessionId=${i} workId=${d.id}`),await P();break}if(m.size>=t.maxSessions){v(`[bridge:work] At capacity (${m.size}/${t.maxSessions}), cannot spawn new session for workId=${d.id}`);break}await P();let f=Date.now(),k,A=!1,M;if(N.use_code_sessions===!0||n(process.env.CLAUDE_BRIDGE_USE_CCR_V2)){k=Ce(t.apiBaseUrl,i);for(let e=1;e<=2;e++)try{M=await be(k,N.session_ingress_token),A=!0,v(`[bridge:session] CCR v2: registered worker sessionId=${i} epoch=${M} attempt=${e}`);break}catch(t){let n=h(t);if(e<2){if(v(`[bridge:session] CCR v2: registerWorker attempt ${e} failed, retrying: ${n}`),await j(2e3,p),p.aborted)break;continue}s.logError(`CCR v2 worker registration failed for session ${i}: ${n}`),D(Error(`registerWorker failed: ${n}`)),S.add(d.id),R(ot(a,r,d.id,s,l.stopWorkBaseDelayMs))}if(!A)break}else k=xe(t.sessionIngressUrl,i);let I=t.spawnMode,L=t.dir,B=0;if(I===`worktree`&&(u===void 0||!ye(i,u))){let e=Date.now();try{let t=await z(`bridge-${Be(i)}`);B=Date.now()-e,T.set(i,{worktreePath:t.worktreePath,worktreeBranch:t.worktreeBranch,gitRoot:t.gitRoot,hookBased:t.hookBased}),L=t.worktreePath,v(`[bridge:session] Created worktree for sessionId=${i} at ${t.worktreePath}`)}catch(e){let t=h(e);s.logError(`Failed to create worktree for session ${i}: ${t}`),D(Error(`Worktree creation failed: ${t}`)),S.add(d.id),R(ot(a,r,d.id,s,l.stopWorkBaseDelayMs));break}}v(`[bridge:session] Spawning sessionId=${i} sdkUrl=${k}`);let V=ae(i);ie(`spawning session: sessionId=${i} sdkUrl=${k} useCcrV2=${A} workerEpoch=${M} dir=${L} accessToken=${N.session_ingress_token?N.session_ingress_token.slice(0,8)+`...`:`NONE`}`);let H=$e(o,{sessionId:i,sdkUrl:k,accessToken:N.session_ingress_token,useCcrV2:A,workerEpoch:M,onFirstUserMessage:e=>{if(O.has(V))return;O.add(V);let n=mt(e);s.setSessionTitle(V,n),v(`[bridge:title] derived title for ${V}: ${n}`),import(`./createSession-DfEQy2dZ.js`).then(({updateBridgeSessionTitle:e})=>e(V,n,{baseUrl:t.apiBaseUrl})).catch(e=>v(`[bridge:title] failed to update title for ${V}: ${e}`,{level:`error`}))}},L);if(typeof H==`string`){s.logError(`Failed to spawn session ${i}: ${H}`);let e=T.get(i);e&&(T.delete(i),R(ne(e.worktreePath,e.worktreeBranch,e.gitRoot,e.hookBased).catch(t=>s.logVerbose(`Failed to remove worktree ${e.worktreePath}: ${h(t)}`)))),S.add(d.id),R(ot(a,r,d.id,s,l.stopWorkBaseDelayMs));break}let U=H,W=Date.now()-f;C(`tengu_bridge_session_started`,{active_sessions:m.size,spawn_mode:I,in_worktree:T.has(i),spawn_duration_ms:W,worktree_create_ms:B,inProtectedNamespace:e()}),w(`info`,`bridge_session_started`,{spawn_mode:I,in_worktree:T.has(i),spawn_duration_ms:W,worktree_create_ms:B}),m.set(i,U),_.set(i,d.id),b.set(i,N.session_ingress_token),y.set(i,V);let G=Date.now();g.set(i,G),s.logSessionStart(i,`Session ${i}`);let K=Be(i),q;if(t.debugFile){let e=t.debugFile.lastIndexOf(`.`);q=e>0?`${t.debugFile.slice(0,e)}-${K}${t.debugFile.slice(e)}`:`${t.debugFile}-${K}`}else (t.verbose||process.env.USER_TYPE===`ant`)&&(q=Oe(Te(),`claude`,`bridge-session-${K}.log`));q&&s.logVerbose(`Debug log: ${q}`),s.addSession(V,re(V,t.sessionIngressUrl)),Y(),s.setAttached(V),ht(V,t.apiBaseUrl).then(e=>{e&&m.has(i)&&(O.add(V),s.setSessionTitle(V,e),v(`[bridge:title] server title for ${V}: ${e}`))}).catch(e=>v(`[bridge:title] failed to fetch title for ${V}: ${e}`,{level:`error`}));let J=t.sessionTimeoutMs??864e5;if(J>0){let e=setTimeout(st,J,i,J,s,E,U);x.set(i,e)}A&&ee.add(i),te?.schedule(i,N.session_ingress_token),U.done.then(se(i,G,U));break}default:await P(),v(`[bridge:work] Unknown work type: ${I}, skipping`);break}if(f){let e=A.signal();c.non_exclusive_heartbeat_interval_ms>0?(await M(),await j(c.non_exclusive_heartbeat_interval_ms,e.signal)):c.multisession_poll_interval_ms_at_capacity>0&&await j(c.multisession_poll_interval_ms_at_capacity,e.signal),e.cleanup()}}catch(e){if(p.aborted)break;if(e instanceof P){q=!0,N(e.errorType)?s.logStatus(e.message):V(e)?v(`[bridge:work] Suppressed 403 error: ${e.message}`):(s.logError(e.message),D(e)),C(`tengu_bridge_fatal_error`,{status:e.status,error_type:e.errorType}),w(N(e.errorType)?`info`:`error`,`bridge_fatal_error`,{status:e.status,error_type:e.errorType});break}let t=le(e);if(ie(`poll error: ${t} isConn=${nt(e)} isServer=${rt(e)} activeSessions=${m.size}`),nt(e)||rt(e)){let e=Date.now();G!==null&&e-G>Ze(l)&&(v(`[bridge:work] Detected system sleep (${Math.round((e-G)/1e3)}s gap), resetting error budget`),w(`info`,`bridge_poll_sleep_detected`,{gapMs:e-G}),U=null,B=0,W=null,H=0),G=e,U||(U=e);let n=e-U;if(n>=l.connGiveUpMs){s.logError(`Server unreachable for ${Math.round(n/6e4)} minutes, giving up.`),C(`tengu_bridge_poll_give_up`,{error_type:`connection`,elapsed_ms:n}),w(`error`,`bridge_poll_give_up`,{error_type:`connection`,elapsed_ms:n}),q=!0;break}W=null,H=0,B=B?Math.min(B*2,l.connCapMs):l.connInitialMs;let r=it(B);s.logVerbose(`Connection error, retrying in ${at(r)} (${Math.round(n/1e3)}s elapsed): ${t}`),s.updateReconnectingStatus(at(r),k(n)),ve().non_exclusive_heartbeat_interval_ms>0&&await M(),await j(r,p)}else{let e=Date.now();G!==null&&e-G>Ze(l)&&(v(`[bridge:work] Detected system sleep (${Math.round((e-G)/1e3)}s gap), resetting error budget`),w(`info`,`bridge_poll_sleep_detected`,{gapMs:e-G}),U=null,B=0,W=null,H=0),G=e,W||(W=e);let n=e-W;if(n>=l.generalGiveUpMs){s.logError(`Persistent errors for ${Math.round(n/6e4)} minutes, giving up.`),C(`tengu_bridge_poll_give_up`,{error_type:`general`,elapsed_ms:n}),w(`error`,`bridge_poll_give_up`,{error_type:`general`,elapsed_ms:n}),q=!0;break}U=null,B=0,H=H?Math.min(H*2,l.generalCapMs):l.generalInitialMs;let r=it(H);s.logVerbose(`Poll failed, retrying in ${at(r)} (${Math.round(n/1e3)}s elapsed): ${t}`),s.updateReconnectingStatus(at(r),k(n)),ve().non_exclusive_heartbeat_interval_ms>0&&await M(),await j(r,p)}}}oe(),s.clearStatus();let ce=Date.now()-I;C(`tengu_bridge_shutdown`,{active_sessions:m.size,loop_duration_ms:ce}),w(`info`,`bridge_shutdown`,{active_sessions:m.size,loop_duration_ms:ce});let ue=new Set(m.keys());u&&ue.add(u);let de=new Map(y);if(m.size>0){v(`[bridge:shutdown] Shutting down ${m.size} active session(s)`),s.logStatus(`Shutting down ${m.size} active session(s)\u2026`);let e=new Map(_);for(let[e,t]of m.entries())v(`[bridge:shutdown] Sending SIGTERM to sessionId=${e}`),t.kill();let t=new AbortController;await Promise.race([Promise.allSettled([...m.values()].map(e=>e.done)),j(l.shutdownGraceMs??3e4,t.signal)]),t.abort();for(let[e,t]of m.entries())v(`[bridge:shutdown] Force-killing stuck sessionId=${e}`),t.forceKill();for(let e of x.values())clearTimeout(e);if(x.clear(),te?.cancelAll(),T.size>0){let e=[...T.values()];T.clear(),v(`[bridge:shutdown] Cleaning up ${e.length} worktree(s)`),await Promise.allSettled(e.map(e=>ne(e.worktreePath,e.worktreeBranch,e.gitRoot,e.hookBased)))}await Promise.allSettled([...e.entries()].map(([e,t])=>a.stopWork(r,t,!0).catch(n=>s.logVerbose(`Failed to stop work ${t} for session ${e}: ${h(n)}`))))}if(L.size>0&&await Promise.allSettled([...L]),t.spawnMode===`single-session`&&u&&!q){s.logStatus("Resume this session by running `claude remote-control --continue`"),v(`[bridge:shutdown] Skipping archive+deregister to allow resume of session ${u}`);return}ue.size>0&&(v(`[bridge:shutdown] Archiving ${ue.size} session(s)`),await Promise.allSettled([...ue].map(e=>a.archiveSession(de.get(e)??ae(e)).catch(t=>s.logVerbose(`Failed to archive session ${e}: ${h(t)}`)))));try{await a.deregisterEnvironment(r),v(`[bridge:shutdown] Environment deregistered, bridge offline`),s.logVerbose(`Environment deregistered.`)}catch(e){s.logVerbose(`Failed to deregister environment: ${h(e)}`)}let{clearBridgePointer:X}=await import(`./bridgePointer-FvAMj3re.js`);await X(t.dir),s.logVerbose(`Environment offline.`)}var tt=new Set([`ECONNREFUSED`,`ECONNRESET`,`ETIMEDOUT`,`ENETUNREACH`,`EHOSTUNREACH`]);function nt(e){return!!(e&&typeof e==`object`&&`code`in e&&typeof e.code==`string`&&tt.has(e.code))}function rt(e){return!!e&&typeof e==`object`&&`code`in e&&typeof e.code==`string`&&e.code===`ERR_BAD_RESPONSE`}function it(e){return Math.max(0,e+e*.25*(2*Math.random()-1))}function at(e){return e>=1e3?`${(e/1e3).toFixed(1)}s`:`${Math.round(e)}ms`}async function ot(e,t,n,r,i=1e3){for(let a=1;a<=3;a++)try{await e.stopWork(t,n,!1),v(`[bridge:work] stopWork succeeded for workId=${n} on attempt ${a}/3`);return}catch(e){if(e instanceof P){V(e)?v(`[bridge:work] Suppressed stopWork 403 for ${n}: ${e.message}`):r.logError(`Failed to stop work ${n}: ${e.message}`),w(`error`,`bridge_stop_work_failed`,{attempts:a,fatal:!0});return}let t=h(e);if(a<3){let e=it(i*2**(a-1));r.logVerbose(`Failed to stop work ${n} (attempt ${a}/3), retrying in ${at(e)}: ${t}`),await j(e)}else r.logError(`Failed to stop work ${n} after 3 attempts: ${t}`),w(`error`,`bridge_stop_work_failed`,{attempts:3})}}function st(e,t,n,r,i){v(`[bridge:session] sessionId=${e} timed out after ${k(t)}`),C(`tengu_bridge_session_timeout`,{timeout_ms:t}),n.logSessionFailed(e,`Session timed out after ${k(t)}`),r.add(e),i.kill()}var ct=[`session`,`same-dir`,`worktree`];function lt(e){return e===`session`?`single-session`:e===`same-dir`?`same-dir`:e===`worktree`?`worktree`:`--spawn requires one of: ${ct.join(`, `)} (got: ${e??`<missing>`})`}function ut(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 dt(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=ke(e[++m]);else if(h.startsWith(`--debug-file=`))r=ke(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=lt(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=ut(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 ft(){let{EXTERNAL_PERMISSION_MODES:e}=await import(`./permissions-Ps_D01ZB.js`),t=e.join(`, `),n=await Xe(),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: ${Ye})
|
|
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 pt=80;function mt(e){return O(e.replace(/\s+/g,` `).trim(),pt)}async function ht(e,t){let{getBridgeSession:n}=await import(`./createSession-DfEQy2dZ.js`);return(await n(e,{baseUrl:t}))?.title||void 0}async function gt(e){let t=dt(e);if(t.help){await ft();return}t.error&&(console.error(`Error: ${t.error}`),process.exit(1));let{verbose:n,sandbox:r,debugFile:i,sessionTimeoutMs:a,permissionMode:o,name:s,spawnMode:c,capacity:l,createSessionInDir:u,sessionId:d,continueSession:f}=t,m=d,g,_=c!==void 0||l!==void 0||u!==void 0;if(o!==void 0){let{PERMISSION_MODES:e}=await import(`./permissions-Ps_D01ZB.js`),t=e;t.includes(o)||(console.error(`Error: Invalid permission mode '${o}'. Valid modes: ${t.join(`, `)}`),process.exit(1))}let y=ke(`.`),{enableConfigs:b,checkHasTrustDialogAccepted:S}=await import(`./config-DwiVCSrY.js`);b();let{initSinks:T}=await import(`./sinks-CKaSBvU8.js`);T();let E=await Xe();_&&!E&&(await x(`tengu_bridge_multi_session_denied`,{used_spawn:c!==void 0,used_capacity:l!==void 0,used_create_session_in_dir:u!==void 0}),await Promise.race([Promise.all([p(),ue()]),j(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:O,setCwdState:k}=await import(`./state-B2GIOsTB.js`);O(y),k(y),S()||(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:A,checkAndRefreshOAuthTokenIfNeeded:M}=await import(`./auth-D7PZvVPf.js`),{getBridgeAccessToken:N,getBridgeBaseUrl:te}=await import(`./bridgeConfig-7c07tJm9.js`);N()||(console.error(pe),process.exit(1));let{getGlobalConfig:I,saveGlobalConfig:L,getCurrentProjectConfig:R,saveCurrentProjectConfig:z}=await import(`./config-DwiVCSrY.js`);if(!I().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(),L(e=>e.remoteDialogSeen?e:{...e,remoteDialogSeen:!0}),t.toLowerCase()!==`y`&&t.toLowerCase()!==`yes`&&process.exit(0)}if(f){let{readBridgePointerAcrossWorktrees:e}=await import(`./bridgePointer-FvAMj3re.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`),m=n.sessionId,g=r}let B=te();B.startsWith(`http://`)&&!B.includes(`localhost`)&&!B.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 V=process.env.CLAUDE_BRIDGE_SESSION_INGRESS_URL||B,{getBranch:H,getRemoteUrl:ne,findGitRoot:U}=await import(`./git-D23Mzu_K.js`),{hasWorktreeCreateHook:W}=await import(`./hooks-Ch2vPE8u.js`),G=W()||U(y)!==null,re=E?R().remoteControlSpawnMode:void 0;if(re===`worktree`&&!G&&(console.error(`Warning: Saved spawn mode is worktree but this directory is not a git repository. Falling back to same-dir.`),re=void 0,z(e=>e.remoteControlSpawnMode===void 0?e:{...e,remoteControlSpawnMode:void 0})),E&&!re&&G&&c===void 0&&!m&&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 Claude Code 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`;re=n,C(`tengu_bridge_spawn_mode_chosen`,{spawn_mode:n}),z(e=>e.remoteControlSpawnMode===n?e:{...e,remoteControlSpawnMode:n})}let K,q;m?(q=`single-session`,K=`resume`):c===void 0?re===void 0?(q=E?`same-dir`:`single-session`,K=`gate_default`):(q=re,K=`saved`):(q=c,K=`flag`);let ie=q===`single-session`?1:l??Ye,J=u??!0;if(!m){let{clearBridgePointer:e}=await import(`./bridgePointer-FvAMj3re.js`);await e(y)}q===`worktree`&&!G&&(console.error(`Error: Worktree mode requires a git repository or WorktreeCreate hooks configured. Use --spawn=session for single-session mode.`),process.exit(1));let Y=await H(),ae=await ne(),se=we(),ce=je(),{handleOAuth401Error:le}=await import(`./auth-D7PZvVPf.js`),de=ee({baseUrl:B,getAccessToken:N,runnerVersion:`2.6.6`,onDebug:v,onAuth401:le,getTrustedDeviceToken:fe}),X;if(m){try{F(m,`sessionId`)}catch{console.error(`Error: Invalid session ID "${m}". Session IDs must not contain unsafe characters.`),process.exit(1)}await M(),A();let{getBridgeSession:e}=await import(`./createSession-DfEQy2dZ.js`),t=await e(m,{baseUrl:B,getAccessToken:N});if(!t){if(g){let{clearBridgePointer:e}=await import(`./bridgePointer-FvAMj3re.js`);await e(g)}console.error(`Error: Session ${m} not found. It may have been archived or expired, or your login may have lapsed (run \`claude /login\`).`),process.exit(1)}if(!t.environment_id){if(g){let{clearBridgePointer:e}=await import(`./bridgePointer-FvAMj3re.js`);await e(g)}console.error(`Error: Session ${m} has no environment_id. It may never have been attached to a bridge.`),process.exit(1)}X=t.environment_id,v(`[bridge:init] Resuming session ${m} on environment ${X}`)}let Z={dir:y,machineName:se,branch:Y,gitRepoUrl:ae,maxSessions:ie,spawnMode:q,verbose:n,sandbox:r,bridgeId:ce,workerType:`claude_code`,environmentId:je(),reuseEnvironmentId:X,apiBaseUrl:B,sessionIngressUrl:V,debugFile:i,sessionTimeoutMs:a};v(`[bridge:init] bridgeId=${ce}${X?` reuseEnvironmentId=${X}`:``} dir=${y} branch=${Y} gitRepoUrl=${ae} machine=${se}`),v(`[bridge:init] apiBaseUrl=${B} sessionIngressUrl=${V}`),v(`[bridge:init] sandbox=${r}${i?` debugFile=${i}`:``}`);let Q,me;try{let e=await de.registerBridgeEnvironment(Z);Q=e.environment_id,me=e.environment_secret}catch(e){C(`tengu_bridge_registration_failed`,{status:e instanceof P?e.status:void 0}),console.error(e instanceof P&&e.status===404?`Remote Control environments are not available for your account.`:`Error: ${h(e)}`),process.exit(1)}let he;if(m)if(X&&Q!==X)D(Error(`Bridge resume env mismatch: requested ${X}, backend returned ${Q}. Falling back to fresh session.`)),console.warn(`Warning: Could not resume session ${m} — its environment has expired. Creating a fresh session instead.`);else{let e=oe(m),t=e===m?[m]:[m,e],n=!1,r;for(let e of t)try{await de.reconnectSession(Q,e),v(`[bridge:init] Session ${e} re-queued via bridge/reconnect`),he=m,n=!0;break}catch(t){r=t,v(`[bridge:init] reconnectSession(${e}) failed: ${h(t)}`)}if(!n){let e=r,t=e instanceof P;if(g&&t){let{clearBridgePointer:e}=await import(`./bridgePointer-FvAMj3re.js`);await e(g)}console.error(t?`Error: ${h(e)}`:`Error: Failed to reconnect session ${m}: ${h(e)}\nThe session may still be resumable — try running the same command again.`),process.exit(1)}}v(`[bridge:init] Registered, server environmentId=${Q}`);let ge=ve();C(`tengu_bridge_started`,{max_sessions:Z.maxSessions,has_debug_file:!!Z.debugFile,sandbox:Z.sandbox,verbose:Z.verbose,heartbeat_interval_ms:ge.non_exclusive_heartbeat_interval_ms,spawn_mode:Z.spawnMode,spawn_mode_source:K,multi_session_gate:E,pre_create_session:J,worktree_available:G}),w(`info`,`bridge_started`,{max_sessions:Z.maxSessions,sandbox:Z.sandbox,spawn_mode:Z.spawnMode});let _e=Ke({execPath:process.execPath,scriptArgs:Qe(),env:process.env,verbose:n,sandbox:r,debugFile:i,permissionMode:o,onDebug:v,onActivity:(e,t)=>{v(`[bridge:activity] sessionId=${e} ${t.type} ${t.summary}`)},onPermissionRequest:(e,t,n)=>{v(`[bridge:perm] sessionId=${e} tool=${t.request.tool_name} request_id=${t.request_id} (not auto-approving)`)}}),$=Le({verbose:n}),{parseGitHubRepository:ye}=await import(`./detectRepository-DCTvg4p0.js`),be=ae?ye(ae):null,xe=be?be.split(`/`).pop():Ee(y);$.setRepoInfo(xe,Y);let Se=q!==`single-session`&&G;Se&&$.setSpawnModeDisplay(q);let Ce=e=>{if(e[0]===3||e[0]===4){process.emit(`SIGINT`);return}if(e[0]===32){$.toggleQr();return}if(e[0]===119){if(!Se)return;let e=Z.spawnMode===`same-dir`?`worktree`:`same-dir`;Z.spawnMode=e,C(`tengu_bridge_spawn_mode_toggled`,{spawn_mode:e}),$.logStatus(e===`worktree`?`Spawn mode: worktree (new sessions get isolated git worktrees)`:`Spawn mode: same-dir (new sessions share the current directory)`),$.setSpawnModeDisplay(e),$.refreshDisplay(),z(t=>t.remoteControlSpawnMode===e?t:{...t,remoteControlSpawnMode:e});return}};process.stdin.isTTY&&(process.stdin.setRawMode(!0),process.stdin.resume(),process.stdin.on(`data`,Ce));let Te=new AbortController,De=()=>{v(`[bridge:shutdown] SIGINT received, shutting down`),Te.abort()},Oe=()=>{v(`[bridge:shutdown] SIGTERM received, shutting down`),Te.abort()};process.on(`SIGINT`,De),process.on(`SIGTERM`,Oe);let Ae=he||null;if(J&&!he){let{createBridgeSession:e}=await import(`./createSession-DfEQy2dZ.js`);try{Ae=await e({environmentId:Q,title:s,events:[],gitRepoUrl:ae,branch:Y,signal:Te.signal,baseUrl:B,getAccessToken:N,permissionMode:o}),Ae&&v(`[bridge:init] Created initial session ${Ae}`)}catch(e){v(`[bridge:init] Session creation failed (non-fatal): ${h(e)}`)}}let Me=null;if(Ae&&q===`single-session`){let{writeBridgePointer:e}=await import(`./bridgePointer-FvAMj3re.js`),t={sessionId:Ae,environmentId:Q,source:`standalone`};await e(Z.dir,t),Me=setInterval(e,3600*1e3,Z.dir,t),Me.unref?.()}try{await et(Z,Q,me,de,_e,$,Te.signal,void 0,Ae??void 0,async()=>(A(),await M(),N()))}finally{Me!==null&&clearInterval(Me),process.off(`SIGINT`,De),process.off(`SIGTERM`,Oe),process.stdin.off(`data`,Ce),process.stdin.isTTY&&process.stdin.setRawMode(!1),process.stdin.pause()}process.exit(0)}var _t=class extends Error{constructor(e){super(e),this.name=`BridgeHeadlessPermanentError`}};async function vt(e,t){let{dir:n,log:r}=e;process.chdir(n);let{setOriginalCwd:i,setCwdState:a}=await import(`./state-B2GIOsTB.js`);i(n),a(n);let{enableConfigs:o,checkHasTrustDialogAccepted:s}=await import(`./config-DwiVCSrY.js`);o();let{initSinks:c}=await import(`./sinks-CKaSBvU8.js`);if(c(),!s())throw new _t(`Workspace not trusted: ${n}. Run \`claude\` in that directory first to accept the trust dialog.`);if(!e.getAccessToken())throw Error(pe);let{getBridgeBaseUrl:l}=await import(`./bridgeConfig-7c07tJm9.js`),u=l();if(u.startsWith(`http://`)&&!u.includes(`localhost`)&&!u.includes(`127.0.0.1`))throw new _t(`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-D23Mzu_K.js`),{hasWorktreeCreateHook:g}=await import(`./hooks-Ch2vPE8u.js`);if(e.spawnMode===`worktree`&&!(g()||m(n)!==null))throw new _t(`Worktree mode requires a git repository or WorktreeCreate hooks. Directory ${n} has neither.`);let _=await f(),v=await p(),y=we(),b=je(),x={dir:n,machineName:y,branch:_,gitRepoUrl:v,maxSessions:e.capacity,spawnMode:e.spawnMode,verbose:!1,sandbox:e.sandbox,bridgeId:b,workerType:`claude_code`,environmentId:je(),apiBaseUrl:u,sessionIngressUrl:d,sessionTimeoutMs:e.sessionTimeoutMs},S=ee({baseUrl:u,getAccessToken:e.getAccessToken,runnerVersion:`2.6.6`,onDebug:r,onAuth401:e.onAuth401,getTrustedDeviceToken:fe}),C,w;try{let e=await S.registerBridgeEnvironment(x);C=e.environment_id,w=e.environment_secret}catch(e){throw Error(`Bridge registration failed: ${h(e)}`)}let T=Ke({execPath:process.execPath,scriptArgs:Qe(),env:process.env,verbose:!1,sandbox:e.sandbox,permissionMode:e.permissionMode,onDebug:r}),E=yt(r);E.printBanner(x,C);let D;if(e.createSessionOnStart){let{createBridgeSession:n}=await import(`./createSession-DfEQy2dZ.js`);try{let i=await n({environmentId:C,title:e.name,events:[],gitRepoUrl:v,branch:_,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): ${h(e)}`)}}await et(x,C,w,S,T,E,t,void 0,D,async()=>e.getAccessToken())}function yt(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{dt as a,rt as i,gt as n,vt as o,nt as r,et as s,_t as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./bridgeMain-B7FZpvo0.js";export{e as bridgeMain};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,t}from"./caches-CdVW8fYV.js";e();export{t as clearSessionCaches};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{mA as e,vA as t}from"./loadAgentsDir-D7kapZB5.js";e();export{t as settingsChangeDetector};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,c as t}from"./channelNotification-BbDQdLZC.js";t();export{e as ChannelPermissionRequestNotificationSchema};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./chunk-DR8-3Aex.js";import{n as t,t as n}from"./conversation-CQBl9Yy2.js";var r;e((()=>{t(),r=async(e,t)=>(await n(t),{type:`text`,value:``})}))();export{r as call};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{la as e,ua as t}from"./paths-1ngPRtu3.js";t();export{e as getOrganizationUUID};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./chunk-DR8-3Aex.js";import{Ct as t,cn as n}from"./state-sIHsFpDu.js";import{f as r,l as i}from"./teammate-DMYOtLTK.js";import{Ar as a,Qy as o,Tr as s,Yy as c,pi as l}from"./loadAgentsDir-D7kapZB5.js";async function u(e,n,i){if(r())return e(`Cannot set color: This session is a swarm teammate. Teammate colors are assigned by the team leader.`,{display:`system`}),null;if(!i||i.trim()===``)return e(`Please provide a color. Available colors: ${c.join(`, `)}, default`,{display:`system`}),null;let a=i.trim().toLowerCase();return d.includes(a)?(await l(t(),`default`,s()),n.setAppState(e=>({...e,standaloneAgentContext:{...e.standaloneAgentContext,name:e.standaloneAgentContext?.name??``,color:void 0}})),e(`Session color reset to default`,{display:`system`}),null):c.includes(a)?(await l(t(),a,s()),n.setAppState(e=>({...e,standaloneAgentContext:{...e.standaloneAgentContext,name:e.standaloneAgentContext?.name??``,color:a}})),e(`Session color set to: ${a}`,{display:`system`}),null):(e(`Invalid color "${a}". Available colors: ${c.join(`, `)}, default`,{display:`system`}),null)}var d;e((()=>{n(),o(),a(),i(),d=[`default`,`reset`,`none`,`gray`,`grey`]}))();export{u as call};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Gi as e,Xi as t,zi as n}from"./loadAgentsDir-D7kapZB5.js";t();export{n as clearCommandsCache,e as getCommands};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as e,l as t}from"./commitAttribution-e0kkanVT.js";t();export{e as isInternalModelRepo};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,r as t,t as n}from"./context-noninteractive-IZfWniex.js";t();export{n as call,e as collectContextData};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,n as t}from"./chunk-DR8-3Aex.js";import{Ct as n,Jn as r,Xn as i,Z as a,cn as o,gn as s,ot as c,qn as l,yn as u}from"./state-sIHsFpDu.js";import{n as d,r as f}from"./analytics-DqMQntaB.js";import{o as p,s as m}from"./log-CzsijfHZ.js";import{Ar as h,Du as g,Eu as _,Hm as v,Lv as y,Mn as b,N_ as x,P_ as S,Tv as C,Vm as w,Wv as T,Yt as E,ad as D,di as O,eb as k,fr as A,gE as j,id as M,jn as N,kn as P,lE as F,nr as ee,tb as I,uE as L,un as R,vE as z,wi as B,wt as V,wv as H,xi as U,xt as W,yn as G}from"./loadAgentsDir-D7kapZB5.js";import{C as K,y as q}from"./rcDebugLog-CPGWJbI4.js";import{l as J,r as Y}from"./commitAttribution-e0kkanVT.js";import{n as X,t as Z}from"./caches-CdVW8fYV.js";import{randomUUID as Q}from"crypto";function $(){let e=M();if(!e)return;e.markTranscriptReset?.();let t={type:`status`,subtype:`status`,status:`conversation_cleared`,message:`conversation_cleared`,uuid:Q()};e.writeSdkMessages([t])}async function te({setMessages:t,readFileState:o,discoveredSkillNames:d,loadedNestedMemoryPaths:p,getAppState:_,setAppState:b,setConversationId:x}){let w=R();await E(`clear`,{getAppState:_,setAppState:b,signal:AbortSignal.timeout(w),timeoutMs:w});let T=a();T&&f(`tengu_cache_eviction_hint`,{scope:`conversation_clear`,last_request_id:T});let D=new Set,k=[],M=e=>`isBackgrounded`in e&&e.isBackgrounded===!1;if(_)for(let e of Object.values(_().tasks))M(e)||(g(e)?(D.add(e.agentId),k.push(e)):I(e)&&D.add(e.identity.agentId));t(()=>[]),$();{let{setContextBlocked:t}=(q(),e(K));t(!1)}x&&x(Q()),Z(D),l(null),r(null),i(null),u(),v(c()),o.clear(),d?.clear(),p?.clear(),b&&b(e=>{let t={};for(let[n,r]of Object.entries(e.tasks)){if(!M(r)){t[n]=r;continue}try{r.status===`running`&&(S(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){m(e)}P(n)}return{...e,tasks:t,attribution:Y(),standaloneAgentContext:void 0,fileHistory:{snapshots:[],trackedFiles:new Set,snapshotSequence:0},mcp:{clients:[],tools:[],commands:[],resources:{},pluginReconnectKey:e.mcp.pluginReconnectKey}}}),y(),ee(),s({setCurrentAsParent:!0}),process.env.USER_TYPE===`ant`&&process.env.CLAUDE_CODE_SESSION_ID&&(process.env.CLAUDE_CODE_SESSION_ID=n()),await O();for(let e of k)e.status===`running`&&N(e.id,A(j(e.agentId)));{let{saveMode:t}=(h(),e(B)),{isCoordinatorMode:n}=(L(),e(F));t(n()?`coordinator`:`normal`)}let z=W();z&&U(z);let V=await C(`clear`);V.length>0&&t(()=>V)}var ne=t((()=>{D(),o(),d(),k(),_(),x(),z(),J(),G(),p(),T(),w(),H(),h(),b(),V(),X()}));export{ne as n,te as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,t}from"./conversation-CQBl9Yy2.js";e();export{t as clearConversation};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,i as t,n,r}from"./createSession-CBheIT_G.js";t();export{n as createBridgeSession,r as getBridgeSession,e as updateBridgeSessionTitle};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e,t}from"./datadog-BK8eJz8B.js";t();export{e as shutdownDatadog};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,i as t}from"./envLessBridgeConfig-BAFYaZ0E.js";t();export{e as shouldShowAppUpgradeMessage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,t}from"./extra-usage-DIYR_3ZR.js";e();export{t as call};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Ql as e,Xl as t,Yl as n,Zl as r}from"./loadAgentsDir-D7kapZB5.js";e();export{n as drainPendingExtraction,t as executeExtractMemories,r as initExtractMemories};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,r as t,t as n}from"./fast-BpBwjbSD.js";t();export{n as FastModePicker,e as call};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,n as t}from"./gates-CxWIWtmd.js";e();export{t as getChicagoEnabled};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./chunk-DR8-3Aex.js";import{ai as t,ci as n}from"./paths-1ngPRtu3.js";import{d as r,s as i}from"./debug-UI3T040K.js";import{o as a,u as o}from"./proxy-CfZp-wce.js";import{FE as s,IE as c,Ko as l,Lo as u,Wo as d,__ as f,co as p,fm as m,g_ as h,gm as g,h_ as _,m_ as v,st as y,ut as b}from"./loadAgentsDir-D7kapZB5.js";import{F as x,I as S,J as C,L as w,P as T,R as E}from"./rcDebugLog-CPGWJbI4.js";import{i as D,n as O,r as k,t as A}from"./openaiShared-D5lOejS1.js";import{randomUUID as j}from"crypto";function M(e){if(P)return P;let t=new D({apiKey:process.env.GROK_API_KEY||process.env.XAI_API_KEY||``,baseURL:process.env.GROK_BASE_URL||N,maxRetries:e?.maxRetries??0,timeout:parseInt(process.env.API_TIMEOUT_MS||`600000`,10),dangerouslyAllowBrowser:!0,fetchOptions:a({forAnthropicAPI:!1}),...e?.fetchOverride&&{fetch:e.fetchOverride}});return e?.fetchOverride||(P=t),t}var N,P,F=e((()=>{k(),o(),N=`https://api.x.ai/v1`,P=null}));async function*I(e,n,i,a,o){try{let s=C(o.model),u=l(e,i),f=await Promise.all(i.map(e=>b(e,{getToolPermissionContext:o.getToolPermissionContext,tools:i,agents:o.agents,allowedAgentTypes:o.allowedAgentTypes,model:o.model}))),p=f.filter(e=>{let t=e;return t.type!==`advisor_20260301`&&t.type!==`computer_20250124`}),g=E(u,n),y=w(p),T=S(o.toolChoice),D=M({maxRetries:0,fetchOverride:o.fetchOverride,source:o.querySource});r(`[Grok] Calling model=${s}, messages=${g.length}, tools=${y.length}`);let k=x(await D.chat.completions.create({model:s,messages:g,...y.length>0&&{tools:y,...T&&{tool_choice:T}},stream:!0,stream_options:{include_usage:!0},...o.temperatureOverride!==void 0&&{temperature:o.temperatureOverride}},{signal:a}),s),A={},N=[],P,F={input_tokens:0,output_tokens:0,cache_creation_input_tokens:0,cache_read_input_tokens:0},I=0,L=Date.now();for await(let e of k){switch(e.type){case`message_start`:P=e.message,I=Date.now()-L,e.message?.usage&&(F=O(F,e.message.usage));break;case`content_block_start`:{let t=e.index,n=e.content_block;n.type===`tool_use`?A[t]={...n,input:``}:n.type===`text`?A[t]={...n,text:``}:n.type===`thinking`?A[t]={...n,thinking:``,signature:``}:A[t]={...n};break}case`content_block_delta`:{let t=e.index,n=e.delta,r=A[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=A[e.index];if(!t||!P)break;let n={message:{...P,content:d([t],i,o.agentId)},requestId:void 0,type:`assistant`,uuid:j(),timestamp:new Date().toISOString()};N.push(n),yield n;break}case`message_delta`:{let t=e.usage;t&&(F=O(F,t));break}case`message_stop`:break}e.type===`message_stop`&&F.input_tokens+F.output_tokens>0&&m(t(s,F),F,o.model),yield{type:`stream_event`,event:e,...e.type===`message_start`?{ttftMs:I}:void 0}}c(o.langfuseTrace??null,{model:s,provider:`grok`,input:v(u,n),output:_(N),usage:{input_tokens:F.input_tokens,output_tokens:F.output_tokens,cache_creation_input_tokens:F.cache_creation_input_tokens,cache_read_input_tokens:F.cache_read_input_tokens},startTime:new Date(L),endTime:new Date,completionStartTime:I>0?new Date(L+I):void 0,tools:h(f)})}catch(e){let t=e instanceof Error?e.message:String(e);r(`[Grok] Error: ${t}`,{level:`error`}),yield p({content:`API Error: ${t}`,apiError:`api_error`,error:e instanceof Error?e:Error(String(e))})}}e((()=>{F(),A(),T(),u(),y(),i(),g(),n(),s(),f()}))();export{I as queryModelGrok};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Yt as e,un as t,vn as n,yn as r}from"./loadAgentsDir-D7kapZB5.js";r();export{e as executeSessionEndHooks,t as getSessionEndHookTimeoutMs,n as hasWorktreeCreateHook};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./inboundAttachments-7rXrAtkb.js";export{e as resolveAndPrepend};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./chunk-DR8-3Aex.js";import{d as t,s as n,u as r}from"./envUtils-BWeoiL4Y.js";import{Ct as i,cn as a,ot as o}from"./state-sIHsFpDu.js";import{Ac as s,Jt as c,Pc as l,Pt as u,S as d,Sc as f,la as p,nn as m,on as h,ua as g,v as _}from"./paths-1ngPRtu3.js";import{L as v,V as y,X as ee,Y as b,d as x,s as S}from"./debug-UI3T040K.js";import{n as te,r as C}from"./analytics-DqMQntaB.js";import{F as w,P as T,i as ne,m as re,v as E}from"./git-CN3qtTb_.js";import{g as D,m as O}from"./log-CzsijfHZ.js";import{n as k,t as A}from"./sleep-8Eb9j_Ly.js";import{Aa as ie,Ar as ae,Ba as j,Ca as M,Da as N,Ea as oe,Eo as se,Ka as P,Kv as ce,Lo as F,Ma as I,Oa as le,Oo as L,Ra as R,Sa as ue,Ta as de,Vo as fe,cd as pe,fd as me,hr as z,ja as he,ka as B,qv as ge,wa as _e}from"./loadAgentsDir-D7kapZB5.js";import{O as V,_ as ve,d as H,k as ye,n as U,t as W}from"./rcDebugLog-CPGWJbI4.js";import{a as G,c as K,d as be,f as xe,o as q,r as Se,s as J,u as Y}from"./debugUtils-BBMFODKH.js";import{a as Ce,i as we}from"./trustedDevice-rdvUkS1W.js";import{a as X,i as Te,n as Z,o as Q,t as $}from"./bridgeConfig-Df6uyp3q.js";import{a as Ee,o as De,r as Oe,s as ke,t as Ae}from"./bridgeEnabled-A-_xJ94c.js";import{i as je,t as Me}from"./assistant-EA-MHNQ-.js";import{t as Ne}from"./capacityWake-BXlUpptF.js";import{n as Pe,t as Fe}from"./pollConfig-DTYIJ8lQ.js";import{a as Ie,n as Le,r as Re,t as ze}from"./workSecret-mS2OrpxF.js";import{a as Be,i as Ve,n as He,t as Ue}from"./createSession-CBheIT_G.js";import{i as We,n as Ge}from"./envLessBridgeConfig-BAFYaZ0E.js";import{n as Ke,o as qe}from"./mappers-CkMESMy7.js";import{n as Je,r as Ye,t as Xe}from"./sessionTitle-QxXslbJY.js";import{a as Ze,i as Qe,n as $e,o as et,r as tt,t as nt}from"./bridgeMessaging-DPVLAIzl.js";import{t as rt}from"./HybridTransport-CAko699F.js";import{n as it,r as at,t as ot}from"./flushGate-CQsnMw8g.js";import{hostname as st}from"os";import{randomUUID as ct}from"crypto";a(),O(),E(),s(),g(),h(),d(),X(),ge(),Oe(),F(),R(),ae(),Ve(),We(),Ke(),Ye(),B(),S(),W(),T(),te(),b(),K(),pe(),Ce(),V(),H(),n(),q(),y(),A(),M();var lt=2e3,ut=6e4,dt=900*1e3,ft=0;async function pt(e){let{dir:n,machineName:i,branch:a,gitRepoUrl:o,title:s,baseUrl:c,sessionIngressUrl:l,workerType:u,getAccessToken:d,createSession:f,archiveSession:p,getCurrentTitle:m=()=>s,toSDKMessages:h=()=>{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:g,getPollIntervalConfig:_=()=>Pe,initialHistoryCap:y=200,initialMessages:b,previouslyFlushedUUIDs:S,onInboundMessage:te,onPermissionResponse:T,onInterrupt:ne,onSetModel:re,onSetMaxThinkingTokens:E,onSetPermissionMode:D,onStateChange:O,onUserMessage:k,perpetual:A,initialSSESequenceNum:ie=0}=e,ae=++ft,{writeBridgePointer:j,clearBridgePointer:M,readBridgePointer:N}=await import(`./bridgePointer-FvAMj3re.js`),se=A?await N(n):null,P=se?.source===`repl`?se:null;x(`[bridge:repl] initBridgeCore #${ae} starting (initialMessages=${b?.length??0}${P?` perpetual prior=env:${P.environmentId}`:``})`);let ce=le({baseUrl:c,getAccessToken:d,runnerVersion:`2.6.6`,onDebug:x,onAuth401:g,getTrustedDeviceToken:we}),F=process.env.USER_TYPE===`ant`?oe(ce):ce,I={dir:n,machineName:i,branch:a,gitRepoUrl:o,maxSessions:1,spawnMode:`single-session`,verbose:!1,sandbox:!1,bridgeId:ct(),workerType:u,environmentId:ct(),reuseEnvironmentId:P?.environmentId,apiBaseUrl:c,sessionIngressUrl:l},L,R;try{let e=await F.registerBridgeEnvironment(I);L=e.environment_id,R=e.environment_secret}catch(e){return J(`registration_failed`,`[bridge:repl] Environment registration failed: ${v(e)}`),P&&await M(n),O?.(`failed`,v(e)),null}x(`[bridge:repl] Environment registered: ${L}`),w(`info`,`bridge_repl_env_registered`),C(`tengu_bridge_repl_env_registered`,{});async function fe(e,t){if(L!==e)return x(`[bridge:repl] Env mismatch (requested ${e}, got ${L}) — cannot reconnect in place`),!1;let n=xe(t),r=n===t?[t]:[t,n];for(let e of r)try{return await F.reconnectSession(L,e),x(`[bridge:repl] Reconnected session ${e} in place on env ${L}`),!0}catch(t){x(`[bridge:repl] reconnectSession(${e}) failed: ${v(t)}`)}return x(`[bridge:repl] reconnectSession exhausted — falling through to fresh session`),!1}let pe=P?await fe(P.environmentId,P.sessionId):!1;P&&!pe&&await M(n);let z;if(pe&&P){if(z=P.sessionId,x(`[bridge:repl] Perpetual session reused: ${z}`),b&&S)for(let e of b)S.add(e.uuid)}else{let e=await f({environmentId:L,title:s,gitRepoUrl:o,branch:a,signal:AbortSignal.timeout(15e3)});if(!e)return x(`[bridge:repl] Session creation failed, deregistering environment`),C(`tengu_bridge_repl_session_failed`,{}),await F.deregisterEnvironment(L).catch(()=>{}),O?.(`failed`,`Session creation failed`),null;z=e,x(`[bridge:repl] Session created: ${z}`)}await j(n,{sessionId:z,environmentId:L,source:`repl`}),w(`info`,`bridge_repl_session_created`),C(`tengu_bridge_repl_started`,{has_initial_messages:!!(b&&b.length>0),inProtectedNamespace:t()});let he=new Set;if(b)for(let e of b)he.add(e.uuid);let B=new nt(2e3);for(let e of he)B.add(e);let ge=new nt(2e3),V=new AbortController,H=null;ve(e=>{V.signal.aborted||H?.reportMetadata(e)},{replayCurrent:!0});let W=0,G=pe?ie:0,K=null,q=null,Se=Ne(V.signal),Y=Se.wake,Ce=Se.signal,X=new ot,Te=!k,Z=0,Q=null;async function $(){if(Q)return Q;Q=Ee();try{return await Q}finally{Q=null}}async function Ee(){if(Z++,U(`doReconnect: attempt=${Z}/3 envId=${L} sessionId=${z} workId=${K}`),W++,x(`[bridge:repl] Reconnecting after env lost (attempt ${Z}/3)`),Z>3)return x(`[bridge:repl] Environment reconnect limit reached (3), giving up`),!1;if(H){let e=H.getLastSequenceNum();e>G&&(G=e),H.close(),H=null}if(Y(),X.drop(),K){let e=K;if(await F.stopWork(L,e,!1).catch(()=>{}),K!==e)return x(`[bridge:repl] Poll loop recovered during stopWork await — deferring to it`),Z=0,!0;K=null,q=null}if(V.signal.aborted)return x(`[bridge:repl] Reconnect aborted by teardown`),!1;let e=L;I.reuseEnvironmentId=e;try{let e=await F.registerBridgeEnvironment(I);L=e.environment_id,R=e.environment_secret}catch(e){return I.reuseEnvironmentId=void 0,x(`[bridge:repl] Environment re-registration failed: ${v(e)}`),!1}if(I.reuseEnvironmentId=void 0,x(`[bridge:repl] Re-registered: requested=${e} got=${L}`),V.signal.aborted)return x(`[bridge:repl] Reconnect aborted after env registration, cleaning up`),await F.deregisterEnvironment(L).catch(()=>{}),!1;if(H!==null)return x(`[bridge:repl] Poll loop recovered during registerBridgeEnvironment await — deferring to it`),Z=0,!0;if(await fe(e,z))return C(`tengu_bridge_repl_reconnected_in_place`,{}),Z=0,!0;if(L!==e&&C(`tengu_bridge_repl_env_expired_fresh_session`,{}),await p(z),V.signal.aborted)return x(`[bridge:repl] Reconnect aborted after archive, cleaning up`),await F.deregisterEnvironment(L).catch(()=>{}),!1;let t=m(),r=await f({environmentId:L,title:t,gitRepoUrl:o,branch:a,signal:AbortSignal.timeout(15e3)});return r?V.signal.aborted?(x(`[bridge:repl] Reconnect aborted after session creation, cleaning up`),await p(r),!1):(z=r,me(be(r)).catch(()=>{}),G=0,ge.clear(),Te=!k,x(`[bridge:repl] Re-created session: ${z}`),await j(n,{sessionId:z,environmentId:L,source:`repl`}),S?.clear(),Z=0,!0):(x(`[bridge:repl] Session creation failed during reconnection`),!1)}function De(){return d()}function Oe(){let e=X.end();if(e.length===0)return;if(!H){x(`[bridge:repl] Cannot drain ${e.length} pending message(s): no transport`);return}for(let t of e)B.add(t.uuid);let t=h(e).map(e=>({...e,session_id:z}));x(`[bridge:repl] Drained ${e.length} pending message(s) after flush`),H.writeBatch(t)}let ke=null;function Ae(){ke?.()}function je(e){if(U(`handleTransportPermanentClose: code=${e} transport=${H?`exists`:`null`} pollAborted=${V.signal.aborted}`),x(`[bridge:repl] Transport permanently closed: code=${e}`),C(`tengu_bridge_repl_ws_closed`,{code:e}),H){let e=H.getLastSequenceNum();e>G&&(G=e),H=null}Y();let t=X.drop();if(t>0&&x(`[bridge:repl] Dropping ${t} pending message(s) on transport close (code=${e})`,{level:`warn`}),e===1e3){O?.(`failed`,`session ended`),V.abort(),Ae();return}O?.(`reconnecting`,`Remote Control connection lost (code ${e})`),x(`[bridge:repl] Transport reconnect budget exhausted (code=${e}), attempting env reconnect`),$().then(t=>{t||V.signal.aborted||(x(`[bridge:repl] reconnectEnvironmentWithSession resolved false — tearing down`),C(`tengu_bridge_repl_reconnect_failed`,{close_code:e}),O?.(`failed`,`reconnection failed`),Ae())})}let Me;process.env.USER_TYPE===`ant`&&process.platform!==`win32`&&(Me=()=>{x(`[bridge:repl] SIGUSR2 received — forcing doReconnect() for testing`),$()},process.on(`SIGUSR2`,Me));let Fe=null;process.env.USER_TYPE===`ant`&&de({fireClose:e=>{if(!Fe){x(`[bridge:debug] fireClose: no transport wired yet`);return}x(`[bridge:debug] fireClose(${e}) — injecting`),Fe(e)},forceReconnect:()=>{x(`[bridge:debug] forceReconnect — injecting`),$()},injectFault:_e,wakePollLoop:Y,describe:()=>`env=${L} session=${z} transport=${H?.getStateLabel()??`null`} workId=${K??`null`}`}),mt({api:F,getCredentials:()=>({environmentId:L,environmentSecret:R}),signal:V.signal,getPollIntervalConfig:_,onStateChange:O,getWsState:()=>H?.getStateLabel()??`null`,isAtCapacity:()=>H!==null,capacitySignal:Ce,onFatalError:Ae,getHeartbeatInfo:()=>!K||!q?null:{environmentId:L,workId:K,sessionToken:q},onHeartbeatFatal:e=>{if(x(`[bridge:repl] heartbeatWork fatal (status=${e.status}) — tearing down work item for fast re-dispatch`),H){let e=H.getLastSequenceNum();e>G&&(G=e),H.close(),H=null}X.drop(),K&&F.stopWork(L,K,!1).catch(e=>{x(`[bridge:repl] stopWork after heartbeat fatal: ${v(e)}`)}),K=null,q=null,Y(),O?.(`reconnecting`,`Work item lease expired, fetching fresh token`)},async onEnvironmentLost(){return await $()?{environmentId:L,environmentSecret:R}:null},onWorkReceived:(e,t,i,a)=>{if(H?.isConnectedStatus()&&x(`[bridge:repl] Work received while transport connected, replacing with fresh token (workId=${i})`),x(`[bridge:repl] Work received: workId=${i} workSessionId=${e} currentSessionId=${z} match=${Ie(e,z)}`),j(n,{sessionId:z,environmentId:L,source:`repl`}),!Ie(e,z)){x(`[bridge:repl] Rejecting foreign session: expected=${z} got=${e}`);return}K=i,q=t;let o=a||r(process.env.CLAUDE_BRIDGE_USE_CCR_V2),s;if(!o){if(s=De(),!s){x(`[bridge:repl] No OAuth token available for session ingress, skipping work`);return}ye(s)}if(C(`tengu_bridge_repl_work_received`,{}),H){let e=H;H=null;let t=e.getLastSequenceNum();t>G&&(G=t),e.close()}X.deactivate();let u=e=>Qe(e,{transport:H,sessionId:z,onInterrupt:ne,onSetModel:re,onSetMaxThinkingTokens:E,onSetPermissionMode:D}),d=!1,f=e=>{H=e,e.setOnConnect(()=>{if(H===e){if(x(`[bridge:repl] Ingress transport connected`),C(`tengu_bridge_repl_ws_connected`,{}),!o){let e=De();e&&ye(e)}if(He=!1,!d&&b&&b.length>0){d=!0;let t=y,n=b.filter(e=>Ze(e)&&!S?.has(e.uuid)),r=t>0&&n.length>t?n.slice(-t):n;r.length<n.length&&(x(`[bridge:repl] Capped initial flush: ${n.length} -> ${r.length} (cap=${t})`),C(`tengu_bridge_repl_history_capped`,{eligible_count:n.length,capped_count:r.length}));let i=h(r);if(i.length>0){x(`[bridge:repl] Flushing ${i.length} initial message(s) via transport`);let t=i.map(e=>({...e,session_id:z})),n=e.droppedBatchCount;e.writeBatch(t).then(()=>{if(e.droppedBatchCount>n){x(`[bridge:repl] Initial flush dropped ${e.droppedBatchCount-n} batch(es) — not marking ${i.length} UUID(s) as flushed`);return}if(S)for(let e of i)e.uuid&&S.add(e.uuid)}).catch(e=>x(`[bridge:repl] Initial flush failed: ${e}`)).finally(()=>{H===e&&(Oe(),O?.(`connected`))})}else Oe(),O?.(`connected`)}else X.active||O?.(`connected`)}}),e.setOnData(e=>{try{let t=JSON.parse(e);U(`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{U(`ingress (non-JSON): ${String(e).slice(0,200)}`)}tt(e,B,ge,te,T,u)}),Fe=je,e.setOnClose(t=>{H===e&&(U(`transport onClose: code=${t} connected=${e.isConnectedStatus()} state=${e.getStateLabel()} seq=${e.getLastSequenceNum()}`),je(t))}),!d&&b&&b.length>0&&X.start(),e.connect()};if(W++,o){let n=ze(c,e),r=W;x(`[bridge:repl] CCR v2: sessionUrl=${n} session=${e} gen=${r}`),at({sessionUrl:n,ingressToken:t,sessionId:e,initialSequenceNum:G}).then(e=>{if(V.signal.aborted){e.close();return}if(r!==W){x(`[bridge:repl] CCR v2: discarding stale handshake gen=${r} current=${W}`),e.close();return}f(e)},e=>{x(`[bridge:repl] CCR v2: createV2ReplTransport failed: ${v(e)}`,{level:`error`}),C(`tengu_bridge_repl_ccr_v2_init_failed`,{}),r===W&&(K&&(F.stopWork(L,K,!1).catch(e=>{x(`[bridge:repl] stopWork after v2 init failure: ${v(e)}`)}),K=null,q=null),Y())})}else{let t=Le(l,e);x(`[bridge:repl] Ingress URL: ${t}`),x(`[bridge:repl] Creating HybridTransport: session=${e}`);let n=s??``;f(it(new rt(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:()=>{O?.(`reconnecting`,`Lost sync with Remote Control — events could not be delivered`),Y()}})))}}});let Re=A?setInterval(()=>{Q||j(n,{sessionId:z,environmentId:L,source:`repl`})},60*6e4):null;Re?.unref?.();let Be=_().session_keepalive_interval_v2_ms,Ve=Be>0?setInterval(()=>{H&&(x(`[bridge:repl] keep_alive sent`),H.write({type:`keep_alive`}).catch(e=>{x(`[bridge:repl] keep_alive write failed: ${v(e)}`)}))},Be):null;Ve?.unref?.();let He=!1;ke=async()=>{if(He){x(`[bridge:repl] Teardown already in progress, skipping duplicate call env=${L} session=${z}`);return}He=!0;let e=Date.now();if(x(`[bridge:repl] Teardown starting: env=${L} session=${z} workId=${K??`none`} transportState=${H?.getStateLabel()??`null`}`),Re!==null&&clearInterval(Re),Ve!==null&&clearInterval(Ve),Me&&process.off(`SIGUSR2`,Me),process.env.USER_TYPE===`ant`&&(ue(),Fe=null),V.abort(),x(`[bridge:repl] Teardown: poll loop aborted`),H){let e=H.getLastSequenceNum();e>G&&(G=e)}if(A){H=null,X.drop(),await j(n,{sessionId:z,environmentId:L,source:`repl`}),x(`[bridge:repl] Teardown (perpetual): leaving env=${L} session=${z} alive on server, duration=${Date.now()-e}ms`);return}let t=H;if(H=null,X.drop(),t){let e={...et(z),session_id:z};t.write(e)}let r=K?F.stopWork(L,K,!0).then(()=>{x(`[bridge:repl] Teardown: stopWork completed`)}).catch(e=>{x(`[bridge:repl] Teardown stopWork failed: ${v(e)}`)}):Promise.resolve();await Promise.all([r,p(z)]),t?.close(),x(`[bridge:repl] Teardown: transport closed`),await F.deregisterEnvironment(L).catch(e=>{x(`[bridge:repl] Teardown deregister failed: ${v(e)}`)}),await M(n),x(`[bridge:repl] Teardown complete: env=${L} duration=${Date.now()-e}ms`)};let Ue=ee(()=>ke?.());return x(`[bridge:repl] Ready: env=${L} session=${z}`),O?.(`ready`),{get bridgeSessionId(){return z},get environmentId(){return L},getSSESequenceNum(){let e=H?.getLastSequenceNum()??0;return Math.max(G,e)},sessionIngressUrl:l,writeMessages(e){let t=e.filter(e=>Ze(e)&&!he.has(e.uuid)&&!B.has(e.uuid));if(t.length===0)return;if(!Te)for(let e of t){let t=$e(e);if(t!==void 0&&k?.(t,z)){Te=!0;break}}if(X.enqueue(...t)){x(`[bridge:repl] Queued ${t.length} message(s) during initial flush`);return}if(!H){let e=t.map(e=>e.type).join(`,`);x(`[bridge:repl] Transport not configured, dropping ${t.length} message(s) [${e}] for session=${z}`,{level:`warn`});return}for(let e of t)B.add(e.uuid);x(`[bridge:repl] Sending ${t.length} message(s) via transport`);let n=h(t).map(e=>({...e,session_id:z}));H.writeBatch(n)},writeSdkMessages(e){let t=e.filter(e=>!e.uuid||!B.has(e.uuid));if(t.length===0)return;if(!H){x(`[bridge:repl] Transport not configured, dropping ${t.length} SDK message(s) for session=${z}`,{level:`warn`});return}for(let e of t)e.uuid&&B.add(e.uuid);let n=t.map(e=>({...e,session_id:z}));H.writeBatch(n)},sendControlRequest(e){if(!H){x(`[bridge:repl] Transport not configured, skipping control_request`);return}let t={...e,session_id:z};H.write(t),x(`[bridge:repl] Sent control_request request_id=${e.request_id}`)},sendControlResponse(e){if(!H){x(`[bridge:repl] Transport not configured, skipping control_response`);return}let t={...e,session_id:z};H.write(t),x(`[bridge:repl] Sent control_response`)},sendControlCancelRequest(e){if(!H){x(`[bridge:repl] Transport not configured, skipping control_cancel_request`);return}let t={type:`control_cancel_request`,request_id:e,session_id:z};H.write(t),x(`[bridge:repl] Sent control_cancel_request request_id=${e}`)},sendResult(){if(!H){x(`[bridge:repl] sendResult: skipping, transport not configured session=${z}`);return}H.reportState(`idle`);let e={...et(z),session_id:z};H.write(e),x(`[bridge:repl] Sent result for session=${z}`)},async teardown(){Ue(),await ke?.(),x(`[bridge:repl] Torn down`),C(`tengu_bridge_repl_teardown`,{})}}}async function mt({api:e,getCredentials:t,signal:n,onStateChange:r,onWorkReceived:i,onEnvironmentLost:a,getWsState:o,isAtCapacity:s,capacitySignal:c,onFatalError:l,getPollIntervalConfig:u=()=>Pe,getHeartbeatInfo:d,onHeartbeatFatal:f}){x(`[bridge:repl] Starting work poll loop for env=${t().environmentId}`);let p=0,m=null,h=null,g=0,_=!1;for(;!n.aborted;){let{environmentId:y,environmentSecret:ee}=t(),b=u();try{let t=await e.pollForWork(y,ee,n,b.reclaim_older_than_ms);if(g=0,p>0&&(x(`[bridge:repl] Poll recovered after ${p} consecutive error(s)`),p=0,m=null,h=null,r?.(`ready`)),!t){let t=_;if(_=!1,s?.()&&c&&!t){let t=b.poll_interval_ms_at_capacity;if(b.non_exclusive_heartbeat_interval_ms>0&&d){C(`tengu_bridge_heartbeat_mode_entered`,{heartbeat_interval_ms:b.non_exclusive_heartbeat_interval_ms});let r=t>0?Date.now()+t:null,i=!1,a=0;for(;!n.aborted&&s()&&(r===null||Date.now()<r);){let t=u();if(t.non_exclusive_heartbeat_interval_ms<=0)break;let n=d();if(!n)break;let r=c();try{await e.heartbeatWork(n.environmentId,n.workId,n.sessionToken)}catch(e){if(x(`[bridge:repl:heartbeat] Failed: ${v(e)}`),e instanceof N){r.cleanup(),C(`tengu_bridge_heartbeat_error`,{status:e.status,error_type:e.status===401||e.status===403?`auth_failed`:`fatal`}),f?(f(e),x(`[bridge:repl:heartbeat] Fatal (status=${e.status}), work state cleared — fast-polling for re-dispatch`)):i=!0;break}}a++,await k(t.non_exclusive_heartbeat_interval_ms,r.signal),r.cleanup()}let o=i?`error`:n.aborted?`shutdown`:s()?r!==null&&Date.now()>=r?`poll_due`:`config_disabled`:`capacity_changed`;if(C(`tengu_bridge_heartbeat_mode_exited`,{reason:o,heartbeat_cycles:a}),!i){o===`poll_due`&&x(`[bridge:repl] Heartbeat poll_due after ${a} cycles — falling through to pollForWork`);continue}}let r=t>0?t:b.non_exclusive_heartbeat_interval_ms;if(r>0){let e=c(),t=Date.now();await k(r,e.signal),e.cleanup();let n=Date.now()-t-r;n>6e4&&(x(`[bridge:repl] At-capacity sleep overran by ${Math.round(n/1e3)}s — process suspension detected, forcing one fast-poll cycle`),C(`tengu_bridge_repl_suspension_detected`,{overrun_ms:n}),_=!0)}}else await k(b.poll_interval_ms_not_at_capacity,n);continue}let a;try{a=Re(t.secret)}catch(n){x(`[bridge:repl] Failed to decode work secret: ${v(n)}`),C(`tengu_bridge_repl_work_secret_failed`,{}),await e.stopWork(y,t.id,!1).catch(()=>{});continue}x(`[bridge:repl] Acknowledging workId=${t.id}`);try{await e.acknowledgeWork(y,t.id,a.session_ingress_token)}catch(e){x(`[bridge:repl] Acknowledge failed workId=${t.id}: ${v(e)}`)}if(t.data.type===`healthcheck`){x(`[bridge:repl] Healthcheck received`);continue}if(t.data.type===`session`){let e=t.data.id;try{I(e,`session_id`)}catch{x(`[bridge:repl] Invalid session_id in work: ${e}`);continue}i(e,a.session_ingress_token,t.id,a.use_code_sessions===!0),x(`[bridge:repl] Work accepted, continuing poll loop`)}}catch(i){if(n.aborted)break;if(i instanceof N&&i.status===404&&a){let e=t().environmentId;if(y!==e){x(`[bridge:repl] Stale poll error for old env=${y}, current env=${e} — skipping onEnvironmentLost`),p=0,m=null;continue}if(g++,x(`[bridge:repl] Environment deleted, attempting re-registration (attempt ${g}/3)`),C(`tengu_bridge_repl_env_lost`,{attempt:g}),g>3){x(`[bridge:repl] Environment re-registration limit reached (3), giving up`),r?.(`failed`,`Environment deleted and re-registration limit reached`),l?.();break}r?.(`reconnecting`,`environment lost, recreating session`);let i=await a();if(n.aborted)break;if(i){p=0,m=null,r?.(`ready`),x(`[bridge:repl] Re-registered environment: ${i.environmentId}`);continue}r?.(`failed`,`Environment deleted and re-registration failed`),l?.();break}if(i instanceof N){let e=ie(i.errorType),t=he(i);x(`[bridge:repl] Fatal poll error: ${i.message} (status=${i.status}, type=${i.errorType??`unknown`})${t?` (suppressed)`:``}`),C(`tengu_bridge_repl_fatal_error`,{status:i.status,error_type:i.errorType}),w(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),l?.();break}let s=Date.now();h!==null&&s-h>6e4*2&&(x(`[bridge:repl] Detected system sleep (${Math.round((s-h)/1e3)}s gap), resetting poll error budget`),w(`info`,`bridge_repl_poll_sleep_detected`,{gapMs:s-h}),p=0,m=null),h=s,p++,m===null&&(m=s);let c=s-m,f=G(i),_=Se(i),v=o?.()??`unknown`;if(x(`[bridge:repl] Poll error (attempt ${p}, elapsed ${Math.round(c/1e3)}s, ws=${v}): ${_}`),C(`tengu_bridge_repl_poll_error`,{status:f,consecutiveErrors:p,elapsedMs:c}),p===1&&r?.(`reconnecting`,_),c>=9e5){x(`[bridge:repl] Poll failures exceeded ${dt/1e3}s (${p} errors), giving up`),w(`info`,`bridge_repl_poll_give_up`),C(`tengu_bridge_repl_poll_give_up`,{consecutiveErrors:p,elapsedMs:c,lastStatus:f}),r?.(`failed`,`connection to server lost`);break}let ee=Math.min(lt*2**(p-1),ut);if(u().non_exclusive_heartbeat_interval_ms>0){let t=d?.();if(t)try{await e.heartbeatWork(t.environmentId,t.workId,t.sessionToken)}catch{}}await k(ee,n)}}x(`[bridge:repl] Work poll loop ended (aborted=${n.aborted}) env=${t().environmentId}`)}S(),y(),q(),K();async function ht(t){let{onInboundMessage:n,onPermissionResponse:r,onInterrupt:a,onSetModel:s,onSetMaxThinkingTokens:d,onSetPermissionMode:h,onStateChange:g,initialMessages:y,getMessages:ee,previouslyFlushedUUIDs:b,initialName:S,perpetual:te,outboundOnly:C,tags:w}=t??{};if(Y(De),!await Ee())return J(`not_enabled`,`[bridge:repl] Skipping: bridge not enabled`),null;if(!$())return J(`no_oauth`,`[bridge:repl] Skipping: no OAuth tokens`),g?.(`failed`,`/login`),null;if(await P(),!j(`allow_remote_control`))return J(`policy_denied`,`[bridge:repl] Skipping: allow_remote_control policy not allowed`),g?.(`failed`,`disabled by your organization's policy`),null;if(!Te()){let e=f();if(e.bridgeOauthDeadExpiresAt!=null&&(e.bridgeOauthDeadFailCount??0)>=3&&c()?.expiresAt===e.bridgeOauthDeadExpiresAt)return x(`[bridge:repl] Skipping: cross-process backoff (dead token seen ${e.bridgeOauthDeadFailCount} times)`),null;await u();let t=c();if(t&&t.expiresAt!==null&&t.expiresAt<=Date.now()){J(`oauth_expired_unrefreshable`,`[bridge:repl] Skipping: OAuth token expired and refresh failed (re-login required)`),g?.(`failed`,`/login`);let e=t.expiresAt;return l(t=>({...t,bridgeOauthDeadExpiresAt:e,bridgeOauthDeadFailCount:t.bridgeOauthDeadExpiresAt===e?(t.bridgeOauthDeadFailCount??0)+1:1})),null}}let T=Z(),E=`remote-control-${ce()}`,D=!1,O=!1;if(S)E=S,D=!0,O=!0;else{let e=i(),t=e?z(e):void 0;if(t)E=t,D=!0,O=!0;else if(y&&y.length>0)for(let e=y.length-1;e>=0;e--){let t=y[e];if(t.type!==`user`||t.isMeta||t.toolUseResult||t.isCompactSummary||t.origin&&t.origin.kind!==`human`||fe(t))continue;let n=se(t.message.content);if(!n)continue;let r=_t(n);if(r){E=r,D=!0;break}}}let k=0,A,ie=0,ae=(e,t,n)=>{D=!0,E=e,x(`[bridge:repl] derived title from message ${n}: ${e}`),Be(t,e,{baseUrl:T,getAccessToken:$}).catch(()=>{})},M=(e,t)=>{let n=++ie,r=k;Je(e,AbortSignal.timeout(15e3)).then(e=>{e&&n===ie&&A===t&&!z(i())&&ae(e,t,r)})},N=(e,t)=>{if(O||z(i()))return!0;if(A!==void 0&&A!==t&&(k=0),A=t,k++,k===1&&!D){let n=_t(e);n&&ae(n,t,k),M(e,t)}else if(k===3){let n=ee?.();M(n?Xe(L(n)):e,t)}return k>=3},oe=_(`tengu_bridge_initial_history_cap`,200,300*1e3),F=Q()?`self-hosted`:await p();if(!F)return J(`no_org_uuid`,`[bridge:repl] Skipping: no org UUID`),g?.(`failed`,`/login`),null;if(ke()&&!te){let e=await Ge();if(e)return J(`version_too_old`,`[bridge:repl] Skipping: ${e}`,!0),g?.(`failed`,"run `claude update` to upgrade"),null;x(`[bridge:repl] Using env-less bridge path (tengu_bridge_repl_v2)`);let{initEnvLessBridgeCore:t}=await import(`./remoteBridgeCore-CrXlWEL1.js`);return t({baseUrl:T,orgUUID:F,title:E,getAccessToken:$,onAuth401:m,toSDKMessages:qe,initialHistoryCap:oe,initialMessages:y,onInboundMessage:n,onUserMessage:N,onPermissionResponse:r,onInterrupt:a,onSetModel:s,onSetMaxThinkingTokens:d,onSetPermissionMode:h,onStateChange:g,outboundOnly:C,tags:w})}let I=Ae();if(I)return J(`version_too_old`,`[bridge:repl] Skipping: ${I}`),g?.(`failed`,"run `claude update` to upgrade"),null;let le=await ne(),R=await re(),ue=process.env.CLAUDE_BRIDGE_SESSION_INGRESS_URL||T,de=`claude_code`;{let{isAssistantMode:t}=(je(),e(Me));t()&&(de=`claude_code_assistant`)}return pt({dir:o(),machineName:st(),branch:le,gitRepoUrl:R,title:E,baseUrl:T,sessionIngressUrl:ue,workerType:de,getAccessToken:$,createSession:e=>He({...e,events:[],baseUrl:T,getAccessToken:$}),archiveSession:e=>Ue(e,{baseUrl:T,getAccessToken:$,timeoutMs:1500}).catch(e=>{x(`[bridge:repl] archiveBridgeSession threw: ${v(e)}`,{level:`error`})}),getCurrentTitle:()=>z(i())??E,onUserMessage:N,toSDKMessages:qe,onAuth401:m,getPollIntervalConfig:Fe,initialHistoryCap:oe,initialMessages:y,previouslyFlushedUUIDs:b,onInboundMessage:n,onPermissionResponse:r,onInterrupt:a,onSetModel:s,onSetMaxThinkingTokens:d,onSetPermissionMode:h,onStateChange:g,perpetual:te})}var gt=50;function _t(e){let t=D(e),n=(/^(.*?[.!?])\s/.exec(t)?.[1]??t).replace(/\s+/g,` `).trim();if(n)return n.length>gt?n.slice(0,gt-1)+`…`:n}export{ht as initReplBridge};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,r as t}from"./language-yGoDFP3X.js";t();export{e as getResolvedLanguage};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as e,t}from"./loadAgentsDir-D7kapZB5.js";e();export{t as clearAgentDefinitionsCache};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Av as e,Nv as t,jv as n}from"./loadAgentsDir-D7kapZB5.js";e();export{n as loadPluginHooks,t as setupPluginHookHotReload};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,c as t,o as n,t as r}from"./localSearch-r1_G8kfV.js";n();export{r as clearSkillIndexCache,e as getSkillIndex,t as searchSkills};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,r as t,t as n}from"./login-7MvpaOkt.js";t();export{n as Login,e as call};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{DT as e,ET as t,OT as n,kT as r}from"./loadAgentsDir-D7kapZB5.js";n();export{t as call,e as clearAuthRelatedCaches,r as performLogout};
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import{o as e}from"./chunk-DR8-3Aex.js";import{n as t,t as n}from"./p-map-D7WEmnBE.js";import{Mt as r,Rn as i,T as a,b as o,f as s,g as c,h as l,t as u,v as ee,x as te}from"./src-Di342QoJ.js";import{t as d}from"./jsx-runtime-D-D469L8.js";import{Ac as f,Nc as p,Po as m,Sc as h,bc as g,jo as ne}from"./paths-1ngPRtu3.js";import{V as re,W as _}from"./debug-UI3T040K.js";import{n as ie,r as v}from"./analytics-DqMQntaB.js";import{n as y,o as b}from"./process-DMKLUQIO.js";import{i as x,o as S}from"./platform-CuyedWpe.js";import{s as C,u as w}from"./types-Csi32ZXh.js";import{BC as T,CC as E,Cx as D,DC as ae,MS as oe,NS as O,QC as k,SC as A,TC as j,Tx as M,VC as N,XS as P,YT as F,ZC as I,ZS as L,bC as R,cw as z,dw as B,dy as V,fy as H,hw as U,lw as W,ow as G,oy as K,qT as q,sy as se,tw as J,xC as ce,yx as le}from"./loadAgentsDir-D7kapZB5.js";import{n as Y,t as X}from"./exit-_obETqBv.js";import{stat as ue}from"fs/promises";import{cwd as de}from"process";n();var Z=e(i(),1);F(),y(),u(),B(),ne(),L(),H();var Q=d();function fe({servers:e,scope:t,onDone:n}){let r=Object.keys(e),[i,u]=(0,Z.useState)({});(0,Z.useEffect)(()=>{G().then(({servers:e})=>u(e))},[]);let d=r.filter(e=>i[e]!==void 0);async function f(n){let r=0;for(let a of n){let n=e[a];if(n){let e=a;if(i[e]!==void 0){let t=1;for(;i[`${a}_${t}`]!==void 0;)t++;e=`${a}_${t}`}await J(e,n,t),r++}}h(r)}let[p]=a(),h=(0,Z.useCallback)(e=>{b(e>0?`\n${ee(`success`,p)(`Successfully imported ${e} MCP ${m(e,`server`)} to ${t} config.`)}\n`:`
|
|
2
|
-
No servers were imported.`),n(),q()},[p,t,n]),g=(0,Z.useCallback)(()=>{h(0)},[h]);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(s,{title:`Import MCP Servers from Claude Desktop`,subtitle:`Found ${r.length} MCP ${m(r.length,`server`)} in Claude Desktop.`,color:`success`,onCancel:g,hideInputGuide:!0,children:[d.length>0&&(0,Q.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,Q.jsx)(o,{children:`Please select the servers you want to import:`}),(0,Q.jsx)(V,{options:r.map(e=>({label:`${e}${d.includes(e)?` (already exists)`:``}`,value:e})),defaultValue:r.filter(e=>!d.includes(e)),onSubmit:f,onCancel:g,hideIndexes:!0})]}),(0,Q.jsx)(te,{paddingX:1,children:(0,Q.jsx)(o,{dimColor:!0,italic:!0,children:(0,Q.jsxs)(l,{children:[(0,Q.jsx)(c,{shortcut:`Space`,action:`select`}),(0,Q.jsx)(c,{shortcut:`Enter`,action:`confirm`}),(0,Q.jsx)(P,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`cancel`})]})})})]})}u(),se(),ie(),E(),M(),B(),k(),O(),f(),re(),F(),C(),S();async function $(e,t){try{let n=await le(e,t);return n.type===`connected`?`✓ Connected`:n.type===`needs-auth`?`! Needs authentication`:`✗ Failed to connect`}catch{return`✗ Connection error`}}async function pe({debug:e,verbose:t}){let n=de();v(`tengu_mcp_start`,{});try{await ue(n)}catch(e){throw _(e)&&X(`Error: Directory ${n} does not exist`),e}try{let{setup:r}=await import(`./setup-BZMVuIIx.js`);await r(n,`default`,!1,!1,void 0,!1);let{startMCPServer:i}=await import(`./mcp-BTgHgOhR.js`);await i(n,e??!1,t??!1)}catch(e){X(`Error: Failed to start MCP server: ${e}`)}}async function me(e,t){let n=z(e),r=()=>{n&&(n.type===`sse`||n.type===`http`)&&(ce(e,n),R(e,n))};try{if(t.scope){let n=N(t.scope);v(`tengu_mcp_delete`,{name:e,scope:n}),await U(e,n),r(),process.stdout.write(`Removed MCP server ${e} from ${n} config\n`),Y(`File modified: ${T(n)}`)}let n=g(),i=h(),{servers:a}=W(`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)X(`No MCP server found with name: "${e}"`);else if(s.length===1){let t=s[0];v(`tengu_mcp_delete`,{name:e,scope:t}),await U(e,t),r(),process.stdout.write(`Removed MCP server "${e}" from ${t} config\n`),Y(`File modified: ${T(t)}`)}else process.stderr.write(`MCP server "${e}" exists in multiple scopes:\n`),s.forEach(e=>{process.stderr.write(` - ${I(e)} (${T(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`)}),X()}catch(e){X(e.message)}}async function he(){v(`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 $(e,t)}),{concurrency:D()});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 q(0)}async function ge(e){v(`tengu_mcp_get`,{name:e});let t=z(e);t||X(`No MCP server found with name: ${e}`),console.log(`${e}:`),console.log(` Scope: ${I(t.scope)}`);let n=await $(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`),A(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`),A(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 q(0)}async function _e(e,t,n){try{let r=N(n.scope),i=w(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 j():void 0;await J(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`&&ae(e,{type:i.type,url:i.url},a),v(`tengu_mcp_add`,{scope:r,source:`json`,type:o}),Y(`Added ${o} MCP server ${e} to ${r} config`)}catch(e){X(e.message)}}async function ve(e){try{let t=N(e.scope);v(`tengu_mcp_add`,{scope:t,platform:x(),source:`desktop`});let{readClaudeDesktopMcpServers:n}=await import(`./claudeDesktop-D0S1eq1F.js`),i=await n();Object.keys(i).length===0&&Y(`No MCP servers found in Claude Desktop configuration or configuration file does not exist.`);let{unmount:a}=await r((0,Q.jsx)(oe,{children:(0,Q.jsx)(K,{children:(0,Q.jsx)(fe,{servers:i,scope:t,onDone:()=>{a()}})})}),{exitOnCtrlC:!0})}catch(e){X(e.message)}}async function ye(){v(`tengu_mcp_reset_mcpjson_choices`,{}),p(e=>({...e,enabledMcpjsonServers:[],disabledMcpjsonServers:[],enableAllProjectMcpServers:!1})),Y(`All project-scoped (.mcp.json) server approvals and rejections have been reset.
|
|
6
|
-
You will be prompted for approval next time you start Claude Code.`)}export{ve as mcpAddFromDesktopHandler,_e as mcpAddJsonHandler,ge as mcpGetHandler,he as mcpListHandler,me as mcpRemoveHandler,ye as mcpResetChoicesHandler,pe as mcpServeHandler};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,o as t}from"./chunk-DR8-3Aex.js";import{n,t as r}from"./figures-gfT9mM8P.js";import{Q as i,Rn as a,T as o,b as s,f as c,g as l,h as u,nt as d,t as f,tt as p,v as m,x as h}from"./src-Di342QoJ.js";import{t as g}from"./jsx-runtime-D-D469L8.js";import{Do as _,Po as v,jo as y}from"./paths-1ngPRtu3.js";import{c as b,s as x}from"./debug-UI3T040K.js";import{BC as S,CC as C,FS as w,NS as T,PS as E,QC as D,XS as O,YC as k,ZS as A,gy as j,kx as M,qC as N,uy as ee,vC as te,vy as P,wC as ne,yC as re}from"./loadAgentsDir-D7kapZB5.js";import{D as ie,O as ae}from"./rcDebugLog-CPGWJbI4.js";import{t as F}from"./useKeybinding-FsOnjW6T.js";import{i as oe,n as I,r as se}from"./MCPConnectionManager-BK_3uwQj.js";import{n as ce,t as le}from"./McpParsingWarnings-BOj-T8F3.js";import{a as ue,c as L,i as R,l as de,n as fe,o as z,r as pe,s as me,t as he,u as B}from"./PluginSettings-DGpIVGvV.js";function ge({agentServer:e,onCancel:t,onComplete:n}){let[a]=o(),[d,f]=(0,V.useState)(!1),[g,v]=(0,V.useState)(null),[y,b]=(0,V.useState)(null),x=(0,V.useRef)(null);(0,V.useEffect)(()=>()=>x.current?.abort(),[]),p(`confirm:no`,(0,V.useCallback)(()=>{d&&(x.current?.abort(),x.current=null,f(!1),b(null))},[d]),{context:`Confirmation`,isActive:d});let S=(0,V.useCallback)(async()=>{if(!e.needsAuth||!e.url)return;f(!0),v(null);let t=new AbortController;x.current=t;try{let r={type:e.transport,url:e.url};await ne(e.name,r,b,t.signal),n?.(`Authentication successful for ${e.name}. The server will connect when the agent runs.`)}catch(e){e instanceof Error&&!(e instanceof te)&&v(e.message)}finally{f(!1),x.current=null}},[e,n]),C=_(String(e.name));if(d)return(0,H.jsxs)(h,{flexDirection:`column`,gap:1,padding:1,children:[(0,H.jsxs)(s,{color:`claude`,children:[`Authenticating with `,e.name,`…`]}),(0,H.jsxs)(h,{children:[(0,H.jsx)(j,{}),(0,H.jsx)(s,{children:` A browser window will open for authentication`})]}),y&&(0,H.jsxs)(h,{flexDirection:`column`,children:[(0,H.jsx)(s,{dimColor:!0,children:`If your browser doesn't open automatically, copy this URL manually:`}),(0,H.jsx)(i,{url:y})]}),(0,H.jsx)(h,{marginLeft:3,children:(0,H.jsxs)(s,{dimColor:!0,children:[`Return here after authenticating in your browser.`,` `,(0,H.jsx)(O,{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,H.jsxs)(c,{title:`${C} MCP Server`,subtitle:`agent-only`,onCancel:t,inputGuide:e=>e.pending?(0,H.jsxs)(s,{children:[`Press `,e.keyName,` again to exit`]}):(0,H.jsxs)(u,{children:[(0,H.jsx)(l,{shortcut:`↑↓`,action:`navigate`}),(0,H.jsx)(l,{shortcut:`Enter`,action:`confirm`}),(0,H.jsx)(O,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`go back`})]}),children:[(0,H.jsxs)(h,{flexDirection:`column`,gap:0,children:[(0,H.jsxs)(h,{children:[(0,H.jsx)(s,{bold:!0,children:`Type: `}),(0,H.jsx)(s,{dimColor:!0,children:e.transport})]}),e.url&&(0,H.jsxs)(h,{children:[(0,H.jsx)(s,{bold:!0,children:`URL: `}),(0,H.jsx)(s,{dimColor:!0,children:e.url})]}),e.command&&(0,H.jsxs)(h,{children:[(0,H.jsx)(s,{bold:!0,children:`Command: `}),(0,H.jsx)(s,{dimColor:!0,children:e.command})]}),(0,H.jsxs)(h,{children:[(0,H.jsx)(s,{bold:!0,children:`Used by: `}),(0,H.jsx)(s,{dimColor:!0,children:e.sourceAgents.join(`, `)})]}),(0,H.jsxs)(h,{marginTop:1,children:[(0,H.jsx)(s,{bold:!0,children:`Status: `}),(0,H.jsxs)(s,{children:[m(`inactive`,a)(r.radioOff),` not connected (agent-only)`]})]}),e.needsAuth&&(0,H.jsxs)(h,{children:[(0,H.jsx)(s,{bold:!0,children:`Auth: `}),e.isAuthenticated?(0,H.jsxs)(s,{children:[m(`success`,a)(r.tick),` authenticated`]}):(0,H.jsxs)(s,{children:[m(`warning`,a)(r.triangleUpOutline),` may need authentication`]})]})]}),(0,H.jsx)(h,{children:(0,H.jsx)(s,{dimColor:!0,children:`This server connects only when running the agent.`})}),g&&(0,H.jsx)(h,{children:(0,H.jsxs)(s,{color:`error`,children:[`Error: `,g]})}),(0,H.jsx)(h,{children:(0,H.jsx)(M,{options:w,onChange:async e=>{switch(e){case`auth`:await S();break;case`back`:t();break}},onCancel:t})})]})}var V,H,U=e((()=>{n(),V=t(a(),1),f(),F(),C(),y(),A(),ee(),P(),H=g()}));function W(e){switch(e){case`project`:return{label:`Project MCPs`,path:S(e)};case`user`:return{label:`User MCPs`,path:S(e)};case`local`:return{label:`Local MCPs`,path:S(e)};case`enterprise`:return{label:`Enterprise MCPs`};case`dynamic`:return{label:`Built-in MCPs`,path:`always available`};default:return{label:e}}}function _e(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 ve({servers:e,agentServers:t=[],onSelectServer:n,onSelectAgentServer:a,onComplete:f}){let[p]=o(),[g,_]=(0,G.useState)(0),y=G.useMemo(()=>_e(e.filter(e=>e.client.config.type!==`claudeai-proxy`)),[e]),x=G.useMemo(()=>e.filter(e=>e.client.config.type===`claudeai-proxy`).sort((e,t)=>e.name.localeCompare(t.name)),[e]),S=G.useMemo(()=>(y.get(`dynamic`)??[]).sort((e,t)=>e.name.localeCompare(t.name)),[y]),C=W(`dynamic`),w=G.useMemo(()=>{let e=[];for(let t of q){let n=y.get(t)??[];for(let t of n)e.push({type:`server`,server:t})}for(let t of x)e.push({type:`server`,server:t});for(let n of t)e.push({type:`agent-server`,agentServer:n});for(let t of S)e.push({type:`server`,server:t});return e},[y,x,t,S]),T=(0,G.useCallback)(()=>{f(`MCP dialog dismissed`,{display:`system`})},[f]);d({"confirm:previous":()=>_(e=>e===0?w.length-1:e-1),"confirm:next":()=>_(e=>e===w.length-1?0:e+1),"confirm:yes":(0,G.useCallback)(()=>{let e=w[g];e&&(e.type===`server`?n(e.server):e.type===`agent-server`&&a&&a(e.agentServer))},[w,g,n,a]),"confirm:no":T},{context:`Confirmation`});let E=e=>w.findIndex(t=>t.type===`server`&&t.server===e),D=e=>w.findIndex(t=>t.type===`agent-server`&&t.agentServer===e),k=b(),A=e.some(e=>e.client.type===`failed`);if(e.length===0&&t.length===0)return null;let j=e=>{let t=E(e),n=g===t,i=``,a=``;if(e.client.type===`disabled`)i=m(`inactive`,p)(r.radioOff),a=`disabled`;else if(e.client.type===`connected`)i=m(`success`,p)(r.tick),a=`connected`;else if(e.client.type===`pending`){i=m(`inactive`,p)(r.radioOff);let{reconnectAttempt:t,maxReconnectAttempts:n}=e.client;a=t&&n?`reconnecting (${t}/${n})…`:`connecting…`}else e.client.type===`needs-auth`?(i=m(`warning`,p)(r.triangleUpOutline),a=`needs authentication`):(i=m(`error`,p)(r.cross),a=`failed`);return(0,K.jsxs)(h,{children:[(0,K.jsx)(s,{color:n?`suggestion`:void 0,children:n?`${r.pointer} `:` `}),(0,K.jsx)(s,{color:n?`suggestion`:void 0,children:e.name}),(0,K.jsxs)(s,{dimColor:!n,children:[` · `,i,` `]}),(0,K.jsx)(s,{dimColor:!n,children:a})]},`${e.name}-${t}`)},M=e=>{let t=D(e),n=g===t,i=e.needsAuth?m(`warning`,p)(r.triangleUpOutline):m(`inactive`,p)(r.radioOff),a=e.needsAuth?`may need auth`:`agent-only`;return(0,K.jsxs)(h,{children:[(0,K.jsx)(s,{color:n?`suggestion`:void 0,children:n?`${r.pointer} `:` `}),(0,K.jsx)(s,{color:n?`suggestion`:void 0,children:e.name}),(0,K.jsxs)(s,{dimColor:!n,children:[` · `,i,` `]}),(0,K.jsx)(s,{dimColor:!n,children:a})]},`agent-${e.name}-${t}`)},N=e.length+t.length;return(0,K.jsxs)(h,{flexDirection:`column`,children:[(0,K.jsx)(le,{}),(0,K.jsx)(c,{title:`Manage MCP servers`,subtitle:`${N} ${v(N,`server`)}`,onCancel:T,hideInputGuide:!0,children:(0,K.jsxs)(h,{flexDirection:`column`,children:[q.map(e=>{let t=y.get(e);if(!t||t.length===0)return null;let n=W(e);return(0,K.jsxs)(h,{flexDirection:`column`,marginBottom:1,children:[(0,K.jsxs)(h,{paddingLeft:2,children:[(0,K.jsx)(s,{bold:!0,children:n.label}),n.path&&(0,K.jsxs)(s,{dimColor:!0,children:[` (`,n.path,`)`]})]}),t.map(e=>j(e))]},e)}),x.length>0&&(0,K.jsxs)(h,{flexDirection:`column`,marginBottom:1,children:[(0,K.jsx)(h,{paddingLeft:2,children:(0,K.jsx)(s,{bold:!0,children:`claude.ai`})}),x.map(e=>j(e))]}),t.length>0&&(0,K.jsxs)(h,{flexDirection:`column`,marginBottom:1,children:[(0,K.jsx)(h,{paddingLeft:2,children:(0,K.jsx)(s,{bold:!0,children:`Agent MCPs`})}),[...new Set(t.flatMap(e=>e.sourceAgents))].map(e=>(0,K.jsxs)(h,{flexDirection:`column`,marginTop:1,children:[(0,K.jsx)(h,{paddingLeft:2,children:(0,K.jsxs)(s,{dimColor:!0,children:[`@`,e]})}),t.filter(t=>t.sourceAgents.includes(e)).map(e=>M(e))]},e))]}),S.length>0&&(0,K.jsxs)(h,{flexDirection:`column`,marginBottom:1,children:[(0,K.jsxs)(h,{paddingLeft:2,children:[(0,K.jsx)(s,{bold:!0,children:C.label}),C.path&&(0,K.jsxs)(s,{dimColor:!0,children:[` (`,C.path,`)`]})]}),S.map(e=>j(e))]}),(0,K.jsxs)(h,{flexDirection:`column`,children:[A&&(0,K.jsx)(s,{dimColor:!0,children:k?`※ Error logs shown inline with --debug`:`※ Run claude --debug to see error logs`}),(0,K.jsxs)(s,{dimColor:!0,children:[(0,K.jsx)(i,{url:`https://code.claude.com/docs/en/mcp`,children:`https://code.claude.com/docs/en/mcp`}),` for help`]})]})]})}),(0,K.jsx)(h,{paddingX:1,children:(0,K.jsx)(s,{dimColor:!0,italic:!0,children:(0,K.jsxs)(u,{children:[(0,K.jsx)(l,{shortcut:`↑↓`,action:`navigate`}),(0,K.jsx)(l,{shortcut:`Enter`,action:`confirm`}),(0,K.jsx)(O,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`cancel`})]})})})]})}var G,K,q,ye=e((()=>{n(),G=t(a(),1),f(),F(),D(),x(),y(),A(),ce(),K=g(),q=[`project`,`local`,`user`,`enterprise`]}));function be({serverName:e,onComplete:t}){let[n]=o(),i=w(),a=se(),[c,l]=(0,J.useState)(!0),[u,d]=(0,J.useState)(null);return(0,J.useEffect)(()=>{async function n(){try{if(!i.getState().mcp.clients.find(t=>t.name===e)){d(`MCP server "${e}" not found`),l(!1),t(`MCP server "${e}" not found`);return}switch((await a(e)).client.type){case`connected`:l(!1),t(`Successfully reconnected to ${e}`);break;case`needs-auth`:d(`${e} requires authentication`),l(!1),t(`${e} requires authentication. Use /mcp to authenticate.`);break;case`pending`:case`failed`:case`disabled`:d(`Failed to reconnect to ${e}`),l(!1),t(`Failed to reconnect to ${e}`);break}}catch(e){let n=e instanceof Error?e.message:String(e);d(n),l(!1),t(`Error: ${n}`)}}n()},[e,a,i,t]),c?(0,Y.jsxs)(h,{flexDirection:`column`,gap:1,padding:1,children:[(0,Y.jsxs)(s,{color:`text`,children:[`Reconnecting to `,(0,Y.jsx)(s,{bold:!0,children:e})]}),(0,Y.jsxs)(h,{children:[(0,Y.jsx)(j,{}),(0,Y.jsx)(s,{children:` Establishing connection to MCP server`})]})]}):u?(0,Y.jsxs)(h,{flexDirection:`column`,gap:1,padding:1,children:[(0,Y.jsxs)(h,{children:[(0,Y.jsxs)(s,{children:[m(`error`,n)(r.cross),` `]}),(0,Y.jsxs)(s,{color:`error`,children:[`Failed to reconnect to `,e]})]}),(0,Y.jsxs)(s,{dimColor:!0,children:[`Error: `,u]})]}):null}var J,Y,xe=e((()=>{n(),J=t(a(),1),f(),I(),T(),P(),Y=g()}));function Se({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(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 re(e.name,e.config).tokens(),r=ie()!==null&&e.type===`connected`,i=e.type===`connected`&&k(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)(ve,{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=k(t.tools,i.server.name),r=i.server.transport===`claudeai-proxy`?`claude.ai`:`Claude Code`;return i.server.transport===`stdio`?(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}):(0,Z.jsx)(de,{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)(pe,{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=k(t.tools,i.server.name)[i.toolIndex];return e?(0,Z.jsx)(ue,{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)(ge,{agentServer:i.agentServer,onCancel:()=>a({type:`list`,defaultTab:`Agents`}),onComplete:e})}}var X,Z,Ce=e((()=>{X=t(a(),1),C(),D(),T(),ae(),U(),ye(),B(),L(),z(),R(),Z=g()})),we=e((()=>{U(),ye(),xe(),B(),Ce(),L(),z(),R()}));function Te({action:e,target:t,onComplete:n}){let r=E(e=>e.mcp.clients),i=oe(),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)(Se,{onComplete:e});if(t[0]===`reconnect`&&t[1])return(0,$.jsx)(be,{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)(he,{onComplete:e,args:`manage`,showMcpRedirectMessage:!0}):(0,$.jsx)(Se,{onComplete:e})}var Q,$;e((()=>{Q=t(a(),1),we(),xe(),I(),T(),fe(),$=g()}))();export{Ee as call};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Dr as e,Pr as t}from"./paths-1ngPRtu3.js";t();export{e as getMainLoopModel};
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./chunk-DR8-3Aex.js";import{l as t,s as n,u as r}from"./envUtils-BWeoiL4Y.js";import{ai as i,ci as a,cr as o,dr as s}from"./paths-1ngPRtu3.js";import{d as c,s as l}from"./debug-UI3T040K.js";import{o as u,u as d}from"./proxy-CfZp-wce.js";import{AT as f,FE as p,IE as m,Ko as h,Lo as g,MT as ee,Wo as _,Xc as v,Yc as y,Zc as b,__ as x,bo as S,co as C,fm as te,g_ as ne,gm as w,h_ as T,jT as E,m_ as D,st as O,ut as k}from"./loadAgentsDir-D7kapZB5.js";import{Bn as A,Hn as re,Vn as j,i as ie,r as M,t as N}from"./prompt-BBg3jtfc.js";import{F as ae,I as P,L as F,P as I,R as L,Y as R}from"./rcDebugLog-CPGWJbI4.js";import{r as z,t as B}from"./store-DhI7Lcan.js";import{i as V,n as H,r as U,t as W}from"./openaiShared-D5lOejS1.js";import{randomUUID as G}from"crypto";function K(e){if(!e)return 0;let t=0,n=/(\d+(?:\.\d+)?)(ms|s|m|h|d)/g,r;for(;(r=n.exec(e))!==null;){let e=Number(r[1]);switch(r[2]){case`ms`:t+=e/1e3;break;case`s`:t+=e;break;case`m`:t+=e*60;break;case`h`:t+=e*3600;break;case`d`:t+=e*86400;break}}if(t===0){let n=Number(e);Number.isFinite(n)&&(t=n)}return t<=0?0:Math.floor(Date.now()/1e3)+t}function q(e,t){if(e===null||t===null)return null;let n=Number(e),r=Number(t);if(!Number.isFinite(n)||!Number.isFinite(r)||r<=0)return null;let i=Math.max(0,r-n);return Math.min(1,Math.max(0,i/r))}var J,oe=e((()=>{J={providerId:`openai`,parseHeaders(e){let t=[],n=q(e.get(`x-ratelimit-remaining-requests`),e.get(`x-ratelimit-limit-requests`));n!==null&&t.push({kind:`requests`,label:`RPM`,utilization:n,resetsAt:K(e.get(`x-ratelimit-reset-requests`))||void 0});let r=q(e.get(`x-ratelimit-remaining-tokens`),e.get(`x-ratelimit-limit-tokens`));return r!==null&&t.push({kind:`tokens`,label:`TPM`,utilization:r,resetsAt:K(e.get(`x-ratelimit-reset-tokens`))||void 0}),t}}}));function se(e){return async(...t)=>{let n=await e(...t);try{z(`openai`,J.parseHeaders(n.headers))}catch{}return n}}function ce(e){if(Y)return Y;let t=process.env.OPENAI_API_KEY||``,n=process.env.OPENAI_BASE_URL,r=se(e?.fetchOverride??globalThis.fetch),i=new V({apiKey:t,...n&&{baseURL:n},maxRetries:e?.maxRetries??0,timeout:parseInt(process.env.API_TIMEOUT_MS||`600000`,10),dangerouslyAllowBrowser:!0,...process.env.OPENAI_ORG_ID&&{organization:process.env.OPENAI_ORG_ID},...process.env.OPENAI_PROJECT_ID&&{project:process.env.OPENAI_PROJECT_ID},fetchOptions:u({forAnthropicAPI:!1}),fetch:r});return e?.fetchOverride||(Y=i),i}var Y,le=e((()=>{U(),oe(),B(),d(),Y=null}));function X(e){return typeof e==`string`?e:Array.isArray(e)?e.map(e=>{if(!e||typeof e!=`object`)return``;let t=e;return typeof t.text==`string`?t.text:``}).filter(Boolean).join(`
|
|
2
|
-
`):``}function ue(e){if(typeof e==`string`)return e;if(!Array.isArray(e))return X(e);let t=[];for(let n of e){if(!n||typeof n!=`object`)continue;let e=n;if(e.type===`text`&&typeof e.text==`string`)t.push({type:`input_text`,text:e.text});else if(e.type===`image_url`){let n=e.image_url;typeof n?.url==`string`&&t.push({type:`input_image`,image_url:n.url})}}return t.length>0?t:X(e)}function de(e){let t=[],n=[];for(let r of e){if(!r||typeof r!=`object`)continue;let e=r,i=e.role;if(i===`system`||i===`developer`){let t=X(e.content);t&&n.push(t);continue}if(i===`tool`){let n=e.tool_call_id;typeof n==`string`&&t.push({type:`function_call_output`,call_id:n,output:X(e.content)});continue}if(i===`assistant`){let n=X(e.content);n&&t.push({role:`assistant`,content:n});let r=e.tool_calls;if(Array.isArray(r))for(let e of r){if(!e||typeof e!=`object`)continue;let n=e,r=n.function,i=typeof n.id==`string`?n.id:void 0,a=typeof r?.name==`string`?r.name:void 0;!i||!a||t.push({type:`function_call`,call_id:i,name:a,arguments:typeof r?.arguments==`string`?r.arguments:`{}`})}continue}i===`user`&&t.push({role:`user`,content:ue(e.content)})}return{input:t,instructions:n.length>0?n.join(`
|
|
3
|
-
|
|
4
|
-
`):void 0}}function fe(e){let t=[];for(let n of e){if(!n||typeof n!=`object`)continue;let e=n.function,r=typeof e?.name==`string`?e.name:void 0;r&&t.push({type:`function`,name:r,description:typeof e?.description==`string`?e.description:``,parameters:e?.parameters&&typeof e.parameters==`object`?e.parameters:{type:`object`,properties:{}},strict:!1})}return t}function pe(e){if(e===`required`)return`required`;if(e===`auto`)return`auto`;if(!e||typeof e!=`object`)return e;let t=e,n=t.function;return t.type===`function`&&typeof n?.name==`string`?{type:`function`,name:n.name}:e}function me(e){let{input:t,instructions:n}=de(e.messages),r=fe(e.tools);return{model:e.model,stream:!0,store:!1,input:t,...n?{instructions:n}:{},...r.length>0?{tools:r}:{},...e.toolChoice?{tool_choice:pe(e.toolChoice)}:{},...e.reasoningEffort?{reasoning:{effort:e.reasoningEffort}}:{},parallel_tool_calls:!0}}async function*he(e){if(!e.body)throw Error(`ChatGPT response did not include a body`);let t=e.body.getReader(),n=new TextDecoder,r=``;for(;;){let{done:e,value:i}=await t.read();if(e)break;r+=n.decode(i,{stream:!0});let a=r.indexOf(`
|
|
5
|
-
|
|
6
|
-
`);for(;a>=0;){let e=r.slice(0,a);r=r.slice(a+2);let t=e.split(/\r?\n/).filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trimStart()).join(`
|
|
7
|
-
`);if(t&&t!==`[DONE]`){let e=JSON.parse(t);e&&typeof e==`object`&&(yield e)}a=r.indexOf(`
|
|
8
|
-
|
|
9
|
-
`)}}}function ge(e){let t=e?.usage,n=t?.input_tokens_details;return{input_tokens:typeof t?.input_tokens==`number`?t.input_tokens:0,output_tokens:typeof t?.output_tokens==`number`?t.output_tokens:0,cache_creation_input_tokens:0,cache_read_input_tokens:typeof n?.cached_tokens==`number`?n.cached_tokens:0}}function _e(e){return e?.status===`incomplete`?`max_tokens`:`end_turn`}async function*ve(e,t){let n=`msg_${G().replace(/-/g,``).slice(0,24)}`,r=new Map,i=!1,a=-1,o=!1,s=!1,c=async function*(){i||(i=!0,yield{type:`message_start`,message:{id:n,type:`message`,role:`assistant`,content:[],model:t,stop_reason:null,stop_sequence:null,usage:{input_tokens:0,output_tokens:0,cache_creation_input_tokens:0,cache_read_input_tokens:0}}})};for await(let t of e){for await(let e of c())yield e;let e=t.type;if(e===`response.output_text.delta`){o||(s&&(yield{type:`content_block_stop`,index:a},s=!1),a++,o=!0,yield{type:`content_block_start`,index:a,content_block:{type:`text`,text:``}}),yield{type:`content_block_delta`,index:a,delta:{type:`text_delta`,text:String(t.delta??``)}};continue}if(e===`response.reasoning_text.delta`){s||(o&&(yield{type:`content_block_stop`,index:a},o=!1),a++,s=!0,yield{type:`content_block_start`,index:a,content_block:{type:`thinking`,thinking:``,signature:``}}),yield{type:`content_block_delta`,index:a,delta:{type:`thinking_delta`,thinking:String(t.delta??``)}};continue}if(e===`response.output_item.added`){let e=t.item,n=typeof t.output_index==`number`?t.output_index:-1;if(e?.type===`function_call`&&n>=0){o&&(yield{type:`content_block_stop`,index:a},o=!1),s&&(yield{type:`content_block_stop`,index:a},s=!1),a++;let t=String(e.call_id??e.id??`call_${n}`),i=String(e.name??``);r.set(n,{contentIndex:a,open:!0,name:i,id:t}),yield{type:`content_block_start`,index:a,content_block:{type:`tool_use`,id:t,name:i,input:{}}}}continue}if(e===`response.function_call_arguments.delta`){let e=typeof t.output_index==`number`?t.output_index:-1,n=r.get(e);n&&(yield{type:`content_block_delta`,index:n.contentIndex,delta:{type:`input_json_delta`,partial_json:String(t.delta??``)}});continue}if(e===`response.output_item.done`){let e=typeof t.output_index==`number`?t.output_index:-1,n=r.get(e);n?.open&&(yield{type:`content_block_stop`,index:n.contentIndex},n.open=!1);continue}if(e===`response.error`){let e=t.error;throw Error(String(e?.message??`ChatGPT Responses API error`))}if(e===`response.failed`){let e=t.response?.error;throw Error(String(e?.message??`ChatGPT Responses API failed`))}if(e===`response.completed`||e===`response.incomplete`){o&&(yield{type:`content_block_stop`,index:a},o=!1),s&&(yield{type:`content_block_stop`,index:a},s=!1);let e=t.response;yield{type:`message_delta`,delta:{stop_reason:_e(e),stop_sequence:null},usage:ge(e)},yield{type:`message_stop`}}}}async function ye(e){let t=await f(),n=e.fetchOverride??globalThis.fetch,r={Authorization:`Bearer ${t.accessToken}`,"Content-Type":`application/json`,Accept:`text/event-stream`,"OpenAI-Beta":`responses=experimental`,Origin:`https://chatgpt.com`,Referer:`https://chatgpt.com/`,originator:`claude-code-best`};t.accountId&&(r[`ChatGPT-Account-Id`]=t.accountId);let i=await n(`https://chatgpt.com/backend-api/codex/responses`,{method:`POST`,headers:r,body:JSON.stringify(e.request),signal:e.signal});if(!i.ok){let e=await i.text().catch(()=>``);throw Error(`ChatGPT Responses API request failed (${i.status})${e?`: ${e.slice(0,500)}`:``}`)}return he(i)}var be=e((()=>{E()}));function xe(e){if(t(process.env.OPENAI_ENABLE_THINKING))return!1;if(r(process.env.OPENAI_ENABLE_THINKING))return!0;let n=e.toLowerCase();return n.includes(`deepseek`)||n.includes(`mimo`)}function Se(e,t){return t??(process.env.OPENAI_MAX_TOKENS&&parseInt(process.env.OPENAI_MAX_TOKENS,10)||void 0)??(process.env.CLAUDE_CODE_MAX_OUTPUT_TOKENS&&parseInt(process.env.CLAUDE_CODE_MAX_OUTPUT_TOKENS,10)||void 0)??e}function Z(e){let{model:t,messages:n,tools:r,toolChoice:i,enableThinking:a,maxTokens:o,temperatureOverride:s}=e;return{model:t,messages:n,max_tokens:o,...r.length>0&&{tools:r,...i&&{tool_choice:i}},stream:!0,stream_options:{include_usage:!0},...a&&{thinking:{type:`enabled`},enable_thinking:!0,chat_template_kwargs:{thinking:!0,enable_thinking:!0}},...!a&&s!==void 0&&{temperature:s}}}var Ce=e((()=>{n()}));function Q(e){if(e===`low`)return`low`;if(e===`medium`)return`medium`;if(e===`high`)return`high`;if(e===`xhigh`||e===`max`)return`xhigh`;if(typeof e==`number`)return`high`}function we(e){let t=process.env.CLAUDE_CODE_EFFORT_LEVEL?.toLowerCase();if(!(t===`auto`||t===`unset`))return Q(t)??Q(e)??`medium`}function Te(e,t,n,r){if(!r||v())return e;let i=t.filter(e=>n.has(e.name)).map(N).sort().join(`
|
|
10
|
-
`);return i?[S({content:`<available-deferred-tools>\n${i}\n</available-deferred-tools>`,isMeta:!0}),...e]:e}function Ee(e){return e.type===`assistant`||e.type===`user`}function $(e){let{partialMessage:t,contentBlocks:n,tools:r,agentId:i,usage:a,stopReason:o,maxTokens:s}=e,c=[],l=Object.keys(n).sort((e,t)=>Number(e)-Number(t)).map(e=>n[Number(e)]).filter(Boolean);return l.length>0&&c.push({message:{...t,content:_(l,r,i),usage:a,stop_reason:o,stop_sequence:null},requestId:void 0,type:`assistant`,uuid:G(),timestamp:new Date().toISOString()}),o===`max_tokens`&&c.push(C({content:`Output truncated: response exceeded the ${s} token limit. Set OPENAI_MAX_TOKENS or CLAUDE_CODE_MAX_OUTPUT_TOKENS to override.`,apiError:`max_output_tokens`,error:`max_output_tokens`})),c}async function*De(e,t,n,r,a){try{let s=R(a.model),l=h(e,n),u=await b(a.model,n,a.getToolPermissionContext||(async()=>A()),a.agents||[],a.querySource),d=new Set;if(u)for(let e of n)ie(e)&&d.add(e.name);let f=n;u&&d.size>0&&(f=n.filter(e=>!!(!d.has(e.name)||re(e,`SearchExtraTools`))));let p=await Promise.all(f.map(e=>k(e,{getToolPermissionContext:a.getToolPermissionContext,tools:n,agents:a.agents,allowedAgentTypes:a.allowedAgentTypes,model:a.model,deferLoading:u&&d.has(e.name)}))),g=p.filter(e=>{let t=e;return t.type!==`advisor_20260301`&&t.type!==`computer_20250124`}),_=xe(s),v=L(Te(l.filter(Ee),n,d,u),t,{enableThinking:_}),y=F(g),x=P(a.toolChoice),S=we(a.effortValue);if(u){let e=f.filter(e=>d.has(e.name)).length;c(`[OpenAI] Tool search enabled: ${e}/${d.size} deferred tools included, total tools=${y.length}`)}else c(`[OpenAI] Tool search disabled, total tools=${y.length}`);let{upperLimit:C}=o(s),w=Se(C,a.maxOutputTokensOverride);c(`[OpenAI] Calling model=${s}, messages=${v.length}, tools=${y.length}, thinking=${_}`);let E=ee()?ve(await ye({request:me({model:s,messages:v,tools:y,toolChoice:x,reasoningEffort:S}),signal:r,fetchOverride:a.fetchOverride}),s):ae(await ce({maxRetries:0,fetchOverride:a.fetchOverride,source:a.querySource}).chat.completions.create(Z({model:s,messages:v,tools:y,toolChoice:x,enableThinking:_,maxTokens:w,temperatureOverride:a.temperatureOverride}),{signal:r}),s),O={},j=[],M,N=null,I={input_tokens:0,output_tokens:0,cache_creation_input_tokens:0,cache_read_input_tokens:0},z=0,B=Date.now();for await(let e of E){switch(e.type){case`message_start`:M=e.message,z=Date.now()-B,e.message?.usage&&(I={...I,...e.message.usage});break;case`content_block_start`:{let t=e.index,n=e.content_block;n.type===`tool_use`?O[t]={...n,input:``}:n.type===`text`?O[t]={...n,text:``}:n.type===`thinking`?O[t]={...n,thinking:``,signature:``}:O[t]={...n};break}case`content_block_delta`:{let t=e.index,n=e.delta,r=O[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`:break;case`message_delta`:{let t=e.usage;t&&(I=H(I,t)),e.delta?.stop_reason!=null&&(N=e.delta.stop_reason);break}case`message_stop`:if(M){for(let e of $({partialMessage:M,contentBlocks:O,tools:n,agentId:a.agentId,usage:I,stopReason:N,maxTokens:w}))e.type===`assistant`&&j.push(e),yield e;M=null}I.input_tokens+I.output_tokens>0&&te(i(s,I),I,a.model);break}yield{type:`stream_event`,event:e,...e.type===`message_start`?{ttftMs:z}:void 0}}if(m(a.langfuseTrace??null,{model:s,provider:`openai`,input:D(v),output:T(j),usage:{input_tokens:I.input_tokens,output_tokens:I.output_tokens,cache_creation_input_tokens:I.cache_creation_input_tokens,cache_read_input_tokens:I.cache_read_input_tokens},startTime:new Date(B),endTime:new Date,completionStartTime:z>0?new Date(B+z):void 0,tools:ne(p),..._&&{thinking:{type:`enabled`}}}),M)for(let e of $({partialMessage:M,contentBlocks:O,tools:n,agentId:a.agentId,usage:I,stopReason:N,maxTokens:w}))yield e}catch(e){let t=e instanceof Error?e.message:String(e);c(`[OpenAI] Error: ${t}`,{level:`error`}),yield C({content:`API Error: ${t}`,apiError:`api_error`,error:e instanceof Error?e:Error(String(e))})}}e((()=>{le(),W(),I(),E(),be(),g(),O(),j(),l(),w(),a(),Ce(),p(),x(),s(),y(),M()}))();export{De as queryModelOpenAI};
|