@within-7/minto 0.4.1 → 0.4.2
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/Tool.js +7 -0
- package/dist/Tool.js.map +2 -2
- package/dist/commands/agents/AgentsCommand.js +1 -1
- package/dist/commands/agents/AgentsCommand.js.map +2 -2
- package/dist/commands/agents/constants.js +2 -2
- package/dist/commands/agents/constants.js.map +2 -2
- package/dist/commands/clear.js +4 -3
- package/dist/commands/clear.js.map +2 -2
- package/dist/commands/compact.js +2 -2
- package/dist/commands/compact.js.map +1 -1
- package/dist/commands/context.js +3 -1
- package/dist/commands/context.js.map +2 -2
- package/dist/commands/login.js +128 -0
- package/dist/commands/login.js.map +7 -0
- package/dist/commands/memory.js +33 -82
- package/dist/commands/memory.js.map +2 -2
- package/dist/commands/quit.js +3 -1
- package/dist/commands/quit.js.map +2 -2
- package/dist/commands/resume.js +39 -239
- package/dist/commands/resume.js.map +2 -2
- package/dist/commands/tasks.js +1 -1
- package/dist/commands/tasks.js.map +2 -2
- package/dist/commands/terminalSetup.js +6 -2
- package/dist/commands/terminalSetup.js.map +2 -2
- package/dist/commands.js +2 -0
- package/dist/commands.js.map +2 -2
- package/dist/components/AgentDetailView.js +126 -0
- package/dist/components/AgentDetailView.js.map +7 -0
- package/dist/components/AgentThinkingBlock.js +1 -1
- package/dist/components/AgentThinkingBlock.js.map +2 -2
- package/dist/components/AgentViewBanner.js +22 -0
- package/dist/components/AgentViewBanner.js.map +7 -0
- package/dist/components/HeaderBar.js +1 -1
- package/dist/components/HeaderBar.js.map +2 -2
- package/dist/components/Help.js +8 -1
- package/dist/components/Help.js.map +2 -2
- package/dist/components/HotkeyHelpPanel.js +26 -8
- package/dist/components/HotkeyHelpPanel.js.map +2 -2
- package/dist/components/IdleNotificationBar.js +10 -0
- package/dist/components/IdleNotificationBar.js.map +7 -0
- package/dist/components/ModelSelector/ModelSelector.js +55 -20
- package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
- package/dist/components/PromptInput.js +186 -115
- package/dist/components/PromptInput.js.map +2 -2
- package/dist/components/RewindPanel.js +272 -0
- package/dist/components/RewindPanel.js.map +7 -0
- package/dist/components/Spinner.js +10 -21
- package/dist/components/Spinner.js.map +2 -2
- package/dist/components/StreamingTextPreview.js +29 -0
- package/dist/components/StreamingTextPreview.js.map +7 -0
- package/dist/components/SubagentBlock.js +3 -2
- package/dist/components/SubagentBlock.js.map +2 -2
- package/dist/components/SubagentProgress.js +4 -4
- package/dist/components/SubagentProgress.js.map +2 -2
- package/dist/components/TabbedListView/SearchInput.js +1 -1
- package/dist/components/TabbedListView/SearchInput.js.map +2 -2
- package/dist/components/TabbedListView/TabbedListView.js +87 -41
- package/dist/components/TabbedListView/TabbedListView.js.map +2 -2
- package/dist/components/TaskCard.js +4 -4
- package/dist/components/TaskCard.js.map +2 -2
- package/dist/components/TeamMemberPanel.js +107 -0
- package/dist/components/TeamMemberPanel.js.map +7 -0
- package/dist/components/ThinkingSelector.js +84 -0
- package/dist/components/ThinkingSelector.js.map +7 -0
- package/dist/components/TitledDivider.js +26 -0
- package/dist/components/TitledDivider.js.map +7 -0
- package/dist/components/TodoPanel.js +31 -30
- package/dist/components/TodoPanel.js.map +2 -2
- package/dist/components/TokenWarning.js +28 -7
- package/dist/components/TokenWarning.js.map +2 -2
- package/dist/components/messages/AssistantTextMessage.js +5 -2
- package/dist/components/messages/AssistantTextMessage.js.map +2 -2
- package/dist/components/messages/AssistantToolUseMessage.js +9 -1
- package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
- package/dist/components/messages/DefaultToolResultFallback.js +11 -0
- package/dist/components/messages/DefaultToolResultFallback.js.map +7 -0
- package/dist/components/messages/ParallelTasksGroupView.js +14 -6
- package/dist/components/messages/ParallelTasksGroupView.js.map +2 -2
- package/dist/components/messages/TaskInModuleView.js +27 -27
- package/dist/components/messages/TaskInModuleView.js.map +2 -2
- package/dist/components/messages/UserGuidanceMessage.js +26 -0
- package/dist/components/messages/UserGuidanceMessage.js.map +7 -0
- package/dist/components/messages/UserPromptMessage.js +2 -1
- package/dist/components/messages/UserPromptMessage.js.map +2 -2
- package/dist/components/messages/UserTeamNotificationMessage.js +91 -0
- package/dist/components/messages/UserTeamNotificationMessage.js.map +7 -0
- package/dist/components/messages/UserTextMessage.js +8 -0
- package/dist/components/messages/UserTextMessage.js.map +2 -2
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +4 -2
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js.map +2 -2
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +18 -1
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js.map +2 -2
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +12 -1
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +2 -2
- package/dist/components/permissions/PermissionRequest.js +4 -0
- package/dist/components/permissions/PermissionRequest.js.map +2 -2
- package/dist/components/permissions/PlanApprovalRequest.js +164 -0
- package/dist/components/permissions/PlanApprovalRequest.js.map +7 -0
- package/dist/constants/agentTeams.js +17 -0
- package/dist/constants/agentTeams.js.map +7 -0
- package/dist/constants/macros.js +2 -1
- package/dist/constants/macros.js.map +2 -2
- package/dist/constants/prompts/agentPrompt.js +1 -0
- package/dist/constants/prompts/agentPrompt.js.map +2 -2
- package/dist/constants/prompts/autoMemory.js +39 -0
- package/dist/constants/prompts/autoMemory.js.map +7 -0
- package/dist/constants/prompts/codeConventions.js +1 -13
- package/dist/constants/prompts/codeConventions.js.map +2 -2
- package/dist/constants/prompts/doingTasks.js +21 -2
- package/dist/constants/prompts/doingTasks.js.map +2 -2
- package/dist/constants/prompts/envInfo.js +6 -7
- package/dist/constants/prompts/envInfo.js.map +2 -2
- package/dist/constants/prompts/index.js +27 -5
- package/dist/constants/prompts/index.js.map +2 -2
- package/dist/constants/prompts/taskManagement.js +2 -43
- package/dist/constants/prompts/taskManagement.js.map +2 -2
- package/dist/constants/prompts/teamOverlays.js +50 -0
- package/dist/constants/prompts/teamOverlays.js.map +7 -0
- package/dist/constants/prompts/toneAndStyle.js +4 -29
- package/dist/constants/prompts/toneAndStyle.js.map +2 -2
- package/dist/constants/prompts/toolUsagePolicy.js +7 -22
- package/dist/constants/prompts/toolUsagePolicy.js.map +2 -2
- package/dist/constants/toolInputExamples.js +2 -2
- package/dist/constants/toolInputExamples.js.map +2 -2
- package/dist/context.js +39 -6
- package/dist/context.js.map +2 -2
- package/dist/core/backupManager.js +1 -1
- package/dist/core/backupManager.js.map +2 -2
- package/dist/core/permissions/rules/planModeRule.js +1 -1
- package/dist/core/permissions/rules/planModeRule.js.map +1 -1
- package/dist/core/permissions/rules/safeModeRule.js +1 -1
- package/dist/core/permissions/rules/safeModeRule.js.map +1 -1
- package/dist/engine/AgentEngine.js +902 -0
- package/dist/engine/AgentEngine.js.map +7 -0
- package/dist/engine/EngineRegistry.js +89 -0
- package/dist/engine/EngineRegistry.js.map +7 -0
- package/dist/engine/foregroundAdapter.js +191 -0
- package/dist/engine/foregroundAdapter.js.map +7 -0
- package/dist/engine/index.js +15 -0
- package/dist/engine/index.js.map +7 -0
- package/dist/engine/types.js +1 -0
- package/dist/engine/types.js.map +7 -0
- package/dist/entrypoints/cli.js +410 -79
- package/dist/entrypoints/cli.js.map +3 -3
- package/dist/hooks/useAgentEngine.js +129 -0
- package/dist/hooks/useAgentEngine.js.map +7 -0
- package/dist/hooks/useAgentTokenStats.js +0 -16
- package/dist/hooks/useAgentTokenStats.js.map +2 -2
- package/dist/hooks/useCanUseTool.js +47 -2
- package/dist/hooks/useCanUseTool.js.map +2 -2
- package/dist/hooks/useDeferredLoading.js +4 -1
- package/dist/hooks/useDeferredLoading.js.map +2 -2
- package/dist/hooks/useIdleNotifications.js +66 -0
- package/dist/hooks/useIdleNotifications.js.map +7 -0
- package/dist/hooks/useSessionTracking.js +9 -7
- package/dist/hooks/useSessionTracking.js.map +2 -2
- package/dist/hooks/useTeamMembers.js +51 -0
- package/dist/hooks/useTeamMembers.js.map +7 -0
- package/dist/i18n/locales/en.js +77 -12
- package/dist/i18n/locales/en.js.map +2 -2
- package/dist/i18n/locales/zh-CN.js +77 -12
- package/dist/i18n/locales/zh-CN.js.map +2 -2
- package/dist/i18n/types.js.map +1 -1
- package/dist/messages.js.map +2 -2
- package/dist/permissions.js +113 -7
- package/dist/permissions.js.map +2 -2
- package/dist/query.js +135 -37
- package/dist/query.js.map +2 -2
- package/dist/screens/REPL.js +504 -361
- package/dist/screens/REPL.js.map +3 -3
- package/dist/screens/ResumeConversation.js +199 -14
- package/dist/screens/ResumeConversation.js.map +2 -2
- package/dist/services/adapters/base.js.map +1 -1
- package/dist/services/agentTeams/backends/headless.js +108 -0
- package/dist/services/agentTeams/backends/headless.js.map +7 -0
- package/dist/services/agentTeams/backends/inProcess.js +102 -0
- package/dist/services/agentTeams/backends/inProcess.js.map +7 -0
- package/dist/services/agentTeams/backends/resolver.js +18 -0
- package/dist/services/agentTeams/backends/resolver.js.map +7 -0
- package/dist/services/agentTeams/backends/tmux.js +168 -0
- package/dist/services/agentTeams/backends/tmux.js.map +7 -0
- package/dist/services/agentTeams/backends/types.js +1 -0
- package/dist/services/agentTeams/backends/types.js.map +7 -0
- package/dist/services/agentTeams/heartbeat.js +88 -0
- package/dist/services/agentTeams/heartbeat.js.map +7 -0
- package/dist/services/agentTeams/index.js +42 -2
- package/dist/services/agentTeams/index.js.map +2 -2
- package/dist/services/agentTeams/injectionChannel.js +105 -0
- package/dist/services/agentTeams/injectionChannel.js.map +7 -0
- package/dist/services/agentTeams/mailbox.js +410 -30
- package/dist/services/agentTeams/mailbox.js.map +2 -2
- package/dist/services/agentTeams/messageFormatter.js +80 -0
- package/dist/services/agentTeams/messageFormatter.js.map +7 -0
- package/dist/services/agentTeams/permissionDelegation.js +71 -0
- package/dist/services/agentTeams/permissionDelegation.js.map +7 -0
- package/dist/services/agentTeams/teamEvents.js +45 -0
- package/dist/services/agentTeams/teamEvents.js.map +7 -0
- package/dist/services/agentTeams/teamManager.js +251 -34
- package/dist/services/agentTeams/teamManager.js.map +2 -2
- package/dist/services/agentTeams/teamTaskStore.js +290 -61
- package/dist/services/agentTeams/teamTaskStore.js.map +2 -2
- package/dist/services/agentTeams/teammateSpawner.js +99 -18
- package/dist/services/agentTeams/teammateSpawner.js.map +2 -2
- package/dist/services/hookExecutor.js +51 -8
- package/dist/services/hookExecutor.js.map +2 -2
- package/dist/services/llm/anthropicProvider.js +56 -59
- package/dist/services/llm/anthropicProvider.js.map +2 -2
- package/dist/services/llm/dispatch.js +24 -5
- package/dist/services/llm/dispatch.js.map +2 -2
- package/dist/services/llm/openaiProvider.js +115 -136
- package/dist/services/llm/openaiProvider.js.map +3 -3
- package/dist/services/llm/types.js +89 -15
- package/dist/services/llm/types.js.map +2 -2
- package/dist/services/mcpClient.js +80 -4
- package/dist/services/mcpClient.js.map +2 -2
- package/dist/services/mintoAuth.js +299 -0
- package/dist/services/mintoAuth.js.map +7 -0
- package/dist/services/oauth.js +3 -3
- package/dist/services/oauth.js.map +2 -2
- package/dist/services/openai.js +91 -20
- package/dist/services/openai.js.map +2 -2
- package/dist/services/plugins/pluginRuntime.js +11 -5
- package/dist/services/plugins/pluginRuntime.js.map +2 -2
- package/dist/services/plugins/pluginValidation.js +4 -2
- package/dist/services/plugins/pluginValidation.js.map +2 -2
- package/dist/services/sandbox/sandboxController.js +11 -3
- package/dist/services/sandbox/sandboxController.js.map +2 -2
- package/dist/services/sessionMemoryInjector.js +77 -0
- package/dist/services/sessionMemoryInjector.js.map +7 -0
- package/dist/services/systemReminder.js +130 -8
- package/dist/services/systemReminder.js.map +2 -2
- package/dist/services/taskStore.js +199 -8
- package/dist/services/taskStore.js.map +3 -3
- package/dist/services/topicDetector.js +169 -0
- package/dist/services/topicDetector.js.map +7 -0
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +0 -13
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
- package/dist/tools/BashTool/BashTool.js +51 -28
- package/dist/tools/BashTool/BashTool.js.map +2 -2
- package/dist/tools/BashTool/prompt.js +95 -118
- package/dist/tools/BashTool/prompt.js.map +2 -2
- package/dist/tools/BashTool/utils.js +39 -1
- package/dist/tools/BashTool/utils.js.map +2 -2
- package/dist/tools/EnterWorktreeTool/EnterWorktreeTool.js +121 -0
- package/dist/tools/EnterWorktreeTool/EnterWorktreeTool.js.map +7 -0
- package/dist/tools/EnterWorktreeTool/prompt.js +22 -0
- package/dist/tools/EnterWorktreeTool/prompt.js.map +7 -0
- package/dist/tools/FileEditTool/FileEditTool.js +9 -4
- package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
- package/dist/tools/FileEditTool/prompt.js +3 -7
- package/dist/tools/FileEditTool/prompt.js.map +2 -2
- package/dist/tools/FileReadTool/FileReadTool.js +125 -3
- package/dist/tools/FileReadTool/FileReadTool.js.map +2 -2
- package/dist/tools/FileReadTool/prompt.js +1 -2
- package/dist/tools/FileReadTool/prompt.js.map +2 -2
- package/dist/tools/FileWriteTool/prompt.js +3 -5
- package/dist/tools/FileWriteTool/prompt.js.map +2 -2
- package/dist/tools/GlobTool/GlobTool.js +3 -2
- package/dist/tools/GlobTool/GlobTool.js.map +2 -2
- package/dist/tools/GrepTool/GrepTool.js +16 -5
- package/dist/tools/GrepTool/GrepTool.js.map +2 -2
- package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +2 -2
- package/dist/tools/MCPSearchTool/MCPSearchTool.js +172 -0
- package/dist/tools/MCPSearchTool/MCPSearchTool.js.map +7 -0
- package/dist/tools/MCPSearchTool/prompt.js +77 -0
- package/dist/tools/MCPSearchTool/prompt.js.map +7 -0
- package/dist/tools/MultiEditTool/prompt.js +4 -7
- package/dist/tools/MultiEditTool/prompt.js.map +2 -2
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js +12 -8
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +2 -2
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js +54 -1
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +2 -2
- package/dist/tools/PlanModeTool/prompt.js +23 -74
- package/dist/tools/PlanModeTool/prompt.js.map +2 -2
- package/dist/tools/SendMessageTool/SendMessageTool.js +341 -0
- package/dist/tools/SendMessageTool/SendMessageTool.js.map +7 -0
- package/dist/tools/SendMessageTool/prompt.js +44 -0
- package/dist/tools/SendMessageTool/prompt.js.map +7 -0
- package/dist/tools/TaskCreateTool/prompt.js +15 -4
- package/dist/tools/TaskCreateTool/prompt.js.map +2 -2
- package/dist/tools/TaskListTool/prompt.js +18 -3
- package/dist/tools/TaskListTool/prompt.js.map +2 -2
- package/dist/tools/TaskOutputTool/prompt.js +4 -3
- package/dist/tools/TaskOutputTool/prompt.js.map +2 -2
- package/dist/tools/TaskTool/TaskTool.js +762 -98
- package/dist/tools/TaskTool/TaskTool.js.map +3 -3
- package/dist/tools/TaskTool/constants.js +8 -2
- package/dist/tools/TaskTool/constants.js.map +2 -2
- package/dist/tools/TaskTool/prompt.js +74 -70
- package/dist/tools/TaskTool/prompt.js.map +2 -2
- package/dist/tools/TaskUpdateTool/TaskUpdateTool.js +15 -1
- package/dist/tools/TaskUpdateTool/TaskUpdateTool.js.map +2 -2
- package/dist/tools/TeamCreateTool/TeamCreateTool.js +129 -0
- package/dist/tools/TeamCreateTool/TeamCreateTool.js.map +7 -0
- package/dist/tools/TeamCreateTool/prompt.js +58 -0
- package/dist/tools/TeamCreateTool/prompt.js.map +7 -0
- package/dist/tools/TeamDeleteTool/TeamDeleteTool.js +151 -0
- package/dist/tools/TeamDeleteTool/TeamDeleteTool.js.map +7 -0
- package/dist/tools/TeamDeleteTool/prompt.js +16 -0
- package/dist/tools/TeamDeleteTool/prompt.js.map +7 -0
- package/dist/tools/URLFetcherTool/URLFetcherTool.js +106 -15
- package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
- package/dist/tools/URLFetcherTool/prompt.js +3 -2
- package/dist/tools/URLFetcherTool/prompt.js.map +2 -2
- package/dist/tools/WebSearchTool/WebSearchTool.js +2 -1
- package/dist/tools/WebSearchTool/WebSearchTool.js.map +2 -2
- package/dist/tools/WebSearchTool/prompt.js +5 -4
- package/dist/tools/WebSearchTool/prompt.js.map +2 -2
- package/dist/tools.js +100 -20
- package/dist/tools.js.map +2 -2
- package/dist/types/PermissionMode.js +35 -6
- package/dist/types/PermissionMode.js.map +2 -2
- package/dist/types/hooks.js +2 -0
- package/dist/types/hooks.js.map +2 -2
- package/dist/types/plugin.js +2 -0
- package/dist/types/plugin.js.map +3 -3
- package/dist/utils/CircuitBreaker.js +15 -9
- package/dist/utils/CircuitBreaker.js.map +2 -2
- package/dist/utils/agentLoader.js +249 -112
- package/dist/utils/agentLoader.js.map +2 -2
- package/dist/utils/animationManager.js +40 -3
- package/dist/utils/animationManager.js.map +2 -2
- package/dist/utils/ask.js +7 -6
- package/dist/utils/ask.js.map +2 -2
- package/dist/utils/atomicWrite.js +23 -0
- package/dist/utils/atomicWrite.js.map +7 -0
- package/dist/utils/autoCompactCore.js +73 -56
- package/dist/utils/autoCompactCore.js.map +2 -2
- package/dist/utils/autoMemoryPaths.js +89 -0
- package/dist/utils/autoMemoryPaths.js.map +7 -0
- package/dist/utils/config.js +63 -38
- package/dist/utils/config.js.map +2 -2
- package/dist/utils/configSchema.js +13 -8
- package/dist/utils/configSchema.js.map +2 -2
- package/dist/utils/credentials/index.js +14 -0
- package/dist/utils/credentials/index.js.map +2 -2
- package/dist/utils/dualPath.js +24 -0
- package/dist/utils/dualPath.js.map +7 -0
- package/dist/utils/exit.js +66 -7
- package/dist/utils/exit.js.map +2 -2
- package/dist/utils/externalEditor.js +155 -0
- package/dist/utils/externalEditor.js.map +7 -0
- package/dist/utils/fileLock.js +67 -0
- package/dist/utils/fileLock.js.map +7 -0
- package/dist/utils/format.js +24 -14
- package/dist/utils/format.js.map +2 -2
- package/dist/utils/globalErrorHandler.js +5 -96
- package/dist/utils/globalErrorHandler.js.map +3 -3
- package/dist/utils/groupHandlers/parallelTasksHandler.js +5 -3
- package/dist/utils/groupHandlers/parallelTasksHandler.js.map +2 -2
- package/dist/utils/groupHandlers/taskHandler.js +2 -2
- package/dist/utils/groupHandlers/taskHandler.js.map +2 -2
- package/dist/utils/hookManager.js +64 -6
- package/dist/utils/hookManager.js.map +2 -2
- package/dist/utils/log.js +6 -2
- package/dist/utils/log.js.map +2 -2
- package/dist/utils/markdown.js +237 -19
- package/dist/utils/markdown.js.map +2 -2
- package/dist/utils/messageContextManager.js +18 -5
- package/dist/utils/messageContextManager.js.map +2 -2
- package/dist/utils/messageGroupManager.js +1 -1
- package/dist/utils/messageGroupManager.js.map +2 -2
- package/dist/utils/messages.js +104 -46
- package/dist/utils/messages.js.map +2 -2
- package/dist/utils/model.js +2 -2
- package/dist/utils/model.js.map +2 -2
- package/dist/utils/pasteCache.js +8 -4
- package/dist/utils/pasteCache.js.map +2 -2
- package/dist/utils/pluginLoader.js +18 -0
- package/dist/utils/pluginLoader.js.map +2 -2
- package/dist/utils/secureKeyStorage.js +36 -7
- package/dist/utils/secureKeyStorage.js.map +2 -2
- package/dist/utils/simpleMode.js +7 -0
- package/dist/utils/simpleMode.js.map +7 -0
- package/dist/utils/streamingState.js +11 -1
- package/dist/utils/streamingState.js.map +2 -2
- package/dist/utils/taskDisplayUtils.js +2 -1
- package/dist/utils/taskDisplayUtils.js.map +2 -2
- package/dist/utils/teamConfig.js +2 -2
- package/dist/utils/teamConfig.js.map +2 -2
- package/dist/utils/thinking.js +6 -2
- package/dist/utils/thinking.js.map +3 -3
- package/dist/utils/tokenProgress.js +55 -0
- package/dist/utils/tokenProgress.js.map +7 -0
- package/dist/utils/toolRiskClassification.js +26 -17
- package/dist/utils/toolRiskClassification.js.map +2 -2
- package/dist/utils/tooling/toolError.js +12 -0
- package/dist/utils/tooling/toolError.js.map +7 -0
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +10 -8
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/services/llm/dispatch.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * LLM dispatch \u2014 routes queries to the appropriate provider (Anthropic or OpenAI).\n */\nimport { randomUUID } from 'crypto'\n\nimport type { AssistantMessage, UserMessage } from '@query'\nimport { Tool } from '@tool'\nimport type { ToolUseContext } from '@tool'\nimport {\n getGlobalConfig,\n ModelProfile,\n} from '@utils/config'\nimport { isGPT5ModelName as isGPT5Model } from '@utils/config'\nimport {\n debug as debugLogger,\n markPhase,\n getCurrentRequest,\n logErrorWithDiagnosis,\n} from '@utils/debugLogger'\nimport { getModelManager } from '@utils/model'\nimport { withVCR } from '../vcr'\nimport { responseStateManager, getConversationId } from '../responseStateManager'\nimport { generateSystemReminders } from '../systemReminder'\n\nimport { generateMintoContext } from './mintoContext'\nimport { queryAnthropicNative } from './anthropicProvider'\nimport { queryOpenAI } from './openaiProvider'\n\n// \u2500\u2500 queryLLM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function queryLLM(\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[],\n maxThinkingTokens: number,\n tools: Tool[],\n signal: AbortSignal,\n options: {\n safeMode: boolean\n model: string | import('@utils/config').ModelPointerType\n prependCLISysprompt: boolean\n toolUseContext?: ToolUseContext\n },\n): Promise<AssistantMessage> {\n const modelManager = getModelManager()\n const modelResolution = modelManager.resolveModelWithInfo(options.model)\n\n if (!modelResolution.success || !modelResolution.profile) {\n throw new Error(\n modelResolution.error || `Failed to resolve model: ${options.model}`,\n )\n }\n\n const modelProfile = modelResolution.profile\n const resolvedModel = modelProfile.modelName\n\n // Initialize response state if toolUseContext is provided\n const toolUseContext = options.toolUseContext\n if (toolUseContext && !toolUseContext.responseState) {\n const conversationId = getConversationId(\n toolUseContext.agentId,\n toolUseContext.messageId,\n )\n const previousResponseId =\n responseStateManager.getPreviousResponseId(conversationId)\n\n toolUseContext.responseState = {\n previousResponseId,\n conversationId,\n }\n }\n\n debugLogger.api('MODEL_RESOLVED', {\n inputParam: options.model,\n resolvedModelName: resolvedModel,\n provider: modelProfile.provider,\n isPointer: ['main', 'task', 'reasoning', 'quick'].includes(options.model),\n hasResponseState: !!toolUseContext?.responseState,\n conversationId: toolUseContext?.responseState?.conversationId,\n requestId: getCurrentRequest()?.id,\n })\n\n const currentRequest = getCurrentRequest()\n debugLogger.api('LLM_REQUEST_START', {\n messageCount: messages.length,\n systemPromptLength: systemPrompt.join(' ').length,\n toolCount: tools.length,\n model: resolvedModel,\n originalModelParam: options.model,\n requestId: getCurrentRequest()?.id,\n })\n\n markPhase('LLM_CALL')\n\n try {\n const result = await withVCR(messages, () =>\n queryLLMWithPromptCaching(\n messages,\n systemPrompt,\n maxThinkingTokens,\n tools,\n signal,\n { ...options, model: resolvedModel, modelProfile, toolUseContext },\n ),\n )\n\n debugLogger.api('LLM_REQUEST_SUCCESS', {\n costUSD: result.costUSD,\n durationMs: result.durationMs,\n responseLength: result.message.content?.length || 0,\n requestId: getCurrentRequest()?.id,\n })\n\n // Update response state for GPT-5 Responses API continuation\n if (toolUseContext?.responseState?.conversationId && result.responseId) {\n responseStateManager.setPreviousResponseId(\n toolUseContext.responseState.conversationId,\n result.responseId,\n )\n\n debugLogger.api('RESPONSE_STATE_UPDATED', {\n conversationId: toolUseContext.responseState.conversationId,\n responseId: result.responseId,\n requestId: getCurrentRequest()?.id,\n })\n }\n\n return result\n } catch (error) {\n logErrorWithDiagnosis(\n error,\n {\n messageCount: messages.length,\n systemPromptLength: systemPrompt.join(' ').length,\n model: options.model,\n toolCount: tools.length,\n phase: 'LLM_CALL',\n },\n currentRequest?.id,\n )\n\n throw error\n }\n}\n\n// \u2500\u2500 formatSystemPromptWithContext \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function formatSystemPromptWithContext(\n systemPrompt: string[],\n context: { [k: string]: string },\n agentId?: string,\n): { systemPrompt: string[]; reminders: string } {\n const enhancedPrompt = [...systemPrompt]\n let reminders = ''\n\n // Step 0: Add GPT-5 Agent persistence support for coding tasks\n const modelManager = getModelManager()\n const modelProfile = modelManager.getModel('main')\n if (modelProfile && isGPT5Model(modelProfile.modelName)) {\n const persistencePrompts = [\n '\\n# Agent Persistence for Long-Running Coding Tasks',\n 'You are working on a coding project that may involve multiple steps and iterations. Please maintain context and continuity throughout the session:',\n '- Remember architectural decisions and design patterns established earlier',\n '- Keep track of file modifications and their relationships',\n '- Maintain awareness of the overall project structure and goals',\n '- Reference previous implementations when making related changes',\n '- Ensure consistency with existing code style and conventions',\n '- Build incrementally on previous work rather than starting from scratch',\n ]\n enhancedPrompt.push(...persistencePrompts)\n }\n\n const hasContext = Object.entries(context).length > 0\n\n if (hasContext) {\n const mintoContext = generateMintoContext()\n if (mintoContext) {\n enhancedPrompt.push('\\n---\\n# \u9879\u76EE\u4E0A\u4E0B\u6587\\n')\n enhancedPrompt.push(mintoContext)\n enhancedPrompt.push('\\n---\\n')\n }\n\n const reminderMessages = generateSystemReminders(hasContext, agentId)\n if (reminderMessages.length > 0) {\n reminders = reminderMessages.map(r => r.content).join('\\n') + '\\n'\n }\n\n enhancedPrompt.push(\n `\\nAs you answer the user's questions, you can use the following context:\\n`,\n )\n\n const filteredContext = Object.fromEntries(\n Object.entries(context).filter(\n ([key]) => key !== 'projectDocs' && key !== 'userDocs',\n ),\n )\n\n enhancedPrompt.push(\n ...Object.entries(filteredContext).map(\n ([key, value]) => `<context name=\"${key}\">${value}</context>`,\n ),\n )\n }\n\n return { systemPrompt: enhancedPrompt, reminders }\n}\n\n// \u2500\u2500 queryLLMWithPromptCaching (internal dispatcher) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function queryLLMWithPromptCaching(\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[],\n maxThinkingTokens: number,\n tools: Tool[],\n signal: AbortSignal,\n options: {\n safeMode: boolean\n model: string\n prependCLISysprompt: boolean\n modelProfile?: ModelProfile | null\n toolUseContext?: ToolUseContext\n },\n): Promise<AssistantMessage> {\n const config = getGlobalConfig()\n const modelManager = getModelManager()\n const toolUseContext = options.toolUseContext\n\n const modelProfile = options.modelProfile || modelManager.getModel('main')\n let provider: string\n\n if (modelProfile) {\n provider = modelProfile.provider || config.primaryProvider || 'anthropic'\n } else {\n provider = config.primaryProvider || 'anthropic'\n }\n\n // Use native Anthropic SDK for Anthropic and some Anthropic-compatible providers\n if (\n provider === 'anthropic' ||\n provider === 'bigdream' ||\n provider === 'opendev'\n ) {\n return queryAnthropicNative(\n messages,\n systemPrompt,\n maxThinkingTokens,\n tools,\n signal,\n { ...options, modelProfile, toolUseContext },\n )\n }\n\n // Use OpenAI-compatible interface for all other providers\n return queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, signal, {\n ...options,\n modelProfile,\n toolUseContext,\n })\n}\n\n// \u2500\u2500 Convenience query functions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function queryModel(\n modelPointer: import('@utils/config').ModelPointerType,\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[] = [],\n signal?: AbortSignal,\n): Promise<AssistantMessage> {\n return queryLLM(\n messages,\n systemPrompt,\n 0, // maxThinkingTokens\n [], // tools\n signal || new AbortController().signal,\n {\n safeMode: false,\n model: modelPointer,\n prependCLISysprompt: true,\n },\n )\n}\n\nexport async function queryQuick({\n systemPrompt = [],\n userPrompt,\n assistantPrompt,\n enablePromptCaching = false,\n signal,\n}: {\n systemPrompt?: string[]\n userPrompt: string\n assistantPrompt?: string\n enablePromptCaching?: boolean\n signal?: AbortSignal\n}): Promise<AssistantMessage> {\n const messages = [\n {\n message: { role: 'user', content: userPrompt },\n type: 'user',\n uuid: randomUUID(),\n },\n ] as (UserMessage | AssistantMessage)[]\n\n return queryModel('quick', messages, systemPrompt, signal)\n}\n"],
|
|
5
|
-
"mappings": "AAGA,SAAS,kBAAkB;AAK3B
|
|
4
|
+
"sourcesContent": ["/**\n * LLM dispatch \u2014 routes queries to the appropriate provider (Anthropic or OpenAI).\n */\nimport { randomUUID } from 'crypto'\n\nimport type { AssistantMessage, UserMessage } from '@query'\nimport { Tool } from '@tool'\nimport type { ToolUseContext } from '@tool'\nimport { getGlobalConfig, ModelProfile } from '@utils/config'\nimport { isGPT5ModelName as isGPT5Model } from '@utils/config'\nimport {\n debug as debugLogger,\n markPhase,\n getCurrentRequest,\n logErrorWithDiagnosis,\n} from '@utils/debugLogger'\nimport { getModelManager } from '@utils/model'\nimport { withVCR } from '../vcr'\nimport {\n responseStateManager,\n getConversationId,\n} from '../responseStateManager'\nimport { generateSystemReminders } from '../systemReminder'\nimport { getSessionMemoryBlock } from '../sessionMemoryInjector'\n\nimport { isAutoMemoryEnabled, readMemoryMd } from '@utils/autoMemoryPaths'\nimport { generateMintoContext } from './mintoContext'\nimport { queryAnthropicNative } from './anthropicProvider'\nimport { queryOpenAI } from './openaiProvider'\n\n// \u2500\u2500 queryLLM \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function queryLLM(\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[],\n maxThinkingTokens: number,\n tools: Tool[],\n signal: AbortSignal,\n options: {\n safeMode: boolean\n model: string | import('@utils/config').ModelPointerType\n prependCLISysprompt: boolean\n toolUseContext?: ToolUseContext\n },\n): Promise<AssistantMessage> {\n const modelManager = getModelManager()\n const modelResolution = modelManager.resolveModelWithInfo(options.model)\n\n if (!modelResolution.success || !modelResolution.profile) {\n throw new Error(\n modelResolution.error || `Failed to resolve model: ${options.model}`,\n )\n }\n\n const modelProfile = modelResolution.profile\n const resolvedModel = modelProfile.modelName\n\n // Initialize response state if toolUseContext is provided\n const toolUseContext = options.toolUseContext\n if (toolUseContext && !toolUseContext.responseState) {\n const conversationId = getConversationId(\n toolUseContext.agentId,\n toolUseContext.messageId,\n )\n const previousResponseId =\n responseStateManager.getPreviousResponseId(conversationId)\n\n toolUseContext.responseState = {\n previousResponseId,\n conversationId,\n }\n }\n\n debugLogger.api('MODEL_RESOLVED', {\n inputParam: options.model,\n resolvedModelName: resolvedModel,\n provider: modelProfile.provider,\n isPointer: ['main', 'task', 'reasoning', 'quick', 'compact'].includes(\n options.model,\n ),\n hasResponseState: !!toolUseContext?.responseState,\n conversationId: toolUseContext?.responseState?.conversationId,\n requestId: getCurrentRequest()?.id,\n })\n\n const currentRequest = getCurrentRequest()\n debugLogger.api('LLM_REQUEST_START', {\n messageCount: messages.length,\n systemPromptLength: systemPrompt.join(' ').length,\n toolCount: tools.length,\n model: resolvedModel,\n originalModelParam: options.model,\n requestId: getCurrentRequest()?.id,\n })\n\n markPhase('LLM_CALL')\n\n try {\n const result = await withVCR(messages, () =>\n queryLLMWithPromptCaching(\n messages,\n systemPrompt,\n maxThinkingTokens,\n tools,\n signal,\n { ...options, model: resolvedModel, modelProfile, toolUseContext },\n ),\n )\n\n debugLogger.api('LLM_REQUEST_SUCCESS', {\n costUSD: result.costUSD,\n durationMs: result.durationMs,\n responseLength: result.message.content?.length || 0,\n requestId: getCurrentRequest()?.id,\n })\n\n // Update response state for GPT-5 Responses API continuation\n if (toolUseContext?.responseState?.conversationId && result.responseId) {\n responseStateManager.setPreviousResponseId(\n toolUseContext.responseState.conversationId,\n result.responseId,\n )\n\n debugLogger.api('RESPONSE_STATE_UPDATED', {\n conversationId: toolUseContext.responseState.conversationId,\n responseId: result.responseId,\n requestId: getCurrentRequest()?.id,\n })\n }\n\n return result\n } catch (error) {\n logErrorWithDiagnosis(\n error,\n {\n messageCount: messages.length,\n systemPromptLength: systemPrompt.join(' ').length,\n model: options.model,\n toolCount: tools.length,\n phase: 'LLM_CALL',\n },\n currentRequest?.id,\n )\n\n throw error\n }\n}\n\n// \u2500\u2500 formatSystemPromptWithContext \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport function formatSystemPromptWithContext(\n systemPrompt: string[],\n context: { [k: string]: string },\n agentId?: string,\n): { systemPrompt: string[]; reminders: string } {\n const enhancedPrompt = [...systemPrompt]\n let reminders = ''\n\n // Step 0: Add GPT-5 Agent persistence support for coding tasks\n const modelManager = getModelManager()\n const modelProfile = modelManager.getModel('main')\n if (modelProfile && isGPT5Model(modelProfile.modelName)) {\n const persistencePrompts = [\n '\\n# Agent Persistence for Long-Running Coding Tasks',\n 'You are working on a coding project that may involve multiple steps and iterations. Please maintain context and continuity throughout the session:',\n '- Remember architectural decisions and design patterns established earlier',\n '- Keep track of file modifications and their relationships',\n '- Maintain awareness of the overall project structure and goals',\n '- Reference previous implementations when making related changes',\n '- Ensure consistency with existing code style and conventions',\n '- Build incrementally on previous work rather than starting from scratch',\n ]\n enhancedPrompt.push(...persistencePrompts)\n }\n\n const hasContext = Object.entries(context).length > 0\n\n // Inject session memory from previous sessions (if enabled)\n const sessionMemoryBlock = getSessionMemoryBlock()\n if (sessionMemoryBlock) {\n enhancedPrompt.push(sessionMemoryBlock)\n }\n\n // Inject MEMORY.md from per-project auto memory directory (CC-compatible)\n if (isAutoMemoryEnabled()) {\n const memoryContent = readMemoryMd()\n if (memoryContent) {\n enhancedPrompt.push(`\\n# Auto Memory\\n\\n${memoryContent}\\n`)\n }\n }\n\n if (hasContext) {\n const mintoContext = generateMintoContext()\n if (mintoContext) {\n enhancedPrompt.push('\\n---\\n# \u9879\u76EE\u4E0A\u4E0B\u6587\\n')\n enhancedPrompt.push(mintoContext)\n enhancedPrompt.push('\\n---\\n')\n }\n\n const reminderMessages = generateSystemReminders(hasContext, agentId)\n if (reminderMessages.length > 0) {\n reminders = reminderMessages.map(r => r.content).join('\\n') + '\\n'\n }\n\n enhancedPrompt.push(\n `\\nAs you answer the user's questions, you can use the following context:\\n`,\n )\n\n const filteredContext = Object.fromEntries(\n Object.entries(context).filter(\n ([key]) => key !== 'projectDocs' && key !== 'userDocs',\n ),\n )\n\n enhancedPrompt.push(\n ...Object.entries(filteredContext).map(\n ([key, value]) => `<context name=\"${key}\">${value}</context>`,\n ),\n )\n }\n\n return { systemPrompt: enhancedPrompt, reminders }\n}\n\n// \u2500\u2500 queryLLMWithPromptCaching (internal dispatcher) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nasync function queryLLMWithPromptCaching(\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[],\n maxThinkingTokens: number,\n tools: Tool[],\n signal: AbortSignal,\n options: {\n safeMode: boolean\n model: string\n prependCLISysprompt: boolean\n modelProfile?: ModelProfile | null\n toolUseContext?: ToolUseContext\n },\n): Promise<AssistantMessage> {\n const config = getGlobalConfig()\n const modelManager = getModelManager()\n const toolUseContext = options.toolUseContext\n\n const modelProfile = options.modelProfile || modelManager.getModel('main')\n let provider: string\n\n if (modelProfile) {\n provider = modelProfile.provider || config.primaryProvider || 'anthropic'\n } else {\n provider = config.primaryProvider || 'anthropic'\n }\n\n // Use native Anthropic SDK for Anthropic and some Anthropic-compatible providers\n if (\n provider === 'anthropic' ||\n provider === 'bigdream' ||\n provider === 'opendev'\n ) {\n return queryAnthropicNative(\n messages,\n systemPrompt,\n maxThinkingTokens,\n tools,\n signal,\n { ...options, modelProfile, toolUseContext },\n )\n }\n\n // Use OpenAI-compatible interface for all other providers\n return queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, signal, {\n ...options,\n modelProfile,\n toolUseContext,\n })\n}\n\n// \u2500\u2500 Convenience query functions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport async function queryModel(\n modelPointer: import('@utils/config').ModelPointerType,\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[] = [],\n signal?: AbortSignal,\n): Promise<AssistantMessage> {\n return queryLLM(\n messages,\n systemPrompt,\n 0, // maxThinkingTokens\n [], // tools\n signal || new AbortController().signal,\n {\n safeMode: false,\n model: modelPointer,\n prependCLISysprompt: true,\n },\n )\n}\n\nexport async function queryQuick({\n systemPrompt = [],\n userPrompt,\n assistantPrompt,\n enablePromptCaching = false,\n signal,\n}: {\n systemPrompt?: string[]\n userPrompt: string\n assistantPrompt?: string\n enablePromptCaching?: boolean\n signal?: AbortSignal\n}): Promise<AssistantMessage> {\n const messages = [\n {\n message: { role: 'user', content: userPrompt },\n type: 'user',\n uuid: randomUUID(),\n },\n ] as (UserMessage | AssistantMessage)[]\n\n return queryModel('quick', messages, systemPrompt, signal)\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import { randomUUID } from "crypto";
|
|
2
2
|
import { nanoid } from "nanoid";
|
|
3
3
|
import { getToolDescriptionAsync } from "../../Tool.js";
|
|
4
|
-
import {
|
|
5
|
-
getGlobalConfig
|
|
6
|
-
} from "../../utils/config.js";
|
|
4
|
+
import { getGlobalConfig } from "../../utils/config.js";
|
|
7
5
|
import { isGPT5ModelName as isGPT5Model } from "../../utils/config.js";
|
|
8
|
-
import {
|
|
9
|
-
createAssistantAPIErrorMessage,
|
|
10
|
-
normalizeContentFromAPI
|
|
11
|
-
} from "../../utils/messages.js";
|
|
6
|
+
import { normalizeContentFromAPI } from "../../utils/messages.js";
|
|
12
7
|
import {
|
|
13
8
|
debug as debugLogger,
|
|
14
9
|
getCurrentRequest,
|
|
@@ -19,7 +14,13 @@ import { getModelManager } from "../../utils/model.js";
|
|
|
19
14
|
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
20
15
|
import { ModelAdapterFactory } from "../modelAdapterFactory.js";
|
|
21
16
|
import { getCLISyspromptPrefix } from "../../constants/prompts/index.js";
|
|
22
|
-
import { setStreamingState } from "../../utils/streamingState.js";
|
|
17
|
+
import { setStreamingState, getStreamingState } from "../../utils/streamingState.js";
|
|
18
|
+
import {
|
|
19
|
+
beginTokenTracking,
|
|
20
|
+
addPreparedChars,
|
|
21
|
+
addReceivedChars,
|
|
22
|
+
setFinalTokens
|
|
23
|
+
} from "../../utils/tokenProgress.js";
|
|
23
24
|
import {
|
|
24
25
|
getCompletionWithProfile,
|
|
25
26
|
getGPT5CompletionWithProfile
|
|
@@ -29,18 +30,12 @@ import { addRetryEventToTranscript } from "../../utils/agentTranscripts.js";
|
|
|
29
30
|
import { generateMintoContext } from "./mintoContext.js";
|
|
30
31
|
import { splitSysPromptPrefix } from "./anthropicProvider.js";
|
|
31
32
|
import {
|
|
32
|
-
API_ERROR_MESSAGE_PREFIX,
|
|
33
|
-
PROMPT_TOO_LONG_ERROR_MESSAGE,
|
|
34
|
-
CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE,
|
|
35
|
-
INVALID_API_KEY_ERROR_MESSAGE,
|
|
36
33
|
PROMPT_CACHING_ENABLED,
|
|
37
34
|
MAIN_QUERY_TEMPERATURE,
|
|
38
|
-
SONNET_COST_PER_MILLION_INPUT_TOKENS,
|
|
39
|
-
SONNET_COST_PER_MILLION_OUTPUT_TOKENS,
|
|
40
35
|
withRetry,
|
|
41
36
|
getMaxTokensFromProfile,
|
|
42
|
-
|
|
43
|
-
|
|
37
|
+
calculateCostUSD,
|
|
38
|
+
getAssistantMessageFromError,
|
|
44
39
|
addToTotalCost,
|
|
45
40
|
recordTokenUsage,
|
|
46
41
|
logError
|
|
@@ -150,6 +145,7 @@ function messageReducer(previous, item) {
|
|
|
150
145
|
}
|
|
151
146
|
async function handleMessageStream(stream, signal) {
|
|
152
147
|
const streamStartTime = Date.now();
|
|
148
|
+
setStreamingState({ receivedChars: 0 });
|
|
153
149
|
let ttftMs;
|
|
154
150
|
let chunkCount = 0;
|
|
155
151
|
let errorCount = 0;
|
|
@@ -191,13 +187,20 @@ async function handleMessageStream(stream, signal) {
|
|
|
191
187
|
}
|
|
192
188
|
if (!usage && chunk.usage) {
|
|
193
189
|
usage = chunk.usage;
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
190
|
+
setFinalTokens({
|
|
191
|
+
input: chunk.usage.prompt_tokens,
|
|
192
|
+
output: chunk.usage.completion_tokens
|
|
197
193
|
});
|
|
198
194
|
}
|
|
199
195
|
message = messageReducer(message, chunk);
|
|
200
196
|
if (chunk?.choices?.[0]?.delta?.content) {
|
|
197
|
+
const textChunk = chunk.choices[0].delta.content;
|
|
198
|
+
addReceivedChars(textChunk.length);
|
|
199
|
+
const prevText = getStreamingState().streamingText || "";
|
|
200
|
+
setStreamingState({
|
|
201
|
+
streamingText: prevText + textChunk,
|
|
202
|
+
phase: "generating"
|
|
203
|
+
});
|
|
201
204
|
if (!ttftMs) {
|
|
202
205
|
ttftMs = Date.now() - streamStartTime;
|
|
203
206
|
debugLogger.api("OPENAI_STREAM_FIRST_TOKEN", {
|
|
@@ -290,20 +293,6 @@ function convertOpenAIResponseToAnthropic(response, _tools) {
|
|
|
290
293
|
});
|
|
291
294
|
}
|
|
292
295
|
}
|
|
293
|
-
if (message.reasoning) {
|
|
294
|
-
contentBlocks.push({
|
|
295
|
-
type: "thinking",
|
|
296
|
-
thinking: message.reasoning,
|
|
297
|
-
signature: ""
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
if (message.reasoning_content) {
|
|
301
|
-
contentBlocks.push({
|
|
302
|
-
type: "thinking",
|
|
303
|
-
thinking: message.reasoning_content,
|
|
304
|
-
signature: ""
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
296
|
if (message.content) {
|
|
308
297
|
contentBlocks.push({
|
|
309
298
|
type: "text",
|
|
@@ -320,33 +309,11 @@ function convertOpenAIResponseToAnthropic(response, _tools) {
|
|
|
320
309
|
};
|
|
321
310
|
return finalMessage;
|
|
322
311
|
}
|
|
323
|
-
function getAssistantMessageFromError(error) {
|
|
324
|
-
if (error instanceof Error && error.message.includes("prompt is too long")) {
|
|
325
|
-
return createAssistantAPIErrorMessage(PROMPT_TOO_LONG_ERROR_MESSAGE);
|
|
326
|
-
}
|
|
327
|
-
if (error instanceof Error && error.message.includes("Your credit balance is too low")) {
|
|
328
|
-
return createAssistantAPIErrorMessage(CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE);
|
|
329
|
-
}
|
|
330
|
-
if (error instanceof Error && error.message.toLowerCase().includes("x-api-key")) {
|
|
331
|
-
return createAssistantAPIErrorMessage(INVALID_API_KEY_ERROR_MESSAGE);
|
|
332
|
-
}
|
|
333
|
-
if (error instanceof Error) {
|
|
334
|
-
if (process.env.NODE_ENV === "development") {
|
|
335
|
-
debugLogger.error("OPENAI_API_ERROR", {
|
|
336
|
-
message: error.message,
|
|
337
|
-
stack: error.stack
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
return createAssistantAPIErrorMessage(
|
|
341
|
-
`${API_ERROR_MESSAGE_PREFIX}: ${error.message}`
|
|
342
|
-
);
|
|
343
|
-
}
|
|
344
|
-
return createAssistantAPIErrorMessage(API_ERROR_MESSAGE_PREFIX);
|
|
345
|
-
}
|
|
346
312
|
async function queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, signal, options) {
|
|
347
313
|
const config = getGlobalConfig();
|
|
348
314
|
const modelManager = getModelManager();
|
|
349
315
|
const toolUseContext = options?.toolUseContext;
|
|
316
|
+
beginTokenTracking();
|
|
350
317
|
const modelProfile = options?.modelProfile || modelManager.getModel("main");
|
|
351
318
|
let model;
|
|
352
319
|
const currentRequest = getCurrentRequest();
|
|
@@ -367,7 +334,6 @@ async function queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, sig
|
|
|
367
334
|
model = options?.model || modelProfile?.modelName || "";
|
|
368
335
|
}
|
|
369
336
|
if (options?.prependCLISysprompt) {
|
|
370
|
-
const [firstSyspromptBlock] = splitSysPromptPrefix(systemPrompt);
|
|
371
337
|
systemPrompt = [getCLISyspromptPrefix(), ...systemPrompt];
|
|
372
338
|
}
|
|
373
339
|
const system = splitSysPromptPrefix(systemPrompt).map(
|
|
@@ -377,17 +343,20 @@ async function queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, sig
|
|
|
377
343
|
type: "text"
|
|
378
344
|
})
|
|
379
345
|
);
|
|
346
|
+
addPreparedChars(JSON.stringify(system).length);
|
|
380
347
|
const toolSchemas = await Promise.all(
|
|
381
|
-
tools.map(
|
|
382
|
-
|
|
348
|
+
tools.map(async (_) => {
|
|
349
|
+
const schema = {
|
|
383
350
|
type: "function",
|
|
384
351
|
function: {
|
|
385
352
|
name: _.name,
|
|
386
353
|
description: await getToolDescriptionAsync(_),
|
|
387
354
|
parameters: "inputJSONSchema" in _ && _.inputJSONSchema ? _.inputJSONSchema : zodToJsonSchema(_.inputSchema)
|
|
388
355
|
}
|
|
389
|
-
}
|
|
390
|
-
|
|
356
|
+
};
|
|
357
|
+
addPreparedChars(JSON.stringify(schema).length);
|
|
358
|
+
return schema;
|
|
359
|
+
})
|
|
391
360
|
);
|
|
392
361
|
const openaiSystem = system.map(
|
|
393
362
|
(s) => ({
|
|
@@ -396,6 +365,7 @@ async function queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, sig
|
|
|
396
365
|
})
|
|
397
366
|
);
|
|
398
367
|
const openaiMessages = convertAnthropicMessagesToOpenAIMessages(messages);
|
|
368
|
+
addPreparedChars(JSON.stringify(openaiMessages).length);
|
|
399
369
|
const startIncludingRetries = Date.now();
|
|
400
370
|
logSystemPromptConstruction({
|
|
401
371
|
basePrompt: systemPrompt.join("\n"),
|
|
@@ -432,7 +402,7 @@ async function queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, sig
|
|
|
432
402
|
opts.tools = toolSchemas;
|
|
433
403
|
opts.tool_choice = "auto";
|
|
434
404
|
}
|
|
435
|
-
const reasoningEffort = await getReasoningEffort(modelProfile, messages);
|
|
405
|
+
const reasoningEffort = isReasoningModel ? await getReasoningEffort(modelProfile, messages) : void 0;
|
|
436
406
|
if (reasoningEffort) {
|
|
437
407
|
opts.reasoning_effort = reasoningEffort;
|
|
438
408
|
}
|
|
@@ -445,12 +415,11 @@ async function queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, sig
|
|
|
445
415
|
apiKeyExists: !!modelProfile.apiKey,
|
|
446
416
|
requestId: getCurrentRequest()?.id
|
|
447
417
|
});
|
|
448
|
-
|
|
449
|
-
if (USE_NEW_ADAPTER_SYSTEM) {
|
|
418
|
+
if (ModelAdapterFactory.shouldUseResponsesAPI(modelProfile)) {
|
|
450
419
|
const adapter = ModelAdapterFactory.createAdapter(modelProfile);
|
|
451
420
|
const unifiedParams = {
|
|
452
421
|
messages: openaiMessages,
|
|
453
|
-
systemPrompt: openaiSystem.map((
|
|
422
|
+
systemPrompt: openaiSystem.map((s2) => s2.content),
|
|
454
423
|
tools,
|
|
455
424
|
maxTokens: getMaxTokensFromProfile(modelProfile),
|
|
456
425
|
stream: config.stream,
|
|
@@ -458,78 +427,84 @@ async function queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, sig
|
|
|
458
427
|
temperature: isGPT5Model(model) || model.startsWith("o3") || model.startsWith("o4-mini") ? void 0 : MAIN_QUERY_TEMPERATURE,
|
|
459
428
|
previousResponseId: toolUseContext?.responseState?.previousResponseId,
|
|
460
429
|
verbosity: "high"
|
|
461
|
-
// High verbosity for coding tasks
|
|
462
430
|
};
|
|
463
431
|
const request = adapter.createRequest(unifiedParams);
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
const response2 = await callGPT5ResponsesAPI(
|
|
467
|
-
modelProfile,
|
|
468
|
-
request,
|
|
469
|
-
signal
|
|
470
|
-
);
|
|
471
|
-
const unifiedResponse = adapter.parseResponse(response2);
|
|
472
|
-
const apiMessage = {
|
|
473
|
-
role: "assistant",
|
|
474
|
-
content: unifiedResponse.content,
|
|
475
|
-
tool_calls: unifiedResponse.toolCalls,
|
|
476
|
-
usage: {
|
|
477
|
-
prompt_tokens: unifiedResponse.usage.promptTokens,
|
|
478
|
-
completion_tokens: unifiedResponse.usage.completionTokens
|
|
479
|
-
}
|
|
480
|
-
};
|
|
481
|
-
const assistantMsg = {
|
|
482
|
-
type: "assistant",
|
|
483
|
-
message: apiMessage,
|
|
484
|
-
costUSD: 0,
|
|
485
|
-
// Will be calculated later
|
|
486
|
-
durationMs: Date.now() - start,
|
|
487
|
-
uuid: `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
|
|
488
|
-
responseId: unifiedResponse.responseId
|
|
489
|
-
// For state management
|
|
490
|
-
};
|
|
491
|
-
return assistantMsg;
|
|
492
|
-
} else {
|
|
493
|
-
const s = await getCompletionWithProfile(
|
|
494
|
-
modelProfile,
|
|
495
|
-
request,
|
|
496
|
-
0,
|
|
497
|
-
10,
|
|
498
|
-
signal
|
|
499
|
-
);
|
|
500
|
-
let finalResponse;
|
|
501
|
-
if (config.stream) {
|
|
502
|
-
finalResponse = await handleMessageStream(
|
|
503
|
-
s,
|
|
504
|
-
signal
|
|
505
|
-
);
|
|
506
|
-
} else {
|
|
507
|
-
finalResponse = s;
|
|
508
|
-
}
|
|
509
|
-
const r = convertOpenAIResponseToAnthropic(finalResponse, tools);
|
|
510
|
-
return r;
|
|
511
|
-
}
|
|
512
|
-
} else {
|
|
513
|
-
const completionFunction = isGPT5Model(modelProfile.modelName) ? getGPT5CompletionWithProfile : getCompletionWithProfile;
|
|
514
|
-
const s = await completionFunction(
|
|
432
|
+
const { callGPT5ResponsesAPI } = await import("../openai.js");
|
|
433
|
+
const response2 = await callGPT5ResponsesAPI(
|
|
515
434
|
modelProfile,
|
|
516
|
-
|
|
517
|
-
0,
|
|
518
|
-
10,
|
|
435
|
+
request,
|
|
519
436
|
signal
|
|
520
437
|
);
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
438
|
+
const unifiedResponse = adapter.parseResponse(response2);
|
|
439
|
+
const apiMessage = {
|
|
440
|
+
role: "assistant",
|
|
441
|
+
content: unifiedResponse.content,
|
|
442
|
+
tool_calls: unifiedResponse.toolCalls,
|
|
443
|
+
usage: {
|
|
444
|
+
prompt_tokens: unifiedResponse.usage.promptTokens,
|
|
445
|
+
completion_tokens: unifiedResponse.usage.completionTokens
|
|
446
|
+
}
|
|
447
|
+
};
|
|
448
|
+
const respDurationMs = Date.now() - start;
|
|
449
|
+
const respInputTokens = unifiedResponse.usage.promptTokens;
|
|
450
|
+
const respOutputTokens = unifiedResponse.usage.completionTokens;
|
|
451
|
+
const respCostUSD = calculateCostUSD({
|
|
452
|
+
model,
|
|
453
|
+
inputTokens: respInputTokens,
|
|
454
|
+
outputTokens: respOutputTokens,
|
|
455
|
+
cacheReadTokens: 0,
|
|
456
|
+
cacheCreationTokens: 0
|
|
457
|
+
});
|
|
458
|
+
addToTotalCost(respCostUSD, respDurationMs);
|
|
459
|
+
recordTokenUsage(
|
|
460
|
+
{
|
|
461
|
+
inputTokens: respInputTokens,
|
|
462
|
+
outputTokens: respOutputTokens,
|
|
463
|
+
cacheCreationTokens: 0,
|
|
464
|
+
cacheReadTokens: 0
|
|
465
|
+
},
|
|
466
|
+
respCostUSD,
|
|
467
|
+
model,
|
|
468
|
+
toolUseContext ? {
|
|
469
|
+
agentId: toolUseContext.agentId,
|
|
470
|
+
toolUseId: toolUseContext.toolUseId,
|
|
471
|
+
model
|
|
472
|
+
} : void 0
|
|
473
|
+
);
|
|
474
|
+
logLLMInteraction({
|
|
475
|
+
systemPrompt: systemPrompt.join("\n"),
|
|
476
|
+
messages: [...openaiSystem, ...openaiMessages],
|
|
477
|
+
response: apiMessage,
|
|
478
|
+
usage: {
|
|
479
|
+
inputTokens: respInputTokens,
|
|
480
|
+
outputTokens: respOutputTokens
|
|
481
|
+
},
|
|
482
|
+
timing: { start, end: Date.now() },
|
|
483
|
+
apiFormat: "openai"
|
|
484
|
+
});
|
|
485
|
+
const assistantMsg = {
|
|
486
|
+
type: "assistant",
|
|
487
|
+
message: apiMessage,
|
|
488
|
+
costUSD: respCostUSD,
|
|
489
|
+
durationMs: respDurationMs,
|
|
490
|
+
uuid: randomUUID(),
|
|
491
|
+
responseId: unifiedResponse.responseId
|
|
492
|
+
};
|
|
493
|
+
return assistantMsg;
|
|
532
494
|
}
|
|
495
|
+
const completionFunction = isGPT5Model(modelProfile.modelName) ? getGPT5CompletionWithProfile : getCompletionWithProfile;
|
|
496
|
+
const s = await completionFunction(modelProfile, opts, 0, 10, signal);
|
|
497
|
+
let finalResponse;
|
|
498
|
+
if (opts.stream) {
|
|
499
|
+
finalResponse = await handleMessageStream(
|
|
500
|
+
s,
|
|
501
|
+
signal
|
|
502
|
+
);
|
|
503
|
+
} else {
|
|
504
|
+
finalResponse = s;
|
|
505
|
+
}
|
|
506
|
+
const r = convertOpenAIResponseToAnthropic(finalResponse, tools);
|
|
507
|
+
return r;
|
|
533
508
|
} else {
|
|
534
509
|
const errorDetails = {
|
|
535
510
|
modelProfileExists: !!modelProfile,
|
|
@@ -558,17 +533,21 @@ async function queryOpenAI(messages, systemPrompt, maxThinkingTokens, tools, sig
|
|
|
558
533
|
);
|
|
559
534
|
} catch (error) {
|
|
560
535
|
logError(error);
|
|
561
|
-
return getAssistantMessageFromError(error);
|
|
536
|
+
return getAssistantMessageFromError(error, "OPENAI");
|
|
562
537
|
}
|
|
563
538
|
const durationMs = Date.now() - start;
|
|
564
539
|
const durationMsIncludingRetries = Date.now() - startIncludingRetries;
|
|
565
540
|
const inputTokens = response.usage?.prompt_tokens ?? 0;
|
|
566
541
|
const outputTokens = response.usage?.completion_tokens ?? 0;
|
|
567
542
|
const cacheReadInputTokens = response.usage?.prompt_token_details?.cached_tokens ?? 0;
|
|
568
|
-
const cacheCreationInputTokens =
|
|
569
|
-
const
|
|
570
|
-
|
|
571
|
-
|
|
543
|
+
const cacheCreationInputTokens = 0;
|
|
544
|
+
const costUSD = calculateCostUSD({
|
|
545
|
+
model,
|
|
546
|
+
inputTokens,
|
|
547
|
+
outputTokens,
|
|
548
|
+
cacheReadTokens: cacheReadInputTokens,
|
|
549
|
+
cacheCreationTokens: cacheCreationInputTokens
|
|
550
|
+
});
|
|
572
551
|
addToTotalCost(costUSD, durationMsIncludingRetries);
|
|
573
552
|
recordTokenUsage(
|
|
574
553
|
{
|