@shareai-lab/kode 1.1.23 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -404
- package/cli-acp.js +82 -0
- package/cli.js +89 -79
- package/dist/REPL-CW7AYLVL.js +42 -0
- package/dist/acp-VEPJ74LT.js +1357 -0
- package/dist/acp-VEPJ74LT.js.map +7 -0
- package/dist/agentsValidate-7LH4HTNR.js +373 -0
- package/dist/agentsValidate-7LH4HTNR.js.map +7 -0
- package/dist/ask-3NHFFUQG.js +125 -0
- package/dist/ask-3NHFFUQG.js.map +7 -0
- package/dist/autoUpdater-ITPIHCOI.js +17 -0
- package/dist/chunk-3IN27HA5.js +128 -0
- package/dist/chunk-3IN27HA5.js.map +7 -0
- package/dist/chunk-3RUXVV4S.js +23 -0
- package/dist/chunk-3RUXVV4S.js.map +7 -0
- package/dist/chunk-4FX3IVPT.js +164 -0
- package/dist/chunk-4FX3IVPT.js.map +7 -0
- package/dist/chunk-4RTX4AG4.js +249 -0
- package/dist/chunk-4RTX4AG4.js.map +7 -0
- package/dist/chunk-5PDP7R6N.js +515 -0
- package/dist/chunk-5PDP7R6N.js.map +7 -0
- package/dist/chunk-73WGVYLQ.js +735 -0
- package/dist/chunk-73WGVYLQ.js.map +7 -0
- package/dist/{services/systemReminder.js → chunk-7M2YN6TU.js} +221 -59
- package/dist/chunk-7M2YN6TU.js.map +7 -0
- package/dist/{utils/theme.js → chunk-7U7L4NMD.js} +28 -6
- package/dist/chunk-7U7L4NMD.js.map +7 -0
- package/dist/chunk-ABLVTESJ.js +19 -0
- package/dist/chunk-ABLVTESJ.js.map +7 -0
- package/dist/chunk-AFFSCMYS.js +191 -0
- package/dist/chunk-AFFSCMYS.js.map +7 -0
- package/dist/chunk-ARZSBOAO.js +1256 -0
- package/dist/chunk-ARZSBOAO.js.map +7 -0
- package/dist/chunk-CIG63V4E.js +72 -0
- package/dist/chunk-CIG63V4E.js.map +7 -0
- package/dist/chunk-CM3EGTG6.js +1609 -0
- package/dist/chunk-CM3EGTG6.js.map +7 -0
- package/dist/{services/openai.js → chunk-DZE5YA7L.js} +168 -234
- package/dist/chunk-DZE5YA7L.js.map +7 -0
- package/dist/chunk-E6YNABER.js +24 -0
- package/dist/chunk-E6YNABER.js.map +7 -0
- package/dist/{cost-tracker.js → chunk-EZXMVTDU.js} +51 -32
- package/dist/chunk-EZXMVTDU.js.map +7 -0
- package/dist/chunk-F2SJXUDI.js +148 -0
- package/dist/chunk-F2SJXUDI.js.map +7 -0
- package/dist/chunk-FC5ZCKBI.js +30167 -0
- package/dist/chunk-FC5ZCKBI.js.map +7 -0
- package/dist/chunk-HCBELH4J.js +145 -0
- package/dist/chunk-HCBELH4J.js.map +7 -0
- package/dist/chunk-HN4E4UUQ.js +96 -0
- package/dist/chunk-HN4E4UUQ.js.map +7 -0
- package/dist/{utils/model.js → chunk-IZVMU4S2.js} +194 -227
- package/dist/chunk-IZVMU4S2.js.map +7 -0
- package/dist/chunk-JC6NCUG5.js +11 -0
- package/dist/chunk-K2CWOTI2.js +196 -0
- package/dist/chunk-K2CWOTI2.js.map +7 -0
- package/dist/chunk-KAA5BGMQ.js +12 -0
- package/dist/chunk-KAA5BGMQ.js.map +7 -0
- package/dist/{utils/config.js → chunk-LC4TVOCZ.js} +351 -171
- package/dist/chunk-LC4TVOCZ.js.map +7 -0
- package/dist/chunk-MIW7N2MY.js +2613 -0
- package/dist/chunk-MIW7N2MY.js.map +7 -0
- package/dist/chunk-MWRSY4X6.js +240 -0
- package/dist/chunk-MWRSY4X6.js.map +7 -0
- package/dist/chunk-ND3XWFO6.js +34 -0
- package/dist/chunk-ND3XWFO6.js.map +7 -0
- package/dist/chunk-NPFOMITO.js +21 -0
- package/dist/chunk-NPFOMITO.js.map +7 -0
- package/dist/chunk-QVLYOPO5.js +1097 -0
- package/dist/chunk-QVLYOPO5.js.map +7 -0
- package/dist/chunk-RZWOUA25.js +490 -0
- package/dist/chunk-RZWOUA25.js.map +7 -0
- package/dist/chunk-S3J2TLV6.js +16 -0
- package/dist/chunk-S3J2TLV6.js.map +7 -0
- package/dist/chunk-S6HRABTA.js +95 -0
- package/dist/chunk-S6HRABTA.js.map +7 -0
- package/dist/{utils/debugLogger.js → chunk-STSX7GIX.js} +107 -204
- package/dist/chunk-STSX7GIX.js.map +7 -0
- package/dist/chunk-UHYRLID6.js +472 -0
- package/dist/chunk-UHYRLID6.js.map +7 -0
- package/dist/chunk-UKHTVRJM.js +47 -0
- package/dist/chunk-UKHTVRJM.js.map +7 -0
- package/dist/chunk-UYXEDKOZ.js +24 -0
- package/dist/chunk-UYXEDKOZ.js.map +7 -0
- package/dist/chunk-W7GRKO7Q.js +766 -0
- package/dist/chunk-W7GRKO7Q.js.map +7 -0
- package/dist/chunk-WVHORZQ5.js +17 -0
- package/dist/chunk-WVHORZQ5.js.map +7 -0
- package/dist/chunk-WWUWDNWW.js +49 -0
- package/dist/chunk-WWUWDNWW.js.map +7 -0
- package/dist/chunk-YC6LJCDE.js +511 -0
- package/dist/chunk-YC6LJCDE.js.map +7 -0
- package/dist/chunk-YXYYDIMI.js +2931 -0
- package/dist/chunk-YXYYDIMI.js.map +7 -0
- package/dist/chunk-ZVDRDPII.js +138 -0
- package/dist/chunk-ZVDRDPII.js.map +7 -0
- package/dist/cli-DOPVY2CW.js +3917 -0
- package/dist/cli-DOPVY2CW.js.map +7 -0
- package/dist/commands-2BF2CJ3A.js +46 -0
- package/dist/config-RUSD6G5Y.js +81 -0
- package/dist/context-6FXPETYH.js +30 -0
- package/dist/costTracker-6SL26FDB.js +19 -0
- package/dist/customCommands-TOIJFZAL.js +25 -0
- package/dist/customCommands-TOIJFZAL.js.map +7 -0
- package/dist/env-XGKBLU3D.js +22 -0
- package/dist/env-XGKBLU3D.js.map +7 -0
- package/dist/index.js +34 -5
- package/dist/index.js.map +4 -4
- package/dist/kodeAgentSessionId-X6XWQW7B.js +13 -0
- package/dist/kodeAgentSessionId-X6XWQW7B.js.map +7 -0
- package/dist/kodeAgentSessionLoad-MITZADPB.js +18 -0
- package/dist/kodeAgentSessionLoad-MITZADPB.js.map +7 -0
- package/dist/kodeAgentSessionResume-GVRWB4WO.js +16 -0
- package/dist/kodeAgentSessionResume-GVRWB4WO.js.map +7 -0
- package/dist/kodeAgentStreamJson-NXFN7TXH.js +13 -0
- package/dist/kodeAgentStreamJson-NXFN7TXH.js.map +7 -0
- package/dist/kodeAgentStreamJsonSession-UGEZJJEB.js +131 -0
- package/dist/kodeAgentStreamJsonSession-UGEZJJEB.js.map +7 -0
- package/dist/kodeAgentStructuredStdio-HGWJT7CU.js +10 -0
- package/dist/kodeAgentStructuredStdio-HGWJT7CU.js.map +7 -0
- package/dist/kodeHooks-QWM36A3D.js +36 -0
- package/dist/kodeHooks-QWM36A3D.js.map +7 -0
- package/dist/llm-ZUQC4WYM.js +3118 -0
- package/dist/llm-ZUQC4WYM.js.map +7 -0
- package/dist/llmLazy-54QQHA54.js +15 -0
- package/dist/llmLazy-54QQHA54.js.map +7 -0
- package/dist/loader-FYHJQES5.js +28 -0
- package/dist/loader-FYHJQES5.js.map +7 -0
- package/dist/mcp-J332IKT3.js +49 -0
- package/dist/mcp-J332IKT3.js.map +7 -0
- package/dist/{services/mentionProcessor.js → mentionProcessor-EE3XFHCJ.js} +61 -50
- package/dist/mentionProcessor-EE3XFHCJ.js.map +7 -0
- package/dist/messages-EOYQKPGM.js +63 -0
- package/dist/messages-EOYQKPGM.js.map +7 -0
- package/dist/model-FV3JDJKH.js +30 -0
- package/dist/model-FV3JDJKH.js.map +7 -0
- package/dist/openai-RRCWW33N.js +29 -0
- package/dist/openai-RRCWW33N.js.map +7 -0
- package/dist/outputStyles-62Q3VH2J.js +28 -0
- package/dist/outputStyles-62Q3VH2J.js.map +7 -0
- package/dist/package.json +1 -1
- package/dist/pluginRuntime-6ETCZ2LL.js +218 -0
- package/dist/pluginRuntime-6ETCZ2LL.js.map +7 -0
- package/dist/pluginValidation-I4YKUWGS.js +17 -0
- package/dist/pluginValidation-I4YKUWGS.js.map +7 -0
- package/dist/prompts-ZLEKDD77.js +48 -0
- package/dist/prompts-ZLEKDD77.js.map +7 -0
- package/dist/query-VFRJPBGD.js +50 -0
- package/dist/query-VFRJPBGD.js.map +7 -0
- package/dist/responsesStreaming-AW344PQO.js +10 -0
- package/dist/responsesStreaming-AW344PQO.js.map +7 -0
- package/dist/ripgrep-3NTIKQYW.js +17 -0
- package/dist/ripgrep-3NTIKQYW.js.map +7 -0
- package/dist/skillMarketplace-3RXQBVOL.js +37 -0
- package/dist/skillMarketplace-3RXQBVOL.js.map +7 -0
- package/dist/state-P5G6CO5V.js +16 -0
- package/dist/state-P5G6CO5V.js.map +7 -0
- package/dist/theme-3LWP3BG7.js +14 -0
- package/dist/theme-3LWP3BG7.js.map +7 -0
- package/dist/toolPermissionContext-65L65VEZ.js +17 -0
- package/dist/toolPermissionContext-65L65VEZ.js.map +7 -0
- package/dist/toolPermissionSettings-3ROBVTUK.js +18 -0
- package/dist/toolPermissionSettings-3ROBVTUK.js.map +7 -0
- package/dist/tools-RO7HSSE5.js +47 -0
- package/dist/tools-RO7HSSE5.js.map +7 -0
- package/dist/userInput-JSBJRFSK.js +311 -0
- package/dist/userInput-JSBJRFSK.js.map +7 -0
- package/dist/uuid-QN2CNKKN.js +9 -0
- package/dist/uuid-QN2CNKKN.js.map +7 -0
- package/package.json +43 -15
- package/scripts/binary-utils.cjs +62 -0
- package/scripts/cli-acp-wrapper.cjs +82 -0
- package/scripts/cli-wrapper.cjs +105 -0
- package/scripts/postinstall.js +135 -9
- package/LICENSE +0 -201
- package/README.zh-CN.md +0 -326
- package/dist/ProjectOnboarding.js +0 -99
- package/dist/ProjectOnboarding.js.map +0 -7
- package/dist/Tool.js +0 -1
- package/dist/commands/agents.js +0 -2087
- package/dist/commands/agents.js.map +0 -7
- package/dist/commands/approvedTools.js +0 -36
- package/dist/commands/approvedTools.js.map +0 -7
- package/dist/commands/bug.js +0 -21
- package/dist/commands/bug.js.map +0 -7
- package/dist/commands/clear.js +0 -37
- package/dist/commands/clear.js.map +0 -7
- package/dist/commands/compact.js +0 -104
- package/dist/commands/compact.js.map +0 -7
- package/dist/commands/config.js +0 -20
- package/dist/commands/config.js.map +0 -7
- package/dist/commands/cost.js +0 -19
- package/dist/commands/cost.js.map +0 -7
- package/dist/commands/ctx_viz.js +0 -152
- package/dist/commands/ctx_viz.js.map +0 -7
- package/dist/commands/doctor.js +0 -25
- package/dist/commands/doctor.js.map +0 -7
- package/dist/commands/help.js +0 -20
- package/dist/commands/help.js.map +0 -7
- package/dist/commands/init.js +0 -38
- package/dist/commands/init.js.map +0 -7
- package/dist/commands/listen.js +0 -37
- package/dist/commands/listen.js.map +0 -7
- package/dist/commands/login.js +0 -37
- package/dist/commands/login.js.map +0 -7
- package/dist/commands/logout.js +0 -33
- package/dist/commands/logout.js.map +0 -7
- package/dist/commands/mcp.js +0 -34
- package/dist/commands/mcp.js.map +0 -7
- package/dist/commands/model.js +0 -41
- package/dist/commands/model.js.map +0 -7
- package/dist/commands/modelstatus.js +0 -21
- package/dist/commands/modelstatus.js.map +0 -7
- package/dist/commands/onboarding.js +0 -36
- package/dist/commands/onboarding.js.map +0 -7
- package/dist/commands/pr_comments.js +0 -61
- package/dist/commands/pr_comments.js.map +0 -7
- package/dist/commands/refreshCommands.js +0 -37
- package/dist/commands/refreshCommands.js.map +0 -7
- package/dist/commands/release-notes.js +0 -30
- package/dist/commands/release-notes.js.map +0 -7
- package/dist/commands/resume.js +0 -35
- package/dist/commands/resume.js.map +0 -7
- package/dist/commands/review.js +0 -51
- package/dist/commands/review.js.map +0 -7
- package/dist/commands/terminalSetup.js +0 -163
- package/dist/commands/terminalSetup.js.map +0 -7
- package/dist/commands.js +0 -84
- package/dist/commands.js.map +0 -7
- package/dist/components/ApproveApiKey.js +0 -74
- package/dist/components/ApproveApiKey.js.map +0 -7
- package/dist/components/AsciiLogo.js +0 -12
- package/dist/components/AsciiLogo.js.map +0 -7
- package/dist/components/AutoUpdater.js +0 -74
- package/dist/components/AutoUpdater.js.map +0 -7
- package/dist/components/Bug.js +0 -147
- package/dist/components/Bug.js.map +0 -7
- package/dist/components/Config.js +0 -166
- package/dist/components/Config.js.map +0 -7
- package/dist/components/ConsoleOAuthFlow.js +0 -188
- package/dist/components/ConsoleOAuthFlow.js.map +0 -7
- package/dist/components/Cost.js +0 -13
- package/dist/components/Cost.js.map +0 -7
- package/dist/components/CostThresholdDialog.js +0 -38
- package/dist/components/CostThresholdDialog.js.map +0 -7
- package/dist/components/CustomSelect/option-map.js +0 -32
- package/dist/components/CustomSelect/option-map.js.map +0 -7
- package/dist/components/CustomSelect/select-option.js +0 -34
- package/dist/components/CustomSelect/select-option.js.map +0 -7
- package/dist/components/CustomSelect/select.js +0 -64
- package/dist/components/CustomSelect/select.js.map +0 -7
- package/dist/components/CustomSelect/theme.js +0 -1
- package/dist/components/CustomSelect/use-select-state.js +0 -220
- package/dist/components/CustomSelect/use-select-state.js.map +0 -7
- package/dist/components/CustomSelect/use-select.js +0 -21
- package/dist/components/CustomSelect/use-select.js.map +0 -7
- package/dist/components/FallbackToolUseRejectedMessage.js +0 -11
- package/dist/components/FallbackToolUseRejectedMessage.js.map +0 -7
- package/dist/components/FileEditToolUpdatedMessage.js +0 -31
- package/dist/components/FileEditToolUpdatedMessage.js.map +0 -7
- package/dist/components/Help.js +0 -41
- package/dist/components/Help.js.map +0 -7
- package/dist/components/HighlightedCode.js +0 -30
- package/dist/components/HighlightedCode.js.map +0 -7
- package/dist/components/InvalidConfigDialog.js +0 -83
- package/dist/components/InvalidConfigDialog.js.map +0 -7
- package/dist/components/Link.js +0 -18
- package/dist/components/Link.js.map +0 -7
- package/dist/components/LogSelector.js +0 -50
- package/dist/components/LogSelector.js.map +0 -7
- package/dist/components/Logo.js +0 -94
- package/dist/components/Logo.js.map +0 -7
- package/dist/components/MCPServerApprovalDialog.js +0 -79
- package/dist/components/MCPServerApprovalDialog.js.map +0 -7
- package/dist/components/MCPServerDialogCopy.js +0 -11
- package/dist/components/MCPServerDialogCopy.js.map +0 -7
- package/dist/components/MCPServerMultiselectDialog.js +0 -80
- package/dist/components/MCPServerMultiselectDialog.js.map +0 -7
- package/dist/components/Message.js +0 -146
- package/dist/components/Message.js.map +0 -7
- package/dist/components/MessageResponse.js +0 -9
- package/dist/components/MessageResponse.js.map +0 -7
- package/dist/components/MessageSelector.js +0 -133
- package/dist/components/MessageSelector.js.map +0 -7
- package/dist/components/ModeIndicator.js +0 -38
- package/dist/components/ModeIndicator.js.map +0 -7
- package/dist/components/ModelConfig.js +0 -208
- package/dist/components/ModelConfig.js.map +0 -7
- package/dist/components/ModelListManager.js +0 -140
- package/dist/components/ModelListManager.js.map +0 -7
- package/dist/components/ModelSelector.js +0 -1985
- package/dist/components/ModelSelector.js.map +0 -7
- package/dist/components/ModelStatusDisplay.js +0 -87
- package/dist/components/ModelStatusDisplay.js.map +0 -7
- package/dist/components/Onboarding.js +0 -153
- package/dist/components/Onboarding.js.map +0 -7
- package/dist/components/PressEnterToContinue.js +0 -10
- package/dist/components/PressEnterToContinue.js.map +0 -7
- package/dist/components/PromptInput.js +0 -501
- package/dist/components/PromptInput.js.map +0 -7
- package/dist/components/SentryErrorBoundary.js +0 -27
- package/dist/components/SentryErrorBoundary.js.map +0 -7
- package/dist/components/Spinner.js +0 -101
- package/dist/components/Spinner.js.map +0 -7
- package/dist/components/StickerRequestForm.js +0 -7
- package/dist/components/StickerRequestForm.js.map +0 -7
- package/dist/components/StructuredDiff.js +0 -148
- package/dist/components/StructuredDiff.js.map +0 -7
- package/dist/components/TextInput.js +0 -100
- package/dist/components/TextInput.js.map +0 -7
- package/dist/components/TodoItem.js +0 -35
- package/dist/components/TodoItem.js.map +0 -7
- package/dist/components/TokenWarning.js +0 -19
- package/dist/components/TokenWarning.js.map +0 -7
- package/dist/components/ToolUseLoader.js +0 -24
- package/dist/components/ToolUseLoader.js.map +0 -7
- package/dist/components/TrustDialog.js +0 -76
- package/dist/components/TrustDialog.js.map +0 -7
- package/dist/components/binary-feedback/BinaryFeedback.js +0 -50
- package/dist/components/binary-feedback/BinaryFeedback.js.map +0 -7
- package/dist/components/binary-feedback/BinaryFeedbackOption.js +0 -94
- package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +0 -7
- package/dist/components/binary-feedback/BinaryFeedbackView.js +0 -139
- package/dist/components/binary-feedback/BinaryFeedbackView.js.map +0 -7
- package/dist/components/binary-feedback/utils.js +0 -161
- package/dist/components/binary-feedback/utils.js.map +0 -7
- package/dist/components/messages/AssistantBashOutputMessage.js +0 -23
- package/dist/components/messages/AssistantBashOutputMessage.js.map +0 -7
- package/dist/components/messages/AssistantLocalCommandOutputMessage.js +0 -36
- package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +0 -7
- package/dist/components/messages/AssistantRedactedThinkingMessage.js +0 -12
- package/dist/components/messages/AssistantRedactedThinkingMessage.js.map +0 -7
- package/dist/components/messages/AssistantTextMessage.js +0 -78
- package/dist/components/messages/AssistantTextMessage.js.map +0 -7
- package/dist/components/messages/AssistantThinkingMessage.js +0 -27
- package/dist/components/messages/AssistantThinkingMessage.js.map +0 -7
- package/dist/components/messages/AssistantToolUseMessage.js +0 -91
- package/dist/components/messages/AssistantToolUseMessage.js.map +0 -7
- package/dist/components/messages/TaskProgressMessage.js +0 -11
- package/dist/components/messages/TaskProgressMessage.js.map +0 -7
- package/dist/components/messages/TaskToolMessage.js +0 -39
- package/dist/components/messages/TaskToolMessage.js.map +0 -7
- package/dist/components/messages/UserBashInputMessage.js +0 -18
- package/dist/components/messages/UserBashInputMessage.js.map +0 -7
- package/dist/components/messages/UserCommandMessage.js +0 -20
- package/dist/components/messages/UserCommandMessage.js.map +0 -7
- package/dist/components/messages/UserKodingInputMessage.js +0 -18
- package/dist/components/messages/UserKodingInputMessage.js.map +0 -7
- package/dist/components/messages/UserPromptMessage.js +0 -20
- package/dist/components/messages/UserPromptMessage.js.map +0 -7
- package/dist/components/messages/UserTextMessage.js +0 -25
- package/dist/components/messages/UserTextMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +0 -10
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js +0 -15
- package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +0 -25
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +0 -47
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +0 -23
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/utils.js +0 -42
- package/dist/components/messages/UserToolResultMessage/utils.js.map +0 -7
- package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js +0 -112
- package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js.map +0 -7
- package/dist/components/permissions/FallbackPermissionRequest.js +0 -131
- package/dist/components/permissions/FallbackPermissionRequest.js.map +0 -7
- package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +0 -159
- package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js.map +0 -7
- package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +0 -58
- package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +0 -7
- package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +0 -153
- package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js.map +0 -7
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +0 -70
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +0 -7
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +0 -212
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +0 -7
- package/dist/components/permissions/PermissionRequest.js +0 -70
- package/dist/components/permissions/PermissionRequest.js.map +0 -7
- package/dist/components/permissions/PermissionRequestTitle.js +0 -52
- package/dist/components/permissions/PermissionRequestTitle.js.map +0 -7
- package/dist/components/permissions/hooks.js +0 -28
- package/dist/components/permissions/hooks.js.map +0 -7
- package/dist/components/permissions/toolUseOptions.js +0 -46
- package/dist/components/permissions/toolUseOptions.js.map +0 -7
- package/dist/components/permissions/utils.js +0 -21
- package/dist/components/permissions/utils.js.map +0 -7
- package/dist/constants/betas.js +0 -11
- package/dist/constants/betas.js.map +0 -7
- package/dist/constants/claude-asterisk-ascii-art.js +0 -242
- package/dist/constants/claude-asterisk-ascii-art.js.map +0 -7
- package/dist/constants/figures.js +0 -6
- package/dist/constants/figures.js.map +0 -7
- package/dist/constants/keys.js +0 -7
- package/dist/constants/keys.js.map +0 -7
- package/dist/constants/macros.js +0 -13
- package/dist/constants/macros.js.map +0 -7
- package/dist/constants/modelCapabilities.js +0 -154
- package/dist/constants/modelCapabilities.js.map +0 -7
- package/dist/constants/models.js +0 -1029
- package/dist/constants/models.js.map +0 -7
- package/dist/constants/oauth.js +0 -18
- package/dist/constants/oauth.js.map +0 -7
- package/dist/constants/product.js +0 -26
- package/dist/constants/product.js.map +0 -7
- package/dist/constants/prompts.js +0 -168
- package/dist/constants/prompts.js.map +0 -7
- package/dist/constants/releaseNotes.js +0 -9
- package/dist/constants/releaseNotes.js.map +0 -7
- package/dist/context/PermissionContext.js +0 -111
- package/dist/context/PermissionContext.js.map +0 -7
- package/dist/context.js +0 -259
- package/dist/context.js.map +0 -7
- package/dist/cost-tracker.js.map +0 -7
- package/dist/entrypoints/cli.js +0 -1122
- package/dist/entrypoints/cli.js.map +0 -7
- package/dist/entrypoints/mcp.js +0 -150
- package/dist/entrypoints/mcp.js.map +0 -7
- package/dist/history.js +0 -25
- package/dist/history.js.map +0 -7
- package/dist/hooks/useApiKeyVerification.js +0 -12
- package/dist/hooks/useApiKeyVerification.js.map +0 -7
- package/dist/hooks/useArrowKeyHistory.js +0 -50
- package/dist/hooks/useArrowKeyHistory.js.map +0 -7
- package/dist/hooks/useCanUseTool.js +0 -112
- package/dist/hooks/useCanUseTool.js.map +0 -7
- package/dist/hooks/useCancelRequest.js +0 -30
- package/dist/hooks/useCancelRequest.js.map +0 -7
- package/dist/hooks/useDoublePress.js +0 -31
- package/dist/hooks/useDoublePress.js.map +0 -7
- package/dist/hooks/useExitOnCtrlCD.js +0 -26
- package/dist/hooks/useExitOnCtrlCD.js.map +0 -7
- package/dist/hooks/useInterval.js +0 -18
- package/dist/hooks/useInterval.js.map +0 -7
- package/dist/hooks/useLogMessages.js +0 -14
- package/dist/hooks/useLogMessages.js.map +0 -7
- package/dist/hooks/useLogStartupTime.js +0 -15
- package/dist/hooks/useLogStartupTime.js.map +0 -7
- package/dist/hooks/useNotifyAfterTimeout.js +0 -42
- package/dist/hooks/useNotifyAfterTimeout.js.map +0 -7
- package/dist/hooks/usePermissionRequestLogging.js +0 -28
- package/dist/hooks/usePermissionRequestLogging.js.map +0 -7
- package/dist/hooks/useTerminalSize.js +0 -38
- package/dist/hooks/useTerminalSize.js.map +0 -7
- package/dist/hooks/useTextInput.js +0 -250
- package/dist/hooks/useTextInput.js.map +0 -7
- package/dist/hooks/useUnifiedCompletion.js +0 -929
- package/dist/hooks/useUnifiedCompletion.js.map +0 -7
- package/dist/messages.js +0 -33
- package/dist/messages.js.map +0 -7
- package/dist/permissions.js +0 -194
- package/dist/permissions.js.map +0 -7
- package/dist/query.js +0 -492
- package/dist/query.js.map +0 -7
- package/dist/screens/ConfigureNpmPrefix.js +0 -128
- package/dist/screens/ConfigureNpmPrefix.js.map +0 -7
- package/dist/screens/Doctor.js +0 -143
- package/dist/screens/Doctor.js.map +0 -7
- package/dist/screens/LogList.js +0 -55
- package/dist/screens/LogList.js.map +0 -7
- package/dist/screens/REPL.js +0 -596
- package/dist/screens/REPL.js.map +0 -7
- package/dist/screens/ResumeConversation.js +0 -56
- package/dist/screens/ResumeConversation.js.map +0 -7
- package/dist/services/adapters/base.js +0 -29
- package/dist/services/adapters/base.js.map +0 -7
- package/dist/services/adapters/chatCompletions.js +0 -69
- package/dist/services/adapters/chatCompletions.js.map +0 -7
- package/dist/services/adapters/responsesAPI.js +0 -126
- package/dist/services/adapters/responsesAPI.js.map +0 -7
- package/dist/services/browserMocks.js +0 -48
- package/dist/services/browserMocks.js.map +0 -7
- package/dist/services/claude.js +0 -1605
- package/dist/services/claude.js.map +0 -7
- package/dist/services/customCommands.js +0 -359
- package/dist/services/customCommands.js.map +0 -7
- package/dist/services/fileFreshness.js +0 -280
- package/dist/services/fileFreshness.js.map +0 -7
- package/dist/services/gpt5ConnectionTest.js +0 -248
- package/dist/services/gpt5ConnectionTest.js.map +0 -7
- package/dist/services/mcpClient.js +0 -435
- package/dist/services/mcpClient.js.map +0 -7
- package/dist/services/mcpServerApproval.js +0 -55
- package/dist/services/mcpServerApproval.js.map +0 -7
- package/dist/services/mentionProcessor.js.map +0 -7
- package/dist/services/modelAdapterFactory.js +0 -47
- package/dist/services/modelAdapterFactory.js.map +0 -7
- package/dist/services/notifier.js +0 -35
- package/dist/services/notifier.js.map +0 -7
- package/dist/services/oauth.js +0 -259
- package/dist/services/oauth.js.map +0 -7
- package/dist/services/openai.js.map +0 -7
- package/dist/services/responseStateManager.js +0 -68
- package/dist/services/responseStateManager.js.map +0 -7
- package/dist/services/sentry.js +0 -9
- package/dist/services/sentry.js.map +0 -7
- package/dist/services/statsig.js +0 -112
- package/dist/services/statsig.js.map +0 -7
- package/dist/services/statsigStorage.js +0 -75
- package/dist/services/statsigStorage.js.map +0 -7
- package/dist/services/systemReminder.js.map +0 -7
- package/dist/services/vcr.js +0 -133
- package/dist/services/vcr.js.map +0 -7
- package/dist/tools/ArchitectTool/ArchitectTool.js +0 -119
- package/dist/tools/ArchitectTool/ArchitectTool.js.map +0 -7
- package/dist/tools/ArchitectTool/prompt.js +0 -18
- package/dist/tools/ArchitectTool/prompt.js.map +0 -7
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +0 -423
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +0 -7
- package/dist/tools/BashTool/BashTool.js +0 -188
- package/dist/tools/BashTool/BashTool.js.map +0 -7
- package/dist/tools/BashTool/BashToolResultMessage.js +0 -21
- package/dist/tools/BashTool/BashToolResultMessage.js.map +0 -7
- package/dist/tools/BashTool/OutputLine.js +0 -30
- package/dist/tools/BashTool/OutputLine.js.map +0 -7
- package/dist/tools/BashTool/prompt.js +0 -179
- package/dist/tools/BashTool/prompt.js.map +0 -7
- package/dist/tools/BashTool/utils.js +0 -51
- package/dist/tools/BashTool/utils.js.map +0 -7
- package/dist/tools/FileEditTool/FileEditTool.js +0 -228
- package/dist/tools/FileEditTool/FileEditTool.js.map +0 -7
- package/dist/tools/FileEditTool/prompt.js +0 -54
- package/dist/tools/FileEditTool/prompt.js.map +0 -7
- package/dist/tools/FileEditTool/utils.js +0 -42
- package/dist/tools/FileEditTool/utils.js.map +0 -7
- package/dist/tools/FileReadTool/FileReadTool.js +0 -272
- package/dist/tools/FileReadTool/FileReadTool.js.map +0 -7
- package/dist/tools/FileReadTool/prompt.js +0 -10
- package/dist/tools/FileReadTool/prompt.js.map +0 -7
- package/dist/tools/FileWriteTool/FileWriteTool.js +0 -204
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +0 -7
- package/dist/tools/FileWriteTool/prompt.js +0 -14
- package/dist/tools/FileWriteTool/prompt.js.map +0 -7
- package/dist/tools/GlobTool/GlobTool.js +0 -88
- package/dist/tools/GlobTool/GlobTool.js.map +0 -7
- package/dist/tools/GlobTool/prompt.js +0 -12
- package/dist/tools/GlobTool/prompt.js.map +0 -7
- package/dist/tools/GrepTool/GrepTool.js +0 -107
- package/dist/tools/GrepTool/GrepTool.js.map +0 -7
- package/dist/tools/GrepTool/prompt.js +0 -15
- package/dist/tools/GrepTool/prompt.js.map +0 -7
- package/dist/tools/MCPTool/MCPTool.js +0 -90
- package/dist/tools/MCPTool/MCPTool.js.map +0 -7
- package/dist/tools/MCPTool/prompt.js +0 -7
- package/dist/tools/MCPTool/prompt.js.map +0 -7
- package/dist/tools/MemoryReadTool/MemoryReadTool.js +0 -103
- package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +0 -7
- package/dist/tools/MemoryReadTool/prompt.js +0 -7
- package/dist/tools/MemoryReadTool/prompt.js.map +0 -7
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +0 -77
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +0 -7
- package/dist/tools/MemoryWriteTool/prompt.js +0 -7
- package/dist/tools/MemoryWriteTool/prompt.js.map +0 -7
- package/dist/tools/MultiEditTool/MultiEditTool.js +0 -293
- package/dist/tools/MultiEditTool/MultiEditTool.js.map +0 -7
- package/dist/tools/MultiEditTool/prompt.js +0 -48
- package/dist/tools/MultiEditTool/prompt.js.map +0 -7
- package/dist/tools/NotebookEditTool/NotebookEditTool.js +0 -238
- package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +0 -7
- package/dist/tools/NotebookEditTool/prompt.js +0 -7
- package/dist/tools/NotebookEditTool/prompt.js.map +0 -7
- package/dist/tools/NotebookReadTool/NotebookReadTool.js +0 -212
- package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +0 -7
- package/dist/tools/NotebookReadTool/prompt.js +0 -7
- package/dist/tools/NotebookReadTool/prompt.js.map +0 -7
- package/dist/tools/StickerRequestTool/StickerRequestTool.js +0 -86
- package/dist/tools/StickerRequestTool/StickerRequestTool.js.map +0 -7
- package/dist/tools/StickerRequestTool/prompt.js +0 -23
- package/dist/tools/StickerRequestTool/prompt.js.map +0 -7
- package/dist/tools/TaskTool/TaskTool.js +0 -351
- package/dist/tools/TaskTool/TaskTool.js.map +0 -7
- package/dist/tools/TaskTool/constants.js +0 -5
- package/dist/tools/TaskTool/constants.js.map +0 -7
- package/dist/tools/TaskTool/prompt.js +0 -82
- package/dist/tools/TaskTool/prompt.js.map +0 -7
- package/dist/tools/ThinkTool/ThinkTool.js +0 -48
- package/dist/tools/ThinkTool/ThinkTool.js.map +0 -7
- package/dist/tools/ThinkTool/prompt.js +0 -16
- package/dist/tools/ThinkTool/prompt.js.map +0 -7
- package/dist/tools/TodoWriteTool/TodoWriteTool.js +0 -216
- package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +0 -7
- package/dist/tools/TodoWriteTool/prompt.js +0 -66
- package/dist/tools/TodoWriteTool/prompt.js.map +0 -7
- package/dist/tools/URLFetcherTool/URLFetcherTool.js +0 -137
- package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +0 -7
- package/dist/tools/URLFetcherTool/cache.js +0 -45
- package/dist/tools/URLFetcherTool/cache.js.map +0 -7
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js +0 -42
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +0 -7
- package/dist/tools/URLFetcherTool/prompt.js +0 -22
- package/dist/tools/URLFetcherTool/prompt.js.map +0 -7
- package/dist/tools/WebSearchTool/WebSearchTool.js +0 -86
- package/dist/tools/WebSearchTool/WebSearchTool.js.map +0 -7
- package/dist/tools/WebSearchTool/prompt.js +0 -17
- package/dist/tools/WebSearchTool/prompt.js.map +0 -7
- package/dist/tools/WebSearchTool/searchProviders.js +0 -48
- package/dist/tools/WebSearchTool/searchProviders.js.map +0 -7
- package/dist/tools/lsTool/lsTool.js +0 -201
- package/dist/tools/lsTool/lsTool.js.map +0 -7
- package/dist/tools/lsTool/prompt.js +0 -5
- package/dist/tools/lsTool/prompt.js.map +0 -7
- package/dist/tools.js +0 -64
- package/dist/tools.js.map +0 -7
- package/dist/types/PermissionMode.js +0 -82
- package/dist/types/PermissionMode.js.map +0 -7
- package/dist/types/RequestContext.js +0 -47
- package/dist/types/RequestContext.js.map +0 -7
- package/dist/types/common.d.js +0 -1
- package/dist/types/conversation.js +0 -1
- package/dist/types/logs.js +0 -1
- package/dist/types/modelCapabilities.js +0 -1
- package/dist/types/notebook.js +0 -1
- package/dist/utils/Cursor.js +0 -313
- package/dist/utils/Cursor.js.map +0 -7
- package/dist/utils/PersistentShell.js +0 -382
- package/dist/utils/PersistentShell.js.map +0 -7
- package/dist/utils/advancedFuzzyMatcher.js +0 -206
- package/dist/utils/advancedFuzzyMatcher.js.map +0 -7
- package/dist/utils/agentLoader.js +0 -199
- package/dist/utils/agentLoader.js.map +0 -7
- package/dist/utils/agentStorage.js +0 -59
- package/dist/utils/agentStorage.js.map +0 -7
- package/dist/utils/array.js +0 -7
- package/dist/utils/array.js.map +0 -7
- package/dist/utils/ask.js +0 -77
- package/dist/utils/ask.js.map +0 -7
- package/dist/utils/auth.js +0 -11
- package/dist/utils/auth.js.map +0 -7
- package/dist/utils/autoCompactCore.js +0 -149
- package/dist/utils/autoCompactCore.js.map +0 -7
- package/dist/utils/autoUpdater.js +0 -360
- package/dist/utils/autoUpdater.js.map +0 -7
- package/dist/utils/betas.js +0 -21
- package/dist/utils/betas.js.map +0 -7
- package/dist/utils/browser.js +0 -15
- package/dist/utils/browser.js.map +0 -7
- package/dist/utils/cleanup.js +0 -54
- package/dist/utils/cleanup.js.map +0 -7
- package/dist/utils/commands.js +0 -207
- package/dist/utils/commands.js.map +0 -7
- package/dist/utils/commonUnixCommands.js +0 -687
- package/dist/utils/commonUnixCommands.js.map +0 -7
- package/dist/utils/config.js.map +0 -7
- package/dist/utils/conversationRecovery.js +0 -35
- package/dist/utils/conversationRecovery.js.map +0 -7
- package/dist/utils/debugLogger.js.map +0 -7
- package/dist/utils/diff.js +0 -32
- package/dist/utils/diff.js.map +0 -7
- package/dist/utils/env.js +0 -44
- package/dist/utils/env.js.map +0 -7
- package/dist/utils/errors.js +0 -23
- package/dist/utils/errors.js.map +0 -7
- package/dist/utils/exampleCommands.js +0 -80
- package/dist/utils/exampleCommands.js.map +0 -7
- package/dist/utils/execFileNoThrow.js +0 -44
- package/dist/utils/execFileNoThrow.js.map +0 -7
- package/dist/utils/expertChatStorage.js +0 -78
- package/dist/utils/expertChatStorage.js.map +0 -7
- package/dist/utils/file.js +0 -282
- package/dist/utils/file.js.map +0 -7
- package/dist/utils/fileRecoveryCore.js +0 -41
- package/dist/utils/fileRecoveryCore.js.map +0 -7
- package/dist/utils/format.js +0 -41
- package/dist/utils/format.js.map +0 -7
- package/dist/utils/fuzzyMatcher.js +0 -252
- package/dist/utils/fuzzyMatcher.js.map +0 -7
- package/dist/utils/generators.js +0 -46
- package/dist/utils/generators.js.map +0 -7
- package/dist/utils/git.js +0 -83
- package/dist/utils/git.js.map +0 -7
- package/dist/utils/globalLogger.js +0 -54
- package/dist/utils/globalLogger.js.map +0 -7
- package/dist/utils/http.js +0 -7
- package/dist/utils/http.js.map +0 -7
- package/dist/utils/imagePaste.js +0 -29
- package/dist/utils/imagePaste.js.map +0 -7
- package/dist/utils/json.js +0 -16
- package/dist/utils/json.js.map +0 -7
- package/dist/utils/log.js +0 -298
- package/dist/utils/log.js.map +0 -7
- package/dist/utils/markdown.js +0 -187
- package/dist/utils/markdown.js.map +0 -7
- package/dist/utils/messageContextManager.js +0 -195
- package/dist/utils/messageContextManager.js.map +0 -7
- package/dist/utils/messages.js +0 -633
- package/dist/utils/messages.js.map +0 -7
- package/dist/utils/model.js.map +0 -7
- package/dist/utils/permissions/filesystem.js +0 -80
- package/dist/utils/permissions/filesystem.js.map +0 -7
- package/dist/utils/responseState.js +0 -20
- package/dist/utils/responseState.js.map +0 -7
- package/dist/utils/ripgrep.js +0 -131
- package/dist/utils/ripgrep.js.map +0 -7
- package/dist/utils/secureFile.js +0 -483
- package/dist/utils/secureFile.js.map +0 -7
- package/dist/utils/sessionState.js +0 -31
- package/dist/utils/sessionState.js.map +0 -7
- package/dist/utils/state.js +0 -24
- package/dist/utils/state.js.map +0 -7
- package/dist/utils/style.js +0 -31
- package/dist/utils/style.js.map +0 -7
- package/dist/utils/terminal.js +0 -43
- package/dist/utils/terminal.js.map +0 -7
- package/dist/utils/theme.js.map +0 -7
- package/dist/utils/thinking.js +0 -103
- package/dist/utils/thinking.js.map +0 -7
- package/dist/utils/todoStorage.js +0 -291
- package/dist/utils/todoStorage.js.map +0 -7
- package/dist/utils/tokens.js +0 -30
- package/dist/utils/tokens.js.map +0 -7
- package/dist/utils/toolExecutionController.js +0 -109
- package/dist/utils/toolExecutionController.js.map +0 -7
- package/dist/utils/unaryLogging.js +0 -14
- package/dist/utils/unaryLogging.js.map +0 -7
- package/dist/utils/user.js +0 -40
- package/dist/utils/user.js.map +0 -7
- package/dist/utils/validate.js +0 -132
- package/dist/utils/validate.js.map +0 -7
- /package/dist/{Tool.js.map → REPL-CW7AYLVL.js.map} +0 -0
- /package/dist/{components/CustomSelect/theme.js.map → autoUpdater-ITPIHCOI.js.map} +0 -0
- /package/dist/{types/common.d.js.map → chunk-JC6NCUG5.js.map} +0 -0
- /package/dist/{types/conversation.js.map → commands-2BF2CJ3A.js.map} +0 -0
- /package/dist/{types/logs.js.map → config-RUSD6G5Y.js.map} +0 -0
- /package/dist/{types/modelCapabilities.js.map → context-6FXPETYH.js.map} +0 -0
- /package/dist/{types/notebook.js.map → costTracker-6SL26FDB.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/services/gpt5ConnectionTest.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * \uD83D\uDD25 GPT-5 Connection Test Service\n * \n * Specialized connection testing for GPT-5 models that supports both\n * Responses API and Chat Completions API with proper fallback handling.\n */\n\nimport { getModelFeatures } from './openai'\n\nexport interface ConnectionTestResult {\n success: boolean\n message: string\n endpoint?: string\n details?: string\n apiUsed?: 'responses' | 'chat_completions'\n responseTime?: number\n}\n\nexport interface GPT5TestConfig {\n model: string\n apiKey: string\n baseURL?: string\n maxTokens?: number\n provider?: string\n}\n\n/**\n * Test GPT-5 model connection with intelligent API selection\n */\nexport async function testGPT5Connection(config: GPT5TestConfig): Promise<ConnectionTestResult> {\n const startTime = Date.now()\n \n // Validate configuration\n if (!config.model || !config.apiKey) {\n return {\n success: false,\n message: 'Invalid configuration',\n details: 'Model name and API key are required',\n }\n }\n\n const isGPT5 = config.model.toLowerCase().includes('gpt-5')\n const modelFeatures = getModelFeatures(config.model)\n const baseURL = config.baseURL || 'https://api.openai.com/v1'\n const isOfficialOpenAI = !config.baseURL || config.baseURL.includes('api.openai.com')\n\n console.log(`\uD83D\uDD27 Testing GPT-5 connection for model: ${config.model}`)\n console.log(`\uD83D\uDD27 Base URL: ${baseURL}`)\n console.log(`\uD83D\uDD27 Official OpenAI: ${isOfficialOpenAI}`)\n console.log(`\uD83D\uDD27 Supports Responses API: ${modelFeatures.supportsResponsesAPI}`)\n\n // Try Responses API first for official GPT-5 models\n if (isGPT5 && modelFeatures.supportsResponsesAPI && isOfficialOpenAI) {\n console.log(`\uD83D\uDE80 Attempting Responses API for ${config.model}`)\n const responsesResult = await testResponsesAPI(config, baseURL, startTime)\n \n if (responsesResult.success) {\n console.log(`\u2705 Responses API test successful for ${config.model}`)\n return responsesResult\n } else {\n console.log(`\u26A0\uFE0F Responses API failed, falling back to Chat Completions: ${responsesResult.details}`)\n }\n }\n\n // Fallback to Chat Completions API\n console.log(`\uD83D\uDD04 Using Chat Completions API for ${config.model}`)\n return await testChatCompletionsAPI(config, baseURL, startTime)\n}\n\n/**\n * Test using GPT-5 Responses API\n */\nasync function testResponsesAPI(\n config: GPT5TestConfig, \n baseURL: string, \n startTime: number\n): Promise<ConnectionTestResult> {\n const testURL = `${baseURL.replace(/\\/+$/, '')}/responses`\n \n const testPayload = {\n model: config.model,\n input: [\n {\n role: 'user',\n content: 'Please respond with exactly \"YES\" (in capital letters) to confirm this connection is working.',\n },\n ],\n max_completion_tokens: Math.max(config.maxTokens || 8192, 8192),\n temperature: 1, // GPT-5 requirement\n reasoning: {\n effort: 'low', // Fast response for connection test\n },\n }\n\n const headers = {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${config.apiKey}`,\n }\n\n console.log(`\uD83D\uDD27 Responses API URL: ${testURL}`)\n console.log(`\uD83D\uDD27 Responses API payload:`, JSON.stringify(testPayload, null, 2))\n\n try {\n const response = await fetch(testURL, {\n method: 'POST',\n headers,\n body: JSON.stringify(testPayload),\n })\n\n const responseTime = Date.now() - startTime\n\n if (response.ok) {\n const data = await response.json()\n console.log(`\u2705 Responses API successful response:`, data)\n\n // Extract content from Responses API format\n let responseContent = ''\n if (data.output_text) {\n responseContent = data.output_text\n } else if (data.output && Array.isArray(data.output)) {\n // Extract from structured output format\n const messageOutput = data.output.find(item => item.type === 'message')\n if (messageOutput && messageOutput.content) {\n const textContent = messageOutput.content.find(c => c.type === 'output_text')\n responseContent = textContent?.text || ''\n }\n }\n\n const containsYes = responseContent.toLowerCase().includes('yes')\n\n if (containsYes) {\n return {\n success: true,\n message: '\u2705 GPT-5 Responses API connection successful',\n endpoint: '/responses',\n details: `Model responded correctly: \"${responseContent.trim()}\"`,\n apiUsed: 'responses',\n responseTime,\n }\n } else {\n return {\n success: false,\n message: '\u26A0\uFE0F Responses API connected but unexpected response',\n endpoint: '/responses',\n details: `Expected \"YES\" but got: \"${responseContent.trim() || '(empty response)'}\"`,\n apiUsed: 'responses',\n responseTime,\n }\n }\n } else {\n const errorData = await response.json().catch(() => null)\n const errorMessage = errorData?.error?.message || errorData?.message || response.statusText\n\n console.log(`\u274C Responses API error (${response.status}):`, errorData)\n\n return {\n success: false,\n message: `\u274C Responses API failed (${response.status})`,\n endpoint: '/responses',\n details: `Error: ${errorMessage}`,\n apiUsed: 'responses',\n responseTime: Date.now() - startTime,\n }\n }\n } catch (error) {\n console.log(`\u274C Responses API connection error:`, error)\n \n return {\n success: false,\n message: '\u274C Responses API connection failed',\n endpoint: '/responses',\n details: error instanceof Error ? error.message : String(error),\n apiUsed: 'responses',\n responseTime: Date.now() - startTime,\n }\n }\n}\n\n/**\n * Test using Chat Completions API with GPT-5 compatibility\n */\nasync function testChatCompletionsAPI(\n config: GPT5TestConfig, \n baseURL: string, \n startTime: number\n): Promise<ConnectionTestResult> {\n const testURL = `${baseURL.replace(/\\/+$/, '')}/chat/completions`\n \n const isGPT5 = config.model.toLowerCase().includes('gpt-5')\n \n // Create test payload with GPT-5 compatibility\n const testPayload: any = {\n model: config.model,\n messages: [\n {\n role: 'user',\n content: 'Please respond with exactly \"YES\" (in capital letters) to confirm this connection is working.',\n },\n ],\n temperature: isGPT5 ? 1 : 0, // GPT-5 requires temperature=1\n stream: false,\n }\n\n // \uD83D\uDD27 Apply GPT-5 parameter transformations\n if (isGPT5) {\n testPayload.max_completion_tokens = Math.max(config.maxTokens || 8192, 8192)\n delete testPayload.max_tokens // \uD83D\uDD25 CRITICAL: Remove max_tokens for GPT-5\n console.log(`\uD83D\uDD27 GPT-5 mode: Using max_completion_tokens = ${testPayload.max_completion_tokens}`)\n } else {\n testPayload.max_tokens = Math.max(config.maxTokens || 8192, 8192)\n }\n\n const headers = {\n 'Content-Type': 'application/json',\n }\n\n // Add provider-specific headers\n if (config.provider === 'azure') {\n headers['api-key'] = config.apiKey\n } else {\n headers['Authorization'] = `Bearer ${config.apiKey}`\n }\n\n console.log(`\uD83D\uDD27 Chat Completions URL: ${testURL}`)\n console.log(`\uD83D\uDD27 Chat Completions payload:`, JSON.stringify(testPayload, null, 2))\n\n try {\n const response = await fetch(testURL, {\n method: 'POST',\n headers,\n body: JSON.stringify(testPayload),\n })\n\n const responseTime = Date.now() - startTime\n\n if (response.ok) {\n const data = await response.json()\n console.log(`\u2705 Chat Completions successful response:`, data)\n\n const responseContent = data.choices?.[0]?.message?.content || ''\n const containsYes = responseContent.toLowerCase().includes('yes')\n\n if (containsYes) {\n return {\n success: true,\n message: `\u2705 ${isGPT5 ? 'GPT-5' : 'Model'} Chat Completions connection successful`,\n endpoint: '/chat/completions',\n details: `Model responded correctly: \"${responseContent.trim()}\"`,\n apiUsed: 'chat_completions',\n responseTime,\n }\n } else {\n return {\n success: false,\n message: '\u26A0\uFE0F Chat Completions connected but unexpected response',\n endpoint: '/chat/completions',\n details: `Expected \"YES\" but got: \"${responseContent.trim() || '(empty response)'}\"`,\n apiUsed: 'chat_completions',\n responseTime,\n }\n }\n } else {\n const errorData = await response.json().catch(() => null)\n const errorMessage = errorData?.error?.message || errorData?.message || response.statusText\n\n console.log(`\u274C Chat Completions error (${response.status}):`, errorData)\n\n // \uD83D\uDD27 Provide specific guidance for GPT-5 errors\n let details = `Error: ${errorMessage}`\n if (response.status === 400 && errorMessage.includes('max_tokens') && isGPT5) {\n details += '\\n\\n\uD83D\uDD27 GPT-5 Fix Applied: This error suggests a parameter compatibility issue. Please check if the provider supports GPT-5 with max_completion_tokens.'\n }\n\n return {\n success: false,\n message: `\u274C Chat Completions failed (${response.status})`,\n endpoint: '/chat/completions',\n details: details,\n apiUsed: 'chat_completions',\n responseTime: Date.now() - startTime,\n }\n }\n } catch (error) {\n console.log(`\u274C Chat Completions connection error:`, error)\n \n return {\n success: false,\n message: '\u274C Chat Completions connection failed',\n endpoint: '/chat/completions',\n details: error instanceof Error ? error.message : String(error),\n apiUsed: 'chat_completions',\n responseTime: Date.now() - startTime,\n }\n }\n}\n\n/**\n * Quick validation for GPT-5 configuration\n */\nexport function validateGPT5Config(config: GPT5TestConfig): { valid: boolean; errors: string[] } {\n console.log(`\uD83D\uDD27 validateGPT5Config called with:`, {\n model: config.model,\n hasApiKey: !!config.apiKey,\n baseURL: config.baseURL,\n provider: config.provider,\n })\n \n const errors: string[] = []\n\n if (!config.model) {\n errors.push('Model name is required')\n }\n\n if (!config.apiKey) {\n errors.push('API key is required')\n }\n\n if (config.apiKey && config.apiKey.length < 10) {\n errors.push('API key appears to be invalid (too short)')\n }\n\n const isGPT5 = config.model?.toLowerCase().includes('gpt-5')\n if (isGPT5) {\n console.log(`\uD83D\uDD27 GPT-5 validation: model=${config.model}, maxTokens=${config.maxTokens}`)\n \n if (config.maxTokens && config.maxTokens < 1000) {\n errors.push('GPT-5 models typically require at least 1000 max tokens')\n }\n \n // \u5B8C\u5168\u79FB\u9664\u7B2C\u4E09\u65B9provider\u9650\u5236\uFF0C\u5141\u8BB8\u6240\u6709\u4EE3\u7406\u4E2D\u8F6C\u7AD9\u4F7F\u7528GPT-5\n console.log(`\uD83D\uDD27 No third-party restrictions applied for GPT-5`)\n }\n\n console.log(`\uD83D\uDD27 Validation result:`, { valid: errors.length === 0, errors })\n\n return {\n valid: errors.length === 0,\n errors,\n }\n}"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,435 +0,0 @@
|
|
|
1
|
-
import { zipObject } from "lodash-es";
|
|
2
|
-
import {
|
|
3
|
-
getCurrentProjectConfig,
|
|
4
|
-
saveCurrentProjectConfig,
|
|
5
|
-
getGlobalConfig,
|
|
6
|
-
saveGlobalConfig,
|
|
7
|
-
getMcprcConfig,
|
|
8
|
-
addMcprcServerForTesting,
|
|
9
|
-
removeMcprcServerForTesting
|
|
10
|
-
} from "../utils/config.js";
|
|
11
|
-
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
12
|
-
import { join } from "path";
|
|
13
|
-
import { getCwd } from "../utils/state.js";
|
|
14
|
-
import { safeParseJSON } from "../utils/json.js";
|
|
15
|
-
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
16
|
-
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
17
|
-
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
|
18
|
-
import {
|
|
19
|
-
CallToolResultSchema,
|
|
20
|
-
ListPromptsResultSchema,
|
|
21
|
-
ListToolsResultSchema
|
|
22
|
-
} from "@modelcontextprotocol/sdk/types.js";
|
|
23
|
-
import { memoize, pickBy } from "lodash-es";
|
|
24
|
-
import { MCPTool } from "../tools/MCPTool/MCPTool.js";
|
|
25
|
-
import { logMCPError } from "../utils/log.js";
|
|
26
|
-
import { logEvent } from "../services/statsig.js";
|
|
27
|
-
import { PRODUCT_COMMAND } from "../constants/product.js";
|
|
28
|
-
function parseEnvVars(rawEnvArgs) {
|
|
29
|
-
const parsedEnv = {};
|
|
30
|
-
if (rawEnvArgs) {
|
|
31
|
-
for (const envStr of rawEnvArgs) {
|
|
32
|
-
const [key, ...valueParts] = envStr.split("=");
|
|
33
|
-
if (!key || valueParts.length === 0) {
|
|
34
|
-
throw new Error(
|
|
35
|
-
`Invalid environment variable format: ${envStr}, environment variables should be added as: -e KEY1=value1 -e KEY2=value2`
|
|
36
|
-
);
|
|
37
|
-
}
|
|
38
|
-
parsedEnv[key] = valueParts.join("=");
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return parsedEnv;
|
|
42
|
-
}
|
|
43
|
-
const VALID_SCOPES = ["project", "global", "mcprc"];
|
|
44
|
-
const EXTERNAL_SCOPES = ["project", "global"];
|
|
45
|
-
function ensureConfigScope(scope) {
|
|
46
|
-
if (!scope) return "project";
|
|
47
|
-
const scopesToCheck = process.env.USER_TYPE === "external" ? EXTERNAL_SCOPES : VALID_SCOPES;
|
|
48
|
-
if (!scopesToCheck.includes(scope)) {
|
|
49
|
-
throw new Error(
|
|
50
|
-
`Invalid scope: ${scope}. Must be one of: ${scopesToCheck.join(", ")}`
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
return scope;
|
|
54
|
-
}
|
|
55
|
-
function addMcpServer(name, server, scope = "project") {
|
|
56
|
-
if (scope === "mcprc") {
|
|
57
|
-
if (process.env.NODE_ENV === "test") {
|
|
58
|
-
addMcprcServerForTesting(name, server);
|
|
59
|
-
} else {
|
|
60
|
-
const mcprcPath = join(getCwd(), ".mcprc");
|
|
61
|
-
let mcprcConfig = {};
|
|
62
|
-
if (existsSync(mcprcPath)) {
|
|
63
|
-
try {
|
|
64
|
-
const mcprcContent = readFileSync(mcprcPath, "utf-8");
|
|
65
|
-
const existingConfig = safeParseJSON(mcprcContent);
|
|
66
|
-
if (existingConfig && typeof existingConfig === "object") {
|
|
67
|
-
mcprcConfig = existingConfig;
|
|
68
|
-
}
|
|
69
|
-
} catch {
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
mcprcConfig[name] = server;
|
|
73
|
-
try {
|
|
74
|
-
writeFileSync(mcprcPath, JSON.stringify(mcprcConfig, null, 2), "utf-8");
|
|
75
|
-
} catch (error) {
|
|
76
|
-
throw new Error(`Failed to write to .mcprc: ${error}`);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
} else if (scope === "global") {
|
|
80
|
-
const config = getGlobalConfig();
|
|
81
|
-
if (!config.mcpServers) {
|
|
82
|
-
config.mcpServers = {};
|
|
83
|
-
}
|
|
84
|
-
config.mcpServers[name] = server;
|
|
85
|
-
saveGlobalConfig(config);
|
|
86
|
-
} else {
|
|
87
|
-
const config = getCurrentProjectConfig();
|
|
88
|
-
if (!config.mcpServers) {
|
|
89
|
-
config.mcpServers = {};
|
|
90
|
-
}
|
|
91
|
-
config.mcpServers[name] = server;
|
|
92
|
-
saveCurrentProjectConfig(config);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
function removeMcpServer(name, scope = "project") {
|
|
96
|
-
if (scope === "mcprc") {
|
|
97
|
-
if (process.env.NODE_ENV === "test") {
|
|
98
|
-
removeMcprcServerForTesting(name);
|
|
99
|
-
} else {
|
|
100
|
-
const mcprcPath = join(getCwd(), ".mcprc");
|
|
101
|
-
if (!existsSync(mcprcPath)) {
|
|
102
|
-
throw new Error("No .mcprc file found in this directory");
|
|
103
|
-
}
|
|
104
|
-
try {
|
|
105
|
-
const mcprcContent = readFileSync(mcprcPath, "utf-8");
|
|
106
|
-
const mcprcConfig = safeParseJSON(mcprcContent);
|
|
107
|
-
if (!mcprcConfig || typeof mcprcConfig !== "object" || !mcprcConfig[name]) {
|
|
108
|
-
throw new Error(`No MCP server found with name: ${name} in .mcprc`);
|
|
109
|
-
}
|
|
110
|
-
delete mcprcConfig[name];
|
|
111
|
-
writeFileSync(mcprcPath, JSON.stringify(mcprcConfig, null, 2), "utf-8");
|
|
112
|
-
} catch (error) {
|
|
113
|
-
if (error instanceof Error) {
|
|
114
|
-
throw error;
|
|
115
|
-
}
|
|
116
|
-
throw new Error(`Failed to remove from .mcprc: ${error}`);
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
} else if (scope === "global") {
|
|
120
|
-
const config = getGlobalConfig();
|
|
121
|
-
if (!config.mcpServers?.[name]) {
|
|
122
|
-
throw new Error(`No global MCP server found with name: ${name}`);
|
|
123
|
-
}
|
|
124
|
-
delete config.mcpServers[name];
|
|
125
|
-
saveGlobalConfig(config);
|
|
126
|
-
} else {
|
|
127
|
-
const config = getCurrentProjectConfig();
|
|
128
|
-
if (!config.mcpServers?.[name]) {
|
|
129
|
-
throw new Error(`No local MCP server found with name: ${name}`);
|
|
130
|
-
}
|
|
131
|
-
delete config.mcpServers[name];
|
|
132
|
-
saveCurrentProjectConfig(config);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
function listMCPServers() {
|
|
136
|
-
const globalConfig = getGlobalConfig();
|
|
137
|
-
const mcprcConfig = getMcprcConfig();
|
|
138
|
-
const projectConfig = getCurrentProjectConfig();
|
|
139
|
-
return {
|
|
140
|
-
...globalConfig.mcpServers ?? {},
|
|
141
|
-
...mcprcConfig ?? {},
|
|
142
|
-
// mcprc configs override global ones
|
|
143
|
-
...projectConfig.mcpServers ?? {}
|
|
144
|
-
// Project configs override mcprc ones
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
function getMcpServer(name) {
|
|
148
|
-
const projectConfig = getCurrentProjectConfig();
|
|
149
|
-
const mcprcConfig = getMcprcConfig();
|
|
150
|
-
const globalConfig = getGlobalConfig();
|
|
151
|
-
if (projectConfig.mcpServers?.[name]) {
|
|
152
|
-
return { ...projectConfig.mcpServers[name], scope: "project" };
|
|
153
|
-
}
|
|
154
|
-
if (mcprcConfig?.[name]) {
|
|
155
|
-
return { ...mcprcConfig[name], scope: "mcprc" };
|
|
156
|
-
}
|
|
157
|
-
if (globalConfig.mcpServers?.[name]) {
|
|
158
|
-
return { ...globalConfig.mcpServers[name], scope: "global" };
|
|
159
|
-
}
|
|
160
|
-
return void 0;
|
|
161
|
-
}
|
|
162
|
-
async function connectToServer(name, serverRef) {
|
|
163
|
-
const transport = serverRef.type === "sse" ? new SSEClientTransport(new URL(serverRef.url)) : new StdioClientTransport({
|
|
164
|
-
command: serverRef.command,
|
|
165
|
-
args: serverRef.args,
|
|
166
|
-
env: {
|
|
167
|
-
...process.env,
|
|
168
|
-
...serverRef.env
|
|
169
|
-
},
|
|
170
|
-
stderr: "pipe"
|
|
171
|
-
// prevents error output from the MCP server from printing to the UI
|
|
172
|
-
});
|
|
173
|
-
const client = new Client(
|
|
174
|
-
{
|
|
175
|
-
name: PRODUCT_COMMAND,
|
|
176
|
-
version: "0.1.0"
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
capabilities: {}
|
|
180
|
-
}
|
|
181
|
-
);
|
|
182
|
-
const CONNECTION_TIMEOUT_MS = 5e3;
|
|
183
|
-
const connectPromise = client.connect(transport);
|
|
184
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
185
|
-
const timeoutId = setTimeout(() => {
|
|
186
|
-
reject(
|
|
187
|
-
new Error(
|
|
188
|
-
`Connection to MCP server "${name}" timed out after ${CONNECTION_TIMEOUT_MS}ms`
|
|
189
|
-
)
|
|
190
|
-
);
|
|
191
|
-
}, CONNECTION_TIMEOUT_MS);
|
|
192
|
-
connectPromise.then(
|
|
193
|
-
() => clearTimeout(timeoutId),
|
|
194
|
-
() => clearTimeout(timeoutId)
|
|
195
|
-
);
|
|
196
|
-
});
|
|
197
|
-
await Promise.race([connectPromise, timeoutPromise]);
|
|
198
|
-
if (serverRef.type === "stdio") {
|
|
199
|
-
;
|
|
200
|
-
transport.stderr?.on("data", (data) => {
|
|
201
|
-
const errorText = data.toString().trim();
|
|
202
|
-
if (errorText) {
|
|
203
|
-
logMCPError(name, `Server stderr: ${errorText}`);
|
|
204
|
-
}
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
return client;
|
|
208
|
-
}
|
|
209
|
-
function getMcprcServerStatus(serverName) {
|
|
210
|
-
const config = getCurrentProjectConfig();
|
|
211
|
-
if (config.approvedMcprcServers?.includes(serverName)) {
|
|
212
|
-
return "approved";
|
|
213
|
-
}
|
|
214
|
-
if (config.rejectedMcprcServers?.includes(serverName)) {
|
|
215
|
-
return "rejected";
|
|
216
|
-
}
|
|
217
|
-
return "pending";
|
|
218
|
-
}
|
|
219
|
-
const getClients = memoize(async () => {
|
|
220
|
-
if (process.env.CI && process.env.NODE_ENV !== "test") {
|
|
221
|
-
return [];
|
|
222
|
-
}
|
|
223
|
-
const globalServers = getGlobalConfig().mcpServers ?? {};
|
|
224
|
-
const mcprcServers = getMcprcConfig();
|
|
225
|
-
const projectServers = getCurrentProjectConfig().mcpServers ?? {};
|
|
226
|
-
const approvedMcprcServers = pickBy(
|
|
227
|
-
mcprcServers,
|
|
228
|
-
(_, name) => getMcprcServerStatus(name) === "approved"
|
|
229
|
-
);
|
|
230
|
-
const allServers = {
|
|
231
|
-
...globalServers,
|
|
232
|
-
...approvedMcprcServers,
|
|
233
|
-
// Approved .mcprc servers override global ones
|
|
234
|
-
...projectServers
|
|
235
|
-
// Project servers take highest precedence
|
|
236
|
-
};
|
|
237
|
-
return await Promise.all(
|
|
238
|
-
Object.entries(allServers).map(async ([name, serverRef]) => {
|
|
239
|
-
try {
|
|
240
|
-
const client = await connectToServer(name, serverRef);
|
|
241
|
-
logEvent("tengu_mcp_server_connection_succeeded", {});
|
|
242
|
-
return { name, client, type: "connected" };
|
|
243
|
-
} catch (error) {
|
|
244
|
-
logEvent("tengu_mcp_server_connection_failed", {});
|
|
245
|
-
logMCPError(
|
|
246
|
-
name,
|
|
247
|
-
`Connection failed: ${error instanceof Error ? error.message : String(error)}`
|
|
248
|
-
);
|
|
249
|
-
return { name, type: "failed" };
|
|
250
|
-
}
|
|
251
|
-
})
|
|
252
|
-
);
|
|
253
|
-
});
|
|
254
|
-
async function requestAll(req, resultSchema, requiredCapability) {
|
|
255
|
-
const clients = await getClients();
|
|
256
|
-
const results = await Promise.allSettled(
|
|
257
|
-
clients.map(async (client) => {
|
|
258
|
-
if (client.type === "failed") return null;
|
|
259
|
-
try {
|
|
260
|
-
const capabilities = await client.client.getServerCapabilities();
|
|
261
|
-
if (!capabilities?.[requiredCapability]) {
|
|
262
|
-
return null;
|
|
263
|
-
}
|
|
264
|
-
return {
|
|
265
|
-
client,
|
|
266
|
-
result: await client.client.request(req, resultSchema)
|
|
267
|
-
};
|
|
268
|
-
} catch (error) {
|
|
269
|
-
if (client.type === "connected") {
|
|
270
|
-
logMCPError(
|
|
271
|
-
client.name,
|
|
272
|
-
`Failed to request '${req.method}': ${error instanceof Error ? error.message : String(error)}`
|
|
273
|
-
);
|
|
274
|
-
}
|
|
275
|
-
return null;
|
|
276
|
-
}
|
|
277
|
-
})
|
|
278
|
-
);
|
|
279
|
-
return results.filter(
|
|
280
|
-
(result) => result.status === "fulfilled"
|
|
281
|
-
).map((result) => result.value).filter(
|
|
282
|
-
(result) => result !== null
|
|
283
|
-
);
|
|
284
|
-
}
|
|
285
|
-
const getMCPTools = memoize(async () => {
|
|
286
|
-
const toolsList = await requestAll(
|
|
287
|
-
{
|
|
288
|
-
method: "tools/list"
|
|
289
|
-
},
|
|
290
|
-
ListToolsResultSchema,
|
|
291
|
-
"tools"
|
|
292
|
-
);
|
|
293
|
-
return toolsList.flatMap(
|
|
294
|
-
({ client, result: { tools } }) => tools.map(
|
|
295
|
-
(tool) => ({
|
|
296
|
-
...MCPTool,
|
|
297
|
-
name: "mcp__" + client.name + "__" + tool.name,
|
|
298
|
-
async description() {
|
|
299
|
-
return tool.description ?? "";
|
|
300
|
-
},
|
|
301
|
-
async prompt() {
|
|
302
|
-
return tool.description ?? "";
|
|
303
|
-
},
|
|
304
|
-
inputJSONSchema: tool.inputSchema,
|
|
305
|
-
async validateInput(input, context) {
|
|
306
|
-
return { result: true };
|
|
307
|
-
},
|
|
308
|
-
async *call(args, context) {
|
|
309
|
-
const data = await callMCPTool({ client, tool: tool.name, args });
|
|
310
|
-
yield {
|
|
311
|
-
type: "result",
|
|
312
|
-
data,
|
|
313
|
-
resultForAssistant: data
|
|
314
|
-
};
|
|
315
|
-
},
|
|
316
|
-
userFacingName() {
|
|
317
|
-
return `${client.name}:${tool.name} (MCP)`;
|
|
318
|
-
}
|
|
319
|
-
})
|
|
320
|
-
)
|
|
321
|
-
);
|
|
322
|
-
});
|
|
323
|
-
async function callMCPTool({
|
|
324
|
-
client: { client, name },
|
|
325
|
-
tool,
|
|
326
|
-
args
|
|
327
|
-
}) {
|
|
328
|
-
const result = await client.callTool(
|
|
329
|
-
{
|
|
330
|
-
name: tool,
|
|
331
|
-
arguments: args
|
|
332
|
-
},
|
|
333
|
-
CallToolResultSchema
|
|
334
|
-
);
|
|
335
|
-
if ("isError" in result && result.isError) {
|
|
336
|
-
const errorMessage = `Error calling tool ${tool}: ${result.error}`;
|
|
337
|
-
logMCPError(name, errorMessage);
|
|
338
|
-
throw Error(errorMessage);
|
|
339
|
-
}
|
|
340
|
-
if ("toolResult" in result) {
|
|
341
|
-
return String(result.toolResult);
|
|
342
|
-
}
|
|
343
|
-
if ("content" in result && Array.isArray(result.content)) {
|
|
344
|
-
return result.content.map((item) => {
|
|
345
|
-
if (item.type === "image") {
|
|
346
|
-
return {
|
|
347
|
-
type: "image",
|
|
348
|
-
source: {
|
|
349
|
-
type: "base64",
|
|
350
|
-
data: String(item.data),
|
|
351
|
-
media_type: item.mimeType
|
|
352
|
-
}
|
|
353
|
-
};
|
|
354
|
-
}
|
|
355
|
-
return item;
|
|
356
|
-
});
|
|
357
|
-
}
|
|
358
|
-
throw Error(`Unexpected response format from tool ${tool}`);
|
|
359
|
-
}
|
|
360
|
-
const getMCPCommands = memoize(async () => {
|
|
361
|
-
const results = await requestAll(
|
|
362
|
-
{
|
|
363
|
-
method: "prompts/list"
|
|
364
|
-
},
|
|
365
|
-
ListPromptsResultSchema,
|
|
366
|
-
"prompts"
|
|
367
|
-
);
|
|
368
|
-
return results.flatMap(
|
|
369
|
-
({ client, result }) => result.prompts?.map((_) => {
|
|
370
|
-
const argNames = Object.values(_.arguments ?? {}).map((k) => k.name);
|
|
371
|
-
return {
|
|
372
|
-
type: "prompt",
|
|
373
|
-
name: "mcp__" + client.name + "__" + _.name,
|
|
374
|
-
description: _.description ?? "",
|
|
375
|
-
isEnabled: true,
|
|
376
|
-
isHidden: false,
|
|
377
|
-
progressMessage: "running",
|
|
378
|
-
userFacingName() {
|
|
379
|
-
return `${client.name}:${_.name} (MCP)`;
|
|
380
|
-
},
|
|
381
|
-
argNames,
|
|
382
|
-
async getPromptForCommand(args) {
|
|
383
|
-
const argsArray = args.split(" ");
|
|
384
|
-
return await runCommand(
|
|
385
|
-
{ name: _.name, client },
|
|
386
|
-
zipObject(argNames, argsArray)
|
|
387
|
-
);
|
|
388
|
-
}
|
|
389
|
-
};
|
|
390
|
-
})
|
|
391
|
-
);
|
|
392
|
-
});
|
|
393
|
-
async function runCommand({ name, client }, args) {
|
|
394
|
-
try {
|
|
395
|
-
const result = await client.client.getPrompt({ name, arguments: args });
|
|
396
|
-
return result.messages.map(
|
|
397
|
-
(message) => ({
|
|
398
|
-
role: message.role,
|
|
399
|
-
content: [
|
|
400
|
-
message.content.type === "text" ? {
|
|
401
|
-
type: "text",
|
|
402
|
-
text: message.content.text
|
|
403
|
-
} : {
|
|
404
|
-
type: "image",
|
|
405
|
-
source: {
|
|
406
|
-
data: String(message.content.data),
|
|
407
|
-
media_type: message.content.mimeType,
|
|
408
|
-
type: "base64"
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
]
|
|
412
|
-
})
|
|
413
|
-
);
|
|
414
|
-
} catch (error) {
|
|
415
|
-
logMCPError(
|
|
416
|
-
client.name,
|
|
417
|
-
`Error running command '${name}': ${error instanceof Error ? error.message : String(error)}`
|
|
418
|
-
);
|
|
419
|
-
throw error;
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
export {
|
|
423
|
-
addMcpServer,
|
|
424
|
-
ensureConfigScope,
|
|
425
|
-
getClients,
|
|
426
|
-
getMCPCommands,
|
|
427
|
-
getMCPTools,
|
|
428
|
-
getMcpServer,
|
|
429
|
-
getMcprcServerStatus,
|
|
430
|
-
listMCPServers,
|
|
431
|
-
parseEnvVars,
|
|
432
|
-
removeMcpServer,
|
|
433
|
-
runCommand
|
|
434
|
-
};
|
|
435
|
-
//# sourceMappingURL=mcpClient.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/services/mcpClient.ts"],
|
|
4
|
-
"sourcesContent": ["import { zipObject } from 'lodash-es'\nimport {\n getCurrentProjectConfig,\n McpServerConfig,\n saveCurrentProjectConfig,\n getGlobalConfig,\n saveGlobalConfig,\n getMcprcConfig,\n addMcprcServerForTesting,\n removeMcprcServerForTesting,\n} from '../utils/config.js'\nimport { existsSync, readFileSync, writeFileSync } from 'fs'\nimport { join } from 'path'\nimport { getCwd } from '../utils/state'\nimport { safeParseJSON } from '../utils/json'\nimport {\n ImageBlockParam,\n MessageParam,\n ToolResultBlockParam,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js'\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'\nimport { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js'\nimport {\n CallToolResultSchema,\n ClientRequest,\n ListPromptsResult,\n ListPromptsResultSchema,\n ListToolsResult,\n ListToolsResultSchema,\n Result,\n ResultSchema,\n} from '@modelcontextprotocol/sdk/types.js'\nimport { memoize, pickBy } from 'lodash-es'\nimport type { Tool } from '../Tool'\nimport { MCPTool } from '../tools/MCPTool/MCPTool'\nimport { logMCPError } from '../utils/log'\nimport { Command } from '../commands'\nimport { logEvent } from '../services/statsig'\nimport { PRODUCT_COMMAND } from '../constants/product.js'\n\ntype McpName = string\n\nexport function parseEnvVars(\n rawEnvArgs: string[] | undefined,\n): Record<string, string> {\n const parsedEnv: Record<string, string> = {}\n\n // Parse individual env vars\n if (rawEnvArgs) {\n for (const envStr of rawEnvArgs) {\n const [key, ...valueParts] = envStr.split('=')\n if (!key || valueParts.length === 0) {\n throw new Error(\n `Invalid environment variable format: ${envStr}, environment variables should be added as: -e KEY1=value1 -e KEY2=value2`,\n )\n }\n parsedEnv[key] = valueParts.join('=')\n }\n }\n return parsedEnv\n}\n\nconst VALID_SCOPES = ['project', 'global', 'mcprc'] as const\ntype ConfigScope = (typeof VALID_SCOPES)[number]\nconst EXTERNAL_SCOPES = ['project', 'global'] as ConfigScope[]\n\nexport function ensureConfigScope(scope?: string): ConfigScope {\n if (!scope) return 'project'\n\n const scopesToCheck =\n process.env.USER_TYPE === 'external' ? EXTERNAL_SCOPES : VALID_SCOPES\n\n if (!scopesToCheck.includes(scope as ConfigScope)) {\n throw new Error(\n `Invalid scope: ${scope}. Must be one of: ${scopesToCheck.join(', ')}`,\n )\n }\n\n return scope as ConfigScope\n}\n\nexport function addMcpServer(\n name: McpName,\n server: McpServerConfig,\n scope: ConfigScope = 'project',\n): void {\n if (scope === 'mcprc') {\n if (process.env.NODE_ENV === 'test') {\n addMcprcServerForTesting(name, server)\n } else {\n const mcprcPath = join(getCwd(), '.mcprc')\n let mcprcConfig: Record<string, McpServerConfig> = {}\n\n // Read existing config if present\n if (existsSync(mcprcPath)) {\n try {\n const mcprcContent = readFileSync(mcprcPath, 'utf-8')\n const existingConfig = safeParseJSON(mcprcContent)\n if (existingConfig && typeof existingConfig === 'object') {\n mcprcConfig = existingConfig as Record<string, McpServerConfig>\n }\n } catch {\n // If we can't read/parse, start with empty config\n }\n }\n\n // Add the server\n mcprcConfig[name] = server\n\n // Write back to .mcprc\n try {\n writeFileSync(mcprcPath, JSON.stringify(mcprcConfig, null, 2), 'utf-8')\n } catch (error) {\n throw new Error(`Failed to write to .mcprc: ${error}`)\n }\n }\n } else if (scope === 'global') {\n const config = getGlobalConfig()\n if (!config.mcpServers) {\n config.mcpServers = {}\n }\n config.mcpServers[name] = server\n saveGlobalConfig(config)\n } else {\n const config = getCurrentProjectConfig()\n if (!config.mcpServers) {\n config.mcpServers = {}\n }\n config.mcpServers[name] = server\n saveCurrentProjectConfig(config)\n }\n}\n\nexport function removeMcpServer(\n name: McpName,\n scope: ConfigScope = 'project',\n): void {\n if (scope === 'mcprc') {\n if (process.env.NODE_ENV === 'test') {\n removeMcprcServerForTesting(name)\n } else {\n const mcprcPath = join(getCwd(), '.mcprc')\n if (!existsSync(mcprcPath)) {\n throw new Error('No .mcprc file found in this directory')\n }\n\n try {\n const mcprcContent = readFileSync(mcprcPath, 'utf-8')\n const mcprcConfig = safeParseJSON(mcprcContent) as Record<\n string,\n McpServerConfig\n > | null\n\n if (\n !mcprcConfig ||\n typeof mcprcConfig !== 'object' ||\n !mcprcConfig[name]\n ) {\n throw new Error(`No MCP server found with name: ${name} in .mcprc`)\n }\n\n delete mcprcConfig[name]\n writeFileSync(mcprcPath, JSON.stringify(mcprcConfig, null, 2), 'utf-8')\n } catch (error) {\n if (error instanceof Error) {\n throw error\n }\n throw new Error(`Failed to remove from .mcprc: ${error}`)\n }\n }\n } else if (scope === 'global') {\n const config = getGlobalConfig()\n if (!config.mcpServers?.[name]) {\n throw new Error(`No global MCP server found with name: ${name}`)\n }\n delete config.mcpServers[name]\n saveGlobalConfig(config)\n } else {\n const config = getCurrentProjectConfig()\n if (!config.mcpServers?.[name]) {\n throw new Error(`No local MCP server found with name: ${name}`)\n }\n delete config.mcpServers[name]\n saveCurrentProjectConfig(config)\n }\n}\n\nexport function listMCPServers(): Record<string, McpServerConfig> {\n const globalConfig = getGlobalConfig()\n const mcprcConfig = getMcprcConfig()\n const projectConfig = getCurrentProjectConfig()\n return {\n ...(globalConfig.mcpServers ?? {}),\n ...(mcprcConfig ?? {}), // mcprc configs override global ones\n ...(projectConfig.mcpServers ?? {}), // Project configs override mcprc ones\n }\n}\n\nexport type ScopedMcpServerConfig = McpServerConfig & {\n scope: ConfigScope\n}\n\nexport function getMcpServer(name: McpName): ScopedMcpServerConfig | undefined {\n const projectConfig = getCurrentProjectConfig()\n const mcprcConfig = getMcprcConfig()\n const globalConfig = getGlobalConfig()\n\n // Check each scope in order of precedence\n if (projectConfig.mcpServers?.[name]) {\n return { ...projectConfig.mcpServers[name], scope: 'project' }\n }\n\n if (mcprcConfig?.[name]) {\n return { ...mcprcConfig[name], scope: 'mcprc' }\n }\n\n if (globalConfig.mcpServers?.[name]) {\n return { ...globalConfig.mcpServers[name], scope: 'global' }\n }\n\n return undefined\n}\n\nasync function connectToServer(\n name: string,\n serverRef: McpServerConfig,\n): Promise<Client> {\n const transport =\n serverRef.type === 'sse'\n ? new SSEClientTransport(new URL(serverRef.url))\n : new StdioClientTransport({\n command: serverRef.command,\n args: serverRef.args,\n env: {\n ...process.env,\n ...serverRef.env,\n } as Record<string, string>,\n stderr: 'pipe', // prevents error output from the MCP server from printing to the UI\n })\n\n const client = new Client(\n {\n name: PRODUCT_COMMAND,\n version: '0.1.0',\n },\n {\n capabilities: {},\n },\n )\n\n // Add a timeout to connection attempts to prevent tests from hanging indefinitely\n const CONNECTION_TIMEOUT_MS = 5000\n const connectPromise = client.connect(transport)\n const timeoutPromise = new Promise<never>((_, reject) => {\n const timeoutId = setTimeout(() => {\n reject(\n new Error(\n `Connection to MCP server \"${name}\" timed out after ${CONNECTION_TIMEOUT_MS}ms`,\n ),\n )\n }, CONNECTION_TIMEOUT_MS)\n\n // Clean up timeout if connect resolves or rejects\n connectPromise.then(\n () => clearTimeout(timeoutId),\n () => clearTimeout(timeoutId),\n )\n })\n\n await Promise.race([connectPromise, timeoutPromise])\n\n if (serverRef.type === 'stdio') {\n ;(transport as StdioClientTransport).stderr?.on('data', (data: Buffer) => {\n const errorText = data.toString().trim()\n if (errorText) {\n logMCPError(name, `Server stderr: ${errorText}`)\n }\n })\n }\n return client\n}\n\ntype ConnectedClient = {\n client: Client\n name: string\n type: 'connected'\n}\ntype FailedClient = {\n name: string\n type: 'failed'\n}\nexport type WrappedClient = ConnectedClient | FailedClient\n\nexport function getMcprcServerStatus(\n serverName: string,\n): 'approved' | 'rejected' | 'pending' {\n const config = getCurrentProjectConfig()\n if (config.approvedMcprcServers?.includes(serverName)) {\n return 'approved'\n }\n if (config.rejectedMcprcServers?.includes(serverName)) {\n return 'rejected'\n }\n return 'pending'\n}\n\nexport const getClients = memoize(async (): Promise<WrappedClient[]> => {\n // TODO: This is a temporary fix for a hang during npm run verify in CI.\n // We need to investigate why MCP client connections hang in CI verify but not in CI tests.\n if (process.env.CI && process.env.NODE_ENV !== 'test') {\n return []\n }\n\n const globalServers = getGlobalConfig().mcpServers ?? {}\n const mcprcServers = getMcprcConfig()\n const projectServers = getCurrentProjectConfig().mcpServers ?? {}\n\n // Filter mcprc servers to only include approved ones\n const approvedMcprcServers = pickBy(\n mcprcServers,\n (_, name) => getMcprcServerStatus(name) === 'approved',\n )\n\n const allServers = {\n ...globalServers,\n ...approvedMcprcServers, // Approved .mcprc servers override global ones\n ...projectServers, // Project servers take highest precedence\n }\n\n return await Promise.all(\n Object.entries(allServers).map(async ([name, serverRef]) => {\n try {\n const client = await connectToServer(name, serverRef as McpServerConfig)\n logEvent('tengu_mcp_server_connection_succeeded', {})\n return { name, client, type: 'connected' as const }\n } catch (error) {\n logEvent('tengu_mcp_server_connection_failed', {})\n logMCPError(\n name,\n `Connection failed: ${error instanceof Error ? error.message : String(error)}`,\n )\n return { name, type: 'failed' as const }\n }\n }),\n )\n})\n\nasync function requestAll<\n ResultT extends Result,\n ResultSchemaT extends typeof ResultSchema,\n>(\n req: ClientRequest,\n resultSchema: ResultSchemaT,\n requiredCapability: string,\n): Promise<{ client: ConnectedClient; result: ResultT }[]> {\n const clients = await getClients()\n const results = await Promise.allSettled(\n clients.map(async client => {\n if (client.type === 'failed') return null\n\n try {\n const capabilities = await client.client.getServerCapabilities()\n if (!capabilities?.[requiredCapability]) {\n return null\n }\n return {\n client,\n result: (await client.client.request(req, resultSchema)) as ResultT,\n }\n } catch (error) {\n if (client.type === 'connected') {\n logMCPError(\n client.name,\n `Failed to request '${req.method}': ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n return null\n }\n }),\n )\n return results\n .filter(\n (\n result,\n ): result is PromiseFulfilledResult<{\n client: ConnectedClient\n result: ResultT\n } | null> => result.status === 'fulfilled',\n )\n .map(result => result.value)\n .filter(\n (result): result is { client: ConnectedClient; result: ResultT } =>\n result !== null,\n )\n}\n\nexport const getMCPTools = memoize(async (): Promise<Tool[]> => {\n const toolsList = await requestAll<\n ListToolsResult,\n typeof ListToolsResultSchema\n >(\n {\n method: 'tools/list',\n },\n ListToolsResultSchema,\n 'tools',\n )\n\n // TODO: Add zod schema validation\n return toolsList.flatMap(({ client, result: { tools } }) =>\n tools.map(\n (tool): Tool => ({\n ...MCPTool,\n name: 'mcp__' + client.name + '__' + tool.name,\n async description() {\n return tool.description ?? ''\n },\n async prompt() {\n return tool.description ?? ''\n },\n inputJSONSchema: tool.inputSchema as Tool['inputJSONSchema'],\n async validateInput(input, context) {\n // MCP tools handle their own validation through their schemas\n return { result: true }\n },\n async *call(args: Record<string, unknown>, context) {\n const data = await callMCPTool({ client, tool: tool.name, args })\n yield {\n type: 'result' as const,\n data,\n resultForAssistant: data,\n }\n },\n userFacingName() {\n return `${client.name}:${tool.name} (MCP)`\n },\n }),\n ),\n )\n})\n\nasync function callMCPTool({\n client: { client, name },\n tool,\n args,\n}: {\n client: ConnectedClient\n tool: string\n args: Record<string, unknown>\n}): Promise<ToolResultBlockParam['content']> {\n const result = await client.callTool(\n {\n name: tool,\n arguments: args,\n },\n CallToolResultSchema,\n )\n\n if ('isError' in result && result.isError) {\n const errorMessage = `Error calling tool ${tool}: ${result.error}`\n logMCPError(name, errorMessage)\n throw Error(errorMessage)\n }\n\n // Handle toolResult-type response\n if ('toolResult' in result) {\n return String(result.toolResult)\n }\n\n // Handle content array response\n if ('content' in result && Array.isArray(result.content)) {\n return result.content.map(item => {\n if (item.type === 'image') {\n return {\n type: 'image',\n source: {\n type: 'base64',\n data: String(item.data),\n media_type: item.mimeType as ImageBlockParam.Source['media_type'],\n },\n }\n }\n return item\n })\n }\n\n throw Error(`Unexpected response format from tool ${tool}`)\n}\n\nexport const getMCPCommands = memoize(async (): Promise<Command[]> => {\n const results = await requestAll<\n ListPromptsResult,\n typeof ListPromptsResultSchema\n >(\n {\n method: 'prompts/list',\n },\n ListPromptsResultSchema,\n 'prompts',\n )\n\n return results.flatMap(({ client, result }) =>\n result.prompts?.map(_ => {\n const argNames = Object.values(_.arguments ?? {}).map(k => k.name)\n return {\n type: 'prompt',\n name: 'mcp__' + client.name + '__' + _.name,\n description: _.description ?? '',\n isEnabled: true,\n isHidden: false,\n progressMessage: 'running',\n userFacingName() {\n return `${client.name}:${_.name} (MCP)`\n },\n argNames,\n async getPromptForCommand(args: string) {\n const argsArray = args.split(' ')\n return await runCommand(\n { name: _.name, client },\n zipObject(argNames, argsArray),\n )\n },\n }\n }),\n )\n})\n\nexport async function runCommand(\n { name, client }: { name: string; client: ConnectedClient },\n args: Record<string, string>,\n): Promise<MessageParam[]> {\n try {\n const result = await client.client.getPrompt({ name, arguments: args })\n // TODO: Support type == resource\n return result.messages.map(\n (message): MessageParam => ({\n role: message.role,\n content: [\n message.content.type === 'text'\n ? {\n type: 'text',\n text: message.content.text,\n }\n : {\n type: 'image',\n source: {\n data: String(message.content.data),\n media_type: message.content\n .mimeType as ImageBlockParam.Source['media_type'],\n type: 'base64',\n },\n },\n ],\n }),\n )\n } catch (error) {\n logMCPError(\n client.name,\n `Error running command '${name}': ${error instanceof Error ? error.message : String(error)}`,\n )\n throw error\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,YAAY,cAAc,qBAAqB;AACxD,SAAS,YAAY;AACrB,SAAS,cAAc;AACvB,SAAS,qBAAqB;AAM9B,SAAS,cAAc;AACvB,SAAS,4BAA4B;AACrC,SAAS,0BAA0B;AACnC;AAAA,EACE;AAAA,EAGA;AAAA,EAEA;AAAA,OAGK;AACP,SAAS,SAAS,cAAc;AAEhC,SAAS,eAAe;AACxB,SAAS,mBAAmB;AAE5B,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAIzB,SAAS,aACd,YACwB;AACxB,QAAM,YAAoC,CAAC;AAG3C,MAAI,YAAY;AACd,eAAW,UAAU,YAAY;AAC/B,YAAM,CAAC,KAAK,GAAG,UAAU,IAAI,OAAO,MAAM,GAAG;AAC7C,UAAI,CAAC,OAAO,WAAW,WAAW,GAAG;AACnC,cAAM,IAAI;AAAA,UACR,wCAAwC,MAAM;AAAA,QAChD;AAAA,MACF;AACA,gBAAU,GAAG,IAAI,WAAW,KAAK,GAAG;AAAA,IACtC;AAAA,EACF;AACA,SAAO;AACT;AAEA,MAAM,eAAe,CAAC,WAAW,UAAU,OAAO;AAElD,MAAM,kBAAkB,CAAC,WAAW,QAAQ;AAErC,SAAS,kBAAkB,OAA6B;AAC7D,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,gBACJ,QAAQ,IAAI,cAAc,aAAa,kBAAkB;AAE3D,MAAI,CAAC,cAAc,SAAS,KAAoB,GAAG;AACjD,UAAM,IAAI;AAAA,MACR,kBAAkB,KAAK,qBAAqB,cAAc,KAAK,IAAI,CAAC;AAAA,IACtE;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,aACd,MACA,QACA,QAAqB,WACf;AACN,MAAI,UAAU,SAAS;AACrB,QAAI,QAAQ,IAAI,aAAa,QAAQ;AACnC,+BAAyB,MAAM,MAAM;AAAA,IACvC,OAAO;AACL,YAAM,YAAY,KAAK,OAAO,GAAG,QAAQ;AACzC,UAAI,cAA+C,CAAC;AAGpD,UAAI,WAAW,SAAS,GAAG;AACzB,YAAI;AACF,gBAAM,eAAe,aAAa,WAAW,OAAO;AACpD,gBAAM,iBAAiB,cAAc,YAAY;AACjD,cAAI,kBAAkB,OAAO,mBAAmB,UAAU;AACxD,0BAAc;AAAA,UAChB;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF;AAGA,kBAAY,IAAI,IAAI;AAGpB,UAAI;AACF,sBAAc,WAAW,KAAK,UAAU,aAAa,MAAM,CAAC,GAAG,OAAO;AAAA,MACxE,SAAS,OAAO;AACd,cAAM,IAAI,MAAM,8BAA8B,KAAK,EAAE;AAAA,MACvD;AAAA,IACF;AAAA,EACF,WAAW,UAAU,UAAU;AAC7B,UAAM,SAAS,gBAAgB;AAC/B,QAAI,CAAC,OAAO,YAAY;AACtB,aAAO,aAAa,CAAC;AAAA,IACvB;AACA,WAAO,WAAW,IAAI,IAAI;AAC1B,qBAAiB,MAAM;AAAA,EACzB,OAAO;AACL,UAAM,SAAS,wBAAwB;AACvC,QAAI,CAAC,OAAO,YAAY;AACtB,aAAO,aAAa,CAAC;AAAA,IACvB;AACA,WAAO,WAAW,IAAI,IAAI;AAC1B,6BAAyB,MAAM;AAAA,EACjC;AACF;AAEO,SAAS,gBACd,MACA,QAAqB,WACf;AACN,MAAI,UAAU,SAAS;AACrB,QAAI,QAAQ,IAAI,aAAa,QAAQ;AACnC,kCAA4B,IAAI;AAAA,IAClC,OAAO;AACL,YAAM,YAAY,KAAK,OAAO,GAAG,QAAQ;AACzC,UAAI,CAAC,WAAW,SAAS,GAAG;AAC1B,cAAM,IAAI,MAAM,wCAAwC;AAAA,MAC1D;AAEA,UAAI;AACF,cAAM,eAAe,aAAa,WAAW,OAAO;AACpD,cAAM,cAAc,cAAc,YAAY;AAK9C,YACE,CAAC,eACD,OAAO,gBAAgB,YACvB,CAAC,YAAY,IAAI,GACjB;AACA,gBAAM,IAAI,MAAM,kCAAkC,IAAI,YAAY;AAAA,QACpE;AAEA,eAAO,YAAY,IAAI;AACvB,sBAAc,WAAW,KAAK,UAAU,aAAa,MAAM,CAAC,GAAG,OAAO;AAAA,MACxE,SAAS,OAAO;AACd,YAAI,iBAAiB,OAAO;AAC1B,gBAAM;AAAA,QACR;AACA,cAAM,IAAI,MAAM,iCAAiC,KAAK,EAAE;AAAA,MAC1D;AAAA,IACF;AAAA,EACF,WAAW,UAAU,UAAU;AAC7B,UAAM,SAAS,gBAAgB;AAC/B,QAAI,CAAC,OAAO,aAAa,IAAI,GAAG;AAC9B,YAAM,IAAI,MAAM,yCAAyC,IAAI,EAAE;AAAA,IACjE;AACA,WAAO,OAAO,WAAW,IAAI;AAC7B,qBAAiB,MAAM;AAAA,EACzB,OAAO;AACL,UAAM,SAAS,wBAAwB;AACvC,QAAI,CAAC,OAAO,aAAa,IAAI,GAAG;AAC9B,YAAM,IAAI,MAAM,wCAAwC,IAAI,EAAE;AAAA,IAChE;AACA,WAAO,OAAO,WAAW,IAAI;AAC7B,6BAAyB,MAAM;AAAA,EACjC;AACF;AAEO,SAAS,iBAAkD;AAChE,QAAM,eAAe,gBAAgB;AACrC,QAAM,cAAc,eAAe;AACnC,QAAM,gBAAgB,wBAAwB;AAC9C,SAAO;AAAA,IACL,GAAI,aAAa,cAAc,CAAC;AAAA,IAChC,GAAI,eAAe,CAAC;AAAA;AAAA,IACpB,GAAI,cAAc,cAAc,CAAC;AAAA;AAAA,EACnC;AACF;AAMO,SAAS,aAAa,MAAkD;AAC7E,QAAM,gBAAgB,wBAAwB;AAC9C,QAAM,cAAc,eAAe;AACnC,QAAM,eAAe,gBAAgB;AAGrC,MAAI,cAAc,aAAa,IAAI,GAAG;AACpC,WAAO,EAAE,GAAG,cAAc,WAAW,IAAI,GAAG,OAAO,UAAU;AAAA,EAC/D;AAEA,MAAI,cAAc,IAAI,GAAG;AACvB,WAAO,EAAE,GAAG,YAAY,IAAI,GAAG,OAAO,QAAQ;AAAA,EAChD;AAEA,MAAI,aAAa,aAAa,IAAI,GAAG;AACnC,WAAO,EAAE,GAAG,aAAa,WAAW,IAAI,GAAG,OAAO,SAAS;AAAA,EAC7D;AAEA,SAAO;AACT;AAEA,eAAe,gBACb,MACA,WACiB;AACjB,QAAM,YACJ,UAAU,SAAS,QACf,IAAI,mBAAmB,IAAI,IAAI,UAAU,GAAG,CAAC,IAC7C,IAAI,qBAAqB;AAAA,IACvB,SAAS,UAAU;AAAA,IACnB,MAAM,UAAU;AAAA,IAChB,KAAK;AAAA,MACH,GAAG,QAAQ;AAAA,MACX,GAAG,UAAU;AAAA,IACf;AAAA,IACA,QAAQ;AAAA;AAAA,EACV,CAAC;AAEP,QAAM,SAAS,IAAI;AAAA,IACjB;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA;AAAA,MACE,cAAc,CAAC;AAAA,IACjB;AAAA,EACF;AAGA,QAAM,wBAAwB;AAC9B,QAAM,iBAAiB,OAAO,QAAQ,SAAS;AAC/C,QAAM,iBAAiB,IAAI,QAAe,CAAC,GAAG,WAAW;AACvD,UAAM,YAAY,WAAW,MAAM;AACjC;AAAA,QACE,IAAI;AAAA,UACF,6BAA6B,IAAI,qBAAqB,qBAAqB;AAAA,QAC7E;AAAA,MACF;AAAA,IACF,GAAG,qBAAqB;AAGxB,mBAAe;AAAA,MACb,MAAM,aAAa,SAAS;AAAA,MAC5B,MAAM,aAAa,SAAS;AAAA,IAC9B;AAAA,EACF,CAAC;AAED,QAAM,QAAQ,KAAK,CAAC,gBAAgB,cAAc,CAAC;AAEnD,MAAI,UAAU,SAAS,SAAS;AAC9B;AAAC,IAAC,UAAmC,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AACxE,YAAM,YAAY,KAAK,SAAS,EAAE,KAAK;AACvC,UAAI,WAAW;AACb,oBAAY,MAAM,kBAAkB,SAAS,EAAE;AAAA,MACjD;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;AAaO,SAAS,qBACd,YACqC;AACrC,QAAM,SAAS,wBAAwB;AACvC,MAAI,OAAO,sBAAsB,SAAS,UAAU,GAAG;AACrD,WAAO;AAAA,EACT;AACA,MAAI,OAAO,sBAAsB,SAAS,UAAU,GAAG;AACrD,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,MAAM,aAAa,QAAQ,YAAsC;AAGtE,MAAI,QAAQ,IAAI,MAAM,QAAQ,IAAI,aAAa,QAAQ;AACrD,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,gBAAgB,gBAAgB,EAAE,cAAc,CAAC;AACvD,QAAM,eAAe,eAAe;AACpC,QAAM,iBAAiB,wBAAwB,EAAE,cAAc,CAAC;AAGhE,QAAM,uBAAuB;AAAA,IAC3B;AAAA,IACA,CAAC,GAAG,SAAS,qBAAqB,IAAI,MAAM;AAAA,EAC9C;AAEA,QAAM,aAAa;AAAA,IACjB,GAAG;AAAA,IACH,GAAG;AAAA;AAAA,IACH,GAAG;AAAA;AAAA,EACL;AAEA,SAAO,MAAM,QAAQ;AAAA,IACnB,OAAO,QAAQ,UAAU,EAAE,IAAI,OAAO,CAAC,MAAM,SAAS,MAAM;AAC1D,UAAI;AACF,cAAM,SAAS,MAAM,gBAAgB,MAAM,SAA4B;AACvE,iBAAS,yCAAyC,CAAC,CAAC;AACpD,eAAO,EAAE,MAAM,QAAQ,MAAM,YAAqB;AAAA,MACpD,SAAS,OAAO;AACd,iBAAS,sCAAsC,CAAC,CAAC;AACjD;AAAA,UACE;AAAA,UACA,sBAAsB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,QAC9E;AACA,eAAO,EAAE,MAAM,MAAM,SAAkB;AAAA,MACzC;AAAA,IACF,CAAC;AAAA,EACH;AACF,CAAC;AAED,eAAe,WAIb,KACA,cACA,oBACyD;AACzD,QAAM,UAAU,MAAM,WAAW;AACjC,QAAM,UAAU,MAAM,QAAQ;AAAA,IAC5B,QAAQ,IAAI,OAAM,WAAU;AAC1B,UAAI,OAAO,SAAS,SAAU,QAAO;AAErC,UAAI;AACF,cAAM,eAAe,MAAM,OAAO,OAAO,sBAAsB;AAC/D,YAAI,CAAC,eAAe,kBAAkB,GAAG;AACvC,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,UACL;AAAA,UACA,QAAS,MAAM,OAAO,OAAO,QAAQ,KAAK,YAAY;AAAA,QACxD;AAAA,MACF,SAAS,OAAO;AACd,YAAI,OAAO,SAAS,aAAa;AAC/B;AAAA,YACE,OAAO;AAAA,YACP,sBAAsB,IAAI,MAAM,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,UAC9F;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO,QACJ;AAAA,IACC,CACE,WAIW,OAAO,WAAW;AAAA,EACjC,EACC,IAAI,YAAU,OAAO,KAAK,EAC1B;AAAA,IACC,CAAC,WACC,WAAW;AAAA,EACf;AACJ;AAEO,MAAM,cAAc,QAAQ,YAA6B;AAC9D,QAAM,YAAY,MAAM;AAAA,IAItB;AAAA,MACE,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAGA,SAAO,UAAU;AAAA,IAAQ,CAAC,EAAE,QAAQ,QAAQ,EAAE,MAAM,EAAE,MACpD,MAAM;AAAA,MACJ,CAAC,UAAgB;AAAA,QACf,GAAG;AAAA,QACH,MAAM,UAAU,OAAO,OAAO,OAAO,KAAK;AAAA,QAC1C,MAAM,cAAc;AAClB,iBAAO,KAAK,eAAe;AAAA,QAC7B;AAAA,QACA,MAAM,SAAS;AACb,iBAAO,KAAK,eAAe;AAAA,QAC7B;AAAA,QACA,iBAAiB,KAAK;AAAA,QACtB,MAAM,cAAc,OAAO,SAAS;AAElC,iBAAO,EAAE,QAAQ,KAAK;AAAA,QACxB;AAAA,QACA,OAAO,KAAK,MAA+B,SAAS;AAClD,gBAAM,OAAO,MAAM,YAAY,EAAE,QAAQ,MAAM,KAAK,MAAM,KAAK,CAAC;AAChE,gBAAM;AAAA,YACJ,MAAM;AAAA,YACN;AAAA,YACA,oBAAoB;AAAA,UACtB;AAAA,QACF;AAAA,QACA,iBAAiB;AACf,iBAAO,GAAG,OAAO,IAAI,IAAI,KAAK,IAAI;AAAA,QACpC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAED,eAAe,YAAY;AAAA,EACzB,QAAQ,EAAE,QAAQ,KAAK;AAAA,EACvB;AAAA,EACA;AACF,GAI6C;AAC3C,QAAM,SAAS,MAAM,OAAO;AAAA,IAC1B;AAAA,MACE,MAAM;AAAA,MACN,WAAW;AAAA,IACb;AAAA,IACA;AAAA,EACF;AAEA,MAAI,aAAa,UAAU,OAAO,SAAS;AACzC,UAAM,eAAe,sBAAsB,IAAI,KAAK,OAAO,KAAK;AAChE,gBAAY,MAAM,YAAY;AAC9B,UAAM,MAAM,YAAY;AAAA,EAC1B;AAGA,MAAI,gBAAgB,QAAQ;AAC1B,WAAO,OAAO,OAAO,UAAU;AAAA,EACjC;AAGA,MAAI,aAAa,UAAU,MAAM,QAAQ,OAAO,OAAO,GAAG;AACxD,WAAO,OAAO,QAAQ,IAAI,UAAQ;AAChC,UAAI,KAAK,SAAS,SAAS;AACzB,eAAO;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,MAAM,OAAO,KAAK,IAAI;AAAA,YACtB,YAAY,KAAK;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,QAAM,MAAM,wCAAwC,IAAI,EAAE;AAC5D;AAEO,MAAM,iBAAiB,QAAQ,YAAgC;AACpE,QAAM,UAAU,MAAM;AAAA,IAIpB;AAAA,MACE,QAAQ;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO,QAAQ;AAAA,IAAQ,CAAC,EAAE,QAAQ,OAAO,MACvC,OAAO,SAAS,IAAI,OAAK;AACvB,YAAM,WAAW,OAAO,OAAO,EAAE,aAAa,CAAC,CAAC,EAAE,IAAI,OAAK,EAAE,IAAI;AACjE,aAAO;AAAA,QACL,MAAM;AAAA,QACN,MAAM,UAAU,OAAO,OAAO,OAAO,EAAE;AAAA,QACvC,aAAa,EAAE,eAAe;AAAA,QAC9B,WAAW;AAAA,QACX,UAAU;AAAA,QACV,iBAAiB;AAAA,QACjB,iBAAiB;AACf,iBAAO,GAAG,OAAO,IAAI,IAAI,EAAE,IAAI;AAAA,QACjC;AAAA,QACA;AAAA,QACA,MAAM,oBAAoB,MAAc;AACtC,gBAAM,YAAY,KAAK,MAAM,GAAG;AAChC,iBAAO,MAAM;AAAA,YACX,EAAE,MAAM,EAAE,MAAM,OAAO;AAAA,YACvB,UAAU,UAAU,SAAS;AAAA,UAC/B;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF,CAAC;AAED,eAAsB,WACpB,EAAE,MAAM,OAAO,GACf,MACyB;AACzB,MAAI;AACF,UAAM,SAAS,MAAM,OAAO,OAAO,UAAU,EAAE,MAAM,WAAW,KAAK,CAAC;AAEtE,WAAO,OAAO,SAAS;AAAA,MACrB,CAAC,aAA2B;AAAA,QAC1B,MAAM,QAAQ;AAAA,QACd,SAAS;AAAA,UACP,QAAQ,QAAQ,SAAS,SACrB;AAAA,YACE,MAAM;AAAA,YACN,MAAM,QAAQ,QAAQ;AAAA,UACxB,IACA;AAAA,YACE,MAAM;AAAA,YACN,QAAQ;AAAA,cACN,MAAM,OAAO,QAAQ,QAAQ,IAAI;AAAA,cACjC,YAAY,QAAQ,QACjB;AAAA,cACH,MAAM;AAAA,YACR;AAAA,UACF;AAAA,QACN;AAAA,MACF;AAAA,IACF;AAAA,EACF,SAAS,OAAO;AACd;AAAA,MACE,OAAO;AAAA,MACP,0BAA0B,IAAI,MAAM,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,IAC5F;AACA,UAAM;AAAA,EACR;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { render } from "ink";
|
|
3
|
-
import { MCPServerMultiselectDialog } from "../components/MCPServerMultiselectDialog.js";
|
|
4
|
-
import { MCPServerApprovalDialog } from "../components/MCPServerApprovalDialog.js";
|
|
5
|
-
import { getMcprcServerStatus } from "./mcpClient.js";
|
|
6
|
-
import { getMcprcConfig } from "../utils/config.js";
|
|
7
|
-
async function handleMcprcServerApprovals() {
|
|
8
|
-
const mcprcServers = getMcprcConfig();
|
|
9
|
-
const pendingServers = Object.keys(mcprcServers).filter(
|
|
10
|
-
(serverName) => getMcprcServerStatus(serverName) === "pending"
|
|
11
|
-
);
|
|
12
|
-
if (pendingServers.length === 0) {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
await new Promise((resolve) => {
|
|
16
|
-
const clearScreenAndResolve = () => {
|
|
17
|
-
process.stdout.write("\x1B[2J\x1B[3J\x1B[H", () => {
|
|
18
|
-
resolve();
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
if (pendingServers.length === 1 && pendingServers[0] !== void 0) {
|
|
22
|
-
const result = render(
|
|
23
|
-
/* @__PURE__ */ React.createElement(
|
|
24
|
-
MCPServerApprovalDialog,
|
|
25
|
-
{
|
|
26
|
-
serverName: pendingServers[0],
|
|
27
|
-
onDone: () => {
|
|
28
|
-
result.unmount?.();
|
|
29
|
-
clearScreenAndResolve();
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
),
|
|
33
|
-
{ exitOnCtrlC: false }
|
|
34
|
-
);
|
|
35
|
-
} else {
|
|
36
|
-
const result = render(
|
|
37
|
-
/* @__PURE__ */ React.createElement(
|
|
38
|
-
MCPServerMultiselectDialog,
|
|
39
|
-
{
|
|
40
|
-
serverNames: pendingServers,
|
|
41
|
-
onDone: () => {
|
|
42
|
-
result.unmount?.();
|
|
43
|
-
clearScreenAndResolve();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
),
|
|
47
|
-
{ exitOnCtrlC: false }
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
export {
|
|
53
|
-
handleMcprcServerApprovals
|
|
54
|
-
};
|
|
55
|
-
//# sourceMappingURL=mcpServerApproval.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/services/mcpServerApproval.tsx"],
|
|
4
|
-
"sourcesContent": ["import React from 'react'\nimport { render } from 'ink'\nimport { MCPServerMultiselectDialog } from '../components/MCPServerMultiselectDialog'\nimport { MCPServerApprovalDialog } from '../components/MCPServerApprovalDialog'\nimport { getMcprcServerStatus } from './mcpClient'\nimport { getMcprcConfig } from '../utils/config'\n\nexport async function handleMcprcServerApprovals(): Promise<void> {\n const mcprcServers = getMcprcConfig()\n const pendingServers = Object.keys(mcprcServers).filter(\n serverName => getMcprcServerStatus(serverName) === 'pending',\n )\n\n if (pendingServers.length === 0) {\n return\n }\n\n await new Promise<void>(resolve => {\n const clearScreenAndResolve = () => {\n // Clear screen after dialog\n process.stdout.write('\\x1b[2J\\x1b[3J\\x1b[H', () => {\n resolve()\n })\n }\n\n if (pendingServers.length === 1 && pendingServers[0] !== undefined) {\n const result = render(\n <MCPServerApprovalDialog\n serverName={pendingServers[0]}\n onDone={() => {\n result.unmount?.()\n clearScreenAndResolve()\n }}\n />,\n { exitOnCtrlC: false },\n )\n } else {\n const result = render(\n <MCPServerMultiselectDialog\n serverNames={pendingServers}\n onDone={() => {\n result.unmount?.()\n clearScreenAndResolve()\n }}\n />,\n { exitOnCtrlC: false },\n )\n }\n })\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAAO,WAAW;AAClB,SAAS,cAAc;AACvB,SAAS,kCAAkC;AAC3C,SAAS,+BAA+B;AACxC,SAAS,4BAA4B;AACrC,SAAS,sBAAsB;AAE/B,eAAsB,6BAA4C;AAChE,QAAM,eAAe,eAAe;AACpC,QAAM,iBAAiB,OAAO,KAAK,YAAY,EAAE;AAAA,IAC/C,gBAAc,qBAAqB,UAAU,MAAM;AAAA,EACrD;AAEA,MAAI,eAAe,WAAW,GAAG;AAC/B;AAAA,EACF;AAEA,QAAM,IAAI,QAAc,aAAW;AACjC,UAAM,wBAAwB,MAAM;AAElC,cAAQ,OAAO,MAAM,wBAAwB,MAAM;AACjD,gBAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAEA,QAAI,eAAe,WAAW,KAAK,eAAe,CAAC,MAAM,QAAW;AAClE,YAAM,SAAS;AAAA,QACb;AAAA,UAAC;AAAA;AAAA,YACC,YAAY,eAAe,CAAC;AAAA,YAC5B,QAAQ,MAAM;AACZ,qBAAO,UAAU;AACjB,oCAAsB;AAAA,YACxB;AAAA;AAAA,QACF;AAAA,QACA,EAAE,aAAa,MAAM;AAAA,MACvB;AAAA,IACF,OAAO;AACL,YAAM,SAAS;AAAA,QACb;AAAA,UAAC;AAAA;AAAA,YACC,aAAa;AAAA,YACb,QAAQ,MAAM;AACZ,qBAAO,UAAU;AACjB,oCAAsB;AAAA,YACxB;AAAA;AAAA,QACF;AAAA,QACA,EAAE,aAAa,MAAM;AAAA,MACvB;AAAA,IACF;AAAA,EACF,CAAC;AACH;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/services/mentionProcessor.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Mention Processor Service\n * Handles @agent and @file mentions through the system reminder infrastructure\n * Designed to integrate naturally with the existing event-driven architecture\n */\n\nimport { emitReminderEvent } from './systemReminder'\nimport { getAvailableAgentTypes } from '../utils/agentLoader'\nimport { existsSync } from 'fs'\nimport { resolve } from 'path'\nimport { getCwd } from '../utils/state'\n\nexport interface MentionContext {\n type: 'agent' | 'file'\n mention: string\n resolved: string\n exists: boolean\n metadata?: any\n}\n\nexport interface ProcessedMentions {\n agents: MentionContext[]\n files: MentionContext[]\n hasAgentMentions: boolean\n hasFileMentions: boolean\n}\n\nclass MentionProcessorService {\n // Centralized mention patterns - single source of truth\n private static readonly MENTION_PATTERNS = {\n runAgent: /@(run-agent-[\\w\\-]+)/g,\n agent: /@(agent-[\\w\\-]+)/g, // Legacy support\n askModel: /@(ask-[\\w\\-]+)/g,\n file: /@([a-zA-Z0-9/._-]+(?:\\.[a-zA-Z0-9]+)?)/g\n } as const\n\n private agentCache: Map<string, boolean> = new Map()\n private lastAgentCheck: number = 0\n private CACHE_TTL = 60000 // 1 minute cache\n\n /**\n * Process mentions in user input and emit appropriate events\n * This follows the event-driven philosophy of system reminders\n */\n public async processMentions(input: string): Promise<ProcessedMentions> {\n const result: ProcessedMentions = {\n agents: [],\n files: [],\n hasAgentMentions: false,\n hasFileMentions: false,\n }\n\n try {\n\n // Process agent mentions with unified logic to eliminate code duplication\n const agentMentions = this.extractAgentMentions(input)\n if (agentMentions.length > 0) {\n await this.refreshAgentCache()\n \n for (const { mention, agentType, isAskModel } of agentMentions) {\n if (isAskModel || this.agentCache.has(agentType)) {\n result.agents.push({\n type: 'agent',\n mention,\n resolved: agentType,\n exists: true,\n metadata: isAskModel ? { type: 'ask-model' } : undefined\n })\n result.hasAgentMentions = true\n \n // Emit appropriate event based on mention type\n this.emitAgentMentionEvent(mention, agentType, isAskModel)\n }\n }\n }\n \n // No longer process @xxx format - treat as regular text (emails, etc.)\n\n // Process file mentions (exclude agent and ask-model mentions)\n const fileMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.file)]\n const processedAgentMentions = new Set(agentMentions.map(am => am.mention))\n \n for (const match of fileMatches) {\n const mention = match[1]\n \n // Skip if this is an agent or ask-model mention (already processed)\n if (mention.startsWith('run-agent-') || mention.startsWith('agent-') || mention.startsWith('ask-') || processedAgentMentions.has(mention)) {\n continue\n }\n \n // Check if it's a file\n const filePath = this.resolveFilePath(mention)\n if (existsSync(filePath)) {\n result.files.push({\n type: 'file',\n mention,\n resolved: filePath,\n exists: true,\n })\n result.hasFileMentions = true\n \n // Emit file mention event for system reminder to handle\n emitReminderEvent('file:mentioned', {\n filePath: filePath,\n originalMention: mention,\n timestamp: Date.now(),\n })\n }\n }\n\n return result\n } catch (error) {\n console.warn('[MentionProcessor] Failed to process mentions:', {\n input: input.substring(0, 100) + (input.length > 100 ? '...' : ''),\n error: error instanceof Error ? error.message : error\n })\n \n // Return empty result on error to maintain system stability\n return {\n agents: [],\n files: [],\n hasAgentMentions: false,\n hasFileMentions: false,\n }\n }\n }\n\n // Removed identifyMention method as it's no longer needed with separate processing\n\n /**\n * Resolve file path relative to current working directory\n */\n private resolveFilePath(mention: string): string {\n // Simple consistent logic: mention is always relative to current directory\n return resolve(getCwd(), mention)\n }\n\n /**\n * Refresh the agent cache periodically\n * This avoids hitting the agent loader on every mention\n */\n private async refreshAgentCache(): Promise<void> {\n const now = Date.now()\n if (now - this.lastAgentCheck < this.CACHE_TTL) {\n return // Cache is still fresh\n }\n\n try {\n const agents = await getAvailableAgentTypes()\n const previousCacheSize = this.agentCache.size\n this.agentCache.clear()\n \n for (const agent of agents) {\n // Store only the agent type without prefix for consistent lookup\n this.agentCache.set(agent.agentType, true)\n }\n \n this.lastAgentCheck = now\n \n // Log cache refresh for debugging mention resolution issues\n if (agents.length !== previousCacheSize) {\n console.log('[MentionProcessor] Agent cache refreshed:', {\n agentCount: agents.length,\n previousCacheSize,\n cacheAge: now - this.lastAgentCheck\n })\n }\n } catch (error) {\n console.warn('[MentionProcessor] Failed to refresh agent cache, keeping existing cache:', {\n error: error instanceof Error ? error.message : error,\n cacheSize: this.agentCache.size,\n lastRefresh: new Date(this.lastAgentCheck).toISOString()\n })\n // Keep existing cache on error to maintain functionality\n }\n }\n\n /**\n * Extract agent mentions with unified pattern matching\n * Consolidates run-agent, agent, and ask-model detection logic\n */\n private extractAgentMentions(input: string): Array<{ mention: string; agentType: string; isAskModel: boolean }> {\n const mentions: Array<{ mention: string; agentType: string; isAskModel: boolean }> = []\n \n // Process @run-agent-xxx format (preferred)\n const runAgentMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.runAgent)]\n for (const match of runAgentMatches) {\n const mention = match[1]\n const agentType = mention.replace(/^run-agent-/, '')\n mentions.push({ mention, agentType, isAskModel: false })\n }\n \n // Process @agent-xxx format (legacy)\n const agentMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.agent)]\n for (const match of agentMatches) {\n const mention = match[1]\n const agentType = mention.replace(/^agent-/, '')\n mentions.push({ mention, agentType, isAskModel: false })\n }\n \n // Process @ask-model mentions\n const askModelMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.askModel)]\n for (const match of askModelMatches) {\n const mention = match[1]\n mentions.push({ mention, agentType: mention, isAskModel: true })\n }\n \n return mentions\n }\n \n /**\n * Emit agent mention event with proper typing\n * Centralized event emission to ensure consistency\n */\n private emitAgentMentionEvent(mention: string, agentType: string, isAskModel: boolean): void {\n try {\n const eventData = {\n originalMention: mention,\n timestamp: Date.now(),\n }\n\n if (isAskModel) {\n emitReminderEvent('ask-model:mentioned', {\n ...eventData,\n modelName: mention,\n })\n } else {\n emitReminderEvent('agent:mentioned', {\n ...eventData,\n agentType,\n })\n }\n \n // Debug log for mention event emission tracking\n console.log('[MentionProcessor] Emitted mention event:', {\n type: isAskModel ? 'ask-model' : 'agent',\n mention,\n agentType: isAskModel ? undefined : agentType\n })\n } catch (error) {\n console.error('[MentionProcessor] Failed to emit mention event:', {\n mention,\n agentType,\n isAskModel,\n error: error instanceof Error ? error.message : error\n })\n }\n }\n\n /**\n * Clear caches - useful for testing or reset\n */\n public clearCache(): void {\n this.agentCache.clear()\n this.lastAgentCheck = 0\n }\n}\n\n// Export singleton instance\nexport const mentionProcessor = new MentionProcessorService()\n\n/**\n * Process mentions in user input\n * This is the main API for the mention processor\n */\nexport const processMentions = (input: string) => \n mentionProcessor.processMentions(input)\n\n/**\n * Clear mention processor caches\n */\nexport const clearMentionCache = () =>\n mentionProcessor.clearCache()"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|