@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,386 @@
|
|
|
1
|
+
import { randomUUID } from "crypto";
|
|
2
|
+
import {
|
|
3
|
+
existsSync,
|
|
4
|
+
mkdirSync,
|
|
5
|
+
readFileSync,
|
|
6
|
+
writeFileSync,
|
|
7
|
+
unlinkSync,
|
|
8
|
+
readdirSync
|
|
9
|
+
} from "fs";
|
|
10
|
+
import { join, dirname } from "path";
|
|
11
|
+
import { getCwd } from "../utils/state.js";
|
|
12
|
+
import { execFileNoThrow } from "../utils/execFileNoThrow.js";
|
|
13
|
+
class CheckpointManager {
|
|
14
|
+
checkpoints = /* @__PURE__ */ new Map();
|
|
15
|
+
fileChangeTracker = [];
|
|
16
|
+
checkpointDir;
|
|
17
|
+
maxCheckpoints;
|
|
18
|
+
constructor(options) {
|
|
19
|
+
this.checkpointDir = options?.checkpointDir ?? join(getCwd(), ".minto", "checkpoints");
|
|
20
|
+
this.maxCheckpoints = options?.maxCheckpoints ?? 50;
|
|
21
|
+
if (!existsSync(this.checkpointDir)) {
|
|
22
|
+
mkdirSync(this.checkpointDir, { recursive: true });
|
|
23
|
+
}
|
|
24
|
+
this.loadCheckpoints();
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Create a new checkpoint
|
|
28
|
+
*/
|
|
29
|
+
async createCheckpoint(description, options) {
|
|
30
|
+
const id = randomUUID();
|
|
31
|
+
const timestamp = Date.now();
|
|
32
|
+
const lastCheckpoint = this.getLastCheckpoint();
|
|
33
|
+
let gitCommit;
|
|
34
|
+
let gitBranch;
|
|
35
|
+
if (options?.includeGit !== false) {
|
|
36
|
+
try {
|
|
37
|
+
gitCommit = await this.getCurrentGitCommit();
|
|
38
|
+
gitBranch = await this.getCurrentGitBranch();
|
|
39
|
+
} catch {
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const checkpoint = {
|
|
43
|
+
id,
|
|
44
|
+
timestamp,
|
|
45
|
+
description,
|
|
46
|
+
messageCount: 0,
|
|
47
|
+
// Will be updated by caller
|
|
48
|
+
fileChanges: [...this.fileChangeTracker],
|
|
49
|
+
gitCommit,
|
|
50
|
+
gitBranch,
|
|
51
|
+
parentId: lastCheckpoint?.id,
|
|
52
|
+
metadata: {
|
|
53
|
+
cwd: getCwd(),
|
|
54
|
+
tags: options?.tags
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
this.checkpoints.set(id, checkpoint);
|
|
58
|
+
this.saveCheckpoint(checkpoint);
|
|
59
|
+
this.fileChangeTracker = [];
|
|
60
|
+
this.pruneOldCheckpoints();
|
|
61
|
+
return checkpoint;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Restore to a checkpoint
|
|
65
|
+
*/
|
|
66
|
+
async restore(checkpointId, options = {}) {
|
|
67
|
+
const checkpoint = this.checkpoints.get(checkpointId);
|
|
68
|
+
if (!checkpoint) {
|
|
69
|
+
return {
|
|
70
|
+
success: false,
|
|
71
|
+
checkpointId,
|
|
72
|
+
restoredFiles: [],
|
|
73
|
+
error: `Checkpoint not found: ${checkpointId}`
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const restoredFiles = [];
|
|
77
|
+
let backupId;
|
|
78
|
+
if (options.createBackup) {
|
|
79
|
+
const backup = await this.createCheckpoint(
|
|
80
|
+
`Backup before restore to ${checkpoint.description}`
|
|
81
|
+
);
|
|
82
|
+
backupId = backup.id;
|
|
83
|
+
}
|
|
84
|
+
if (options.dryRun) {
|
|
85
|
+
return {
|
|
86
|
+
success: true,
|
|
87
|
+
checkpointId,
|
|
88
|
+
restoredFiles: checkpoint.fileChanges.map((f) => f.path),
|
|
89
|
+
backupId
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
if (options.restoreFiles !== false) {
|
|
93
|
+
try {
|
|
94
|
+
for (const change of checkpoint.fileChanges) {
|
|
95
|
+
await this.restoreFileChange(change);
|
|
96
|
+
restoredFiles.push(change.path);
|
|
97
|
+
}
|
|
98
|
+
} catch (error) {
|
|
99
|
+
return {
|
|
100
|
+
success: false,
|
|
101
|
+
checkpointId,
|
|
102
|
+
restoredFiles,
|
|
103
|
+
error: error instanceof Error ? error.message : String(error),
|
|
104
|
+
backupId
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
let gitRestored = false;
|
|
109
|
+
if (options.restoreGit && checkpoint.gitCommit) {
|
|
110
|
+
try {
|
|
111
|
+
await this.restoreGitState(checkpoint.gitCommit);
|
|
112
|
+
gitRestored = true;
|
|
113
|
+
} catch (error) {
|
|
114
|
+
return {
|
|
115
|
+
success: false,
|
|
116
|
+
checkpointId,
|
|
117
|
+
restoredFiles,
|
|
118
|
+
gitRestored: false,
|
|
119
|
+
error: `Git restore failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
120
|
+
backupId
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
success: true,
|
|
126
|
+
checkpointId,
|
|
127
|
+
restoredFiles,
|
|
128
|
+
gitRestored,
|
|
129
|
+
backupId
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Track a file change
|
|
134
|
+
*/
|
|
135
|
+
trackFileChange(change) {
|
|
136
|
+
this.fileChangeTracker.push({
|
|
137
|
+
...change,
|
|
138
|
+
timestamp: Date.now()
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Get all checkpoints
|
|
143
|
+
*/
|
|
144
|
+
getCheckpoints() {
|
|
145
|
+
return Array.from(this.checkpoints.values()).sort(
|
|
146
|
+
(a, b) => b.timestamp - a.timestamp
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get checkpoint by ID
|
|
151
|
+
*/
|
|
152
|
+
getCheckpoint(id) {
|
|
153
|
+
return this.checkpoints.get(id);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get the most recent checkpoint
|
|
157
|
+
*/
|
|
158
|
+
getLastCheckpoint() {
|
|
159
|
+
const checkpoints = this.getCheckpoints();
|
|
160
|
+
return checkpoints[0];
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Get checkpoints by tag
|
|
164
|
+
*/
|
|
165
|
+
getCheckpointsByTag(tag) {
|
|
166
|
+
return this.getCheckpoints().filter((cp) => cp.metadata.tags?.includes(tag));
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Delete a checkpoint
|
|
170
|
+
*/
|
|
171
|
+
deleteCheckpoint(id) {
|
|
172
|
+
const checkpoint = this.checkpoints.get(id);
|
|
173
|
+
if (!checkpoint) return false;
|
|
174
|
+
this.checkpoints.delete(id);
|
|
175
|
+
const filePath = join(this.checkpointDir, `${id}.json`);
|
|
176
|
+
if (existsSync(filePath)) {
|
|
177
|
+
unlinkSync(filePath);
|
|
178
|
+
}
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get checkpoint history (chain from current to first)
|
|
183
|
+
*/
|
|
184
|
+
getCheckpointHistory(checkpointId) {
|
|
185
|
+
const history = [];
|
|
186
|
+
let current = this.checkpoints.get(checkpointId);
|
|
187
|
+
while (current) {
|
|
188
|
+
history.push(current);
|
|
189
|
+
current = current.parentId ? this.checkpoints.get(current.parentId) : void 0;
|
|
190
|
+
}
|
|
191
|
+
return history;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get pending file changes (not yet checkpointed)
|
|
195
|
+
*/
|
|
196
|
+
getPendingChanges() {
|
|
197
|
+
return [...this.fileChangeTracker];
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Clear pending file changes
|
|
201
|
+
*/
|
|
202
|
+
clearPendingChanges() {
|
|
203
|
+
this.fileChangeTracker = [];
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Get diff between two checkpoints
|
|
207
|
+
*/
|
|
208
|
+
getDiff(fromId, toId) {
|
|
209
|
+
const fromCheckpoint = this.checkpoints.get(fromId);
|
|
210
|
+
const toCheckpoint = this.checkpoints.get(toId);
|
|
211
|
+
if (!fromCheckpoint || !toCheckpoint) {
|
|
212
|
+
return { addedFiles: [], modifiedFiles: [], deletedFiles: [] };
|
|
213
|
+
}
|
|
214
|
+
const history = this.getCheckpointHistory(toId);
|
|
215
|
+
const fromIndex = history.findIndex((cp) => cp.id === fromId);
|
|
216
|
+
if (fromIndex === -1) {
|
|
217
|
+
return { addedFiles: [], modifiedFiles: [], deletedFiles: [] };
|
|
218
|
+
}
|
|
219
|
+
const relevantCheckpoints = history.slice(0, fromIndex);
|
|
220
|
+
const allChanges = relevantCheckpoints.flatMap((cp) => cp.fileChanges);
|
|
221
|
+
const addedFiles = [];
|
|
222
|
+
const modifiedFiles = [];
|
|
223
|
+
const deletedFiles = [];
|
|
224
|
+
for (const change of allChanges) {
|
|
225
|
+
switch (change.type) {
|
|
226
|
+
case "create":
|
|
227
|
+
addedFiles.push(change.path);
|
|
228
|
+
break;
|
|
229
|
+
case "modify":
|
|
230
|
+
modifiedFiles.push(change.path);
|
|
231
|
+
break;
|
|
232
|
+
case "delete":
|
|
233
|
+
deletedFiles.push(change.path);
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return {
|
|
238
|
+
addedFiles: [...new Set(addedFiles)],
|
|
239
|
+
modifiedFiles: [...new Set(modifiedFiles)],
|
|
240
|
+
deletedFiles: [...new Set(deletedFiles)]
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Load checkpoints from disk
|
|
245
|
+
*/
|
|
246
|
+
loadCheckpoints() {
|
|
247
|
+
if (!existsSync(this.checkpointDir)) return;
|
|
248
|
+
try {
|
|
249
|
+
const files = readdirSync(this.checkpointDir);
|
|
250
|
+
for (const file of files) {
|
|
251
|
+
if (!file.endsWith(".json")) continue;
|
|
252
|
+
try {
|
|
253
|
+
const filePath = join(this.checkpointDir, file);
|
|
254
|
+
const content = readFileSync(filePath, "utf-8");
|
|
255
|
+
const checkpoint = JSON.parse(content);
|
|
256
|
+
this.checkpoints.set(checkpoint.id, checkpoint);
|
|
257
|
+
} catch {
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
} catch {
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Save checkpoint to disk
|
|
265
|
+
*/
|
|
266
|
+
saveCheckpoint(checkpoint) {
|
|
267
|
+
const filePath = join(this.checkpointDir, `${checkpoint.id}.json`);
|
|
268
|
+
writeFileSync(filePath, JSON.stringify(checkpoint, null, 2), "utf-8");
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Prune old checkpoints to stay within limit
|
|
272
|
+
*/
|
|
273
|
+
pruneOldCheckpoints() {
|
|
274
|
+
const checkpoints = this.getCheckpoints();
|
|
275
|
+
if (checkpoints.length <= this.maxCheckpoints) return;
|
|
276
|
+
const toDelete = checkpoints.slice(this.maxCheckpoints);
|
|
277
|
+
for (const checkpoint of toDelete) {
|
|
278
|
+
this.deleteCheckpoint(checkpoint.id);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Restore a file change
|
|
283
|
+
*/
|
|
284
|
+
async restoreFileChange(change) {
|
|
285
|
+
const fullPath = join(getCwd(), change.path);
|
|
286
|
+
switch (change.type) {
|
|
287
|
+
case "create":
|
|
288
|
+
if (existsSync(fullPath)) {
|
|
289
|
+
unlinkSync(fullPath);
|
|
290
|
+
}
|
|
291
|
+
break;
|
|
292
|
+
case "modify":
|
|
293
|
+
if (change.originalContent !== void 0) {
|
|
294
|
+
const dir = dirname(fullPath);
|
|
295
|
+
if (!existsSync(dir)) {
|
|
296
|
+
mkdirSync(dir, { recursive: true });
|
|
297
|
+
}
|
|
298
|
+
writeFileSync(fullPath, change.originalContent, "utf-8");
|
|
299
|
+
}
|
|
300
|
+
break;
|
|
301
|
+
case "delete":
|
|
302
|
+
if (change.originalContent !== void 0) {
|
|
303
|
+
const dir = dirname(fullPath);
|
|
304
|
+
if (!existsSync(dir)) {
|
|
305
|
+
mkdirSync(dir, { recursive: true });
|
|
306
|
+
}
|
|
307
|
+
writeFileSync(fullPath, change.originalContent, "utf-8");
|
|
308
|
+
}
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Get current git commit hash
|
|
314
|
+
*/
|
|
315
|
+
async getCurrentGitCommit() {
|
|
316
|
+
try {
|
|
317
|
+
const result = await execFileNoThrow("git", ["rev-parse", "HEAD"]);
|
|
318
|
+
if (result.code === 0 && result.stdout) {
|
|
319
|
+
return result.stdout.trim();
|
|
320
|
+
}
|
|
321
|
+
return void 0;
|
|
322
|
+
} catch {
|
|
323
|
+
return void 0;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Get current git branch
|
|
328
|
+
*/
|
|
329
|
+
async getCurrentGitBranch() {
|
|
330
|
+
try {
|
|
331
|
+
const result = await execFileNoThrow("git", [
|
|
332
|
+
"rev-parse",
|
|
333
|
+
"--abbrev-ref",
|
|
334
|
+
"HEAD"
|
|
335
|
+
]);
|
|
336
|
+
if (result.code === 0 && result.stdout) {
|
|
337
|
+
return result.stdout.trim();
|
|
338
|
+
}
|
|
339
|
+
return void 0;
|
|
340
|
+
} catch {
|
|
341
|
+
return void 0;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Restore git state to a specific commit
|
|
346
|
+
*/
|
|
347
|
+
async restoreGitState(commit) {
|
|
348
|
+
await execFileNoThrow("git", ["stash"]);
|
|
349
|
+
const result = await execFileNoThrow("git", ["checkout", commit]);
|
|
350
|
+
if (result.code !== 0) {
|
|
351
|
+
throw new Error(`Failed to checkout commit ${commit}: ${result.stderr}`);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
let managerInstance = null;
|
|
356
|
+
function getCheckpointManager() {
|
|
357
|
+
if (!managerInstance) {
|
|
358
|
+
managerInstance = new CheckpointManager();
|
|
359
|
+
}
|
|
360
|
+
return managerInstance;
|
|
361
|
+
}
|
|
362
|
+
function resetCheckpointManager() {
|
|
363
|
+
managerInstance = null;
|
|
364
|
+
}
|
|
365
|
+
async function createCheckpoint(description, options) {
|
|
366
|
+
return getCheckpointManager().createCheckpoint(description, options);
|
|
367
|
+
}
|
|
368
|
+
async function restoreCheckpoint(checkpointId, options) {
|
|
369
|
+
return getCheckpointManager().restore(checkpointId, options);
|
|
370
|
+
}
|
|
371
|
+
function trackFileChange(change) {
|
|
372
|
+
getCheckpointManager().trackFileChange(change);
|
|
373
|
+
}
|
|
374
|
+
function getCheckpoints() {
|
|
375
|
+
return getCheckpointManager().getCheckpoints();
|
|
376
|
+
}
|
|
377
|
+
export {
|
|
378
|
+
CheckpointManager,
|
|
379
|
+
createCheckpoint,
|
|
380
|
+
getCheckpointManager,
|
|
381
|
+
getCheckpoints,
|
|
382
|
+
resetCheckpointManager,
|
|
383
|
+
restoreCheckpoint,
|
|
384
|
+
trackFileChange
|
|
385
|
+
};
|
|
386
|
+
//# sourceMappingURL=checkpointManager.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/services/checkpointManager.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Checkpoint Manager\n *\n * Provides checkpoint and rollback capabilities for conversation state,\n * file changes, and git commits. Allows users to restore previous states.\n */\n\nimport { randomUUID } from 'crypto'\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n writeFileSync,\n unlinkSync,\n readdirSync,\n} from 'fs'\nimport { join, dirname } from 'path'\nimport { getCwd } from '@utils/state'\nimport { execFileNoThrow } from '@utils/execFileNoThrow'\n\n/**\n * File change record\n */\nexport interface FileChange {\n /** File path */\n path: string\n /** Type of change */\n type: 'create' | 'modify' | 'delete'\n /** Original content (for modify/delete) */\n originalContent?: string\n /** New content (for create/modify) */\n newContent?: string\n /** Timestamp of change */\n timestamp: number\n}\n\n/**\n * Checkpoint data\n */\nexport interface Checkpoint {\n /** Unique checkpoint ID */\n id: string\n /** Creation timestamp */\n timestamp: number\n /** Description of this checkpoint */\n description: string\n /** Messages at this point */\n messageCount: number\n /** File changes since last checkpoint */\n fileChanges: FileChange[]\n /** Git commit hash (if available) */\n gitCommit?: string\n /** Git branch name */\n gitBranch?: string\n /** Parent checkpoint ID */\n parentId?: string\n /** Metadata */\n metadata: {\n /** Working directory */\n cwd: string\n /** User who created checkpoint */\n createdBy?: string\n /** Tags for categorization */\n tags?: string[]\n }\n}\n\n/**\n * Checkpoint restore options\n */\nexport interface RestoreOptions {\n /** Restore file changes */\n restoreFiles?: boolean\n /** Restore git state */\n restoreGit?: boolean\n /** Create backup before restore */\n createBackup?: boolean\n /** Dry run (preview changes) */\n dryRun?: boolean\n}\n\n/**\n * Restore result\n */\nexport interface RestoreResult {\n /** Whether restore succeeded */\n success: boolean\n /** Restored checkpoint ID */\n checkpointId: string\n /** Files that were restored */\n restoredFiles: string[]\n /** Git restore result */\n gitRestored?: boolean\n /** Error message if failed */\n error?: string\n /** Backup checkpoint ID (if created) */\n backupId?: string\n}\n\n/**\n * Checkpoint Manager for state tracking and rollback\n */\nexport class CheckpointManager {\n private checkpoints: Map<string, Checkpoint> = new Map()\n private fileChangeTracker: FileChange[] = []\n private checkpointDir: string\n private maxCheckpoints: number\n\n constructor(options?: { checkpointDir?: string; maxCheckpoints?: number }) {\n this.checkpointDir =\n options?.checkpointDir ?? join(getCwd(), '.minto', 'checkpoints')\n this.maxCheckpoints = options?.maxCheckpoints ?? 50\n\n // Ensure checkpoint directory exists\n if (!existsSync(this.checkpointDir)) {\n mkdirSync(this.checkpointDir, { recursive: true })\n }\n\n // Load existing checkpoints\n this.loadCheckpoints()\n }\n\n /**\n * Create a new checkpoint\n */\n async createCheckpoint(\n description: string,\n options?: {\n tags?: string[]\n includeGit?: boolean\n },\n ): Promise<Checkpoint> {\n const id = randomUUID()\n const timestamp = Date.now()\n const lastCheckpoint = this.getLastCheckpoint()\n\n // Get git info if requested\n let gitCommit: string | undefined\n let gitBranch: string | undefined\n\n if (options?.includeGit !== false) {\n try {\n gitCommit = await this.getCurrentGitCommit()\n gitBranch = await this.getCurrentGitBranch()\n } catch {\n // Git not available or not a git repo\n }\n }\n\n const checkpoint: Checkpoint = {\n id,\n timestamp,\n description,\n messageCount: 0, // Will be updated by caller\n fileChanges: [...this.fileChangeTracker],\n gitCommit,\n gitBranch,\n parentId: lastCheckpoint?.id,\n metadata: {\n cwd: getCwd(),\n tags: options?.tags,\n },\n }\n\n // Store checkpoint\n this.checkpoints.set(id, checkpoint)\n this.saveCheckpoint(checkpoint)\n\n // Clear file change tracker\n this.fileChangeTracker = []\n\n // Prune old checkpoints if needed\n this.pruneOldCheckpoints()\n\n return checkpoint\n }\n\n /**\n * Restore to a checkpoint\n */\n async restore(\n checkpointId: string,\n options: RestoreOptions = {},\n ): Promise<RestoreResult> {\n const checkpoint = this.checkpoints.get(checkpointId)\n if (!checkpoint) {\n return {\n success: false,\n checkpointId,\n restoredFiles: [],\n error: `Checkpoint not found: ${checkpointId}`,\n }\n }\n\n const restoredFiles: string[] = []\n let backupId: string | undefined\n\n // Create backup if requested\n if (options.createBackup) {\n const backup = await this.createCheckpoint(\n `Backup before restore to ${checkpoint.description}`,\n )\n backupId = backup.id\n }\n\n // Dry run mode - just return what would change\n if (options.dryRun) {\n return {\n success: true,\n checkpointId,\n restoredFiles: checkpoint.fileChanges.map(f => f.path),\n backupId,\n }\n }\n\n // Restore files if requested\n if (options.restoreFiles !== false) {\n try {\n for (const change of checkpoint.fileChanges) {\n await this.restoreFileChange(change)\n restoredFiles.push(change.path)\n }\n } catch (error) {\n return {\n success: false,\n checkpointId,\n restoredFiles,\n error: error instanceof Error ? error.message : String(error),\n backupId,\n }\n }\n }\n\n // Restore git state if requested\n let gitRestored = false\n if (options.restoreGit && checkpoint.gitCommit) {\n try {\n await this.restoreGitState(checkpoint.gitCommit)\n gitRestored = true\n } catch (error) {\n return {\n success: false,\n checkpointId,\n restoredFiles,\n gitRestored: false,\n error: `Git restore failed: ${error instanceof Error ? error.message : String(error)}`,\n backupId,\n }\n }\n }\n\n return {\n success: true,\n checkpointId,\n restoredFiles,\n gitRestored,\n backupId,\n }\n }\n\n /**\n * Track a file change\n */\n trackFileChange(change: Omit<FileChange, 'timestamp'>): void {\n this.fileChangeTracker.push({\n ...change,\n timestamp: Date.now(),\n })\n }\n\n /**\n * Get all checkpoints\n */\n getCheckpoints(): Checkpoint[] {\n return Array.from(this.checkpoints.values()).sort(\n (a, b) => b.timestamp - a.timestamp,\n )\n }\n\n /**\n * Get checkpoint by ID\n */\n getCheckpoint(id: string): Checkpoint | undefined {\n return this.checkpoints.get(id)\n }\n\n /**\n * Get the most recent checkpoint\n */\n getLastCheckpoint(): Checkpoint | undefined {\n const checkpoints = this.getCheckpoints()\n return checkpoints[0]\n }\n\n /**\n * Get checkpoints by tag\n */\n getCheckpointsByTag(tag: string): Checkpoint[] {\n return this.getCheckpoints().filter(cp => cp.metadata.tags?.includes(tag))\n }\n\n /**\n * Delete a checkpoint\n */\n deleteCheckpoint(id: string): boolean {\n const checkpoint = this.checkpoints.get(id)\n if (!checkpoint) return false\n\n // Remove from memory\n this.checkpoints.delete(id)\n\n // Remove from disk\n const filePath = join(this.checkpointDir, `${id}.json`)\n if (existsSync(filePath)) {\n unlinkSync(filePath)\n }\n\n return true\n }\n\n /**\n * Get checkpoint history (chain from current to first)\n */\n getCheckpointHistory(checkpointId: string): Checkpoint[] {\n const history: Checkpoint[] = []\n let current = this.checkpoints.get(checkpointId)\n\n while (current) {\n history.push(current)\n current = current.parentId\n ? this.checkpoints.get(current.parentId)\n : undefined\n }\n\n return history\n }\n\n /**\n * Get pending file changes (not yet checkpointed)\n */\n getPendingChanges(): FileChange[] {\n return [...this.fileChangeTracker]\n }\n\n /**\n * Clear pending file changes\n */\n clearPendingChanges(): void {\n this.fileChangeTracker = []\n }\n\n /**\n * Get diff between two checkpoints\n */\n getDiff(\n fromId: string,\n toId: string,\n ): {\n addedFiles: string[]\n modifiedFiles: string[]\n deletedFiles: string[]\n } {\n const fromCheckpoint = this.checkpoints.get(fromId)\n const toCheckpoint = this.checkpoints.get(toId)\n\n if (!fromCheckpoint || !toCheckpoint) {\n return { addedFiles: [], modifiedFiles: [], deletedFiles: [] }\n }\n\n // Collect all changes between checkpoints\n const history = this.getCheckpointHistory(toId)\n const fromIndex = history.findIndex(cp => cp.id === fromId)\n\n if (fromIndex === -1) {\n return { addedFiles: [], modifiedFiles: [], deletedFiles: [] }\n }\n\n const relevantCheckpoints = history.slice(0, fromIndex)\n const allChanges = relevantCheckpoints.flatMap(cp => cp.fileChanges)\n\n const addedFiles: string[] = []\n const modifiedFiles: string[] = []\n const deletedFiles: string[] = []\n\n for (const change of allChanges) {\n switch (change.type) {\n case 'create':\n addedFiles.push(change.path)\n break\n case 'modify':\n modifiedFiles.push(change.path)\n break\n case 'delete':\n deletedFiles.push(change.path)\n break\n }\n }\n\n return {\n addedFiles: [...new Set(addedFiles)],\n modifiedFiles: [...new Set(modifiedFiles)],\n deletedFiles: [...new Set(deletedFiles)],\n }\n }\n\n /**\n * Load checkpoints from disk\n */\n private loadCheckpoints(): void {\n if (!existsSync(this.checkpointDir)) return\n\n try {\n const files = readdirSync(this.checkpointDir)\n\n for (const file of files) {\n if (!file.endsWith('.json')) continue\n\n try {\n const filePath = join(this.checkpointDir, file)\n const content = readFileSync(filePath, 'utf-8')\n const checkpoint = JSON.parse(content) as Checkpoint\n this.checkpoints.set(checkpoint.id, checkpoint)\n } catch {\n // Skip invalid checkpoint files\n }\n }\n } catch {\n // Directory read failed\n }\n }\n\n /**\n * Save checkpoint to disk\n */\n private saveCheckpoint(checkpoint: Checkpoint): void {\n const filePath = join(this.checkpointDir, `${checkpoint.id}.json`)\n writeFileSync(filePath, JSON.stringify(checkpoint, null, 2), 'utf-8')\n }\n\n /**\n * Prune old checkpoints to stay within limit\n */\n private pruneOldCheckpoints(): void {\n const checkpoints = this.getCheckpoints()\n\n if (checkpoints.length <= this.maxCheckpoints) return\n\n // Keep the most recent checkpoints\n const toDelete = checkpoints.slice(this.maxCheckpoints)\n for (const checkpoint of toDelete) {\n this.deleteCheckpoint(checkpoint.id)\n }\n }\n\n /**\n * Restore a file change\n */\n private async restoreFileChange(change: FileChange): Promise<void> {\n const fullPath = join(getCwd(), change.path)\n\n switch (change.type) {\n case 'create':\n // To restore, we need to delete the created file\n if (existsSync(fullPath)) {\n unlinkSync(fullPath)\n }\n break\n\n case 'modify':\n // Restore original content\n if (change.originalContent !== undefined) {\n const dir = dirname(fullPath)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n writeFileSync(fullPath, change.originalContent, 'utf-8')\n }\n break\n\n case 'delete':\n // Restore deleted file\n if (change.originalContent !== undefined) {\n const dir = dirname(fullPath)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n writeFileSync(fullPath, change.originalContent, 'utf-8')\n }\n break\n }\n }\n\n /**\n * Get current git commit hash\n */\n private async getCurrentGitCommit(): Promise<string | undefined> {\n try {\n const result = await execFileNoThrow('git', ['rev-parse', 'HEAD'])\n if (result.code === 0 && result.stdout) {\n return result.stdout.trim()\n }\n return undefined\n } catch {\n return undefined\n }\n }\n\n /**\n * Get current git branch\n */\n private async getCurrentGitBranch(): Promise<string | undefined> {\n try {\n const result = await execFileNoThrow('git', [\n 'rev-parse',\n '--abbrev-ref',\n 'HEAD',\n ])\n if (result.code === 0 && result.stdout) {\n return result.stdout.trim()\n }\n return undefined\n } catch {\n return undefined\n }\n }\n\n /**\n * Restore git state to a specific commit\n */\n private async restoreGitState(commit: string): Promise<void> {\n // Stash any uncommitted changes\n await execFileNoThrow('git', ['stash'])\n\n // Checkout the commit\n const result = await execFileNoThrow('git', ['checkout', commit])\n\n if (result.code !== 0) {\n throw new Error(`Failed to checkout commit ${commit}: ${result.stderr}`)\n }\n }\n}\n\n// Singleton instance\nlet managerInstance: CheckpointManager | null = null\n\n/**\n * Get the checkpoint manager instance\n */\nexport function getCheckpointManager(): CheckpointManager {\n if (!managerInstance) {\n managerInstance = new CheckpointManager()\n }\n return managerInstance\n}\n\n/**\n * Reset the checkpoint manager instance (useful for testing)\n */\nexport function resetCheckpointManager(): void {\n managerInstance = null\n}\n\n/**\n * Create a checkpoint\n */\nexport async function createCheckpoint(\n description: string,\n options?: {\n tags?: string[]\n includeGit?: boolean\n },\n): Promise<Checkpoint> {\n return getCheckpointManager().createCheckpoint(description, options)\n}\n\n/**\n * Restore to a checkpoint\n */\nexport async function restoreCheckpoint(\n checkpointId: string,\n options?: RestoreOptions,\n): Promise<RestoreResult> {\n return getCheckpointManager().restore(checkpointId, options)\n}\n\n/**\n * Track a file change\n */\nexport function trackFileChange(change: Omit<FileChange, 'timestamp'>): void {\n getCheckpointManager().trackFileChange(change)\n}\n\n/**\n * Get all checkpoints\n */\nexport function getCheckpoints(): Checkpoint[] {\n return getCheckpointManager().getCheckpoints()\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|