@within-7/minto 0.0.5-dev.1
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/LICENSE +201 -0
- package/README.md +1097 -0
- package/README.zh-CN.md +1097 -0
- package/cli.js +59 -0
- package/dist/Tool.js +1 -0
- package/dist/Tool.js.map +7 -0
- package/dist/commands/agents.js +2086 -0
- package/dist/commands/agents.js.map +7 -0
- package/dist/commands/approvedTools.js +36 -0
- package/dist/commands/approvedTools.js.map +7 -0
- package/dist/commands/bug.js +21 -0
- package/dist/commands/bug.js.map +7 -0
- package/dist/commands/build.js +74 -0
- package/dist/commands/build.js.map +7 -0
- package/dist/commands/clear.js +37 -0
- package/dist/commands/clear.js.map +7 -0
- package/dist/commands/compact.js +82 -0
- package/dist/commands/compact.js.map +7 -0
- package/dist/commands/compression.js +57 -0
- package/dist/commands/compression.js.map +7 -0
- package/dist/commands/config.js +20 -0
- package/dist/commands/config.js.map +7 -0
- package/dist/commands/cost.js +19 -0
- package/dist/commands/cost.js.map +7 -0
- package/dist/commands/ctx_viz.js +152 -0
- package/dist/commands/ctx_viz.js.map +7 -0
- package/dist/commands/doctor.js +25 -0
- package/dist/commands/doctor.js.map +7 -0
- package/dist/commands/help.js +20 -0
- package/dist/commands/help.js.map +7 -0
- package/dist/commands/init.js +38 -0
- package/dist/commands/init.js.map +7 -0
- package/dist/commands/listen.js +37 -0
- package/dist/commands/listen.js.map +7 -0
- package/dist/commands/login.js +37 -0
- package/dist/commands/login.js.map +7 -0
- package/dist/commands/logout.js +33 -0
- package/dist/commands/logout.js.map +7 -0
- package/dist/commands/mcp-interactive.js +267 -0
- package/dist/commands/mcp-interactive.js.map +7 -0
- package/dist/commands/mcp.js +40 -0
- package/dist/commands/mcp.js.map +7 -0
- package/dist/commands/mcp_refresh.js +40 -0
- package/dist/commands/mcp_refresh.js.map +7 -0
- package/dist/commands/model.js +41 -0
- package/dist/commands/model.js.map +7 -0
- package/dist/commands/modelstatus.js +21 -0
- package/dist/commands/modelstatus.js.map +7 -0
- package/dist/commands/onboarding.js +36 -0
- package/dist/commands/onboarding.js.map +7 -0
- package/dist/commands/plugin/AddMarketplaceForm.js +62 -0
- package/dist/commands/plugin/AddMarketplaceForm.js.map +7 -0
- package/dist/commands/plugin/ConfirmDialog.js +71 -0
- package/dist/commands/plugin/ConfirmDialog.js.map +7 -0
- package/dist/commands/plugin/ErrorView.js +33 -0
- package/dist/commands/plugin/ErrorView.js.map +7 -0
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js +135 -0
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js.map +7 -0
- package/dist/commands/plugin/InstalledPluginsManager.js +99 -0
- package/dist/commands/plugin/InstalledPluginsManager.js.map +7 -0
- package/dist/commands/plugin/LoadingView.js +14 -0
- package/dist/commands/plugin/LoadingView.js.map +7 -0
- package/dist/commands/plugin/MainMenu.js +57 -0
- package/dist/commands/plugin/MainMenu.js.map +7 -0
- package/dist/commands/plugin/MarketplaceManager.js +155 -0
- package/dist/commands/plugin/MarketplaceManager.js.map +7 -0
- package/dist/commands/plugin/MarketplaceSelector.js +119 -0
- package/dist/commands/plugin/MarketplaceSelector.js.map +7 -0
- package/dist/commands/plugin/PlaceholderScreen.js +16 -0
- package/dist/commands/plugin/PlaceholderScreen.js.map +7 -0
- package/dist/commands/plugin/PluginBrowser.js +180 -0
- package/dist/commands/plugin/PluginBrowser.js.map +7 -0
- package/dist/commands/plugin/PluginDetailsInstall.js +152 -0
- package/dist/commands/plugin/PluginDetailsInstall.js.map +7 -0
- package/dist/commands/plugin/PluginDetailsManage.js +200 -0
- package/dist/commands/plugin/PluginDetailsManage.js.map +7 -0
- package/dist/commands/plugin/components.js +16 -0
- package/dist/commands/plugin/components.js.map +7 -0
- package/dist/commands/plugin/example-usage.js +63 -0
- package/dist/commands/plugin/example-usage.js.map +7 -0
- package/dist/commands/plugin/types.js +1 -0
- package/dist/commands/plugin/types.js.map +7 -0
- package/dist/commands/plugin/utils.js +77 -0
- package/dist/commands/plugin/utils.js.map +7 -0
- package/dist/commands/plugin-interactive.js +446 -0
- package/dist/commands/plugin-interactive.js.map +7 -0
- package/dist/commands/plugin.js +523 -0
- package/dist/commands/plugin.js.map +7 -0
- package/dist/commands/pr_comments.js +61 -0
- package/dist/commands/pr_comments.js.map +7 -0
- package/dist/commands/quit.js +16 -0
- package/dist/commands/quit.js.map +7 -0
- package/dist/commands/refreshCommands.js +43 -0
- package/dist/commands/refreshCommands.js.map +7 -0
- package/dist/commands/release-notes.js +30 -0
- package/dist/commands/release-notes.js.map +7 -0
- package/dist/commands/resume.js +35 -0
- package/dist/commands/resume.js.map +7 -0
- package/dist/commands/review.js +51 -0
- package/dist/commands/review.js.map +7 -0
- package/dist/commands/terminalSetup.js +164 -0
- package/dist/commands/terminalSetup.js.map +7 -0
- package/dist/commands.js +104 -0
- package/dist/commands.js.map +7 -0
- package/dist/components/AgentResponseBlock.js +41 -0
- package/dist/components/AgentResponseBlock.js.map +7 -0
- package/dist/components/AgentThinkingBlock.js +40 -0
- package/dist/components/AgentThinkingBlock.js.map +7 -0
- package/dist/components/AsciiLogo.js +19 -0
- package/dist/components/AsciiLogo.js.map +7 -0
- package/dist/components/BackgroundTasksPanel.js +124 -0
- package/dist/components/BackgroundTasksPanel.js.map +7 -0
- package/dist/components/Bug.js +147 -0
- package/dist/components/Bug.js.map +7 -0
- package/dist/components/Config.js +166 -0
- package/dist/components/Config.js.map +7 -0
- package/dist/components/ConsoleOAuthFlow.js +178 -0
- package/dist/components/ConsoleOAuthFlow.js.map +7 -0
- package/dist/components/Cost.js +13 -0
- package/dist/components/Cost.js.map +7 -0
- package/dist/components/CostThresholdDialog.js +38 -0
- package/dist/components/CostThresholdDialog.js.map +7 -0
- package/dist/components/CustomSelect/option-map.js +32 -0
- package/dist/components/CustomSelect/option-map.js.map +7 -0
- package/dist/components/CustomSelect/select-option.js +34 -0
- package/dist/components/CustomSelect/select-option.js.map +7 -0
- package/dist/components/CustomSelect/select.js +64 -0
- package/dist/components/CustomSelect/select.js.map +7 -0
- package/dist/components/CustomSelect/theme.js +1 -0
- package/dist/components/CustomSelect/theme.js.map +7 -0
- package/dist/components/CustomSelect/use-select-state.js +220 -0
- package/dist/components/CustomSelect/use-select-state.js.map +7 -0
- package/dist/components/CustomSelect/use-select.js +21 -0
- package/dist/components/CustomSelect/use-select.js.map +7 -0
- package/dist/components/FallbackToolUseRejectedMessage.js +11 -0
- package/dist/components/FallbackToolUseRejectedMessage.js.map +7 -0
- package/dist/components/FileEditToolUpdatedMessage.js +32 -0
- package/dist/components/FileEditToolUpdatedMessage.js.map +7 -0
- package/dist/components/HeaderBar.js +57 -0
- package/dist/components/HeaderBar.js.map +7 -0
- package/dist/components/Help.js +46 -0
- package/dist/components/Help.js.map +7 -0
- package/dist/components/HighlightedCode.js +30 -0
- package/dist/components/HighlightedCode.js.map +7 -0
- package/dist/components/HistorySearchOverlay.js +48 -0
- package/dist/components/HistorySearchOverlay.js.map +7 -0
- package/dist/components/InteractionRoundBlock.js +56 -0
- package/dist/components/InteractionRoundBlock.js.map +7 -0
- package/dist/components/InvalidConfigDialog.js +83 -0
- package/dist/components/InvalidConfigDialog.js.map +7 -0
- package/dist/components/Link.js +18 -0
- package/dist/components/Link.js.map +7 -0
- package/dist/components/LogSelector.js +50 -0
- package/dist/components/LogSelector.js.map +7 -0
- package/dist/components/Logo.js +96 -0
- package/dist/components/Logo.js.map +7 -0
- package/dist/components/MCPServerApprovalDialog.js +79 -0
- package/dist/components/MCPServerApprovalDialog.js.map +7 -0
- package/dist/components/MCPServerDialogCopy.js +11 -0
- package/dist/components/MCPServerDialogCopy.js.map +7 -0
- package/dist/components/MCPServerMultiselectDialog.js +80 -0
- package/dist/components/MCPServerMultiselectDialog.js.map +7 -0
- package/dist/components/Message.js +146 -0
- package/dist/components/Message.js.map +7 -0
- package/dist/components/MessageResponse.js +9 -0
- package/dist/components/MessageResponse.js.map +7 -0
- package/dist/components/MessageSelector.js +125 -0
- package/dist/components/MessageSelector.js.map +7 -0
- package/dist/components/ModeIndicator.js +38 -0
- package/dist/components/ModeIndicator.js.map +7 -0
- package/dist/components/ModelConfig.js +208 -0
- package/dist/components/ModelConfig.js.map +7 -0
- package/dist/components/ModelListManager.js +140 -0
- package/dist/components/ModelListManager.js.map +7 -0
- package/dist/components/ModelSelector.js +2062 -0
- package/dist/components/ModelSelector.js.map +7 -0
- package/dist/components/ModelStatusDisplay.js +87 -0
- package/dist/components/ModelStatusDisplay.js.map +7 -0
- package/dist/components/Onboarding.js +153 -0
- package/dist/components/Onboarding.js.map +7 -0
- package/dist/components/PressEnterToContinue.js +10 -0
- package/dist/components/PressEnterToContinue.js.map +7 -0
- package/dist/components/ProjectOnboarding.js +99 -0
- package/dist/components/ProjectOnboarding.js.map +7 -0
- package/dist/components/PromptInput.js +755 -0
- package/dist/components/PromptInput.js.map +7 -0
- package/dist/components/QuitSummary.js +81 -0
- package/dist/components/QuitSummary.js.map +7 -0
- package/dist/components/SentryErrorBoundary.js +27 -0
- package/dist/components/SentryErrorBoundary.js.map +7 -0
- package/dist/components/Spinner.js +101 -0
- package/dist/components/Spinner.js.map +7 -0
- package/dist/components/SpinnerSymbol.js +78 -0
- package/dist/components/SpinnerSymbol.js.map +7 -0
- package/dist/components/StreamingBashOutput.js +70 -0
- package/dist/components/StreamingBashOutput.js.map +7 -0
- package/dist/components/StructuredDiff.js +148 -0
- package/dist/components/StructuredDiff.js.map +7 -0
- package/dist/components/SubagentBlock.js +157 -0
- package/dist/components/SubagentBlock.js.map +7 -0
- package/dist/components/SubagentManager.js +65 -0
- package/dist/components/SubagentManager.js.map +7 -0
- package/dist/components/SubagentProgress.js +109 -0
- package/dist/components/SubagentProgress.js.map +7 -0
- package/dist/components/SubagentStatusMarker.js +37 -0
- package/dist/components/SubagentStatusMarker.js.map +7 -0
- package/dist/components/TaskCard.js +170 -0
- package/dist/components/TaskCard.js.map +7 -0
- package/dist/components/TextInput.js +100 -0
- package/dist/components/TextInput.js.map +7 -0
- package/dist/components/TimelineRenderer.js +31 -0
- package/dist/components/TimelineRenderer.js.map +7 -0
- package/dist/components/TodoChangeBlock.js +29 -0
- package/dist/components/TodoChangeBlock.js.map +7 -0
- package/dist/components/TodoChangeLine.js +22 -0
- package/dist/components/TodoChangeLine.js.map +7 -0
- package/dist/components/TodoItem.js +35 -0
- package/dist/components/TodoItem.js.map +7 -0
- package/dist/components/TodoPanel.js +55 -0
- package/dist/components/TodoPanel.js.map +7 -0
- package/dist/components/TokenWarning.js +19 -0
- package/dist/components/TokenWarning.js.map +7 -0
- package/dist/components/ToolExecutionBlock.js +18 -0
- package/dist/components/ToolExecutionBlock.js.map +7 -0
- package/dist/components/ToolUseLoader.js +24 -0
- package/dist/components/ToolUseLoader.js.map +7 -0
- package/dist/components/TrustDialog.js +71 -0
- package/dist/components/TrustDialog.js.map +7 -0
- package/dist/components/UserQueryBlock.js +12 -0
- package/dist/components/UserQueryBlock.js.map +7 -0
- package/dist/components/binary-feedback/BinaryFeedback.js +50 -0
- package/dist/components/binary-feedback/BinaryFeedback.js.map +7 -0
- package/dist/components/binary-feedback/BinaryFeedbackOption.js +94 -0
- package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +7 -0
- package/dist/components/binary-feedback/BinaryFeedbackView.js +139 -0
- package/dist/components/binary-feedback/BinaryFeedbackView.js.map +7 -0
- package/dist/components/binary-feedback/utils.js +108 -0
- package/dist/components/binary-feedback/utils.js.map +7 -0
- package/dist/components/messages/AssistantBashOutputMessage.js +23 -0
- package/dist/components/messages/AssistantBashOutputMessage.js.map +7 -0
- package/dist/components/messages/AssistantLocalCommandOutputMessage.js +36 -0
- package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +7 -0
- package/dist/components/messages/AssistantRedactedThinkingMessage.js +12 -0
- package/dist/components/messages/AssistantRedactedThinkingMessage.js.map +7 -0
- package/dist/components/messages/AssistantTextMessage.js +78 -0
- package/dist/components/messages/AssistantTextMessage.js.map +7 -0
- package/dist/components/messages/AssistantThinkingMessage.js +27 -0
- package/dist/components/messages/AssistantThinkingMessage.js.map +7 -0
- package/dist/components/messages/AssistantToolUseMessage.js +91 -0
- package/dist/components/messages/AssistantToolUseMessage.js.map +7 -0
- package/dist/components/messages/TaskProgressMessage.js +11 -0
- package/dist/components/messages/TaskProgressMessage.js.map +7 -0
- package/dist/components/messages/TaskToolMessage.js +39 -0
- package/dist/components/messages/TaskToolMessage.js.map +7 -0
- package/dist/components/messages/UserBashInputMessage.js +18 -0
- package/dist/components/messages/UserBashInputMessage.js.map +7 -0
- package/dist/components/messages/UserCommandMessage.js +20 -0
- package/dist/components/messages/UserCommandMessage.js.map +7 -0
- package/dist/components/messages/UserKodingInputMessage.js +18 -0
- package/dist/components/messages/UserKodingInputMessage.js.map +7 -0
- package/dist/components/messages/UserPromptMessage.js +20 -0
- package/dist/components/messages/UserPromptMessage.js.map +7 -0
- package/dist/components/messages/UserTextMessage.js +25 -0
- package/dist/components/messages/UserTextMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +10 -0
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js +15 -0
- package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +25 -0
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +47 -0
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +23 -0
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/utils.js +50 -0
- package/dist/components/messages/UserToolResultMessage/utils.js.map +7 -0
- package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js +112 -0
- package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js.map +7 -0
- package/dist/components/permissions/FallbackPermissionRequest.js +131 -0
- package/dist/components/permissions/FallbackPermissionRequest.js.map +7 -0
- package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +159 -0
- package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js.map +7 -0
- package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +58 -0
- package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +7 -0
- package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +153 -0
- package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js.map +7 -0
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +70 -0
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +7 -0
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +212 -0
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +7 -0
- package/dist/components/permissions/PermissionRequest.js +70 -0
- package/dist/components/permissions/PermissionRequest.js.map +7 -0
- package/dist/components/permissions/PermissionRequestTitle.js +52 -0
- package/dist/components/permissions/PermissionRequestTitle.js.map +7 -0
- package/dist/components/permissions/hooks.js +23 -0
- package/dist/components/permissions/hooks.js.map +7 -0
- package/dist/components/permissions/toolUseOptions.js +46 -0
- package/dist/components/permissions/toolUseOptions.js.map +7 -0
- package/dist/components/permissions/utils.js +21 -0
- package/dist/components/permissions/utils.js.map +7 -0
- package/dist/constants/claude-asterisk-ascii-art.js +242 -0
- package/dist/constants/claude-asterisk-ascii-art.js.map +7 -0
- package/dist/constants/colors.js +126 -0
- package/dist/constants/colors.js.map +7 -0
- package/dist/constants/compressionPrompts.js +73 -0
- package/dist/constants/compressionPrompts.js.map +7 -0
- package/dist/constants/figures.js +6 -0
- package/dist/constants/figures.js.map +7 -0
- package/dist/constants/macros.js +11 -0
- package/dist/constants/macros.js.map +7 -0
- package/dist/constants/modelCapabilities.js +154 -0
- package/dist/constants/modelCapabilities.js.map +7 -0
- package/dist/constants/models.js +1034 -0
- package/dist/constants/models.js.map +7 -0
- package/dist/constants/oauth.js +18 -0
- package/dist/constants/oauth.js.map +7 -0
- package/dist/constants/product.js +26 -0
- package/dist/constants/product.js.map +7 -0
- package/dist/constants/prompts.js +168 -0
- package/dist/constants/prompts.js.map +7 -0
- package/dist/constants/releaseNotes.js +9 -0
- package/dist/constants/releaseNotes.js.map +7 -0
- package/dist/constants/symbols.js +50 -0
- package/dist/constants/symbols.js.map +7 -0
- package/dist/context/PermissionContext.js +111 -0
- package/dist/context/PermissionContext.js.map +7 -0
- package/dist/context.js +278 -0
- package/dist/context.js.map +7 -0
- package/dist/cost-tracker.js +76 -0
- package/dist/cost-tracker.js.map +7 -0
- package/dist/entrypoints/cli-wrapper.js +61 -0
- package/dist/entrypoints/cli-wrapper.js.map +7 -0
- package/dist/entrypoints/cli.js +1115 -0
- package/dist/entrypoints/cli.js.map +7 -0
- package/dist/entrypoints/mcp.js +150 -0
- package/dist/entrypoints/mcp.js.map +7 -0
- package/dist/history.js +25 -0
- package/dist/history.js.map +7 -0
- package/dist/hooks/useApiKeyVerification.js +12 -0
- package/dist/hooks/useApiKeyVerification.js.map +7 -0
- package/dist/hooks/useArrowKeyHistory.js +50 -0
- package/dist/hooks/useArrowKeyHistory.js.map +7 -0
- package/dist/hooks/useCanUseTool.js +87 -0
- package/dist/hooks/useCanUseTool.js.map +7 -0
- package/dist/hooks/useCancelRequest.js +28 -0
- package/dist/hooks/useCancelRequest.js.map +7 -0
- package/dist/hooks/useDoublePress.js +31 -0
- package/dist/hooks/useDoublePress.js.map +7 -0
- package/dist/hooks/useExitOnCtrlCD.js +26 -0
- package/dist/hooks/useExitOnCtrlCD.js.map +7 -0
- package/dist/hooks/useHistorySearch.js +62 -0
- package/dist/hooks/useHistorySearch.js.map +7 -0
- package/dist/hooks/useInterval.js +18 -0
- package/dist/hooks/useInterval.js.map +7 -0
- package/dist/hooks/useLogMessages.js +14 -0
- package/dist/hooks/useLogMessages.js.map +7 -0
- package/dist/hooks/useLogStartupTime.js +10 -0
- package/dist/hooks/useLogStartupTime.js.map +7 -0
- package/dist/hooks/useNotifyAfterTimeout.js +42 -0
- package/dist/hooks/useNotifyAfterTimeout.js.map +7 -0
- package/dist/hooks/usePermissionRequestLogging.js +23 -0
- package/dist/hooks/usePermissionRequestLogging.js.map +7 -0
- package/dist/hooks/useTerminalSize.js +38 -0
- package/dist/hooks/useTerminalSize.js.map +7 -0
- package/dist/hooks/useTextInput.js +252 -0
- package/dist/hooks/useTextInput.js.map +7 -0
- package/dist/hooks/useUnifiedCompletion.js +929 -0
- package/dist/hooks/useUnifiedCompletion.js.map +7 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +7 -0
- package/dist/messages.js +33 -0
- package/dist/messages.js.map +7 -0
- package/dist/package.json +4 -0
- package/dist/permissions.js +194 -0
- package/dist/permissions.js.map +7 -0
- package/dist/query.js +499 -0
- package/dist/query.js.map +7 -0
- package/dist/screens/Doctor.js +22 -0
- package/dist/screens/Doctor.js.map +7 -0
- package/dist/screens/LogList.js +55 -0
- package/dist/screens/LogList.js.map +7 -0
- package/dist/screens/REPL.js +671 -0
- package/dist/screens/REPL.js.map +7 -0
- package/dist/screens/ResumeConversation.js +56 -0
- package/dist/screens/ResumeConversation.js.map +7 -0
- package/dist/services/adapters/base.js +29 -0
- package/dist/services/adapters/base.js.map +7 -0
- package/dist/services/adapters/chatCompletions.js +69 -0
- package/dist/services/adapters/chatCompletions.js.map +7 -0
- package/dist/services/adapters/responsesAPI.js +126 -0
- package/dist/services/adapters/responsesAPI.js.map +7 -0
- package/dist/services/claude.js +1573 -0
- package/dist/services/claude.js.map +7 -0
- package/dist/services/compressionService.js +210 -0
- package/dist/services/compressionService.js.map +7 -0
- package/dist/services/customCommands.js +437 -0
- package/dist/services/customCommands.js.map +7 -0
- package/dist/services/fileFreshness.js +275 -0
- package/dist/services/fileFreshness.js.map +7 -0
- package/dist/services/gpt5ConnectionTest.js +248 -0
- package/dist/services/gpt5ConnectionTest.js.map +7 -0
- package/dist/services/hookExecutor.js +276 -0
- package/dist/services/hookExecutor.js.map +7 -0
- package/dist/services/mainAgentCompressor.js +84 -0
- package/dist/services/mainAgentCompressor.js.map +7 -0
- package/dist/services/mcpClient.js +449 -0
- package/dist/services/mcpClient.js.map +7 -0
- package/dist/services/mcpServerApproval.js +55 -0
- package/dist/services/mcpServerApproval.js.map +7 -0
- package/dist/services/mentionProcessor.js +201 -0
- package/dist/services/mentionProcessor.js.map +7 -0
- package/dist/services/modelAdapterFactory.js +47 -0
- package/dist/services/modelAdapterFactory.js.map +7 -0
- package/dist/services/notifier.js +35 -0
- package/dist/services/notifier.js.map +7 -0
- package/dist/services/oauth.js +247 -0
- package/dist/services/oauth.js.map +7 -0
- package/dist/services/openai.js +995 -0
- package/dist/services/openai.js.map +7 -0
- package/dist/services/responseStateManager.js +68 -0
- package/dist/services/responseStateManager.js.map +7 -0
- package/dist/services/sentry.js +9 -0
- package/dist/services/sentry.js.map +7 -0
- package/dist/services/subagentAbortManager.js +95 -0
- package/dist/services/subagentAbortManager.js.map +7 -0
- package/dist/services/subagentCompressor.js +146 -0
- package/dist/services/subagentCompressor.js.map +7 -0
- package/dist/services/systemReminder.js +335 -0
- package/dist/services/systemReminder.js.map +7 -0
- package/dist/services/vcr.js +133 -0
- package/dist/services/vcr.js.map +7 -0
- package/dist/tools/ArchitectTool/ArchitectTool.js +119 -0
- package/dist/tools/ArchitectTool/ArchitectTool.js.map +7 -0
- package/dist/tools/ArchitectTool/prompt.js +18 -0
- package/dist/tools/ArchitectTool/prompt.js.map +7 -0
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +423 -0
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +7 -0
- package/dist/tools/BashOutputTool/BashOutputTool.js +120 -0
- package/dist/tools/BashOutputTool/BashOutputTool.js.map +7 -0
- package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js +11 -0
- package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js.map +7 -0
- package/dist/tools/BashOutputTool/prompt.js +13 -0
- package/dist/tools/BashOutputTool/prompt.js.map +7 -0
- package/dist/tools/BashTool/BashTool.js +209 -0
- package/dist/tools/BashTool/BashTool.js.map +7 -0
- package/dist/tools/BashTool/BashToolResultMessage.js +21 -0
- package/dist/tools/BashTool/BashToolResultMessage.js.map +7 -0
- package/dist/tools/BashTool/OutputLine.js +30 -0
- package/dist/tools/BashTool/OutputLine.js.map +7 -0
- package/dist/tools/BashTool/prompt.js +180 -0
- package/dist/tools/BashTool/prompt.js.map +7 -0
- package/dist/tools/BashTool/utils.js +51 -0
- package/dist/tools/BashTool/utils.js.map +7 -0
- package/dist/tools/FileEditTool/FileEditTool.js +226 -0
- package/dist/tools/FileEditTool/FileEditTool.js.map +7 -0
- package/dist/tools/FileEditTool/prompt.js +54 -0
- package/dist/tools/FileEditTool/prompt.js.map +7 -0
- package/dist/tools/FileEditTool/utils.js +42 -0
- package/dist/tools/FileEditTool/utils.js.map +7 -0
- package/dist/tools/FileReadTool/FileReadTool.js +272 -0
- package/dist/tools/FileReadTool/FileReadTool.js.map +7 -0
- package/dist/tools/FileReadTool/prompt.js +10 -0
- package/dist/tools/FileReadTool/prompt.js.map +7 -0
- package/dist/tools/FileWriteTool/FileWriteTool.js +202 -0
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +7 -0
- package/dist/tools/FileWriteTool/prompt.js +14 -0
- package/dist/tools/FileWriteTool/prompt.js.map +7 -0
- package/dist/tools/GlobTool/GlobTool.js +88 -0
- package/dist/tools/GlobTool/GlobTool.js.map +7 -0
- package/dist/tools/GlobTool/prompt.js +12 -0
- package/dist/tools/GlobTool/prompt.js.map +7 -0
- package/dist/tools/GrepTool/GrepTool.js +107 -0
- package/dist/tools/GrepTool/GrepTool.js.map +7 -0
- package/dist/tools/GrepTool/prompt.js +15 -0
- package/dist/tools/GrepTool/prompt.js.map +7 -0
- package/dist/tools/KillShellTool/KillShellTool.js +92 -0
- package/dist/tools/KillShellTool/KillShellTool.js.map +7 -0
- package/dist/tools/KillShellTool/KillShellToolResultMessage.js +11 -0
- package/dist/tools/KillShellTool/KillShellToolResultMessage.js.map +7 -0
- package/dist/tools/KillShellTool/prompt.js +12 -0
- package/dist/tools/KillShellTool/prompt.js.map +7 -0
- package/dist/tools/MCPTool/MCPTool.js +90 -0
- package/dist/tools/MCPTool/MCPTool.js.map +7 -0
- package/dist/tools/MCPTool/prompt.js +7 -0
- package/dist/tools/MCPTool/prompt.js.map +7 -0
- package/dist/tools/MemoryReadTool/MemoryReadTool.js +103 -0
- package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +7 -0
- package/dist/tools/MemoryReadTool/prompt.js +7 -0
- package/dist/tools/MemoryReadTool/prompt.js.map +7 -0
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +77 -0
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +7 -0
- package/dist/tools/MemoryWriteTool/prompt.js +7 -0
- package/dist/tools/MemoryWriteTool/prompt.js.map +7 -0
- package/dist/tools/MultiEditTool/MultiEditTool.js +301 -0
- package/dist/tools/MultiEditTool/MultiEditTool.js.map +7 -0
- package/dist/tools/MultiEditTool/prompt.js +48 -0
- package/dist/tools/MultiEditTool/prompt.js.map +7 -0
- package/dist/tools/NotebookEditTool/NotebookEditTool.js +238 -0
- package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +7 -0
- package/dist/tools/NotebookEditTool/prompt.js +7 -0
- package/dist/tools/NotebookEditTool/prompt.js.map +7 -0
- package/dist/tools/NotebookReadTool/NotebookReadTool.js +212 -0
- package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +7 -0
- package/dist/tools/NotebookReadTool/prompt.js +7 -0
- package/dist/tools/NotebookReadTool/prompt.js.map +7 -0
- package/dist/tools/SkillTool/SkillTool.js +209 -0
- package/dist/tools/SkillTool/SkillTool.js.map +7 -0
- package/dist/tools/SkillTool/prompt.js +81 -0
- package/dist/tools/SkillTool/prompt.js.map +7 -0
- package/dist/tools/TaskTool/TaskTool.js +381 -0
- package/dist/tools/TaskTool/TaskTool.js.map +7 -0
- package/dist/tools/TaskTool/constants.js +5 -0
- package/dist/tools/TaskTool/constants.js.map +7 -0
- package/dist/tools/TaskTool/prompt.js +111 -0
- package/dist/tools/TaskTool/prompt.js.map +7 -0
- package/dist/tools/ThinkTool/ThinkTool.js +40 -0
- package/dist/tools/ThinkTool/ThinkTool.js.map +7 -0
- package/dist/tools/ThinkTool/prompt.js +16 -0
- package/dist/tools/ThinkTool/prompt.js.map +7 -0
- package/dist/tools/TodoWriteTool/TodoWriteTool.js +243 -0
- package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +7 -0
- package/dist/tools/TodoWriteTool/prompt.js +66 -0
- package/dist/tools/TodoWriteTool/prompt.js.map +7 -0
- package/dist/tools/URLFetcherTool/URLFetcherTool.js +137 -0
- package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +7 -0
- package/dist/tools/URLFetcherTool/cache.js +45 -0
- package/dist/tools/URLFetcherTool/cache.js.map +7 -0
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js +42 -0
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +7 -0
- package/dist/tools/URLFetcherTool/prompt.js +22 -0
- package/dist/tools/URLFetcherTool/prompt.js.map +7 -0
- package/dist/tools/WebSearchTool/WebSearchTool.js +86 -0
- package/dist/tools/WebSearchTool/WebSearchTool.js.map +7 -0
- package/dist/tools/WebSearchTool/prompt.js +17 -0
- package/dist/tools/WebSearchTool/prompt.js.map +7 -0
- package/dist/tools/WebSearchTool/searchProviders.js +48 -0
- package/dist/tools/WebSearchTool/searchProviders.js.map +7 -0
- package/dist/tools/lsTool/lsTool.js +201 -0
- package/dist/tools/lsTool/lsTool.js.map +7 -0
- package/dist/tools/lsTool/prompt.js +5 -0
- package/dist/tools/lsTool/prompt.js.map +7 -0
- package/dist/tools.js +70 -0
- package/dist/tools.js.map +7 -0
- package/dist/types/PermissionMode.js +82 -0
- package/dist/types/PermissionMode.js.map +7 -0
- package/dist/types/RequestContext.js +47 -0
- package/dist/types/RequestContext.js.map +7 -0
- package/dist/types/common.d.js +1 -0
- package/dist/types/common.d.js.map +7 -0
- package/dist/types/conversation.js +1 -0
- package/dist/types/conversation.js.map +7 -0
- package/dist/types/hooks.js +38 -0
- package/dist/types/hooks.js.map +7 -0
- package/dist/types/interactionRound.js +1 -0
- package/dist/types/interactionRound.js.map +7 -0
- package/dist/types/logs.js +1 -0
- package/dist/types/logs.js.map +7 -0
- package/dist/types/marketplace.js +101 -0
- package/dist/types/marketplace.js.map +7 -0
- package/dist/types/modelCapabilities.js +1 -0
- package/dist/types/modelCapabilities.js.map +7 -0
- package/dist/types/notebook.js +1 -0
- package/dist/types/notebook.js.map +7 -0
- package/dist/types/plugin.js +83 -0
- package/dist/types/plugin.js.map +7 -0
- package/dist/types/subagent.js +1 -0
- package/dist/types/subagent.js.map +7 -0
- package/dist/utils/BackgroundShellManager.js +215 -0
- package/dist/utils/BackgroundShellManager.js.map +7 -0
- package/dist/utils/Cursor.js +315 -0
- package/dist/utils/Cursor.js.map +7 -0
- package/dist/utils/PersistentShell.js +371 -0
- package/dist/utils/PersistentShell.js.map +7 -0
- package/dist/utils/advancedFuzzyMatcher.js +206 -0
- package/dist/utils/advancedFuzzyMatcher.js.map +7 -0
- package/dist/utils/agentLoader.js +244 -0
- package/dist/utils/agentLoader.js.map +7 -0
- package/dist/utils/agentStorage.js +59 -0
- package/dist/utils/agentStorage.js.map +7 -0
- package/dist/utils/array.js +7 -0
- package/dist/utils/array.js.map +7 -0
- package/dist/utils/ask.js +77 -0
- package/dist/utils/ask.js.map +7 -0
- package/dist/utils/auth.js +11 -0
- package/dist/utils/auth.js.map +7 -0
- package/dist/utils/autoCompactCore.js +126 -0
- package/dist/utils/autoCompactCore.js.map +7 -0
- package/dist/utils/autoUpdater.js +107 -0
- package/dist/utils/autoUpdater.js.map +7 -0
- package/dist/utils/browser.js +15 -0
- package/dist/utils/browser.js.map +7 -0
- package/dist/utils/cleanup.js +54 -0
- package/dist/utils/cleanup.js.map +7 -0
- package/dist/utils/commands.js +207 -0
- package/dist/utils/commands.js.map +7 -0
- package/dist/utils/commonUnixCommands.js +687 -0
- package/dist/utils/commonUnixCommands.js.map +7 -0
- package/dist/utils/compressionMode.js +47 -0
- package/dist/utils/compressionMode.js.map +7 -0
- package/dist/utils/config.js +651 -0
- package/dist/utils/config.js.map +7 -0
- package/dist/utils/conversationRecovery.js +35 -0
- package/dist/utils/conversationRecovery.js.map +7 -0
- package/dist/utils/debugLogger.js +889 -0
- package/dist/utils/debugLogger.js.map +7 -0
- package/dist/utils/diff.js +32 -0
- package/dist/utils/diff.js.map +7 -0
- package/dist/utils/env.js +44 -0
- package/dist/utils/env.js.map +7 -0
- package/dist/utils/errors.js +23 -0
- package/dist/utils/errors.js.map +7 -0
- package/dist/utils/execFileNoThrow.js +44 -0
- package/dist/utils/execFileNoThrow.js.map +7 -0
- package/dist/utils/expertChatStorage.js +78 -0
- package/dist/utils/expertChatStorage.js.map +7 -0
- package/dist/utils/file.js +282 -0
- package/dist/utils/file.js.map +7 -0
- package/dist/utils/fileRecoveryCore.js +41 -0
- package/dist/utils/fileRecoveryCore.js.map +7 -0
- package/dist/utils/format.js +41 -0
- package/dist/utils/format.js.map +7 -0
- package/dist/utils/fuzzyMatcher.js +252 -0
- package/dist/utils/fuzzyMatcher.js.map +7 -0
- package/dist/utils/generators.js +46 -0
- package/dist/utils/generators.js.map +7 -0
- package/dist/utils/git.js +83 -0
- package/dist/utils/git.js.map +7 -0
- package/dist/utils/hookManager.js +238 -0
- package/dist/utils/hookManager.js.map +7 -0
- package/dist/utils/http.js +7 -0
- package/dist/utils/http.js.map +7 -0
- package/dist/utils/imagePaste.js +29 -0
- package/dist/utils/imagePaste.js.map +7 -0
- package/dist/utils/json.js +16 -0
- package/dist/utils/json.js.map +7 -0
- package/dist/utils/log.js +329 -0
- package/dist/utils/log.js.map +7 -0
- package/dist/utils/markdown.js +187 -0
- package/dist/utils/markdown.js.map +7 -0
- package/dist/utils/marketplaceManager.js +474 -0
- package/dist/utils/marketplaceManager.js.map +7 -0
- package/dist/utils/messageContextManager.js +195 -0
- package/dist/utils/messageContextManager.js.map +7 -0
- package/dist/utils/messages.js +650 -0
- package/dist/utils/messages.js.map +7 -0
- package/dist/utils/model.js +677 -0
- package/dist/utils/model.js.map +7 -0
- package/dist/utils/permissions/filesystem.js +80 -0
- package/dist/utils/permissions/filesystem.js.map +7 -0
- package/dist/utils/pluginInstaller.js +491 -0
- package/dist/utils/pluginInstaller.js.map +7 -0
- package/dist/utils/pluginLoader.js +582 -0
- package/dist/utils/pluginLoader.js.map +7 -0
- package/dist/utils/pluginRegistry.js +111 -0
- package/dist/utils/pluginRegistry.js.map +7 -0
- package/dist/utils/pluginValidator.js +774 -0
- package/dist/utils/pluginValidator.js.map +7 -0
- package/dist/utils/ptyCompat.js +125 -0
- package/dist/utils/ptyCompat.js.map +7 -0
- package/dist/utils/replStateMachine.js +145 -0
- package/dist/utils/replStateMachine.js.map +7 -0
- package/dist/utils/ripgrep.js +131 -0
- package/dist/utils/ripgrep.js.map +7 -0
- package/dist/utils/roundConverter.js +262 -0
- package/dist/utils/roundConverter.js.map +7 -0
- package/dist/utils/secureFile.js +483 -0
- package/dist/utils/secureFile.js.map +7 -0
- package/dist/utils/sessionState.js +22 -0
- package/dist/utils/sessionState.js.map +7 -0
- package/dist/utils/skillLoader.js +79 -0
- package/dist/utils/skillLoader.js.map +7 -0
- package/dist/utils/state.js +24 -0
- package/dist/utils/state.js.map +7 -0
- package/dist/utils/style.js +31 -0
- package/dist/utils/style.js.map +7 -0
- package/dist/utils/terminal.js +47 -0
- package/dist/utils/terminal.js.map +7 -0
- package/dist/utils/theme.js +102 -0
- package/dist/utils/theme.js.map +7 -0
- package/dist/utils/thinking.js +59 -0
- package/dist/utils/thinking.js.map +7 -0
- package/dist/utils/todoChangeCalculator.js +64 -0
- package/dist/utils/todoChangeCalculator.js.map +7 -0
- package/dist/utils/todoStorage.js +291 -0
- package/dist/utils/todoStorage.js.map +7 -0
- package/dist/utils/tokens.js +30 -0
- package/dist/utils/tokens.js.map +7 -0
- package/dist/utils/toolExecutionController.js +109 -0
- package/dist/utils/toolExecutionController.js.map +7 -0
- package/dist/utils/unaryLogging.js +6 -0
- package/dist/utils/unaryLogging.js.map +7 -0
- package/dist/utils/user.js +40 -0
- package/dist/utils/user.js.map +7 -0
- package/dist/utils/validate.js +132 -0
- package/dist/utils/validate.js.map +7 -0
- package/dist/version.js +7 -0
- package/dist/version.js.map +7 -0
- package/dist/yoga.wasm +0 -0
- package/package.json +113 -0
- package/scripts/postinstall.js +18 -0
- package/yoga.wasm +0 -0
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
import { spawn } from "child_process";
|
|
2
|
+
import {
|
|
3
|
+
HookEvent
|
|
4
|
+
} from "../types/hooks.js";
|
|
5
|
+
import { getCwd } from "../utils/state.js";
|
|
6
|
+
import { logError } from "../utils/log.js";
|
|
7
|
+
const logInfo = (msg) => {
|
|
8
|
+
if (process.env.DEBUG) console.log(`[INFO] ${msg}`);
|
|
9
|
+
};
|
|
10
|
+
const logDebug = (msg, ...args) => {
|
|
11
|
+
if (process.env.DEBUG) console.log(`[DEBUG] ${msg}`, ...args);
|
|
12
|
+
};
|
|
13
|
+
async function executeHook(hook, input, options) {
|
|
14
|
+
if (hook.config.type !== "command" || !hook.config.command) {
|
|
15
|
+
return {
|
|
16
|
+
success: false,
|
|
17
|
+
error: `Hook type "${hook.config.type}" not yet implemented`
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const timeout = hook.config.timeout || options.timeout || 3e4;
|
|
21
|
+
try {
|
|
22
|
+
logDebug(`Executing hook: ${hook.name}`);
|
|
23
|
+
logDebug(`Command: ${hook.config.command}`);
|
|
24
|
+
const result = await executeBashCommand(
|
|
25
|
+
hook.config.command,
|
|
26
|
+
input,
|
|
27
|
+
{
|
|
28
|
+
...options,
|
|
29
|
+
timeout,
|
|
30
|
+
pluginRoot: options.pluginRoot
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
if (result.timedOut) {
|
|
34
|
+
logError(`Hook ${hook.name} timed out after ${timeout}ms`);
|
|
35
|
+
return {
|
|
36
|
+
success: false,
|
|
37
|
+
timedOut: true,
|
|
38
|
+
error: `Hook execution timed out after ${timeout}ms`
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
if (result.error) {
|
|
42
|
+
logError(`Hook ${hook.name} failed: ${result.error}`);
|
|
43
|
+
return {
|
|
44
|
+
success: false,
|
|
45
|
+
error: result.error
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const output = parseHookOutput(result.stdout);
|
|
49
|
+
if (!output) {
|
|
50
|
+
return {
|
|
51
|
+
success: true
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
logDebug(`Hook ${hook.name} output:`, output);
|
|
55
|
+
return {
|
|
56
|
+
success: true,
|
|
57
|
+
decision: output.decision,
|
|
58
|
+
output
|
|
59
|
+
};
|
|
60
|
+
} catch (error) {
|
|
61
|
+
logError(`Hook ${hook.name} execution error:`, error);
|
|
62
|
+
return {
|
|
63
|
+
success: false,
|
|
64
|
+
error: error instanceof Error ? error.message : String(error)
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async function executeBashCommand(command, input, options) {
|
|
69
|
+
return new Promise((resolve) => {
|
|
70
|
+
const env = {
|
|
71
|
+
...process.env,
|
|
72
|
+
CLAUDE_PLUGIN_ROOT: options.pluginRoot,
|
|
73
|
+
CLAUDE_SESSION_ID: options.sessionId,
|
|
74
|
+
CLAUDE_CWD: getCwd(),
|
|
75
|
+
CLAUDE_TRANSCRIPT_PATH: options.transcriptPath || ""
|
|
76
|
+
};
|
|
77
|
+
const child = spawn("bash", ["-c", command], {
|
|
78
|
+
env,
|
|
79
|
+
cwd: getCwd()
|
|
80
|
+
});
|
|
81
|
+
let stdout = "";
|
|
82
|
+
let stderr = "";
|
|
83
|
+
let timedOut = false;
|
|
84
|
+
const timer = setTimeout(() => {
|
|
85
|
+
timedOut = true;
|
|
86
|
+
child.kill("SIGTERM");
|
|
87
|
+
setTimeout(() => {
|
|
88
|
+
if (!child.killed) {
|
|
89
|
+
child.kill("SIGKILL");
|
|
90
|
+
}
|
|
91
|
+
}, 1e3);
|
|
92
|
+
}, options.timeout);
|
|
93
|
+
child.stdout?.on("data", (data) => {
|
|
94
|
+
stdout += data.toString();
|
|
95
|
+
});
|
|
96
|
+
child.stderr?.on("data", (data) => {
|
|
97
|
+
stderr += data.toString();
|
|
98
|
+
});
|
|
99
|
+
child.on("close", (code) => {
|
|
100
|
+
clearTimeout(timer);
|
|
101
|
+
if (timedOut) {
|
|
102
|
+
resolve({
|
|
103
|
+
stdout: "",
|
|
104
|
+
stderr: "",
|
|
105
|
+
timedOut: true
|
|
106
|
+
});
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
if (code !== 0 && code !== null) {
|
|
110
|
+
resolve({
|
|
111
|
+
stdout,
|
|
112
|
+
stderr,
|
|
113
|
+
error: `Command exited with code ${code}: ${stderr}`
|
|
114
|
+
});
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
resolve({
|
|
118
|
+
stdout,
|
|
119
|
+
stderr
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
child.on("error", (error) => {
|
|
123
|
+
clearTimeout(timer);
|
|
124
|
+
resolve({
|
|
125
|
+
stdout: "",
|
|
126
|
+
stderr: "",
|
|
127
|
+
error: `Failed to spawn process: ${error.message}`
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
try {
|
|
131
|
+
if (child.stdin) {
|
|
132
|
+
child.stdin.write(JSON.stringify(input, null, 2));
|
|
133
|
+
child.stdin.end();
|
|
134
|
+
}
|
|
135
|
+
} catch (error) {
|
|
136
|
+
clearTimeout(timer);
|
|
137
|
+
child.kill();
|
|
138
|
+
resolve({
|
|
139
|
+
stdout: "",
|
|
140
|
+
stderr: "",
|
|
141
|
+
error: `Failed to write to stdin: ${error instanceof Error ? error.message : String(error)}`
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
function parseHookOutput(stdout) {
|
|
147
|
+
if (!stdout.trim()) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
try {
|
|
151
|
+
const jsonMatch = stdout.match(/\{[\s\S]*\}/);
|
|
152
|
+
if (!jsonMatch) {
|
|
153
|
+
logDebug("No JSON found in hook output");
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
const output = JSON.parse(jsonMatch[0]);
|
|
157
|
+
if (output.decision) {
|
|
158
|
+
if (!["approve", "block", "ask"].includes(output.decision)) {
|
|
159
|
+
logError(`Invalid hook decision: ${output.decision}`);
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return output;
|
|
164
|
+
} catch (error) {
|
|
165
|
+
logError("Failed to parse hook output JSON:", error);
|
|
166
|
+
logDebug("Raw output:", stdout);
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
async function executeHooksForEvent(event, hooks, input, options) {
|
|
171
|
+
const matchingHooks = hooks.filter((hook) => hook.event === event);
|
|
172
|
+
if (matchingHooks.length === 0) {
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
logInfo(`Executing ${matchingHooks.length} hook(s) for event: ${event}`);
|
|
176
|
+
const results = await Promise.all(
|
|
177
|
+
matchingHooks.map((hook) => executeHook(hook, input, options))
|
|
178
|
+
);
|
|
179
|
+
return results;
|
|
180
|
+
}
|
|
181
|
+
function processHookDecisions(results) {
|
|
182
|
+
const blockedResult = results.find(
|
|
183
|
+
(r) => r.success && r.decision === "block"
|
|
184
|
+
);
|
|
185
|
+
if (blockedResult) {
|
|
186
|
+
return {
|
|
187
|
+
shouldContinue: false,
|
|
188
|
+
shouldAskUser: false,
|
|
189
|
+
reason: blockedResult.output?.reason || "Blocked by hook"
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
const askResult = results.find((r) => r.success && r.decision === "ask");
|
|
193
|
+
if (askResult) {
|
|
194
|
+
return {
|
|
195
|
+
shouldContinue: false,
|
|
196
|
+
shouldAskUser: true,
|
|
197
|
+
reason: askResult.output?.reason || "Hook requested user approval"
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
const failedResult = results.find((r) => !r.success);
|
|
201
|
+
if (failedResult) {
|
|
202
|
+
return {
|
|
203
|
+
shouldContinue: false,
|
|
204
|
+
shouldAskUser: true,
|
|
205
|
+
reason: `Hook execution failed: ${failedResult.error}`
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
return {
|
|
209
|
+
shouldContinue: true,
|
|
210
|
+
shouldAskUser: false
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
function createPreToolUseInput(sessionId, transcriptPath, toolName, toolInput) {
|
|
214
|
+
return {
|
|
215
|
+
hook_event_name: HookEvent.PreToolUse,
|
|
216
|
+
session_id: sessionId,
|
|
217
|
+
transcript_path: transcriptPath,
|
|
218
|
+
cwd: getCwd(),
|
|
219
|
+
permission_mode: "default",
|
|
220
|
+
tool_name: toolName,
|
|
221
|
+
tool_input: toolInput
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
function createPostToolUseInput(sessionId, transcriptPath, toolName, toolInput, toolOutput) {
|
|
225
|
+
return {
|
|
226
|
+
hook_event_name: HookEvent.PostToolUse,
|
|
227
|
+
session_id: sessionId,
|
|
228
|
+
transcript_path: transcriptPath,
|
|
229
|
+
cwd: getCwd(),
|
|
230
|
+
permission_mode: "default",
|
|
231
|
+
tool_name: toolName,
|
|
232
|
+
tool_input: toolInput,
|
|
233
|
+
tool_output: toolOutput
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
function createUserPromptSubmitInput(sessionId, transcriptPath, userPrompt) {
|
|
237
|
+
return {
|
|
238
|
+
hook_event_name: HookEvent.UserPromptSubmit,
|
|
239
|
+
session_id: sessionId,
|
|
240
|
+
transcript_path: transcriptPath,
|
|
241
|
+
cwd: getCwd(),
|
|
242
|
+
permission_mode: "default",
|
|
243
|
+
user_prompt: userPrompt
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
function createSessionStartInput(sessionId, transcriptPath) {
|
|
247
|
+
return {
|
|
248
|
+
hook_event_name: HookEvent.SessionStart,
|
|
249
|
+
session_id: sessionId,
|
|
250
|
+
transcript_path: transcriptPath,
|
|
251
|
+
cwd: getCwd(),
|
|
252
|
+
source: "startup",
|
|
253
|
+
permission_mode: "default"
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function createSessionEndInput(sessionId, transcriptPath, reason) {
|
|
257
|
+
return {
|
|
258
|
+
hook_event_name: HookEvent.SessionEnd,
|
|
259
|
+
session_id: sessionId,
|
|
260
|
+
transcript_path: transcriptPath,
|
|
261
|
+
cwd: getCwd(),
|
|
262
|
+
permission_mode: "default",
|
|
263
|
+
reason
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
export {
|
|
267
|
+
createPostToolUseInput,
|
|
268
|
+
createPreToolUseInput,
|
|
269
|
+
createSessionEndInput,
|
|
270
|
+
createSessionStartInput,
|
|
271
|
+
createUserPromptSubmitInput,
|
|
272
|
+
executeHook,
|
|
273
|
+
executeHooksForEvent,
|
|
274
|
+
processHookDecisions
|
|
275
|
+
};
|
|
276
|
+
//# sourceMappingURL=hookExecutor.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/services/hookExecutor.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Hook Execution Engine\n *\n * Executes plugin hooks with bash command execution, JSON I/O,\n * and decision processing (approve/block/ask).\n *\n * Fully compatible with Claude Code CLI hooks specification.\n */\n\nimport { spawn } from 'child_process'\nimport { homedir } from 'os'\nimport { join } from 'path'\nimport {\n HookEvent,\n HookInput,\n HookOutput,\n HookDecision,\n PreToolUseInput,\n PostToolUseInput,\n UserPromptSubmitInput,\n SessionStartInput,\n SessionEndInput,\n} from '../types/hooks'\nimport { LoadedHook } from '../types/plugin'\nimport { getCwd } from '../utils/state'\nimport { logError } from '../utils/log'\n\n// Simple logging helpers\nconst logInfo = (msg: string) => {\n // Only log in debug mode to reduce noise\n if (process.env.DEBUG) console.log(`[INFO] ${msg}`)\n}\nconst logDebug = (msg: string, ...args: any[]) => {\n if (process.env.DEBUG) console.log(`[DEBUG] ${msg}`, ...args)\n}\n\n/**\n * Hook execution result\n */\nexport interface HookExecutionResult {\n success: boolean\n decision?: HookDecision\n output?: HookOutput\n error?: string\n timedOut?: boolean\n}\n\n/**\n * Hook execution options\n */\nexport interface HookExecutionOptions {\n timeout?: number\n sessionId: string\n transcriptPath?: string\n pluginRoot: string\n}\n\n/**\n * Execute a hook with bash command\n */\nexport async function executeHook(\n hook: LoadedHook,\n input: HookInput,\n options: HookExecutionOptions,\n): Promise<HookExecutionResult> {\n // Only execute command-type hooks\n if (hook.config.type !== 'command' || !hook.config.command) {\n return {\n success: false,\n error: `Hook type \"${hook.config.type}\" not yet implemented`,\n }\n }\n\n const timeout = hook.config.timeout || options.timeout || 30000 // 30 seconds default\n\n try {\n logDebug(`Executing hook: ${hook.name}`)\n logDebug(`Command: ${hook.config.command}`)\n\n // Execute bash command with JSON input via stdin\n const result = await executeBashCommand(\n hook.config.command,\n input,\n {\n ...options,\n timeout,\n pluginRoot: options.pluginRoot,\n },\n )\n\n if (result.timedOut) {\n logError(`Hook ${hook.name} timed out after ${timeout}ms`)\n return {\n success: false,\n timedOut: true,\n error: `Hook execution timed out after ${timeout}ms`,\n }\n }\n\n if (result.error) {\n logError(`Hook ${hook.name} failed: ${result.error}`)\n return {\n success: false,\n error: result.error,\n }\n }\n\n // Parse JSON output\n const output = parseHookOutput(result.stdout)\n\n if (!output) {\n // No output means hook executed successfully but didn't return decisions\n return {\n success: true,\n }\n }\n\n logDebug(`Hook ${hook.name} output:`, output)\n\n return {\n success: true,\n decision: output.decision,\n output,\n }\n } catch (error) {\n logError(`Hook ${hook.name} execution error:`, error)\n return {\n success: false,\n error: error instanceof Error ? error.message : String(error),\n }\n }\n}\n\n/**\n * Execute bash command with JSON stdin/stdout\n */\nasync function executeBashCommand(\n command: string,\n input: HookInput,\n options: {\n timeout: number\n sessionId: string\n transcriptPath?: string\n pluginRoot: string\n },\n): Promise<{\n stdout: string\n stderr: string\n error?: string\n timedOut?: boolean\n}> {\n return new Promise((resolve) => {\n // Prepare environment variables\n const env = {\n ...process.env,\n CLAUDE_PLUGIN_ROOT: options.pluginRoot,\n CLAUDE_SESSION_ID: options.sessionId,\n CLAUDE_CWD: getCwd(),\n CLAUDE_TRANSCRIPT_PATH: options.transcriptPath || '',\n }\n\n // Spawn bash process\n const child = spawn('bash', ['-c', command], {\n env,\n cwd: getCwd(),\n })\n\n let stdout = ''\n let stderr = ''\n let timedOut = false\n\n // Set timeout\n const timer = setTimeout(() => {\n timedOut = true\n child.kill('SIGTERM')\n setTimeout(() => {\n if (!child.killed) {\n child.kill('SIGKILL')\n }\n }, 1000)\n }, options.timeout)\n\n // Collect stdout\n child.stdout?.on('data', (data) => {\n stdout += data.toString()\n })\n\n // Collect stderr\n child.stderr?.on('data', (data) => {\n stderr += data.toString()\n })\n\n // Handle completion\n child.on('close', (code) => {\n clearTimeout(timer)\n\n if (timedOut) {\n resolve({\n stdout: '',\n stderr: '',\n timedOut: true,\n })\n return\n }\n\n if (code !== 0 && code !== null) {\n resolve({\n stdout,\n stderr,\n error: `Command exited with code ${code}: ${stderr}`,\n })\n return\n }\n\n resolve({\n stdout,\n stderr,\n })\n })\n\n // Handle errors\n child.on('error', (error) => {\n clearTimeout(timer)\n resolve({\n stdout: '',\n stderr: '',\n error: `Failed to spawn process: ${error.message}`,\n })\n })\n\n // Send JSON input via stdin\n try {\n if (child.stdin) {\n child.stdin.write(JSON.stringify(input, null, 2))\n child.stdin.end()\n }\n } catch (error) {\n clearTimeout(timer)\n child.kill()\n resolve({\n stdout: '',\n stderr: '',\n error: `Failed to write to stdin: ${error instanceof Error ? error.message : String(error)}`,\n })\n }\n })\n}\n\n/**\n * Parse hook output JSON\n */\nfunction parseHookOutput(stdout: string): HookOutput | null {\n if (!stdout.trim()) {\n return null\n }\n\n try {\n // Try to extract JSON from output (hook might print other things)\n const jsonMatch = stdout.match(/\\{[\\s\\S]*\\}/)\n if (!jsonMatch) {\n logDebug('No JSON found in hook output')\n return null\n }\n\n const output = JSON.parse(jsonMatch[0]) as HookOutput\n\n // Validate decision if present\n if (output.decision) {\n if (!['approve', 'block', 'ask'].includes(output.decision)) {\n logError(`Invalid hook decision: ${output.decision}`)\n return null\n }\n }\n\n return output\n } catch (error) {\n logError('Failed to parse hook output JSON:', error)\n logDebug('Raw output:', stdout)\n return null\n }\n}\n\n/**\n * Execute all matching hooks for an event\n */\nexport async function executeHooksForEvent(\n event: HookEvent,\n hooks: LoadedHook[],\n input: HookInput,\n options: HookExecutionOptions,\n): Promise<HookExecutionResult[]> {\n // Filter hooks for this event\n const matchingHooks = hooks.filter((hook) => hook.event === event)\n\n if (matchingHooks.length === 0) {\n return []\n }\n\n logInfo(`Executing ${matchingHooks.length} hook(s) for event: ${event}`)\n\n // Execute all matching hooks in parallel (Claude Code behavior)\n const results = await Promise.all(\n matchingHooks.map((hook) => executeHook(hook, input, options)),\n )\n\n return results\n}\n\n/**\n * Process hook decisions to determine final action\n */\nexport function processHookDecisions(\n results: HookExecutionResult[],\n): {\n shouldContinue: boolean\n shouldAskUser: boolean\n reason?: string\n} {\n // If any hook says \"block\", we block\n const blockedResult = results.find(\n (r) => r.success && r.decision === 'block',\n )\n if (blockedResult) {\n return {\n shouldContinue: false,\n shouldAskUser: false,\n reason: blockedResult.output?.reason || 'Blocked by hook',\n }\n }\n\n // If any hook says \"ask\", we ask the user\n const askResult = results.find((r) => r.success && r.decision === 'ask')\n if (askResult) {\n return {\n shouldContinue: false,\n shouldAskUser: true,\n reason: askResult.output?.reason || 'Hook requested user approval',\n }\n }\n\n // If any hook failed, we ask the user (fail-safe)\n const failedResult = results.find((r) => !r.success)\n if (failedResult) {\n return {\n shouldContinue: false,\n shouldAskUser: true,\n reason: `Hook execution failed: ${failedResult.error}`,\n }\n }\n\n // All hooks approved or had no decision\n return {\n shouldContinue: true,\n shouldAskUser: false,\n }\n}\n\n/**\n * Create hook input for PreToolUse event\n */\nexport function createPreToolUseInput(\n sessionId: string,\n transcriptPath: string,\n toolName: string,\n toolInput: Record<string, unknown>,\n): PreToolUseInput {\n return {\n hook_event_name: HookEvent.PreToolUse,\n session_id: sessionId,\n transcript_path: transcriptPath,\n cwd: getCwd(),\n permission_mode: 'default',\n tool_name: toolName,\n tool_input: toolInput,\n }\n}\n\n/**\n * Create hook input for PostToolUse event\n */\nexport function createPostToolUseInput(\n sessionId: string,\n transcriptPath: string,\n toolName: string,\n toolInput: Record<string, unknown>,\n toolOutput: Record<string, unknown>,\n): PostToolUseInput {\n return {\n hook_event_name: HookEvent.PostToolUse,\n session_id: sessionId,\n transcript_path: transcriptPath,\n cwd: getCwd(),\n permission_mode: 'default',\n tool_name: toolName,\n tool_input: toolInput,\n tool_output: toolOutput,\n }\n}\n\n/**\n * Create hook input for UserPromptSubmit event\n */\nexport function createUserPromptSubmitInput(\n sessionId: string,\n transcriptPath: string,\n userPrompt: string,\n): UserPromptSubmitInput {\n return {\n hook_event_name: HookEvent.UserPromptSubmit,\n session_id: sessionId,\n transcript_path: transcriptPath,\n cwd: getCwd(),\n permission_mode: 'default',\n user_prompt: userPrompt,\n }\n}\n\n/**\n * Create hook input for SessionStart event\n */\nexport function createSessionStartInput(\n sessionId: string,\n transcriptPath: string,\n): SessionStartInput {\n return {\n hook_event_name: HookEvent.SessionStart,\n session_id: sessionId,\n transcript_path: transcriptPath,\n cwd: getCwd(),\n source: 'startup' as const,\n permission_mode: 'default',\n }\n}\n\n/**\n * Create hook input for SessionEnd event\n */\nexport function createSessionEndInput(\n sessionId: string,\n transcriptPath: string,\n reason: 'clear' | 'logout' | 'prompt_input_exit' | 'other',\n): SessionEndInput {\n return {\n hook_event_name: HookEvent.SessionEnd,\n session_id: sessionId,\n transcript_path: transcriptPath,\n cwd: getCwd(),\n permission_mode: 'default',\n reason: reason,\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { getMessagesGetter, getMessagesSetter } from "../messages.js";
|
|
2
|
+
import { getContext } from "../context.js";
|
|
3
|
+
import { getCodeStyle } from "../utils/style.js";
|
|
4
|
+
import { resetFileFreshnessSession } from "./fileFreshness.js";
|
|
5
|
+
import { resetReminderSession } from "./systemReminder.js";
|
|
6
|
+
import { CompressionService } from "./compressionService.js";
|
|
7
|
+
import { getModelContextLength } from "../utils/model.js";
|
|
8
|
+
class MainAgentCompressor {
|
|
9
|
+
/**
|
|
10
|
+
* Execute main agent compression (/compact command)
|
|
11
|
+
*
|
|
12
|
+
* Features:
|
|
13
|
+
* - Operates on global state (messages, cache)
|
|
14
|
+
* - Recovers recently accessed files
|
|
15
|
+
* - Clears all caches
|
|
16
|
+
*
|
|
17
|
+
* @param tools - Available tools list
|
|
18
|
+
* @param abortSignal - Abort signal for cancellation
|
|
19
|
+
* @param options - Optional compression configuration
|
|
20
|
+
* @throws Error if compression was not triggered
|
|
21
|
+
*/
|
|
22
|
+
static async compress(tools, abortSignal, options) {
|
|
23
|
+
const messages = getMessagesGetter()();
|
|
24
|
+
const result = await CompressionService.compress(
|
|
25
|
+
messages,
|
|
26
|
+
tools,
|
|
27
|
+
abortSignal,
|
|
28
|
+
{
|
|
29
|
+
contextLength: getModelContextLength("main"),
|
|
30
|
+
// Use main model's context length
|
|
31
|
+
recoverFiles: true,
|
|
32
|
+
// Main agent needs file recovery
|
|
33
|
+
maxRecoveredFiles: 5,
|
|
34
|
+
...options
|
|
35
|
+
}
|
|
36
|
+
);
|
|
37
|
+
if (!result.wasCompacted) {
|
|
38
|
+
throw new Error("Compression was not triggered");
|
|
39
|
+
}
|
|
40
|
+
getMessagesSetter()(result.compressedMessages);
|
|
41
|
+
getContext.cache.clear?.();
|
|
42
|
+
getCodeStyle.cache.clear?.();
|
|
43
|
+
resetFileFreshnessSession();
|
|
44
|
+
resetReminderSession();
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Auto-compress check (called before each query)
|
|
48
|
+
*
|
|
49
|
+
* Note: Main agent's auto-compression operates on global state
|
|
50
|
+
*
|
|
51
|
+
* @param messages - Current conversation messages
|
|
52
|
+
* @param tools - Available tools list
|
|
53
|
+
* @param abortSignal - Abort signal for cancellation
|
|
54
|
+
* @param options - Optional compression configuration
|
|
55
|
+
* @returns Updated messages and compression status
|
|
56
|
+
*/
|
|
57
|
+
static async checkAndCompress(messages, tools, abortSignal, options) {
|
|
58
|
+
const result = await CompressionService.compress(
|
|
59
|
+
messages,
|
|
60
|
+
tools,
|
|
61
|
+
abortSignal,
|
|
62
|
+
{
|
|
63
|
+
contextLength: getModelContextLength("main"),
|
|
64
|
+
recoverFiles: true,
|
|
65
|
+
maxRecoveredFiles: 5,
|
|
66
|
+
...options
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
if (result.wasCompacted) {
|
|
70
|
+
getContext.cache.clear?.();
|
|
71
|
+
getCodeStyle.cache.clear?.();
|
|
72
|
+
resetFileFreshnessSession();
|
|
73
|
+
resetReminderSession();
|
|
74
|
+
}
|
|
75
|
+
return {
|
|
76
|
+
messages: result.compressedMessages,
|
|
77
|
+
wasCompacted: result.wasCompacted
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export {
|
|
82
|
+
MainAgentCompressor
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=mainAgentCompressor.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/services/mainAgentCompressor.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Main Agent Compressor\n *\n * Responsibilities:\n * - Handle /compact command triggered manual compression\n * - Manage main agent's global state (messages, context cache, etc.)\n * - Execute complete cleanup workflow (file recovery, cache cleanup, etc.)\n *\n * Key Characteristics:\n * - Only main agent operates on global state\n * - Supports file recovery for maintaining development context\n * - Clears all caches (context, codeStyle, fileFreshness, reminder)\n */\n\nimport { Message } from '@query'\nimport { getMessagesGetter, getMessagesSetter } from '@messages'\nimport { getContext } from '@context'\nimport { getCodeStyle } from '@utils/style'\nimport { resetFileFreshnessSession } from '@services/fileFreshness'\nimport { resetReminderSession } from '@services/systemReminder'\nimport { CompressionService, CompressionOptions } from './compressionService'\nimport { getModelContextLength } from '@utils/model'\n\n/**\n * Main agent compressor - handles global state operations\n *\n * This class is specifically designed for the main agent, which:\n * - Operates on global message state (REPL.tsx messages)\n * - Manages all system caches\n * - Recovers files during compression\n * - Resets session tracking\n */\nexport class MainAgentCompressor {\n /**\n * Execute main agent compression (/compact command)\n *\n * Features:\n * - Operates on global state (messages, cache)\n * - Recovers recently accessed files\n * - Clears all caches\n *\n * @param tools - Available tools list\n * @param abortSignal - Abort signal for cancellation\n * @param options - Optional compression configuration\n * @throws Error if compression was not triggered\n */\n static async compress(\n tools: any[],\n abortSignal: AbortSignal,\n options?: Partial<CompressionOptions>,\n ): Promise<void> {\n const messages = getMessagesGetter()()\n\n // 1. Use compression service to generate summary\n const result = await CompressionService.compress(\n messages,\n tools,\n abortSignal,\n {\n contextLength: getModelContextLength('main'), // Use main model's context length\n recoverFiles: true, // Main agent needs file recovery\n maxRecoveredFiles: 5,\n ...options,\n },\n )\n\n if (!result.wasCompacted) {\n throw new Error('Compression was not triggered')\n }\n\n // 2. Update global message state (only main agent)\n getMessagesSetter()(result.compressedMessages)\n\n // 3. Clear global caches (only main agent)\n getContext.cache.clear?.()\n getCodeStyle.cache.clear?.()\n resetFileFreshnessSession()\n resetReminderSession()\n }\n\n /**\n * Auto-compress check (called before each query)\n *\n * Note: Main agent's auto-compression operates on global state\n *\n * @param messages - Current conversation messages\n * @param tools - Available tools list\n * @param abortSignal - Abort signal for cancellation\n * @param options - Optional compression configuration\n * @returns Updated messages and compression status\n */\n static async checkAndCompress(\n messages: Message[],\n tools: any[],\n abortSignal: AbortSignal,\n options?: Partial<CompressionOptions>,\n ): Promise<{ messages: Message[]; wasCompacted: boolean }> {\n const result = await CompressionService.compress(\n messages,\n tools,\n abortSignal,\n {\n contextLength: getModelContextLength('main'),\n recoverFiles: true,\n maxRecoveredFiles: 5,\n ...options,\n },\n )\n\n if (result.wasCompacted) {\n // Main agent needs to clear global state\n getContext.cache.clear?.()\n getCodeStyle.cache.clear?.()\n resetFileFreshnessSession()\n resetReminderSession()\n // Note: Don't clear messages here, caller will use returned array\n }\n\n return {\n messages: result.compressedMessages,\n wasCompacted: result.wasCompacted,\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AAeA,SAAS,mBAAmB,yBAAyB;AACrD,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAC7B,SAAS,iCAAiC;AAC1C,SAAS,4BAA4B;AACrC,SAAS,0BAA8C;AACvD,SAAS,6BAA6B;AAW/B,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAc/B,aAAa,SACX,OACA,aACA,SACe;AACf,UAAM,WAAW,kBAAkB,EAAE;AAGrC,UAAM,SAAS,MAAM,mBAAmB;AAAA,MACtC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,eAAe,sBAAsB,MAAM;AAAA;AAAA,QAC3C,cAAc;AAAA;AAAA,QACd,mBAAmB;AAAA,QACnB,GAAG;AAAA,MACL;AAAA,IACF;AAEA,QAAI,CAAC,OAAO,cAAc;AACxB,YAAM,IAAI,MAAM,+BAA+B;AAAA,IACjD;AAGA,sBAAkB,EAAE,OAAO,kBAAkB;AAG7C,eAAW,MAAM,QAAQ;AACzB,iBAAa,MAAM,QAAQ;AAC3B,8BAA0B;AAC1B,yBAAqB;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,aAAa,iBACX,UACA,OACA,aACA,SACyD;AACzD,UAAM,SAAS,MAAM,mBAAmB;AAAA,MACtC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,QACE,eAAe,sBAAsB,MAAM;AAAA,QAC3C,cAAc;AAAA,QACd,mBAAmB;AAAA,QACnB,GAAG;AAAA,MACL;AAAA,IACF;AAEA,QAAI,OAAO,cAAc;AAEvB,iBAAW,MAAM,QAAQ;AACzB,mBAAa,MAAM,QAAQ;AAC3B,gCAA0B;AAC1B,2BAAqB;AAAA,IAEvB;AAEA,WAAO;AAAA,MACL,UAAU,OAAO;AAAA,MACjB,cAAc,OAAO;AAAA,IACvB;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|