@readmagic/workmate 0.0.11 → 0.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{AddWorkspaceDirectory-ag2JTpmU.js → AddWorkspaceDirectory-CtRxzRny.js} +1 -1
- package/dist/chunks/AgentsMdExternalIncludesDialog-_bI4jo_P.js +1 -0
- package/dist/chunks/{ClaudeMdExternalIncludesDialog-CSywJdVL.js → AgentsMdExternalIncludesDialog-_yJJ0wqu.js} +1 -1
- package/dist/chunks/{App-BuKmqFPm.js → App-DoAZ7CYS.js} +1 -1
- package/dist/chunks/{ApproveApiKey-M6U-NafA.js → ApproveApiKey-C8LwmDM2.js} +1 -1
- package/dist/chunks/ApproveApiKey-DQP3qmb0.js +1 -0
- package/dist/chunks/BackgroundTasksDialog-CDA2noEk.js +2 -0
- package/dist/chunks/{BypassPermissionsModeDialog-B05t83wa.js → BypassPermissionsModeDialog-COI_V57z.js} +1 -1
- package/dist/chunks/ConsoleOAuthFlow-Dn8fO-o_.js +1 -0
- package/dist/chunks/{DiffDialog-DUbFrzKu.js → DiffDialog-CRWtQ1R5.js} +3 -3
- package/dist/chunks/Doctor-CZ513Df9.js +3 -0
- package/dist/chunks/Doctor-CzPvNZzF.js +1 -0
- package/dist/chunks/ExitFlow-BFeftDv0.js +2 -0
- package/dist/chunks/{Grove-BDoVj02t.js → Grove-DRZrhbF0.js} +1 -1
- package/dist/chunks/{HybridTransport-C_U0IJfz.js → HybridTransport-BadJQe6u.js} +2 -2
- package/dist/chunks/{InvalidConfigDialog-bih293Xt.js → InvalidConfigDialog-DQaT6aen.js} +1 -1
- package/dist/chunks/{InvalidSettingsDialog-Br8kQOHz.js → InvalidSettingsDialog-ISzcIGPU.js} +1 -1
- package/dist/chunks/MCPConnectionManager-BpjC7CEo.js +1 -0
- package/dist/chunks/MCPToolListView-Rb1Q--jG.js +1 -0
- package/dist/chunks/{McpParsingWarnings-COa71S9q.js → McpParsingWarnings-xv0RZCSL.js} +1 -1
- package/dist/chunks/MessageSelector-BHB55sZb.js +3 -0
- package/dist/chunks/Messages-CPX-nIdA.js +11 -0
- package/dist/chunks/Onboarding-CymgipoF.js +1 -0
- package/dist/chunks/{PromptInputFooterSuggestions-to5eYBvI.js → PromptInputFooterSuggestions-8-awCxOn.js} +1 -1
- package/dist/chunks/PromptInputHelpMenu-BP3UgCdi.js +1 -0
- package/dist/chunks/QueryEngine-HkswHUNv.js +1 -0
- package/dist/chunks/REPL-CZfg65kg.js +133 -0
- package/dist/chunks/REPL-eZsYNBfl.js +1 -0
- package/dist/chunks/RemoteSessionManager-B4jqKVd3.js +2 -0
- package/dist/chunks/ResumeConversation-B03XN_SP.js +1 -0
- package/dist/chunks/{SSETransport-DN4tCDEh.js → SSETransport-je346ofV.js} +1 -1
- package/dist/chunks/SearchExtraToolsTool-C85Sanww.js +1 -0
- package/dist/chunks/Settings-C8GKWod1.js +2 -0
- package/dist/chunks/{TeleportProgress-C2LQVLav.js → TeleportProgress-zmdAsogZ.js} +1 -1
- package/dist/chunks/{TeleportRepoMismatchDialog-BZL8Zblz.js → TeleportRepoMismatchDialog-CG32I4cO.js} +1 -1
- package/dist/chunks/{TeleportResumeWrapper-wPiIs8xg.js → TeleportResumeWrapper-2Yjr74Lq.js} +1 -1
- package/dist/chunks/{ThemePicker-BT_NaRQC.js → ThemePicker-p7_hHk1V.js} +1 -1
- package/dist/chunks/TrustDialog-BVcny9vs.js +1 -0
- package/dist/chunks/{ValidationErrorsList-C-hWdy_8.js → ValidationErrorsList-DSSUWdgd.js} +1 -1
- package/dist/chunks/{WelcomeV2-ZQRKlcT4.js → WelcomeV2-BnSYhyfu.js} +1 -1
- package/dist/chunks/add-dir-Bd7pilVx.js +1 -0
- package/dist/chunks/{agentDisplay-CuSHqgZc.js → agentDisplay-CfMLGPGH.js} +1 -1
- package/dist/chunks/{agents-CMC0iQP4.js → agents-BT82hwBN.js} +1 -1
- package/dist/chunks/agents-qR6r94-F.js +103 -0
- package/dist/chunks/allErrors-CS77lRvU.js +1 -0
- package/dist/chunks/api-C4VflFau.js +1 -0
- package/dist/chunks/{api-BbJfMXRS.js → api-DAubp5q9.js} +1 -1
- package/dist/chunks/auth-CNCehj7y.js +1 -0
- package/dist/chunks/auth-DrD9DW6X.js +1 -0
- package/dist/chunks/{auth-7mJGtlZp.js → auth-yDsvFcM7.js} +1 -1
- package/dist/chunks/{autoMode-CBtY7ACs.js → autoMode-C2lnBot9.js} +5 -5
- package/dist/chunks/backgroundHousekeeping-DbpTGbwl.js +1 -0
- package/dist/chunks/backgroundHousekeeping-SpTxViUq.js +17 -0
- package/dist/chunks/{banner-1Wyeyawe.js → banner-BcAM7iSx.js} +1 -1
- package/dist/chunks/bg-Ci7pG4eo.js +9 -0
- package/dist/chunks/{branch-k3kirqbA.js → branch-DJiMa8td.js} +1 -1
- package/dist/chunks/{break-cache-CAoZ9b72.js → break-cache-4rlQORVk.js} +2 -2
- package/dist/chunks/{bridgeConfig-UgaUfuP6.js → bridgeConfig-BB6Hgali.js} +1 -1
- package/dist/chunks/bridgeConfig-Ccm79Jze.js +1 -0
- package/dist/chunks/{bridgeMessaging-Ci5H68MX.js → bridgeMessaging-C9D0Lly2.js} +1 -1
- package/dist/chunks/{bridgePointer-BL8-lGvN.js → bridgePointer-DHWK3LEe.js} +1 -1
- package/dist/chunks/{bridgeStatusUtil-C36w15ge.js → bridgeStatusUtil-D8UbcVrZ.js} +1 -1
- package/dist/chunks/btw-BO2B23f-.js +1 -0
- package/dist/chunks/caches-BQmbXerw.js +1 -0
- package/dist/chunks/caches-Dtjmjm6G.js +1 -0
- package/dist/chunks/{capacityWake-BOySRJUJ.js → capacityWake-ByL6fM6I.js} +1 -1
- package/dist/chunks/{ccrClient-Br4LAofR.js → ccrClient-BG9HU_fW.js} +1 -1
- package/dist/chunks/{claudeDesktop-Bgds1-YT.js → claudeDesktop-Ct_hyICL.js} +1 -1
- package/dist/chunks/{clear-C4Vtnbye.js → clear-B4XN2fib.js} +1 -1
- package/dist/chunks/cliLaunch-OPOtzhvA.js +1 -0
- package/dist/chunks/client-7lIxWcaM.js +1 -0
- package/dist/chunks/client-B-2ccQZk.js +1 -0
- package/dist/chunks/{client-B9404qIP.js → client-BMA05FW8.js} +1 -1
- package/dist/chunks/commands-D_-v6_A0.js +1 -0
- package/dist/chunks/compact-kM0ETtB2.js +2 -0
- package/dist/chunks/config-9rLTDOYW.js +3 -0
- package/dist/chunks/config-Crf6Mzu3.js +1 -0
- package/dist/chunks/{config-kB2eazPX.js → config-DMKtiMzJ.js} +1 -1
- package/dist/chunks/{context-BN7DEjoH.js → context-BY5oO5is.js} +1 -1
- package/dist/chunks/{context-noninteractive-D91W2B8e.js → context-noninteractive-mAQt1p9l.js} +2 -2
- package/dist/chunks/context-noninteractive-tc4KTYfI.js +1 -0
- package/dist/chunks/conversation-CFIn-KsW.js +1 -0
- package/dist/chunks/conversation-DPI7VKBL.js +1 -0
- package/dist/chunks/createSSHSession-DjLSGm-0.js +6 -0
- package/dist/chunks/{createSession-DRqkLZWt.js → createSession-CftIZ3aq.js} +1 -1
- package/dist/chunks/createSession-CjdLcRec.js +1 -0
- package/dist/chunks/crossProjectResume-BJqXBzkf.js +40 -0
- package/dist/chunks/{cwd-Cfdf7z7s.js → cwd-Besi3Os3.js} +1 -1
- package/dist/chunks/cwd-DpqwaYHw.js +1 -0
- package/dist/chunks/datadog-BGati3aQ.js +1 -0
- package/dist/chunks/{debug-BecbSVoN.js → debug-Dr1SjdXn.js} +2 -2
- package/dist/chunks/{debugUtils-CmJfIUxW.js → debugUtils-cK-iOsEV.js} +1 -1
- package/dist/chunks/detached-CqfQYVOi.js +5 -0
- package/dist/chunks/detectRepository-BsKZDRoI.js +1 -0
- package/dist/chunks/{detectRepository-C15umvKN.js → detectRepository-CMEkS5_2.js} +1 -1
- package/dist/chunks/{diff-DeK4bwjw.js → diff-1HsxKGBh.js} +1 -1
- package/dist/chunks/{directoryCompletion-BJCu19HJ.js → directoryCompletion-ByBTSuLu.js} +1 -1
- package/dist/chunks/doctor-CJfvt9zR.js +1 -0
- package/dist/chunks/entry-CrZCZQQC.js +14 -0
- package/dist/chunks/{envUtils-BDhHQY0-.js → envUtils-DcaKZlRU.js} +1 -1
- package/dist/chunks/{esm-Ka3lhafK.js → esm-BkOWaWVb.js} +1 -1
- package/dist/chunks/{execFileNoThrow-DHyW8FMX.js → execFileNoThrow-mXq4K0rl.js} +1 -1
- package/dist/chunks/{execSyncWrapper-CDzB0BM1.js → execSyncWrapper-Ne33rRiD.js} +1 -1
- package/dist/chunks/exit-B8MA4Ltm.js +1 -0
- package/dist/chunks/{extraUsage-BrKbpBK-.js → extraUsage-0pUcYexI.js} +1 -1
- package/dist/chunks/extractMemories-DqhN0lba.js +1 -0
- package/dist/chunks/fast-DT5WDe3L.js +1 -0
- package/dist/chunks/{fast-DWn40OcQ.js → fast-VOu2FUlV.js} +1 -1
- package/dist/chunks/{fileSuggestions-C7Pwq2yj.js → fileSuggestions-Be-pyLLq.js} +1 -1
- package/dist/chunks/firstPartyEventLogger-B8RVGBQB.js +1 -0
- package/dist/chunks/{firstPartyEventLogger-BHjBQH0J.js → firstPartyEventLogger-aFhcruXA.js} +2 -2
- package/dist/chunks/{flushGate-DdJjxCes.js → flushGate-BUSrMj_6.js} +1 -1
- package/dist/chunks/{gemini-DHv2iVfy.js → gemini-DB4M-MYv.js} +1 -1
- package/dist/chunks/{generateSessionName-DhS_6oHd.js → generateSessionName-DhCypqJ_.js} +1 -1
- package/dist/chunks/{genericProcessUtils-B2HcDYhg.js → genericProcessUtils-Dc1pfb7J.js} +1 -1
- package/dist/chunks/git-Bs1vtuvX.js +1 -0
- package/dist/chunks/{git-DBlOv64X.js → git-CoQQ6YEf.js} +1 -1
- package/dist/chunks/{githubRepoPathMapping-CK56bUDe.js → githubRepoPathMapping-CmpEaQoo.js} +1 -1
- package/dist/chunks/goal-TxXtfkQ6.js +3 -0
- package/dist/chunks/{grok-BS57ZhyW.js → grok-D2a_J5wE.js} +1 -1
- package/dist/chunks/{grove-_zlQ83yR.js → grove-BnzBbGsX.js} +2 -2
- package/dist/chunks/{help-C_2tdXHC.js → help-C5ankDi4.js} +1 -1
- package/dist/chunks/{hooks-C7Bn7MBe.js → hooks-BZS105Rd.js} +3 -3
- package/dist/chunks/hooks-D-twhU_z.js +1 -0
- package/dist/chunks/{initReplBridge-NkZRcM77.js → initReplBridge-DL4klK0C.js} +1 -1
- package/dist/chunks/{install-Du-DSVzj.js → install-NZvHd_40.js} +1 -1
- package/dist/chunks/{instrumentation-DMs3b82f.js → instrumentation-CjBlVlFq.js} +4 -4
- package/dist/chunks/{job-rbX1VZmp.js → job-D502Zf8J.js} +1 -1
- package/dist/chunks/{jwtUtils-OzxN2zts.js → jwtUtils-FQWtM6iM.js} +1 -1
- package/dist/chunks/keybindings-D9Boc8FD.js +2 -0
- package/dist/chunks/{launchLocalMemory-BLRCK1_o.js → launchLocalMemory-DxC3LojF.js} +2 -2
- package/dist/chunks/{launchOnboarding-Al_X75Vz.js → launchOnboarding-BLp5k_H4.js} +1 -1
- package/dist/chunks/{loadAgentsDir-BL93ulMm.js → loadAgentsDir-BXtV2jiO.js} +597 -604
- package/dist/chunks/loadAgentsDir-BjsAQWqt.js +1 -0
- package/dist/chunks/{loadPluginHooks-B0au35a4.js → loadPluginHooks-Dt3XQ-3N.js} +1 -1
- package/dist/chunks/{localSearch-C5ipegd9.js → localSearch-CeP4ef0a.js} +1 -1
- package/dist/chunks/localSearch-Cz8Ot7k2.js +1 -0
- package/dist/chunks/{log-Dauqle-Z.js → log-27kCA_9u.js} +1 -1
- package/dist/chunks/{logoV2Utils-CkvOihX7.js → logoV2Utils-CEnU8qad.js} +1 -1
- package/dist/chunks/{magicDocs-DLav5QK0.js → magicDocs-YtfrqVC6.js} +3 -3
- package/dist/chunks/main-CGLCy2pM.js +31 -0
- package/dist/chunks/{main-CVNWNAoh.js → main-CkjTzYj1.js} +42 -42
- package/dist/chunks/{managedEnv-DJSCuqCb.js → managedEnv-B-BNY0xC.js} +1 -1
- package/dist/chunks/managedEnv-K9Si1UuL.js +1 -0
- package/dist/chunks/{mappers-DQxMcezy.js → mappers-IuJeXgvr.js} +1 -1
- package/dist/chunks/mcp-DMBoeQzm.js +6 -0
- package/dist/chunks/mcp-TMOPfLcW.js +1 -0
- package/dist/chunks/mcp-x5rgv-uv.js +2 -0
- package/dist/chunks/{memoize-FeyE7JEh.js → memoize-Co4vS6UF.js} +1 -1
- package/dist/chunks/memory-DDUoR63T.js +1 -0
- package/dist/chunks/{mode-Bl2RZC8M.js → mode-GzBwK--u.js} +2 -2
- package/dist/chunks/model-BydaMaPr.js +1 -0
- package/dist/chunks/model-CDnVaVDR.js +1 -0
- package/dist/chunks/model-CIvbC7rW.js +1 -0
- package/dist/chunks/{modelOptions-BtEZe5BB.js → modelOptions-ut0xePEe.js} +1 -1
- package/dist/chunks/{nativeInstaller-BEwayifa.js → nativeInstaller-fgCMR_c0.js} +1 -1
- package/dist/chunks/oauth-D38aRTUb.js +1 -0
- package/dist/chunks/oauth-U649LV5H.js +1 -0
- package/dist/chunks/{observationStore-BpjlK0pG.js → observationStore-D0rm3GhP.js} +1 -1
- package/dist/chunks/omit-D4Udf-p-.js +1 -0
- package/dist/chunks/{onChangeAppState-ZdwI7boX.js → onChangeAppState-WbvtqDtk.js} +1 -1
- package/dist/chunks/{openai-DWs4D-nQ.js → openai-DaVFXyBB.js} +3 -3
- package/dist/chunks/{panel-CoNfXy3K.js → panel-CoF2a-h4.js} +1 -1
- package/dist/chunks/parser-B2PlJg4C.js +1 -0
- package/dist/chunks/{parser-BH4u7QiV.js → parser-CUUiH40T.js} +1 -1
- package/dist/chunks/partition-CzW_31Y1.js +1 -0
- package/dist/chunks/permissions-BT3lxYBM.js +3 -0
- package/dist/chunks/{pidLock-DgOBc1Xo.js → pidLock-d1VPd6CG.js} +2 -2
- package/dist/chunks/{plan-BNYDTnQd.js → plan-M9DG3AqN.js} +1 -1
- package/dist/chunks/{platform-B0uTQc9P.js → platform-Dg1c9F_1.js} +1 -1
- package/dist/chunks/plugin-BiNHuq3h.js +17 -0
- package/dist/chunks/{pluginAutoupdate-BBU9Jn4p.js → pluginAutoupdate-B5lel6s5.js} +1 -1
- package/dist/chunks/{pluginBlocklist-DXQlbG0P.js → pluginBlocklist-CNGmIlwU.js} +1 -1
- package/dist/chunks/pluginCliCommands-WLOEhb2M.js +1 -0
- package/dist/chunks/{pluginFlagging-DcJ_FQuv.js → pluginFlagging-CXSSOj4J.js} +1 -1
- package/dist/chunks/pluginOperations-BFbty6WT.js +2 -0
- package/dist/chunks/{pluginStartupCheck-CKBFaMFr.js → pluginStartupCheck-BEd0VeQC.js} +1 -1
- package/dist/chunks/pluginStartupCheck-Bcdxg484.js +1 -0
- package/dist/chunks/{plugins-CBW7kPyp.js → plugins-BMZ3aYKP.js} +4 -4
- package/dist/chunks/poorMode-Djw0P9Gu.js +1 -0
- package/dist/chunks/{poorMode-B_xEvuEV.js → poorMode-DxgO_bUb.js} +1 -1
- package/dist/chunks/print-DmoLcwVq.js +26 -0
- package/dist/chunks/processBashCommand-B-VqME9O.js +1 -0
- package/dist/chunks/processSlashCommand-D6zEooTy.js +5 -0
- package/dist/chunks/{projectContext-CIxul6vA.js → projectContext-BN2ZWzOG.js} +1 -1
- package/dist/chunks/{projectContext-RUMJB798.js → projectContext-Bw3o5BrN.js} +1 -1
- package/dist/chunks/prompt-C3RRe4kW.js +1 -0
- package/dist/chunks/{prompt-Dx7IWhBt.js → prompt-CRc2QEZ5.js} +4 -4
- package/dist/chunks/prompt-EtAanewG.js +1 -0
- package/dist/chunks/{promptEditor-WCkmpejM.js → promptEditor-Bo1d8ZLq.js} +2 -2
- package/dist/chunks/{protocolHandler-BiVWrpHi.js → protocolHandler-B83fCYI4.js} +1 -1
- package/dist/chunks/{proxy-CVn7o19p.js → proxy-BEKNaTXI.js} +1 -1
- package/dist/chunks/rcDebugLog-DSchf3Hs.js +1 -0
- package/dist/chunks/{reconciler-C2Nd_e4n.js → reconciler-BGav_ezX.js} +1 -1
- package/dist/chunks/refresh-DumNiLvM.js +1 -0
- package/dist/chunks/{registerProtocol-E0Iu5hEx.js → registerProtocol-DduKPsn_.js} +1 -1
- package/dist/chunks/{reload-plugins-D-3AUT9g.js → reload-plugins-DNEgQ5vo.js} +1 -1
- package/dist/chunks/{remoteBridgeCore-CV6we3ZA.js → remoteBridgeCore-BGOqHADF.js} +1 -1
- package/dist/chunks/{remoteManagedSettings-D26Q09-7.js → remoteManagedSettings-26nhzuca.js} +1 -1
- package/dist/chunks/{rename-CSavuBIE.js → rename-BPknfVGF.js} +1 -1
- package/dist/chunks/{renderOptions-DDLbSMQU.js → renderOptions-45A-EdsK.js} +1 -1
- package/dist/chunks/resume-DGz04xDh.js +2 -0
- package/dist/chunks/ripgrep-BLQnqPnE.js +1 -0
- package/dist/chunks/{ripgrep-C1ydIMzT.js → ripgrep-DQ_ILUJV.js} +1 -1
- package/dist/chunks/{runtimeObserver-L7pSIWBT.js → runtimeObserver-BZrF3GnQ.js} +4 -4
- package/dist/chunks/{runtimeObserver-OU8KrZQG.js → runtimeObserver-CBV-7-w7.js} +1 -1
- package/dist/chunks/sandbox-adapter-DUqeqkQD.js +1 -0
- package/dist/chunks/sandbox-toggle-D61gVqcT.js +1 -0
- package/dist/chunks/searchExtraTools-CgsV6kb1.js +1 -0
- package/dist/chunks/{session-DUYsfPy_.js → session-Dy-_R7KP.js} +2 -2
- package/dist/chunks/sessionFileAccessHooks-BJlrZaRD.js +1 -0
- package/dist/chunks/sessionObserver-BGYoLRGx.js +1 -0
- package/dist/chunks/{sessionObserver-Dv3Ba8eA.js → sessionObserver-CyLpHSkw.js} +2 -2
- package/dist/chunks/{sessionState-D-SaBzWD.js → sessionState-DSWN4tMV.js} +1 -1
- package/dist/chunks/sessionStorage-zJ1esSCE.js +1 -0
- package/dist/chunks/{sessionStoragePortable-JZnGwqUM.js → sessionStoragePortable-BhkGMZWp.js} +1 -1
- package/dist/chunks/{sessionTitle-uCuYaNif.js → sessionTitle-L5tyJgdU.js} +2 -2
- package/dist/chunks/{sessionTracing-Bqb3vJTt.js → sessionTracing-DpHGGIZm.js} +1 -1
- package/dist/chunks/settings-3ionQKNv.js +1 -0
- package/dist/chunks/settings-DiBMs2gM.js +20 -0
- package/dist/chunks/settingsSync-dBqlrbcU.js +1 -0
- package/dist/chunks/setup-zf3v3ICe.js +3 -0
- package/dist/chunks/{shadowedRuleDetection-BzAZ57p2.js → shadowedRuleDetection-DZ0AA2Rw.js} +1 -1
- package/dist/chunks/{shellQuote-DS6WrivY.js → shellQuote-C_I6DHLV.js} +1 -1
- package/dist/chunks/{sideQuestion-CvMBBjI8.js → sideQuestion-BYT8FdPF.js} +1 -1
- package/dist/chunks/sinks-DppGvgz1.js +1 -0
- package/dist/chunks/{sinks-f7qYjbKJ.js → sinks-mFsijQ_S.js} +2 -2
- package/dist/chunks/skillChangeDetector-D-iq09Xs.js +1 -0
- package/dist/chunks/{skillGapStore-CqaT8c0C.js → skillGapStore-DQXHqoP7.js} +2 -2
- package/dist/chunks/{skillLifecycle-CnR8IqJM.js → skillLifecycle-BG_RnGSh.js} +2 -2
- package/dist/chunks/{skillSearchPanel-D9qrOXpI.js → skillSearchPanel-DxYP4Q6R.js} +5 -5
- package/dist/chunks/skills-BD-2ofXA.js +1 -0
- package/dist/chunks/startupProfiler-CUlV07MD.js +1 -0
- package/dist/chunks/{startupProfiler-CmH_aVy2.js → startupProfiler-Dc5r6LgE.js} +2 -2
- package/dist/chunks/{state-BemZdQIl.js → state-BPFYBqm1.js} +1 -1
- package/dist/chunks/state-CsdHk8n-.js +1 -0
- package/dist/chunks/{stats-B8uQ-UDi.js → stats-BkadEKa-.js} +1 -1
- package/dist/chunks/{status-D6KlRJmR.js → status-BmHu-c7I.js} +2 -2
- package/dist/chunks/{status-BekdWoIj.js → status-CrmnCDIE.js} +1 -1
- package/dist/chunks/{statusNoticeHelpers-BMM8_uJ1.js → statusNoticeHelpers-DakAVtQO.js} +1 -1
- package/dist/chunks/{stringUtils-C8PaYpQF.js → stringUtils-Df-Lnjxd.js} +1 -1
- package/dist/chunks/{subprocessEnv-Ci8VV_bi.js → subprocessEnv-CNBOhlDV.js} +1 -1
- package/dist/chunks/subprocessEnv-DtBCqQIo.js +1 -0
- package/dist/chunks/switcher-Dm646gO5.js +1 -0
- package/dist/chunks/switcher-sYTxnJQA.js +1 -0
- package/dist/chunks/{syncCache-ClP9aBqK.js → syncCache-BofuFJEe.js} +1 -1
- package/dist/chunks/{tasks-Dmh6qikm.js → tasks-NpI1iEem.js} +1 -1
- package/dist/chunks/teleport-Bs3kEipi.js +1 -0
- package/dist/chunks/{templateJobs-CxqU-s5i.js → templateJobs-C94jEE6O.js} +2 -2
- package/dist/chunks/{terminalSetup-BKGcmlWp.js → terminalSetup-CbXKCpWM.js} +1 -1
- package/dist/chunks/{terminalSetup-Cy19F1Js.js → terminalSetup-fwhFTxGi.js} +1 -1
- package/dist/chunks/{theme-U7lMFHQ0.js → theme-CEi3b_8f.js} +1 -1
- package/dist/chunks/tmux-d3cNCIZA.js +1 -0
- package/dist/chunks/{toolEventObserver-D9qjoVl5.js → toolEventObserver-DlL9CHmI.js} +1 -1
- package/dist/chunks/toolPool-DIT_uhtD.js +1 -0
- package/dist/chunks/trustedDevice-BokywSKL.js +1 -0
- package/dist/chunks/{trustedDevice-DL0pWP4_.js → trustedDevice-Bzz03jCy.js} +1 -1
- package/dist/chunks/{types-DafcFtmb.js → types-BJ7qTz75.js} +1 -1
- package/dist/chunks/{udsClient-CWnfsgFP.js → udsClient-CF8BmZgN.js} +1 -1
- package/dist/chunks/{updateCCB-C6XftzIG.js → updateCCB-CzBxsuJe.js} +6 -6
- package/dist/chunks/{upstreamproxy-CXmjxHpl.js → upstreamproxy-BuBFDFAD.js} +1 -1
- package/dist/chunks/{useExitOnCtrlCDWithKeybindings-DEEJhm_W.js → useExitOnCtrlCDWithKeybindings-BHQfwlAl.js} +1 -1
- package/dist/chunks/useMainLoopModel-BkyIIW9t.js +1 -0
- package/dist/chunks/useManagePlugins-BWROoGDs.js +1 -0
- package/dist/chunks/{useMergedTools-DbhqKk1-.js → useMergedTools-CHxnwR7R.js} +1 -1
- package/dist/chunks/{useSearchInput-gUDbkLaC.js → useSearchInput-q2CFPU4W.js} +1 -1
- package/dist/chunks/useSettingsErrors-CPVQbsqq.js +1 -0
- package/dist/chunks/{userAgent-CU7Ndh79.js → userAgent-B7WkjI6I.js} +1 -1
- package/dist/chunks/util-BfqXOA-P.js +1 -0
- package/dist/chunks/{validatePlugin-y_O_tCEL.js → validatePlugin-jrcrYEIu.js} +1 -1
- package/dist/chunks/{vim-w37BfGZ5.js → vim-C4Hs5U2h.js} +1 -1
- package/dist/chunks/{which-BRWBO7Gu.js → which-mplwBbc0.js} +1 -1
- package/dist/chunks/windowsPaths-B8p9tFRF.js +1 -0
- package/dist/chunks/{windowsPaths-DtWHLjmE.js → windowsPaths-C7Mdo9aU.js} +1 -1
- package/dist/chunks/{workSecret-BEhXgH2M.js → workSecret-XLodD7tw.js} +1 -1
- package/dist/chunks/workerRegistry-Cfo7bKlm.js +6 -0
- package/dist/chunks/worktree-D0k_pCEz.js +1 -0
- package/dist/cli.js +1 -1
- package/package.json +1 -1
- package/dist/chunks/ApproveApiKey-CIWOi_7v.js +0 -1
- package/dist/chunks/BackgroundTasksDialog-Pnpl3Ixx.js +0 -2
- package/dist/chunks/ClaudeMdExternalIncludesDialog-D-w166RC.js +0 -1
- package/dist/chunks/ConsoleOAuthFlow-CV6PcJOP.js +0 -1
- package/dist/chunks/Doctor-BcnUfJ4I.js +0 -1
- package/dist/chunks/Doctor-Dz4TuYas.js +0 -3
- package/dist/chunks/ExitFlow-BwyAtIHx.js +0 -2
- package/dist/chunks/MCPConnectionManager-B9n4SXN4.js +0 -1
- package/dist/chunks/MCPToolListView-DJ06N1DG.js +0 -1
- package/dist/chunks/MessageSelector-o4ULADFg.js +0 -3
- package/dist/chunks/Messages-qqwHuAW5.js +0 -11
- package/dist/chunks/Onboarding-BzuQjney.js +0 -1
- package/dist/chunks/PromptInputHelpMenu-CfMFx-TF.js +0 -1
- package/dist/chunks/QueryEngine-Dt0BKUeF.js +0 -1
- package/dist/chunks/REPL-CUbEDqEl.js +0 -133
- package/dist/chunks/REPL-DMaKNhTa.js +0 -1
- package/dist/chunks/RemoteSessionManager-Bf44A0Ol.js +0 -2
- package/dist/chunks/ResumeConversation-Ctw5Q1g9.js +0 -1
- package/dist/chunks/SearchExtraToolsTool-C80OdtPZ.js +0 -1
- package/dist/chunks/Settings-DfdcmvOV.js +0 -2
- package/dist/chunks/TrustDialog-ACaJ_m7A.js +0 -1
- package/dist/chunks/add-dir-SAKTkw0S.js +0 -1
- package/dist/chunks/agents-ZgRKpjHv.js +0 -103
- package/dist/chunks/allErrors-_cOQksHC.js +0 -1
- package/dist/chunks/api-DS1MiW01.js +0 -1
- package/dist/chunks/auth-DGZzCbU0.js +0 -1
- package/dist/chunks/auth-DN1MUpB8.js +0 -1
- package/dist/chunks/autonomy-DuQmYhq6.js +0 -15
- package/dist/chunks/autonomy-lJV7yWUl.js +0 -1
- package/dist/chunks/autonomyPanel-DAQm6lDz.js +0 -1
- package/dist/chunks/backgroundHousekeeping-BTy71bcY.js +0 -1
- package/dist/chunks/backgroundHousekeeping-Cc7Ag7JG.js +0 -17
- package/dist/chunks/bg-CJ0YWFli.js +0 -9
- package/dist/chunks/bg-CeUrRz_7.js +0 -1
- package/dist/chunks/bridgeConfig-CzRUPn-D.js +0 -1
- package/dist/chunks/btw-nVoVuIae.js +0 -1
- package/dist/chunks/caches-B8sM3Zys.js +0 -1
- package/dist/chunks/caches-Bp9MZ7IE.js +0 -1
- package/dist/chunks/cliLaunch-BTpfAGGI.js +0 -1
- package/dist/chunks/client-BCAbKdNz.js +0 -1
- package/dist/chunks/client-CJE6gEvU.js +0 -1
- package/dist/chunks/commands-DL-BzoMQ.js +0 -1
- package/dist/chunks/compact-Cx7BPXLU.js +0 -2
- package/dist/chunks/config-S5OW4Xqr.js +0 -1
- package/dist/chunks/config-aRiTrtCv.js +0 -3
- package/dist/chunks/context-noninteractive-DPacEFJ1.js +0 -1
- package/dist/chunks/conversation-D5Nbu9eT.js +0 -1
- package/dist/chunks/conversation-hcUx9e-C.js +0 -1
- package/dist/chunks/createSSHSession-DecOR6M5.js +0 -6
- package/dist/chunks/createSession-D27zvmOs.js +0 -1
- package/dist/chunks/crossProjectResume-Bw3U0Ty6.js +0 -40
- package/dist/chunks/cwd-ClLru_7T.js +0 -1
- package/dist/chunks/datadog-bm551AVV.js +0 -1
- package/dist/chunks/detached-CIyF0M5O.js +0 -5
- package/dist/chunks/detectRepository-DDfLfKcM.js +0 -1
- package/dist/chunks/doctor-BJORBomU.js +0 -1
- package/dist/chunks/entry-mdegyj8z.js +0 -14
- package/dist/chunks/exit-CF3KBl-S.js +0 -1
- package/dist/chunks/extractMemories-4lBn134y.js +0 -1
- package/dist/chunks/fast-0Vi354KI.js +0 -1
- package/dist/chunks/firstPartyEventLogger-BNBnLYPK.js +0 -1
- package/dist/chunks/git-DF4RFFaT.js +0 -1
- package/dist/chunks/goal-BZG4gtnb.js +0 -3
- package/dist/chunks/hooks-DT80Arzc.js +0 -1
- package/dist/chunks/keybindings-CwdC_8S0.js +0 -2
- package/dist/chunks/loadAgentsDir-eVKq8efm.js +0 -1
- package/dist/chunks/localSearch-CZlFfR_X.js +0 -1
- package/dist/chunks/main-LMyE3jXY.js +0 -31
- package/dist/chunks/managedEnv-CYepSnm8.js +0 -1
- package/dist/chunks/mcp-BAbbEaBA.js +0 -1
- package/dist/chunks/mcp-Ct4Sum6A.js +0 -6
- package/dist/chunks/mcp-D5HkCqUh.js +0 -2
- package/dist/chunks/memory-COa7aUbx.js +0 -1
- package/dist/chunks/model-B7rtZ7KV.js +0 -1
- package/dist/chunks/model-Bgh_r4lg.js +0 -1
- package/dist/chunks/model-DiuEAv6h.js +0 -1
- package/dist/chunks/oauth-BN2I0_jl.js +0 -1
- package/dist/chunks/oauth-C9VBDB0Y.js +0 -1
- package/dist/chunks/omit--yH_T4rf.js +0 -1
- package/dist/chunks/parser-BMIaRErw.js +0 -1
- package/dist/chunks/partition-DLcW5Oo_.js +0 -1
- package/dist/chunks/permissions-CaucYK3s.js +0 -3
- package/dist/chunks/plugin-BN-of1_H.js +0 -17
- package/dist/chunks/pluginCliCommands-CfdVNs8D.js +0 -1
- package/dist/chunks/pluginOperations-DnhzFbYI.js +0 -2
- package/dist/chunks/pluginStartupCheck-CpNB4jxG.js +0 -1
- package/dist/chunks/poorMode-yH1o41cQ.js +0 -1
- package/dist/chunks/print-BZOx09SU.js +0 -26
- package/dist/chunks/processBashCommand-dcCNCiBp.js +0 -1
- package/dist/chunks/processSlashCommand-YDiM63Qr.js +0 -5
- package/dist/chunks/prompt-CXGy0llt.js +0 -1
- package/dist/chunks/prompt-DovNDmcx.js +0 -1
- package/dist/chunks/rcDebugLog-CARUIORE.js +0 -1
- package/dist/chunks/refresh-B84H2Ezd.js +0 -1
- package/dist/chunks/resume-CROylN3J.js +0 -2
- package/dist/chunks/ripgrep-2M1GkXqJ.js +0 -1
- package/dist/chunks/sandbox-adapter-6UwMLh6e.js +0 -1
- package/dist/chunks/sandbox-toggle-YrQNWGsr.js +0 -1
- package/dist/chunks/searchExtraTools-Bdv5HJ74.js +0 -1
- package/dist/chunks/sessionFileAccessHooks-Czen7Ejz.js +0 -1
- package/dist/chunks/sessionObserver-B0zucj_c.js +0 -1
- package/dist/chunks/sessionStorage-BM1x51Z7.js +0 -1
- package/dist/chunks/settings-BG15IFYx.js +0 -1
- package/dist/chunks/settings-D4CpDv2y.js +0 -20
- package/dist/chunks/settingsSync-BSrpnyqo.js +0 -1
- package/dist/chunks/setup-C62oq4AZ.js +0 -3
- package/dist/chunks/sinks-WJ7nzLQs.js +0 -1
- package/dist/chunks/skillChangeDetector-U5kRU5nd.js +0 -1
- package/dist/chunks/skills-BgcFh0vy.js +0 -1
- package/dist/chunks/startupProfiler-B4HBBbHN.js +0 -1
- package/dist/chunks/state-BAGmpVBn.js +0 -1
- package/dist/chunks/state-D_lk6z-C.js +0 -1
- package/dist/chunks/subprocessEnv-CZkA9Cdp.js +0 -1
- package/dist/chunks/switcher-Ck9CrXrr.js +0 -1
- package/dist/chunks/switcher-DnAhkyIn.js +0 -1
- package/dist/chunks/teleport-DH3IuAUQ.js +0 -1
- package/dist/chunks/tmux-D5EvHWi3.js +0 -1
- package/dist/chunks/toolPool-69mfSPAs.js +0 -1
- package/dist/chunks/trustedDevice-B6AKlsl_.js +0 -1
- package/dist/chunks/useMainLoopModel-6w7mhwhU.js +0 -1
- package/dist/chunks/useManagePlugins-CjnsO-Of.js +0 -1
- package/dist/chunks/useSettingsErrors-CgPad-H0.js +0 -1
- package/dist/chunks/util-B4oMhJKh.js +0 -1
- package/dist/chunks/windowsPaths-BY-IVNwQ.js +0 -1
- package/dist/chunks/workerRegistry-Bq9bS5pw.js +0 -6
- package/dist/chunks/worktree-4SUJ4dtz.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{n as t,t as n}from"./axios-DaWTGg7G.js";import{Jw as r,KE as i,UE as a,WE as o,Yw as s,eT as c,nT as l,qE as u,tT as d}from"./loadAgentsDir-BL93ulMm.js";import{p as f}from"./external-CEp-aPkt.js";import{r as p}from"./lazySchema-B4D4qJVE.js";import{B as m,C as ee,F as h,P as g,R as _,S as v,c as y,f as b,i as te,u as x,x as S}from"./debug-BecbSVoN.js";import{_t as C,gt as w,ht as T,pt as ne,vt as re}from"./settings-D4CpDv2y.js";import{o as ie,s as E}from"./log-Dauqle-Z.js";import{homedir as ae}from"os";import*as D from"path";import{join as oe,resolve as se}from"path";import{randomBytes as O}from"crypto";import{readFile as k,readdir as A,rename as j,stat as M,unlink as N,writeFile as P}from"fs/promises";function F(){return oe(r(),H)}async function I(){let e=F();try{let t=v(await k(e,{encoding:`utf-8`}));if(typeof t!=`object`||!t||!(`version`in t)||!(`fetchedAt`in t)||!(`counts`in t))return y(`Install counts cache has invalid structure`),null;let n=t;if(n.version!==V)return y(`Install counts cache version mismatch (got ${n.version}, expected ${V})`),null;if(typeof n.fetchedAt!=`string`||!Array.isArray(n.counts))return y(`Install counts cache has invalid structure`),null;let r=new Date(n.fetchedAt).getTime();return Number.isNaN(r)?(y(`Install counts cache has invalid fetchedAt timestamp`),null):n.counts.every(e=>typeof e==`object`&&!!e&&typeof e.plugin==`string`&&typeof e.unique_installs==`number`)?Date.now()-r>W?(y(`Install counts cache is stale (>24h old)`),null):{version:n.version,fetchedAt:n.fetchedAt,counts:n.counts}:(y(`Install counts cache has malformed entries`),null)}catch(e){return h(e)!==`ENOENT`&&y(`Failed to load install counts cache: ${g(e)}`),null}}async function L(e){let t=F(),n=`${t}.${O(8).toString(`hex`)}.tmp`;try{let i=r();await x().mkdir(i),await P(n,ee(e,null,2),{encoding:`utf-8`,mode:384}),await j(n,t),y(`Install counts cache saved successfully`)}catch(e){E(e);try{await N(n)}catch{}}}async function R(){y(`Fetching install counts from ${U}`);let e=performance.now();try{let n=await t.get(U,{timeout:1e4});if(!n.data?.plugins||!Array.isArray(n.data.plugins))throw Error(`Invalid response format from install counts API`);return l(`install_counts`,U,`success`,performance.now()-e),n.data.plugins}catch(t){throw l(`install_counts`,U,`failure`,performance.now()-e,c(t)),t}}async function z(){let e=await I();if(e){y(`Using cached install counts`),l(`install_counts`,U,`cache_hit`,0);let t=new Map;for(let n of e.counts)t.set(n.plugin,n.unique_installs);return t}try{let e=await R();await L({version:V,fetchedAt:new Date().toISOString(),counts:e});let t=new Map;for(let n of e)t.set(n.plugin,n.unique_installs);return t}catch(e){return E(e),y(`Failed to fetch install counts: ${g(e)}`),null}}function B(e){if(e<1e3)return String(e);if(e<1e6){let t=(e/1e3).toFixed(1);return t.endsWith(`.0`)?`${t.slice(0,-2)}K`:`${t}K`}let t=(e/1e6).toFixed(1);return t.endsWith(`.0`)?`${t.slice(0,-2)}M`:`${t}M`}var V,H,U,W,G=e((()=>{n(),te(),_(),b(),ie(),S(),d(),s(),V=1,H=`install-counts-cache.json`,U=`https://raw.githubusercontent.com/anthropics/claude-plugins-official/refs/heads/stats/stats/plugin-installs.json`,W=1440*60*1e3}));async function K(e){let t=e.trim(),n=x(),r=t.match(/^([a-zA-Z0-9._-]+@[^:]+:.+?(?:\.git)?)(#(.+))?$/);if(r?.[1]){let e=r[1],t=r[3];return t?{source:`git`,url:e,ref:t}:{source:`git`,url:e}}if(t.startsWith(`http://`)||t.startsWith(`https://`)){let e=t.match(/^([^#]+)(#(.+))?$/),n=e?.[1]||t,r=e?.[3];if(n.endsWith(`.git`)||n.includes(`/_git/`))return r?{source:`git`,url:n,ref:r}:{source:`git`,url:n};let i;try{i=new URL(n)}catch{return{source:`url`,url:n}}if((i.hostname===`github.com`||i.hostname===`www.github.com`)&&i.pathname.match(/^\/([^/]+\/[^/]+?)(\/|\.git|$)/)?.[1]){let e=n.endsWith(`.git`)?n:`${n}.git`;return r?{source:`git`,url:e,ref:r}:{source:`git`,url:e}}return{source:`url`,url:n}}let i=process.platform===`win32`&&(t.startsWith(`.\\`)||t.startsWith(`..\\`)||/^[a-zA-Z]:[/\\]/.test(t));if(t.startsWith(`./`)||t.startsWith(`../`)||t.startsWith(`/`)||t.startsWith(`~`)||i){let e=se(t.startsWith(`~`)?t.replace(/^~/,ae()):t),r;try{r=await n.stat(e)}catch(t){let n=h(t);return{error:n===`ENOENT`?`Path does not exist: ${e}`:`Cannot access path: ${e} (${n??t})`}}return r.isFile()?e.endsWith(`.json`)?{source:`file`,path:e}:{error:`File path must point to a .json file (marketplace.json), but got: ${e}`}:r.isDirectory()?{source:`directory`,path:e}:{error:`Path is neither a file nor a directory: ${e}`}}if(t.includes(`/`)&&!t.startsWith(`@`)){if(t.includes(`:`))return null;let e=t.match(/^([^#@]+)(?:[#@](.+))?$/),n=e?.[1]||t,r=e?.[2];return r?{source:`github`,repo:n,ref:r}:{source:`github`,repo:n}}return null}var ce=e((()=>{_(),b()}));function le(e){let t=D.basename(e),n=D.basename(D.dirname(e));return t===`plugin.json`?`plugin`:t===`marketplace.json`?`marketplace`:n===`.claude-plugin`?`plugin`:`unknown`}function q(e){return e.issues.map(e=>({path:e.path.join(`.`)||`root`,message:e.message,code:e.code}))}function J(e,t,n,r){e.includes(`..`)&&n.push({path:t,message:r?`Path contains "..": ${e}. ${r}`:`Path contains ".." which could be a path traversal attempt: ${e}`})}function ue(e){let t=e.replace(/^(\.\.\/)+/,``);return`Plugin source paths are resolved relative to the marketplace root (the directory containing .claude-plugin/), not relative to marketplace.json. Use "${t===e?`./plugins/my-plugin`:`./${t}`}" instead of "${e}".`}async function Y(e){let t=[],n=[],r=D.resolve(e),i;try{i=await k(r,{encoding:`utf-8`})}catch(e){let t=h(e),n;return n=t===`ENOENT`?`File not found: ${r}`:t===`EISDIR`?`Path is not a file: ${r}`:`Failed to read file: ${g(e)}`,{success:!1,errors:[{path:`file`,message:n,code:t}],warnings:[],filePath:r,fileType:`plugin`}}let a;try{a=v(i)}catch(e){return{success:!1,errors:[{path:`json`,message:`Invalid JSON syntax: ${g(e)}`}],warnings:[],filePath:r,fileType:`plugin`}}if(a&&typeof a==`object`){let e=a;e.commands&&(Array.isArray(e.commands)?e.commands:[e.commands]).forEach((e,n)=>{typeof e==`string`&&J(e,`commands[${n}]`,t)}),e.agents&&(Array.isArray(e.agents)?e.agents:[e.agents]).forEach((e,n)=>{typeof e==`string`&&J(e,`agents[${n}]`,t)}),e.skills&&(Array.isArray(e.skills)?e.skills:[e.skills]).forEach((e,n)=>{typeof e==`string`&&J(e,`skills[${n}]`,t)})}let o=a;if(typeof a==`object`&&a){let e=a,t=Object.keys(e).filter(e=>$.has(e));if(t.length>0){let r={...e};for(let e of t)delete r[e],n.push({path:e,message:`Field '${e}' belongs in the marketplace entry (marketplace.json), not plugin.json. It's harmless here but unused — Work Mate ignores it at load time.`});o=r}}let s=T().strict().safeParse(o);if(s.success||t.push(...q(s.error)),s.success){let e=s.data;/^[a-z0-9]+(-[a-z0-9]+)*$/.test(e.name)||n.push({path:`name`,message:`Plugin name "${e.name}" is not kebab-case. Work Mate accepts it, but the Claude.ai marketplace sync requires kebab-case (lowercase letters, digits, and hyphens only, e.g., "my-plugin").`}),e.version||n.push({path:`version`,message:`No version specified. Consider adding a version following semver (e.g., "1.0.0")`}),e.description||n.push({path:`description`,message:`No description provided. Adding a description helps users understand what your plugin does`}),e.author||n.push({path:`author`,message:`No author information provided. Consider adding author details for plugin attribution`})}return{success:t.length===0,errors:t,warnings:n,filePath:r,fileType:`plugin`}}async function X(e){let t=[],n=[],r=D.resolve(e),i;try{i=await k(r,{encoding:`utf-8`})}catch(e){let t=h(e),n;return n=t===`ENOENT`?`File not found: ${r}`:t===`EISDIR`?`Path is not a file: ${r}`:`Failed to read file: ${g(e)}`,{success:!1,errors:[{path:`file`,message:n,code:t}],warnings:[],filePath:r,fileType:`marketplace`}}let a;try{a=v(i)}catch(e){return{success:!1,errors:[{path:`json`,message:`Invalid JSON syntax: ${g(e)}`}],warnings:[],filePath:r,fileType:`marketplace`}}if(a&&typeof a==`object`){let e=a;Array.isArray(e.plugins)&&e.plugins.forEach((e,n)=>{if(e&&typeof e==`object`&&`source`in e){let r=e.source;typeof r==`string`&&J(r,`plugins[${n}].source`,t,ue(r)),r&&typeof r==`object`&&`path`in r&&typeof r.path==`string`&&J(r.path,`plugins[${n}].source.path`,t)}})}let o=C().extend({plugins:f(w().strict())}).strict().safeParse(a);if(o.success||t.push(...q(o.error)),o.success){let e=o.data;if((!e.plugins||e.plugins.length===0)&&n.push({path:`plugins`,message:`Marketplace has no plugins defined`}),e.plugins){e.plugins.forEach((n,r)=>{e.plugins.filter(e=>e.name===n.name).length>1&&t.push({path:`plugins[${r}].name`,message:`Duplicate plugin name "${n.name}" found in marketplace`})});let i=D.dirname(r),a=D.basename(i)===`.claude-plugin`?D.dirname(i):i;for(let[t,r]of e.plugins.entries()){if(!r.version||typeof r.source!=`string`||!r.source.startsWith(`./`))continue;let e=D.join(a,r.source,`.claude-plugin`,`plugin.json`),i;try{let t=v(await k(e,{encoding:`utf-8`}));typeof t.version==`string`&&(i=t.version)}catch{continue}i&&i!==r.version&&n.push({path:`plugins[${t}].version`,message:`Entry declares version "${r.version}" but ${r.source}/.claude-plugin/plugin.json says "${i}". At install time, plugin.json wins (calculatePluginVersion precedence) — the entry version is silently ignored. Update this entry to "${i}" to match.`})}}e.metadata?.description||n.push({path:`metadata.description`,message:`No marketplace description provided. Adding a description helps users understand what this marketplace offers`})}return{success:t.length===0,errors:t,warnings:n,filePath:r,fileType:`marketplace`}}function de(e,t,n){let r=[],i=[],o=t.match(a);if(!o)return i.push({path:`frontmatter`,message:`No frontmatter block found. Add YAML frontmatter between --- delimiters at the top of the file to set description and other metadata.`}),{success:!0,errors:r,warnings:i,filePath:e,fileType:n};let s=o[1]||``,c;try{c=u(s)}catch(t){return r.push({path:`frontmatter`,message:`YAML frontmatter failed to parse: ${g(t)}. At runtime this ${n} loads with empty metadata (all frontmatter fields silently dropped).`}),{success:!1,errors:r,warnings:i,filePath:e,fileType:n}}if(typeof c!=`object`||!c||Array.isArray(c))return r.push({path:`frontmatter`,message:`Frontmatter must be a YAML mapping (key: value pairs), got ${Array.isArray(c)?`an array`:c===null?`null`:typeof c}.`}),{success:!1,errors:r,warnings:i,filePath:e,fileType:n};let l=c;if(l.description!==void 0){let e=l.description;typeof e!=`string`&&typeof e!=`number`&&typeof e!=`boolean`&&e!==null&&r.push({path:`description`,message:`description must be a string, got ${Array.isArray(e)?`array`:typeof e}. At runtime this value is dropped.`})}else i.push({path:`description`,message:`No description in frontmatter. A description helps users and Claude understand when to use this ${n}.`});l.name!==void 0&&l.name!==null&&typeof l.name!=`string`&&r.push({path:`name`,message:`name must be a string, got ${typeof l.name}.`});let d=l[`allowed-tools`];d!=null&&(typeof d!=`string`&&!Array.isArray(d)?r.push({path:`allowed-tools`,message:`allowed-tools must be a string or array of strings, got ${typeof d}.`}):Array.isArray(d)&&d.some(e=>typeof e!=`string`)&&r.push({path:`allowed-tools`,message:`allowed-tools array must contain only strings.`}));let f=l.shell;if(f!=null)if(typeof f!=`string`)r.push({path:`shell`,message:`shell must be a string, got ${typeof f}.`});else{let e=f.trim().toLowerCase();e!==`bash`&&e!==`powershell`&&r.push({path:`shell`,message:`shell must be 'bash' or 'powershell', got '${f}'.`})}return{success:r.length===0,errors:r,warnings:i,filePath:e,fileType:n}}async function Z(e){let t;try{t=await k(e,{encoding:`utf-8`})}catch(t){return h(t)===`ENOENT`?{success:!0,errors:[],warnings:[],filePath:e,fileType:`hooks`}:{success:!1,errors:[{path:`file`,message:`Failed to read file: ${g(t)}`}],warnings:[],filePath:e,fileType:`hooks`}}let n;try{n=v(t)}catch(t){return{success:!1,errors:[{path:`json`,message:`Invalid JSON syntax: ${g(t)}. At runtime this breaks the entire plugin load.`}],warnings:[],filePath:e,fileType:`hooks`}}let r=ne().safeParse(n);return r.success?{success:!0,errors:[],warnings:[],filePath:e,fileType:`hooks`}:{success:!1,errors:q(r.error),warnings:[],filePath:e,fileType:`hooks`}}async function Q(e,t){let n;try{n=await A(e,{withFileTypes:!0})}catch(e){let t=h(e);if(t===`ENOENT`||t===`ENOTDIR`)return[];throw e}if(t)return n.filter(e=>e.isDirectory()).map(t=>D.join(e,t.name,`SKILL.md`));let r=[];for(let t of n){let n=D.join(e,t.name);t.isDirectory()?r.push(...await Q(n,!1)):t.isFile()&&t.name.toLowerCase().endsWith(`.md`)&&r.push(n)}return r}async function fe(e){let t=[],n=[[`skill`,D.join(e,`skills`)],[`agent`,D.join(e,`agents`)],[`command`,D.join(e,`commands`)]];for(let[e,r]of n){let n=await Q(r,e===`skill`);for(let r of n){let n;try{n=await k(r,{encoding:`utf-8`})}catch(n){if(m(n))continue;t.push({success:!1,errors:[{path:`file`,message:`Failed to read: ${g(n)}`}],warnings:[],filePath:r,fileType:e});continue}let i=de(r,n,e);(i.errors.length>0||i.warnings.length>0)&&t.push(i)}}let r=await Z(D.join(e,`hooks`,`hooks.json`));return(r.errors.length>0||r.warnings.length>0)&&t.push(r),t}async function pe(e){let t=D.resolve(e),n=null;try{n=await M(t)}catch(e){if(!m(e))throw e}if(n?.isDirectory()){let e=await X(D.join(t,`.claude-plugin`,`marketplace.json`));if(e.errors[0]?.code!==`ENOENT`)return e;let n=await Y(D.join(t,`.claude-plugin`,`plugin.json`));return n.errors[0]?.code===`ENOENT`?{success:!1,errors:[{path:`directory`,message:`No manifest found in directory. Expected .claude-plugin/marketplace.json or .claude-plugin/plugin.json`}],warnings:[],filePath:t,fileType:`plugin`}:n}switch(le(e)){case`plugin`:return Y(e);case`marketplace`:return X(e);case`unknown`:try{let n=v(await k(t,{encoding:`utf-8`}));if(Array.isArray(n.plugins))return X(e)}catch(e){if(h(e)===`ENOENT`)return{success:!1,errors:[{path:`file`,message:`File not found: ${t}`}],warnings:[],filePath:t,fileType:`plugin`}}return Y(e)}}var $,me=e((()=>{p(),_(),o(),S(),i(),re(),$=new Set([`category`,`source`,`tags`,`strict`,`id`])}));export{K as a,G as c,ce as i,pe as n,B as o,fe as r,z as s,me as t};
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{n as t,t as n}from"./axios-DaWTGg7G.js";import{Bw as r,ME as i,Nw as a,OE as o,Pw as s,Vw as c,jE as l,kE as u,zw as d}from"./loadAgentsDir-BXtV2jiO.js";import{p as f}from"./external-CEp-aPkt.js";import{r as ee}from"./lazySchema-B4D4qJVE.js";import{B as p,C as m,F as h,P as g,R as _,S as v,c as y,f as b,i as te,u as x,x as S}from"./debug-Dr1SjdXn.js";import{_t as C,gt as w,ht as T,pt as E,vt as D}from"./settings-DiBMs2gM.js";import{o as ne,s as O}from"./log-27kCA_9u.js";import{homedir as re}from"os";import*as k from"path";import{join as ie,resolve as ae}from"path";import{randomBytes as oe}from"crypto";import{readFile as A,readdir as j,rename as M,stat as N,unlink as P,writeFile as F}from"fs/promises";function I(){return ie(a(),U)}async function L(){let e=I();try{let t=v(await A(e,{encoding:`utf-8`}));if(typeof t!=`object`||!t||!(`version`in t)||!(`fetchedAt`in t)||!(`counts`in t))return y(`Install counts cache has invalid structure`),null;let n=t;if(n.version!==H)return y(`Install counts cache version mismatch (got ${n.version}, expected ${H})`),null;if(typeof n.fetchedAt!=`string`||!Array.isArray(n.counts))return y(`Install counts cache has invalid structure`),null;let r=new Date(n.fetchedAt).getTime();return Number.isNaN(r)?(y(`Install counts cache has invalid fetchedAt timestamp`),null):n.counts.every(e=>typeof e==`object`&&!!e&&typeof e.plugin==`string`&&typeof e.unique_installs==`number`)?Date.now()-r>G?(y(`Install counts cache is stale (>24h old)`),null):{version:n.version,fetchedAt:n.fetchedAt,counts:n.counts}:(y(`Install counts cache has malformed entries`),null)}catch(e){return h(e)!==`ENOENT`&&y(`Failed to load install counts cache: ${g(e)}`),null}}async function R(e){let t=I(),n=`${t}.${oe(8).toString(`hex`)}.tmp`;try{let r=a();await x().mkdir(r),await F(n,m(e,null,2),{encoding:`utf-8`,mode:384}),await M(n,t),y(`Install counts cache saved successfully`)}catch(e){O(e);try{await P(n)}catch{}}}async function z(){y(`Fetching install counts from ${W}`);let e=performance.now();try{let n=await t.get(W,{timeout:1e4});if(!n.data?.plugins||!Array.isArray(n.data.plugins))throw Error(`Invalid response format from install counts API`);return c(`install_counts`,W,`success`,performance.now()-e),n.data.plugins}catch(t){throw c(`install_counts`,W,`failure`,performance.now()-e,d(t)),t}}async function B(){let e=await L();if(e){y(`Using cached install counts`),c(`install_counts`,W,`cache_hit`,0);let t=new Map;for(let n of e.counts)t.set(n.plugin,n.unique_installs);return t}try{let e=await z();await R({version:H,fetchedAt:new Date().toISOString(),counts:e});let t=new Map;for(let n of e)t.set(n.plugin,n.unique_installs);return t}catch(e){return O(e),y(`Failed to fetch install counts: ${g(e)}`),null}}function V(e){if(e<1e3)return String(e);if(e<1e6){let t=(e/1e3).toFixed(1);return t.endsWith(`.0`)?`${t.slice(0,-2)}K`:`${t}K`}let t=(e/1e6).toFixed(1);return t.endsWith(`.0`)?`${t.slice(0,-2)}M`:`${t}M`}var H,U,W,G,K=e((()=>{n(),te(),_(),b(),ne(),S(),r(),s(),H=1,U=`install-counts-cache.json`,W=`https://raw.githubusercontent.com/anthropics/claude-plugins-official/refs/heads/stats/stats/plugin-installs.json`,G=1440*60*1e3}));async function se(e){let t=e.trim(),n=x(),r=t.match(/^([a-zA-Z0-9._-]+@[^:]+:.+?(?:\.git)?)(#(.+))?$/);if(r?.[1]){let e=r[1],t=r[3];return t?{source:`git`,url:e,ref:t}:{source:`git`,url:e}}if(t.startsWith(`http://`)||t.startsWith(`https://`)){let e=t.match(/^([^#]+)(#(.+))?$/),n=e?.[1]||t,r=e?.[3];if(n.endsWith(`.git`)||n.includes(`/_git/`))return r?{source:`git`,url:n,ref:r}:{source:`git`,url:n};let i;try{i=new URL(n)}catch{return{source:`url`,url:n}}if((i.hostname===`github.com`||i.hostname===`www.github.com`)&&i.pathname.match(/^\/([^/]+\/[^/]+?)(\/|\.git|$)/)?.[1]){let e=n.endsWith(`.git`)?n:`${n}.git`;return r?{source:`git`,url:e,ref:r}:{source:`git`,url:e}}return{source:`url`,url:n}}let i=process.platform===`win32`&&(t.startsWith(`.\\`)||t.startsWith(`..\\`)||/^[a-zA-Z]:[/\\]/.test(t));if(t.startsWith(`./`)||t.startsWith(`../`)||t.startsWith(`/`)||t.startsWith(`~`)||i){let e=ae(t.startsWith(`~`)?t.replace(/^~/,re()):t),r;try{r=await n.stat(e)}catch(t){let n=h(t);return{error:n===`ENOENT`?`Path does not exist: ${e}`:`Cannot access path: ${e} (${n??t})`}}return r.isFile()?e.endsWith(`.json`)?{source:`file`,path:e}:{error:`File path must point to a .json file (marketplace.json), but got: ${e}`}:r.isDirectory()?{source:`directory`,path:e}:{error:`Path is neither a file nor a directory: ${e}`}}if(t.includes(`/`)&&!t.startsWith(`@`)){if(t.includes(`:`))return null;let e=t.match(/^([^#@]+)(?:[#@](.+))?$/),n=e?.[1]||t,r=e?.[2];return r?{source:`github`,repo:n,ref:r}:{source:`github`,repo:n}}return null}var ce=e((()=>{_(),b()}));function le(e){let t=k.basename(e),n=k.basename(k.dirname(e));return t===`plugin.json`?`plugin`:t===`marketplace.json`?`marketplace`:n===`.claude-plugin`?`plugin`:`unknown`}function q(e){return e.issues.map(e=>({path:e.path.join(`.`)||`root`,message:e.message,code:e.code}))}function J(e,t,n,r){e.includes(`..`)&&n.push({path:t,message:r?`Path contains "..": ${e}. ${r}`:`Path contains ".." which could be a path traversal attempt: ${e}`})}function ue(e){let t=e.replace(/^(\.\.\/)+/,``);return`Plugin source paths are resolved relative to the marketplace root (the directory containing .claude-plugin/), not relative to marketplace.json. Use "${t===e?`./plugins/my-plugin`:`./${t}`}" instead of "${e}".`}async function Y(e){let t=[],n=[],r=k.resolve(e),i;try{i=await A(r,{encoding:`utf-8`})}catch(e){let t=h(e),n;return n=t===`ENOENT`?`File not found: ${r}`:t===`EISDIR`?`Path is not a file: ${r}`:`Failed to read file: ${g(e)}`,{success:!1,errors:[{path:`file`,message:n,code:t}],warnings:[],filePath:r,fileType:`plugin`}}let a;try{a=v(i)}catch(e){return{success:!1,errors:[{path:`json`,message:`Invalid JSON syntax: ${g(e)}`}],warnings:[],filePath:r,fileType:`plugin`}}if(a&&typeof a==`object`){let e=a;e.commands&&(Array.isArray(e.commands)?e.commands:[e.commands]).forEach((e,n)=>{typeof e==`string`&&J(e,`commands[${n}]`,t)}),e.agents&&(Array.isArray(e.agents)?e.agents:[e.agents]).forEach((e,n)=>{typeof e==`string`&&J(e,`agents[${n}]`,t)}),e.skills&&(Array.isArray(e.skills)?e.skills:[e.skills]).forEach((e,n)=>{typeof e==`string`&&J(e,`skills[${n}]`,t)})}let o=a;if(typeof a==`object`&&a){let e=a,t=Object.keys(e).filter(e=>$.has(e));if(t.length>0){let r={...e};for(let e of t)delete r[e],n.push({path:e,message:`Field '${e}' belongs in the marketplace entry (marketplace.json), not plugin.json. It's harmless here but unused — Work Mate ignores it at load time.`});o=r}}let s=T().strict().safeParse(o);if(s.success||t.push(...q(s.error)),s.success){let e=s.data;/^[a-z0-9]+(-[a-z0-9]+)*$/.test(e.name)||n.push({path:`name`,message:`Plugin name "${e.name}" is not kebab-case. Work Mate accepts it, but the Claude.ai marketplace sync requires kebab-case (lowercase letters, digits, and hyphens only, e.g., "my-plugin").`}),e.version||n.push({path:`version`,message:`No version specified. Consider adding a version following semver (e.g., "1.0.0")`}),e.description||n.push({path:`description`,message:`No description provided. Adding a description helps users understand what your plugin does`}),e.author||n.push({path:`author`,message:`No author information provided. Consider adding author details for plugin attribution`})}return{success:t.length===0,errors:t,warnings:n,filePath:r,fileType:`plugin`}}async function X(e){let t=[],n=[],r=k.resolve(e),i;try{i=await A(r,{encoding:`utf-8`})}catch(e){let t=h(e),n;return n=t===`ENOENT`?`File not found: ${r}`:t===`EISDIR`?`Path is not a file: ${r}`:`Failed to read file: ${g(e)}`,{success:!1,errors:[{path:`file`,message:n,code:t}],warnings:[],filePath:r,fileType:`marketplace`}}let a;try{a=v(i)}catch(e){return{success:!1,errors:[{path:`json`,message:`Invalid JSON syntax: ${g(e)}`}],warnings:[],filePath:r,fileType:`marketplace`}}if(a&&typeof a==`object`){let e=a;Array.isArray(e.plugins)&&e.plugins.forEach((e,n)=>{if(e&&typeof e==`object`&&`source`in e){let r=e.source;typeof r==`string`&&J(r,`plugins[${n}].source`,t,ue(r)),r&&typeof r==`object`&&`path`in r&&typeof r.path==`string`&&J(r.path,`plugins[${n}].source.path`,t)}})}let o=C().extend({plugins:f(w().strict())}).strict().safeParse(a);if(o.success||t.push(...q(o.error)),o.success){let e=o.data;if((!e.plugins||e.plugins.length===0)&&n.push({path:`plugins`,message:`Marketplace has no plugins defined`}),e.plugins){e.plugins.forEach((n,r)=>{e.plugins.filter(e=>e.name===n.name).length>1&&t.push({path:`plugins[${r}].name`,message:`Duplicate plugin name "${n.name}" found in marketplace`})});let i=k.dirname(r),a=k.basename(i)===`.claude-plugin`?k.dirname(i):i;for(let[t,r]of e.plugins.entries()){if(!r.version||typeof r.source!=`string`||!r.source.startsWith(`./`))continue;let e=k.join(a,r.source,`.claude-plugin`,`plugin.json`),i;try{let t=v(await A(e,{encoding:`utf-8`}));typeof t.version==`string`&&(i=t.version)}catch{continue}i&&i!==r.version&&n.push({path:`plugins[${t}].version`,message:`Entry declares version "${r.version}" but ${r.source}/.claude-plugin/plugin.json says "${i}". At install time, plugin.json wins (calculatePluginVersion precedence) — the entry version is silently ignored. Update this entry to "${i}" to match.`})}}e.metadata?.description||n.push({path:`metadata.description`,message:`No marketplace description provided. Adding a description helps users understand what this marketplace offers`})}return{success:t.length===0,errors:t,warnings:n,filePath:r,fileType:`marketplace`}}function de(e,t,n){let r=[],a=[],s=t.match(o);if(!s)return a.push({path:`frontmatter`,message:`No frontmatter block found. Add YAML frontmatter between --- delimiters at the top of the file to set description and other metadata.`}),{success:!0,errors:r,warnings:a,filePath:e,fileType:n};let c=s[1]||``,l;try{l=i(c)}catch(t){return r.push({path:`frontmatter`,message:`YAML frontmatter failed to parse: ${g(t)}. At runtime this ${n} loads with empty metadata (all frontmatter fields silently dropped).`}),{success:!1,errors:r,warnings:a,filePath:e,fileType:n}}if(typeof l!=`object`||!l||Array.isArray(l))return r.push({path:`frontmatter`,message:`Frontmatter must be a YAML mapping (key: value pairs), got ${Array.isArray(l)?`an array`:l===null?`null`:typeof l}.`}),{success:!1,errors:r,warnings:a,filePath:e,fileType:n};let u=l;if(u.description!==void 0){let e=u.description;typeof e!=`string`&&typeof e!=`number`&&typeof e!=`boolean`&&e!==null&&r.push({path:`description`,message:`description must be a string, got ${Array.isArray(e)?`array`:typeof e}. At runtime this value is dropped.`})}else a.push({path:`description`,message:`No description in frontmatter. A description helps users and Claude understand when to use this ${n}.`});u.name!==void 0&&u.name!==null&&typeof u.name!=`string`&&r.push({path:`name`,message:`name must be a string, got ${typeof u.name}.`});let d=u[`allowed-tools`];d!=null&&(typeof d!=`string`&&!Array.isArray(d)?r.push({path:`allowed-tools`,message:`allowed-tools must be a string or array of strings, got ${typeof d}.`}):Array.isArray(d)&&d.some(e=>typeof e!=`string`)&&r.push({path:`allowed-tools`,message:`allowed-tools array must contain only strings.`}));let f=u.shell;if(f!=null)if(typeof f!=`string`)r.push({path:`shell`,message:`shell must be a string, got ${typeof f}.`});else{let e=f.trim().toLowerCase();e!==`bash`&&e!==`powershell`&&r.push({path:`shell`,message:`shell must be 'bash' or 'powershell', got '${f}'.`})}return{success:r.length===0,errors:r,warnings:a,filePath:e,fileType:n}}async function Z(e){let t;try{t=await A(e,{encoding:`utf-8`})}catch(t){return h(t)===`ENOENT`?{success:!0,errors:[],warnings:[],filePath:e,fileType:`hooks`}:{success:!1,errors:[{path:`file`,message:`Failed to read file: ${g(t)}`}],warnings:[],filePath:e,fileType:`hooks`}}let n;try{n=v(t)}catch(t){return{success:!1,errors:[{path:`json`,message:`Invalid JSON syntax: ${g(t)}. At runtime this breaks the entire plugin load.`}],warnings:[],filePath:e,fileType:`hooks`}}let r=E().safeParse(n);return r.success?{success:!0,errors:[],warnings:[],filePath:e,fileType:`hooks`}:{success:!1,errors:q(r.error),warnings:[],filePath:e,fileType:`hooks`}}async function Q(e,t){let n;try{n=await j(e,{withFileTypes:!0})}catch(e){let t=h(e);if(t===`ENOENT`||t===`ENOTDIR`)return[];throw e}if(t)return n.filter(e=>e.isDirectory()).map(t=>k.join(e,t.name,`SKILL.md`));let r=[];for(let t of n){let n=k.join(e,t.name);t.isDirectory()?r.push(...await Q(n,!1)):t.isFile()&&t.name.toLowerCase().endsWith(`.md`)&&r.push(n)}return r}async function fe(e){let t=[],n=[[`skill`,k.join(e,`skills`)],[`agent`,k.join(e,`agents`)],[`command`,k.join(e,`commands`)]];for(let[e,r]of n){let n=await Q(r,e===`skill`);for(let r of n){let n;try{n=await A(r,{encoding:`utf-8`})}catch(n){if(p(n))continue;t.push({success:!1,errors:[{path:`file`,message:`Failed to read: ${g(n)}`}],warnings:[],filePath:r,fileType:e});continue}let i=de(r,n,e);(i.errors.length>0||i.warnings.length>0)&&t.push(i)}}let r=await Z(k.join(e,`hooks`,`hooks.json`));return(r.errors.length>0||r.warnings.length>0)&&t.push(r),t}async function pe(e){let t=k.resolve(e),n=null;try{n=await N(t)}catch(e){if(!p(e))throw e}if(n?.isDirectory()){let e=await X(k.join(t,`.claude-plugin`,`marketplace.json`));if(e.errors[0]?.code!==`ENOENT`)return e;let n=await Y(k.join(t,`.claude-plugin`,`plugin.json`));return n.errors[0]?.code===`ENOENT`?{success:!1,errors:[{path:`directory`,message:`No manifest found in directory. Expected .claude-plugin/marketplace.json or .claude-plugin/plugin.json`}],warnings:[],filePath:t,fileType:`plugin`}:n}switch(le(e)){case`plugin`:return Y(e);case`marketplace`:return X(e);case`unknown`:try{let n=v(await A(t,{encoding:`utf-8`}));if(Array.isArray(n.plugins))return X(e)}catch(e){if(h(e)===`ENOENT`)return{success:!1,errors:[{path:`file`,message:`File not found: ${t}`}],warnings:[],filePath:t,fileType:`plugin`}}return Y(e)}}var $,me=e((()=>{ee(),_(),u(),S(),l(),D(),$=new Set([`category`,`source`,`tags`,`strict`,`id`])}));export{se as a,K as c,ce as i,pe as n,V as o,fe as r,B as s,me as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{c as t,h as n,y as r}from"./config-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{c as t,h as n,y as r}from"./config-9rLTDOYW.js";import{n as i,r as a}from"./analytics-DJobLaWP.js";var o;e((()=>{i(),n(),o=async()=>{let e=t().editorMode||`normal`;e===`emacs`&&(e=`normal`);let n=e===`normal`?`vim`:`normal`;return r(e=>({...e,editorMode:n})),a(`tengu_editor_mode_changed`,{mode:n,source:`command`}),{type:`text`,value:`Editor mode set to ${n}. ${n===`vim`?`Use Escape key to toggle between INSERT and NORMAL modes.`:`Using standard (readline) keyboard bindings.`}`}}}))();export{o as call};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{c as t,o as n}from"./execFileNoThrow-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{c as t,o as n}from"./execFileNoThrow-mXq4K0rl.js";import{n as r,t as i}from"./execSyncWrapper-Ne33rRiD.js";async function a(e){if(process.platform===`win32`){let t=await n(`where.exe ${e}`,{shell:!0,stderr:`ignore`,reject:!1});return t.exitCode!==0||!t.stdout?null:t.stdout.trim().split(/\r?\n/)[0]||null}let t=await n(`which ${e}`,{shell:!0,stderr:`ignore`,reject:!1});return t.exitCode!==0||!t.stdout?null:t.stdout.trim()}function o(e){if(process.platform===`win32`)try{return i(`where.exe ${e}`,{encoding:`utf-8`,stdio:[`ignore`,`pipe`,`ignore`]}).toString().trim().split(/\r?\n/)[0]||null}catch{return null}try{return i(`which ${e}`,{encoding:`utf-8`,stdio:[`ignore`,`pipe`,`ignore`]}).toString().trim()||null}catch{return null}}var s,c,l,u=e((()=>{t(),r(),s=typeof Bun<`u`&&typeof Bun.which==`function`?Bun.which:null,c=s?async e=>s(e):a,l=s??o}));export{c as n,l as r,u as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e,o as t}from"./windowsPaths-C7Mdo9aU.js";e();export{t as setShellIfWindows};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{n as t,t as n}from"./memoize-BK3gG5ob.js";import{n as r,t as i}from"./cwd-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-DaDcL9Zw.js";import{n as t,t as n}from"./memoize-BK3gG5ob.js";import{n as r,t as i}from"./cwd-Besi3Os3.js";import{c as a,i as o}from"./debug-Dr1SjdXn.js";import{n as s,t as c}from"./memoize-Co4vS6UF.js";import{n as l,t as u}from"./execSyncWrapper-Ne33rRiD.js";import{i as d,o as f}from"./platform-Dg1c9F_1.js";import{existsSync as p}from"fs";import*as m from"path/win32";function h(){if(d()===`windows`){let e=y();process.env.SHELL=e,process.env.CLAUDE_CODE_GIT_BASH_PATH=e,a(`Using bash path: "${e}"`)}}function g(e,t){let n=[`C:\\Program Files\\Git\\bin\\bash.exe`,`C:\\Program Files\\Git\\usr\\bin\\bash.exe`,`C:\\Program Files (x86)\\Git\\bin\\bash.exe`,`C:\\Program Files (x86)\\Git\\usr\\bin\\bash.exe`];t&&n.push(`${t}\\scoop\\apps\\git\\current\\usr\\bin\\bash.exe`);for(let t of n)if(e(t))return t;return null}function _(e,t){if(e===`git`){for(let e of[`C:\\Program Files\\Git\\cmd\\git.exe`,`C:\\Program Files (x86)\\Git\\cmd\\git.exe`])if(t.checkExists(e))return e}try{let n=t.execCommand(`where.exe ${e}`).split(/\r?\n/).map(e=>e.trim()).filter(Boolean),r=m.resolve(t.cwdFn()).toLowerCase();for(let e of n){let t=m.resolve(e).toLowerCase(),n=m.dirname(t).toLowerCase(),i=m.relative(r,n);if(i===``||!i.startsWith(`..`)&&!m.isAbsolute(i)){a(`Skipping potentially malicious executable in current directory: ${e}`);continue}return e}return null}catch{return null}}function v(e=b){let t=e.envOverride??process.env.CLAUDE_CODE_GIT_BASH_PATH;if(t)return e.checkExists(t)?t:null;let n=_(`bash`,e);if(n&&e.checkExists(n))return n;let r=_(`git`,e);if(r){let t=[m.join(r,`..`,`..`,`bin`,`bash.exe`),m.join(r,`..`,`..`,`usr`,`bin`,`bash.exe`),m.join(r,`..`,`bash.exe`)];for(let n of t)if(e.checkExists(n))return n}return g(e.checkExists,e.userProfile)}function y(){let e=x();if(e!==null)return e;let t=process.env.CLAUDE_CODE_GIT_BASH_PATH;console.error(t?`Work Mate was unable to find CLAUDE_CODE_GIT_BASH_PATH path "${t}"`:`Work Mate on Windows requires git-bash (https://git-scm.com/downloads/win). If installed but not in PATH, set environment variable pointing to your bash.exe, similar to: CLAUDE_CODE_GIT_BASH_PATH=C:\\Program Files\\Git\\bin\\bash.exe`),process.exit(1)}var b,x,S,C,w=e((()=>{n(),r(),o(),l(),c(),f(),b={checkExists:p,execCommand:e=>u(e,{stdio:`pipe`,encoding:`utf8`}).trim(),cwdFn:i,userProfile:process.env.USERPROFILE,envOverride:void 0},x=t(()=>v()),S=s(e=>{if(e.startsWith(`\\\\`))return e.replace(/\\/g,`/`);let t=e.match(/^([A-Za-z]):[/\\]/);return t?`/`+t[1].toLowerCase()+e.slice(2).replace(/\\/g,`/`):e.replace(/\\/g,`/`)},e=>e,500),C=s(e=>{if(e.startsWith(`//`))return e.replace(/\//g,`\\`);let t=e.match(/^\/cygdrive\/([A-Za-z])(\/|$)/);if(t){let n=t[1].toUpperCase(),r=e.slice((`/cygdrive/`+t[1]).length);return n+`:`+(r||`\\`).replace(/\//g,`\\`)}let n=e.match(/^\/([A-Za-z])(\/|$)/);if(n){let t=n[1].toUpperCase(),r=e.slice(2);return t+`:`+(r||`\\`).replace(/\//g,`\\`)}return e.replace(/\//g,`\\`)},e=>e,500)}));export{C as a,w as i,x as n,h as o,v as r,S as s,y as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e,t}from"./axios-DaWTGg7G.js";import{C as n,S as r,x as i}from"./debug-
|
|
1
|
+
import{n as e,t}from"./axios-DaWTGg7G.js";import{C as n,S as r,x as i}from"./debug-Dr1SjdXn.js";t(),i();function a(e){let t=r(Buffer.from(e,`base64url`).toString(`utf-8`));if(!t||typeof t!=`object`||!(`version`in t)||t.version!==1)throw Error(`Unsupported work secret version: ${t&&typeof t==`object`&&`version`in t?t.version:`unknown`}`);let n=t;if(typeof n.session_ingress_token!=`string`||n.session_ingress_token.length===0)throw Error(`Invalid work secret: missing or empty session_ingress_token`);if(typeof n.api_base_url!=`string`)throw Error(`Invalid work secret: missing api_base_url`);return t}function o(e,t){let n=e.includes(`localhost`)||e.includes(`127.0.0.1`),r=e.startsWith(`https`)?`wss`:`ws`,i=n?`v2`:`v1`;return`${r}://${e.replace(/^https?:\/\//,``).replace(/\/+$/,``)}/${i}/session_ingress/ws/${t}`}function s(e,t){if(e===t)return!0;let n=e.slice(e.lastIndexOf(`_`)+1),r=t.slice(t.lastIndexOf(`_`)+1);return n.length>=4&&n===r}function c(e,t){return`${e.replace(/\/+$/,``)}/v1/code/sessions/${t}`}async function l(t,r){let i=await e.post(`${t}/worker/register`,{},{headers:{Authorization:`Bearer ${r}`,"Content-Type":`application/json`,"anthropic-version":`2023-06-01`},timeout:1e4}),a=i.data?.worker_epoch,o=typeof a==`string`?Number(a):a;if(typeof o!=`number`||!Number.isFinite(o)||!Number.isSafeInteger(o))throw Error(`registerWorker: invalid worker_epoch in response: ${n(i.data)}`);return o}export{s as a,l as i,o as n,a as r,c as t};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{l as e,o as t,u as n}from"./envUtils-DcaKZlRU.js";import{At as r,DS as i,ES as a,Tt as o,_t as s}from"./loadAgentsDir-BXtV2jiO.js";import{t as c}from"./src-P_wYS_NJ2.js";import{C as l,P as u,R as d,S as f,c as p,i as m,x as h}from"./debug-Dr1SjdXn.js";import{Wt as g}from"./settings-DiBMs2gM.js";import{O as _,k as v}from"./git-CoQQ6YEf.js";import{o as y,s as b}from"./log-27kCA_9u.js";import{n as x,r as S}from"./analytics-DJobLaWP.js";import{C,l as w,v as T}from"./startupProfiler-Dc5r6LgE.js";import{Bt as E,Ot as D,_n as O,vn as k}from"./model-CDnVaVDR.js";import{i as ee,t as A}from"./sessionIdCompat-DMayYBrf.js";import{n as j}from"./firstPartyEventLogger-aFhcruXA.js";import{t as te}from"./datadog-BGati3aQ.js";import{n as M,o as N,r as P}from"./debugUtils-cK-iOsEV.js";import{t as F}from"./pollConfig-BgpfHQPJ.js";import{n as I,t as L}from"./rcDebugLog-DSchf3Hs.js";import{a as R,i as z,n as B,o as ne,r as re,s as V,t as H}from"./capacityWake-ByL6fM6I.js";import{a as ie,i as ae,n as oe,r as se,t as ce}from"./workSecret-XLodD7tw.js";import{i as U}from"./trustedDevice-Bzz03jCy.js";import{t as le}from"./jwtUtils-FQWtM6iM.js";import{n as W,r as G}from"./cliLaunch-OPOtzhvA.js";import"./bridgeStatusUtil-D8UbcVrZ.js";import{t as K}from"./lib-BlVGipXx.js";import{hostname as q,tmpdir as ue}from"os";import{dirname as J,join as de,resolve as Y}from"path";import{createWriteStream as X}from"fs";import{randomUUID as Z}from"crypto";import{spawn as fe}from"child_process";import{createInterface as Q}from"readline";t(),d(),h(),_(),y(),x(),T(),O(),i(),te(),j(),o(),L(),K(),g(),c(),m(),A(),N();var pe=10,me=10;function he(e){return e.replace(/[^a-zA-Z0-9_-]/g,`_`)}var ge={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 $(e,t){let n=ge[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 _e(e,t,n){let r;try{r=f(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=$(e,i);a.push({type:`tool_start`,summary:s,timestamp:o}),n(`[bridge:activity] sessionId=${t} tool_use name=${e} ${ye(i)}`)}else if(r.type===`text`){let e=r.text??``;e.length>0&&(a.push({type:`text`,summary:e.slice(0,80),timestamp:o}),n(`[bridge:activity] sessionId=${t} text "${e.slice(0,100)}"`))}}break}case`result`:{let e=i.subtype;if(e===`success`)a.push({type:`result`,summary:`Session completed`,timestamp:o}),n(`[bridge:activity] sessionId=${t} result subtype=success`);else if(e){let r=i.errors?.[0]??`Error: ${e}`;a.push({type:`error`,summary:r,timestamp:o}),n(`[bridge:activity] sessionId=${t} result subtype=${e} error="${r}"`)}else n(`[bridge:activity] sessionId=${t} result subtype=undefined`);break}default:break}return a}function ve(e){if(e.parent_tool_use_id!=null||e.isSynthetic||e.isReplay)return;let t=e.message?.content,n;if(typeof t==`string`)n=t;else if(Array.isArray(t)){for(let e of t)if(e&&typeof e==`object`&&e.type===`text`){n=e.text;break}}return n=n?.trim(),n||void 0}function ye(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 be(e){return{spawn(t,n){let r=he(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&&(i=de(ue(),`claude`,`bridge-session-${r}.log`));let a=null,o;e.debugFile&&(o=de(J(e.debugFile),`bridge-transcript-${r}.jsonl`),a=X(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 u=fe(e.execPath,s,{cwd:n,stdio:[`pipe`,`pipe`,`pipe`],env:c,windowsHide:!0});e.onDebug(`[bridge:session] sessionId=${t.sessionId} pid=${u.pid}`);let d=[],p=null,m=[],h=!1,g=!1;u.stderr&&Q({input:u.stderr}).on(`line`,t=>{e.verbose&&process.stderr.write(t+`
|
|
2
|
+
`),m.length>=me&&m.shift(),m.push(t)}),u.stdout&&Q({input:u.stdout}).on(`line`,n=>{a&&a.write(n+`
|
|
3
|
+
`),e.onDebug(`[bridge:ws] sessionId=${t.sessionId} <<< ${M(n)}`),e.verbose&&process.stderr.write(n+`
|
|
4
|
+
`);let r=_e(n,t.sessionId,e.onDebug);for(let n of r)d.length>=pe&&d.shift(),d.push(n),p=n,e.onActivity?.(t.sessionId,n);{let r;try{r=f(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`&&!g&&t.onFirstUserMessage){let e=ve(n);e&&(g=!0,t.onFirstUserMessage(e))}}}});let _=new Promise(n=>{u.on(`close`,(r,i)=>{a&&(a.end(),a=null),i===`SIGTERM`||i===`SIGINT`?(e.onDebug(`[bridge:session] sessionId=${t.sessionId} interrupted signal=${i} pid=${u.pid}`),n(`interrupted`)):r===0?(e.onDebug(`[bridge:session] sessionId=${t.sessionId} completed exit_code=0 pid=${u.pid}`),n(`completed`)):(e.onDebug(`[bridge:session] sessionId=${t.sessionId} failed exit_code=${r} pid=${u.pid}`),n(`failed`))}),u.on(`error`,r=>{e.onDebug(`[bridge:session] sessionId=${t.sessionId} spawn error: ${r.message}`),n(`failed`)})}),v={sessionId:t.sessionId,done:_,activities:d,accessToken:t.accessToken,lastStderr:m,get currentActivity(){return p},kill(){u.killed||(e.onDebug(`[bridge:session] Sending SIGTERM to sessionId=${t.sessionId} pid=${u.pid}`),process.platform===`win32`?u.kill():u.kill(`SIGTERM`))},forceKill(){!h&&u.pid&&(h=!0,e.onDebug(`[bridge:session] Sending SIGKILL to sessionId=${t.sessionId} pid=${u.pid}`),process.platform===`win32`?u.kill():u.kill(`SIGKILL`))},writeStdin(n){u.stdin&&!u.stdin.destroyed&&(e.onDebug(`[bridge:ws] sessionId=${t.sessionId} >>> ${M(n)}`),u.stdin.write(n))},updateAccessToken(n){v.accessToken=n,v.writeStdin(l({type:`update_environment_variables`,variables:{CLAUDE_CODE_SESSION_ACCESS_TOKEN:n}})+`
|
|
5
|
+
`),e.onDebug(`[bridge:session] Sent token refresh via stdin for sessionId=${t.sessionId}`)}};return v}}}m(),N();var xe={connInitialMs:2e3,connCapMs:12e4,connGiveUpMs:6e5,generalInitialMs:500,generalCapMs:3e4,generalGiveUpMs:6e5},Se=1e3;function Ce(e){return e.connCapMs*2}function we(){let e=[...W()],t=G();return t&&e.push(t),e}function Te(e,t,n){try{return e.spawn(t,n)}catch(e){let t=u(e);return b(Error(`Session spawn failed: ${t}`)),t}}async function Ee(t,i,o,c,l,d,f,m=xe,h,g){let _=new AbortController;f.aborted?_.abort():f.addEventListener(`abort`,()=>_.abort(),{once:!0});let y=_.signal,x=new Map,C=new Map,T=new Map,E=new Map,D=new Map,O=new Map,A=new Set,j=new Map,te=new Set,M=new Set,N=H(y);async function L(){I(`heartbeat: checking ${x.size} active session(s)`);let e=!1,t=!1,n=[];for(let[r]of x){let a=T.get(r),o=D.get(r);if(!(!a||!o))try{await c.heartbeatWork(i,a,o),e=!0}catch(e){p(`[bridge:heartbeat] Failed for sessionId=${r} workId=${a}: ${u(e)}`),e instanceof B&&(S(`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(r):t=!0)}}for(let e of n){d.logVerbose(`Session ${e} token expired — re-queuing via bridge/reconnect`);try{await c.reconnectSession(i,e),p(`[bridge:heartbeat] Re-queued sessionId=${e} via bridge/reconnect`)}catch(t){d.logError(`Failed to refresh session ${e} token: ${u(t)}`),p(`[bridge:heartbeat] reconnectSession(${e}) failed: ${u(t)}`,{level:`error`})}}return t?`fatal`:n.length>0?`auth_failed`:e?`ok`:`failed`}let re=new Set,V=g?le({getAccessToken:g,onRefresh:(e,t)=>{let n=x.get(e);n&&(re.has(e)?(d.logVerbose(`Refreshing session ${e} token via bridge/reconnect`),c.reconnectSession(i,e).catch(t=>{d.logError(`Failed to refresh session ${e} token: ${u(t)}`),p(`[bridge:token] reconnectSession(${e}) failed: ${u(t)}`,{level:`error`})})):n.updateAccessToken(t))},label:`bridge`}):null,U=Date.now(),W=new Set;function G(e){W.add(e),e.finally(()=>W.delete(e))}let K=0,q=0,J=null,Y=null,X=null,Z=null;p(`[bridge:work] Starting poll loop spawnMode=${t.spawnMode} maxSessions=${t.maxSessions} environmentId=${i}`),v(`info`,`bridge_loop_started`,{max_sessions:t.maxSessions,spawn_mode:t.spawnMode}),d.printBanner(t,i),d.updateSessionCount(0,t.maxSessions,t.spawnMode),h&&d.setAttached(h);function fe(){d.updateSessionCount(x.size,t.maxSessions,t.spawnMode);for(let[e,t]of x){let n=t.currentActivity;n&&d.updateSessionActivity(E.get(e)??e,n)}if(x.size===0){d.updateIdleStatus();return}let[e,n]=[...x.entries()].pop(),r=C.get(e);if(!r)return;let i=n.currentActivity;if(!i||i.type===`result`||i.type===`error`){t.maxSessions>1&&d.refreshDisplay();return}let a=w(Date.now()-r),o=n.activities.filter(e=>e.type===`tool_start`).slice(-5).map(e=>e.summary);d.updateSessionStatus(e,a,i,o)}function Q(){pe(),fe(),Z=setInterval(fe,Se)}function pe(){Z&&(clearInterval(Z),Z=null)}function me(e,n,a){return o=>{let s=T.get(e);I(`session done: sessionId=${e} workId=${s??`none`} status=${o} wasTimedOut=${te.has(e)} duration=${Math.round((Date.now()-n)/1e3)}s stderr=${a.lastStderr.length>0?a.lastStderr.join(`\\n`).slice(0,500):`(none)`}`),x.delete(e),C.delete(e),T.delete(e),D.delete(e);let l=E.get(e)??e;E.delete(e),d.removeSession(l),M.delete(l),re.delete(e);let f=O.get(e);f&&(clearTimeout(f),O.delete(e)),V?.cancel(e),N.wake();let h=te.delete(e),g=h&&o===`interrupted`?`failed`:o,k=Date.now()-n;p(`[bridge:session] sessionId=${e} workId=${s??`unknown`} exited status=${g} duration=${w(k)}`),S(`tengu_bridge_session_done`,{status:g,duration_ms:k}),v(`info`,`bridge_session_done`,{status:g,duration_ms:k}),d.clearStatus(),pe();let ee=a.lastStderr.length>0?a.lastStderr.join(`
|
|
6
|
+
`):void 0,P;switch(g){case`completed`:d.logSessionComplete(e,k);break;case`failed`:!h&&!y.aborted&&(P=ee??`Process exited with error`,d.logSessionFailed(e,P),b(Error(`Bridge session failed: ${P}`)));break;case`interrupted`:d.logVerbose(`Session ${e} interrupted`);break}g!==`interrupted`&&s&&(G(Me(c,i,s,d,m.stopWorkBaseDelayMs)),A.add(s));let F=j.get(e);if(F&&(j.delete(e),G(r(F.worktreePath,F.worktreeBranch,F.gitRoot,F.hookBased).catch(e=>d.logVerbose(`Failed to remove worktree ${F.worktreePath}: ${u(e)}`)))),g!==`interrupted`&&!y.aborted)if(t.spawnMode!==`single-session`)G(c.archiveSession(l).catch(t=>d.logVerbose(`Failed to archive session ${e}: ${u(t)}`))),p(`[bridge:session] Session ${g}, returning to idle (multi-session mode)`);else{p(`[bridge:session] Session ${g}, aborting poll loop to tear down environment`),_.abort();return}y.aborted||Q()}}for(h||Q();!y.aborted;){let f=F();try{I(`poll: envId=${i} activeSessions=${x.size}`);let g=await c.pollForWork(i,o,y,f.reclaim_older_than_ms);if(J!==null||Y!==null){let e=Date.now()-(J??Y??Date.now());d.logReconnected(e),p(`[bridge:poll] Reconnected after ${w(e)}`),S(`tengu_bridge_reconnected`,{disconnected_ms:e})}if(K=0,q=0,J=null,Y=null,X=null,!g){if(x.size>=t.maxSessions){let e=f.multisession_poll_interval_ms_at_capacity;if(f.non_exclusive_heartbeat_interval_ms>0){S(`tengu_bridge_heartbeat_mode_entered`,{active_sessions:x.size,heartbeat_interval_ms:f.non_exclusive_heartbeat_interval_ms});let n=e>0?Date.now()+e:null,r=`ok`,i=0;for(;!y.aborted&&x.size>=t.maxSessions&&(n===null||Date.now()<n);){let e=F();if(e.non_exclusive_heartbeat_interval_ms<=0)break;let t=N.signal();if(r=await L(),r===`auth_failed`||r===`fatal`){t.cleanup();break}i++,await k(e.non_exclusive_heartbeat_interval_ms,t.signal),t.cleanup()}let a=r===`auth_failed`||r===`fatal`?r:y.aborted?`shutdown`:x.size<t.maxSessions?`capacity_changed`:n!==null&&Date.now()>=n?`poll_due`:`config_disabled`;if(S(`tengu_bridge_heartbeat_mode_exited`,{reason:a,heartbeat_cycles:i,active_sessions:x.size}),a===`poll_due`&&p(`[bridge:poll] Heartbeat poll_due after ${i} cycles — falling through to pollForWork`),r===`auth_failed`||r===`fatal`){let t=N.signal();await k(e>0?e:f.non_exclusive_heartbeat_interval_ms,t.signal),t.cleanup()}}else if(e>0){let t=N.signal();await k(e,t.signal),t.cleanup()}}else await k(x.size>0?f.multisession_poll_interval_ms_partial_capacity:f.multisession_poll_interval_ms_not_at_capacity,y);continue}let _=x.size>=t.maxSessions;if(A.has(g.id)){if(p(`[bridge:work] Skipping already-completed workId=${g.id}`),_){let e=N.signal();f.non_exclusive_heartbeat_interval_ms>0?(await L(),await k(f.non_exclusive_heartbeat_interval_ms,e.signal)):f.multisession_poll_interval_ms_at_capacity>0&&await k(f.multisession_poll_interval_ms_at_capacity,e.signal),e.cleanup()}else await k(1e3,y);continue}let P;try{P=se(g.secret)}catch(e){let t=u(e);if(d.logError(`Failed to decode work secret for workId=${g.id}: ${t}`),S(`tengu_bridge_work_secret_failed`,{}),A.add(g.id),G(Me(c,i,g.id,d,m.stopWorkBaseDelayMs)),_){let e=N.signal();f.non_exclusive_heartbeat_interval_ms>0?(await L(),await k(f.non_exclusive_heartbeat_interval_ms,e.signal)):f.multisession_poll_interval_ms_at_capacity>0&&await k(f.multisession_poll_interval_ms_at_capacity,e.signal),e.cleanup()}continue}let R=async()=>{p(`[bridge:work] Acknowledging workId=${g.id}`);try{await c.acknowledgeWork(i,g.id,P.session_ingress_token)}catch(e){p(`[bridge:work] Acknowledge failed workId=${g.id}: ${u(e)}`)}},z=g.data.type;switch(g.data.type){case`healthcheck`:await R(),p(`[bridge:work] Healthcheck received`),d.logVerbose(`Healthcheck received`);break;case`session`:{let o=g.data.id;I(`work received: type=session sessionId=${o} workId=${g.id}`);try{ne(o,`session_id`)}catch{await R(),d.logError(`Invalid session_id received: ${o}`);break}let f=x.get(o);if(f){f.updateAccessToken(P.session_ingress_token),D.set(o,P.session_ingress_token),T.set(o,g.id),V?.schedule(o,P.session_ingress_token),p(`[bridge:work] Updated access token for existing sessionId=${o} workId=${g.id}`),await R();break}if(x.size>=t.maxSessions){p(`[bridge:work] At capacity (${x.size}/${t.maxSessions}), cannot spawn new session for workId=${g.id}`);break}await R();let _=Date.now(),w,N=!1,F;if(P.use_code_sessions===!0||e(process.env.CLAUDE_BRIDGE_USE_CCR_V2)){w=ce(t.apiBaseUrl,o);for(let e=1;e<=2;e++)try{F=await ae(w,P.session_ingress_token),N=!0,p(`[bridge:session] CCR v2: registered worker sessionId=${o} epoch=${F} attempt=${e}`);break}catch(t){let n=u(t);if(e<2){if(p(`[bridge:session] CCR v2: registerWorker attempt ${e} failed, retrying: ${n}`),await k(2e3,y),y.aborted)break;continue}d.logError(`CCR v2 worker registration failed for session ${o}: ${n}`),b(Error(`registerWorker failed: ${n}`)),A.add(g.id),G(Me(c,i,g.id,d,m.stopWorkBaseDelayMs))}if(!N)break}else w=oe(t.sessionIngressUrl,o);let L=t.spawnMode,z=t.dir,B=0;if(L===`worktree`&&(h===void 0||!ie(o,h))){let e=Date.now();try{let t=await s(`bridge-${he(o)}`);B=Date.now()-e,j.set(o,{worktreePath:t.worktreePath,worktreeBranch:t.worktreeBranch,gitRoot:t.gitRoot,hookBased:t.hookBased}),z=t.worktreePath,p(`[bridge:session] Created worktree for sessionId=${o} at ${t.worktreePath}`)}catch(e){let t=u(e);d.logError(`Failed to create worktree for session ${o}: ${t}`),b(Error(`Worktree creation failed: ${t}`)),A.add(g.id),G(Me(c,i,g.id,d,m.stopWorkBaseDelayMs));break}}p(`[bridge:session] Spawning sessionId=${o} sdkUrl=${w}`);let H=ee(o);I(`spawning session: sessionId=${o} sdkUrl=${w} useCcrV2=${N} workerEpoch=${F} dir=${z} accessToken=${P.session_ingress_token?P.session_ingress_token.slice(0,8)+`...`:`NONE`}`);let se=Te(l,{sessionId:o,sdkUrl:w,accessToken:P.session_ingress_token,useCcrV2:N,workerEpoch:F,onFirstUserMessage:e=>{if(M.has(H))return;M.add(H);let n=Fe(e);d.setSessionTitle(H,n),p(`[bridge:title] derived title for ${H}: ${n}`),import(`./createSession-CjdLcRec.js`).then(({updateBridgeSessionTitle:e})=>e(H,n,{baseUrl:t.apiBaseUrl})).catch(e=>p(`[bridge:title] failed to update title for ${H}: ${e}`,{level:`error`}))}},z);if(typeof se==`string`){d.logError(`Failed to spawn session ${o}: ${se}`);let e=j.get(o);e&&(j.delete(o),G(r(e.worktreePath,e.worktreeBranch,e.gitRoot,e.hookBased).catch(t=>d.logVerbose(`Failed to remove worktree ${e.worktreePath}: ${u(t)}`)))),A.add(g.id),G(Me(c,i,g.id,d,m.stopWorkBaseDelayMs));break}let U=se,le=Date.now()-_;S(`tengu_bridge_session_started`,{active_sessions:x.size,spawn_mode:L,in_worktree:j.has(o),spawn_duration_ms:le,worktree_create_ms:B,inProtectedNamespace:n()}),v(`info`,`bridge_session_started`,{spawn_mode:L,in_worktree:j.has(o),spawn_duration_ms:le,worktree_create_ms:B}),x.set(o,U),T.set(o,g.id),D.set(o,P.session_ingress_token),E.set(o,H);let W=Date.now();C.set(o,W),d.logSessionStart(o,`Session ${o}`);let K=he(o),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&&(q=de(ue(),`claude`,`bridge-session-${K}.log`));q&&d.logVerbose(`Debug log: ${q}`),d.addSession(H,a(H,t.sessionIngressUrl)),Q(),d.setAttached(H),Ie(H,t.apiBaseUrl).then(e=>{e&&x.has(o)&&(M.add(H),d.setSessionTitle(H,e),p(`[bridge:title] server title for ${H}: ${e}`))}).catch(e=>p(`[bridge:title] failed to fetch title for ${H}: ${e}`,{level:`error`}));let J=t.sessionTimeoutMs??864e5;if(J>0){let e=setTimeout(Ne,J,o,J,d,te,U);O.set(o,e)}N&&re.add(o),V?.schedule(o,P.session_ingress_token),U.done.then(me(o,W,U));break}default:await R(),p(`[bridge:work] Unknown work type: ${z}, skipping`);break}if(_){let e=N.signal();f.non_exclusive_heartbeat_interval_ms>0?(await L(),await k(f.non_exclusive_heartbeat_interval_ms,e.signal)):f.multisession_poll_interval_ms_at_capacity>0&&await k(f.multisession_poll_interval_ms_at_capacity,e.signal),e.cleanup()}}catch(e){if(y.aborted)break;if(e instanceof B){z(e.errorType)?d.logStatus(e.message):R(e)?p(`[bridge:work] Suppressed 403 error: ${e.message}`):(d.logError(e.message),b(e)),S(`tengu_bridge_fatal_error`,{status:e.status,error_type:e.errorType}),v(z(e.errorType)?`info`:`error`,`bridge_fatal_error`,{status:e.status,error_type:e.errorType});break}let t=P(e);if(I(`poll error: ${t} isConn=${Oe(e)} isServer=${ke(e)} activeSessions=${x.size}`),Oe(e)||ke(e)){let e=Date.now();X!==null&&e-X>Ce(m)&&(p(`[bridge:work] Detected system sleep (${Math.round((e-X)/1e3)}s gap), resetting error budget`),v(`info`,`bridge_poll_sleep_detected`,{gapMs:e-X}),J=null,K=0,Y=null,q=0),X=e,J||(J=e);let n=e-J;if(n>=m.connGiveUpMs){d.logError(`Server unreachable for ${Math.round(n/6e4)} minutes, giving up.`),S(`tengu_bridge_poll_give_up`,{error_type:`connection`,elapsed_ms:n}),v(`error`,`bridge_poll_give_up`,{error_type:`connection`,elapsed_ms:n});break}Y=null,q=0,K=K?Math.min(K*2,m.connCapMs):m.connInitialMs;let r=Ae(K);d.logVerbose(`Connection error, retrying in ${je(r)} (${Math.round(n/1e3)}s elapsed): ${t}`),d.updateReconnectingStatus(je(r),w(n)),F().non_exclusive_heartbeat_interval_ms>0&&await L(),await k(r,y)}else{let e=Date.now();X!==null&&e-X>Ce(m)&&(p(`[bridge:work] Detected system sleep (${Math.round((e-X)/1e3)}s gap), resetting error budget`),v(`info`,`bridge_poll_sleep_detected`,{gapMs:e-X}),J=null,K=0,Y=null,q=0),X=e,Y||(Y=e);let n=e-Y;if(n>=m.generalGiveUpMs){d.logError(`Persistent errors for ${Math.round(n/6e4)} minutes, giving up.`),S(`tengu_bridge_poll_give_up`,{error_type:`general`,elapsed_ms:n}),v(`error`,`bridge_poll_give_up`,{error_type:`general`,elapsed_ms:n});break}J=null,K=0,q=q?Math.min(q*2,m.generalCapMs):m.generalInitialMs;let r=Ae(q);d.logVerbose(`Poll failed, retrying in ${je(r)} (${Math.round(n/1e3)}s elapsed): ${t}`),d.updateReconnectingStatus(je(r),w(n)),F().non_exclusive_heartbeat_interval_ms>0&&await L(),await k(r,y)}}}pe(),d.clearStatus();let ge=Date.now()-U;S(`tengu_bridge_shutdown`,{active_sessions:x.size,loop_duration_ms:ge}),v(`info`,`bridge_shutdown`,{active_sessions:x.size,loop_duration_ms:ge});let $=new Set(x.keys());h&&$.add(h);let _e=new Map(E);if(x.size>0){p(`[bridge:shutdown] Shutting down ${x.size} active session(s)`),d.logStatus(`Shutting down ${x.size} active session(s)\u2026`);let e=new Map(T);for(let[e,t]of x.entries())p(`[bridge:shutdown] Sending SIGTERM to sessionId=${e}`),t.kill();let t=new AbortController;await Promise.race([Promise.allSettled([...x.values()].map(e=>e.done)),k(m.shutdownGraceMs??3e4,t.signal)]),t.abort();for(let[e,t]of x.entries())p(`[bridge:shutdown] Force-killing stuck sessionId=${e}`),t.forceKill();for(let e of O.values())clearTimeout(e);if(O.clear(),V?.cancelAll(),j.size>0){let e=[...j.values()];j.clear(),p(`[bridge:shutdown] Cleaning up ${e.length} worktree(s)`),await Promise.allSettled(e.map(e=>r(e.worktreePath,e.worktreeBranch,e.gitRoot,e.hookBased)))}await Promise.allSettled([...e.entries()].map(([e,t])=>c.stopWork(i,t,!0).catch(n=>d.logVerbose(`Failed to stop work ${t} for session ${e}: ${u(n)}`))))}W.size>0&&await Promise.allSettled([...W]),$.size>0&&(p(`[bridge:shutdown] Archiving ${$.size} session(s)`),await Promise.allSettled([...$].map(e=>c.archiveSession(_e.get(e)??ee(e)).catch(t=>d.logVerbose(`Failed to archive session ${e}: ${u(t)}`)))));try{await c.deregisterEnvironment(i),p(`[bridge:shutdown] Environment deregistered, bridge offline`),d.logVerbose(`Environment deregistered.`)}catch(e){d.logVerbose(`Failed to deregister environment: ${u(e)}`)}let{clearBridgePointer:ve}=await import(`./bridgePointer-DHWK3LEe.js`);await ve(t.dir),d.logVerbose(`Environment offline.`)}var De=new Set([`ECONNREFUSED`,`ECONNRESET`,`ETIMEDOUT`,`ENETUNREACH`,`EHOSTUNREACH`]);function Oe(e){return!!(e&&typeof e==`object`&&`code`in e&&typeof e.code==`string`&&De.has(e.code))}function ke(e){return!!e&&typeof e==`object`&&`code`in e&&typeof e.code==`string`&&e.code===`ERR_BAD_RESPONSE`}function Ae(e){return Math.max(0,e+e*.25*(2*Math.random()-1))}function je(e){return e>=1e3?`${(e/1e3).toFixed(1)}s`:`${Math.round(e)}ms`}async function Me(e,t,n,r,i=1e3){for(let a=1;a<=3;a++)try{await e.stopWork(t,n,!1),p(`[bridge:work] stopWork succeeded for workId=${n} on attempt ${a}/3`);return}catch(e){if(e instanceof B){R(e)?p(`[bridge:work] Suppressed stopWork 403 for ${n}: ${e.message}`):r.logError(`Failed to stop work ${n}: ${e.message}`),v(`error`,`bridge_stop_work_failed`,{attempts:a,fatal:!0});return}let t=u(e);if(a<3){let e=Ae(i*2**(a-1));r.logVerbose(`Failed to stop work ${n} (attempt ${a}/3), retrying in ${je(e)}: ${t}`),await k(e)}else r.logError(`Failed to stop work ${n} after 3 attempts: ${t}`),v(`error`,`bridge_stop_work_failed`,{attempts:3})}}function Ne(e,t,n,r,i){p(`[bridge:session] sessionId=${e} timed out after ${w(t)}`),S(`tengu_bridge_session_timeout`,{timeout_ms:t}),n.logSessionFailed(e,`Session timed out after ${w(t)}`),r.add(e),i.kill()}var Pe=80;function Fe(e){return C(e.replace(/\s+/g,` `).trim(),Pe)}async function Ie(e,t){let{getBridgeSession:n}=await import(`./createSession-CjdLcRec.js`);return(await n(e,{baseUrl:t}))?.title||void 0}var Le=class extends Error{constructor(e){super(e),this.name=`BridgeHeadlessPermanentError`}};async function Re(e,t){let{dir:n,log:r}=e;process.chdir(n);let{setOriginalCwd:i,setCwdState:a}=await import(`./state-CsdHk8n-.js`);i(n),a(n);let{enableConfigs:o,checkHasTrustDialogAccepted:s}=await import(`./config-DMKtiMzJ.js`);o();let{initSinks:c}=await import(`./sinks-DppGvgz1.js`);if(c(),!s())throw new Le(`Workspace not trusted: ${n}. Run \`claude\` in that directory first to accept the trust dialog.`);if(!e.getAccessToken())throw Error(V);let{getBridgeBaseUrl:l}=await import(`./bridgeConfig-Ccm79Jze.js`),d=l();if(d.startsWith(`http://`)&&!d.includes(`localhost`)&&!d.includes(`127.0.0.1`))throw new Le(`Remote Control base URL uses HTTP. Only HTTPS or localhost HTTP is allowed.`);let f=process.env.CLAUDE_BRIDGE_SESSION_INGRESS_URL||d,{getBranch:p,getRemoteUrl:m,findGitRoot:h}=await import(`./git-Bs1vtuvX.js`),{hasWorktreeCreateHook:g}=await import(`./hooks-D-twhU_z.js`);if(e.spawnMode===`worktree`&&!(g()||h(n)!==null))throw new Le(`Worktree mode requires a git repository or WorktreeCreate hooks. Directory ${n} has neither.`);let _=await p(),v=await m(),y=q(),b=Z(),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:Z(),apiBaseUrl:d,sessionIngressUrl:f,sessionTimeoutMs:e.sessionTimeoutMs},S=re({baseUrl:d,getAccessToken:e.getAccessToken,runnerVersion:`0.0.12`,onDebug:r,onAuth401:e.onAuth401,getTrustedDeviceToken:U}),C,w;try{let e=await S.registerBridgeEnvironment(x);C=e.environment_id,w=e.environment_secret}catch(e){throw Error(`Bridge registration failed: ${u(e)}`)}let T=be({execPath:process.execPath,scriptArgs:we(),env:process.env,verbose:!1,sandbox:e.sandbox,permissionMode:e.permissionMode,onDebug:r}),E=ze(r);E.printBanner(x,C);let D;if(e.createSessionOnStart){let{createBridgeSession:n}=await import(`./createSession-CjdLcRec.js`);try{let i=await n({environmentId:C,title:e.name,events:[],gitRepoUrl:v,branch:_,signal:t,baseUrl:d,getAccessToken:e.getAccessToken,permissionMode:e.permissionMode});i&&(D=i,r(`created initial session ${i}`))}catch(e){r(`session pre-creation failed (non-fatal): ${u(e)}`)}}await Ee(x,C,w,S,T,E,t,void 0,D,async()=>e.getAccessToken())}function ze(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}}E(),d();var Be=78,Ve=1;async function He(e){if(!e){console.error(`Error: --daemon-worker requires a worker kind`),process.exitCode=Be;return}switch(e){case`remoteControl`:await Ue();break;default:console.error(`Error: unknown daemon worker kind '${e}'`),process.exitCode=Be}}async function Ue(){let e=process.env.DAEMON_WORKER_DIR||Y(`.`),t=process.env.DAEMON_WORKER_NAME||void 0,n=process.env.DAEMON_WORKER_SPAWN_MODE||`same-dir`,r=parseInt(process.env.DAEMON_WORKER_CAPACITY||`4`,10),i=process.env.DAEMON_WORKER_PERMISSION||void 0,a=process.env.DAEMON_WORKER_SANDBOX===`1`,o=process.env.DAEMON_WORKER_TIMEOUT_MS?parseInt(process.env.DAEMON_WORKER_TIMEOUT_MS,10):void 0,s=process.env.DAEMON_WORKER_CREATE_SESSION!==`0`,c=new AbortController,l=()=>c.abort();process.on(`SIGTERM`,l),process.on(`SIGINT`,l);let d={dir:e,name:t,spawnMode:n,capacity:r,permissionMode:i,sandbox:a,sessionTimeoutMs:o,createSessionOnStart:s,getAccessToken:()=>D()?.accessToken,onAuth401:async e=>!!D()?.accessToken,log:e=>{console.log(`[remoteControl] ${e}`)}};try{await Re(d,c.signal)}catch(e){e instanceof Le?(console.error(`[remoteControl] permanent error: ${e.message}`),process.exitCode=Be):(console.error(`[remoteControl] transient error: ${u(e)}`),process.exitCode=Ve)}finally{process.off(`SIGTERM`,l),process.off(`SIGINT`,l)}}export{He as runDaemonWorker};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{Tt as e,bt as t}from"./loadAgentsDir-BXtV2jiO.js";e();export{t as execIntoTmuxWorktree};
|
package/dist/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
|
-
import{l as e,o as t}from"./chunks/envUtils-
|
|
2
|
+
import{l as e,o as t}from"./chunks/envUtils-DcaKZlRU.js";var n=globalThis.performance,r=new Map,i=new Map;function a(){return n.now()}function o(e){return r.set(e,a()),{name:e,entryType:`mark`,startTime:r.get(e),duration:0}}function s(e,t,n){let o,s;if(typeof t==`string`){let e=r.get(t),i=n?r.get(n):a();o=e??a(),s=(i??a())-o}else t&&typeof t==`object`?(o=t.start??0,s=(t.end??a())-o):(o=0,s=a());i.set(e,{name:e,startTime:o,duration:s})}function c(e){return e===`mark`?[...r.entries()].map(([e,t])=>({name:e,entryType:`mark`,startTime:t,duration:0})):e===`measure`?[...i.values()].map(e=>({name:e.name,entryType:`measure`,startTime:e.startTime,duration:e.duration})):[]}function l(e,t){return c(t??`mark`).concat(t===void 0?c(`measure`):[]).filter(t=>t.name===e)}function u(e){e===void 0?r.clear():r.delete(e)}function d(e){e===void 0?i.clear():i.delete(e)}var f={now:a,mark:o,measure:s,getEntriesByType:c,getEntriesByName:l,clearMarks:u,clearMeasures:d,clearResourceTimings:(()=>{}),setResourceTimingBufferSize:(()=>{}),markResourceTiming:(()=>{}),get timeOrigin(){return n.timeOrigin},get onresourcetimingbufferfull(){return n.onresourcetimingbufferfull},set onresourcetimingbufferfull(e){},toJSON(){return n.toJSON()}};function p(){globalThis.__performanceShimInstalled||(globalThis.__performanceShimInstalled=!0,globalThis.performance=f)}if(p(),t(),globalThis.MACRO===void 0&&(globalThis.MACRO={VERSION:process.env.CLAUDE_CODE_VERSION||`2.1.888`,BUILD_TIME:new Date().toISOString(),FEEDBACK_CHANNEL:``,ISSUES_EXPLAINER:``,NATIVE_PACKAGE_URL:``,PACKAGE_URL:``,VERSION_CHANGELOG:``}),e(process.env.CLAUDE_CODE_FORCE_INTERACTIVE)){for(let e of[process.stdin,process.stdout,process.stderr])if(!e.isTTY)try{Object.defineProperty(e,"isTTY",{value:!0,configurable:!0})}catch{}}if(process.env.COREPACK_ENABLE_AUTO_PIN=`0`,process.env.CLAUDE_CODE_REMOTE===`true`){let e=process.env.NODE_OPTIONS||``;process.env.NODE_OPTIONS=e?`${e} --max-old-space-size=8192`:`--max-old-space-size=8192`}async function m(){let e=process.argv.slice(2);if(e.length===1&&(e[0]===`--version`||e[0]===`-v`||e[0]===`-V`)){console.log(`0.0.12 (Work Mate)`);return}let{profileCheckpoint:t}=await import(`./chunks/startupProfiler-CUlV07MD.js`);if(t(`cli_entry`),process.argv[2]===`--acp`){t(`cli_acp_path`);let{runAcpAgent:e}=await import(`./chunks/entry-CrZCZQQC.js`);await e();return}if(e[0]===`--daemon-worker`||e[0]?.startsWith(`--daemon-worker=`)){let t=e[0]===`--daemon-worker`?e[1]:e[0].split(`=`)[1],{runDaemonWorker:n}=await import(`./chunks/workerRegistry-Cfo7bKlm.js`);await n(t);return}if(e[0]===`daemon`){t(`cli_daemon_path`);let{enableConfigs:n}=await import(`./chunks/config-DMKtiMzJ.js`);n();let{setShellIfWindows:r}=await import(`./chunks/windowsPaths-B8p9tFRF.js`);r();let{initSinks:i}=await import(`./chunks/sinks-DppGvgz1.js`);i();let{daemonMain:a}=await import(`./chunks/main-CGLCy2pM.js`);await a(e.slice(1));return}if(e.includes(`--bg`)||e.includes(`--background`)){t(`cli_daemon_path`);let{enableConfigs:n}=await import(`./chunks/config-DMKtiMzJ.js`);n();let{setShellIfWindows:r}=await import(`./chunks/windowsPaths-B8p9tFRF.js`);r(),await(await import(`./chunks/bg-Ci7pG4eo.js`)).handleBgStart(e.filter(e=>e!==`--bg`&&e!==`--background`));return}if(e[0]===`ps`||e[0]===`logs`||e[0]===`attach`||e[0]===`kill`){let n=e[0]===`ps`?`status`:e[0];console.error(`[deprecated] Use: claude daemon ${n}${e[1]?` `+e[1]:``}`),t(`cli_daemon_path`);let{enableConfigs:r}=await import(`./chunks/config-DMKtiMzJ.js`);r();let{setShellIfWindows:i}=await import(`./chunks/windowsPaths-B8p9tFRF.js`);i();let{initSinks:a}=await import(`./chunks/sinks-DppGvgz1.js`);a();let{daemonMain:o}=await import(`./chunks/main-CGLCy2pM.js`);await o([e[0]===`ps`?`status`:e[0],...e.slice(1)]);return}if(e[0]===`job`){t(`cli_templates_path`);let{templatesMain:n}=await import(`./chunks/templateJobs-C94jEE6O.js`);await n(e.slice(1)),process.exit(0)}if(e[0]===`new`||e[0]===`list`||e[0]===`reply`){console.error(`[deprecated] Use: claude job ${e[0]} ${e.slice(1).join(` `)}`.trim()),t(`cli_templates_path`);let{templatesMain:n}=await import(`./chunks/templateJobs-C94jEE6O.js`);await n(e),process.exit(0)}if((e.includes(`--tmux`)||e.includes(`--tmux=classic`))&&(e.includes(`-w`)||e.includes(`--worktree`)||e.some(e=>e.startsWith(`--worktree=`)))){t(`cli_tmux_worktree_fast_path`);let{enableConfigs:n}=await import(`./chunks/config-DMKtiMzJ.js`);n();let{isWorktreeModeEnabled:r}=await import(`./chunks/worktreeModeEnabled-D68iEHpC.js`);if(r()){let{execIntoTmuxWorktree:t}=await import(`./chunks/worktree-D0k_pCEz.js`),n=await t(e);if(n.handled)return;if(n.error){let{exitWithError:e}=await import(`./chunks/process-CNfq37LF.js`);e(n.error)}}}e.length===1&&(e[0]===`--update`||e[0]===`--upgrade`)&&(process.argv=[process.argv[0],process.argv[1],`update`]),e.includes(`--bare`)&&(process.env.CLAUDE_CODE_SIMPLE=`1`);let{startCapturingEarlyInput:n}=await import(`./chunks/earlyInput-BEjRkAtH.js`);n(),t(`cli_before_main_import`);let{main:r}=await import(`./chunks/main-CkjTzYj1.js`);t(`cli_after_main_import`),await r(),t(`cli_after_main_complete`)}await m();export{};
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./ApproveApiKey-M6U-NafA.js";export{e as ApproveApiKey};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as e,n as t,o as n}from"./rolldown-runtime-DaDcL9Zw.js";import{n as r,t as i}from"./figures-5ThXQEtq.js";import{Ba as a,Bs as o,Da as s,FS as c,GC as l,IS as u,Ja as d,KC as f,Lf as p,Qg as ee,Sg as te,Uf as m,Wf as h,ZC as g,_f as ne,au as re,du as _,ed as v,el as y,hu as b,id as ie,iu as ae,jn as oe,kn as se,mp as ce,ou as x,pp as S,qC as le,ra as C,ru as w,sd as ue,su as de,t_ as fe,td as pe,tl as me,vf as he,vg as ge,vp as _e,wg as ve,xg as ye,yg as be,yp as xe,zf as Se,zs as Ce}from"./loadAgentsDir-BL93ulMm.js";import{D as T,Gt as E,H as we,I as D,Lt as Te,P as O,T as k,fi as A,mt as Ee,ot as De,t as j,y as M}from"./src-P_wYS_NJ2.js";import{t as N}from"./jsx-runtime-Bb4Xn-E0.js";import{P as Oe,R as ke,_ as Ae,f as je}from"./debug-BecbSVoN.js";import{Ln as P,Rn as Me,Wt as Ne,zn as Pe}from"./settings-D4CpDv2y.js";import{C as Fe,b as F,f as Ie,l as Le,u as Re,v as I}from"./startupProfiler-CmH_aVy2.js";import{l as L,o as ze}from"./stringUtils-C8PaYpQF.js";import{bn as Be,jt as Ve,vn as He,yn as Ue}from"./prompt-Dx7IWhBt.js";import{i as We,n as Ge}from"./mappers-DQxMcezy.js";function R(e,t,n=1e3,r=0,i){let a=()=>Le(Math.max(0,(i??Date.now())-e-r));return(0,Ke.useSyncExternalStore)((0,Ke.useCallback)(e=>{if(!t)return()=>{};let r=setInterval(e,n);return()=>clearInterval(r)},[t,n]),a,a)}var Ke,z=t((()=>{Ke=n(A(),1),I()}));function qe(e,t,n){let r=He(t,e.toolName);if(!r)return e.toolName;try{let t=r.inputSchema.safeParse(e.input),i=t.success?t.data:{},a=r.userFacingName(i);if(!a)return e.toolName;let o=r.renderToolUseMessage(i,{theme:n,verbose:!1});return o?(0,Je.jsxs)(O,{children:[a,`(`,o,`)`]}):a}catch{return e.toolName}}var Je,Ye=t((()=>{A(),j(),Be(),Je=N()}));function Xe(e,t){let{isIdle:n,awaitingApproval:r,hasError:a,shutdownRequested:o}=t??{};return a?i.cross:r?i.questionMarkPrefix:o?i.warning:e===`running`?n?i.ellipsis:i.play:e===`completed`?i.tick:e===`failed`||e===`killed`?i.cross:i.bullet}function Ze(e,t){let{isIdle:n,awaitingApproval:r,hasError:i,shutdownRequested:a}=t??{};return i?`error`:r||a?`warning`:n?`background`:e===`completed`?`success`:e===`failed`?`error`:e===`killed`?`warning`:`background`}function Qe(e,t){if(!t)return!1;let n=!1;for(let t of Object.values(e))if(h(t))return n=!0,!1;return n}var $e=t((()=>{r(),m()}));function et({agent:e,onDone:t,onKillAgent:n,onBack:r}){let[i]=we(),a=(0,tt.useMemo)(()=>y(Ue()),[]),o=R(e.startTime,e.status===`running`,1e3,e.totalPausedMs??0);E({"confirm:yes":t},{context:`Confirmation`});let c=i=>{i.key===` `?(i.preventDefault(),t()):i.key===`left`&&r?(i.preventDefault(),r()):i.key===`x`&&e.status===`running`&&n&&(i.preventDefault(),n())},l=s(e.prompt,`plan`),u=e.prompt.length>300?e.prompt.substring(0,297)+`…`:e.prompt,d=e.result?.totalTokens??e.progress?.tokenCount,f=e.result?.totalToolUseCount??e.progress?.toolUseCount;return(0,B.jsx)(D,{flexDirection:`column`,tabIndex:0,autoFocus:!0,onKeyDown:c,children:(0,B.jsx)(M,{title:(0,B.jsxs)(O,{children:[e.selectedAgent?.agentType??`agent`,` › `,e.description||`Async agent`]}),subtitle:(0,B.jsxs)(O,{children:[e.status!==`running`&&(0,B.jsxs)(O,{color:Ze(e.status),children:[Xe(e.status),` `,e.status===`completed`?`Completed`:e.status===`failed`?`Failed`:`Stopped`,` · `]}),(0,B.jsxs)(O,{dimColor:!0,children:[o,d!==void 0&&d>0&&(0,B.jsxs)(B.Fragment,{children:[` · `,Ie(d),` tokens`]}),f!==void 0&&f>0&&(0,B.jsxs)(B.Fragment,{children:[` `,`· `,f,` `,f===1?`tool`:`tools`]})]})]}),onCancel:t,color:`background`,inputGuide:t=>t.pending?(0,B.jsxs)(O,{children:[`Press `,t.keyName,` again to exit`]}):(0,B.jsxs)(k,{children:[r&&(0,B.jsx)(T,{shortcut:`←`,action:`go back`}),(0,B.jsx)(T,{shortcut:`Esc/Enter/Space`,action:`close`}),e.status===`running`&&n&&(0,B.jsx)(T,{shortcut:`x`,action:`stop`})]}),children:(0,B.jsxs)(D,{flexDirection:`column`,children:[e.status===`running`&&e.progress?.recentActivities&&e.progress.recentActivities.length>0&&(0,B.jsxs)(D,{flexDirection:`column`,children:[(0,B.jsx)(O,{bold:!0,dimColor:!0,children:`Progress`}),e.progress.recentActivities.map((t,n)=>(0,B.jsxs)(O,{dimColor:n<e.progress.recentActivities.length-1,wrap:`truncate-end`,children:[n===e.progress.recentActivities.length-1?`› `:` `,qe(t,a,i)]},n))]}),l?(0,B.jsx)(D,{marginTop:1,children:(0,B.jsx)(_e,{addMargin:!1,planContent:l})}):(0,B.jsxs)(D,{flexDirection:`column`,marginTop:1,children:[(0,B.jsx)(O,{bold:!0,dimColor:!0,children:`Prompt`}),(0,B.jsx)(O,{wrap:`wrap`,children:u})]}),e.status===`failed`&&e.error&&(0,B.jsxs)(D,{flexDirection:`column`,marginTop:1,children:[(0,B.jsx)(O,{bold:!0,color:`error`,children:`Error`}),(0,B.jsx)(O,{color:`error`,wrap:`wrap`,children:e.error})]})]})})})}var tt,B,nt=t((()=>{tt=n(A(),1),z(),j(),l(),Be(),me(),I(),a(),xe(),Ye(),$e(),B=N()}));function rt(e,t,n,r){if(!e)return`${t} found · ${n} verified`;if(e===`synthesizing`){let e=[`${n} verified`];return r>0&&e.push(`${r} refuted`),e.push(`deduping`),e.join(` · `)}if(e===`verifying`){let e=[`${t} found`,`${n} verified`];return r>0&&e.push(`${r} refuted`),e.join(` · `)}return t>0?`${t} found`:`finding`}function it({text:e,phase:t=0}){return(0,V.jsx)(V.Fragment,{children:[...e].map((e,n)=>(0,V.jsx)(O,{color:S(n+t),children:e},n))})}function at(e,t,n){let r=(0,ct.useRef)(e),i=(0,ct.useRef)(t);return n||e<r.current?r.current=e:e>r.current&&t!==i.current&&(r.current+=1,i.current=t),r.current}function ot({session:e}){let t=be().prefersReducedMotion??!1,n=e.reviewProgress,r=e.status===`running`,[,i]=Ee(r&&!t?lt:null),a=n?.bugsFound??0,o=n?.bugsVerified??0,s=n?.bugsRefuted??0,c=t||!r,l=at(a,i,c),u=at(o,i,c),d=at(s,i,c),f=Math.floor(i/(lt*3))%7;if(e.status===`completed`)return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(O,{color:`background`,children:[`◆`,` `]}),(0,V.jsx)(it,{text:`ultrareview`,phase:0}),(0,V.jsx)(O,{dimColor:!0,children:` ready · shift+↓ to view`})]});if(e.status===`failed`)return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(O,{color:`background`,children:[`◆`,` `]}),(0,V.jsx)(it,{text:`ultrareview`,phase:0}),(0,V.jsxs)(O,{color:`error`,dimColor:!0,children:[` · `,`error`]})]});let p=n?rt(n.stage,l,u,d):`setting up`;return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(O,{color:`background`,children:[`◇`,` `]}),(0,V.jsx)(it,{text:`ultrareview`,phase:r?f:0}),(0,V.jsxs)(O,{dimColor:!0,children:[` · `,p]})]})}function st({session:e}){if(e.isRemoteReview)return(0,V.jsx)(ot,{session:e});if(e.status===`completed`)return(0,V.jsx)(O,{bold:!0,color:`success`,dimColor:!0,children:`done`});if(e.status===`failed`)return(0,V.jsx)(O,{bold:!0,color:`error`,dimColor:!0,children:`error`});if(!e.todoList.length)return(0,V.jsxs)(O,{dimColor:!0,children:[e.status,`…`]});let t=P(e.todoList,e=>e.status===`completed`),n=e.todoList.length;return(0,V.jsxs)(O,{dimColor:!0,children:[t,`/`,n]})}var ct,V,lt,ut=t((()=>{ct=n(A(),1),Ne(),ge(),j(),Me(),ce(),V=N(),lt=80}));function H({status:e,label:t,suffix:n}){return(0,U.jsxs)(O,{color:e===`completed`?`success`:e===`failed`?`error`:e===`killed`?`warning`:void 0,dimColor:!0,children:[`(`,t??e,n,`)`]})}function dt({shell:e}){switch(e.status){case`completed`:return(0,U.jsx)(H,{status:`completed`,label:`done`});case`failed`:return(0,U.jsx)(H,{status:`failed`,label:`error`});case`killed`:return(0,U.jsx)(H,{status:`killed`,label:`stopped`});case`running`:case`pending`:return(0,U.jsx)(H,{status:`running`})}}var U,ft=t((()=>{j(),U=N()}));function pt({task:e,maxActivityWidth:t}){let n=t??40;switch(e.type){case`local_bash`:return(0,W.jsxs)(O,{children:[F(e.command,n,!0),` `,(0,W.jsx)(dt,{shell:e})]});case`remote_agent`:return e.isRemoteReview?(0,W.jsx)(O,{children:(0,W.jsx)(st,{session:e})}):(0,W.jsxs)(O,{children:[(0,W.jsxs)(O,{dimColor:!0,children:[e.status===`running`||e.status===`pending`?`◇`:`◆`,` `]}),F(e.title,n,!0),(0,W.jsx)(O,{dimColor:!0,children:` · `}),(0,W.jsx)(st,{session:e})]});case`local_agent`:return(0,W.jsxs)(O,{children:[F(e.description,n,!0),` `,(0,W.jsx)(H,{status:e.status,label:e.status===`completed`?`done`:void 0,suffix:e.status===`completed`&&!e.notified?`, unread`:void 0})]});case`local_workflow`:{let t=e;return(0,W.jsxs)(O,{children:[F(t.workflowName??e.summary??e.description,n,!0),` `,(0,W.jsx)(H,{status:e.status,label:e.status===`running`?`${t.agentCount} ${L(t.agentCount,`agent`)}`:e.status===`completed`?`done`:void 0,suffix:e.status===`completed`&&!e.notified?`, unread`:void 0})]})}case`dream`:{let t=e.filesTouched.length,n=e.phase===`updating`&&t>0?`${t} ${L(t,`file`)}`:`${e.sessionsReviewing} ${L(e.sessionsReviewing,`session`)}`;return(0,W.jsxs)(O,{children:[e.description,` `,(0,W.jsxs)(O,{dimColor:!0,children:[`· `,e.phase,` · `,n]}),` `,(0,W.jsx)(H,{status:e.status,label:e.status===`completed`?`done`:void 0,suffix:e.status===`completed`&&!e.notified?`, unread`:void 0})]})}}}var W,mt=t((()=>{A(),j(),I(),ze(),Ne(),ut(),ft(),W=N()}));function ht({task:e,onDone:t,onBack:n,onKill:r}){let i=R(e.startTime,e.status===`running`,1e3,0);E({"confirm:yes":t},{context:`Confirmation`});let a=i=>{i.key===` `?(i.preventDefault(),t()):i.key===`left`&&n?(i.preventDefault(),n()):i.key===`x`&&e.status===`running`&&r&&(i.preventDefault(),r())},o=e.turns.filter(e=>e.text!==``),s=o.slice(-6),c=o.length-s.length;return(0,G.jsx)(D,{flexDirection:`column`,tabIndex:0,autoFocus:!0,onKeyDown:a,children:(0,G.jsx)(M,{title:`Memory consolidation`,subtitle:(0,G.jsxs)(O,{dimColor:!0,children:[i,` · reviewing `,e.sessionsReviewing,` `,L(e.sessionsReviewing,`session`),e.filesTouched.length>0&&(0,G.jsxs)(G.Fragment,{children:[` `,`· `,e.filesTouched.length,` `,L(e.filesTouched.length,`file`),` touched`]})]}),onCancel:t,color:`background`,inputGuide:t=>t.pending?(0,G.jsxs)(O,{children:[`Press `,t.keyName,` again to exit`]}):(0,G.jsxs)(k,{children:[n&&(0,G.jsx)(T,{shortcut:`←`,action:`go back`}),(0,G.jsx)(T,{shortcut:`Esc/Enter/Space`,action:`close`}),e.status===`running`&&r&&(0,G.jsx)(T,{shortcut:`x`,action:`stop`})]}),children:(0,G.jsxs)(D,{flexDirection:`column`,gap:1,children:[(0,G.jsxs)(O,{children:[(0,G.jsx)(O,{bold:!0,children:`Status:`}),` `,e.status===`running`?(0,G.jsx)(O,{color:`background`,children:`running`}):e.status===`completed`?(0,G.jsx)(O,{color:`success`,children:e.status}):(0,G.jsx)(O,{color:`error`,children:e.status})]}),s.length===0?(0,G.jsx)(O,{dimColor:!0,children:e.status===`running`?`Starting…`:`(no text output)`}):(0,G.jsxs)(G.Fragment,{children:[c>0&&(0,G.jsxs)(O,{dimColor:!0,children:[`(`,c,` earlier `,L(c,`turn`),`)`]}),s.map((e,t)=>(0,G.jsxs)(D,{flexDirection:`column`,children:[(0,G.jsx)(O,{wrap:`wrap`,children:e.text}),e.toolUseCount>0&&(0,G.jsxs)(O,{dimColor:!0,children:[` `,`(`,e.toolUseCount,` `,L(e.toolUseCount,`tool`),`)`]})]},t))]})]})})})}var G,gt=t((()=>{A(),z(),j(),l(),ze(),G=N()}));function _t({stage:e,completed:t,hasProgress:n}){let r=e?xt.indexOf(e):-1,i=!t&&!n;return(0,q.jsxs)(O,{children:[i?(0,q.jsx)(O,{color:`background`,children:`Setup`}):(0,q.jsx)(O,{dimColor:!0,children:`Setup`}),(0,q.jsx)(O,{dimColor:!0,children:` → `}),xt.map((e,n)=>{let a=!t&&!i&&n===r;return(0,q.jsxs)(K.Fragment,{children:[n>0&&(0,q.jsx)(O,{dimColor:!0,children:` → `}),a?(0,q.jsx)(O,{color:`background`,children:St[e]}):(0,q.jsx)(O,{dimColor:!0,children:St[e]})]},e)}),t&&(0,q.jsx)(O,{color:`success`,children:` ✓`})]})}function vt(e){let t=e.reviewProgress;if(!t)return e.status===`completed`?`done`:`setting up`;let n=t.bugsVerified,r=t.bugsRefuted??0;if(e.status===`completed`){let e=[`${n} ${L(n,`finding`)}`];return r>0&&e.push(`${r} refuted`),e.join(` · `)}return rt(t.stage,t.bugsFound,n,r)}function yt({session:e,onDone:t,onBack:n,onKill:r}){let i=e.status===`completed`,a=e.status===`running`||e.status===`pending`,[o,s]=(0,K.useState)(!1),c=R(e.startTime,a,1e3,0,e.endTime),l=()=>t(`Remote session details dismissed`,{display:`system`}),d=n??l,f=x(e.sessionId),p=i?`ready`:a?`running`:e.status;if(o)return(0,q.jsx)(M,{title:`Stop ultrareview?`,onCancel:()=>s(!1),color:`background`,children:(0,q.jsxs)(D,{flexDirection:`column`,gap:1,children:[(0,q.jsx)(O,{dimColor:!0,children:`This archives the remote session and stops local tracking. The review will not complete and any findings so far are discarded.`}),(0,q.jsx)(v,{options:[{label:`Stop ultrareview`,value:`stop`},{label:`Back`,value:`back`}],onChange:e=>{e===`stop`?(r?.(),d()):s(!1)}})]})});let ee=i?[{label:`Open in Claude Code on the web`,value:`open`},{label:`Dismiss`,value:`dismiss`}]:[{label:`Open in Claude Code on the web`,value:`open`},...r&&a?[{label:`Stop ultrareview`,value:`stop`}]:[],{label:`Back`,value:`back`}];return(0,q.jsx)(M,{title:(0,q.jsxs)(O,{children:[(0,q.jsxs)(O,{color:`background`,children:[i?`◆`:`◇`,` `]}),(0,q.jsx)(O,{bold:!0,children:`ultrareview`}),(0,q.jsxs)(O,{dimColor:!0,children:[` · `,c,` · `,p]})]}),onCancel:d,color:`background`,inputGuide:e=>e.pending?(0,q.jsxs)(O,{children:[`Press `,e.keyName,` again to exit`]}):(0,q.jsxs)(k,{children:[(0,q.jsx)(T,{shortcut:`Enter`,action:`select`}),(0,q.jsx)(T,{shortcut:`Esc`,action:`go back`})]}),children:(0,q.jsxs)(D,{flexDirection:`column`,gap:1,children:[(0,q.jsx)(_t,{stage:e.reviewProgress?.stage,completed:i,hasProgress:!!e.reviewProgress}),(0,q.jsxs)(D,{flexDirection:`column`,children:[(0,q.jsx)(O,{children:vt(e)}),(0,q.jsx)(Te,{url:f,children:(0,q.jsx)(O,{dimColor:!0,children:f})})]}),(0,q.jsx)(v,{options:ee,onChange:e=>{switch(e){case`open`:u(f),t();break;case`stop`:s(!0);break;case`back`:d();break;case`dismiss`:l();break}}})]})})}function bt({session:e,toolUseContext:t,onDone:n,onBack:r,onKill:i}){let[a,o]=(0,K.useState)(!1),[s,c]=(0,K.useState)(null),l=(0,K.useMemo)(()=>e.isRemoteReview?[]:d(We(e.log)).filter(e=>e.type!==`progress`).slice(-3),[e]);if(e.isRemoteReview)return(0,q.jsx)(yt,{session:e,onDone:n,onBack:r,onKill:i});let u=()=>n(`Remote session details dismissed`,{display:`system`}),f=e=>{e.key===` `?(e.preventDefault(),n(`Remote session details dismissed`,{display:`system`})):e.key===`left`&&r?(e.preventDefault(),r()):e.key===`t`&&!a?(e.preventDefault(),ee()):e.key===`return`&&(e.preventDefault(),u())};async function ee(){o(!0),c(null);try{await b(e.sessionId)}catch(e){c(Oe(e))}finally{o(!1)}}let te=Fe(e.title,50),m=e.status===`pending`?`starting`:e.status;return(0,q.jsx)(D,{flexDirection:`column`,tabIndex:0,autoFocus:!0,onKeyDown:f,children:(0,q.jsxs)(M,{title:`Remote session details`,onCancel:u,color:`background`,inputGuide:e=>e.pending?(0,q.jsxs)(O,{children:[`Press `,e.keyName,` again to exit`]}):(0,q.jsxs)(k,{children:[r&&(0,q.jsx)(T,{shortcut:`←`,action:`go back`}),(0,q.jsx)(T,{shortcut:`Esc/Enter/Space`,action:`close`}),!a&&(0,q.jsx)(T,{shortcut:`t`,action:`teleport`})]}),children:[(0,q.jsxs)(D,{flexDirection:`column`,children:[(0,q.jsxs)(O,{children:[(0,q.jsx)(O,{bold:!0,children:`Status`}),`:`,` `,m===`running`||m===`starting`?(0,q.jsx)(O,{color:`background`,children:m}):m===`completed`?(0,q.jsx)(O,{color:`success`,children:m}):(0,q.jsx)(O,{color:`error`,children:m})]}),(0,q.jsxs)(O,{children:[(0,q.jsx)(O,{bold:!0,children:`Runtime`}),`: `,Le((e.endTime??Date.now())-e.startTime)]}),(0,q.jsxs)(O,{wrap:`truncate-end`,children:[(0,q.jsx)(O,{bold:!0,children:`Title`}),`: `,te]}),(0,q.jsxs)(O,{children:[(0,q.jsx)(O,{bold:!0,children:`Progress`}),`: `,(0,q.jsx)(st,{session:e})]}),(0,q.jsxs)(O,{children:[(0,q.jsx)(O,{bold:!0,children:`Session URL`}),`:`,` `,(0,q.jsx)(Te,{url:x(e.sessionId),children:(0,q.jsx)(O,{dimColor:!0,children:x(e.sessionId)})})]})]}),e.log.length>0&&(0,q.jsxs)(D,{flexDirection:`column`,marginTop:1,children:[(0,q.jsxs)(O,{children:[(0,q.jsx)(O,{bold:!0,children:`Recent messages`}),`:`]}),(0,q.jsx)(D,{flexDirection:`column`,height:10,overflowY:`hidden`,children:l.map((e,n)=>(0,q.jsx)(p,{message:e,lookups:C,addMargin:n>0,tools:t.options.tools,commands:t.options.commands,verbose:t.options.verbose,inProgressToolUseIDs:new Set,progressMessagesForMessage:[],shouldAnimate:!1,shouldShowDot:!1,style:`condensed`,isTranscriptMode:!1,isStatic:!0},n))}),(0,q.jsx)(D,{marginTop:1,children:(0,q.jsxs)(O,{dimColor:!0,italic:!0,children:[`Showing last `,l.length,` of `,e.log.length,` messages`]})})]}),s&&(0,q.jsx)(D,{marginTop:1,children:(0,q.jsxs)(O,{color:`error`,children:[`Teleport failed: `,s]})}),a&&(0,q.jsx)(O,{color:`background`,children:`Teleporting to session…`})]})})}var K,q,xt,St,Ct=t((()=>{K=n(A(),1),Ne(),z(),j(),de(),Ve(),c(),ke(),I(),Ge(),a(),ze(),_(),pe(),Se(),ut(),q=N(),xt=[`finding`,`verifying`,`synthesizing`],St={finding:`Find`,verifying:`Verify`,synthesizing:`Dedupe`}}));async function wt(e){let t=se(e.id);try{let e=await Ae(t,Dt);return{content:e.content,bytesTotal:e.bytesTotal}}catch{return{content:``,bytesTotal:0}}}function Tt({shell:e,onDone:t,onKillShell:n,onBack:r}){let{columns:i}=De(),[a,o]=(0,J.useState)(()=>wt(e)),s=(0,J.useDeferredValue)(a);(0,J.useEffect)(()=>{if(e.status!==`running`)return;let t=setInterval((e,t)=>e(wt(t)),1e3,o,e);return()=>clearInterval(t)},[e.id,e.status]);let c=()=>t(`Shell details dismissed`,{display:`system`});E({"confirm:yes":c},{context:`Confirmation`});let l=i=>{i.key===` `?(i.preventDefault(),t(`Shell details dismissed`,{display:`system`})):i.key===`left`&&r?(i.preventDefault(),r()):i.key===`x`&&e.status===`running`&&n&&(i.preventDefault(),n())},u=Fe(e.command,280);return(0,Y.jsx)(D,{flexDirection:`column`,tabIndex:0,autoFocus:!0,onKeyDown:l,children:(0,Y.jsxs)(M,{title:`Shell details`,onCancel:c,color:`background`,inputGuide:t=>t.pending?(0,Y.jsxs)(O,{children:[`Press `,t.keyName,` again to exit`]}):(0,Y.jsxs)(k,{children:[r&&(0,Y.jsx)(T,{shortcut:`←`,action:`go back`}),(0,Y.jsx)(T,{shortcut:`Esc/Enter/Space`,action:`close`}),e.status===`running`&&n&&(0,Y.jsx)(T,{shortcut:`x`,action:`stop`})]}),children:[(0,Y.jsxs)(D,{flexDirection:`column`,children:[(0,Y.jsxs)(O,{children:[(0,Y.jsx)(O,{bold:!0,children:`Status:`}),` `,e.status===`running`?(0,Y.jsxs)(O,{color:`background`,children:[e.status,e.result?.code!==void 0&&` (exit code: ${e.result.code})`]}):e.status===`completed`?(0,Y.jsxs)(O,{color:`success`,children:[e.status,e.result?.code!==void 0&&` (exit code: ${e.result.code})`]}):(0,Y.jsxs)(O,{color:`error`,children:[e.status,e.result?.code!==void 0&&` (exit code: ${e.result.code})`]})]}),(0,Y.jsxs)(O,{children:[(0,Y.jsx)(O,{bold:!0,children:`Runtime:`}),` `,Le((e.endTime??Date.now())-e.startTime)]}),(0,Y.jsxs)(O,{wrap:`wrap`,children:[(0,Y.jsx)(O,{bold:!0,children:`Command:`}),` `,u]})]}),(0,Y.jsxs)(D,{flexDirection:`column`,children:[(0,Y.jsx)(O,{bold:!0,children:`Output:`}),(0,Y.jsx)(J.Suspense,{fallback:(0,Y.jsx)(O,{dimColor:!0,children:`Loading output…`}),children:(0,Y.jsx)(Et,{outputPromise:s,columns:i})})]})]})})}function Et({outputPromise:e,columns:t}){let{content:n,bytesTotal:r}=(0,J.use)(e);if(!n)return(0,Y.jsx)(O,{dimColor:!0,children:`No output available`});let i=[],a=n.length;for(let e=0;e<10&&a>0;e++){let e=n.lastIndexOf(`
|
|
2
|
-
`,a-1);i.push(e+1),a=e}i.reverse();let o=r>n.length,s=[];for(let e=0;e<i.length;e++){let t=i[e],r=e<i.length-1?i[e+1]-1:n.length,a=n.slice(t,r);a&&s.push(a)}return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(D,{borderStyle:`round`,paddingX:1,flexDirection:`column`,height:12,maxWidth:t-6,children:s.map((e,t)=>(0,Y.jsx)(O,{wrap:`truncate-end`,children:e},t))}),(0,Y.jsxs)(O,{dimColor:!0,italic:!0,children:[`Showing ${s.length} lines`,o?` of ${Re(r)}`:``]})]})}var J,Y,Dt,Ot=t((()=>{J=n(A(),1),g(),j(),l(),I(),je(),oe(),Y=N(),Dt=8192}));function kt(e,t){return Object.values(e??{}).filter(h).filter(e=>!(e.type===`local_agent`&&e.id===t))}function At({onDone:e,toolUseContext:t,initialDetailTaskId:n}){let r=te(e=>e.tasks),i=te(e=>e.foregroundedTaskId),a=ve(),o=le(`chat:killAgents`,`Chat`,`ctrl+x ctrl+k`),s=r,c=(0,Z.useRef)(!1),[l,u]=(0,Z.useState)(()=>{if(n)return c.current=!0,{mode:`detail`,itemId:n};let e=kt(s,i);return e.length===1?(c.current=!0,{mode:`detail`,itemId:e[0].id}):{mode:`list`}}),[d,f]=(0,Z.useState)(0);ue(`background-tasks-dialog`);let{bashTasks:p,remoteSessions:m,agentTasks:g,workflowTasks:_,dreamTasks:v,allSelectableItems:y}=(0,Z.useMemo)(()=>{let e=Object.values(s??{}).filter(h).map(jt).sort((e,t)=>{let n=e.status,r=t.status;if(n===`running`&&r!==`running`)return-1;if(n!==`running`&&r===`running`)return 1;let i=`task`in e?e.task.startTime:0;return(`task`in t?t.task.startTime:0)-i}),t=e.filter(e=>e.type===`local_bash`),n=e.filter(e=>e.type===`remote_agent`),r=e.filter(e=>e.type===`local_agent`&&e.id!==i),a=e.filter(e=>e.type===`local_workflow`),o=e.filter(e=>e.type===`dream`);return{bashTasks:t,remoteSessions:n,agentTasks:r,workflowTasks:a,dreamTasks:o,allSelectableItems:[...t,...n,...r,...a,...o]}},[s,i]),b=y[d]??null;E({"confirm:previous":()=>f(e=>Math.max(0,e-1)),"confirm:next":()=>f(e=>Math.min(y.length-1,e+1)),"confirm:yes":()=>{let e=y[d];e&&u({mode:`detail`,itemId:e.id})}},{context:`Confirmation`,isActive:l.mode===`list`});let ie=t=>{if(l.mode!==`list`)return;if(t.key===`left`){t.preventDefault(),e(`Background tasks dialog dismissed`,{display:`system`});return}let n=y[d];n&&t.key===`x`&&(t.preventDefault(),n.type===`local_bash`&&n.status===`running`?ae(n.id):n.type===`local_agent`&&n.status===`running`?oe(n.id):n.type===`local_workflow`&&n.status===`running`&&$?$(n.id,a):n.type===`dream`&&n.status===`running`?se(n.id):n.type===`remote_agent`&&n.status===`running`&&ce(n.id))};async function ae(e){await ee.kill(e,a)}async function oe(e){await Ce.kill(e,a)}async function se(e){await ne.kill(e,a)}async function ce(e){await re.kill(e,a)}let x=(0,Z.useEffectEvent)(e);(0,Z.useEffect)(()=>{if(l.mode!==`list`){let e=(s??{})[l.itemId];(!e||e.type!==`local_workflow`&&!h(e))&&(c.current?x(`Background tasks dialog dismissed`,{display:`system`}):u({mode:`list`}))}let e=y.length;d>=e&&e>0&&f(e-1)},[l,s,d,y,x]);let S=()=>{c.current&&y.length<=1?e(`Background tasks dialog dismissed`,{display:`system`}):(c.current=!1,u({mode:`list`}))};if(l.mode!==`list`&&s){let n=s[l.itemId];if(!n)return null;switch(n.type){case`local_bash`:return(0,Q.jsx)(Tt,{shell:n,onDone:e,onKillShell:()=>void ae(n.id),onBack:S},`shell-${n.id}`);case`local_agent`:return(0,Q.jsx)(et,{agent:n,onDone:e,onKillAgent:()=>void oe(n.id),onBack:S},`agent-${n.id}`);case`remote_agent`:return(0,Q.jsx)(bt,{session:n,onDone:e,toolUseContext:t,onBack:S,onKill:n.status===`running`?()=>void ce(n.id):void 0},`session-${n.id}`);case`local_workflow`:{let e=n.status===`running`&&$?()=>$(n.id,a):void 0;return(0,Q.jsx)(D,{flexDirection:`column`,tabIndex:0,borderStyle:`round`,onKeyDown:t=>{t.key===`left`?(t.preventDefault(),S()):t.key===`x`&&e&&(t.preventDefault(),e())},children:(0,Q.jsx)(M,{title:n.workflowName,subtitle:(0,Q.jsxs)(O,{dimColor:!0,children:[n.status,n.summary?` · ${n.summary}`:``]}),onCancel:S,inputGuide:()=>(0,Q.jsxs)(k,{children:[(0,Q.jsx)(T,{shortcut:`←`,action:`go back`}),(0,Q.jsx)(T,{shortcut:`Esc`,action:`close`}),e&&(0,Q.jsx)(T,{shortcut:`x`,action:`stop`})]}),children:n.status===`failed`&&n.error?(0,Q.jsxs)(O,{color:`error`,children:[`失败原因:`,n.error]}):null})},`workflow-${n.id}`)}case`dream`:return(0,Q.jsx)(ht,{task:n,onDone:()=>e(`Background tasks dialog dismissed`,{display:`system`}),onBack:S,onKill:n.status===`running`?()=>void se(n.id):void 0},`dream-${n.id}`)}}let C=P(p,e=>e.status===`running`),w=P(m,e=>e.status===`running`||e.status===`pending`)+P(g,e=>e.status===`running`),de=Pe([...C>0?[(0,Q.jsxs)(O,{children:[C,` `,C===1?`active shell`:`active shells`]},`shells`)]:[],...w>0?[(0,Q.jsxs)(O,{children:[w,` `,w===1?`active agent`:`active agents`]},`agents`)]:[]],e=>(0,Q.jsx)(O,{children:` · `},`separator-${e}`)),fe=[(0,Q.jsx)(T,{shortcut:`↑/↓`,action:`select`},`upDown`),(0,Q.jsx)(T,{shortcut:`Enter`,action:`view`},`enter`),...(b?.type===`local_bash`||b?.type===`local_agent`||b?.type===`local_workflow`||b?.type===`dream`||b?.type===`remote_agent`)&&b.status===`running`?[(0,Q.jsx)(T,{shortcut:`x`,action:`stop`},`kill`)]:[],...g.some(e=>e.status===`running`)?[(0,Q.jsx)(T,{shortcut:o,action:`stop all agents`},`kill-all`)]:[],(0,Q.jsx)(T,{shortcut:`←/Esc`,action:`close`},`esc`)],pe=()=>e(`Background tasks dialog dismissed`,{display:`system`});function me(e){return e.pending?(0,Q.jsxs)(O,{children:[`Press `,e.keyName,` again to exit`]}):(0,Q.jsx)(k,{children:fe})}return(0,Q.jsx)(D,{flexDirection:`column`,tabIndex:0,autoFocus:!0,onKeyDown:ie,children:(0,Q.jsx)(M,{title:`Background tasks`,subtitle:(0,Q.jsx)(Q.Fragment,{children:de}),onCancel:pe,color:`background`,inputGuide:me,children:y.length===0?(0,Q.jsx)(O,{dimColor:!0,children:`No tasks currently running`}):(0,Q.jsxs)(D,{flexDirection:`column`,children:[p.length>0&&(0,Q.jsxs)(D,{flexDirection:`column`,children:[(m.length>0||g.length>0)&&(0,Q.jsxs)(O,{dimColor:!0,children:[(0,Q.jsxs)(O,{bold:!0,children:[` `,`Shells`]}),` (`,p.length,`)`]}),(0,Q.jsx)(D,{flexDirection:`column`,children:p.map(e=>(0,Q.jsx)(X,{item:e,isSelected:e.id===b?.id},e.id))})]}),m.length>0&&(0,Q.jsxs)(D,{flexDirection:`column`,marginTop:+(p.length>0),children:[(0,Q.jsxs)(O,{dimColor:!0,children:[(0,Q.jsxs)(O,{bold:!0,children:[` `,`Remote agents`]}),` (`,m.length,`)`]}),(0,Q.jsx)(D,{flexDirection:`column`,children:m.map(e=>(0,Q.jsx)(X,{item:e,isSelected:e.id===b?.id},e.id))})]}),g.length>0&&(0,Q.jsxs)(D,{flexDirection:`column`,marginTop:+(p.length>0||m.length>0),children:[(0,Q.jsxs)(O,{dimColor:!0,children:[(0,Q.jsxs)(O,{bold:!0,children:[` `,`Local agents`]}),` (`,g.length,`)`]}),(0,Q.jsx)(D,{flexDirection:`column`,children:g.map(e=>(0,Q.jsx)(X,{item:e,isSelected:e.id===b?.id},e.id))})]}),_.length>0&&(0,Q.jsxs)(D,{flexDirection:`column`,marginTop:+(p.length>0||m.length>0||g.length>0),children:[(0,Q.jsxs)(O,{dimColor:!0,children:[(0,Q.jsxs)(O,{bold:!0,children:[` `,`Workflows`]}),` (`,_.length,`)`]}),(0,Q.jsx)(D,{flexDirection:`column`,children:_.map(e=>(0,Q.jsx)(X,{item:e,isSelected:e.id===b?.id},e.id))})]}),v.length>0&&(0,Q.jsx)(D,{flexDirection:`column`,marginTop:+(p.length>0||m.length>0||g.length>0||_.length>0),children:(0,Q.jsx)(D,{flexDirection:`column`,children:v.map(e=>(0,Q.jsx)(X,{item:e,isSelected:e.id===b?.id},e.id))})})]})})})}function jt(e){switch(e.type){case`local_bash`:return{id:e.id,type:`local_bash`,label:e.command,status:e.status,task:e};case`remote_agent`:return{id:e.id,type:`remote_agent`,label:e.title,status:e.status,task:e};case`local_agent`:return{id:e.id,type:`local_agent`,label:e.description,status:e.status,task:e};case`local_workflow`:return{id:e.id,type:`local_workflow`,label:e.summary??e.description,status:e.status,task:e};case`dream`:return{id:e.id,type:`dream`,label:e.description,status:e.status,task:e}}}function X({item:e,isSelected:t}){let{columns:n}=De(),r=Math.max(30,n-26);return(0,Q.jsxs)(D,{flexDirection:`row`,children:[(0,Q.jsx)(O,{children:t?i.pointer+` `:` `}),(0,Q.jsx)(O,{color:t?`suggestion`:void 0,children:(0,Q.jsx)(pt,{task:e.task,maxActivityWidth:r})})]})}var Z,Q,$,Mt=t((()=>{r(),Z=n(A(),1),g(),ye(),he(),o(),fe(),de(),m(),Me(),ie(),j(),l(),f(),nt(),mt(),gt(),Ct(),Ot(),Q=N(),$=(ae(),e(w))?.killWorkflowTask??null}));export{z as a,Qe as i,Mt as n,R as o,$e as r,At as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,t}from"./ClaudeMdExternalIncludesDialog-CSywJdVL.js";e();export{t as ClaudeMdExternalIncludesDialog};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{cd as e,ld as t}from"./loadAgentsDir-BL93ulMm.js";t();export{e as ConsoleOAuthFlow};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,t}from"./Doctor-Dz4TuYas.js";e();export{t as Doctor};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{n as e,o as t}from"./rolldown-runtime-DaDcL9Zw.js";import{n,o as r}from"./envUtils-BDhHQY0-.js";import{n as i,t as a}from"./figures-5ThXQEtq.js";import{Cw as o,Dw as s,Ew as c,FT as l,GC as u,Ql as d,RT as f,Sb as p,Sg as m,Tw as h,Xl as ee,Zl as te,bb as g,dE as _,fE as v,gb as y,mE as b,mv as x,na as S,pE as C,pv as w,ta as ne,vT as re,ww as ie,xg as ae,yT as T,yb as oe}from"./loadAgentsDir-BL93ulMm.js";import{Gt as se,I as E,P as D,fi as O,t as k,x as A}from"./src-P_wYS_NJ2.js";import{t as j}from"./jsx-runtime-Bb4Xn-E0.js";import{Wt as ce,et as le}from"./state-BemZdQIl.js";import{H as M,g as N,kn as P,n as F,wn as I,z as L}from"./settings-D4CpDv2y.js";import{l as R,o as z}from"./stringUtils-C8PaYpQF.js";import{Kn as B,Un as V,_ as H,u as U}from"./model-Bgh_r4lg.js";import{n as W,t as ue}from"./ValidationErrorsList-C-hWdy_8.js";import{d as de,f as fe,h as pe,i as me,m as he,n as ge,o as _e,r as ve,u as G}from"./pidLock-DgOBc1Xo.js";import{a as ye,i as be}from"./xdg-DcF9ejUM.js";import{n as xe,t as Se}from"./useExitOnCtrlCDWithKeybindings-DEEJhm_W.js";import{n as Ce,t as we}from"./McpParsingWarnings-COa71S9q.js";import{n as Te,t as Ee}from"./PressEnterToContinue-Dq0Imo9c.js";import{n as De,t as Oe}from"./useSettingsErrors-CgPad-H0.js";import{n as ke,t as Ae}from"./shadowedRuleDetection-BzAZ57p2.js";import{n as je,r as Me,t as K}from"./statusNoticeHelpers-BMM8_uJ1.js";import{join as q}from"path";function Ne(){if(!b())return null;let e=_();if(e.length===0)return null;let t=e.filter(e=>e.severity===`error`),n=e.filter(e=>e.severity===`warning`);return(0,J.jsxs)(E,{flexDirection:`column`,marginTop:1,marginBottom:1,children:[(0,J.jsx)(D,{bold:!0,color:t.length>0?`error`:`warning`,children:`Keybinding Configuration Issues`}),(0,J.jsxs)(E,{children:[(0,J.jsx)(D,{dimColor:!0,children:`Location: `}),(0,J.jsx)(D,{dimColor:!0,children:v()})]}),(0,J.jsxs)(E,{marginLeft:1,flexDirection:`column`,marginTop:1,children:[t.map((e,t)=>(0,J.jsxs)(E,{flexDirection:`column`,children:[(0,J.jsxs)(E,{children:[(0,J.jsx)(D,{dimColor:!0,children:`└ `}),(0,J.jsx)(D,{color:`error`,children:`[Error]`}),(0,J.jsxs)(D,{dimColor:!0,children:[` `,e.message]})]}),e.suggestion&&(0,J.jsx)(E,{marginLeft:3,children:(0,J.jsxs)(D,{dimColor:!0,children:[`→ `,e.suggestion]})})]},`error-${t}`)),n.map((e,t)=>(0,J.jsxs)(E,{flexDirection:`column`,children:[(0,J.jsxs)(E,{children:[(0,J.jsx)(D,{dimColor:!0,children:`└ `}),(0,J.jsx)(D,{color:`warning`,children:`[Warning]`}),(0,J.jsxs)(D,{dimColor:!0,children:[` `,e.message]})]}),e.suggestion&&(0,J.jsx)(E,{marginLeft:3,children:(0,J.jsxs)(D,{dimColor:!0,children:[`→ `,e.suggestion]})})]},`warning-${t}`))]})]})}var J,Pe=e((()=>{O(),k(),C(),J=j()}));function Fe(){if(!l.isSupportedPlatform()||!l.isSandboxEnabledInSettings())return null;let e=l.checkDependencies(),t=e.errors.length>0,n=e.warnings.length>0;return!t&&!n?null:(0,Y.jsxs)(E,{flexDirection:`column`,children:[(0,Y.jsx)(D,{bold:!0,children:`Sandbox`}),(0,Y.jsxs)(D,{children:[`└ Status: `,(0,Y.jsx)(D,{color:t?`error`:`warning`,children:t?`Missing dependencies`:`Available (with warnings)`})]}),e.errors.map((e,t)=>(0,Y.jsxs)(D,{color:`error`,children:[`└ `,e]},t)),e.warnings.map((e,t)=>(0,Y.jsxs)(D,{color:`warning`,children:[`└ `,e]},t)),t&&(0,Y.jsx)(D,{dimColor:!0,children:`└ Run /sandbox for install instructions`})]})}var Y,Ie=e((()=>{O(),k(),f(),Y=j()}));async function Le(){let e=oe(await g());if(e.length===0)return null;let t=e.sort((e,t)=>t.content.length-e.content.length).map(e=>`${e.path}: ${e.content.length.toLocaleString()} chars`);return{type:`claudemd_files`,severity:`warning`,message:e.length===1?`Large CLAUDE.md file detected (${e[0].content.length.toLocaleString()} chars > ${y.toLocaleString()})`:`${e.length} large CLAUDE.md files detected (each > ${y.toLocaleString()} chars)`,details:t,currentValue:e.length,threshold:y}}async function X(e){if(!e)return null;let t=je(e);if(t<=15e3)return null;let n=e.activeAgents.filter(e=>e.source!==`built-in`).map(e=>{let t=`${e.agentType}: ${e.whenToUse}`;return{name:e.agentType,tokens:S(t)}}).sort((e,t)=>t.tokens-e.tokens),r=n.slice(0,5).map(e=>`${e.name}: ~${e.tokens.toLocaleString()} tokens`);return n.length>5&&r.push(`(${n.length-5} more custom agents)`),{type:`agent_descriptions`,severity:`warning`,message:`Large agent descriptions (~${t.toLocaleString()} tokens > ${K.toLocaleString()})`,details:r,currentValue:t,threshold:K}}async function Re(e,t,n){let r=e.filter(e=>e.isMcp);if(r.length===0)return null;try{let{mcpToolTokens:r,mcpToolDetails:i}=await w(e,t,n,U());if(r<=Z)return null;let a=new Map;for(let e of i){let t=e.name.split(`__`)[1]||`unknown`,n=a.get(t)||{count:0,tokens:0};a.set(t,{count:n.count+1,tokens:n.tokens+e.tokens})}let o=Array.from(a.entries()).sort((e,t)=>t[1].tokens-e[1].tokens),s=o.slice(0,5).map(([e,t])=>`${e}: ${t.count} tools (~${t.tokens.toLocaleString()} tokens)`);return o.length>5&&s.push(`(${o.length-5} more servers)`),{type:`mcp_tools`,severity:`warning`,message:`Large MCP tools context (~${r.toLocaleString()} tokens > ${Z.toLocaleString()})`,details:s,currentValue:r,threshold:Z}}catch{let e=r.reduce((e,t)=>e+S(((t.name?.length||0)+t.description.length).toString()),0);return e<=Z?null:{type:`mcp_tools`,severity:`warning`,message:`Large MCP tools context (~${e.toLocaleString()} tokens estimated > ${Z.toLocaleString()})`,details:[`${r.length} MCP tools detected (token count estimated)`],currentValue:e,threshold:Z}}}async function ze(e){let t=Ae(await e(),{sandboxAutoAllowEnabled:l.isSandboxingEnabled()&&l.isAutoAllowBashIfSandboxedEnabled()});if(t.length===0)return null;let n=t.flatMap(e=>[`${M(e.rule.ruleValue)}: ${e.reason}`,` Fix: ${e.fix}`]);return{type:`unreachable_rules`,severity:`warning`,message:`${t.length} ${R(t.length,`unreachable permission rule`)} detected`,details:n,currentValue:t.length,threshold:0}}async function Be(e,t,n){let[r,i,a,o]=await Promise.all([Le(),X(t),Re(e,n,t),ze(n)]);return{claudeMdWarning:r,agentWarning:i,mcpWarning:a,unreachableRulesWarning:o}}var Z,Ve=e((()=>{ne(),x(),p(),H(),L(),ke(),f(),Me(),z(),Z=25e3}));function He({promise:e}){let t=(0,Q.use)(e);return t.latest?(0,$.jsxs)($.Fragment,{children:[t.stable&&(0,$.jsxs)(D,{children:[`└ Stable version: `,t.stable]}),(0,$.jsxs)(D,{children:[`└ Latest version: `,t.latest]})]}):(0,$.jsx)(D,{dimColor:!0,children:`└ Failed to fetch versions`})}function Ue({onDone:e}){let t=m(e=>e.agentDefinitions),r=m(e=>e.mcp.tools),i=m(e=>e.toolPermissionContext),c=m(e=>e.plugins.errors);xe();let l=(0,Q.useMemo)(()=>r||[],[r]),[u,d]=(0,Q.useState)(null),[f,p]=(0,Q.useState)(null),[h,g]=(0,Q.useState)(null),[_,v]=(0,Q.useState)(null),y=De(),b=(0,Q.useMemo)(()=>G().then(e=>(e.installationType===`native`?fe:he)().catch(()=>({latest:null,stable:null}))),[]),x=F()?.autoUpdatesChannel??`latest`,S=y.filter(e=>e.mcpErrorMetadata===void 0),C=(0,Q.useMemo)(()=>[{name:`BASH_MAX_OUTPUT_LENGTH`,default:o,upperLimit:ie},{name:`TASK_MAX_OUTPUT_LENGTH`,default:ee,upperLimit:te},{name:`CLAUDE_CODE_MAX_OUTPUT_TOKENS`,...V(`claude-opus-4-7`)}].map(e=>{let t=process.env[e.name],n=s(e.name,t,e.default,e.upperLimit);return{name:e.name,...n}}).filter(e=>e.status!==`valid`),[]);(0,Q.useEffect)(()=>{G().then(d),(async()=>{let e=q(n(),`agents`),r=q(le(),`.claude`,`agents`),{activeAgents:a,allAgents:o,failedFiles:s}=t,[c,u]=await Promise.all([P(e),P(r)]),d={activeAgents:a.map(e=>({agentType:e.agentType,source:e.source})),userAgentsDir:e,projectAgentsDir:r,userDirExists:c,projectDirExists:u,failedFiles:s};p(d);let f=await Be(l,{activeAgents:a,allAgents:o,failedFiles:s},async()=>i);if(g(f),_e()){let e=q(be(),`claude`,`locks`),t=ge(e),n=ve(e);v({enabled:!0,locks:n,locksDir:e,staleLocksCleaned:t})}else v({enabled:!1,locks:[],locksDir:``,staleLocksCleaned:0})})()},[i,l,t]);let w=(0,Q.useCallback)(()=>{e(`Claude Code diagnostics dismissed`,{display:`system`})},[e]);return se({"confirm:yes":w,"confirm:no":w},{context:`Confirmation`}),u?(0,$.jsxs)(A,{children:[(0,$.jsxs)(E,{flexDirection:`column`,children:[(0,$.jsx)(D,{bold:!0,children:`Diagnostics`}),(0,$.jsxs)(D,{children:[`└ Currently running: `,u.installationType,` (`,u.version,`)`]}),u.packageManager&&(0,$.jsxs)(D,{children:[`└ Package manager: `,u.packageManager]}),(0,$.jsxs)(D,{children:[`└ Path: `,u.installationPath]}),(0,$.jsxs)(D,{children:[`└ Invoked: `,u.invokedBinary]}),(0,$.jsxs)(D,{children:[`└ Config install method: `,u.configInstallMethod]}),(0,$.jsxs)(D,{children:[`└ Search: `,u.ripgrepStatus.working?`OK`:`Not working`,` (`,u.ripgrepStatus.mode===`embedded`?`bundled`:u.ripgrepStatus.mode===`builtin`?`vendor`:u.ripgrepStatus.systemPath||`system`,`)`]}),u.ripgrepStatus.note&&(0,$.jsxs)(D,{color:`warning`,children:[`└ Note: `,u.ripgrepStatus.note]}),u.recommendation&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(D,{}),(0,$.jsxs)(D,{color:`warning`,children:[`Recommendation: `,u.recommendation.split(`
|
|
2
|
-
`)[0]]}),(0,$.jsx)(D,{dimColor:!0,children:u.recommendation.split(`
|
|
3
|
-
`)[1]})]}),u.multipleInstallations.length>1&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(D,{}),(0,$.jsx)(D,{color:`warning`,children:`Warning: Multiple installations found`}),u.multipleInstallations.map((e,t)=>(0,$.jsxs)(D,{children:[`└ `,e.type,` at `,e.path]},t))]}),u.warnings.length>0&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(D,{}),u.warnings.map((e,t)=>(0,$.jsxs)(E,{flexDirection:`column`,children:[(0,$.jsxs)(D,{color:`warning`,children:[`Warning: `,e.issue]}),(0,$.jsxs)(D,{children:[`Fix: `,e.fix]})]},t))]}),S.length>0&&(0,$.jsxs)(E,{flexDirection:`column`,marginTop:1,marginBottom:1,children:[(0,$.jsx)(D,{bold:!0,children:`Invalid Settings`}),(0,$.jsx)(ue,{errors:S})]})]}),(0,$.jsxs)(E,{flexDirection:`column`,children:[(0,$.jsx)(D,{bold:!0,children:`Updates`}),(0,$.jsxs)(D,{children:[`└ Auto-updates: `,u.packageManager?`Managed by package manager`:u.autoUpdates]}),u.hasUpdatePermissions!==null&&(0,$.jsxs)(D,{children:[`└ Update permissions: `,u.hasUpdatePermissions?`Yes`:`No (requires sudo)`]}),(0,$.jsxs)(D,{children:[`└ Auto-update channel: `,x]}),(0,$.jsx)(Q.Suspense,{fallback:null,children:(0,$.jsx)(He,{promise:b})})]}),(0,$.jsx)(Fe,{}),(0,$.jsx)(we,{}),(0,$.jsx)(Ne,{}),C.length>0&&(0,$.jsxs)(E,{flexDirection:`column`,children:[(0,$.jsx)(D,{bold:!0,children:`Environment Variables`}),C.map((e,t)=>(0,$.jsxs)(D,{children:[`└ `,e.name,`:`,` `,(0,$.jsx)(D,{color:e.status===`capped`?`warning`:`error`,children:e.message})]},t))]}),_?.enabled&&(0,$.jsxs)(E,{flexDirection:`column`,children:[(0,$.jsx)(D,{bold:!0,children:`Version Locks`}),_.staleLocksCleaned>0&&(0,$.jsxs)(D,{dimColor:!0,children:[`└ Cleaned `,_.staleLocksCleaned,` stale lock(s)`]}),_.locks.length===0?(0,$.jsx)(D,{dimColor:!0,children:`└ No active version locks`}):_.locks.map((e,t)=>(0,$.jsxs)(D,{children:[`└ `,e.version,`: PID `,e.pid,` `,e.isProcessRunning?(0,$.jsx)(D,{children:`(running)`}):(0,$.jsx)(D,{color:`warning`,children:`(stale)`})]},t))]}),f?.failedFiles&&f.failedFiles.length>0&&(0,$.jsxs)(E,{flexDirection:`column`,children:[(0,$.jsx)(D,{bold:!0,color:`error`,children:`Agent Parse Errors`}),(0,$.jsxs)(D,{color:`error`,children:[`└ Failed to parse `,f.failedFiles.length,` agent file(s):`]}),f.failedFiles.map((e,t)=>(0,$.jsxs)(D,{dimColor:!0,children:[` `,`└ `,e.path,`: `,e.error]},t))]}),c.length>0&&(0,$.jsxs)(E,{flexDirection:`column`,children:[(0,$.jsx)(D,{bold:!0,color:`error`,children:`Plugin Errors`}),(0,$.jsxs)(D,{color:`error`,children:[`└ `,c.length,` plugin error(s) detected:`]}),c.map((e,t)=>(0,$.jsxs)(D,{dimColor:!0,children:[` `,`└ `,e.source||`unknown`,`plugin`in e&&e.plugin?` [${e.plugin}]`:``,`: `,re(e)]},t))]}),h?.unreachableRulesWarning&&(0,$.jsxs)(E,{flexDirection:`column`,children:[(0,$.jsx)(D,{bold:!0,color:`warning`,children:`Unreachable Permission Rules`}),(0,$.jsxs)(D,{children:[`└`,` `,(0,$.jsxs)(D,{color:`warning`,children:[a.warning,` `,h.unreachableRulesWarning.message]})]}),h.unreachableRulesWarning.details.map((e,t)=>(0,$.jsxs)(D,{dimColor:!0,children:[` `,`└ `,e]},t))]}),h&&(h.claudeMdWarning||h.agentWarning||h.mcpWarning)&&(0,$.jsxs)(E,{flexDirection:`column`,children:[(0,$.jsx)(D,{bold:!0,children:`Context Usage Warnings`}),h.claudeMdWarning&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(D,{children:[`└`,` `,(0,$.jsxs)(D,{color:`warning`,children:[a.warning,` `,h.claudeMdWarning.message]})]}),(0,$.jsxs)(D,{children:[` `,`└ Files:`]}),h.claudeMdWarning.details.map((e,t)=>(0,$.jsxs)(D,{dimColor:!0,children:[` `,`└ `,e]},t))]}),h.agentWarning&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(D,{children:[`└`,` `,(0,$.jsxs)(D,{color:`warning`,children:[a.warning,` `,h.agentWarning.message]})]}),(0,$.jsxs)(D,{children:[` `,`└ Top contributors:`]}),h.agentWarning.details.map((e,t)=>(0,$.jsxs)(D,{dimColor:!0,children:[` `,`└ `,e]},t))]}),h.mcpWarning&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(D,{children:[`└`,` `,(0,$.jsxs)(D,{color:`warning`,children:[a.warning,` `,h.mcpWarning.message]})]}),(0,$.jsxs)(D,{children:[` `,`└ MCP servers:`]}),h.mcpWarning.details.map((e,t)=>(0,$.jsxs)(D,{dimColor:!0,children:[` `,`└ `,e]},t))]})]}),(0,$.jsx)(E,{children:(0,$.jsx)(Ee,{})})]}):(0,$.jsx)(A,{children:(0,$.jsx)(D,{dimColor:!0,children:`Checking installation status…`})})}var Q,$,We=e((()=>{i(),Q=t(O(),1),Pe(),Ce(),B(),r(),ce(),k(),Te(),Ie(),W(),Oe(),Se(),u(),ae(),T(),pe(),Ve(),de(),c(),I(),me(),N(),h(),d(),ye(),$=j()}));export{We as n,Ue as t};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as e,n as t,o as n}from"./rolldown-runtime-DaDcL9Zw.js";import{$d as r,Cr as i,Dt as a,Iu as o,ME as s,Ot as c,Pu as l,St as u,Tt as d,XT as f,YT as p,_i as m,dw as h,ed as g,ht as _,jE as v,td as y,tf as b,uw as x}from"./loadAgentsDir-BL93ulMm.js";import{I as S,P as C,fi as w,t as T,y as E}from"./src-P_wYS_NJ2.js";import{t as D}from"./jsx-runtime-Bb4Xn-E0.js";import{c as O,i as k}from"./debug-BecbSVoN.js";import{r as A,t as j}from"./execFileNoThrow-DHyW8FMX.js";import{n as M,r as N}from"./analytics-DJobLaWP.js";function P(){(i(),e(m)).saveWorktreeState(null)}function F({onDone:e,onCancel:t}){let[n,r]=(0,I.useState)(`loading`),[i,o]=(0,I.useState)([]),[s,d]=(0,I.useState)(0),[f,p]=(0,I.useState)(),m=u();if((0,I.useEffect)(()=>{async function e(){let e=[],t=await j(`git`,[`status`,`--porcelain`]);if(t.stdout&&(e=t.stdout.split(`
|
|
2
|
-
`).filter(e=>e.trim()!==``),o(e)),m){let{stdout:t}=await j(`git`,[`rev-list`,`--count`,`${m.originalHeadCommit}..HEAD`]),n=parseInt(t.trim(),10)||0;if(d(n),e.length===0&&n===0){r(`removing`),_().then(()=>{process.chdir(m.originalCwd),h(m.originalCwd),P(),v.cache.clear?.(),p(`Worktree removed (no changes)`)}).catch(e=>{O(`Failed to clean up worktree: ${e}`,{level:`error`}),p(`Worktree cleanup failed, exiting anyway`)}).then(()=>{r(`done`)});return}else r(`asking`)}}e()},[m]),(0,I.useEffect)(()=>{n===`done`&&e(f)},[n,e,f]),!m)return e(`No active worktree session found`,{display:`system`}),null;if(n===`loading`||n===`done`)return null;async function y(e){if(!m)return;let t=!!m.tmuxSessionName;if(e===`keep`||e===`keep-with-tmux`)r(`keeping`),N(`tengu_worktree_kept`,{commits:s,changed_files:i.length}),await a(),process.chdir(m.originalCwd),h(m.originalCwd),P(),v.cache.clear?.(),p(t?`Worktree kept. Your work is saved at ${m.worktreePath} on branch ${m.worktreeBranch}. Reattach to tmux session with: tmux attach -t ${m.tmuxSessionName}`:`Worktree kept. Your work is saved at ${m.worktreePath} on branch ${m.worktreeBranch}`),r(`done`);else if(e===`keep-kill-tmux`)r(`keeping`),N(`tengu_worktree_kept`,{commits:s,changed_files:i.length}),m.tmuxSessionName&&await c(m.tmuxSessionName),await a(),process.chdir(m.originalCwd),h(m.originalCwd),P(),v.cache.clear?.(),p(`Worktree kept at ${m.worktreePath} on branch ${m.worktreeBranch}. Tmux session terminated.`),r(`done`);else if(e===`remove`||e===`remove-with-tmux`){r(`removing`),N(`tengu_worktree_removed`,{commits:s,changed_files:i.length}),m.tmuxSessionName&&await c(m.tmuxSessionName);try{await _(),process.chdir(m.originalCwd),h(m.originalCwd),P(),v.cache.clear?.()}catch(e){O(`Failed to clean up worktree: ${e}`,{level:`error`}),p(`Worktree cleanup failed, exiting anyway`),r(`done`);return}let e=t?` Tmux session terminated.`:``;s>0&&i.length>0?p(`Worktree removed. ${s} ${s===1?`commit`:`commits`} and uncommitted changes were discarded.${e}`):s>0?p(`Worktree removed. ${s} ${s===1?`commit`:`commits`} on ${m.worktreeBranch} ${s===1?`was`:`were`} discarded.${e}`):i.length>0?p(`Worktree removed. Uncommitted changes were discarded.${e}`):p(`Worktree removed.${e}`),r(`done`)}}if(n===`keeping`)return(0,L.jsxs)(S,{flexDirection:`row`,marginY:1,children:[(0,L.jsx)(l,{}),(0,L.jsx)(C,{children:`Keeping worktree…`})]});if(n===`removing`)return(0,L.jsxs)(S,{flexDirection:`row`,marginY:1,children:[(0,L.jsx)(l,{}),(0,L.jsx)(C,{children:`Removing worktree…`})]});let b=m.worktreeBranch,x=i.length>0,w=s>0,T=``;T=x&&w?`You have ${i.length} uncommitted ${i.length===1?`file`:`files`} and ${s} ${s===1?`commit`:`commits`} on ${b}. All will be lost if you remove.`:x?`You have ${i.length} uncommitted ${i.length===1?`file`:`files`}. These will be lost if you remove the worktree.`:w?`You have ${s} ${s===1?`commit`:`commits`} on ${b}. The branch will be deleted if you remove the worktree.`:`You are working in a worktree. Keep it to continue working there, or remove it to clean up.`;function D(){if(t){t();return}y(`keep`)}let k=x||w?`All changes and commits will be lost.`:`Clean up the worktree directory.`,A=!!m.tmuxSessionName,M=A?[{label:`Keep worktree and tmux session`,value:`keep-with-tmux`,description:`Stays at ${m.worktreePath}. Reattach with: tmux attach -t ${m.tmuxSessionName}`},{label:`Keep worktree, kill tmux session`,value:`keep-kill-tmux`,description:`Keeps worktree at ${m.worktreePath}, terminates tmux session.`},{label:`Remove worktree and tmux session`,value:`remove-with-tmux`,description:k}]:[{label:`Keep worktree`,value:`keep`,description:`Stays at ${m.worktreePath}`},{label:`Remove worktree`,value:`remove`,description:k}];return(0,L.jsx)(E,{title:`Exiting worktree session`,subtitle:T,onCancel:D,children:(0,L.jsx)(g,{defaultFocusValue:A?`keep-with-tmux`:`keep`,options:M,onChange:y})})}var I,L,R=t((()=>{I=n(w(),1),M(),k(),T(),A(),s(),x(),d(),y(),o(),L=D()}));function z(){return f(H)??`Goodbye!`}function B({showWorktree:e,onDone:t,onCancel:n}){async function i(e){t(e??z()),await r(0,`prompt_input_exit`)}return e?(0,V.jsx)(F,{onDone:i,onCancel:n}):null}var V,H,U=t((()=>{p(),w(),b(),R(),V=D(),H=[`Goodbye!`,`See ya!`,`Bye!`,`Catch you later!`]}));export{U as n,B as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,n as t,o as n}from"./rolldown-runtime-DaDcL9Zw.js";import{$x as r,Bx as i,Cg as a,Kx as o,QT as s,Qd as c,SC as l,Sg as u,ZT as d,Zd as f,_C as p,_S as m,aS as h,cS as g,dx as _,ex as v,fS as y,fx as b,iS as x,ix as S,lx as C,nx as w,oS as T,ox as E,pS as D,rx as O,sx as k,vC as ee,vS as te,wg as ne,xC as A,xS as j,xg as M,yS as re}from"./loadAgentsDir-BL93ulMm.js";import{fi as N}from"./src-P_wYS_NJ2.js";import{t as P}from"./jsx-runtime-Bb4Xn-E0.js";import{Wt as ie,pt as ae}from"./state-BemZdQIl.js";import{P as F,R as oe,c as se,i as ce}from"./debug-BecbSVoN.js";import{it as le,nt as I}from"./settings-D4CpDv2y.js";import{c as L,l as R,o as z}from"./log-Dauqle-Z.js";import{n as B,r as V}from"./analytics-DJobLaWP.js";import{n as H,t as U}from"./omit--yH_T4rf.js";import{o as ue,s as de}from"./localSearch-C5ipegd9.js";function W(e){let t=`plugin`in e?e.plugin:`no-plugin`;return`${e.type}:${e.source}:${t}`}function G(e,t){t.length!==0&&e(e=>{let n=new Set(e.plugins.errors.map(e=>W(e))),r=t.filter(e=>!n.has(W(e)));return r.length===0?e:{...e,plugins:{...e.plugins,errors:[...e.plugins.errors,...r]}}})}function fe(e,t=!1){let n=a(),r=u(e=>e.authVersion),l=u(e=>e.mcp.pluginReconnectKey),d=ne(),f=(0,K.useRef)(new Map),{addNotification:_}=c(),y=(0,K.useRef)([]),k=(0,K.useRef)(null),j=(0,K.useCallback)(()=>{k.current=null;let e=y.current;e.length!==0&&(y.current=[],d(t=>{let n=t.mcp;for(let t of e){let{tools:e,commands:r,resources:a,...o}=t,c=o.type===`disabled`||o.type===`failed`?e??[]:e,l=o.type===`disabled`||o.type===`failed`?r??[]:r,u=o.type===`disabled`||o.type===`failed`?a??[]:a,d=I(o.name),f=n.clients.findIndex(e=>e.name===o.name)===-1?[...n.clients,o]:n.clients.map(e=>e.name===o.name?o:e),p=c===void 0?n.tools:[...s(n.tools,e=>e.name?.startsWith(d)),...c],m=l===void 0?n.commands:[...s(n.commands,e=>i(e,o.name)),...l],h=u===void 0?n.resources:{...n.resources,...u.length>0?{[o.name]:u}:H(n.resources,o.name)};n={...n,clients:f,tools:p,commands:m,resources:h}}return{...t,mcp:n}}))},[d]),M=(0,K.useCallback)(e=>{y.current.push(e),k.current===null&&(k.current=setTimeout(j,16))},[j]),N=(0,K.useCallback)(({client:e,tools:t,commands:n,resources:r})=>{switch(M({...e,tools:t,commands:n,resources:r}),e.type){case`connected`:b(e.client,e.name,d),e.client.onclose=()=>{let t=e.config.type??`stdio`;if(v(e.name,e.config).catch(()=>{se(`Failed to invalidate the server cache: ${e.name}`)}),D(e.name)){L(e.name,`Server is disabled, skipping automatic reconnection`);return}if(t!==`stdio`&&t!==`sdk`){let n=pe(t);L(e.name,`${n} transport closed/disconnected, attempting automatic reconnection`);let r=f.current.get(e.name);r&&(clearTimeout(r),f.current.delete(e.name)),(async()=>{for(let t=1;t<=J;t++){if(D(e.name)){L(e.name,`Server disabled during reconnection, stopping retry`),f.current.delete(e.name);return}M({...e,type:`pending`,reconnectAttempt:t,maxReconnectAttempts:J});let r=Date.now();try{let i=await C(e.name,e.config),a=Date.now()-r;if(i.client.type===`connected`){L(e.name,`${n} reconnection successful after ${a}ms (attempt ${t})`),f.current.delete(e.name),N(i);return}if(L(e.name,`${n} reconnection attempt ${t} completed with status: ${i.client.type}`),t===J){L(e.name,`Max reconnection attempts (${J}) reached, giving up`),f.current.delete(e.name),N(i);return}}catch(i){let a=Date.now()-r;if(R(e.name,`${n} reconnection attempt ${t} failed after ${a}ms: ${i}`),t===J){L(e.name,`Max reconnection attempts (${J}) reached, giving up`),f.current.delete(e.name),M({...e,type:`failed`});return}}let i=Math.min(Y*2**(t-1),X);L(e.name,`Scheduling reconnection attempt ${t+1} in ${i}ms`),await new Promise(t=>{let n=setTimeout(t,i);f.current.set(e.name,n)})}})()}else M({...e,type:`failed`})},e.capabilities?.tools?.listChanged&&e.client.setNotificationHandler(A,async()=>{L(e.name,`Received tools/list_changed notification, refreshing tools`);try{let t=S.cache.get(e.name);S.cache.delete(e.name);let n=await S(e),r=n.length;t?t.then(e=>{V(`tengu_mcp_list_changed`,{type:`tools`,previousCount:e.length,newCount:r})},()=>{V(`tengu_mcp_list_changed`,{type:`tools`,newCount:r})}):V(`tengu_mcp_list_changed`,{type:`tools`,newCount:r}),M({...e,tools:n})}catch(t){R(e.name,`Failed to refresh tools after list_changed notification: ${F(t)}`)}}),e.capabilities?.prompts?.listChanged&&e.client.setNotificationHandler(p,async()=>{L(e.name,`Received prompts/list_changed notification, refreshing prompts`),V(`tengu_mcp_list_changed`,{type:`prompts`});try{w.cache.delete(e.name);let[t,n]=await Promise.all([w(e),Promise.resolve([])]);M({...e,commands:[...t,...n]}),q?.()}catch(t){R(e.name,`Failed to refresh prompts after list_changed notification: ${F(t)}`)}}),e.capabilities?.resources?.listChanged&&e.client.setNotificationHandler(ee,async()=>{L(e.name,`Received resources/list_changed notification, refreshing resources`),V(`tengu_mcp_list_changed`,{type:`resources`});try{O.cache.delete(e.name);{let t=await O(e);M({...e,resources:t})}}catch(t){R(e.name,`Failed to refresh resources after list_changed notification: ${F(t)}`)}});break;case`needs-auth`:case`failed`:case`pending`:case`disabled`:break}},[M]),P=ae();return(0,K.useEffect)(()=>{async function n(){let{servers:n,errors:r}=t?{servers:{},errors:[]}:await g(e),i={...n,...e};G(d,r),d(e=>{let{stale:t,...n}=o(e.mcp,i);for(let e of t){let t=f.current.get(e.name);t&&(clearTimeout(t),f.current.delete(e.name)),e.type===`connected`&&(e.client.onclose=void 0,v(e.name,e.config).catch(()=>{}))}let r=new Set(n.clients.map(e=>e.name)),a=Object.entries(i).filter(([e])=>!r.has(e)).map(([e,t])=>({name:e,type:D(e)?`disabled`:`pending`,config:t}));return a.length===0&&t.length===0?e:{...e,mcp:{...e.mcp,...n,clients:[...n.clients,...a]}}})}n().catch(e=>{R(`useManageMCPConnections`,`Failed to initialize servers as pending: ${F(e)}`)})},[t,e,d,P,l]),(0,K.useEffect)(()=>{let n=!1;async function r(){let r;t||h()?r=Promise.resolve({}):(te(),r=re());let{servers:i,errors:a}=t?{servers:{},errors:[]}:await g(e,r);if(n)return;G(d,a);let o={...i,...e},s=Object.fromEntries(Object.entries(o).filter(([e])=>!D(e)));E(N,s).catch(e=>{R(`useManageMcpConnections`,`Failed to get MCP resources: ${F(e)}`)});let c={};if(!t){if(c=T(await r).allowed,n)return;if(Object.keys(c).length>0){let{servers:e}=x(c,o);c=e}if(Object.keys(c).length>0){d(e=>{let t=new Set(e.mcp.clients.map(e=>e.name)),n=Object.entries(c).filter(([e])=>!t.has(e)).map(([e,t])=>({name:e,type:D(e)?`disabled`:`pending`,config:t}));return n.length===0?e:{...e,mcp:{...e.mcp,clients:[...e.mcp.clients,...n]}}});let e=Object.fromEntries(Object.entries(c).filter(([e])=>!D(e)));E(N,e).catch(e=>{R(`useManageMcpConnections`,`Failed to get claude.ai MCP resources: ${F(e)}`)})}}let l={...o,...c},u={enterprise:0,global:0,project:0,user:0,plugin:0,claudeai:0};for(let[e,t]of Object.entries(l))t.scope===`enterprise`?u.enterprise++:t.scope===`user`?u.global++:t.scope===`project`?u.project++:t.scope===`local`?u.user++:t.scope===`dynamic`?u.plugin++:t.scope===`claudeai`&&u.claudeai++;V(`tengu_mcp_servers`,{...u})}return r(),()=>{n=!0}},[t,e,N,d,r,P,l]),(0,K.useEffect)(()=>{let e=f.current;return()=>{for(let t of e.values())clearTimeout(t);e.clear(),k.current!==null&&(clearTimeout(k.current),k.current=null,j())}},[j]),{reconnectMcpServer:(0,K.useCallback)(async e=>{let t=n.getState().mcp.clients.find(t=>t.name===e);if(!t)throw Error(`MCP server ${e} not found`);let r=f.current.get(e);r&&(clearTimeout(r),f.current.delete(e));let i=await C(e,t.config);return N(i),i},[n,N]),toggleMcpServer:(0,K.useCallback)(async e=>{let t=n.getState().mcp.clients.find(t=>t.name===e);if(!t)throw Error(`MCP server ${e} not found`);if(t.type!==`disabled`){let n=f.current.get(e);n&&(clearTimeout(n),f.current.delete(e)),m(e,!1),t.type===`connected`&&await v(e,t.config),M({name:e,type:`disabled`,config:t.config})}else{m(e,!0),M({name:e,type:`pending`,config:t.config});let n=await C(e,t.config);N(n)}},[n,M,N])}}function pe(e){switch(e){case`http`:return`HTTP`;case`ws`:case`ws-ide`:return`WebSocket`;default:return`SSE`}}var K,q,J,Y,X,me=t((()=>{K=n(N(),1),ie(),k(),l(),U(),d(),B(),y(),ce(),f(),M(),oe(),z(),_(),j(),le(),r(),q=(ue(),e(de)).clearSkillIndexCache,J=5,Y=1e3,X=3e4}));function he(){let e=(0,Z.useContext)($);if(!e)throw Error(`useMcpReconnect must be used within MCPConnectionManager`);return e.reconnectMcpServer}function ge(){let e=(0,Z.useContext)($);if(!e)throw Error(`useMcpToggleEnabled must be used within MCPConnectionManager`);return e.toggleMcpServer}function _e({children:e,dynamicMcpConfig:t,isStrictMcpConfig:n}){let{reconnectMcpServer:r,toggleMcpServer:i}=fe(t,n),a=(0,Z.useMemo)(()=>({reconnectMcpServer:r,toggleMcpServer:i}),[r,i]);return(0,Q.jsx)($.Provider,{value:a,children:e})}var Z,Q,$,ve=t((()=>{Z=n(N(),1),me(),Q=P(),$=(0,Z.createContext)(null)}));export{ge as i,ve as n,he as r,_e as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,o as t}from"./rolldown-runtime-DaDcL9Zw.js";import{n,t as r}from"./figures-5ThXQEtq.js";import{$u as i,$x as a,Dx as o,FS as s,Fp as c,GC as l,Gx as ee,IS as u,Iu as d,Pp as f,Pu as p,Sg as te,Tx as ne,Vx as re,Wx as ie,Xx as m,Yx as ae,ZC as h,dd as g,ed as oe,ex as se,fS as ce,lS as _,qx as le,sx as v,ud as ue,wg as de,wx as y,xg as b,yx as fe}from"./loadAgentsDir-BL93ulMm.js";import{D as x,H as pe,I as S,Lt as me,P as C,T as w,Wt as T,dr as he,fi as E,hn as ge,j as D,ot as _e,t as O,y as k}from"./src-P_wYS_NJ2.js";import{t as A}from"./jsx-runtime-Bb4Xn-E0.js";import{P as ve,R as j}from"./debug-BecbSVoN.js";import{et as M,it as N,tt as P}from"./settings-D4CpDv2y.js";import{c as ye,o as F}from"./log-Dauqle-Z.js";import{n as I,r as L}from"./analytics-DJobLaWP.js";import{l as be,u as R}from"./oauth-C9VBDB0Y.js";import{l as xe,n as Se,o as z}from"./stringUtils-C8PaYpQF.js";import{Bt as B,jt as Ce}from"./model-Bgh_r4lg.js";import{i as we,n as V,r as Te}from"./MCPConnectionManager-B9n4SXN4.js";import{n as Ee,t as H}from"./useExitOnCtrlCDWithKeybindings-DEEJhm_W.js";function De({serverToolsCount:e,serverPromptsCount:t,serverResourcesCount:n}){let r=[];return e>0&&r.push(`tools`),n>0&&r.push(`resources`),t>0&&r.push(`prompts`),(0,U.jsxs)(S,{children:[(0,U.jsx)(C,{bold:!0,children:`Capabilities: `}),(0,U.jsx)(C,{color:`text`,children:r.length>0?(0,U.jsx)(w,{children:r}):`none`})]})}var U,Oe=e((()=>{E(),O(),U=A()}));function ke(e,t){switch(e.client.type){case`connected`:return{message:`Reconnected to ${t}.`,success:!0};case`needs-auth`:return{message:`${t} requires authentication. Use the 'Authenticate' option.`,success:!1};case`failed`:return{message:`Failed to reconnect to ${t}.`,success:!1};default:return{message:`Unknown result when reconnecting to ${t}.`,success:!1}}}function Ae(e,t){return`Error reconnecting to ${t}: ${e instanceof Error?e.message:String(e)}`}var W=e((()=>{}));function je({server:e,serverToolsCount:t,onViewTools:n,onCancel:i,onComplete:a,borderless:s=!1}){let[c]=pe(),l=Ee(),{columns:d}=_e(),[m,h]=G.useState(!1),[g,ce]=G.useState(null),_=te(e=>e.mcp),v=de(),[y,b]=G.useState(null),[E,O]=(0,G.useState)(!1),k=(0,G.useRef)(null),[A,j]=(0,G.useState)(!1),[M,N]=(0,G.useState)(null),[P,F]=(0,G.useState)(!1),[I,R]=(0,G.useState)(null),[xe,z]=(0,G.useState)(!1),[B,V]=(0,G.useState)(!1),H=(0,G.useRef)(void 0),U=(0,G.useRef)(!1),[Oe,W]=(0,G.useState)(``),[je,Me]=(0,G.useState)(0),[Ne,q]=(0,G.useState)(null);(0,G.useEffect)(()=>()=>{U.current=!0,k.current?.abort(),H.current!==void 0&&clearTimeout(H.current)},[]);let J=e.isAuthenticated||e.client.type===`connected`&&t>0,Y=Te(),Pe=G.useCallback(async()=>{j(!1),N(null),O(!0);try{let t=await Y(e.name),n=t.client.type===`connected`;L(`tengu_claudeai_mcp_auth_completed`,{success:n}),n?a?.(`Authentication successful. Connected to ${e.name}.`):t.client.type===`needs-auth`?a?.(`Authentication successful, but server still requires authentication. You may need to manually restart Claude Code.`):a?.(`Authentication successful, but server reconnection failed. You may need to manually restart Claude Code for the changes to take effect.`)}catch(t){L(`tengu_claudeai_mcp_auth_completed`,{success:!1}),a?.(Ae(t,e.name))}finally{O(!1)}},[Y,e.name,a]),X=G.useCallback(async()=>{await se(e.name,{...e.config,scope:e.scope}),v(t=>{let n=t.mcp.clients.map(t=>t.name===e.name?{...t,type:`needs-auth`}:t),r=le(t.mcp.tools,e.name),i=ie(t.mcp.commands,e.name),a=ee(t.mcp.resources,e.name);return{...t,mcp:{...t.mcp,clients:n,tools:r,commands:i,resources:a}}}),L(`tengu_claudeai_mcp_clear_auth_completed`,{}),a?.(`Disconnected from ${e.name}.`),F(!1),R(null),z(!1)},[e.name,e.config,e.scope,v,a]);T(`confirm:no`,()=>{k.current?.abort(),k.current=null,h(!1),b(null)},{context:`Confirmation`,isActive:m}),T(`confirm:no`,()=>{j(!1),N(null)},{context:`Confirmation`,isActive:A}),T(`confirm:no`,()=>{F(!1),R(null),z(!1)},{context:`Confirmation`,isActive:P}),ge((e,t)=>{if(t.return&&A&&Pe(),t.return&&P)if(xe)X();else{let e=`${be().CLAUDE_AI_ORIGIN}/settings/connectors`;R(e),z(!0),u(e)}if(e===`c`&&!B){let e=y||M||I;e&&he(e).then(e=>{U.current||(e&&process.stdout.write(e),V(!0),H.current!==void 0&&clearTimeout(H.current),H.current=setTimeout(V,2e3,!1))})}});let Z=Se(String(e.name)),Fe=ae(_.commands,e.name).length,Ie=we(),Le=G.useCallback(async()=>{let t=be().CLAUDE_AI_ORIGIN,n=Ce()?.organizationUuid,r;r=n&&e.config.type===`claudeai-proxy`&&e.config.id?`${t}/api/organizations/${n}/mcp/start-auth/${e.config.id.startsWith(`mcprs`)?`mcpsrv`+e.config.id.slice(5):e.config.id}?product_surface=${encodeURIComponent(process.env.CLAUDE_CODE_ENTRYPOINT||`cli`)}`:`${t}/settings/connectors`,N(r),j(!0),L(`tengu_claudeai_mcp_auth_started`,{}),await u(r)},[e.config]),Q=G.useCallback(()=>{F(!0),L(`tengu_claudeai_mcp_clear_auth_started`,{})},[]),Re=G.useCallback(async()=>{let t=e.client.type!==`disabled`;try{await Ie(e.name),e.config.type===`claudeai-proxy`&&L(`tengu_claudeai_mcp_toggle`,{new_state:t?`disabled`:`enabled`}),i()}catch(n){a?.(`Failed to ${t?`disable`:`enable`} MCP server '${e.name}': ${ve(n)}`)}},[e.client.type,e.config.type,e.name,Ie,i,a]),ze=G.useCallback(async()=>{if(e.config.type===`claudeai-proxy`)return;h(!0),ce(null);let t=new AbortController;k.current=t;try{if(e.isAuthenticated&&e.config&&await o(e.name,e.config,{preserveStepUpState:!0}),e.config){await ne(e.name,e.config,b,t.signal,{onWaitingForCallback:e=>{q(()=>e)}}),L(`tengu_mcp_auth_config_authenticate`,{wasAuthenticated:e.isAuthenticated});let n=await Y(e.name);if(n.client.type===`connected`){let t=J?`Authentication successful. Reconnected to ${e.name}.`:`Authentication successful. Connected to ${e.name}.`;a?.(t)}else n.client.type===`needs-auth`?a?.(`Authentication successful, but server still requires authentication. You may need to manually restart Claude Code.`):(ye(e.name,`Reconnection failed after authentication`),a?.(`Authentication successful, but server reconnection failed. You may need to manually restart Claude Code for the changes to take effect.`))}}catch(e){e instanceof Error&&!(e instanceof fe)&&ce(e.message)}finally{h(!1),k.current=null,q(null),W(``)}},[e.isAuthenticated,e.config,e.name,a,Y,J]),Be=async()=>{e.config.type!==`claudeai-proxy`&&e.config&&(await o(e.name,e.config),L(`tengu_mcp_auth_config_clear`,{}),await se(e.name,{...e.config,scope:e.scope}),v(t=>{let n=t.mcp.clients.map(t=>t.name===e.name?{...t,type:`failed`}:t),r=le(t.mcp.tools,e.name),i=ie(t.mcp.commands,e.name),a=ee(t.mcp.resources,e.name);return{...t,mcp:{...t.mcp,clients:n,tools:r,commands:i,resources:a}}}),a?.(`Authentication cleared for ${e.name}.`))};if(m){let t=e.config.type!==`claudeai-proxy`&&e.config.oauth?.xaa?` Authenticating via your identity provider`:` A browser window will open for authentication`;return(0,K.jsxs)(S,{flexDirection:`column`,gap:1,padding:1,children:[(0,K.jsxs)(C,{color:`claude`,children:[`Authenticating with `,e.name,`…`]}),(0,K.jsxs)(S,{children:[(0,K.jsx)(p,{}),(0,K.jsx)(C,{children:t})]}),y&&(0,K.jsxs)(S,{flexDirection:`column`,children:[(0,K.jsxs)(S,{children:[(0,K.jsx)(C,{dimColor:!0,children:`If your browser doesn't open automatically, copy this URL manually `}),B?(0,K.jsx)(C,{color:`success`,children:`(Copied!)`}):(0,K.jsx)(C,{dimColor:!0,children:(0,K.jsx)(x,{shortcut:`c`,action:`copy`,parens:!0})})]}),(0,K.jsx)(me,{url:y})]}),m&&y&&Ne&&(0,K.jsxs)(S,{flexDirection:`column`,marginTop:1,children:[(0,K.jsx)(C,{dimColor:!0,children:`If the redirect page shows a connection error, paste the URL from your browser's address bar:`}),(0,K.jsxs)(S,{children:[(0,K.jsxs)(C,{dimColor:!0,children:[`URL `,`>`,` `]}),(0,K.jsx)(ue,{value:Oe,onChange:W,onSubmit:e=>{Ne(e.trim()),W(``)},cursorOffset:je,onChangeCursorOffset:Me,columns:d-8})]})]}),(0,K.jsx)(S,{marginLeft:3,children:(0,K.jsx)(C,{dimColor:!0,children:`Return here after authenticating in your browser. Press Esc to go back.`})})]})}if(A)return(0,K.jsxs)(S,{flexDirection:`column`,gap:1,padding:1,children:[(0,K.jsxs)(C,{color:`claude`,children:[`Authenticating with `,e.name,`…`]}),(0,K.jsxs)(S,{children:[(0,K.jsx)(p,{}),(0,K.jsx)(C,{children:` A browser window will open for authentication`})]}),M&&(0,K.jsxs)(S,{flexDirection:`column`,children:[(0,K.jsxs)(S,{children:[(0,K.jsx)(C,{dimColor:!0,children:`If your browser doesn't open automatically, copy this URL manually `}),B?(0,K.jsx)(C,{color:`success`,children:`(Copied!)`}):(0,K.jsx)(C,{dimColor:!0,children:(0,K.jsx)(x,{shortcut:`c`,action:`copy`,parens:!0})})]}),(0,K.jsx)(me,{url:M})]}),(0,K.jsxs)(S,{marginLeft:3,flexDirection:`column`,children:[(0,K.jsxs)(C,{color:`permission`,children:[`Press `,(0,K.jsx)(C,{bold:!0,children:`Enter`}),` after authenticating in your browser.`]}),(0,K.jsx)(C,{dimColor:!0,italic:!0,children:(0,K.jsx)(f,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`back`})})]})]});if(P)return(0,K.jsxs)(S,{flexDirection:`column`,gap:1,padding:1,children:[(0,K.jsxs)(C,{color:`claude`,children:[`Clear authentication for `,e.name]}),xe?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(C,{children:`Find the MCP server in the browser and click "Disconnect".`}),I&&(0,K.jsxs)(S,{flexDirection:`column`,children:[(0,K.jsxs)(S,{children:[(0,K.jsx)(C,{dimColor:!0,children:`If your browser didn't open automatically, copy this URL manually `}),B?(0,K.jsx)(C,{color:`success`,children:`(Copied!)`}):(0,K.jsx)(C,{dimColor:!0,children:(0,K.jsx)(x,{shortcut:`c`,action:`copy`,parens:!0})})]}),(0,K.jsx)(me,{url:I})]}),(0,K.jsxs)(S,{marginLeft:3,flexDirection:`column`,children:[(0,K.jsxs)(C,{color:`permission`,children:[`Press `,(0,K.jsx)(C,{bold:!0,children:`Enter`}),` when done.`]}),(0,K.jsx)(C,{dimColor:!0,italic:!0,children:(0,K.jsx)(f,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`back`})})]})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(C,{children:`This will open claude.ai in the browser. Find the MCP server in the list and click "Disconnect".`}),(0,K.jsxs)(S,{marginLeft:3,flexDirection:`column`,children:[(0,K.jsxs)(C,{color:`permission`,children:[`Press `,(0,K.jsx)(C,{bold:!0,children:`Enter`}),` to open the browser.`]}),(0,K.jsx)(C,{dimColor:!0,italic:!0,children:(0,K.jsx)(f,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`back`})})]})]})]});if(E)return(0,K.jsxs)(S,{flexDirection:`column`,gap:1,padding:1,children:[(0,K.jsxs)(C,{color:`text`,children:[`Connecting to `,(0,K.jsx)(C,{bold:!0,children:e.name}),`…`]}),(0,K.jsxs)(S,{children:[(0,K.jsx)(p,{}),(0,K.jsx)(C,{children:` Establishing connection to MCP server`})]}),(0,K.jsx)(C,{dimColor:!0,children:`This may take a few moments.`})]});let $=[];return e.client.type===`disabled`&&$.push({label:`Enable`,value:`toggle-enabled`}),e.client.type===`connected`&&t>0&&$.push({label:`View tools`,value:`tools`}),e.config.type===`claudeai-proxy`?e.client.type===`connected`?$.push({label:`Clear authentication`,value:`claudeai-clear-auth`}):e.client.type!==`disabled`&&$.push({label:`Authenticate`,value:`claudeai-auth`}):(J&&($.push({label:`Re-authenticate`,value:`reauth`}),$.push({label:`Clear authentication`,value:`clear-auth`})),J||$.push({label:`Authenticate`,value:`auth`})),e.client.type!==`disabled`&&(e.client.type!==`needs-auth`&&$.push({label:`Reconnect`,value:`reconnectMcpServer`}),$.push({label:`Disable`,value:`toggle-enabled`})),$.length===0&&$.push({label:`Back`,value:`back`}),(0,K.jsxs)(S,{flexDirection:`column`,children:[(0,K.jsxs)(S,{flexDirection:`column`,paddingX:1,borderStyle:s?void 0:`round`,children:[(0,K.jsx)(S,{marginBottom:1,children:(0,K.jsxs)(C,{bold:!0,children:[Z,` MCP Server`]})}),(0,K.jsxs)(S,{flexDirection:`column`,gap:0,children:[(0,K.jsxs)(S,{children:[(0,K.jsx)(C,{bold:!0,children:`Status: `}),e.client.type===`disabled`?(0,K.jsxs)(C,{children:[D(`inactive`,c)(r.radioOff),` disabled`]}):e.client.type===`connected`?(0,K.jsxs)(C,{children:[D(`success`,c)(r.tick),` connected`]}):e.client.type===`pending`?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(C,{dimColor:!0,children:r.radioOff}),(0,K.jsx)(C,{children:` connecting…`})]}):e.client.type===`needs-auth`?(0,K.jsxs)(C,{children:[D(`warning`,c)(r.triangleUpOutline),` needs authentication`]}):(0,K.jsxs)(C,{children:[D(`error`,c)(r.cross),` failed`]})]}),e.transport!==`claudeai-proxy`&&(0,K.jsxs)(S,{children:[(0,K.jsx)(C,{bold:!0,children:`Auth: `}),J?(0,K.jsxs)(C,{children:[D(`success`,c)(r.tick),` authenticated`]}):(0,K.jsxs)(C,{children:[D(`error`,c)(r.cross),` not authenticated`]})]}),(0,K.jsxs)(S,{children:[(0,K.jsx)(C,{bold:!0,children:`URL: `}),(0,K.jsx)(C,{dimColor:!0,children:e.config.url})]}),(0,K.jsxs)(S,{children:[(0,K.jsx)(C,{bold:!0,children:`Config location: `}),(0,K.jsx)(C,{dimColor:!0,children:re(e.scope)})]}),e.client.type===`connected`&&(0,K.jsx)(De,{serverToolsCount:t,serverPromptsCount:Fe,serverResourcesCount:_.resources[e.name]?.length||0}),e.client.type===`connected`&&t>0&&(0,K.jsxs)(S,{children:[(0,K.jsx)(C,{bold:!0,children:`Tools: `}),(0,K.jsxs)(C,{dimColor:!0,children:[t,` tools`]})]})]}),g&&(0,K.jsx)(S,{marginTop:1,children:(0,K.jsxs)(C,{color:`error`,children:[`Error: `,g]})}),$.length>0&&(0,K.jsx)(S,{marginTop:1,children:(0,K.jsx)(oe,{options:$,onChange:async t=>{switch(t){case`tools`:n();break;case`auth`:case`reauth`:await ze();break;case`clear-auth`:await Be();break;case`claudeai-auth`:await Le();break;case`claudeai-clear-auth`:Q();break;case`reconnectMcpServer`:O(!0);try{let t=await Y(e.name);e.config.type===`claudeai-proxy`&&L(`tengu_claudeai_mcp_reconnect`,{success:t.client.type===`connected`});let{message:n}=ke(t,e.name);a?.(n)}catch(t){e.config.type===`claudeai-proxy`&&L(`tengu_claudeai_mcp_reconnect`,{success:!1}),a?.(Ae(t,e.name))}finally{O(!1)}break;case`toggle-enabled`:await Re();break;case`back`:i();break}},onCancel:i})})]}),(0,K.jsx)(S,{marginTop:1,children:(0,K.jsx)(C,{dimColor:!0,italic:!0,children:l.pending?(0,K.jsxs)(K.Fragment,{children:[`Press `,l.keyName,` again to exit`]}):(0,K.jsxs)(w,{children:[(0,K.jsx)(x,{shortcut:`↑↓`,action:`navigate`}),(0,K.jsx)(x,{shortcut:`Enter`,action:`select`}),(0,K.jsx)(f,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`back`})]})})})]})}var G,K,Me=e((()=>{n(),G=t(E(),1),I(),R(),H(),h(),O(),l(),y(),v(),V(),a(),b(),B(),s(),j(),F(),z(),c(),i(),d(),g(),Oe(),W(),K=A()}));function Ne({server:e,serverToolsCount:t,onViewTools:n,onCancel:i,onComplete:a,borderless:o=!1}){let[s]=pe(),c=Ee(),l=te(e=>e.mcp),ee=Te(),u=we(),[d,ne]=(0,q.useState)(!1),ie=q.useCallback(async()=>{let t=e.client.type!==`disabled`;try{await u(e.name),i()}catch(n){a(`Failed to ${t?`disable`:`enable`} MCP server '${e.name}': ${ve(n)}`)}},[e.client.type,e.name,u,i,a]),m=Se(String(e.name)),h=ae(l.commands,e.name).length,g=[];return e.client.type!==`disabled`&&t>0&&g.push({label:`View tools`,value:`tools`}),e.client.type!==`disabled`&&g.push({label:`Reconnect`,value:`reconnectMcpServer`}),g.push({label:e.client.type===`disabled`?`Enable`:`Disable`,value:`toggle-enabled`}),g.length===0&&g.push({label:`Back`,value:`back`}),d?(0,J.jsxs)(S,{flexDirection:`column`,gap:1,padding:1,children:[(0,J.jsxs)(C,{color:`text`,children:[`Reconnecting to `,(0,J.jsx)(C,{bold:!0,children:e.name})]}),(0,J.jsxs)(S,{children:[(0,J.jsx)(p,{}),(0,J.jsx)(C,{children:` Restarting MCP server process`})]}),(0,J.jsx)(C,{dimColor:!0,children:`This may take a few moments.`})]}):(0,J.jsxs)(S,{flexDirection:`column`,children:[(0,J.jsxs)(S,{flexDirection:`column`,paddingX:1,borderStyle:o?void 0:`round`,children:[(0,J.jsx)(S,{marginBottom:1,children:(0,J.jsxs)(C,{bold:!0,children:[m,` MCP Server`]})}),(0,J.jsxs)(S,{flexDirection:`column`,gap:0,children:[(0,J.jsxs)(S,{children:[(0,J.jsx)(C,{bold:!0,children:`Status: `}),e.client.type===`disabled`?(0,J.jsxs)(C,{children:[D(`inactive`,s)(r.radioOff),` disabled`]}):e.client.type===`connected`?(0,J.jsxs)(C,{children:[D(`success`,s)(r.tick),` connected`]}):e.client.type===`pending`?(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(C,{dimColor:!0,children:r.radioOff}),(0,J.jsx)(C,{children:` connecting…`})]}):(0,J.jsxs)(C,{children:[D(`error`,s)(r.cross),` failed`]})]}),(0,J.jsxs)(S,{children:[(0,J.jsx)(C,{bold:!0,children:`Command: `}),(0,J.jsx)(C,{dimColor:!0,children:e.config.command})]}),e.config.args&&e.config.args.length>0&&(0,J.jsxs)(S,{children:[(0,J.jsx)(C,{bold:!0,children:`Args: `}),(0,J.jsx)(C,{dimColor:!0,children:e.config.args.join(` `)})]}),(0,J.jsxs)(S,{children:[(0,J.jsx)(C,{bold:!0,children:`Config location: `}),(0,J.jsx)(C,{dimColor:!0,children:re(_(e.name)?.scope??`dynamic`)})]}),e.client.type===`connected`&&(0,J.jsx)(De,{serverToolsCount:t,serverPromptsCount:h,serverResourcesCount:l.resources[e.name]?.length||0}),e.client.type===`connected`&&t>0&&(0,J.jsxs)(S,{children:[(0,J.jsx)(C,{bold:!0,children:`Tools: `}),(0,J.jsxs)(C,{dimColor:!0,children:[t,` tools`]})]})]}),g.length>0&&(0,J.jsx)(S,{marginTop:1,children:(0,J.jsx)(oe,{options:g,onChange:async t=>{if(t===`tools`)n();else if(t===`reconnectMcpServer`){ne(!0);try{let{message:t}=ke(await ee(e.name),e.name);a?.(t)}catch(t){a?.(Ae(t,e.name))}finally{ne(!1)}}else t===`toggle-enabled`?await ie():t===`back`&&i()},onCancel:i})})]}),(0,J.jsx)(S,{marginTop:1,children:(0,J.jsx)(C,{dimColor:!0,italic:!0,children:c.pending?(0,J.jsxs)(J.Fragment,{children:[`Press `,c.keyName,` again to exit`]}):(0,J.jsxs)(w,{children:[(0,J.jsx)(x,{shortcut:`↑↓`,action:`navigate`}),(0,J.jsx)(x,{shortcut:`Enter`,action:`select`}),(0,J.jsx)(f,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`back`})]})})})]})}var q,J,Y=e((()=>{n(),q=t(E(),1),H(),O(),ce(),V(),a(),b(),j(),z(),c(),i(),d(),Oe(),W(),J=A()}));function Pe({tool:e,server:t,onBack:n}){let[r,i]=X.useState(``),a=P(e.name,t.name),o=M(e.userFacingName?e.userFacingName({}):a),s=e.isReadOnly?.({})??!1,c=e.isDestructive?.({})??!1,l=e.isOpenWorld?.({})??!1;return X.useEffect(()=>{async function t(){try{let t=await e.description({},{isNonInteractiveSession:!1,toolPermissionContext:{mode:`default`,additionalWorkingDirectories:new Map,alwaysAllowRules:{},alwaysDenyRules:{},alwaysAskRules:{},isBypassPermissionsModeAvailable:!1},tools:[]});i(t)}catch{i(`Failed to load description`)}}t()},[e]),(0,Z.jsx)(k,{title:(0,Z.jsxs)(Z.Fragment,{children:[o,s&&(0,Z.jsx)(C,{color:`success`,children:` [read-only]`}),c&&(0,Z.jsx)(C,{color:`error`,children:` [destructive]`}),l&&(0,Z.jsx)(C,{dimColor:!0,children:` [open-world]`})]}),subtitle:t.name,onCancel:n,inputGuide:e=>e.pending?(0,Z.jsxs)(C,{children:[`Press `,e.keyName,` again to exit`]}):(0,Z.jsx)(f,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`go back`}),children:(0,Z.jsxs)(S,{flexDirection:`column`,children:[(0,Z.jsxs)(S,{children:[(0,Z.jsx)(C,{bold:!0,children:`Tool name: `}),(0,Z.jsx)(C,{dimColor:!0,children:a})]}),(0,Z.jsxs)(S,{children:[(0,Z.jsx)(C,{bold:!0,children:`Full name: `}),(0,Z.jsx)(C,{dimColor:!0,children:e.name})]}),r&&(0,Z.jsxs)(S,{flexDirection:`column`,marginTop:1,children:[(0,Z.jsx)(C,{bold:!0,children:`Description:`}),(0,Z.jsx)(C,{wrap:`wrap`,children:r})]}),e.inputJSONSchema&&e.inputJSONSchema.properties&&Object.keys(e.inputJSONSchema.properties).length>0&&(0,Z.jsxs)(S,{flexDirection:`column`,marginTop:1,children:[(0,Z.jsx)(C,{bold:!0,children:`Parameters:`}),(0,Z.jsx)(S,{marginLeft:2,flexDirection:`column`,children:Object.entries(e.inputJSONSchema.properties).map(([t,n])=>{let r=(e.inputJSONSchema?.required)?.includes(t);return(0,Z.jsxs)(C,{children:[`• `,t,r&&(0,Z.jsx)(C,{dimColor:!0,children:` (required)`}),`:`,` `,(0,Z.jsx)(C,{dimColor:!0,children:typeof n==`object`&&n&&`type`in n?String(n.type):`unknown`}),typeof n==`object`&&n&&`description`in n&&(0,Z.jsxs)(C,{dimColor:!0,children:[` - `,String(n.description)]})]},t)})})]})]})})}var X,Z,Fe=e((()=>{X=t(E(),1),O(),N(),c(),Z=A()}));function Ie({server:e,onSelectTool:t,onBack:n}){let r=te(e=>e.mcp.tools),i=Le.useMemo(()=>e.client.type===`connected`?m(r,e.name):[],[e,r]),a=i.map((t,n)=>{let r=P(t.name,e.name),i=M(t.userFacingName?t.userFacingName({}):r),a=t.isReadOnly?.({})??!1,o=t.isDestructive?.({})??!1,s=t.isOpenWorld?.({})??!1,c=[];return a&&c.push(`read-only`),o&&c.push(`destructive`),s&&c.push(`open-world`),{label:i,value:n.toString(),description:c.length>0?c.join(`, `):void 0,descriptionColor:o?`error`:a?`success`:void 0}});return(0,Q.jsx)(k,{title:`Tools for ${e.name}`,subtitle:`${i.length} ${xe(i.length,`tool`)}`,onCancel:n,inputGuide:e=>e.pending?(0,Q.jsxs)(C,{children:[`Press `,e.keyName,` again to exit`]}):(0,Q.jsxs)(w,{children:[(0,Q.jsx)(x,{shortcut:`↑↓`,action:`navigate`}),(0,Q.jsx)(x,{shortcut:`Enter`,action:`select`}),(0,Q.jsx)(f,{action:`confirm:no`,context:`Confirmation`,fallback:`Esc`,description:`back`})]}),children:i.length===0?(0,Q.jsx)(C,{dimColor:!0,children:`No tools available`}):(0,Q.jsx)(oe,{options:a,onChange:e=>{let n=parseInt(e,10),r=i[n];r&&t(r,n)},onCancel:n})})}var Le,Q,Re=e((()=>{Le=t(E(),1),O(),N(),a(),b(),z(),c(),i(),Q=A()}));export{Ne as a,Me as c,Fe as i,Re as n,Y as o,Pe as r,je as s,Ie as t};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{n as e,o as t,r as n}from"./rolldown-runtime-DaDcL9Zw.js";import{n as r,t as i}from"./figures-5ThXQEtq.js";import{Aa as a,As as o,Ba as s,Bg as c,Da as l,Ds as u,GC as d,Gc as f,Gg as p,Ha as m,Iu as h,Ka as g,Nw as _,Os as v,Pu as y,Pw as b,Rg as x,Sa as S,Sg as C,Ta as w,Uc as T,Wa as E,Wc as D,ZC as O,an as k,ed as A,fb as j,jw as M,lp as ee,mn as N,pb as te,qc as P,sp as ne,td as F,vn as re,xg as I,zg as ie}from"./loadAgentsDir-BL93ulMm.js";import{C as ae,Gt as oe,I as L,P as R,Wt as se,fi as z,ot as ce,t as le}from"./src-P_wYS_NJ2.js";import{t as ue}from"./jsx-runtime-Bb4Xn-E0.js";import{Gn as de,Wt as fe}from"./state-BemZdQIl.js";import{Ln as B,Rn as pe}from"./settings-D4CpDv2y.js";import{h as V,m as me,o as he,q as ge,s as H,w as _e}from"./log-Dauqle-Z.js";import{n as U,r as W}from"./analytics-DJobLaWP.js";import{b as ve,m as ye,v as be}from"./startupProfiler-CmH_aVy2.js";import{E as xe,T as Se,c as Ce,d as we,w as Te}from"./sessionTracing-Bqb3vJTt.js";import{n as Ee,t as De}from"./useExitOnCtrlCDWithKeybindings-DEEJhm_W.js";import*as G from"path";import{randomUUID as K}from"crypto";z();var q=ue();le(),fe(),ge(),me(),he(),pe(),U(),be(),_(),j(),Te(),ne(),Ce(),f(),T(),o(),s(),re();function Oe(e){let t=e.toLowerCase();return/\b(wtf|wth|ffs|omfg|shit(ty|tiest)?|dumbass|horrible|awful|piss(ed|ing)? off|piece of (shit|crap|junk)|what the (fuck|hell)|fucking? (broken|useless|terrible|awful|horrible)|fuck you|screw (this|you)|so frustrating|this sucks|damn it)\b/.test(t)}function ke(e){let t=e.toLowerCase().trim();return t===`continue`||/\b(keep going|go on)\b/.test(t)}function Ae(e,t,n,r,i,a,o){let s=K();de(s);let c=typeof e==`string`?e:e.find(e=>e.type===`text`)?.text||``;we(c);let l=typeof e==`string`?e:e.findLast(e=>e.type===`text`)?.text||``;return l&&Se(`user_prompt`,{prompt_length:String(l.length),prompt:xe(l),"prompt.id":s}),W(`tengu_input_prompt`,{is_negative:Oe(c),is_keep_going:ke(c)}),t.length>0?{messages:[w({content:[...typeof e==`string`?e.trim()?[{type:`text`,text:e}]:[]:e,...t],uuid:i,imagePasteIds:n.length>0?n:void 0,permissionMode:a,isMeta:o||void 0}),...r],shouldQuery:!0}:{messages:[w({content:e,uuid:i,permissionMode:a,isMeta:o||void 0}),...r],shouldQuery:!0}}U(),s();async function je({input:e,preExpansionInput:t,mode:n,setToolJSX:r,context:i,pastedContents:o,ideSelection:s,messages:c,setUserInputOnProcessing:l,uuid:d,isAlreadyProcessing:f,querySource:p,canUseTool:m,skipSlashCommands:h,bridgeOrigin:g,isMeta:_,skipAttachments:v,autonomy:y}){let b=typeof e==`string`?e:null,x=b?.startsWith(`/`)&&!h;n===`prompt`&&b!==null&&!_&&!x&&l?.(b),P(`query_process_user_input_base_start`);let C=i.getAppState(),T=await Ne(e,n,r,i,o,s,c,d,f,p,m,C.toolPermissionContext.mode,h,g,_,v,t,y);if(P(`query_process_user_input_base_end`),!T.shouldQuery)return T;P(`query_hooks_start`);let E=a(e)||``;for await(let t of k(E,C.toolPermissionContext.mode,i,i.requestPrompt))if(t.message?.type!==`progress`){if(t.blockingError)return{messages:[S(`${N(t.blockingError)}\n\nOriginal prompt: ${e}`,`warning`)],shouldQuery:!1,allowedTools:T.allowedTools};if(t.preventContinuation){let e=t.stopReason?`Operation stopped by hook: ${t.stopReason}`:`Operation stopped by hook`;return T.messages.push(w({content:e})),T.shouldQuery=!1,T}if(t.additionalContexts&&t.additionalContexts.length>0&&T.messages.push(u({type:`hook_additional_context`,content:t.additionalContexts.map(Me),hookName:`UserPromptSubmit`,toolUseID:`hook-${K()}`,hookEvent:`UserPromptSubmit`})),t.message)switch(t.message.attachment.type){case`hook_success`:if(!t.message.attachment.content)break;T.messages.push({...t.message,attachment:{...t.message.attachment,content:Me(t.message.attachment.content)}});break;default:T.messages.push(t.message);break}}return P(`query_hooks_end`),T}var J=1e4;function Me(e){return e.length>J?`${e.substring(0,J)}… [output truncated - exceeded ${J} characters]`:e}async function Ne(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_){let y=null,x=[],S=[],C=e;if(typeof e==`string`)y=e;else if(e.length>0){P(`query_image_processing_start`);let t=[];for(let n of e)if(n.type===`image`){let e=await b(n);if(e.dimensions){let t=M(e.dimensions);t&&S.push(t)}t.push(e.block)}else t.push(n);C=t,P(`query_image_processing_end`);let n=t[t.length-1];n?.type===`text`?(y=n.text,x=t.slice(0,-1)):x=t}if(y===null&&t!==`prompt`)throw Error(`Mode: ${t} requires a string input.`);let w=i?Object.values(i).filter(te):[],T=w.map(e=>e.id),E=i?await ee(i):new Map;P(`query_pasted_image_processing_start`);let O=await Promise.all(w.map(async e=>{let t={type:`image`,source:{type:`base64`,media_type:e.mediaType||`image/png`,data:e.content}};return W(`tengu_pasted_image_resize_attempt`,{original_size_bytes:e.content.length}),{resized:await b(t),originalDimensions:e.dimensions,sourcePath:e.sourcePath??E.get(e.id)}})),k=[];for(let{resized:e,originalDimensions:t,sourcePath:n}of O){if(e.dimensions){let t=M(e.dimensions,n);t&&S.push(t)}else if(t){let e=M(t,n);e&&S.push(e)}else n&&S.push(`[Image source: ${n}]`);k.push(e.block)}P(`query_pasted_image_processing_end`);let A=f,j=!h&&y!==null&&(t!==`prompt`||A||!y.startsWith(`/`));P(`query_attachment_loading_start`);let N=j?await D(v(y,r,a??null,[],o,l)):[];if(P(`query_attachment_loading_end`),y!==null&&t===`bash`){let{processBashCommand:e}=await import(`./processBashCommand-dcCNCiBp.js`);return Y(await e(y,x,N,r,n),S)}if(y!==null&&!A&&y.startsWith(`/`)){let{processSlashCommand:e}=await import(`./processSlashCommand-YDiM63Qr.js`);return Y(await e(y,x,k,N,r,n,s,c,u,_),S)}if(y!==null&&t===`prompt`){let e=y.trim(),t=N.find(e=>e.attachment.type===`agent_mention`);if(t){let n=`@agent-${t.attachment.agentType}`,r=e===n;W(`tengu_subagent_at_mention`,{is_subagent_only:r,is_prefix:e.startsWith(n)&&!r})}}return Y(Ae(C,k,T,N,s,d,m),S)}function Y(e,t){return t.length>0&&e.messages.push(w({content:t.map(e=>({type:`text`,text:e})),isMeta:!0})),e}var Pe=n({MessageSelector:()=>Ie,messagesAfterAreOnlySynthetic:()=>Ue,selectableUserMessagesFilter:()=>Z});function Fe(e){return e.type===`text`}function X(e){return e===`summarize`}function Ie({messages:e,onPreRestore:t,onRestoreMessage:n,onRestoreCode:r,onSummarize:a,onClose:o,preselectedMessage:s}){let l=C(e=>e.fileHistory),[u,d]=(0,Q.useState)(void 0),f=ie(),p=(0,Q.useMemo)(K,[]),m=(0,Q.useMemo)(()=>[...e.filter(Z),{...w({content:``}),uuid:p}],[e,p]),[h,g]=(0,Q.useState)(m.length-1),_=Math.max(0,Math.min(h-Math.floor($/2),m.length-$)),v=m.length>1,[b,S]=(0,Q.useState)(s),[T,E]=(0,Q.useState)(void 0);(0,Q.useEffect)(()=>{if(!s||!f)return;let e=!1;return c(l,s.uuid).then(t=>{e||E(t)}),()=>{e=!0}},[s,f,l]);let[D,O]=(0,Q.useState)(!1),[k,j]=(0,Q.useState)(null),[M,ee]=(0,Q.useState)(`both`),[N,te]=(0,Q.useState)(``);function P(e){let t=e?[{value:`both`,label:`Restore code and conversation`},{value:`conversation`,label:`Restore conversation`},{value:`code`,label:`Restore code`}]:[{value:`conversation`,label:`Restore conversation`}];return t.push({value:`summarize`,label:`Summarize from here`,type:`input`,placeholder:`add context (optional)`,initialValue:``,allowEmptySubmitToCancel:!0,showLabelWithValue:!0,labelValueSeparator:`: `,onChange:te}),t.push({value:`nevermind`,label:`Never mind`}),t}(0,Q.useEffect)(()=>{W(`tengu_message_selector_opened`,{})},[]);async function ne(e){t(),O(!0);try{await n(e),O(!1),o()}catch(e){H(e),O(!1),d(`Failed to restore the conversation:\n${e}`)}}async function F(t){let n=e.indexOf(t);if(W(`tengu_message_selector_selected`,{index_from_end:e.length-1-n,message_type:t.type,is_current_prompt:!1}),!e.includes(t)){o();return}if(!f){await ne(t);return}let r=await c(l,t.uuid);S(t),E(r)}async function re(e){if(W(`tengu_message_selector_restore_option_selected`,{option:e}),!b){d(`Message not found.`);return}if(e===`nevermind`){s?o():S(void 0);return}if(X(e)){t(),O(!0),j(e),d(void 0);try{let e=N.trim()||void 0;await a(b,e,`from`),O(!1),j(null),S(void 0),o()}catch(e){H(e),O(!1),j(null),S(void 0),d(`Failed to summarize:\n${e}`)}return}t(),O(!0),d(void 0);let i=null,c=null;if(e===`code`||e===`both`)try{await r(b)}catch(e){i=e,H(i)}if(e===`conversation`||e===`both`)try{await n(b)}catch(e){c=e,H(c)}O(!1),S(void 0),c&&i?d(`Failed to restore the conversation and code:\n${c}\n${i}`):c?d(`Failed to restore the conversation:\n${c}`):i?d(`Failed to restore the code:\n${i}`):o()}let I=Ee(),z=(0,Q.useCallback)(()=>{if(b&&!s){S(void 0);return}W(`tengu_message_selector_cancelled`,{}),o()},[o,b,s]),ce=(0,Q.useCallback)(()=>g(e=>Math.max(0,e-1)),[]),le=(0,Q.useCallback)(()=>g(e=>Math.min(m.length-1,e+1)),[m.length]),ue=(0,Q.useCallback)(()=>g(0),[]),de=(0,Q.useCallback)(()=>g(m.length-1),[m.length]),fe=(0,Q.useCallback)(()=>{let e=m[h];e&&F(e)},[m,h,F]);se(`confirm:no`,z,{context:`Confirmation`,isActive:!b}),oe({"messageSelector:up":ce,"messageSelector:down":le,"messageSelector:top":ue,"messageSelector:bottom":de,"messageSelector:select":fe},{context:`MessageSelector`,isActive:!D&&!u&&!b&&v});let[B,pe]=(0,Q.useState)({});(0,Q.useEffect)(()=>{async function t(){f&&Promise.all(m.map(async(t,n)=>{if(t.uuid!==p){let r=x(l,t.uuid),i=m.at(n+1),a=r?He(e,t.uuid,i?.uuid===p?void 0:i?.uuid):void 0;pe(a===void 0?e=>({...e,[n]:void 0}):e=>({...e,[n]:a}))}}))}t()},[m,e,p,l,f]);let V=f&&T?.filesChanged&&T.filesChanged.length>0,me=!u&&!b&&!s&&v;return(0,q.jsxs)(L,{flexDirection:`column`,width:`100%`,children:[(0,q.jsx)(ae,{color:`suggestion`}),(0,q.jsxs)(L,{flexDirection:`column`,marginX:1,gap:1,children:[(0,q.jsx)(R,{bold:!0,color:`suggestion`,children:`Rewind`}),u&&(0,q.jsx)(q.Fragment,{children:(0,q.jsxs)(R,{color:`error`,children:[`Error: `,u]})}),!v&&(0,q.jsx)(q.Fragment,{children:(0,q.jsx)(R,{children:`Nothing to rewind to yet.`})}),!u&&b&&v&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(R,{children:[`Confirm you want to restore `,!T&&`the conversation `,`to the point before you sent this message:`]}),(0,q.jsxs)(L,{flexDirection:`column`,paddingLeft:1,borderStyle:`single`,borderRight:!1,borderTop:!1,borderBottom:!1,borderLeft:!0,borderLeftDimColor:!0,children:[(0,q.jsx)(Ve,{userMessage:b,color:`text`,isCurrent:!1}),(0,q.jsxs)(R,{dimColor:!0,children:[`(`,ye(new Date(b.timestamp)),`)`]})]}),(0,q.jsx)(Re,{selectedRestoreOption:M,canRestoreCode:!!V,diffStatsForRestore:T}),D&&X(k)?(0,q.jsxs)(L,{flexDirection:`row`,gap:1,children:[(0,q.jsx)(y,{}),(0,q.jsx)(R,{children:`Summarizing…`})]}):(0,q.jsx)(A,{isDisabled:D,options:P(!!V),defaultFocusValue:V?`both`:`conversation`,onFocus:e=>ee(e),onChange:e=>re(e),onCancel:()=>s?o():S(void 0)}),V&&(0,q.jsx)(L,{marginBottom:1,children:(0,q.jsxs)(R,{dimColor:!0,children:[i.warning,` Rewinding does not affect files edited manually or via bash.`]})})]}),me&&(0,q.jsxs)(q.Fragment,{children:[f?(0,q.jsx)(R,{children:`Restore the code and/or conversation to the point before…`}):(0,q.jsx)(R,{children:`Restore and fork the conversation to the point before…`}),(0,q.jsx)(L,{width:`100%`,flexDirection:`column`,children:m.slice(_,_+$).map((e,t)=>{let n=_+t,r=n===h,a=e.uuid===p,o=n in B,s=B[n],c=s?.filesChanged&&s.filesChanged.length;return(0,q.jsxs)(L,{height:f?3:2,overflow:`hidden`,width:`100%`,flexDirection:`row`,children:[(0,q.jsx)(L,{width:2,minWidth:2,children:r?(0,q.jsxs)(R,{color:`permission`,bold:!0,children:[i.pointer,` `]}):(0,q.jsx)(R,{children:` `})}),(0,q.jsxs)(L,{flexDirection:`column`,children:[(0,q.jsx)(L,{flexShrink:1,height:1,overflow:`hidden`,children:(0,q.jsx)(Ve,{userMessage:e,color:r?`suggestion`:void 0,isCurrent:a,paddingRight:10})}),f&&o&&(0,q.jsx)(L,{height:1,flexDirection:`row`,children:s?(0,q.jsx)(q.Fragment,{children:(0,q.jsx)(R,{dimColor:!r,color:`inactive`,children:c?(0,q.jsxs)(q.Fragment,{children:[c===1&&s.filesChanged[0]?`${G.basename(s.filesChanged[0])} `:`${c} files changed `,(0,q.jsx)(Be,{diffStats:s})]}):(0,q.jsx)(q.Fragment,{children:`No code changes`})})}):(0,q.jsxs)(R,{dimColor:!0,color:`warning`,children:[i.warning,` No code restore`]})})]})]},e.uuid)})})]}),!b&&(0,q.jsx)(R,{dimColor:!0,italic:!0,children:I.pending?(0,q.jsxs)(q.Fragment,{children:[`Press `,I.keyName,` again to exit`]}):(0,q.jsxs)(q.Fragment,{children:[!u&&v&&`Enter to continue · `,`Esc to exit`]})})]})]})}function Le(e){switch(e){case`summarize`:return`Messages after this point will be summarized.`;case`both`:case`conversation`:return`The conversation will be forked.`;case`code`:case`nevermind`:return`The conversation will be unchanged.`}}function Re({selectedRestoreOption:e,canRestoreCode:t,diffStatsForRestore:n}){let r=t&&(e===`both`||e===`code`);return(0,q.jsxs)(L,{flexDirection:`column`,children:[(0,q.jsx)(R,{dimColor:!0,children:Le(e)}),!X(e)&&(r?(0,q.jsx)(ze,{diffStatsForRestore:n}):(0,q.jsx)(R,{dimColor:!0,children:`The code will be unchanged.`}))]})}function ze({diffStatsForRestore:e}){if(e===void 0)return;if(!e.filesChanged||!e.filesChanged[0])return(0,q.jsx)(R,{dimColor:!0,children:`The code has not changed (nothing will be restored).`});let t=e.filesChanged.length,n=``;return n=t===1?G.basename(e.filesChanged[0]||``):t===2?`${G.basename(e.filesChanged[0]||``)} and ${G.basename(e.filesChanged[1]||``)}`:`${G.basename(e.filesChanged[0]||``)} and ${e.filesChanged.length-1} other files`,(0,q.jsx)(q.Fragment,{children:(0,q.jsxs)(R,{dimColor:!0,children:[`The code will be restored `,(0,q.jsx)(Be,{diffStats:e}),` in `,n,`.`]})})}function Be({diffStats:e}){if(!(!e||!e.filesChanged))return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(R,{color:`diffAddedWord`,children:[`+`,e.insertions,` `]}),(0,q.jsxs)(R,{color:`diffRemovedWord`,children:[`-`,e.deletions]})]})}function Ve({userMessage:e,color:t,dimColor:n,isCurrent:r,paddingRight:i}){let{columns:a}=ce();if(r)return(0,q.jsx)(L,{width:`100%`,children:(0,q.jsx)(R,{italic:!0,color:t,dimColor:n,children:`(current)`})});let o=e.message.content,s=typeof o==`string`?null:o[o.length-1],c=V(typeof o==`string`?o.trim():s&&Fe(s)?s.text.trim():`(no prompt)`);if(m(c))return(0,q.jsx)(L,{flexDirection:`row`,width:`100%`,children:(0,q.jsx)(R,{italic:!0,color:t,dimColor:n,children:`((empty message))`})});if(c.includes(`<bash-input>`)){let e=l(c,`bash-input`);if(e)return(0,q.jsxs)(L,{flexDirection:`row`,width:`100%`,children:[(0,q.jsx)(R,{color:`bashBorder`,children:`!`}),(0,q.jsxs)(R,{color:t,dimColor:n,children:[` `,e]})]})}if(c.includes(`<command-message>`)){let e=l(c,_e),r=l(c,`command-args`),i=l(c,`skill-format`)===`true`;if(e)return i?(0,q.jsx)(L,{flexDirection:`row`,width:`100%`,children:(0,q.jsxs)(R,{color:t,dimColor:n,children:[`Skill(`,e,`)`]})}):(0,q.jsx)(L,{flexDirection:`row`,width:`100%`,children:(0,q.jsxs)(R,{color:t,dimColor:n,children:[`/`,e,` `,r]})})}return(0,q.jsx)(L,{flexDirection:`row`,width:`100%`,children:(0,q.jsx)(R,{color:t,dimColor:n,children:i?ve(c,a-i,!0):c.slice(0,500).split(`
|
|
2
|
-
`).slice(0,4).join(`
|
|
3
|
-
`)})})}function He(e,t,n){let r=e.findIndex(e=>e.uuid===t);if(r===-1)return;let i=n?e.findIndex(e=>e.uuid===n):e.length;i===-1&&(i=e.length);let a=[],o=0,s=0;for(let t=r+1;t<i;t++){let n=e[t];if(!n||!g(n))continue;let r=n.toolUseResult;if(!(!r||!r.filePath||!r.structuredPatch)){a.includes(r.filePath)||a.push(r.filePath);try{if(`type`in r&&r.type===`create`)o+=r.content.split(/\r?\n/).length;else for(let e of r.structuredPatch){let t=B(e.lines,e=>e.startsWith(`+`)),n=B(e.lines,e=>e.startsWith(`-`));o+=t,s+=n}}catch{}}}return{filesChanged:a,insertions:o,deletions:s}}function Z(e){if(e.type!==`user`||Array.isArray(e.message.content)&&e.message.content[0]?.type===`tool_result`||E(e)||e.isMeta||e.isCompactSummary||e.isVisibleInTranscriptOnly)return!1;let t=e.message.content,n=typeof t==`string`?null:t[t.length-1],r=typeof t==`string`?t.trim():n&&Fe(n)?n.text.trim():``;return!(r.indexOf(`<local-command-stdout>`)!==-1||r.indexOf(`<local-command-stderr>`)!==-1||r.indexOf(`<bash-stdout>`)!==-1||r.indexOf(`<bash-stderr>`)!==-1||r.indexOf(`<task-notification>`)!==-1||r.indexOf(`<tick>`)!==-1)}function Ue(e,t){for(let n=t+1;n<e.length;n++){let t=e[n];if(t&&!E(t)&&!g(t)&&t.type!==`progress`&&t.type!==`system`&&t.type!==`attachment`&&!(t.type===`user`&&t.isMeta)){if(t.type===`assistant`){let e=t.message.content;if(Array.isArray(e)&&e.some(e=>e.type===`text`&&e.text.trim()||e.type===`tool_use`))return!1;continue}if(t.type===`user`)return!1}}return!0}var Q,$,We=e((()=>{r(),Q=t(z(),1),U(),I(),p(),De(),d(),s(),F(),h(),O(),$=7}));export{Z as a,Ue as i,Pe as n,je as o,We as r,Ie as t};
|