@within-7/minto 0.1.7 → 0.2.0
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/cli.js +155 -37
- package/dist/Tool.js +38 -0
- package/dist/Tool.js.map +3 -3
- package/dist/commands/agents/AgentsCommand.js +52 -26
- package/dist/commands/agents/AgentsCommand.js.map +2 -2
- package/dist/commands/agents/constants.js +1 -1
- package/dist/commands/agents/constants.js.map +1 -1
- package/dist/commands/agents/index.js +1 -1
- package/dist/commands/bug.js +74 -7
- package/dist/commands/bug.js.map +3 -3
- package/dist/commands/clear.js +3 -0
- package/dist/commands/clear.js.map +2 -2
- package/dist/commands/compact.js +37 -0
- package/dist/commands/compact.js.map +2 -2
- package/dist/commands/context.js +84 -0
- package/dist/commands/context.js.map +7 -0
- package/dist/commands/ctx_viz.js +18 -10
- package/dist/commands/ctx_viz.js.map +2 -2
- package/dist/commands/doctor.js +158 -12
- package/dist/commands/doctor.js.map +2 -2
- package/dist/commands/export.js +156 -0
- package/dist/commands/export.js.map +7 -0
- package/dist/commands/mcp-interactive.js +21 -12
- package/dist/commands/mcp-interactive.js.map +2 -2
- package/dist/commands/model.js +6 -5
- package/dist/commands/model.js.map +2 -2
- package/dist/commands/permissions.js +86 -0
- package/dist/commands/permissions.js.map +7 -0
- package/dist/commands/quit.js +3 -1
- package/dist/commands/quit.js.map +2 -2
- package/dist/commands/sandbox.js +104 -0
- package/dist/commands/sandbox.js.map +7 -0
- package/dist/commands/status.js +58 -0
- package/dist/commands/status.js.map +7 -0
- package/dist/commands/tasks.js +108 -0
- package/dist/commands/tasks.js.map +7 -0
- package/dist/commands/todos.js +123 -0
- package/dist/commands/todos.js.map +7 -0
- package/dist/commands.js +20 -2
- package/dist/commands.js.map +2 -2
- package/dist/components/AgentThinkingBlock.js +10 -18
- package/dist/components/AgentThinkingBlock.js.map +2 -2
- package/dist/components/BackgroundTasksPanel.js +78 -29
- package/dist/components/BackgroundTasksPanel.js.map +2 -2
- package/dist/components/BashStreamingProgress.js +24 -0
- package/dist/components/BashStreamingProgress.js.map +7 -0
- package/dist/components/CollapsibleHint.js +14 -0
- package/dist/components/CollapsibleHint.js.map +7 -0
- package/dist/components/FileEditToolUpdatedMessage.js +1 -1
- package/dist/components/FileEditToolUpdatedMessage.js.map +2 -2
- package/dist/components/HotkeyHelpPanel.js +137 -0
- package/dist/components/HotkeyHelpPanel.js.map +7 -0
- package/dist/components/Logo.js +5 -5
- package/dist/components/Logo.js.map +2 -2
- package/dist/components/Message.js +23 -7
- package/dist/components/Message.js.map +3 -3
- package/dist/components/ModelConfig.js +16 -3
- package/dist/components/ModelConfig.js.map +2 -2
- package/dist/components/ModelListManager.js +3 -3
- package/dist/components/ModelListManager.js.map +2 -2
- package/dist/components/ModelSelector/ModelSelector.js +1 -1
- package/dist/components/Onboarding.js +19 -14
- package/dist/components/Onboarding.js.map +2 -2
- package/dist/components/ProgressBar.js +74 -0
- package/dist/components/ProgressBar.js.map +7 -0
- package/dist/components/PromptInput.js +156 -46
- package/dist/components/PromptInput.js.map +2 -2
- package/dist/components/RequestStatusIndicator.js +194 -0
- package/dist/components/RequestStatusIndicator.js.map +7 -0
- package/dist/components/Spinner.js +92 -27
- package/dist/components/Spinner.js.map +2 -2
- package/dist/components/SpinnerSymbol.js +21 -27
- package/dist/components/SpinnerSymbol.js.map +2 -2
- package/dist/components/StreamingBashOutput.js +9 -8
- package/dist/components/StreamingBashOutput.js.map +2 -2
- package/dist/components/SubagentBlock.js +1 -1
- package/dist/components/SubagentBlock.js.map +1 -1
- package/dist/components/SubagentProgress.js +10 -11
- package/dist/components/SubagentProgress.js.map +2 -2
- package/dist/components/TaskCard.js +16 -13
- package/dist/components/TaskCard.js.map +2 -2
- package/dist/components/TodoChangeBlock.js +1 -1
- package/dist/components/TodoChangeBlock.js.map +2 -2
- package/dist/components/TodoPanel.js +120 -29
- package/dist/components/TodoPanel.js.map +3 -3
- package/dist/components/TokenCounter.js +74 -0
- package/dist/components/TokenCounter.js.map +7 -0
- package/dist/components/TokenWarning.js +2 -1
- package/dist/components/TokenWarning.js.map +2 -2
- package/dist/components/TreeConnector.js +25 -0
- package/dist/components/TreeConnector.js.map +7 -0
- package/dist/components/TurnCompletionIndicator.js +18 -0
- package/dist/components/TurnCompletionIndicator.js.map +7 -0
- package/dist/components/messages/AssistantTextMessage.js +5 -2
- package/dist/components/messages/AssistantTextMessage.js.map +2 -2
- package/dist/components/messages/AssistantThinkingMessage.js +18 -3
- package/dist/components/messages/AssistantThinkingMessage.js.map +2 -2
- package/dist/components/messages/AssistantToolUseMessage.js +11 -8
- package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
- package/dist/components/messages/GroupRenderer.js +53 -0
- package/dist/components/messages/GroupRenderer.js.map +7 -0
- package/dist/components/messages/NestedTasksPreview.js +12 -0
- package/dist/components/messages/NestedTasksPreview.js.map +7 -0
- package/dist/components/messages/ParallelTasksGroupView.js +92 -0
- package/dist/components/messages/ParallelTasksGroupView.js.map +7 -0
- package/dist/components/messages/TaskInModuleView.js +198 -0
- package/dist/components/messages/TaskInModuleView.js.map +7 -0
- package/dist/components/messages/TaskOutputContent.js +53 -0
- package/dist/components/messages/TaskOutputContent.js.map +7 -0
- package/dist/components/messages/UserPromptMessage.js +1 -1
- package/dist/components/messages/UserPromptMessage.js.map +2 -2
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +2 -3
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +2 -2
- package/dist/components/permissions/FallbackPermissionRequest.js +4 -4
- package/dist/components/permissions/FallbackPermissionRequest.js.map +2 -2
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +4 -4
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +2 -2
- package/dist/constants/colors.js +48 -0
- package/dist/constants/colors.js.map +2 -2
- package/dist/constants/formatRules.js +102 -0
- package/dist/constants/formatRules.js.map +7 -0
- package/dist/constants/prompts.js +12 -34
- package/dist/constants/prompts.js.map +2 -2
- package/dist/constants/symbols.js +64 -6
- package/dist/constants/symbols.js.map +2 -2
- package/dist/constants/timing.js +5 -0
- package/dist/constants/timing.js.map +2 -2
- package/dist/core/config/defaults.js +84 -0
- package/dist/core/config/defaults.js.map +7 -0
- package/dist/core/config/index.js +111 -0
- package/dist/core/config/index.js.map +7 -0
- package/dist/core/config/loader.js +221 -0
- package/dist/core/config/loader.js.map +7 -0
- package/dist/core/config/migrations.js +128 -0
- package/dist/core/config/migrations.js.map +7 -0
- package/dist/core/config/schema.js +178 -0
- package/dist/core/config/schema.js.map +7 -0
- package/dist/core/costTracker.js +138 -0
- package/dist/core/costTracker.js.map +7 -0
- package/dist/core/index.js +5 -0
- package/dist/core/index.js.map +7 -0
- package/dist/core/permissions/auditLog.js +204 -0
- package/dist/core/permissions/auditLog.js.map +7 -0
- package/dist/core/permissions/engine/index.js +3 -0
- package/dist/core/permissions/engine/index.js.map +7 -0
- package/dist/core/permissions/engine/permissionEngine.js +106 -0
- package/dist/core/permissions/engine/permissionEngine.js.map +7 -0
- package/dist/core/permissions/engine/types.js +1 -0
- package/dist/core/permissions/engine/types.js.map +7 -0
- package/dist/core/permissions/index.js +84 -0
- package/dist/core/permissions/index.js.map +7 -0
- package/dist/core/permissions/ruleEngine.js +259 -0
- package/dist/core/permissions/ruleEngine.js.map +7 -0
- package/dist/core/permissions/rules/allowedToolsRule.js +62 -0
- package/dist/core/permissions/rules/allowedToolsRule.js.map +7 -0
- package/dist/core/permissions/rules/autoEscalationRule.js +291 -0
- package/dist/core/permissions/rules/autoEscalationRule.js.map +7 -0
- package/dist/core/permissions/rules/index.js +46 -0
- package/dist/core/permissions/rules/index.js.map +7 -0
- package/dist/core/permissions/rules/planModeRule.js +55 -0
- package/dist/core/permissions/rules/planModeRule.js.map +7 -0
- package/dist/core/permissions/rules/projectBoundaryRule.js +168 -0
- package/dist/core/permissions/rules/projectBoundaryRule.js.map +7 -0
- package/dist/core/permissions/rules/safeModeRule.js +65 -0
- package/dist/core/permissions/rules/safeModeRule.js.map +7 -0
- package/dist/core/permissions/rules/sensitivePathsRule.js +340 -0
- package/dist/core/permissions/rules/sensitivePathsRule.js.map +7 -0
- package/dist/core/permissions/types.js +127 -0
- package/dist/core/permissions/types.js.map +7 -0
- package/dist/core/tools/executor.js +143 -0
- package/dist/core/tools/executor.js.map +7 -0
- package/dist/core/tools/index.js +15 -0
- package/dist/core/tools/index.js.map +7 -0
- package/dist/core/tools/registry.js +183 -0
- package/dist/core/tools/registry.js.map +7 -0
- package/dist/core/tools/types.js +1 -0
- package/dist/core/tools/types.js.map +7 -0
- package/dist/cost-tracker.js +23 -15
- package/dist/cost-tracker.js.map +2 -2
- package/dist/entrypoints/cli.js +43 -43
- package/dist/entrypoints/cli.js.map +2 -2
- package/dist/entrypoints/mcp.js +12 -4
- package/dist/entrypoints/mcp.js.map +2 -2
- package/dist/history.js +14 -3
- package/dist/history.js.map +2 -2
- package/dist/hooks/useAgentTranscripts.js +116 -0
- package/dist/hooks/useAgentTranscripts.js.map +7 -0
- package/dist/hooks/useAnimationSync.js +53 -0
- package/dist/hooks/useAnimationSync.js.map +7 -0
- package/dist/hooks/useArrowKeyHistory.js +4 -2
- package/dist/hooks/useArrowKeyHistory.js.map +2 -2
- package/dist/hooks/useCanUseTool.js +3 -1
- package/dist/hooks/useCanUseTool.js.map +2 -2
- package/dist/hooks/useCancelRequest.js +4 -1
- package/dist/hooks/useCancelRequest.js.map +2 -2
- package/dist/hooks/useExitOnCtrlCD.js +9 -5
- package/dist/hooks/useExitOnCtrlCD.js.map +2 -2
- package/dist/hooks/useHookStatus.js +40 -0
- package/dist/hooks/useHookStatus.js.map +7 -0
- package/dist/hooks/useLogMessages.js +17 -1
- package/dist/hooks/useLogMessages.js.map +2 -2
- package/dist/hooks/useMessageGroups.js +43 -0
- package/dist/hooks/useMessageGroups.js.map +7 -0
- package/dist/hooks/useTerminalSize.js +62 -6
- package/dist/hooks/useTerminalSize.js.map +2 -2
- package/dist/hooks/useUnifiedCompletion.js +69 -0
- package/dist/hooks/useUnifiedCompletion.js.map +2 -2
- package/dist/i18n/index.js +109 -0
- package/dist/i18n/index.js.map +7 -0
- package/dist/i18n/locales/en.js +347 -0
- package/dist/i18n/locales/en.js.map +7 -0
- package/dist/i18n/locales/index.js +7 -0
- package/dist/i18n/locales/index.js.map +7 -0
- package/dist/i18n/locales/zh-CN.js +347 -0
- package/dist/i18n/locales/zh-CN.js.map +7 -0
- package/dist/i18n/types.js +8 -0
- package/dist/i18n/types.js.map +7 -0
- package/dist/query.js +175 -17
- package/dist/query.js.map +3 -3
- package/dist/screens/REPL.js +501 -192
- package/dist/screens/REPL.js.map +3 -3
- package/dist/services/adapters/chatCompletions.js +3 -1
- package/dist/services/adapters/chatCompletions.js.map +2 -2
- package/dist/services/adapters/messageNormalizer.js +354 -0
- package/dist/services/adapters/messageNormalizer.js.map +7 -0
- package/dist/services/adapters/responsesAPI.js +6 -3
- package/dist/services/adapters/responsesAPI.js.map +2 -2
- package/dist/services/checkpointManager.js +386 -0
- package/dist/services/checkpointManager.js.map +7 -0
- package/dist/services/claude.js +138 -11
- package/dist/services/claude.js.map +3 -3
- package/dist/services/compressionService.js +50 -1
- package/dist/services/compressionService.js.map +2 -2
- package/dist/services/contextMonitor.js +162 -0
- package/dist/services/contextMonitor.js.map +7 -0
- package/dist/services/customCommands.js +60 -41
- package/dist/services/customCommands.js.map +2 -2
- package/dist/services/hookExecutor.js +173 -1
- package/dist/services/hookExecutor.js.map +2 -2
- package/dist/services/intelligentCompactor.js +281 -0
- package/dist/services/intelligentCompactor.js.map +7 -0
- package/dist/services/lspConfig.js +109 -0
- package/dist/services/lspConfig.js.map +7 -0
- package/dist/services/mcpClient.js +273 -34
- package/dist/services/mcpClient.js.map +2 -2
- package/dist/services/modelOrchestrator.js +310 -0
- package/dist/services/modelOrchestrator.js.map +7 -0
- package/dist/services/openai.js +8 -1
- package/dist/services/openai.js.map +2 -2
- package/dist/services/outputStyles.js +138 -0
- package/dist/services/outputStyles.js.map +7 -0
- package/dist/services/plugins/index.js +5 -0
- package/dist/services/plugins/index.js.map +7 -0
- package/dist/services/plugins/lspServers.js +188 -0
- package/dist/services/plugins/lspServers.js.map +7 -0
- package/dist/services/plugins/pluginRuntime.js +229 -0
- package/dist/services/plugins/pluginRuntime.js.map +7 -0
- package/dist/services/plugins/pluginValidation.js +219 -0
- package/dist/services/plugins/pluginValidation.js.map +7 -0
- package/dist/services/plugins/skillMarketplace.js +556 -0
- package/dist/services/plugins/skillMarketplace.js.map +7 -0
- package/dist/services/responseStateManager.js +37 -3
- package/dist/services/responseStateManager.js.map +2 -2
- package/dist/services/sandbox/filesystemBoundary.js +300 -0
- package/dist/services/sandbox/filesystemBoundary.js.map +7 -0
- package/dist/services/sandbox/index.js +14 -0
- package/dist/services/sandbox/index.js.map +7 -0
- package/dist/services/sandbox/networkProxy.js +293 -0
- package/dist/services/sandbox/networkProxy.js.map +7 -0
- package/dist/services/sandbox/sandboxController.js +574 -0
- package/dist/services/sandbox/sandboxController.js.map +7 -0
- package/dist/services/sandbox/types.js +50 -0
- package/dist/services/sandbox/types.js.map +7 -0
- package/dist/services/sessionMemory.js +266 -0
- package/dist/services/sessionMemory.js.map +7 -0
- package/dist/services/taskRouter.js +324 -0
- package/dist/services/taskRouter.js.map +7 -0
- package/dist/tools/ArchitectTool/ArchitectTool.js +7 -1
- package/dist/tools/ArchitectTool/ArchitectTool.js.map +2 -2
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +3 -0
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
- package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js.map +2 -2
- package/dist/tools/BaseTool.js +72 -0
- package/dist/tools/BaseTool.js.map +7 -0
- package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js +3 -0
- package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js.map +2 -2
- package/dist/tools/BashTool/BashTool.js +60 -3
- package/dist/tools/BashTool/BashTool.js.map +2 -2
- package/dist/tools/BashTool/BashToolResultMessage.js +3 -0
- package/dist/tools/BashTool/BashToolResultMessage.js.map +2 -2
- package/dist/tools/BashTool/OutputLine.js +54 -0
- package/dist/tools/BashTool/OutputLine.js.map +2 -2
- package/dist/tools/BashTool/prompt.js +192 -3
- package/dist/tools/BashTool/prompt.js.map +2 -2
- package/dist/tools/FileEditTool/FileEditTool.js +29 -4
- package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
- package/dist/tools/FileWriteTool/FileWriteTool.js +5 -5
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
- package/dist/tools/GlobTool/GlobTool.js +4 -2
- package/dist/tools/GlobTool/GlobTool.js.map +2 -2
- package/dist/tools/GrepTool/GrepTool.js +36 -7
- package/dist/tools/GrepTool/GrepTool.js.map +2 -2
- package/dist/tools/KillShellTool/KillShellToolResultMessage.js +3 -0
- package/dist/tools/KillShellTool/KillShellToolResultMessage.js.map +2 -2
- package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js +109 -0
- package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +7 -0
- package/dist/tools/ListMcpResourcesTool/prompt.js +19 -0
- package/dist/tools/ListMcpResourcesTool/prompt.js.map +7 -0
- package/dist/tools/LspTool/LspTool.js +664 -0
- package/dist/tools/LspTool/LspTool.js.map +7 -0
- package/dist/tools/LspTool/prompt.js +27 -0
- package/dist/tools/LspTool/prompt.js.map +7 -0
- package/dist/tools/MCPTool/MCPTool.js +9 -1
- package/dist/tools/MCPTool/MCPTool.js.map +2 -2
- package/dist/tools/MemoryReadTool/MemoryReadTool.js +19 -6
- package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +2 -2
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +6 -6
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +2 -2
- package/dist/tools/MultiEditTool/MultiEditTool.js +19 -2
- package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
- package/dist/tools/NotebookEditTool/NotebookEditTool.js +5 -1
- package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
- package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +2 -2
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js +74 -0
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +7 -0
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js +108 -0
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +7 -0
- package/dist/tools/PlanModeTool/prompt.js +94 -0
- package/dist/tools/PlanModeTool/prompt.js.map +7 -0
- package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js +130 -0
- package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js.map +7 -0
- package/dist/tools/ReadMcpResourceTool/prompt.js +17 -0
- package/dist/tools/ReadMcpResourceTool/prompt.js.map +7 -0
- package/dist/tools/SkillTool/SkillTool.js +6 -1
- package/dist/tools/SkillTool/SkillTool.js.map +2 -2
- package/dist/tools/SlashCommandTool/SlashCommandTool.js +260 -0
- package/dist/tools/SlashCommandTool/SlashCommandTool.js.map +7 -0
- package/dist/tools/SlashCommandTool/prompt.js +35 -0
- package/dist/tools/SlashCommandTool/prompt.js.map +7 -0
- package/dist/tools/TaskOutputTool/TaskOutputTool.js +189 -0
- package/dist/tools/TaskOutputTool/TaskOutputTool.js.map +7 -0
- package/dist/tools/TaskOutputTool/prompt.js +15 -0
- package/dist/tools/TaskOutputTool/prompt.js.map +7 -0
- package/dist/tools/TaskTool/TaskTool.js +302 -104
- package/dist/tools/TaskTool/TaskTool.js.map +2 -2
- package/dist/tools/TaskTool/prompt.js.map +2 -2
- package/dist/tools/TodoWriteTool/TodoWriteTool.js +42 -77
- package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +2 -2
- package/dist/tools/URLFetcherTool/URLFetcherTool.js +4 -1
- package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
- package/dist/tools/URLFetcherTool/cache.js +55 -8
- package/dist/tools/URLFetcherTool/cache.js.map +2 -2
- package/dist/tools.js +31 -2
- package/dist/tools.js.map +2 -2
- package/dist/types/hooks.js +4 -0
- package/dist/types/hooks.js.map +2 -2
- package/dist/types/marketplace.js.map +2 -2
- package/dist/types/messageGroup.js +36 -0
- package/dist/types/messageGroup.js.map +7 -0
- package/dist/types/plugin.js.map +2 -2
- package/dist/types/thinking.js +1 -0
- package/dist/types/thinking.js.map +7 -0
- package/dist/utils/BackgroundShellManager.js +136 -39
- package/dist/utils/BackgroundShellManager.js.map +2 -2
- package/dist/utils/MessageBatchBuffer.js +102 -0
- package/dist/utils/MessageBatchBuffer.js.map +7 -0
- package/dist/utils/PersistentShell.js +151 -1
- package/dist/utils/PersistentShell.js.map +2 -2
- package/dist/utils/agentLoader.js +1 -23
- package/dist/utils/agentLoader.js.map +2 -2
- package/dist/utils/agentTranscripts.js +641 -0
- package/dist/utils/agentTranscripts.js.map +7 -0
- package/dist/utils/animationManager.js +213 -0
- package/dist/utils/animationManager.js.map +7 -0
- package/dist/utils/animationSync.js +110 -0
- package/dist/utils/animationSync.js.map +7 -0
- package/dist/utils/asyncFile.js +215 -0
- package/dist/utils/asyncFile.js.map +7 -0
- package/dist/utils/backgroundAgentManager.js +231 -0
- package/dist/utils/backgroundAgentManager.js.map +7 -0
- package/dist/utils/config.js +63 -7
- package/dist/utils/config.js.map +2 -2
- package/dist/utils/conversationRecovery.js +19 -0
- package/dist/utils/conversationRecovery.js.map +2 -2
- package/dist/utils/exit.js +73 -0
- package/dist/utils/exit.js.map +7 -0
- package/dist/utils/format.js +73 -5
- package/dist/utils/format.js.map +2 -2
- package/dist/utils/generators.js +76 -6
- package/dist/utils/generators.js.map +2 -2
- package/dist/utils/globalErrorHandler.js +149 -0
- package/dist/utils/globalErrorHandler.js.map +7 -0
- package/dist/utils/groupHandlers/index.js +8 -0
- package/dist/utils/groupHandlers/index.js.map +7 -0
- package/dist/utils/groupHandlers/parallelTasksHandler.js +140 -0
- package/dist/utils/groupHandlers/parallelTasksHandler.js.map +7 -0
- package/dist/utils/groupHandlers/taskHandler.js +104 -0
- package/dist/utils/groupHandlers/taskHandler.js.map +7 -0
- package/dist/utils/groupHandlers/types.js +1 -0
- package/dist/utils/groupHandlers/types.js.map +7 -0
- package/dist/utils/logRotation.js +224 -0
- package/dist/utils/logRotation.js.map +7 -0
- package/dist/utils/marketplaceManager.js +3 -5
- package/dist/utils/marketplaceManager.js.map +2 -2
- package/dist/utils/memSafety.js +264 -0
- package/dist/utils/memSafety.js.map +7 -0
- package/dist/utils/messageGroupManager.js +274 -0
- package/dist/utils/messageGroupManager.js.map +7 -0
- package/dist/utils/messages.js +13 -4
- package/dist/utils/messages.js.map +2 -2
- package/dist/utils/model.js +119 -15
- package/dist/utils/model.js.map +3 -3
- package/dist/utils/permissions/filesystem.js +157 -5
- package/dist/utils/permissions/filesystem.js.map +2 -2
- package/dist/utils/plan/planMode.js +143 -0
- package/dist/utils/plan/planMode.js.map +7 -0
- package/dist/utils/pluginLoader.js +17 -21
- package/dist/utils/pluginLoader.js.map +2 -2
- package/dist/utils/ripgrep.js +55 -2
- package/dist/utils/ripgrep.js.map +2 -2
- package/dist/utils/sanitizeInput.js +32 -0
- package/dist/utils/sanitizeInput.js.map +7 -0
- package/dist/utils/secureKeyStorage.js +312 -0
- package/dist/utils/secureKeyStorage.js.map +7 -0
- package/dist/utils/session/sessionPlugins.js +67 -0
- package/dist/utils/session/sessionPlugins.js.map +7 -0
- package/dist/utils/taskDisplayUtils.js +257 -0
- package/dist/utils/taskDisplayUtils.js.map +7 -0
- package/dist/utils/teamConfig.js +2 -1
- package/dist/utils/teamConfig.js.map +2 -2
- package/dist/utils/todoStorage.js +92 -2
- package/dist/utils/todoStorage.js.map +2 -2
- package/dist/utils/toolTimeout.js +136 -0
- package/dist/utils/toolTimeout.js.map +7 -0
- package/dist/utils/tooling/safeRender.js +115 -0
- package/dist/utils/tooling/safeRender.js.map +7 -0
- package/dist/utils/userFriendlyError.js +346 -0
- package/dist/utils/userFriendlyError.js.map +7 -0
- package/dist/utils/vendor/ripgrep/arm64-darwin/rg +0 -0
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +14 -4
- package/scripts/postinstall.js +128 -38
- package/dist/commands/agents.js +0 -2086
- package/dist/commands/agents.js.map +0 -7
- package/dist/commands/build.js +0 -74
- package/dist/commands/build.js.map +0 -7
- package/dist/commands/compression.js +0 -57
- package/dist/commands/compression.js.map +0 -7
- package/dist/commands/listen.js +0 -37
- package/dist/commands/listen.js.map +0 -7
- package/dist/commands/login.js +0 -37
- package/dist/commands/login.js.map +0 -7
- package/dist/commands/logout.js +0 -33
- package/dist/commands/logout.js.map +0 -7
- package/dist/commands/mcp.js +0 -40
- package/dist/commands/mcp.js.map +0 -7
- package/dist/commands/mcp_refresh.js +0 -40
- package/dist/commands/mcp_refresh.js.map +0 -7
- package/dist/commands/modelstatus.js +0 -21
- package/dist/commands/modelstatus.js.map +0 -7
- package/dist/commands/onboarding.js +0 -36
- package/dist/commands/onboarding.js.map +0 -7
- package/dist/commands/plugin-interactive.js +0 -446
- package/dist/commands/plugin-interactive.js.map +0 -7
- package/dist/commands/pr_comments.js +0 -61
- package/dist/commands/pr_comments.js.map +0 -7
- package/dist/commands/release-notes.js +0 -30
- package/dist/commands/release-notes.js.map +0 -7
- package/dist/commands/review.js +0 -51
- package/dist/commands/review.js.map +0 -7
- package/dist/components/Bug.js +0 -147
- package/dist/components/Bug.js.map +0 -7
- package/dist/components/ModelSelector.js +0 -2062
- package/dist/components/ModelSelector.js.map +0 -7
- package/dist/components/ModelStatusDisplay.js +0 -87
- package/dist/components/ModelStatusDisplay.js.map +0 -7
- package/dist/entrypoints/cli-wrapper.js +0 -61
- package/dist/entrypoints/cli-wrapper.js.map +0 -7
- package/dist/screens/Doctor.js +0 -22
- package/dist/screens/Doctor.js.map +0 -7
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/utils/generators.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "AAAA,MAAM,WAAW,OAAO,UAAU;AAElC,eAAsB,MAAS,IAAmC;AAChE,MAAI,YAAiC;AACrC,mBAAiB,KAAK,IAAI;AACxB,gBAAY;AAAA,EACd;AACA,MAAI,cAAc,UAAU;AAC1B,UAAM,IAAI,MAAM,uBAAuB;AAAA,EACzC;AACA,SAAO;AACT;
|
|
4
|
+
"sourcesContent": ["import { debug } from './debugLogger'\n\nconst NO_VALUE = Symbol('NO_VALUE')\n\nexport async function lastX<A>(as: AsyncGenerator<A>): Promise<A> {\n let lastValue: A | typeof NO_VALUE = NO_VALUE\n for await (const a of as) {\n lastValue = a\n }\n if (lastValue === NO_VALUE) {\n throw new Error('No items in generator')\n }\n return lastValue\n}\n\ntype QueuedGenerator<A> = {\n done: boolean | void\n value: A | void\n generator: AsyncGenerator<A, void>\n promise: Promise<QueuedGenerator<A>>\n id: number // Track generator ID for debugging\n}\n\n// Run all generators concurrently up to a concurrency cap, yielding values as they come in\n// Supports abort signal for graceful cancellation of all running generators\nexport async function* all<A>(\n generators: AsyncGenerator<A, void>[],\n concurrencyCap = Infinity,\n abortSignal?: AbortSignal,\n): AsyncGenerator<A, void> {\n let generatorIdCounter = 0\n const generatorIds = new Map<AsyncGenerator<A, void>, number>()\n const activeGenerators = new Set<AsyncGenerator<A, void>>()\n\n const next = (generator: AsyncGenerator<A, void>) => {\n let id = generatorIds.get(generator)\n if (id === undefined) {\n id = generatorIdCounter++\n generatorIds.set(generator, id)\n }\n activeGenerators.add(generator)\n const promise: Promise<QueuedGenerator<A>> = generator\n .next()\n .then(({ done, value }) => ({\n done,\n value,\n generator,\n promise,\n id: id!,\n }))\n return promise\n }\n\n // Helper to gracefully terminate all active generators\n const terminateAll = async () => {\n debug.flow('ALL_GENERATORS_ABORT', {\n activeCount: activeGenerators.size,\n })\n for (const gen of activeGenerators) {\n try {\n await gen.return(undefined)\n } catch {\n // Ignore errors during cleanup\n }\n }\n activeGenerators.clear()\n }\n\n const waiting = [...generators]\n const promises = new Set<Promise<QueuedGenerator<A>>>()\n\n debug.flow('ALL_GENERATORS_START', {\n totalGenerators: generators.length,\n concurrencyCap,\n hasAbortSignal: !!abortSignal,\n })\n\n // Check if already aborted\n if (abortSignal?.aborted) {\n debug.flow('ALL_GENERATORS_ALREADY_ABORTED', {})\n return\n }\n\n // Start initial batch up to concurrency cap\n while (promises.size < concurrencyCap && waiting.length > 0) {\n const gen = waiting.shift()!\n promises.add(next(gen))\n }\n\n debug.flow('ALL_GENERATORS_INITIAL_BATCH', {\n activeCount: promises.size,\n waitingCount: waiting.length,\n })\n\n let yieldCount = 0\n let completedCount = 0\n\n while (promises.size > 0) {\n // Check for abort signal before each iteration\n if (abortSignal?.aborted) {\n debug.flow('ALL_GENERATORS_ABORT_DETECTED', {\n completedCount,\n remainingActive: promises.size,\n })\n await terminateAll()\n return\n }\n\n const { done, value, generator, promise, id } = await Promise.race(promises)\n promises.delete(promise)\n\n // Check abort again after awaiting\n if (abortSignal?.aborted) {\n debug.flow('ALL_GENERATORS_ABORT_AFTER_RACE', {\n completedCount,\n remainingActive: promises.size,\n })\n await terminateAll()\n return\n }\n\n if (!done) {\n promises.add(next(generator))\n // Yield non-undefined values from the generator\n if (value !== undefined) {\n yieldCount++\n yield value as A\n }\n } else {\n completedCount++\n activeGenerators.delete(generator)\n debug.flow('ALL_GENERATOR_COMPLETED', {\n generatorId: id,\n completedCount,\n remainingActive: promises.size,\n waitingCount: waiting.length,\n })\n if (waiting.length > 0) {\n // Start a new generator when one finishes\n const nextGen = waiting.shift()!\n promises.add(next(nextGen))\n }\n }\n }\n\n debug.flow('ALL_GENERATORS_DONE', {\n totalGenerators: generators.length,\n totalYields: yieldCount,\n totalCompleted: completedCount,\n })\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { captureException } from "../services/sentry.js";
|
|
2
|
+
import { logError } from "./log.js";
|
|
3
|
+
let isInitialized = false;
|
|
4
|
+
let isShuttingDown = false;
|
|
5
|
+
var ErrorSeverity = /* @__PURE__ */ ((ErrorSeverity2) => {
|
|
6
|
+
ErrorSeverity2["LOW"] = "low";
|
|
7
|
+
ErrorSeverity2["MEDIUM"] = "medium";
|
|
8
|
+
ErrorSeverity2["HIGH"] = "high";
|
|
9
|
+
ErrorSeverity2["CRITICAL"] = "critical";
|
|
10
|
+
return ErrorSeverity2;
|
|
11
|
+
})(ErrorSeverity || {});
|
|
12
|
+
function categorizeError(error) {
|
|
13
|
+
if (error instanceof Error) {
|
|
14
|
+
const message = error.message.toLowerCase();
|
|
15
|
+
if (message.includes("out of memory") || message.includes("heap") || message.includes("stack overflow") || error.name === "RangeError") {
|
|
16
|
+
return "critical" /* CRITICAL */;
|
|
17
|
+
}
|
|
18
|
+
if (message.includes("api") || message.includes("network") || message.includes("econnrefused") || message.includes("timeout")) {
|
|
19
|
+
return "high" /* HIGH */;
|
|
20
|
+
}
|
|
21
|
+
if (error.name === "TypeError" || error.name === "ReferenceError" || message.includes("undefined") || message.includes("null")) {
|
|
22
|
+
return "medium" /* MEDIUM */;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return "low" /* LOW */;
|
|
26
|
+
}
|
|
27
|
+
function formatError(error) {
|
|
28
|
+
if (error instanceof Error) {
|
|
29
|
+
return `${error.name}: ${error.message}
|
|
30
|
+
${error.stack || ""}`;
|
|
31
|
+
}
|
|
32
|
+
return String(error);
|
|
33
|
+
}
|
|
34
|
+
function handleUnhandledRejection(reason, promise) {
|
|
35
|
+
if (isShuttingDown) return;
|
|
36
|
+
const severity = categorizeError(reason);
|
|
37
|
+
const formattedError = formatError(reason);
|
|
38
|
+
console.error(`
|
|
39
|
+
[${severity.toUpperCase()}] Unhandled Promise Rejection:`);
|
|
40
|
+
console.error(formattedError);
|
|
41
|
+
try {
|
|
42
|
+
logError(reason instanceof Error ? reason : new Error(String(reason)));
|
|
43
|
+
} catch {
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
captureException(
|
|
47
|
+
reason instanceof Error ? reason : new Error(String(reason))
|
|
48
|
+
);
|
|
49
|
+
} catch {
|
|
50
|
+
}
|
|
51
|
+
if (severity === "critical" /* CRITICAL */) {
|
|
52
|
+
console.error("\n\u26A0\uFE0F Critical error detected. Consider restarting.");
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function handleUncaughtException(error, origin) {
|
|
56
|
+
if (isShuttingDown) return;
|
|
57
|
+
const severity = categorizeError(error);
|
|
58
|
+
const formattedError = formatError(error);
|
|
59
|
+
console.error(`
|
|
60
|
+
[${severity.toUpperCase()}] Uncaught Exception (${origin}):`);
|
|
61
|
+
console.error(formattedError);
|
|
62
|
+
try {
|
|
63
|
+
logError(error);
|
|
64
|
+
} catch {
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
captureException(error);
|
|
68
|
+
} catch {
|
|
69
|
+
}
|
|
70
|
+
if (severity === "critical" /* CRITICAL */) {
|
|
71
|
+
console.error(
|
|
72
|
+
"\n\u{1F4A5} Critical uncaught exception. Shutting down gracefully..."
|
|
73
|
+
);
|
|
74
|
+
gracefulShutdown(1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function handleWarning(warning) {
|
|
78
|
+
if (process.env.VERBOSE === "true" || warning.name === "DeprecationWarning" || warning.name === "ExperimentalWarning") {
|
|
79
|
+
console.warn(`
|
|
80
|
+
\u26A0\uFE0F Warning [${warning.name}]: ${warning.message}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
const cleanupHandlers = [];
|
|
84
|
+
function registerCleanupHandler(handler) {
|
|
85
|
+
cleanupHandlers.push(handler);
|
|
86
|
+
}
|
|
87
|
+
function unregisterCleanupHandler(handler) {
|
|
88
|
+
const index = cleanupHandlers.indexOf(handler);
|
|
89
|
+
if (index > -1) {
|
|
90
|
+
cleanupHandlers.splice(index, 1);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async function gracefulShutdown(exitCode = 0) {
|
|
94
|
+
if (isShuttingDown) return;
|
|
95
|
+
isShuttingDown = true;
|
|
96
|
+
console.error("\n\u{1F504} Running cleanup handlers...");
|
|
97
|
+
for (const handler of cleanupHandlers) {
|
|
98
|
+
try {
|
|
99
|
+
await handler();
|
|
100
|
+
} catch (error) {
|
|
101
|
+
console.error("Cleanup handler error:", error);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
console.error("\u2705 Cleanup complete.");
|
|
105
|
+
process.exit(exitCode);
|
|
106
|
+
}
|
|
107
|
+
function initGlobalErrorHandlers() {
|
|
108
|
+
if (isInitialized) return;
|
|
109
|
+
isInitialized = true;
|
|
110
|
+
process.on("unhandledRejection", handleUnhandledRejection);
|
|
111
|
+
process.on("uncaughtException", handleUncaughtException);
|
|
112
|
+
process.on("warning", handleWarning);
|
|
113
|
+
process.on("SIGTERM", () => {
|
|
114
|
+
console.error("\nReceived SIGTERM signal.");
|
|
115
|
+
gracefulShutdown(0);
|
|
116
|
+
});
|
|
117
|
+
process.on("SIGINT", () => {
|
|
118
|
+
});
|
|
119
|
+
process.on("beforeExit", (code) => {
|
|
120
|
+
if (!isShuttingDown && cleanupHandlers.length > 0) {
|
|
121
|
+
gracefulShutdown(code);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
function isGlobalErrorHandlersInitialized() {
|
|
126
|
+
return isInitialized;
|
|
127
|
+
}
|
|
128
|
+
function resetGlobalErrorHandlers() {
|
|
129
|
+
if (process.env.NODE_ENV !== "test") {
|
|
130
|
+
throw new Error("resetGlobalErrorHandlers can only be called in tests");
|
|
131
|
+
}
|
|
132
|
+
process.removeAllListeners("unhandledRejection");
|
|
133
|
+
process.removeAllListeners("uncaughtException");
|
|
134
|
+
process.removeAllListeners("warning");
|
|
135
|
+
process.removeAllListeners("SIGTERM");
|
|
136
|
+
process.removeAllListeners("beforeExit");
|
|
137
|
+
isInitialized = false;
|
|
138
|
+
isShuttingDown = false;
|
|
139
|
+
cleanupHandlers.length = 0;
|
|
140
|
+
}
|
|
141
|
+
export {
|
|
142
|
+
ErrorSeverity,
|
|
143
|
+
initGlobalErrorHandlers,
|
|
144
|
+
isGlobalErrorHandlersInitialized,
|
|
145
|
+
registerCleanupHandler,
|
|
146
|
+
resetGlobalErrorHandlers,
|
|
147
|
+
unregisterCleanupHandler
|
|
148
|
+
};
|
|
149
|
+
//# sourceMappingURL=globalErrorHandler.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/globalErrorHandler.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Global Error Handler\n *\n * Handles unhandled promise rejections and uncaught exceptions\n * to prevent silent crashes and ensure proper cleanup.\n */\n\nimport { captureException } from '@services/sentry'\nimport { logError } from './log'\n\nlet isInitialized = false\nlet isShuttingDown = false\n\n/**\n * Error severity levels\n */\nexport enum ErrorSeverity {\n LOW = 'low',\n MEDIUM = 'medium',\n HIGH = 'high',\n CRITICAL = 'critical',\n}\n\n/**\n * Categorize error severity based on error type\n */\nfunction categorizeError(error: unknown): ErrorSeverity {\n if (error instanceof Error) {\n const message = error.message.toLowerCase()\n\n // Critical: System-level failures\n if (\n message.includes('out of memory') ||\n message.includes('heap') ||\n message.includes('stack overflow') ||\n error.name === 'RangeError'\n ) {\n return ErrorSeverity.CRITICAL\n }\n\n // High: API and network failures\n if (\n message.includes('api') ||\n message.includes('network') ||\n message.includes('econnrefused') ||\n message.includes('timeout')\n ) {\n return ErrorSeverity.HIGH\n }\n\n // Medium: Logic errors\n if (\n error.name === 'TypeError' ||\n error.name === 'ReferenceError' ||\n message.includes('undefined') ||\n message.includes('null')\n ) {\n return ErrorSeverity.MEDIUM\n }\n }\n\n return ErrorSeverity.LOW\n}\n\n/**\n * Format error for logging\n */\nfunction formatError(error: unknown): string {\n if (error instanceof Error) {\n return `${error.name}: ${error.message}\\n${error.stack || ''}`\n }\n return String(error)\n}\n\n/**\n * Handle unhandled promise rejection\n */\nfunction handleUnhandledRejection(\n reason: unknown,\n promise: Promise<unknown>,\n): void {\n if (isShuttingDown) return\n\n const severity = categorizeError(reason)\n const formattedError = formatError(reason)\n\n // Log to console with severity indicator\n console.error(`\\n[${severity.toUpperCase()}] Unhandled Promise Rejection:`)\n console.error(formattedError)\n\n // Log to file\n try {\n logError(reason instanceof Error ? reason : new Error(String(reason)))\n } catch {\n // Ignore logging errors during error handling\n }\n\n // Report to Sentry\n try {\n captureException(\n reason instanceof Error ? reason : new Error(String(reason)),\n )\n } catch {\n // Ignore Sentry errors\n }\n\n // For critical errors, consider graceful shutdown\n if (severity === ErrorSeverity.CRITICAL) {\n console.error('\\n\u26A0\uFE0F Critical error detected. Consider restarting.')\n }\n}\n\n/**\n * Handle uncaught exception\n */\nfunction handleUncaughtException(error: Error, origin: string): void {\n if (isShuttingDown) return\n\n const severity = categorizeError(error)\n const formattedError = formatError(error)\n\n // Log to console\n console.error(`\\n[${severity.toUpperCase()}] Uncaught Exception (${origin}):`)\n console.error(formattedError)\n\n // Log to file\n try {\n logError(error)\n } catch {\n // Ignore logging errors during error handling\n }\n\n // Report to Sentry\n try {\n captureException(error)\n } catch {\n // Ignore Sentry errors\n }\n\n // For uncaught exceptions, we should exit gracefully\n if (severity === ErrorSeverity.CRITICAL) {\n console.error(\n '\\n\uD83D\uDCA5 Critical uncaught exception. Shutting down gracefully...',\n )\n gracefulShutdown(1)\n }\n}\n\n/**\n * Handle process warnings\n */\nfunction handleWarning(warning: Error): void {\n // Only log in verbose mode or for specific warning types\n if (\n process.env.VERBOSE === 'true' ||\n warning.name === 'DeprecationWarning' ||\n warning.name === 'ExperimentalWarning'\n ) {\n console.warn(`\\n\u26A0\uFE0F Warning [${warning.name}]: ${warning.message}`)\n }\n}\n\n/**\n * Cleanup handlers for graceful shutdown\n */\nconst cleanupHandlers: Array<() => void | Promise<void>> = []\n\n/**\n * Register a cleanup handler to be called during shutdown\n */\nexport function registerCleanupHandler(\n handler: () => void | Promise<void>,\n): void {\n cleanupHandlers.push(handler)\n}\n\n/**\n * Unregister a cleanup handler\n */\nexport function unregisterCleanupHandler(\n handler: () => void | Promise<void>,\n): void {\n const index = cleanupHandlers.indexOf(handler)\n if (index > -1) {\n cleanupHandlers.splice(index, 1)\n }\n}\n\n/**\n * Perform graceful shutdown\n */\nasync function gracefulShutdown(exitCode: number = 0): Promise<void> {\n if (isShuttingDown) return\n isShuttingDown = true\n\n console.error('\\n\uD83D\uDD04 Running cleanup handlers...')\n\n // Run all cleanup handlers\n for (const handler of cleanupHandlers) {\n try {\n await handler()\n } catch (error) {\n console.error('Cleanup handler error:', error)\n }\n }\n\n // Note: Sentry flush is handled by the sentry service if needed\n\n console.error('\u2705 Cleanup complete.')\n process.exit(exitCode)\n}\n\n/**\n * Initialize global error handlers\n * Should be called early in the application lifecycle\n */\nexport function initGlobalErrorHandlers(): void {\n if (isInitialized) return\n isInitialized = true\n\n // Handle unhandled promise rejections\n process.on('unhandledRejection', handleUnhandledRejection)\n\n // Handle uncaught exceptions\n process.on('uncaughtException', handleUncaughtException)\n\n // Handle warnings\n process.on('warning', handleWarning)\n\n // Handle graceful shutdown signals\n process.on('SIGTERM', () => {\n console.error('\\nReceived SIGTERM signal.')\n gracefulShutdown(0)\n })\n\n process.on('SIGINT', () => {\n // Let the application handle SIGINT (Ctrl-C) normally\n // Only intervene if pressed multiple times\n })\n\n // Handle beforeExit for cleanup\n process.on('beforeExit', code => {\n if (!isShuttingDown && cleanupHandlers.length > 0) {\n gracefulShutdown(code)\n }\n })\n}\n\n/**\n * Check if global error handlers are initialized\n */\nexport function isGlobalErrorHandlersInitialized(): boolean {\n return isInitialized\n}\n\n/**\n * Reset global error handlers (for testing)\n */\nexport function resetGlobalErrorHandlers(): void {\n if (process.env.NODE_ENV !== 'test') {\n throw new Error('resetGlobalErrorHandlers can only be called in tests')\n }\n\n process.removeAllListeners('unhandledRejection')\n process.removeAllListeners('uncaughtException')\n process.removeAllListeners('warning')\n process.removeAllListeners('SIGTERM')\n process.removeAllListeners('beforeExit')\n\n isInitialized = false\n isShuttingDown = false\n cleanupHandlers.length = 0\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ErrorSeverity"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/utils/groupHandlers/index.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Group Handlers Module\n *\n * Exports all group type handlers for the V1+ framework.\n */\n\nexport * from './types'\nexport { TaskGroupHandler } from './taskHandler'\nexport { ParallelTasksHandler } from './parallelTasksHandler'\n"],
|
|
5
|
+
"mappings": "AAMA,cAAc;AACd,SAAS,wBAAwB;AACjC,SAAS,4BAA4B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { getAgentIdByToolUseId } from "../agentTranscripts.js";
|
|
2
|
+
class ParallelTasksHandler {
|
|
3
|
+
type = "parallel-tasks";
|
|
4
|
+
identify(messages) {
|
|
5
|
+
const groups = [];
|
|
6
|
+
const processedOriginalUuids = /* @__PURE__ */ new Set();
|
|
7
|
+
const tasksByOriginalUuid = /* @__PURE__ */ new Map();
|
|
8
|
+
for (const msg of messages) {
|
|
9
|
+
if (msg.type !== "assistant") continue;
|
|
10
|
+
if (!Array.isArray(msg.message.content)) continue;
|
|
11
|
+
const originalUuid = msg.originalUuid || msg.uuid;
|
|
12
|
+
const toolUse = msg.message.content.find(
|
|
13
|
+
(block) => block.type === "tool_use" && block.name === "Task"
|
|
14
|
+
);
|
|
15
|
+
if (toolUse) {
|
|
16
|
+
if (!tasksByOriginalUuid.has(originalUuid)) {
|
|
17
|
+
tasksByOriginalUuid.set(originalUuid, []);
|
|
18
|
+
}
|
|
19
|
+
tasksByOriginalUuid.get(originalUuid).push({
|
|
20
|
+
uuid: msg.uuid,
|
|
21
|
+
toolUseId: toolUse.id
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
for (const [originalUuid, tasks] of tasksByOriginalUuid) {
|
|
26
|
+
if (tasks.length > 1 && !processedOriginalUuids.has(originalUuid)) {
|
|
27
|
+
groups.push({
|
|
28
|
+
type: "parallel-tasks",
|
|
29
|
+
messageUuids: tasks.map((t) => t.uuid),
|
|
30
|
+
childIds: [],
|
|
31
|
+
metadata: {
|
|
32
|
+
siblingToolUseIds: tasks.map((t) => t.toolUseId)
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
processedOriginalUuids.add(originalUuid);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const processedSiblingKeys = /* @__PURE__ */ new Set();
|
|
39
|
+
for (const msg of messages) {
|
|
40
|
+
if (msg.type !== "progress") continue;
|
|
41
|
+
const siblingIds = msg.siblingToolUseIDs;
|
|
42
|
+
if (!siblingIds || siblingIds.size <= 1) continue;
|
|
43
|
+
const siblingKey = Array.from(siblingIds).sort().join(",");
|
|
44
|
+
if (processedSiblingKeys.has(siblingKey)) continue;
|
|
45
|
+
const alreadyGrouped = Array.from(siblingIds).every(
|
|
46
|
+
(id) => groups.some(
|
|
47
|
+
(g) => g.metadata.siblingToolUseIds?.includes(id)
|
|
48
|
+
)
|
|
49
|
+
);
|
|
50
|
+
if (alreadyGrouped) {
|
|
51
|
+
processedSiblingKeys.add(siblingKey);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const taskToolUseIds = [];
|
|
55
|
+
const messageUuids = /* @__PURE__ */ new Set();
|
|
56
|
+
for (const toolUseId of siblingIds) {
|
|
57
|
+
const assistantMsg = messages.find(
|
|
58
|
+
(m) => m.type === "assistant" && Array.isArray(m.message.content) && m.message.content.some(
|
|
59
|
+
(block) => block.type === "tool_use" && block.id === toolUseId
|
|
60
|
+
)
|
|
61
|
+
);
|
|
62
|
+
if (assistantMsg && assistantMsg.type === "assistant") {
|
|
63
|
+
const content = assistantMsg.message.content;
|
|
64
|
+
const toolUse = content.find(
|
|
65
|
+
(block) => block.type === "tool_use" && block.id === toolUseId
|
|
66
|
+
);
|
|
67
|
+
if (toolUse && toolUse.name === "Task") {
|
|
68
|
+
taskToolUseIds.push(toolUseId);
|
|
69
|
+
messageUuids.add(assistantMsg.uuid);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (taskToolUseIds.length > 1) {
|
|
74
|
+
groups.push({
|
|
75
|
+
type: "parallel-tasks",
|
|
76
|
+
messageUuids: Array.from(messageUuids),
|
|
77
|
+
childIds: [],
|
|
78
|
+
metadata: {
|
|
79
|
+
siblingToolUseIds: taskToolUseIds
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
processedSiblingKeys.add(siblingKey);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return groups;
|
|
86
|
+
}
|
|
87
|
+
computeResolution(group, unresolvedToolUseIDs) {
|
|
88
|
+
const memberIds = group.metadata.siblingToolUseIds || [];
|
|
89
|
+
const unresolvedMembers = memberIds.filter(
|
|
90
|
+
(id) => unresolvedToolUseIDs.has(id)
|
|
91
|
+
);
|
|
92
|
+
const isSelfResolved = unresolvedMembers.length === 0;
|
|
93
|
+
return {
|
|
94
|
+
isSelfResolved,
|
|
95
|
+
isNestedResolved: true,
|
|
96
|
+
// Updated by parent computation
|
|
97
|
+
isFullyResolved: isSelfResolved,
|
|
98
|
+
unresolvedToolUseIds: unresolvedMembers
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
computeAnchor(group, _messages) {
|
|
102
|
+
return {
|
|
103
|
+
anchorMessageUuid: group.messageUuids[0],
|
|
104
|
+
anchorStrategy: "first"
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get task info for each member of the parallel group
|
|
109
|
+
*/
|
|
110
|
+
static getMemberTaskInfo(group, messages) {
|
|
111
|
+
const memberIds = group.metadata.siblingToolUseIds || [];
|
|
112
|
+
const result = [];
|
|
113
|
+
for (const toolUseId of memberIds) {
|
|
114
|
+
const msg = messages.find(
|
|
115
|
+
(m) => m.type === "assistant" && Array.isArray(m.message.content) && m.message.content.some(
|
|
116
|
+
(block) => block.type === "tool_use" && block.id === toolUseId
|
|
117
|
+
)
|
|
118
|
+
);
|
|
119
|
+
if (!msg || msg.type !== "assistant") continue;
|
|
120
|
+
const content = msg.message.content;
|
|
121
|
+
const toolUse = content.find(
|
|
122
|
+
(block) => block.type === "tool_use" && block.id === toolUseId
|
|
123
|
+
);
|
|
124
|
+
if (toolUse) {
|
|
125
|
+
const input = toolUse.input;
|
|
126
|
+
result.push({
|
|
127
|
+
toolUseId,
|
|
128
|
+
agentId: getAgentIdByToolUseId(toolUseId),
|
|
129
|
+
description: input.description || "Task",
|
|
130
|
+
agentType: input.subagent_type || "general-purpose"
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return result;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
export {
|
|
138
|
+
ParallelTasksHandler
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=parallelTasksHandler.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/utils/groupHandlers/parallelTasksHandler.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Parallel Tasks Group Handler\n *\n * Handles concurrent Task tool calls (multiple Tasks in same AssistantMessage).\n * Creates a group that contains multiple task groups as children.\n */\n\nimport type { ToolUseBlockParam } from '@anthropic-ai/sdk/resources/index.mjs'\nimport type { NormalizedMessage } from '@utils/messages'\nimport type {\n MessageGroup,\n IdentifiedGroup,\n ResolutionState,\n PositionAnchor,\n} from '@minto-types/messageGroup'\nimport type { GroupTypeHandler } from './types'\nimport { getAgentIdByToolUseId } from '@utils/agentTranscripts'\n\nexport class ParallelTasksHandler implements GroupTypeHandler {\n type = 'parallel-tasks' as const\n\n identify(messages: NormalizedMessage[]): IdentifiedGroup[] {\n const groups: IdentifiedGroup[] = []\n const processedOriginalUuids = new Set<string>() // Track processed original message UUIDs\n\n // Strategy 1 (Primary): Use originalUuid to identify parallel Task groups\n // Normalized messages from the same original assistant message share the same originalUuid\n // This is more reliable than depending on progress messages\n const tasksByOriginalUuid = new Map<\n string,\n Array<{ uuid: string; toolUseId: string }>\n >()\n\n for (const msg of messages) {\n if (msg.type !== 'assistant') continue\n if (!Array.isArray(msg.message.content)) continue\n\n // Get the originalUuid (falls back to uuid for non-split messages)\n const originalUuid = msg.originalUuid || msg.uuid\n\n const toolUse = msg.message.content.find(\n (block): block is ToolUseBlockParam =>\n block.type === 'tool_use' && block.name === 'Task',\n )\n\n if (toolUse) {\n if (!tasksByOriginalUuid.has(originalUuid)) {\n tasksByOriginalUuid.set(originalUuid, [])\n }\n tasksByOriginalUuid.get(originalUuid)!.push({\n uuid: msg.uuid,\n toolUseId: toolUse.id,\n })\n }\n }\n\n // Create groups for original messages that have multiple Task tool uses\n for (const [originalUuid, tasks] of tasksByOriginalUuid) {\n if (tasks.length > 1 && !processedOriginalUuids.has(originalUuid)) {\n groups.push({\n type: 'parallel-tasks',\n messageUuids: tasks.map(t => t.uuid),\n childIds: [],\n metadata: {\n siblingToolUseIds: tasks.map(t => t.toolUseId),\n },\n })\n processedOriginalUuids.add(originalUuid)\n }\n }\n\n // Strategy 2 (Fallback): Use progress messages for backward compatibility\n // This handles cases where originalUuid might not be set (e.g., historical messages)\n const processedSiblingKeys = new Set<string>()\n\n for (const msg of messages) {\n if (msg.type !== 'progress') continue\n\n const siblingIds = msg.siblingToolUseIDs\n if (!siblingIds || siblingIds.size <= 1) continue\n\n // Create a stable key for this sibling set\n const siblingKey = Array.from(siblingIds).sort().join(',')\n if (processedSiblingKeys.has(siblingKey)) continue\n\n // Check if this sibling set was already handled by Strategy 1\n const alreadyGrouped = Array.from(siblingIds).every(id =>\n groups.some(g =>\n (g.metadata.siblingToolUseIds as string[])?.includes(id),\n ),\n )\n if (alreadyGrouped) {\n processedSiblingKeys.add(siblingKey)\n continue\n }\n\n // Check if all siblings are Task tool uses\n const taskToolUseIds: string[] = []\n const messageUuids = new Set<string>()\n\n for (const toolUseId of siblingIds) {\n const assistantMsg = messages.find(\n m =>\n m.type === 'assistant' &&\n Array.isArray(m.message.content) &&\n m.message.content.some(\n (block): block is ToolUseBlockParam =>\n block.type === 'tool_use' && block.id === toolUseId,\n ),\n )\n\n if (assistantMsg && assistantMsg.type === 'assistant') {\n const content = assistantMsg.message.content\n const toolUse = content.find(\n (block): block is ToolUseBlockParam =>\n block.type === 'tool_use' && block.id === toolUseId,\n )\n\n if (toolUse && toolUse.name === 'Task') {\n taskToolUseIds.push(toolUseId)\n messageUuids.add(assistantMsg.uuid)\n }\n }\n }\n\n // Only create parallel group if there are multiple Tasks\n if (taskToolUseIds.length > 1) {\n groups.push({\n type: 'parallel-tasks',\n messageUuids: Array.from(messageUuids),\n childIds: [],\n metadata: {\n siblingToolUseIds: taskToolUseIds,\n },\n })\n processedSiblingKeys.add(siblingKey)\n }\n }\n\n return groups\n }\n\n computeResolution(\n group: MessageGroup,\n unresolvedToolUseIDs: Set<string>,\n ): ResolutionState {\n const memberIds = (group.metadata.siblingToolUseIds as string[]) || []\n\n // All members need to be resolved\n const unresolvedMembers = memberIds.filter(id =>\n unresolvedToolUseIDs.has(id),\n )\n const isSelfResolved = unresolvedMembers.length === 0\n\n // Note: isNestedResolved is computed by parent manager\n // after all child groups have been processed\n return {\n isSelfResolved,\n isNestedResolved: true, // Updated by parent computation\n isFullyResolved: isSelfResolved,\n unresolvedToolUseIds: unresolvedMembers,\n }\n }\n\n computeAnchor(\n group: MessageGroup,\n _messages: NormalizedMessage[],\n ): PositionAnchor {\n // Parallel module's position = first member's position\n return {\n anchorMessageUuid: group.messageUuids[0],\n anchorStrategy: 'first',\n }\n }\n\n /**\n * Get task info for each member of the parallel group\n */\n static getMemberTaskInfo(\n group: MessageGroup,\n messages: NormalizedMessage[],\n ): Array<{\n toolUseId: string\n agentId: string | null\n description: string\n agentType: string\n }> {\n const memberIds = (group.metadata.siblingToolUseIds as string[]) || []\n const result: Array<{\n toolUseId: string\n agentId: string | null\n description: string\n agentType: string\n }> = []\n\n // Since normalized messages split each content block into separate messages,\n // we need to find the message for each toolUseId individually\n for (const toolUseId of memberIds) {\n // Find the assistant message containing this specific tool use\n const msg = messages.find(\n m =>\n m.type === 'assistant' &&\n Array.isArray(m.message.content) &&\n m.message.content.some(\n (block): block is ToolUseBlockParam =>\n block.type === 'tool_use' && block.id === toolUseId,\n ),\n )\n\n if (!msg || msg.type !== 'assistant') continue\n\n const content = msg.message.content\n const toolUse = content.find(\n (block): block is ToolUseBlockParam =>\n block.type === 'tool_use' && block.id === toolUseId,\n )\n\n if (toolUse) {\n const input = toolUse.input as {\n description?: string\n subagent_type?: string\n }\n\n result.push({\n toolUseId,\n agentId: getAgentIdByToolUseId(toolUseId),\n description: input.description || 'Task',\n agentType: input.subagent_type || 'general-purpose',\n })\n }\n }\n\n return result\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import {
|
|
2
|
+
getAgentIdByToolUseId,
|
|
3
|
+
getAgentTranscript
|
|
4
|
+
} from "../agentTranscripts.js";
|
|
5
|
+
class TaskGroupHandler {
|
|
6
|
+
type = "task";
|
|
7
|
+
identify(messages) {
|
|
8
|
+
const groups = [];
|
|
9
|
+
const processedUuids = /* @__PURE__ */ new Set();
|
|
10
|
+
for (const msg of messages) {
|
|
11
|
+
if (msg.type !== "assistant") continue;
|
|
12
|
+
if (processedUuids.has(msg.uuid)) continue;
|
|
13
|
+
const content = msg.message.content;
|
|
14
|
+
if (!content || content.length === 0) continue;
|
|
15
|
+
const taskToolUses = content.filter(
|
|
16
|
+
(block) => block.type === "tool_use" && block.name === "Task"
|
|
17
|
+
);
|
|
18
|
+
if (taskToolUses.length !== 1) continue;
|
|
19
|
+
const taskToolUse = taskToolUses[0];
|
|
20
|
+
const input = taskToolUse.input;
|
|
21
|
+
const agentId = getAgentIdByToolUseId(taskToolUse.id);
|
|
22
|
+
groups.push({
|
|
23
|
+
type: "task",
|
|
24
|
+
messageUuids: [msg.uuid],
|
|
25
|
+
metadata: {
|
|
26
|
+
toolUseId: taskToolUse.id,
|
|
27
|
+
agentId: agentId || void 0,
|
|
28
|
+
description: input.description,
|
|
29
|
+
agentType: input.subagent_type
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
processedUuids.add(msg.uuid);
|
|
33
|
+
}
|
|
34
|
+
return groups;
|
|
35
|
+
}
|
|
36
|
+
computeResolution(group, unresolvedToolUseIDs) {
|
|
37
|
+
const toolUseId = group.metadata.toolUseId;
|
|
38
|
+
const agentId = group.metadata.agentId;
|
|
39
|
+
const isSelfResolved = !unresolvedToolUseIDs.has(toolUseId);
|
|
40
|
+
let isNestedResolved = true;
|
|
41
|
+
const unresolvedNested = [];
|
|
42
|
+
if (agentId) {
|
|
43
|
+
const nestedCheck = this.checkUnresolvedNestedTasks(
|
|
44
|
+
agentId,
|
|
45
|
+
unresolvedToolUseIDs
|
|
46
|
+
);
|
|
47
|
+
if (nestedCheck.hasUnresolved) {
|
|
48
|
+
isNestedResolved = false;
|
|
49
|
+
unresolvedNested.push(...nestedCheck.unresolvedIds);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
isSelfResolved,
|
|
54
|
+
isNestedResolved,
|
|
55
|
+
isFullyResolved: isSelfResolved && isNestedResolved,
|
|
56
|
+
unresolvedToolUseIds: isSelfResolved ? unresolvedNested : [toolUseId, ...unresolvedNested]
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
computeAnchor(group, _messages) {
|
|
60
|
+
return {
|
|
61
|
+
anchorMessageUuid: group.messageUuids[0],
|
|
62
|
+
anchorStrategy: "first"
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Recursively check for unresolved nested tasks (from V3)
|
|
67
|
+
*/
|
|
68
|
+
checkUnresolvedNestedTasks(agentId, unresolvedToolUseIDs) {
|
|
69
|
+
const transcript = getAgentTranscript(agentId);
|
|
70
|
+
if (!transcript) {
|
|
71
|
+
return { hasUnresolved: false, unresolvedIds: [] };
|
|
72
|
+
}
|
|
73
|
+
const unresolvedIds = [];
|
|
74
|
+
for (const message of transcript.messages) {
|
|
75
|
+
if (message.type === "assistant") {
|
|
76
|
+
const content = message.message.content;
|
|
77
|
+
if (!content || !Array.isArray(content)) continue;
|
|
78
|
+
for (const block of content) {
|
|
79
|
+
if (block.type === "tool_use" && block.name === "Task") {
|
|
80
|
+
if (unresolvedToolUseIDs.has(block.id)) {
|
|
81
|
+
unresolvedIds.push(block.id);
|
|
82
|
+
}
|
|
83
|
+
const nestedAgentId = getAgentIdByToolUseId(block.id);
|
|
84
|
+
if (nestedAgentId) {
|
|
85
|
+
const nested = this.checkUnresolvedNestedTasks(
|
|
86
|
+
nestedAgentId,
|
|
87
|
+
unresolvedToolUseIDs
|
|
88
|
+
);
|
|
89
|
+
unresolvedIds.push(...nested.unresolvedIds);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
hasUnresolved: unresolvedIds.length > 0,
|
|
97
|
+
unresolvedIds
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
export {
|
|
102
|
+
TaskGroupHandler
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=taskHandler.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/utils/groupHandlers/taskHandler.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Task Group Handler\n *\n * Handles single Task tool calls (not part of concurrent groups).\n * Includes recursive nested task checking from V3.\n */\n\nimport type { ToolUseBlockParam } from '@anthropic-ai/sdk/resources/index.mjs'\nimport type { NormalizedMessage } from '@utils/messages'\nimport type {\n MessageGroup,\n IdentifiedGroup,\n ResolutionState,\n PositionAnchor,\n} from '@minto-types/messageGroup'\nimport type { GroupTypeHandler, NestedTaskCheckResult } from './types'\nimport {\n getAgentIdByToolUseId,\n getAgentTranscript,\n} from '@utils/agentTranscripts'\n\nexport class TaskGroupHandler implements GroupTypeHandler {\n type = 'task' as const\n\n identify(messages: NormalizedMessage[]): IdentifiedGroup[] {\n const groups: IdentifiedGroup[] = []\n const processedUuids = new Set<string>()\n\n for (const msg of messages) {\n if (msg.type !== 'assistant') continue\n if (processedUuids.has(msg.uuid)) continue\n\n const content = msg.message.content\n if (!content || content.length === 0) continue\n\n // Find all Task tool uses in this message\n const taskToolUses = content.filter(\n (block): block is ToolUseBlockParam =>\n block.type === 'tool_use' && block.name === 'Task',\n )\n\n // Skip if multiple Tasks (will be handled by parallel-tasks handler)\n if (taskToolUses.length !== 1) continue\n\n const taskToolUse = taskToolUses[0]\n const input = taskToolUse.input as {\n description?: string\n subagent_type?: string\n }\n const agentId = getAgentIdByToolUseId(taskToolUse.id)\n\n groups.push({\n type: 'task',\n messageUuids: [msg.uuid],\n metadata: {\n toolUseId: taskToolUse.id,\n agentId: agentId || undefined,\n description: input.description,\n agentType: input.subagent_type,\n },\n })\n\n processedUuids.add(msg.uuid)\n }\n\n return groups\n }\n\n computeResolution(\n group: MessageGroup,\n unresolvedToolUseIDs: Set<string>,\n ): ResolutionState {\n const toolUseId = group.metadata.toolUseId as string\n const agentId = group.metadata.agentId as string | undefined\n\n const isSelfResolved = !unresolvedToolUseIDs.has(toolUseId)\n\n // V3's nested checking logic\n let isNestedResolved = true\n const unresolvedNested: string[] = []\n\n if (agentId) {\n const nestedCheck = this.checkUnresolvedNestedTasks(\n agentId,\n unresolvedToolUseIDs,\n )\n if (nestedCheck.hasUnresolved) {\n isNestedResolved = false\n unresolvedNested.push(...nestedCheck.unresolvedIds)\n }\n }\n\n return {\n isSelfResolved,\n isNestedResolved,\n isFullyResolved: isSelfResolved && isNestedResolved,\n unresolvedToolUseIds: isSelfResolved\n ? unresolvedNested\n : [toolUseId, ...unresolvedNested],\n }\n }\n\n computeAnchor(\n group: MessageGroup,\n _messages: NormalizedMessage[],\n ): PositionAnchor {\n return {\n anchorMessageUuid: group.messageUuids[0],\n anchorStrategy: 'first',\n }\n }\n\n /**\n * Recursively check for unresolved nested tasks (from V3)\n */\n private checkUnresolvedNestedTasks(\n agentId: string,\n unresolvedToolUseIDs: Set<string>,\n ): NestedTaskCheckResult {\n const transcript = getAgentTranscript(agentId)\n if (!transcript) {\n return { hasUnresolved: false, unresolvedIds: [] }\n }\n\n const unresolvedIds: string[] = []\n\n for (const message of transcript.messages) {\n if (message.type === 'assistant') {\n const content = message.message.content\n if (!content || !Array.isArray(content)) continue\n\n for (const block of content) {\n if (block.type === 'tool_use' && block.name === 'Task') {\n // Check if this nested Task itself is complete\n if (unresolvedToolUseIDs.has(block.id)) {\n unresolvedIds.push(block.id)\n }\n\n // Recursively check nested agent\n const nestedAgentId = getAgentIdByToolUseId(block.id)\n if (nestedAgentId) {\n const nested = this.checkUnresolvedNestedTasks(\n nestedAgentId,\n unresolvedToolUseIDs,\n )\n unresolvedIds.push(...nested.unresolvedIds)\n }\n }\n }\n }\n }\n\n return {\n hasUnresolved: unresolvedIds.length > 0,\n unresolvedIds,\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AAgBA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEA,MAAM,iBAA6C;AAAA,EACxD,OAAO;AAAA,EAEP,SAAS,UAAkD;AACzD,UAAM,SAA4B,CAAC;AACnC,UAAM,iBAAiB,oBAAI,IAAY;AAEvC,eAAW,OAAO,UAAU;AAC1B,UAAI,IAAI,SAAS,YAAa;AAC9B,UAAI,eAAe,IAAI,IAAI,IAAI,EAAG;AAElC,YAAM,UAAU,IAAI,QAAQ;AAC5B,UAAI,CAAC,WAAW,QAAQ,WAAW,EAAG;AAGtC,YAAM,eAAe,QAAQ;AAAA,QAC3B,CAAC,UACC,MAAM,SAAS,cAAc,MAAM,SAAS;AAAA,MAChD;AAGA,UAAI,aAAa,WAAW,EAAG;AAE/B,YAAM,cAAc,aAAa,CAAC;AAClC,YAAM,QAAQ,YAAY;AAI1B,YAAM,UAAU,sBAAsB,YAAY,EAAE;AAEpD,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,cAAc,CAAC,IAAI,IAAI;AAAA,QACvB,UAAU;AAAA,UACR,WAAW,YAAY;AAAA,UACvB,SAAS,WAAW;AAAA,UACpB,aAAa,MAAM;AAAA,UACnB,WAAW,MAAM;AAAA,QACnB;AAAA,MACF,CAAC;AAED,qBAAe,IAAI,IAAI,IAAI;AAAA,IAC7B;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,kBACE,OACA,sBACiB;AACjB,UAAM,YAAY,MAAM,SAAS;AACjC,UAAM,UAAU,MAAM,SAAS;AAE/B,UAAM,iBAAiB,CAAC,qBAAqB,IAAI,SAAS;AAG1D,QAAI,mBAAmB;AACvB,UAAM,mBAA6B,CAAC;AAEpC,QAAI,SAAS;AACX,YAAM,cAAc,KAAK;AAAA,QACvB;AAAA,QACA;AAAA,MACF;AACA,UAAI,YAAY,eAAe;AAC7B,2BAAmB;AACnB,yBAAiB,KAAK,GAAG,YAAY,aAAa;AAAA,MACpD;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,iBAAiB,kBAAkB;AAAA,MACnC,sBAAsB,iBAClB,mBACA,CAAC,WAAW,GAAG,gBAAgB;AAAA,IACrC;AAAA,EACF;AAAA,EAEA,cACE,OACA,WACgB;AAChB,WAAO;AAAA,MACL,mBAAmB,MAAM,aAAa,CAAC;AAAA,MACvC,gBAAgB;AAAA,IAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,2BACN,SACA,sBACuB;AACvB,UAAM,aAAa,mBAAmB,OAAO;AAC7C,QAAI,CAAC,YAAY;AACf,aAAO,EAAE,eAAe,OAAO,eAAe,CAAC,EAAE;AAAA,IACnD;AAEA,UAAM,gBAA0B,CAAC;AAEjC,eAAW,WAAW,WAAW,UAAU;AACzC,UAAI,QAAQ,SAAS,aAAa;AAChC,cAAM,UAAU,QAAQ,QAAQ;AAChC,YAAI,CAAC,WAAW,CAAC,MAAM,QAAQ,OAAO,EAAG;AAEzC,mBAAW,SAAS,SAAS;AAC3B,cAAI,MAAM,SAAS,cAAc,MAAM,SAAS,QAAQ;AAEtD,gBAAI,qBAAqB,IAAI,MAAM,EAAE,GAAG;AACtC,4BAAc,KAAK,MAAM,EAAE;AAAA,YAC7B;AAGA,kBAAM,gBAAgB,sBAAsB,MAAM,EAAE;AACpD,gBAAI,eAAe;AACjB,oBAAM,SAAS,KAAK;AAAA,gBAClB;AAAA,gBACA;AAAA,cACF;AACA,4BAAc,KAAK,GAAG,OAAO,aAAa;AAAA,YAC5C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,eAAe,cAAc,SAAS;AAAA,MACtC;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|