@umsai/ums-code 0.3.0-v2 → 0.5.0-v1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +4 -4
- package/dist/src/{zed-integration → acp-integration}/acp.d.ts +7 -0
- package/dist/src/{zed-integration → acp-integration}/acp.js +25 -0
- package/dist/src/acp-integration/acp.js.map +1 -0
- package/dist/src/acp-integration/acpAgent.d.ts +10 -0
- package/dist/src/acp-integration/acpAgent.js +238 -0
- package/dist/src/acp-integration/acpAgent.js.map +1 -0
- package/dist/src/{zed-integration → acp-integration}/schema.d.ts +1030 -43
- package/dist/src/{zed-integration → acp-integration}/schema.js +81 -2
- package/dist/src/acp-integration/schema.js.map +1 -0
- package/dist/src/{zed-integration/fileSystemService.d.ts → acp-integration/service/filesystem.d.ts} +1 -1
- package/dist/src/{zed-integration/fileSystemService.js → acp-integration/service/filesystem.js} +14 -1
- package/dist/src/acp-integration/service/filesystem.js.map +1 -0
- package/dist/src/acp-integration/service/filesystem.test.d.ts +6 -0
- package/dist/src/acp-integration/service/filesystem.test.js +39 -0
- package/dist/src/acp-integration/service/filesystem.test.js.map +1 -0
- package/dist/src/acp-integration/session/HistoryReplayer.d.ts +51 -0
- package/dist/src/acp-integration/session/HistoryReplayer.js +164 -0
- package/dist/src/acp-integration/session/HistoryReplayer.js.map +1 -0
- package/dist/src/acp-integration/session/HistoryReplayer.test.d.ts +6 -0
- package/dist/src/acp-integration/session/HistoryReplayer.test.js +374 -0
- package/dist/src/acp-integration/session/HistoryReplayer.test.js.map +1 -0
- package/dist/src/acp-integration/session/Session.d.ts +66 -0
- package/dist/src/acp-integration/session/Session.js +760 -0
- package/dist/src/acp-integration/session/Session.js.map +1 -0
- package/dist/src/acp-integration/session/SubAgentTracker.d.ts +51 -0
- package/dist/src/acp-integration/session/SubAgentTracker.js +257 -0
- package/dist/src/acp-integration/session/SubAgentTracker.js.map +1 -0
- package/dist/src/acp-integration/session/SubAgentTracker.test.d.ts +6 -0
- package/dist/src/acp-integration/session/SubAgentTracker.test.js +369 -0
- package/dist/src/acp-integration/session/SubAgentTracker.test.js.map +1 -0
- package/dist/src/acp-integration/session/emitters/BaseEmitter.d.ts +27 -0
- package/dist/src/acp-integration/session/emitters/BaseEmitter.js +34 -0
- package/dist/src/acp-integration/session/emitters/BaseEmitter.js.map +1 -0
- package/dist/src/acp-integration/session/emitters/MessageEmitter.d.ts +41 -0
- package/dist/src/acp-integration/session/emitters/MessageEmitter.js +77 -0
- package/dist/src/acp-integration/session/emitters/MessageEmitter.js.map +1 -0
- package/dist/src/acp-integration/session/emitters/MessageEmitter.test.d.ts +6 -0
- package/dist/src/acp-integration/session/emitters/MessageEmitter.test.js +174 -0
- package/dist/src/acp-integration/session/emitters/MessageEmitter.test.js.map +1 -0
- package/dist/src/acp-integration/session/emitters/PlanEmitter.d.ts +39 -0
- package/dist/src/acp-integration/session/emitters/PlanEmitter.js +83 -0
- package/dist/src/acp-integration/session/emitters/PlanEmitter.js.map +1 -0
- package/dist/src/acp-integration/session/emitters/PlanEmitter.test.d.ts +6 -0
- package/dist/src/acp-integration/session/emitters/PlanEmitter.test.js +176 -0
- package/dist/src/acp-integration/session/emitters/PlanEmitter.test.js.map +1 -0
- package/dist/src/acp-integration/session/emitters/ToolCallEmitter.d.ts +80 -0
- package/dist/src/acp-integration/session/emitters/ToolCallEmitter.js +248 -0
- package/dist/src/acp-integration/session/emitters/ToolCallEmitter.js.map +1 -0
- package/dist/src/acp-integration/session/emitters/ToolCallEmitter.test.d.ts +6 -0
- package/dist/src/acp-integration/session/emitters/ToolCallEmitter.test.js +561 -0
- package/dist/src/acp-integration/session/emitters/ToolCallEmitter.test.js.map +1 -0
- package/dist/src/acp-integration/session/emitters/index.d.ts +9 -0
- package/dist/src/acp-integration/session/emitters/index.js +10 -0
- package/dist/src/acp-integration/session/emitters/index.js.map +1 -0
- package/dist/src/acp-integration/session/index.d.ts +24 -0
- package/dist/src/acp-integration/session/index.js +16 -0
- package/dist/src/acp-integration/session/index.js.map +1 -0
- package/dist/src/acp-integration/session/types.d.ts +71 -0
- package/dist/src/acp-integration/session/types.js +7 -0
- package/dist/src/acp-integration/session/types.js.map +1 -0
- package/dist/src/config/auth.d.ts +1 -0
- package/dist/src/config/auth.js +3 -0
- package/dist/src/config/auth.js.map +1 -1
- package/dist/src/config/config.d.ts +11 -3
- package/dist/src/config/config.js +84 -8
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/extension.js +0 -2
- package/dist/src/config/extension.js.map +1 -1
- package/dist/src/config/settingsSchema.d.ts +12 -0
- package/dist/src/config/settingsSchema.js +10 -0
- package/dist/src/config/settingsSchema.js.map +1 -1
- package/dist/src/core/auth.d.ts +1 -1
- package/dist/src/core/auth.js +3 -2
- package/dist/src/core/auth.js.map +1 -1
- package/dist/src/gemini.js +38 -18
- package/dist/src/gemini.js.map +1 -1
- package/dist/src/gemini.test.js +7 -0
- package/dist/src/gemini.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/i18n/index.d.ts +1 -1
- package/dist/src/i18n/index.js +4 -0
- package/dist/src/i18n/index.js.map +1 -1
- package/dist/src/i18n/locales/en.js +1 -13
- package/dist/src/i18n/locales/ru.js +1121 -0
- package/dist/src/i18n/locales/zh.js +1 -10
- package/dist/src/nonInteractive/control/ControlDispatcher.d.ts +24 -1
- package/dist/src/nonInteractive/control/ControlDispatcher.js +46 -17
- package/dist/src/nonInteractive/control/ControlDispatcher.js.map +1 -1
- package/dist/src/nonInteractive/control/ControlService.d.ts +2 -1
- package/dist/src/nonInteractive/control/ControlService.js +22 -37
- package/dist/src/nonInteractive/control/ControlService.js.map +1 -1
- package/dist/src/nonInteractive/control/controllers/baseController.d.ts +2 -1
- package/dist/src/nonInteractive/control/controllers/baseController.js +38 -5
- package/dist/src/nonInteractive/control/controllers/baseController.js.map +1 -1
- package/dist/src/nonInteractive/control/controllers/permissionController.d.ts +1 -22
- package/dist/src/nonInteractive/control/controllers/permissionController.js +38 -38
- package/dist/src/nonInteractive/control/controllers/permissionController.js.map +1 -1
- package/dist/src/nonInteractive/control/controllers/sdkMcpController.d.ts +54 -0
- package/dist/src/nonInteractive/control/controllers/sdkMcpController.js +84 -0
- package/dist/src/nonInteractive/control/controllers/sdkMcpController.js.map +1 -0
- package/dist/src/nonInteractive/control/controllers/systemController.d.ts +16 -6
- package/dist/src/nonInteractive/control/controllers/systemController.js +189 -44
- package/dist/src/nonInteractive/control/controllers/systemController.js.map +1 -1
- package/dist/src/nonInteractive/control/types/serviceAPIs.d.ts +1 -16
- package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.d.ts +11 -0
- package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.js +54 -2
- package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.js.map +1 -1
- package/dist/src/nonInteractive/session.d.ts +0 -16
- package/dist/src/nonInteractive/session.js +317 -321
- package/dist/src/nonInteractive/session.js.map +1 -1
- package/dist/src/nonInteractive/session.test.js +6 -0
- package/dist/src/nonInteractive/session.test.js.map +1 -1
- package/dist/src/nonInteractive/types.d.ts +57 -3
- package/dist/src/nonInteractive/types.js +0 -1
- package/dist/src/nonInteractive/types.js.map +1 -1
- package/dist/src/nonInteractiveCli.js +25 -46
- package/dist/src/nonInteractiveCli.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.js +5 -6
- package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
- package/dist/src/services/BuiltinCommandLoader.test.js +0 -3
- package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
- package/dist/src/test-utils/mockCommandContext.js +11 -2
- package/dist/src/test-utils/mockCommandContext.js.map +1 -1
- package/dist/src/ui/AppContainer.js +39 -36
- package/dist/src/ui/AppContainer.js.map +1 -1
- package/dist/src/ui/auth/useAuth.js +20 -1
- package/dist/src/ui/auth/useAuth.js.map +1 -1
- package/dist/src/ui/commands/clearCommand.js +22 -10
- package/dist/src/ui/commands/clearCommand.js.map +1 -1
- package/dist/src/ui/commands/languageCommand.js +41 -8
- package/dist/src/ui/commands/languageCommand.js.map +1 -1
- package/dist/src/ui/commands/languageCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/languageCommand.test.js +463 -0
- package/dist/src/ui/commands/languageCommand.test.js.map +1 -0
- package/dist/src/ui/commands/modelCommand.js +4 -2
- package/dist/src/ui/commands/modelCommand.js.map +1 -1
- package/dist/src/ui/commands/quitCommand.d.ts +0 -1
- package/dist/src/ui/commands/quitCommand.js +0 -27
- package/dist/src/ui/commands/quitCommand.js.map +1 -1
- package/dist/src/ui/commands/reviewCommand.d.ts +9 -0
- package/dist/src/ui/commands/reviewCommand.js +1267 -0
- package/dist/src/ui/commands/reviewCommand.js.map +1 -0
- package/dist/src/ui/commands/reviewCommand.test.d.ts +6 -0
- package/dist/src/ui/commands/reviewCommand.test.js +545 -0
- package/dist/src/ui/commands/reviewCommand.test.js.map +1 -0
- package/dist/src/ui/commands/setupGithubCommand.js +11 -10
- package/dist/src/ui/commands/setupGithubCommand.js.map +1 -1
- package/dist/src/ui/commands/setupGithubCommand.test.js +14 -14
- package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -1
- package/dist/src/ui/commands/types.d.ts +4 -9
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/commands/ums/unittestCommand.d.ts +9 -0
- package/dist/src/ui/commands/ums/unittestCommand.js +387 -0
- package/dist/src/ui/commands/ums/unittestCommand.js.map +1 -0
- package/dist/src/ui/components/Composer.test.js +1 -2
- package/dist/src/ui/components/Composer.test.js.map +1 -1
- package/dist/src/ui/components/ContextUsageDisplay.d.ts +3 -2
- package/dist/src/ui/components/ContextUsageDisplay.js +8 -2
- package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -1
- package/dist/src/ui/components/DialogManager.js +3 -19
- package/dist/src/ui/components/DialogManager.js.map +1 -1
- package/dist/src/ui/components/Footer.js +2 -3
- package/dist/src/ui/components/Footer.js.map +1 -1
- package/dist/src/ui/components/Help.js +13 -2
- package/dist/src/ui/components/Help.js.map +1 -1
- package/dist/src/ui/components/Help.test.js +6 -0
- package/dist/src/ui/components/Help.test.js.map +1 -1
- package/dist/src/ui/components/HistoryItemDisplay.js +3 -1
- package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
- package/dist/src/ui/components/InputPrompt.js +6 -4
- package/dist/src/ui/components/InputPrompt.js.map +1 -1
- package/dist/src/ui/components/ModelDialog.d.ts +3 -1
- package/dist/src/ui/components/ModelDialog.js +25 -5
- package/dist/src/ui/components/ModelDialog.js.map +1 -1
- package/dist/src/ui/components/OpenAIKeyPrompt.d.ts +3 -0
- package/dist/src/ui/components/OpenAIKeyPrompt.js +1 -0
- package/dist/src/ui/components/OpenAIKeyPrompt.js.map +1 -1
- package/dist/src/ui/components/ResumeSessionPicker.d.ts +10 -0
- package/dist/src/ui/components/ResumeSessionPicker.js +249 -0
- package/dist/src/ui/components/ResumeSessionPicker.js.map +1 -0
- package/dist/src/ui/components/SessionSummaryDisplay.js +10 -2
- package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -1
- package/dist/src/ui/components/SettingsDialog.test.js +2 -2
- package/dist/src/ui/components/SuggestionsDisplay.js +3 -2
- package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -1
- package/dist/src/ui/components/messages/GeminiThoughtMessage.d.ts +18 -0
- package/dist/src/ui/components/messages/GeminiThoughtMessage.js +14 -0
- package/dist/src/ui/components/messages/GeminiThoughtMessage.js.map +1 -0
- package/dist/src/ui/components/messages/GeminiThoughtMessageContent.d.ts +18 -0
- package/dist/src/ui/components/messages/GeminiThoughtMessageContent.js +14 -0
- package/dist/src/ui/components/messages/GeminiThoughtMessageContent.js.map +1 -0
- package/dist/src/ui/components/subagents/manage/AgentEditStep.js +4 -1
- package/dist/src/ui/components/subagents/manage/AgentEditStep.js.map +1 -1
- package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js +2 -2
- package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js.map +1 -1
- package/dist/src/ui/components/ums/UMSKeyPrompt.d.ts +1 -1
- package/dist/src/ui/components/ums/UMSKeyPrompt.js +23 -3
- package/dist/src/ui/components/ums/UMSKeyPrompt.js.map +1 -1
- package/dist/src/ui/components/ums/umsStartupWarnings.d.ts +6 -0
- package/dist/src/ui/components/ums/umsStartupWarnings.js +47 -0
- package/dist/src/ui/components/ums/umsStartupWarnings.js.map +1 -0
- package/dist/src/ui/contexts/SessionContext.d.ts +2 -0
- package/dist/src/ui/contexts/SessionContext.js +18 -10
- package/dist/src/ui/contexts/SessionContext.js.map +1 -1
- package/dist/src/ui/contexts/UIStateContext.d.ts +1 -3
- package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -8
- package/dist/src/ui/hooks/slashCommandProcessor.js +68 -101
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useAttentionNotifications.d.ts +3 -1
- package/dist/src/ui/hooks/useAttentionNotifications.js +10 -5
- package/dist/src/ui/hooks/useAttentionNotifications.js.map +1 -1
- package/dist/src/ui/hooks/useAttentionNotifications.test.js +39 -2
- package/dist/src/ui/hooks/useAttentionNotifications.test.js.map +1 -1
- package/dist/src/ui/hooks/useDialogClose.d.ts +0 -3
- package/dist/src/ui/hooks/useDialogClose.js +0 -2
- package/dist/src/ui/hooks/useDialogClose.js.map +1 -1
- package/dist/src/ui/hooks/useGeminiStream.js +49 -9
- package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
- package/dist/src/ui/hooks/useLogger.d.ts +1 -1
- package/dist/src/ui/hooks/useLogger.js +6 -3
- package/dist/src/ui/hooks/useLogger.js.map +1 -1
- package/dist/src/ui/hooks/useReactToolScheduler.js +2 -2
- package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
- package/dist/src/ui/hooks/useSlashCompletion.js +9 -1
- package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -1
- package/dist/src/ui/hooks/useSlashCompletion.test.js +36 -31
- package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -1
- package/dist/src/ui/hooks/useToolScheduler.test.js +1 -0
- package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
- package/dist/src/ui/models/availableModels.d.ts +8 -2
- package/dist/src/ui/models/availableModels.js +24 -35
- package/dist/src/ui/models/availableModels.js.map +1 -1
- package/dist/src/ui/noninteractive/nonInteractiveUi.js +0 -1
- package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -1
- package/dist/src/ui/types.d.ts +9 -14
- package/dist/src/ui/types.js +0 -1
- package/dist/src/ui/types.js.map +1 -1
- package/dist/src/ui/utils/InlineMarkdownRenderer.d.ts +1 -0
- package/dist/src/ui/utils/InlineMarkdownRenderer.js +2 -2
- package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -1
- package/dist/src/ui/utils/MarkdownDisplay.d.ts +1 -0
- package/dist/src/ui/utils/MarkdownDisplay.js +13 -13
- package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
- package/dist/src/ui/utils/formatters.d.ts +6 -0
- package/dist/src/ui/utils/formatters.js +31 -0
- package/dist/src/ui/utils/formatters.js.map +1 -1
- package/dist/src/ui/utils/formatters.test.js +51 -2
- package/dist/src/ui/utils/formatters.test.js.map +1 -1
- package/dist/src/ui/utils/resumeHistoryUtils.d.ts +19 -0
- package/dist/src/ui/utils/resumeHistoryUtils.js +263 -0
- package/dist/src/ui/utils/resumeHistoryUtils.js.map +1 -0
- package/dist/src/ui/utils/resumeHistoryUtils.test.d.ts +6 -0
- package/dist/src/ui/utils/resumeHistoryUtils.test.js +248 -0
- package/dist/src/ui/utils/resumeHistoryUtils.test.js.map +1 -0
- package/dist/src/utils/attentionNotification.d.ts +1 -0
- package/dist/src/utils/attentionNotification.js +4 -0
- package/dist/src/utils/attentionNotification.js.map +1 -1
- package/dist/src/utils/gitUtils.js +3 -3
- package/dist/src/utils/gitUtils.js.map +1 -1
- package/dist/src/utils/nonInteractiveHelpers.js +1 -1
- package/dist/src/utils/nonInteractiveHelpers.js.map +1 -1
- package/dist/src/utils/nonInteractiveHelpers.test.js +1 -1
- package/dist/src/utils/nonInteractiveHelpers.test.js.map +1 -1
- package/dist/src/validateNonInterActiveAuth.js +1 -1
- package/dist/src/validateNonInterActiveAuth.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/dist/src/nonInteractive/control/controllers/mcpController.d.ts +0 -42
- package/dist/src/nonInteractive/control/controllers/mcpController.js +0 -205
- package/dist/src/nonInteractive/control/controllers/mcpController.js.map +0 -1
- package/dist/src/ui/commands/chatCommand.d.ts +0 -9
- package/dist/src/ui/commands/chatCommand.js +0 -351
- package/dist/src/ui/commands/chatCommand.js.map +0 -1
- package/dist/src/ui/commands/corgiCommand.d.ts +0 -7
- package/dist/src/ui/commands/corgiCommand.js +0 -16
- package/dist/src/ui/commands/corgiCommand.js.map +0 -1
- package/dist/src/ui/components/QuitConfirmationDialog.d.ts +0 -17
- package/dist/src/ui/components/QuitConfirmationDialog.js +0 -49
- package/dist/src/ui/components/QuitConfirmationDialog.js.map +0 -1
- package/dist/src/ui/hooks/usePromptCompletion.d.ts +0 -23
- package/dist/src/ui/hooks/usePromptCompletion.js +0 -177
- package/dist/src/ui/hooks/usePromptCompletion.js.map +0 -1
- package/dist/src/ui/hooks/useQuitConfirmation.d.ts +0 -14
- package/dist/src/ui/hooks/useQuitConfirmation.js +0 -36
- package/dist/src/ui/hooks/useQuitConfirmation.js.map +0 -1
- package/dist/src/zed-integration/acp.js.map +0 -1
- package/dist/src/zed-integration/fileSystemService.js.map +0 -1
- package/dist/src/zed-integration/schema.js.map +0 -1
- package/dist/src/zed-integration/zedIntegration.d.ts +0 -17
- package/dist/src/zed-integration/zedIntegration.js +0 -1135
- package/dist/src/zed-integration/zedIntegration.js.map +0 -1
|
@@ -108,7 +108,6 @@ export default {
|
|
|
108
108
|
'在浏览器中打开完整的 UMS Code 文档',
|
|
109
109
|
'Configuration not available.': '配置不可用',
|
|
110
110
|
'change the auth method': '更改认证方法',
|
|
111
|
-
'Show quit confirmation dialog': '显示退出确认对话框',
|
|
112
111
|
'Copy the last result or code snippet to clipboard':
|
|
113
112
|
'将最后的结果或代码片段复制到剪贴板',
|
|
114
113
|
|
|
@@ -655,15 +654,6 @@ export default {
|
|
|
655
654
|
'A custom command wants to run the following shell commands:':
|
|
656
655
|
'自定义命令想要运行以下 shell 命令:',
|
|
657
656
|
|
|
658
|
-
// ============================================================================
|
|
659
|
-
// Dialogs - Quit Confirmation
|
|
660
|
-
// ============================================================================
|
|
661
|
-
'What would you like to do before exiting?': '退出前您想要做什么?',
|
|
662
|
-
'Quit immediately (/quit)': '立即退出 (/quit)',
|
|
663
|
-
'Generate summary and quit (/summary)': '生成摘要并退出 (/summary)',
|
|
664
|
-
'Save conversation and quit (/chat save)': '保存对话并退出 (/chat save)',
|
|
665
|
-
'Cancel (stay in application)': '取消(留在应用程序中)',
|
|
666
|
-
|
|
667
657
|
// ============================================================================
|
|
668
658
|
// Dialogs - Pro Quota
|
|
669
659
|
// ============================================================================
|
|
@@ -830,6 +820,7 @@ export default {
|
|
|
830
820
|
// Exit Screen / Stats
|
|
831
821
|
// ============================================================================
|
|
832
822
|
'Agent powering down. Goodbye!': 'UMS Code 正在关闭,再见!',
|
|
823
|
+
'To continue this session, run': '要继续此会话,请运行',
|
|
833
824
|
'Interaction Summary': '交互摘要',
|
|
834
825
|
'Session ID:': '会话 ID:',
|
|
835
826
|
'Tool Calls:': '工具调用:',
|
|
@@ -15,15 +15,20 @@
|
|
|
15
15
|
* Controllers:
|
|
16
16
|
* - SystemController: initialize, interrupt, set_model, supported_commands
|
|
17
17
|
* - PermissionController: can_use_tool, set_permission_mode
|
|
18
|
-
* -
|
|
18
|
+
* - SdkMcpController: mcp_server_status (mcp_message handled via callback)
|
|
19
19
|
* - HookController: hook_callback
|
|
20
20
|
*
|
|
21
|
+
* Note: mcp_message requests are NOT routed through the dispatcher. CLI MCP
|
|
22
|
+
* clients send messages via SdkMcpController.createSendSdkMcpMessage() callback.
|
|
23
|
+
*
|
|
21
24
|
* Note: Control request types are centrally defined in the ControlRequestType
|
|
22
25
|
* enum in packages/sdk/typescript/src/types/controlRequests.ts
|
|
23
26
|
*/
|
|
24
27
|
import type { IControlContext } from './ControlContext.js';
|
|
25
28
|
import type { IPendingRequestRegistry } from './controllers/baseController.js';
|
|
26
29
|
import { SystemController } from './controllers/systemController.js';
|
|
30
|
+
import { PermissionController } from './controllers/permissionController.js';
|
|
31
|
+
import { SdkMcpController } from './controllers/sdkMcpController.js';
|
|
27
32
|
import type { CLIControlRequest, CLIControlResponse, ControlResponse, ControlRequestPayload } from '../types.js';
|
|
28
33
|
/**
|
|
29
34
|
* Central coordinator for control plane communication.
|
|
@@ -32,6 +37,8 @@ import type { CLIControlRequest, CLIControlResponse, ControlResponse, ControlReq
|
|
|
32
37
|
export declare class ControlDispatcher implements IPendingRequestRegistry {
|
|
33
38
|
private context;
|
|
34
39
|
readonly systemController: SystemController;
|
|
40
|
+
readonly permissionController: PermissionController;
|
|
41
|
+
readonly sdkMcpController: SdkMcpController;
|
|
35
42
|
private pendingIncomingRequests;
|
|
36
43
|
private pendingOutgoingRequests;
|
|
37
44
|
constructor(context: IControlContext);
|
|
@@ -71,6 +78,22 @@ export declare class ControlDispatcher implements IPendingRequestRegistry {
|
|
|
71
78
|
* Removes an outgoing request from the pending registry
|
|
72
79
|
*/
|
|
73
80
|
deregisterOutgoingRequest(requestId: string): void;
|
|
81
|
+
/**
|
|
82
|
+
* Get count of pending incoming requests (for debugging)
|
|
83
|
+
*/
|
|
84
|
+
getPendingIncomingRequestCount(): number;
|
|
85
|
+
/**
|
|
86
|
+
* Wait for all incoming request handlers to complete.
|
|
87
|
+
*
|
|
88
|
+
* Uses polling since we don't have direct Promise references to handlers.
|
|
89
|
+
* The pendingIncomingRequests map is managed by BaseController:
|
|
90
|
+
* - Registered when handler starts (in handleRequest)
|
|
91
|
+
* - Deregistered when handler completes (success or error)
|
|
92
|
+
*
|
|
93
|
+
* @param pollIntervalMs - How often to check (default 50ms)
|
|
94
|
+
* @param timeoutMs - Maximum wait time (default 30s)
|
|
95
|
+
*/
|
|
96
|
+
waitForPendingIncomingRequests(pollIntervalMs?: number, timeoutMs?: number): Promise<void>;
|
|
74
97
|
/**
|
|
75
98
|
* Returns the controller that handles the given request subtype
|
|
76
99
|
*/
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { SystemController } from './controllers/systemController.js';
|
|
7
|
+
import { PermissionController } from './controllers/permissionController.js';
|
|
8
|
+
import { SdkMcpController } from './controllers/sdkMcpController.js';
|
|
7
9
|
/**
|
|
8
10
|
* Central coordinator for control plane communication.
|
|
9
11
|
* Routes requests to controllers and manages request lifecycle.
|
|
@@ -12,8 +14,8 @@ export class ControlDispatcher {
|
|
|
12
14
|
context;
|
|
13
15
|
// Make controllers publicly accessible
|
|
14
16
|
systemController;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
permissionController;
|
|
18
|
+
sdkMcpController;
|
|
17
19
|
// readonly hookController: HookController;
|
|
18
20
|
// Central pending request registries
|
|
19
21
|
pendingIncomingRequests = new Map();
|
|
@@ -22,12 +24,8 @@ export class ControlDispatcher {
|
|
|
22
24
|
this.context = context;
|
|
23
25
|
// Create domain controllers with context and registry
|
|
24
26
|
this.systemController = new SystemController(context, this, 'SystemController');
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
// this,
|
|
28
|
-
// 'PermissionController',
|
|
29
|
-
// );
|
|
30
|
-
// this.mcpController = new MCPController(context, this, 'MCPController');
|
|
27
|
+
this.permissionController = new PermissionController(context, this, 'PermissionController');
|
|
28
|
+
this.sdkMcpController = new SdkMcpController(context, this, 'SdkMcpController');
|
|
31
29
|
// this.hookController = new HookController(context, this, 'HookController');
|
|
32
30
|
// Listen for main abort signal
|
|
33
31
|
this.context.abortSignal.addEventListener('abort', () => {
|
|
@@ -137,10 +135,10 @@ export class ControlDispatcher {
|
|
|
137
135
|
pending.reject(new Error('Dispatcher shutdown'));
|
|
138
136
|
}
|
|
139
137
|
this.pendingOutgoingRequests.clear();
|
|
140
|
-
// Cleanup controllers
|
|
138
|
+
// Cleanup controllers
|
|
141
139
|
this.systemController.cleanup();
|
|
142
|
-
|
|
143
|
-
|
|
140
|
+
this.permissionController.cleanup();
|
|
141
|
+
this.sdkMcpController.cleanup();
|
|
144
142
|
// this.hookController.cleanup();
|
|
145
143
|
}
|
|
146
144
|
/**
|
|
@@ -184,6 +182,38 @@ export class ControlDispatcher {
|
|
|
184
182
|
this.pendingOutgoingRequests.delete(requestId);
|
|
185
183
|
}
|
|
186
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Get count of pending incoming requests (for debugging)
|
|
187
|
+
*/
|
|
188
|
+
getPendingIncomingRequestCount() {
|
|
189
|
+
return this.pendingIncomingRequests.size;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Wait for all incoming request handlers to complete.
|
|
193
|
+
*
|
|
194
|
+
* Uses polling since we don't have direct Promise references to handlers.
|
|
195
|
+
* The pendingIncomingRequests map is managed by BaseController:
|
|
196
|
+
* - Registered when handler starts (in handleRequest)
|
|
197
|
+
* - Deregistered when handler completes (success or error)
|
|
198
|
+
*
|
|
199
|
+
* @param pollIntervalMs - How often to check (default 50ms)
|
|
200
|
+
* @param timeoutMs - Maximum wait time (default 30s)
|
|
201
|
+
*/
|
|
202
|
+
async waitForPendingIncomingRequests(pollIntervalMs = 50, timeoutMs = 30000) {
|
|
203
|
+
const startTime = Date.now();
|
|
204
|
+
while (this.pendingIncomingRequests.size > 0) {
|
|
205
|
+
if (Date.now() - startTime > timeoutMs) {
|
|
206
|
+
if (this.context.debugMode) {
|
|
207
|
+
console.error(`[ControlDispatcher] Timeout waiting for ${this.pendingIncomingRequests.size} pending incoming requests`);
|
|
208
|
+
}
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
|
|
212
|
+
}
|
|
213
|
+
if (this.context.debugMode && this.pendingIncomingRequests.size === 0) {
|
|
214
|
+
console.error('[ControlDispatcher] All incoming requests completed');
|
|
215
|
+
}
|
|
216
|
+
}
|
|
187
217
|
/**
|
|
188
218
|
* Returns the controller that handles the given request subtype
|
|
189
219
|
*/
|
|
@@ -194,12 +224,11 @@ export class ControlDispatcher {
|
|
|
194
224
|
case 'set_model':
|
|
195
225
|
case 'supported_commands':
|
|
196
226
|
return this.systemController;
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
// return this.mcpController;
|
|
227
|
+
case 'can_use_tool':
|
|
228
|
+
case 'set_permission_mode':
|
|
229
|
+
return this.permissionController;
|
|
230
|
+
case 'mcp_server_status':
|
|
231
|
+
return this.sdkMcpController;
|
|
203
232
|
// case 'hook_callback':
|
|
204
233
|
// return this.hookController;
|
|
205
234
|
default:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ControlDispatcher.js","sourceRoot":"","sources":["../../../../src/nonInteractive/control/ControlDispatcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"ControlDispatcher.js","sourceRoot":"","sources":["../../../../src/nonInteractive/control/ControlDispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
*/
|
|
27
27
|
import type { IControlContext } from './ControlContext.js';
|
|
28
28
|
import type { ControlDispatcher } from './ControlDispatcher.js';
|
|
29
|
-
import type { SystemServiceAPI } from './types/serviceAPIs.js';
|
|
29
|
+
import type { PermissionServiceAPI, SystemServiceAPI } from './types/serviceAPIs.js';
|
|
30
30
|
/**
|
|
31
31
|
* Control Service
|
|
32
32
|
*
|
|
@@ -49,6 +49,7 @@ export declare class ControlService {
|
|
|
49
49
|
* Handles tool execution permissions, approval checks, and callbacks.
|
|
50
50
|
* Delegates to the shared PermissionController instance.
|
|
51
51
|
*/
|
|
52
|
+
get permission(): PermissionServiceAPI;
|
|
52
53
|
/**
|
|
53
54
|
* System Domain API
|
|
54
55
|
*
|
|
@@ -27,43 +27,28 @@ export class ControlService {
|
|
|
27
27
|
* Handles tool execution permissions, approval checks, and callbacks.
|
|
28
28
|
* Delegates to the shared PermissionController instance.
|
|
29
29
|
*/
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
// */
|
|
53
|
-
// buildPermissionSuggestions:
|
|
54
|
-
// controller.buildPermissionSuggestions.bind(controller),
|
|
55
|
-
//
|
|
56
|
-
// /**
|
|
57
|
-
// * Get callback for monitoring tool call status updates
|
|
58
|
-
// *
|
|
59
|
-
// * Returns callback function for integration with CoreToolScheduler.
|
|
60
|
-
// *
|
|
61
|
-
// * @returns Callback function for tool call updates
|
|
62
|
-
// */
|
|
63
|
-
// getToolCallUpdateCallback:
|
|
64
|
-
// controller.getToolCallUpdateCallback.bind(controller),
|
|
65
|
-
// };
|
|
66
|
-
// }
|
|
30
|
+
get permission() {
|
|
31
|
+
const controller = this.dispatcher.permissionController;
|
|
32
|
+
return {
|
|
33
|
+
/**
|
|
34
|
+
* Build UI suggestions for tool confirmation dialogs
|
|
35
|
+
*
|
|
36
|
+
* Creates actionable permission suggestions based on tool confirmation details.
|
|
37
|
+
*
|
|
38
|
+
* @param confirmationDetails - Tool confirmation details
|
|
39
|
+
* @returns Array of permission suggestions or null
|
|
40
|
+
*/
|
|
41
|
+
buildPermissionSuggestions: controller.buildPermissionSuggestions.bind(controller),
|
|
42
|
+
/**
|
|
43
|
+
* Get callback for monitoring tool call status updates
|
|
44
|
+
*
|
|
45
|
+
* Returns callback function for integration with CoreToolScheduler.
|
|
46
|
+
*
|
|
47
|
+
* @returns Callback function for tool call updates
|
|
48
|
+
*/
|
|
49
|
+
getToolCallUpdateCallback: controller.getToolCallUpdateCallback.bind(controller),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
67
52
|
/**
|
|
68
53
|
* System Domain API
|
|
69
54
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ControlService.js","sourceRoot":"","sources":["../../../../src/nonInteractive/control/ControlService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiCH;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IACjB,UAAU,CAAoB;IAEtC;;;;;OAKG;IACH,YAAY,OAAwB,EAAE,UAA6B;QACjE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH,
|
|
1
|
+
{"version":3,"file":"ControlService.js","sourceRoot":"","sources":["../../../../src/nonInteractive/control/ControlService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiCH;;;;;;GAMG;AACH,MAAM,OAAO,cAAc;IACjB,UAAU,CAAoB;IAEtC;;;;;OAKG;IACH,YAAY,OAAwB,EAAE,UAA6B;QACjE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH,IAAI,UAAU;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC;QACxD,OAAO;YACL;;;;;;;eAOG;YACH,0BAA0B,EACxB,UAAU,CAAC,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC;YAExD;;;;;;eAMG;YACH,yBAAyB,EACvB,UAAU,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,CAAC;SACxD,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,IAAI,MAAM;QACR,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;QACpD,OAAO;YACL;;;;;;;;eAQG;YACH,sBAAsB,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,wBAAwB,EAAE;SACpE,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,6BAA6B;IAC7B,aAAa;IACb,UAAU;IACV,qEAAqE;IACrE,SAAS;IACT,4DAA4D;IAC5D,SAAS;IACT,oDAAoD;IACpD,iDAAiD;IACjD,UAAU;IACV,oDAAoD;IACpD,mEAAmE;IACnE,4CAA4C;IAC5C,+CAA+C;IAC/C,gFAAgF;IAChF,yBAAyB;IACzB,uFAAuF;IACvF,WAAW;IACX,SAAS;IACT,EAAE;IACF,UAAU;IACV,wCAAwC;IACxC,SAAS;IACT,4DAA4D;IAC5D,SAAS;IACT,wCAAwC;IACxC,UAAU;IACV,2BAA2B;IAC3B,oCAAoC;IACpC,uCAAuC;IACvC,kEAAkE;IAClE,WAAW;IACX,uCAAuC;IACvC,sEAAsE;IACtE,WAAW;IACX,6DAA6D;IAC7D,SAAS;IACT,OAAO;IACP,IAAI;IAEJ;;;;;OAKG;IACH,+BAA+B;IAC/B,4FAA4F;IAC5F,eAAe;IACf,IAAI;IAEJ;;;;;OAKG;IACH,OAAO;QACL,0DAA0D;QAC1D,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -35,8 +35,9 @@ export declare abstract class BaseController {
|
|
|
35
35
|
* Send an outgoing control request to SDK
|
|
36
36
|
*
|
|
37
37
|
* Manages lifecycle: register -> send -> wait for response -> deregister
|
|
38
|
+
* Respects the provided AbortSignal for cancellation.
|
|
38
39
|
*/
|
|
39
|
-
sendControlRequest(payload: ControlRequestPayload, timeoutMs?: number): Promise<ControlResponse>;
|
|
40
|
+
sendControlRequest(payload: ControlRequestPayload, timeoutMs?: number, signal?: AbortSignal): Promise<ControlResponse>;
|
|
40
41
|
/**
|
|
41
42
|
* Abstract method: Handle specific request payload
|
|
42
43
|
*
|
|
@@ -63,20 +63,52 @@ export class BaseController {
|
|
|
63
63
|
* Send an outgoing control request to SDK
|
|
64
64
|
*
|
|
65
65
|
* Manages lifecycle: register -> send -> wait for response -> deregister
|
|
66
|
+
* Respects the provided AbortSignal for cancellation.
|
|
66
67
|
*/
|
|
67
|
-
async sendControlRequest(payload, timeoutMs = DEFAULT_REQUEST_TIMEOUT_MS) {
|
|
68
|
+
async sendControlRequest(payload, timeoutMs = DEFAULT_REQUEST_TIMEOUT_MS, signal) {
|
|
69
|
+
// Check if already aborted
|
|
70
|
+
if (signal?.aborted) {
|
|
71
|
+
throw new Error('Request aborted');
|
|
72
|
+
}
|
|
68
73
|
const requestId = randomUUID();
|
|
69
74
|
return new Promise((resolve, reject) => {
|
|
75
|
+
// Setup abort handler
|
|
76
|
+
const abortHandler = () => {
|
|
77
|
+
this.registry.deregisterOutgoingRequest(requestId);
|
|
78
|
+
reject(new Error('Request aborted'));
|
|
79
|
+
if (this.context.debugMode) {
|
|
80
|
+
console.error(`[${this.controllerName}] Outgoing request aborted: ${requestId}`);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
if (signal) {
|
|
84
|
+
signal.addEventListener('abort', abortHandler, { once: true });
|
|
85
|
+
}
|
|
70
86
|
// Setup timeout
|
|
71
87
|
const timeoutId = setTimeout(() => {
|
|
88
|
+
if (signal) {
|
|
89
|
+
signal.removeEventListener('abort', abortHandler);
|
|
90
|
+
}
|
|
72
91
|
this.registry.deregisterOutgoingRequest(requestId);
|
|
73
92
|
reject(new Error('Control request timeout'));
|
|
74
93
|
if (this.context.debugMode) {
|
|
75
94
|
console.error(`[${this.controllerName}] Outgoing request timeout: ${requestId}`);
|
|
76
95
|
}
|
|
77
96
|
}, timeoutMs);
|
|
97
|
+
// Wrap resolve/reject to clean up abort listener
|
|
98
|
+
const wrappedResolve = (response) => {
|
|
99
|
+
if (signal) {
|
|
100
|
+
signal.removeEventListener('abort', abortHandler);
|
|
101
|
+
}
|
|
102
|
+
resolve(response);
|
|
103
|
+
};
|
|
104
|
+
const wrappedReject = (error) => {
|
|
105
|
+
if (signal) {
|
|
106
|
+
signal.removeEventListener('abort', abortHandler);
|
|
107
|
+
}
|
|
108
|
+
reject(error);
|
|
109
|
+
};
|
|
78
110
|
// Register with central registry
|
|
79
|
-
this.registry.registerOutgoingRequest(requestId, this.controllerName,
|
|
111
|
+
this.registry.registerOutgoingRequest(requestId, this.controllerName, wrappedResolve, wrappedReject, timeoutId);
|
|
80
112
|
// Send control request
|
|
81
113
|
const request = {
|
|
82
114
|
type: 'control_request',
|
|
@@ -87,6 +119,9 @@ export class BaseController {
|
|
|
87
119
|
this.context.streamJson.send(request);
|
|
88
120
|
}
|
|
89
121
|
catch (error) {
|
|
122
|
+
if (signal) {
|
|
123
|
+
signal.removeEventListener('abort', abortHandler);
|
|
124
|
+
}
|
|
90
125
|
this.registry.deregisterOutgoingRequest(requestId);
|
|
91
126
|
reject(error);
|
|
92
127
|
}
|
|
@@ -95,8 +130,6 @@ export class BaseController {
|
|
|
95
130
|
/**
|
|
96
131
|
* Cleanup resources
|
|
97
132
|
*/
|
|
98
|
-
cleanup() {
|
|
99
|
-
// Subclasses can override to add cleanup logic
|
|
100
|
-
}
|
|
133
|
+
cleanup() { }
|
|
101
134
|
}
|
|
102
135
|
//# sourceMappingURL=baseController.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"baseController.js","sourceRoot":"","sources":["../../../../../src/nonInteractive/control/controllers/baseController.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC,MAAM,0BAA0B,GAAG,KAAK,CAAC,CAAC,aAAa;AAwBvD;;;;;GAKG;AACH,MAAM,OAAgB,cAAc;IACxB,OAAO,CAAkB;IACzB,QAAQ,CAA0B;IAClC,cAAc,CAAS;IAEjC,YACE,OAAwB,EACxB,QAAiC,EACjC,cAAsB;QAEtB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa,CACjB,OAA8B,EAC9B,SAAiB;QAEjB,MAAM,sBAAsB,GAAG,IAAI,eAAe,EAAE,CAAC;QAErD,gBAAgB;QAChB,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,sBAAsB,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;YACnD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,cAAc,sBAAsB,SAAS,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,EAAE,0BAA0B,CAAC,CAAC;QAE/B,iCAAiC;QACjC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CACnC,SAAS,EACT,IAAI,CAAC,cAAc,EACnB,sBAAsB,EACtB,SAAS,CACV,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAC9C,OAAO,EACP,sBAAsB,CAAC,MAAM,CAC9B,CAAC;YAEF,uBAAuB;YACvB,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;YAEnD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,qBAAqB;YACrB,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;YACnD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"baseController.js","sourceRoot":"","sources":["../../../../../src/nonInteractive/control/controllers/baseController.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,16 +3,6 @@
|
|
|
3
3
|
* Copyright 2025 Qwen Team
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
/**
|
|
7
|
-
* Permission Controller
|
|
8
|
-
*
|
|
9
|
-
* Handles permission-related control requests:
|
|
10
|
-
* - can_use_tool: Check if tool usage is allowed
|
|
11
|
-
* - set_permission_mode: Change permission mode at runtime
|
|
12
|
-
*
|
|
13
|
-
* Abstracts all permission logic from the session manager to keep it clean.
|
|
14
|
-
*/
|
|
15
|
-
import type { ToolCallRequestInfo } from '@umsai/ums-code-core';
|
|
16
6
|
import type { ControlRequestPayload, PermissionSuggestion } from '../../types.js';
|
|
17
7
|
import { BaseController } from './baseController.js';
|
|
18
8
|
export declare class PermissionController extends BaseController {
|
|
@@ -20,7 +10,7 @@ export declare class PermissionController extends BaseController {
|
|
|
20
10
|
/**
|
|
21
11
|
* Handle permission control requests
|
|
22
12
|
*/
|
|
23
|
-
protected handleRequestPayload(payload: ControlRequestPayload,
|
|
13
|
+
protected handleRequestPayload(payload: ControlRequestPayload, signal: AbortSignal): Promise<Record<string, unknown>>;
|
|
24
14
|
/**
|
|
25
15
|
* Handle can_use_tool request
|
|
26
16
|
*
|
|
@@ -51,17 +41,6 @@ export declare class PermissionController extends BaseController {
|
|
|
51
41
|
* helping the host application present appropriate permission options.
|
|
52
42
|
*/
|
|
53
43
|
buildPermissionSuggestions(confirmationDetails: unknown): PermissionSuggestion[] | null;
|
|
54
|
-
/**
|
|
55
|
-
* Check if a tool should be executed based on current permission settings
|
|
56
|
-
*
|
|
57
|
-
* This is a convenience method for direct tool execution checks without
|
|
58
|
-
* going through the control request flow.
|
|
59
|
-
*/
|
|
60
|
-
shouldAllowTool(toolRequest: ToolCallRequestInfo, confirmationDetails?: unknown): Promise<{
|
|
61
|
-
allowed: boolean;
|
|
62
|
-
message?: string;
|
|
63
|
-
updatedArgs?: Record<string, unknown>;
|
|
64
|
-
}>;
|
|
65
44
|
/**
|
|
66
45
|
* Get callback for monitoring tool calls and handling outgoing permission requests
|
|
67
46
|
* This is passed to executeToolCall to hook into CoreToolScheduler updates
|
|
@@ -10,12 +10,15 @@ export class PermissionController extends BaseController {
|
|
|
10
10
|
/**
|
|
11
11
|
* Handle permission control requests
|
|
12
12
|
*/
|
|
13
|
-
async handleRequestPayload(payload,
|
|
13
|
+
async handleRequestPayload(payload, signal) {
|
|
14
|
+
if (signal.aborted) {
|
|
15
|
+
throw new Error('Request aborted');
|
|
16
|
+
}
|
|
14
17
|
switch (payload.subtype) {
|
|
15
18
|
case 'can_use_tool':
|
|
16
|
-
return this.handleCanUseTool(payload);
|
|
19
|
+
return this.handleCanUseTool(payload, signal);
|
|
17
20
|
case 'set_permission_mode':
|
|
18
|
-
return this.handleSetPermissionMode(payload);
|
|
21
|
+
return this.handleSetPermissionMode(payload, signal);
|
|
19
22
|
default:
|
|
20
23
|
throw new Error(`Unsupported request subtype in PermissionController`);
|
|
21
24
|
}
|
|
@@ -28,7 +31,10 @@ export class PermissionController extends BaseController {
|
|
|
28
31
|
* - Tool registry validation
|
|
29
32
|
* - Error handling with safe defaults
|
|
30
33
|
*/
|
|
31
|
-
async handleCanUseTool(payload) {
|
|
34
|
+
async handleCanUseTool(payload, signal) {
|
|
35
|
+
if (signal.aborted) {
|
|
36
|
+
throw new Error('Request aborted');
|
|
37
|
+
}
|
|
32
38
|
const toolName = payload.tool_name;
|
|
33
39
|
if (!toolName ||
|
|
34
40
|
typeof toolName !== 'string' ||
|
|
@@ -125,7 +131,10 @@ export class PermissionController extends BaseController {
|
|
|
125
131
|
*
|
|
126
132
|
* Updates the permission mode in the context
|
|
127
133
|
*/
|
|
128
|
-
async handleSetPermissionMode(payload) {
|
|
134
|
+
async handleSetPermissionMode(payload, signal) {
|
|
135
|
+
if (signal.aborted) {
|
|
136
|
+
throw new Error('Request aborted');
|
|
137
|
+
}
|
|
129
138
|
const mode = payload.mode;
|
|
130
139
|
const validModes = [
|
|
131
140
|
'default',
|
|
@@ -137,6 +146,7 @@ export class PermissionController extends BaseController {
|
|
|
137
146
|
throw new Error(`Invalid permission mode: ${mode}. Valid values are: ${validModes.join(', ')}`);
|
|
138
147
|
}
|
|
139
148
|
this.context.permissionMode = mode;
|
|
149
|
+
this.context.config.setApprovalMode(mode);
|
|
140
150
|
if (this.context.debugMode) {
|
|
141
151
|
console.error(`[PermissionController] Permission mode updated to: ${mode}`);
|
|
142
152
|
}
|
|
@@ -246,36 +256,6 @@ export class PermissionController extends BaseController {
|
|
|
246
256
|
];
|
|
247
257
|
}
|
|
248
258
|
}
|
|
249
|
-
/**
|
|
250
|
-
* Check if a tool should be executed based on current permission settings
|
|
251
|
-
*
|
|
252
|
-
* This is a convenience method for direct tool execution checks without
|
|
253
|
-
* going through the control request flow.
|
|
254
|
-
*/
|
|
255
|
-
async shouldAllowTool(toolRequest, confirmationDetails) {
|
|
256
|
-
// Check permission mode
|
|
257
|
-
const modeResult = this.checkPermissionMode();
|
|
258
|
-
if (!modeResult.allowed) {
|
|
259
|
-
return {
|
|
260
|
-
allowed: false,
|
|
261
|
-
message: modeResult.message,
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
// Check tool registry
|
|
265
|
-
const registryResult = this.checkToolRegistry(toolRequest.name);
|
|
266
|
-
if (!registryResult.allowed) {
|
|
267
|
-
return {
|
|
268
|
-
allowed: false,
|
|
269
|
-
message: registryResult.message,
|
|
270
|
-
};
|
|
271
|
-
}
|
|
272
|
-
// If we have confirmation details, we could potentially modify args
|
|
273
|
-
// This is a hook for future enhancement
|
|
274
|
-
if (confirmationDetails) {
|
|
275
|
-
// Future: handle argument modifications based on confirmation details
|
|
276
|
-
}
|
|
277
|
-
return { allowed: true };
|
|
278
|
-
}
|
|
279
259
|
/**
|
|
280
260
|
* Get callback for monitoring tool calls and handling outgoing permission requests
|
|
281
261
|
* This is passed to executeToolCall to hook into CoreToolScheduler updates
|
|
@@ -305,6 +285,11 @@ export class PermissionController extends BaseController {
|
|
|
305
285
|
*/
|
|
306
286
|
async handleOutgoingPermissionRequest(toolCall) {
|
|
307
287
|
try {
|
|
288
|
+
// Check if already aborted
|
|
289
|
+
if (this.context.abortSignal?.aborted) {
|
|
290
|
+
await toolCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.Cancel);
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
308
293
|
const inputFormat = this.context.config.getInputFormat?.();
|
|
309
294
|
const isStreamJsonMode = inputFormat === InputFormat.STREAM_JSON;
|
|
310
295
|
if (!isStreamJsonMode) {
|
|
@@ -325,7 +310,8 @@ export class PermissionController extends BaseController {
|
|
|
325
310
|
input: toolCall.request.args,
|
|
326
311
|
permission_suggestions: permissionSuggestions,
|
|
327
312
|
blocked_path: null,
|
|
328
|
-
},
|
|
313
|
+
}, undefined, // use default timeout
|
|
314
|
+
this.context.abortSignal);
|
|
329
315
|
if (response.subtype !== 'success') {
|
|
330
316
|
await toolCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.Cancel);
|
|
331
317
|
return;
|
|
@@ -341,14 +327,28 @@ export class PermissionController extends BaseController {
|
|
|
341
327
|
await toolCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.ProceedOnce);
|
|
342
328
|
}
|
|
343
329
|
else {
|
|
344
|
-
|
|
330
|
+
// Extract cancel message from response if available
|
|
331
|
+
const cancelMessage = typeof payload['message'] === 'string'
|
|
332
|
+
? payload['message']
|
|
333
|
+
: undefined;
|
|
334
|
+
await toolCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.Cancel, cancelMessage ? { cancelMessage } : undefined);
|
|
345
335
|
}
|
|
346
336
|
}
|
|
347
337
|
catch (error) {
|
|
348
338
|
if (this.context.debugMode) {
|
|
349
339
|
console.error('[PermissionController] Outgoing permission failed:', error);
|
|
350
340
|
}
|
|
351
|
-
|
|
341
|
+
// On error, use default cancel message
|
|
342
|
+
// Only pass payload for exec and mcp types that support it
|
|
343
|
+
const confirmationType = toolCall.confirmationDetails.type;
|
|
344
|
+
if (['edit', 'exec', 'mcp'].includes(confirmationType)) {
|
|
345
|
+
const execOrMcpDetails = toolCall.confirmationDetails;
|
|
346
|
+
await execOrMcpDetails.onConfirm(ToolConfirmationOutcome.Cancel, undefined);
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
// For other types, don't pass payload (backward compatible)
|
|
350
|
+
await toolCall.confirmationDetails.onConfirm(ToolConfirmationOutcome.Cancel);
|
|
351
|
+
}
|
|
352
352
|
}
|
|
353
353
|
finally {
|
|
354
354
|
this.pendingOutgoingRequests.delete(toolCall.request.callId);
|