@within-7/minto 0.1.7 → 0.3.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 +73 -49
- 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 +85 -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 +157 -0
- package/dist/commands/export.js.map +7 -0
- package/dist/commands/mcp-interactive.js +28 -18
- package/dist/commands/mcp-interactive.js.map +2 -2
- package/dist/commands/model.js +9 -7
- package/dist/commands/model.js.map +2 -2
- package/dist/commands/permissions.js +87 -0
- package/dist/commands/permissions.js.map +7 -0
- package/dist/commands/plugin/AddMarketplaceForm.js +3 -2
- package/dist/commands/plugin/AddMarketplaceForm.js.map +2 -2
- package/dist/commands/plugin/ConfirmDialog.js +2 -1
- package/dist/commands/plugin/ConfirmDialog.js.map +2 -2
- package/dist/commands/plugin/ErrorView.js +2 -1
- package/dist/commands/plugin/ErrorView.js.map +2 -2
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js +5 -4
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js.map +2 -2
- package/dist/commands/plugin/InstalledPluginsManager.js +5 -4
- package/dist/commands/plugin/InstalledPluginsManager.js.map +2 -2
- package/dist/commands/plugin/MainMenu.js +2 -1
- package/dist/commands/plugin/MainMenu.js.map +2 -2
- package/dist/commands/plugin/MarketplaceManager.js +5 -4
- package/dist/commands/plugin/MarketplaceManager.js.map +2 -2
- package/dist/commands/plugin/MarketplaceSelector.js +4 -3
- package/dist/commands/plugin/MarketplaceSelector.js.map +2 -2
- package/dist/commands/plugin/PlaceholderScreen.js +3 -2
- package/dist/commands/plugin/PlaceholderScreen.js.map +2 -2
- package/dist/commands/plugin/PluginBrowser.js +6 -5
- package/dist/commands/plugin/PluginBrowser.js.map +2 -2
- package/dist/commands/plugin/PluginDetailsInstall.js +5 -4
- package/dist/commands/plugin/PluginDetailsInstall.js.map +2 -2
- package/dist/commands/plugin/PluginDetailsManage.js +4 -3
- package/dist/commands/plugin/PluginDetailsManage.js.map +2 -2
- package/dist/commands/plugin.js +16 -15
- package/dist/commands/plugin.js.map +2 -2
- package/dist/commands/quit.js +3 -1
- package/dist/commands/quit.js.map +2 -2
- package/dist/commands/sandbox.js +105 -0
- package/dist/commands/sandbox.js.map +7 -0
- package/dist/commands/setup.js +2 -1
- package/dist/commands/setup.js.map +2 -2
- package/dist/commands/status.js +59 -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/undo.js +245 -0
- package/dist/commands/undo.js.map +7 -0
- package/dist/commands.js +22 -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/AsciiLogo.js +7 -8
- package/dist/components/AsciiLogo.js.map +2 -2
- package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js +3 -2
- package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js.map +2 -2
- package/dist/components/AskUserQuestionDialog/QuestionView.js +2 -1
- package/dist/components/AskUserQuestionDialog/QuestionView.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 +15 -0
- package/dist/components/CollapsibleHint.js.map +7 -0
- package/dist/components/Config.js +3 -2
- package/dist/components/Config.js.map +2 -2
- package/dist/components/ConsoleOAuthFlow.js +2 -1
- package/dist/components/ConsoleOAuthFlow.js.map +2 -2
- package/dist/components/Cost.js +2 -1
- package/dist/components/Cost.js.map +2 -2
- package/dist/components/FileEditToolUpdatedMessage.js +1 -1
- package/dist/components/FileEditToolUpdatedMessage.js.map +2 -2
- package/dist/components/HeaderBar.js +13 -8
- package/dist/components/HeaderBar.js.map +2 -2
- package/dist/components/HistorySearchOverlay.js +4 -3
- package/dist/components/HistorySearchOverlay.js.map +2 -2
- package/dist/components/HotkeyHelpPanel.js +134 -0
- package/dist/components/HotkeyHelpPanel.js.map +7 -0
- package/dist/components/InvalidConfigDialog.js +2 -1
- package/dist/components/InvalidConfigDialog.js.map +2 -2
- package/dist/components/Logo.js +24 -68
- package/dist/components/Logo.js.map +2 -2
- package/dist/components/MCPServerApprovalDialog.js +2 -1
- package/dist/components/MCPServerApprovalDialog.js.map +2 -2
- package/dist/components/MCPServerDialogCopy.js +2 -1
- package/dist/components/MCPServerDialogCopy.js.map +2 -2
- package/dist/components/MCPServerMultiselectDialog.js +2 -1
- package/dist/components/MCPServerMultiselectDialog.js.map +2 -2
- package/dist/components/Message.js +23 -7
- package/dist/components/Message.js.map +3 -3
- package/dist/components/MessageSelector.js +4 -3
- package/dist/components/MessageSelector.js.map +2 -2
- package/dist/components/ModeIndicator.js +2 -1
- package/dist/components/ModeIndicator.js.map +2 -2
- package/dist/components/ModelConfig.js +20 -6
- package/dist/components/ModelConfig.js.map +2 -2
- package/dist/components/ModelListManager.js +7 -6
- package/dist/components/ModelListManager.js.map +2 -2
- package/dist/components/ModelSelector/ModelSelector.js +27 -14
- package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
- package/dist/components/Onboarding.js +22 -16
- package/dist/components/Onboarding.js.map +2 -2
- package/dist/components/OperationSummary.js +130 -0
- package/dist/components/OperationSummary.js.map +7 -0
- package/dist/components/ProgressBar.js +74 -0
- package/dist/components/ProgressBar.js.map +7 -0
- package/dist/components/PromptInput.js +210 -87
- 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/SensitiveFileWarning.js +31 -0
- package/dist/components/SensitiveFileWarning.js.map +7 -0
- package/dist/components/Spinner.js +141 -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/StructuredDiff.js +6 -8
- package/dist/components/StructuredDiff.js.map +2 -2
- package/dist/components/SubagentBlock.js +5 -3
- package/dist/components/SubagentBlock.js.map +2 -2
- package/dist/components/SubagentProgress.js +17 -15
- package/dist/components/SubagentProgress.js.map +2 -2
- package/dist/components/TaskCard.js +30 -24
- package/dist/components/TaskCard.js.map +2 -2
- package/dist/components/TextInput.js +9 -1
- package/dist/components/TextInput.js.map +2 -2
- package/dist/components/TodoChangeBlock.js +1 -1
- package/dist/components/TodoChangeBlock.js.map +2 -2
- package/dist/components/TodoPanel.js +140 -31
- 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/ToolUseLoader.js +2 -2
- package/dist/components/ToolUseLoader.js.map +2 -2
- package/dist/components/TreeConnector.js +26 -0
- package/dist/components/TreeConnector.js.map +7 -0
- package/dist/components/TrustDialog.js +2 -1
- package/dist/components/TrustDialog.js.map +2 -2
- package/dist/components/TurnCompletionIndicator.js +18 -0
- package/dist/components/TurnCompletionIndicator.js.map +7 -0
- package/dist/components/binary-feedback/BinaryFeedbackView.js +2 -1
- package/dist/components/binary-feedback/BinaryFeedbackView.js.map +2 -2
- package/dist/components/messages/AssistantTextMessage.js +20 -9
- 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 +17 -10
- package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
- package/dist/components/messages/GroupRenderer.js +54 -0
- package/dist/components/messages/GroupRenderer.js.map +7 -0
- package/dist/components/messages/NestedTasksPreview.js +24 -0
- package/dist/components/messages/NestedTasksPreview.js.map +7 -0
- package/dist/components/messages/ParallelTasksGroupView.js +93 -0
- package/dist/components/messages/ParallelTasksGroupView.js.map +7 -0
- package/dist/components/messages/TaskInModuleView.js +218 -0
- package/dist/components/messages/TaskInModuleView.js.map +7 -0
- package/dist/components/messages/TaskOutputContent.js +56 -0
- package/dist/components/messages/TaskOutputContent.js.map +7 -0
- package/dist/components/messages/UserPromptMessage.js +2 -2
- 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 +120 -54
- 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/constants/toolInputExamples.js +84 -0
- package/dist/constants/toolInputExamples.js.map +7 -0
- package/dist/core/backupManager.js +321 -0
- package/dist/core/backupManager.js.map +7 -0
- 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 +129 -0
- package/dist/core/costTracker.js.map +7 -0
- package/dist/core/gitAutoCommit.js +287 -0
- package/dist/core/gitAutoCommit.js.map +7 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +7 -0
- package/dist/core/operationTracker.js +212 -0
- package/dist/core/operationTracker.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 +296 -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 +173 -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 +345 -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/tokenStats.js +9 -0
- package/dist/core/tokenStats.js.map +7 -0
- package/dist/core/tokenStatsManager.js +331 -0
- package/dist/core/tokenStatsManager.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 +158 -130
- 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/useAgentTokenStats.js +72 -0
- package/dist/hooks/useAgentTokenStats.js.map +7 -0
- package/dist/hooks/useAgentTranscripts.js +140 -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/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 +29 -2
- 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 +348 -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 +348 -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/permissions.js +28 -1
- package/dist/permissions.js.map +2 -2
- package/dist/query.js +253 -21
- package/dist/query.js.map +3 -3
- package/dist/screens/REPL.js +523 -194
- 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 +192 -14
- 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 +338 -43
- 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 +341 -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 +6 -2
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
- package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js +2 -1
- 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 +79 -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 +336 -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/FileEditTool/prompt.js +6 -3
- package/dist/tools/FileEditTool/prompt.js.map +2 -2
- package/dist/tools/FileWriteTool/FileWriteTool.js +5 -5
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
- package/dist/tools/FileWriteTool/prompt.js +4 -2
- package/dist/tools/FileWriteTool/prompt.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/MultiEditTool/prompt.js +5 -3
- package/dist/tools/MultiEditTool/prompt.js.map +2 -2
- package/dist/tools/NotebookEditTool/NotebookEditTool.js +7 -2
- package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
- package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +2 -2
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js +75 -0
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +7 -0
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js +109 -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 +10 -4
- package/dist/tools/SkillTool/SkillTool.js.map +2 -2
- package/dist/tools/SkillTool/prompt.js +1 -1
- package/dist/tools/SkillTool/prompt.js.map +1 -1
- 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 +190 -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 +310 -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/CircuitBreaker.js +242 -0
- package/dist/utils/CircuitBreaker.js.map +7 -0
- 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/ask.js +2 -0
- package/dist/utils/ask.js.map +2 -2
- 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 +108 -10
- 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/credentials/CredentialStore.js +1 -0
- package/dist/utils/credentials/CredentialStore.js.map +7 -0
- package/dist/utils/credentials/EncryptedFileStore.js +157 -0
- package/dist/utils/credentials/EncryptedFileStore.js.map +7 -0
- package/dist/utils/credentials/index.js +37 -0
- package/dist/utils/credentials/index.js.map +7 -0
- package/dist/utils/credentials/migration.js +82 -0
- package/dist/utils/credentials/migration.js.map +7 -0
- 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/markdown.js +13 -1
- package/dist/utils/markdown.js.map +2 -2
- 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 +162 -6
- 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/safePath.js +132 -0
- package/dist/utils/safePath.js.map +7 -0
- 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/sensitiveFiles.js +125 -0
- package/dist/utils/sensitiveFiles.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/theme.js +6 -6
- package/dist/utils/theme.js.map +1 -1
- package/dist/utils/todoStorage.js +92 -2
- package/dist/utils/todoStorage.js.map +2 -2
- package/dist/utils/toolRiskClassification.js +207 -0
- package/dist/utils/toolRiskClassification.js.map +7 -0
- package/dist/utils/toolTimeout.js +136 -0
- package/dist/utils/toolTimeout.js.map +7 -0
- package/dist/utils/tooling/safeRender.js +116 -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 +17 -5
- 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/hooks/useCancelRequest.js +0 -28
- package/dist/hooks/useCancelRequest.js.map +0 -7
- package/dist/screens/Doctor.js +0 -22
- package/dist/screens/Doctor.js.map +0 -7
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const McpStdioServerConfigSchema = z.object({
|
|
3
|
+
type: z.literal("stdio").optional().default("stdio"),
|
|
4
|
+
command: z.string(),
|
|
5
|
+
args: z.array(z.string()),
|
|
6
|
+
env: z.record(z.string()).optional(),
|
|
7
|
+
enabled: z.boolean().optional()
|
|
8
|
+
});
|
|
9
|
+
const McpSSEServerConfigSchema = z.object({
|
|
10
|
+
type: z.literal("sse"),
|
|
11
|
+
url: z.string(),
|
|
12
|
+
enabled: z.boolean().optional()
|
|
13
|
+
});
|
|
14
|
+
const McpServerConfigSchema = z.union([
|
|
15
|
+
McpStdioServerConfigSchema,
|
|
16
|
+
McpSSEServerConfigSchema
|
|
17
|
+
]);
|
|
18
|
+
const AutoUpdaterStatusSchema = z.enum([
|
|
19
|
+
"disabled",
|
|
20
|
+
"enabled",
|
|
21
|
+
"no_permissions",
|
|
22
|
+
"not_configured"
|
|
23
|
+
]);
|
|
24
|
+
const NotificationChannelSchema = z.enum([
|
|
25
|
+
"iterm2",
|
|
26
|
+
"terminal_bell",
|
|
27
|
+
"iterm2_with_bell",
|
|
28
|
+
"notifications_disabled"
|
|
29
|
+
]);
|
|
30
|
+
const ProviderTypeSchema = z.enum([
|
|
31
|
+
"anthropic",
|
|
32
|
+
"openai",
|
|
33
|
+
"mistral",
|
|
34
|
+
"deepseek",
|
|
35
|
+
"kimi",
|
|
36
|
+
"qwen",
|
|
37
|
+
"glm",
|
|
38
|
+
"minimax",
|
|
39
|
+
"baidu-qianfan",
|
|
40
|
+
"siliconflow",
|
|
41
|
+
"bigdream",
|
|
42
|
+
"opendev",
|
|
43
|
+
"xai",
|
|
44
|
+
"groq",
|
|
45
|
+
"gemini",
|
|
46
|
+
"ollama",
|
|
47
|
+
"azure",
|
|
48
|
+
"custom",
|
|
49
|
+
"custom-openai"
|
|
50
|
+
]);
|
|
51
|
+
const CompressionModeSchema = z.enum(["business", "code"]);
|
|
52
|
+
const ReasoningEffortSchema = z.enum([
|
|
53
|
+
"minimal",
|
|
54
|
+
"low",
|
|
55
|
+
"medium",
|
|
56
|
+
"high"
|
|
57
|
+
]);
|
|
58
|
+
const ModelProfileSchema = z.object({
|
|
59
|
+
name: z.string(),
|
|
60
|
+
provider: ProviderTypeSchema,
|
|
61
|
+
modelName: z.string(),
|
|
62
|
+
baseURL: z.string().optional(),
|
|
63
|
+
apiKey: z.string(),
|
|
64
|
+
maxTokens: z.number(),
|
|
65
|
+
contextLength: z.number(),
|
|
66
|
+
reasoningEffort: ReasoningEffortSchema.optional(),
|
|
67
|
+
isActive: z.boolean(),
|
|
68
|
+
createdAt: z.number(),
|
|
69
|
+
lastUsed: z.number().optional(),
|
|
70
|
+
isGPT5: z.boolean().optional(),
|
|
71
|
+
validationStatus: z.enum(["valid", "needs_repair", "auto_repaired"]).optional(),
|
|
72
|
+
lastValidation: z.number().optional()
|
|
73
|
+
});
|
|
74
|
+
const ModelPointerTypeSchema = z.enum([
|
|
75
|
+
"main",
|
|
76
|
+
"task",
|
|
77
|
+
"reasoning",
|
|
78
|
+
"quick"
|
|
79
|
+
]);
|
|
80
|
+
const ModelPointersSchema = z.object({
|
|
81
|
+
main: z.string(),
|
|
82
|
+
task: z.string(),
|
|
83
|
+
reasoning: z.string(),
|
|
84
|
+
quick: z.string()
|
|
85
|
+
});
|
|
86
|
+
const AccountInfoSchema = z.object({
|
|
87
|
+
accountUuid: z.string(),
|
|
88
|
+
emailAddress: z.string(),
|
|
89
|
+
organizationUuid: z.string().optional()
|
|
90
|
+
});
|
|
91
|
+
const ProjectConfigSchema = z.object({
|
|
92
|
+
allowedTools: z.array(z.string()),
|
|
93
|
+
context: z.record(z.string()),
|
|
94
|
+
contextFiles: z.array(z.string()).optional(),
|
|
95
|
+
history: z.array(z.string()),
|
|
96
|
+
dontCrawlDirectory: z.boolean().optional(),
|
|
97
|
+
enableArchitectTool: z.boolean().optional(),
|
|
98
|
+
mcpContextUris: z.array(z.string()),
|
|
99
|
+
mcpServers: z.record(McpServerConfigSchema).optional(),
|
|
100
|
+
approvedMcprcServers: z.array(z.string()).optional(),
|
|
101
|
+
rejectedMcprcServers: z.array(z.string()).optional(),
|
|
102
|
+
lastAPIDuration: z.number().optional(),
|
|
103
|
+
lastCost: z.number().optional(),
|
|
104
|
+
lastDuration: z.number().optional(),
|
|
105
|
+
lastSessionId: z.string().optional(),
|
|
106
|
+
exampleFiles: z.array(z.string()).optional(),
|
|
107
|
+
exampleFilesGeneratedAt: z.number().optional(),
|
|
108
|
+
hasTrustDialogAccepted: z.boolean().optional(),
|
|
109
|
+
hasCompletedProjectOnboarding: z.boolean().optional()
|
|
110
|
+
});
|
|
111
|
+
const GlobalConfigSchema = z.object({
|
|
112
|
+
projects: z.record(ProjectConfigSchema).optional(),
|
|
113
|
+
numStartups: z.number(),
|
|
114
|
+
autoUpdaterStatus: AutoUpdaterStatusSchema.optional(),
|
|
115
|
+
userID: z.string().optional(),
|
|
116
|
+
theme: z.string(),
|
|
117
|
+
hasCompletedOnboarding: z.boolean().optional(),
|
|
118
|
+
lastOnboardingVersion: z.string().optional(),
|
|
119
|
+
lastReleaseNotesSeen: z.string().optional(),
|
|
120
|
+
mcpServers: z.record(McpServerConfigSchema).optional(),
|
|
121
|
+
preferredNotifChannel: NotificationChannelSchema,
|
|
122
|
+
verbose: z.boolean(),
|
|
123
|
+
customApiKeyResponses: z.object({
|
|
124
|
+
approved: z.array(z.string()).optional(),
|
|
125
|
+
rejected: z.array(z.string()).optional()
|
|
126
|
+
}).optional(),
|
|
127
|
+
primaryProvider: ProviderTypeSchema.optional(),
|
|
128
|
+
maxTokens: z.number().optional(),
|
|
129
|
+
hasAcknowledgedCostThreshold: z.boolean().optional(),
|
|
130
|
+
oauthAccount: AccountInfoSchema.optional(),
|
|
131
|
+
iterm2KeyBindingInstalled: z.boolean().optional(),
|
|
132
|
+
shiftEnterKeyBindingInstalled: z.boolean().optional(),
|
|
133
|
+
proxy: z.string().optional(),
|
|
134
|
+
stream: z.boolean().optional(),
|
|
135
|
+
modelProfiles: z.array(ModelProfileSchema).optional(),
|
|
136
|
+
modelPointers: ModelPointersSchema.optional(),
|
|
137
|
+
defaultModelName: z.string().optional(),
|
|
138
|
+
lastDismissedUpdateVersion: z.string().optional(),
|
|
139
|
+
compressionMode: CompressionModeSchema.optional(),
|
|
140
|
+
thinking: z.boolean().optional(),
|
|
141
|
+
// Config version for migrations
|
|
142
|
+
configVersion: z.number().optional()
|
|
143
|
+
});
|
|
144
|
+
function validateGlobalConfig(config) {
|
|
145
|
+
return GlobalConfigSchema.parse(config);
|
|
146
|
+
}
|
|
147
|
+
function validateProjectConfig(config) {
|
|
148
|
+
return ProjectConfigSchema.parse(config);
|
|
149
|
+
}
|
|
150
|
+
function safeValidateGlobalConfig(config) {
|
|
151
|
+
const result = GlobalConfigSchema.safeParse(config);
|
|
152
|
+
return result.success ? { success: true, data: result.data } : { success: false, error: result.error };
|
|
153
|
+
}
|
|
154
|
+
function safeValidateProjectConfig(config) {
|
|
155
|
+
const result = ProjectConfigSchema.safeParse(config);
|
|
156
|
+
return result.success ? { success: true, data: result.data } : { success: false, error: result.error };
|
|
157
|
+
}
|
|
158
|
+
export {
|
|
159
|
+
AccountInfoSchema,
|
|
160
|
+
AutoUpdaterStatusSchema,
|
|
161
|
+
CompressionModeSchema,
|
|
162
|
+
GlobalConfigSchema,
|
|
163
|
+
McpSSEServerConfigSchema,
|
|
164
|
+
McpServerConfigSchema,
|
|
165
|
+
McpStdioServerConfigSchema,
|
|
166
|
+
ModelPointerTypeSchema,
|
|
167
|
+
ModelPointersSchema,
|
|
168
|
+
ModelProfileSchema,
|
|
169
|
+
NotificationChannelSchema,
|
|
170
|
+
ProjectConfigSchema,
|
|
171
|
+
ProviderTypeSchema,
|
|
172
|
+
ReasoningEffortSchema,
|
|
173
|
+
safeValidateGlobalConfig,
|
|
174
|
+
safeValidateProjectConfig,
|
|
175
|
+
validateGlobalConfig,
|
|
176
|
+
validateProjectConfig
|
|
177
|
+
};
|
|
178
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/core/config/schema.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Configuration Schema Definitions\n *\n * Defines all configuration types for Minto with Zod validation.\n */\n\nimport { z } from 'zod'\n\n// MCP Server Configurations\nexport const McpStdioServerConfigSchema = z.object({\n type: z.literal('stdio').optional().default('stdio'),\n command: z.string(),\n args: z.array(z.string()),\n env: z.record(z.string()).optional(),\n enabled: z.boolean().optional(),\n})\n\nexport const McpSSEServerConfigSchema = z.object({\n type: z.literal('sse'),\n url: z.string(),\n enabled: z.boolean().optional(),\n})\n\nexport const McpServerConfigSchema = z.union([\n McpStdioServerConfigSchema,\n McpSSEServerConfigSchema,\n])\n\n// Auto Updater Status\nexport const AutoUpdaterStatusSchema = z.enum([\n 'disabled',\n 'enabled',\n 'no_permissions',\n 'not_configured',\n])\n\n// Notification Channel\nexport const NotificationChannelSchema = z.enum([\n 'iterm2',\n 'terminal_bell',\n 'iterm2_with_bell',\n 'notifications_disabled',\n])\n\n// Provider Types\nexport const ProviderTypeSchema = z.enum([\n 'anthropic',\n 'openai',\n 'mistral',\n 'deepseek',\n 'kimi',\n 'qwen',\n 'glm',\n 'minimax',\n 'baidu-qianfan',\n 'siliconflow',\n 'bigdream',\n 'opendev',\n 'xai',\n 'groq',\n 'gemini',\n 'ollama',\n 'azure',\n 'custom',\n 'custom-openai',\n])\n\n// Compression Mode\nexport const CompressionModeSchema = z.enum(['business', 'code'])\n\n// Reasoning Effort\nexport const ReasoningEffortSchema = z.enum([\n 'minimal',\n 'low',\n 'medium',\n 'high',\n])\n\n// Model Profile\nexport const ModelProfileSchema = z.object({\n name: z.string(),\n provider: ProviderTypeSchema,\n modelName: z.string(),\n baseURL: z.string().optional(),\n apiKey: z.string(),\n maxTokens: z.number(),\n contextLength: z.number(),\n reasoningEffort: ReasoningEffortSchema.optional(),\n isActive: z.boolean(),\n createdAt: z.number(),\n lastUsed: z.number().optional(),\n isGPT5: z.boolean().optional(),\n validationStatus: z\n .enum(['valid', 'needs_repair', 'auto_repaired'])\n .optional(),\n lastValidation: z.number().optional(),\n})\n\n// Model Pointer Type\nexport const ModelPointerTypeSchema = z.enum([\n 'main',\n 'task',\n 'reasoning',\n 'quick',\n])\n\n// Model Pointers\nexport const ModelPointersSchema = z.object({\n main: z.string(),\n task: z.string(),\n reasoning: z.string(),\n quick: z.string(),\n})\n\n// Account Info\nexport const AccountInfoSchema = z.object({\n accountUuid: z.string(),\n emailAddress: z.string(),\n organizationUuid: z.string().optional(),\n})\n\n// Project Configuration\nexport const ProjectConfigSchema = z.object({\n allowedTools: z.array(z.string()),\n context: z.record(z.string()),\n contextFiles: z.array(z.string()).optional(),\n history: z.array(z.string()),\n dontCrawlDirectory: z.boolean().optional(),\n enableArchitectTool: z.boolean().optional(),\n mcpContextUris: z.array(z.string()),\n mcpServers: z.record(McpServerConfigSchema).optional(),\n approvedMcprcServers: z.array(z.string()).optional(),\n rejectedMcprcServers: z.array(z.string()).optional(),\n lastAPIDuration: z.number().optional(),\n lastCost: z.number().optional(),\n lastDuration: z.number().optional(),\n lastSessionId: z.string().optional(),\n exampleFiles: z.array(z.string()).optional(),\n exampleFilesGeneratedAt: z.number().optional(),\n hasTrustDialogAccepted: z.boolean().optional(),\n hasCompletedProjectOnboarding: z.boolean().optional(),\n})\n\n// Global Configuration\nexport const GlobalConfigSchema = z.object({\n projects: z.record(ProjectConfigSchema).optional(),\n numStartups: z.number(),\n autoUpdaterStatus: AutoUpdaterStatusSchema.optional(),\n userID: z.string().optional(),\n theme: z.string(),\n hasCompletedOnboarding: z.boolean().optional(),\n lastOnboardingVersion: z.string().optional(),\n lastReleaseNotesSeen: z.string().optional(),\n mcpServers: z.record(McpServerConfigSchema).optional(),\n preferredNotifChannel: NotificationChannelSchema,\n verbose: z.boolean(),\n customApiKeyResponses: z\n .object({\n approved: z.array(z.string()).optional(),\n rejected: z.array(z.string()).optional(),\n })\n .optional(),\n primaryProvider: ProviderTypeSchema.optional(),\n maxTokens: z.number().optional(),\n hasAcknowledgedCostThreshold: z.boolean().optional(),\n oauthAccount: AccountInfoSchema.optional(),\n iterm2KeyBindingInstalled: z.boolean().optional(),\n shiftEnterKeyBindingInstalled: z.boolean().optional(),\n proxy: z.string().optional(),\n stream: z.boolean().optional(),\n modelProfiles: z.array(ModelProfileSchema).optional(),\n modelPointers: ModelPointersSchema.optional(),\n defaultModelName: z.string().optional(),\n lastDismissedUpdateVersion: z.string().optional(),\n compressionMode: CompressionModeSchema.optional(),\n thinking: z.boolean().optional(),\n // Config version for migrations\n configVersion: z.number().optional(),\n})\n\n// Type exports for TypeScript usage\nexport type McpStdioServerConfig = z.infer<typeof McpStdioServerConfigSchema>\nexport type McpSSEServerConfig = z.infer<typeof McpSSEServerConfigSchema>\nexport type McpServerConfig = z.infer<typeof McpServerConfigSchema>\nexport type AutoUpdaterStatus = z.infer<typeof AutoUpdaterStatusSchema>\nexport type NotificationChannel = z.infer<typeof NotificationChannelSchema>\nexport type ProviderType = z.infer<typeof ProviderTypeSchema>\nexport type CompressionMode = z.infer<typeof CompressionModeSchema>\nexport type ReasoningEffort = z.infer<typeof ReasoningEffortSchema>\nexport type ModelProfile = z.infer<typeof ModelProfileSchema>\nexport type ModelPointerType = z.infer<typeof ModelPointerTypeSchema>\nexport type ModelPointers = z.infer<typeof ModelPointersSchema>\nexport type AccountInfo = z.infer<typeof AccountInfoSchema>\nexport type ProjectConfig = z.infer<typeof ProjectConfigSchema>\nexport type GlobalConfig = z.infer<typeof GlobalConfigSchema>\n\n// Validation utilities\nexport function validateGlobalConfig(config: unknown): GlobalConfig {\n return GlobalConfigSchema.parse(config)\n}\n\nexport function validateProjectConfig(config: unknown): ProjectConfig {\n return ProjectConfigSchema.parse(config)\n}\n\nexport function safeValidateGlobalConfig(config: unknown): {\n success: boolean\n data?: GlobalConfig\n error?: z.ZodError\n} {\n const result = GlobalConfigSchema.safeParse(config)\n return result.success\n ? { success: true, data: result.data }\n : { success: false, error: result.error }\n}\n\nexport function safeValidateProjectConfig(config: unknown): {\n success: boolean\n data?: ProjectConfig\n error?: z.ZodError\n} {\n const result = ProjectConfigSchema.safeParse(config)\n return result.success\n ? { success: true, data: result.data }\n : { success: false, error: result.error }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import signalExit from "signal-exit";
|
|
4
|
+
import { formatDuration } from "../utils/format.js";
|
|
5
|
+
import {
|
|
6
|
+
getCurrentProjectConfig,
|
|
7
|
+
saveCurrentProjectConfig
|
|
8
|
+
} from "../utils/config.js";
|
|
9
|
+
import { SESSION_ID } from "../utils/log.js";
|
|
10
|
+
import { tokenStatsManager } from "./tokenStatsManager.js";
|
|
11
|
+
const STATE = {
|
|
12
|
+
totalCost: 0,
|
|
13
|
+
totalAPIDuration: 0,
|
|
14
|
+
startTime: Date.now(),
|
|
15
|
+
requestCount: 0
|
|
16
|
+
};
|
|
17
|
+
function addToTotalCost(cost, duration) {
|
|
18
|
+
STATE.totalCost += cost;
|
|
19
|
+
STATE.totalAPIDuration += duration;
|
|
20
|
+
STATE.requestCount += 1;
|
|
21
|
+
}
|
|
22
|
+
function addTokenUsage(_inputTokens, _outputTokens, _cacheCreationTokens, _cacheReadTokens) {
|
|
23
|
+
}
|
|
24
|
+
function getTotalCost() {
|
|
25
|
+
return STATE.totalCost;
|
|
26
|
+
}
|
|
27
|
+
function getTotalDuration() {
|
|
28
|
+
return Date.now() - STATE.startTime;
|
|
29
|
+
}
|
|
30
|
+
function getTotalAPIDuration() {
|
|
31
|
+
return STATE.totalAPIDuration;
|
|
32
|
+
}
|
|
33
|
+
function getTokenCounts() {
|
|
34
|
+
const globalStats = tokenStatsManager.getGlobalStats();
|
|
35
|
+
return {
|
|
36
|
+
input: globalStats.totalInputTokens,
|
|
37
|
+
output: globalStats.totalOutputTokens,
|
|
38
|
+
cacheCreation: globalStats.totalCacheCreationTokens,
|
|
39
|
+
cacheRead: globalStats.totalCacheReadTokens,
|
|
40
|
+
total: globalStats.grandTotalTokens
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function getRequestCount() {
|
|
44
|
+
return STATE.requestCount;
|
|
45
|
+
}
|
|
46
|
+
function getCostSummary() {
|
|
47
|
+
return {
|
|
48
|
+
cost: STATE.totalCost,
|
|
49
|
+
apiDuration: STATE.totalAPIDuration,
|
|
50
|
+
wallDuration: getTotalDuration(),
|
|
51
|
+
tokens: getTokenCounts(),
|
|
52
|
+
requests: STATE.requestCount
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function formatCost(cost) {
|
|
56
|
+
return `$${cost > 0.5 ? round(cost, 100).toFixed(2) : cost.toFixed(4)}`;
|
|
57
|
+
}
|
|
58
|
+
function round(number, precision) {
|
|
59
|
+
return Math.round(number * precision) / precision;
|
|
60
|
+
}
|
|
61
|
+
function formatTotalCost() {
|
|
62
|
+
return chalk.grey(
|
|
63
|
+
`Total cost: ${formatCost(STATE.totalCost)}
|
|
64
|
+
Total duration (API): ${formatDuration(STATE.totalAPIDuration)}
|
|
65
|
+
Total duration (wall): ${formatDuration(getTotalDuration())}`
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
function formatDetailedCost() {
|
|
69
|
+
const tokens = getTokenCounts();
|
|
70
|
+
return chalk.grey(
|
|
71
|
+
`Total cost: ${formatCost(STATE.totalCost)}
|
|
72
|
+
Total duration (API): ${formatDuration(STATE.totalAPIDuration)}
|
|
73
|
+
Total duration (wall): ${formatDuration(getTotalDuration())}
|
|
74
|
+
Tokens: ${tokens.input.toLocaleString()} in / ${tokens.output.toLocaleString()} out
|
|
75
|
+
Cache: ${tokens.cacheCreation.toLocaleString()} created / ${tokens.cacheRead.toLocaleString()} read
|
|
76
|
+
Requests: ${STATE.requestCount}`
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
let exitHandlerRegistered = false;
|
|
80
|
+
function useCostSummary() {
|
|
81
|
+
useEffect(() => {
|
|
82
|
+
if (exitHandlerRegistered) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
exitHandlerRegistered = true;
|
|
86
|
+
signalExit(
|
|
87
|
+
() => {
|
|
88
|
+
process.stdout.write("\n" + formatTotalCost() + "\n");
|
|
89
|
+
try {
|
|
90
|
+
const projectConfig = getCurrentProjectConfig();
|
|
91
|
+
saveCurrentProjectConfig({
|
|
92
|
+
...projectConfig,
|
|
93
|
+
lastCost: STATE.totalCost,
|
|
94
|
+
lastAPIDuration: STATE.totalAPIDuration,
|
|
95
|
+
lastDuration: getTotalDuration(),
|
|
96
|
+
lastSessionId: SESSION_ID
|
|
97
|
+
});
|
|
98
|
+
} catch {
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
{ alwaysLast: true }
|
|
102
|
+
);
|
|
103
|
+
}, []);
|
|
104
|
+
}
|
|
105
|
+
function resetStateForTests() {
|
|
106
|
+
if (process.env.NODE_ENV !== "test") {
|
|
107
|
+
throw new Error("resetStateForTests can only be called in tests");
|
|
108
|
+
}
|
|
109
|
+
STATE.startTime = Date.now();
|
|
110
|
+
STATE.totalCost = 0;
|
|
111
|
+
STATE.totalAPIDuration = 0;
|
|
112
|
+
STATE.requestCount = 0;
|
|
113
|
+
tokenStatsManager.reset();
|
|
114
|
+
}
|
|
115
|
+
export {
|
|
116
|
+
addToTotalCost,
|
|
117
|
+
addTokenUsage,
|
|
118
|
+
formatDetailedCost,
|
|
119
|
+
formatTotalCost,
|
|
120
|
+
getCostSummary,
|
|
121
|
+
getRequestCount,
|
|
122
|
+
getTokenCounts,
|
|
123
|
+
getTotalAPIDuration,
|
|
124
|
+
getTotalCost,
|
|
125
|
+
getTotalDuration,
|
|
126
|
+
resetStateForTests,
|
|
127
|
+
useCostSummary
|
|
128
|
+
};
|
|
129
|
+
//# sourceMappingURL=costTracker.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/core/costTracker.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Cost Tracker\n *\n * Tracks API costs and usage metrics for the session.\n * This is the core implementation; the original cost-tracker.ts\n * re-exports from this module for backwards compatibility.\n *\n * NOTE: Token statistics are now managed by TokenStatsManager.\n * This module delegates getTokenCounts() to the unified manager.\n */\n\nimport chalk from 'chalk'\nimport { useEffect } from 'react'\nimport signalExit from 'signal-exit'\nimport { formatDuration } from '../utils/format'\nimport {\n getCurrentProjectConfig,\n saveCurrentProjectConfig,\n} from '../utils/config'\nimport { SESSION_ID } from '../utils/log'\nimport { tokenStatsManager } from './tokenStatsManager'\n\n/**\n * Cost tracking state\n *\n * NOTE: Token statistics are now managed by TokenStatsManager.\n * This state only tracks cost, duration, and request count.\n */\ninterface CostState {\n /** Total cost in dollars */\n totalCost: number\n\n /** Total API call duration in milliseconds */\n totalAPIDuration: number\n\n /** Session start timestamp */\n startTime: number\n\n /** Request count */\n requestCount: number\n}\n\n// Global state (token tracking delegated to TokenStatsManager)\nconst STATE: CostState = {\n totalCost: 0,\n totalAPIDuration: 0,\n startTime: Date.now(),\n requestCount: 0,\n}\n\n/**\n * Add to total cost\n */\nexport function addToTotalCost(cost: number, duration: number): void {\n STATE.totalCost += cost\n STATE.totalAPIDuration += duration\n STATE.requestCount += 1\n}\n\n/**\n * Add token usage\n *\n * @deprecated Use tokenStatsManager.recordUsage() instead.\n * This function is kept for backward compatibility but no longer updates\n * the global token statistics. Token tracking is now handled by TokenStatsManager.\n */\nexport function addTokenUsage(\n _inputTokens: number,\n _outputTokens: number,\n _cacheCreationTokens?: number,\n _cacheReadTokens?: number,\n): void {\n // DEPRECATED: This function is a no-op.\n // Token tracking is now handled by TokenStatsManager in claude.ts via recordTokenUsage().\n}\n\n/**\n * Get total cost\n */\nexport function getTotalCost(): number {\n return STATE.totalCost\n}\n\n/**\n * Get total duration (wall clock time)\n */\nexport function getTotalDuration(): number {\n return Date.now() - STATE.startTime\n}\n\n/**\n * Get total API duration\n */\nexport function getTotalAPIDuration(): number {\n return STATE.totalAPIDuration\n}\n\n/**\n * Get token counts\n *\n * Delegates to TokenStatsManager for unified token statistics.\n */\nexport function getTokenCounts(): {\n input: number\n output: number\n cacheCreation: number\n cacheRead: number\n total: number\n} {\n // Delegate to TokenStatsManager (single source of truth)\n const globalStats = tokenStatsManager.getGlobalStats()\n return {\n input: globalStats.totalInputTokens,\n output: globalStats.totalOutputTokens,\n cacheCreation: globalStats.totalCacheCreationTokens,\n cacheRead: globalStats.totalCacheReadTokens,\n total: globalStats.grandTotalTokens,\n }\n}\n\n/**\n * Get request count\n */\nexport function getRequestCount(): number {\n return STATE.requestCount\n}\n\n/**\n * Get full cost summary\n */\nexport function getCostSummary(): {\n cost: number\n apiDuration: number\n wallDuration: number\n tokens: ReturnType<typeof getTokenCounts>\n requests: number\n} {\n return {\n cost: STATE.totalCost,\n apiDuration: STATE.totalAPIDuration,\n wallDuration: getTotalDuration(),\n tokens: getTokenCounts(),\n requests: STATE.requestCount,\n }\n}\n\n/**\n * Format cost for display\n */\nfunction formatCost(cost: number): string {\n return `$${cost > 0.5 ? round(cost, 100).toFixed(2) : cost.toFixed(4)}`\n}\n\n/**\n * Round to precision\n */\nfunction round(number: number, precision: number): number {\n return Math.round(number * precision) / precision\n}\n\n/**\n * Format total cost for display\n */\nexport function formatTotalCost(): string {\n return chalk.grey(\n `Total cost: ${formatCost(STATE.totalCost)}\nTotal duration (API): ${formatDuration(STATE.totalAPIDuration)}\nTotal duration (wall): ${formatDuration(getTotalDuration())}`,\n )\n}\n\n/**\n * Format detailed cost summary\n */\nexport function formatDetailedCost(): string {\n const tokens = getTokenCounts()\n return chalk.grey(\n `Total cost: ${formatCost(STATE.totalCost)}\nTotal duration (API): ${formatDuration(STATE.totalAPIDuration)}\nTotal duration (wall): ${formatDuration(getTotalDuration())}\nTokens: ${tokens.input.toLocaleString()} in / ${tokens.output.toLocaleString()} out\nCache: ${tokens.cacheCreation.toLocaleString()} created / ${tokens.cacheRead.toLocaleString()} read\nRequests: ${STATE.requestCount}`,\n )\n}\n\n// Flag to ensure we only register once and never unregister\nlet exitHandlerRegistered = false\n\n/**\n * React hook for cost summary on exit\n *\n * CRITICAL FIX: Use signal-exit with alwaysLast: true\n *\n * The problem was that Ink also uses signal-exit (with alwaysLast: false)\n * to clean up on exit. During Ink's cleanup, it may:\n * 1. Call onRender() one last time\n * 2. Use ansiEscapes.eraseLines() to clear previous output\n * 3. Or even call clearTerminal if output height >= terminal rows\n *\n * By using signal-exit with alwaysLast: true, we ensure our handler\n * runs AFTER Ink's cleanup, so our statistics are the last thing printed.\n */\nexport function useCostSummary(): void {\n useEffect(() => {\n // Only register ONCE, and NEVER unregister\n if (exitHandlerRegistered) {\n return\n }\n exitHandlerRegistered = true\n\n // Use signal-exit with alwaysLast: true to run AFTER Ink's cleanup\n signalExit(\n () => {\n // Write statistics to stdout\n process.stdout.write('\\n' + formatTotalCost() + '\\n')\n\n // Save last cost and duration to project config\n try {\n const projectConfig = getCurrentProjectConfig()\n saveCurrentProjectConfig({\n ...projectConfig,\n lastCost: STATE.totalCost,\n lastAPIDuration: STATE.totalAPIDuration,\n lastDuration: getTotalDuration(),\n lastSessionId: SESSION_ID,\n })\n } catch {\n // Ignore errors during exit - config save is best-effort\n }\n },\n { alwaysLast: true },\n )\n\n // NO cleanup - never unregister the exit handler\n }, [])\n}\n\n/**\n * Reset state (for testing only)\n */\nexport function resetStateForTests(): void {\n if (process.env.NODE_ENV !== 'test') {\n throw new Error('resetStateForTests can only be called in tests')\n }\n STATE.startTime = Date.now()\n STATE.totalCost = 0\n STATE.totalAPIDuration = 0\n STATE.requestCount = 0\n // Token stats are managed by TokenStatsManager - reset there if needed\n tokenStatsManager.reset()\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
import { minimatch } from "minimatch";
|
|
2
|
+
import { getIsGit } from "../utils/git.js";
|
|
3
|
+
import { execFileNoThrow } from "../utils/execFileNoThrow.js";
|
|
4
|
+
import { getCwd } from "../utils/state.js";
|
|
5
|
+
import { operationTracker } from "./operationTracker.js";
|
|
6
|
+
const DEFAULT_GIT_CONFIG = {
|
|
7
|
+
enabled: false,
|
|
8
|
+
// Default OFF, user must enable
|
|
9
|
+
commitAfterTask: true,
|
|
10
|
+
excludePatterns: ["*.log", "node_modules/**", "dist/**", ".minto/**"],
|
|
11
|
+
commitMessagePrefix: "chore(minto): "
|
|
12
|
+
};
|
|
13
|
+
async function shouldAutoCommit(config) {
|
|
14
|
+
if (!config.enabled) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
const isGitRepo = await getIsGit();
|
|
18
|
+
if (!isGitRepo) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
const changes = await getChangedFiles();
|
|
22
|
+
if (changes.length === 0) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
const filesToCommit = filterExcludedFiles(changes, config.excludePatterns);
|
|
26
|
+
return filesToCommit.length > 0;
|
|
27
|
+
}
|
|
28
|
+
async function performAutoCommit(config, description) {
|
|
29
|
+
const isGitRepo = await getIsGit();
|
|
30
|
+
if (!isGitRepo) {
|
|
31
|
+
return {
|
|
32
|
+
success: false,
|
|
33
|
+
message: "Not a git repository"
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
const allChanges = await getChangedFiles();
|
|
37
|
+
if (allChanges.length === 0) {
|
|
38
|
+
return {
|
|
39
|
+
success: false,
|
|
40
|
+
message: "No changes to commit"
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
const filesToCommit = filterExcludedFiles(allChanges, config.excludePatterns);
|
|
44
|
+
if (filesToCommit.length === 0) {
|
|
45
|
+
return {
|
|
46
|
+
success: false,
|
|
47
|
+
message: "All changed files are excluded by patterns"
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const summary = await getChangeSummary(filesToCommit);
|
|
51
|
+
const stageResult = await stageFiles(filesToCommit.map((f) => f.path));
|
|
52
|
+
if (!stageResult.success) {
|
|
53
|
+
return {
|
|
54
|
+
success: false,
|
|
55
|
+
message: `Failed to stage files: ${stageResult.error}`
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
const commitMessage = generateCommitMessage(config, summary, description);
|
|
59
|
+
const commitResult = await createCommit(commitMessage);
|
|
60
|
+
if (!commitResult.success) {
|
|
61
|
+
return {
|
|
62
|
+
success: false,
|
|
63
|
+
message: `Failed to create commit: ${commitResult.error}`
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
success: true,
|
|
68
|
+
message: `Committed ${filesToCommit.length} file(s)`,
|
|
69
|
+
commitHash: commitResult.hash,
|
|
70
|
+
filesCommitted: filesToCommit.map((f) => f.path)
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function generateCommitMessage(config, summary, description) {
|
|
74
|
+
const sanitizedDesc = description.trim().slice(0, 72);
|
|
75
|
+
const title = `${config.commitMessagePrefix}${sanitizedDesc}`;
|
|
76
|
+
const fileCount = summary.files.length;
|
|
77
|
+
const fileLines = summary.files.slice(0, 10).map((file) => {
|
|
78
|
+
const statusPrefix = getStatusLabel(file.status);
|
|
79
|
+
if (file.linesAdded !== void 0 || file.linesRemoved !== void 0) {
|
|
80
|
+
const added = file.linesAdded ?? 0;
|
|
81
|
+
const removed = file.linesRemoved ?? 0;
|
|
82
|
+
return `- ${file.path} (${statusPrefix}, +${added} -${removed})`;
|
|
83
|
+
}
|
|
84
|
+
return `- ${file.path} (${statusPrefix})`;
|
|
85
|
+
});
|
|
86
|
+
if (summary.files.length > 10) {
|
|
87
|
+
fileLines.push(`- ... and ${summary.files.length - 10} more file(s)`);
|
|
88
|
+
}
|
|
89
|
+
const lines = [
|
|
90
|
+
title,
|
|
91
|
+
"",
|
|
92
|
+
`Modified ${fileCount} file(s):`,
|
|
93
|
+
...fileLines,
|
|
94
|
+
"",
|
|
95
|
+
"\u{1F916} Auto-committed by Minto"
|
|
96
|
+
];
|
|
97
|
+
return lines.join("\n");
|
|
98
|
+
}
|
|
99
|
+
async function getChangedFiles() {
|
|
100
|
+
const { stdout, code } = await execFileNoThrow(
|
|
101
|
+
"git",
|
|
102
|
+
["status", "--porcelain", "-u"],
|
|
103
|
+
void 0,
|
|
104
|
+
void 0,
|
|
105
|
+
true
|
|
106
|
+
);
|
|
107
|
+
if (code !== 0) {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
const files = [];
|
|
111
|
+
for (const line of stdout.split("\n")) {
|
|
112
|
+
if (!line.trim()) continue;
|
|
113
|
+
const status = line.substring(0, 2).trim();
|
|
114
|
+
const path = line.substring(3).trim();
|
|
115
|
+
if (!path) continue;
|
|
116
|
+
const normalizedStatus = normalizeStatus(status);
|
|
117
|
+
if (normalizedStatus) {
|
|
118
|
+
files.push({
|
|
119
|
+
path,
|
|
120
|
+
status: normalizedStatus
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return files;
|
|
125
|
+
}
|
|
126
|
+
async function getChangeSummary(files) {
|
|
127
|
+
let totalAdded = 0;
|
|
128
|
+
let totalRemoved = 0;
|
|
129
|
+
const trackedFiles = files.filter((f) => f.status !== "?");
|
|
130
|
+
if (trackedFiles.length > 0) {
|
|
131
|
+
const { stdout, code } = await execFileNoThrow(
|
|
132
|
+
"git",
|
|
133
|
+
["diff", "--numstat", "HEAD", "--", ...trackedFiles.map((f) => f.path)],
|
|
134
|
+
void 0,
|
|
135
|
+
void 0,
|
|
136
|
+
true
|
|
137
|
+
);
|
|
138
|
+
if (code === 0) {
|
|
139
|
+
for (const line of stdout.split("\n")) {
|
|
140
|
+
if (!line.trim()) continue;
|
|
141
|
+
const parts = line.split(" ");
|
|
142
|
+
if (parts.length >= 3) {
|
|
143
|
+
const added = parseInt(parts[0], 10) || 0;
|
|
144
|
+
const removed = parseInt(parts[1], 10) || 0;
|
|
145
|
+
const path = parts[2];
|
|
146
|
+
const file = files.find((f) => f.path === path);
|
|
147
|
+
if (file) {
|
|
148
|
+
file.linesAdded = added;
|
|
149
|
+
file.linesRemoved = removed;
|
|
150
|
+
}
|
|
151
|
+
totalAdded += added;
|
|
152
|
+
totalRemoved += removed;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const untrackedFiles = files.filter((f) => f.status === "?");
|
|
158
|
+
for (const file of untrackedFiles) {
|
|
159
|
+
const { stdout, code } = await execFileNoThrow(
|
|
160
|
+
"wc",
|
|
161
|
+
["-l", file.path],
|
|
162
|
+
void 0,
|
|
163
|
+
void 0,
|
|
164
|
+
true
|
|
165
|
+
);
|
|
166
|
+
if (code === 0) {
|
|
167
|
+
const lineCount = parseInt(stdout.trim().split(/\s+/)[0], 10) || 0;
|
|
168
|
+
file.linesAdded = lineCount;
|
|
169
|
+
file.linesRemoved = 0;
|
|
170
|
+
totalAdded += lineCount;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return {
|
|
174
|
+
files,
|
|
175
|
+
totalAdded,
|
|
176
|
+
totalRemoved
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
function filterExcludedFiles(files, excludePatterns) {
|
|
180
|
+
return files.filter((file) => {
|
|
181
|
+
for (const pattern of excludePatterns) {
|
|
182
|
+
if (minimatch(file.path, pattern, { dot: true })) {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return true;
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
async function stageFiles(paths) {
|
|
190
|
+
if (paths.length === 0) {
|
|
191
|
+
return { success: true };
|
|
192
|
+
}
|
|
193
|
+
const { code, stderr } = await execFileNoThrow(
|
|
194
|
+
"git",
|
|
195
|
+
["add", "--", ...paths],
|
|
196
|
+
void 0,
|
|
197
|
+
void 0,
|
|
198
|
+
true
|
|
199
|
+
);
|
|
200
|
+
if (code !== 0) {
|
|
201
|
+
return { success: false, error: stderr || "Unknown error" };
|
|
202
|
+
}
|
|
203
|
+
return { success: true };
|
|
204
|
+
}
|
|
205
|
+
async function createCommit(message) {
|
|
206
|
+
const { code, stdout, stderr } = await execFileNoThrow(
|
|
207
|
+
"git",
|
|
208
|
+
["commit", "-m", message],
|
|
209
|
+
void 0,
|
|
210
|
+
void 0,
|
|
211
|
+
true
|
|
212
|
+
);
|
|
213
|
+
if (code !== 0) {
|
|
214
|
+
return { success: false, error: stderr || "Unknown error" };
|
|
215
|
+
}
|
|
216
|
+
const match = stdout.match(/\[[\w/-]+ ([a-f0-9]+)\]/);
|
|
217
|
+
const hash = match ? match[1] : void 0;
|
|
218
|
+
return { success: true, hash };
|
|
219
|
+
}
|
|
220
|
+
function normalizeStatus(status) {
|
|
221
|
+
if (status.includes("?")) return "?";
|
|
222
|
+
if (status.includes("A")) return "A";
|
|
223
|
+
if (status.includes("D")) return "D";
|
|
224
|
+
if (status.includes("R")) return "R";
|
|
225
|
+
if (status.includes("C")) return "C";
|
|
226
|
+
if (status.includes("U")) return "U";
|
|
227
|
+
if (status.includes("M") || status.includes(" M")) return "M";
|
|
228
|
+
if (status.trim()) return "M";
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
function getStatusLabel(status) {
|
|
232
|
+
switch (status) {
|
|
233
|
+
case "M":
|
|
234
|
+
return "modified";
|
|
235
|
+
case "A":
|
|
236
|
+
return "new";
|
|
237
|
+
case "D":
|
|
238
|
+
return "deleted";
|
|
239
|
+
case "?":
|
|
240
|
+
return "new";
|
|
241
|
+
case "R":
|
|
242
|
+
return "renamed";
|
|
243
|
+
case "C":
|
|
244
|
+
return "copied";
|
|
245
|
+
case "U":
|
|
246
|
+
return "unmerged";
|
|
247
|
+
default:
|
|
248
|
+
return "changed";
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
function getTrackedOperations() {
|
|
252
|
+
return operationTracker.getSummary();
|
|
253
|
+
}
|
|
254
|
+
function hasTrackedFileChanges() {
|
|
255
|
+
const summary = operationTracker.getSummary();
|
|
256
|
+
return summary.filesModified.length > 0 || summary.filesCreated.length > 0;
|
|
257
|
+
}
|
|
258
|
+
function enhanceWithTrackerData(files, trackerSummary) {
|
|
259
|
+
const modifiedMap = /* @__PURE__ */ new Map();
|
|
260
|
+
for (const mod of trackerSummary.filesModified) {
|
|
261
|
+
modifiedMap.set(mod.path, { added: mod.added, removed: mod.removed });
|
|
262
|
+
}
|
|
263
|
+
return files.map((file) => {
|
|
264
|
+
const tracked = modifiedMap.get(file.path);
|
|
265
|
+
if (tracked) {
|
|
266
|
+
return {
|
|
267
|
+
...file,
|
|
268
|
+
linesAdded: file.linesAdded ?? tracked.added,
|
|
269
|
+
linesRemoved: file.linesRemoved ?? tracked.removed
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
return file;
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
export {
|
|
276
|
+
DEFAULT_GIT_CONFIG,
|
|
277
|
+
enhanceWithTrackerData,
|
|
278
|
+
filterExcludedFiles,
|
|
279
|
+
generateCommitMessage,
|
|
280
|
+
getChangedFiles,
|
|
281
|
+
getCwd,
|
|
282
|
+
getTrackedOperations,
|
|
283
|
+
hasTrackedFileChanges,
|
|
284
|
+
performAutoCommit,
|
|
285
|
+
shouldAutoCommit
|
|
286
|
+
};
|
|
287
|
+
//# sourceMappingURL=gitAutoCommit.js.map
|