@shareai-lab/kode 1.1.11 → 1.1.13
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 +56 -33
- package/dist/ProjectOnboarding.js +99 -0
- package/dist/ProjectOnboarding.js.map +7 -0
- package/dist/Tool.js +1 -0
- package/dist/Tool.js.map +7 -0
- package/dist/commands/agents.js +2087 -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/clear.js +37 -0
- package/dist/commands/clear.js.map +7 -0
- package/dist/commands/compact.js +104 -0
- package/dist/commands/compact.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.js +34 -0
- package/dist/commands/mcp.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/pr_comments.js +61 -0
- package/dist/commands/pr_comments.js.map +7 -0
- package/dist/commands/refreshCommands.js +37 -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 +163 -0
- package/dist/commands/terminalSetup.js.map +7 -0
- package/dist/commands.js +84 -0
- package/dist/commands.js.map +7 -0
- package/dist/components/ApproveApiKey.js +74 -0
- package/dist/components/ApproveApiKey.js.map +7 -0
- package/dist/components/AsciiLogo.js +12 -0
- package/dist/components/AsciiLogo.js.map +7 -0
- package/dist/components/AutoUpdater.js +74 -0
- package/dist/components/AutoUpdater.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 +188 -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 +31 -0
- package/dist/components/FileEditToolUpdatedMessage.js.map +7 -0
- package/dist/components/Help.js +41 -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/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 +89 -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 +133 -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 +1985 -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/PromptInput.js +501 -0
- package/dist/components/PromptInput.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/StickerRequestForm.js +7 -0
- package/dist/components/StickerRequestForm.js.map +7 -0
- package/dist/components/StructuredDiff.js +148 -0
- package/dist/components/StructuredDiff.js.map +7 -0
- package/dist/components/TextInput.js +100 -0
- package/dist/components/TextInput.js.map +7 -0
- package/dist/components/TodoItem.js +35 -0
- package/dist/components/TodoItem.js.map +7 -0
- package/dist/components/TokenWarning.js +19 -0
- package/dist/components/TokenWarning.js.map +7 -0
- package/dist/components/ToolUseLoader.js +24 -0
- package/dist/components/ToolUseLoader.js.map +7 -0
- package/dist/components/TrustDialog.js +76 -0
- package/dist/components/TrustDialog.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 +161 -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 +42 -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 +28 -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/betas.js +11 -0
- package/dist/constants/betas.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/figures.js +6 -0
- package/dist/constants/figures.js.map +7 -0
- package/dist/constants/keys.js +7 -0
- package/dist/constants/keys.js.map +7 -0
- package/dist/constants/macros.js +13 -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 +1029 -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/context/PermissionContext.js +111 -0
- package/dist/context/PermissionContext.js.map +7 -0
- package/dist/context.js +259 -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.js +1101 -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 +112 -0
- package/dist/hooks/useCanUseTool.js.map +7 -0
- package/dist/hooks/useCancelRequest.js +30 -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/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 +15 -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 +28 -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 +250 -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 +26 -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 +1 -0
- package/dist/permissions.js +194 -0
- package/dist/permissions.js.map +7 -0
- package/dist/query.js +492 -0
- package/dist/query.js.map +7 -0
- package/dist/screens/ConfigureNpmPrefix.js +128 -0
- package/dist/screens/ConfigureNpmPrefix.js.map +7 -0
- package/dist/screens/Doctor.js +143 -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 +596 -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/browserMocks.js +48 -0
- package/dist/services/browserMocks.js.map +7 -0
- package/dist/services/claude.js +1605 -0
- package/dist/services/claude.js.map +7 -0
- package/dist/services/customCommands.js +359 -0
- package/dist/services/customCommands.js.map +7 -0
- package/dist/services/fileFreshness.js +280 -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/mcpClient.js +435 -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 +200 -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 +259 -0
- package/dist/services/oauth.js.map +7 -0
- package/dist/services/openai.js +998 -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/statsig.js +112 -0
- package/dist/services/statsig.js.map +7 -0
- package/dist/services/statsigStorage.js +75 -0
- package/dist/services/statsigStorage.js.map +7 -0
- package/dist/services/systemReminder.js +353 -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/test/testAdapters.js +88 -0
- package/dist/test/testAdapters.js.map +1 -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/BashTool/BashTool.js +188 -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 +179 -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 +228 -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 +204 -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/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 +293 -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/StickerRequestTool/StickerRequestTool.js +86 -0
- package/dist/tools/StickerRequestTool/StickerRequestTool.js.map +7 -0
- package/dist/tools/StickerRequestTool/prompt.js +23 -0
- package/dist/tools/StickerRequestTool/prompt.js.map +7 -0
- package/dist/tools/TaskTool/TaskTool.js +308 -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 +82 -0
- package/dist/tools/TaskTool/prompt.js.map +7 -0
- package/dist/tools/ThinkTool/ThinkTool.js +48 -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 +216 -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 +64 -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/logs.js +1 -0
- package/dist/types/logs.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/utils/Cursor.js +313 -0
- package/dist/utils/Cursor.js.map +7 -0
- package/dist/utils/PersistentShell.js +382 -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 +199 -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 +149 -0
- package/dist/utils/autoCompactCore.js.map +7 -0
- package/dist/utils/autoUpdater.js +362 -0
- package/dist/utils/autoUpdater.js.map +7 -0
- package/dist/utils/betas.js +21 -0
- package/dist/utils/betas.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/config.js +655 -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 +891 -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/exampleCommands.js +80 -0
- package/dist/utils/exampleCommands.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/globalLogger.js +54 -0
- package/dist/utils/globalLogger.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 +298 -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/messageContextManager.js +195 -0
- package/dist/utils/messageContextManager.js.map +7 -0
- package/dist/utils/messages.js +633 -0
- package/dist/utils/messages.js.map +7 -0
- package/dist/utils/model.js +687 -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/responseState.js +20 -0
- package/dist/utils/responseState.js.map +7 -0
- package/dist/utils/ripgrep.js +131 -0
- package/dist/utils/ripgrep.js.map +7 -0
- package/dist/utils/secureFile.js +483 -0
- package/dist/utils/secureFile.js.map +7 -0
- package/dist/utils/sessionState.js +31 -0
- package/dist/utils/sessionState.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 +43 -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 +103 -0
- package/dist/utils/thinking.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 +14 -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/yoga.wasm +0 -0
- package/package.json +31 -10
- package/src/Tool.ts +4 -3
- package/src/commands/agents.tsx +10 -4
- package/src/components/messages/AssistantToolUseMessage.tsx +5 -6
- package/src/constants/macros.ts +5 -2
- package/src/entrypoints/cli.tsx +38 -19
- package/src/entrypoints/mcp.ts +1 -2
- package/src/hooks/useDoublePress.ts +0 -1
- package/src/hooks/useTextInput.ts +4 -5
- package/src/hooks/useUnifiedCompletion.ts +2 -2
- package/src/index.ts +34 -0
- package/src/query.ts +13 -8
- package/src/screens/Doctor.tsx +1 -1
- package/src/screens/REPL.tsx +13 -9
- package/src/services/openai.ts +25 -4
- package/src/tools/ArchitectTool/ArchitectTool.tsx +18 -5
- package/src/tools/AskExpertModelTool/AskExpertModelTool.tsx +21 -14
- package/src/tools/FileEditTool/FileEditTool.tsx +6 -2
- package/src/tools/FileWriteTool/FileWriteTool.tsx +7 -3
- package/src/tools/MultiEditTool/MultiEditTool.tsx +26 -4
- package/src/tools/NotebookReadTool/NotebookReadTool.tsx +1 -1
- package/src/tools/StickerRequestTool/StickerRequestTool.tsx +28 -14
- package/src/tools/TaskTool/TaskTool.tsx +8 -36
- package/src/types/common.d.ts +2 -0
- package/src/utils/generators.ts +1 -1
- package/src/utils/messageContextManager.ts +5 -0
- package/src/utils/messages.tsx +8 -2
- package/src/utils/thinking.ts +1 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/log.ts"],
|
|
4
|
+
"sourcesContent": ["import { existsSync, mkdirSync } from 'fs'\nimport { dirname, join } from 'path'\nimport { writeFileSync, readFileSync } from 'fs'\nimport { captureException } from '../services/sentry'\nimport { randomUUID } from 'crypto'\nimport envPaths from 'env-paths'\nimport { promises as fsPromises } from 'fs'\nimport type { LogOption, SerializedMessage } from '../types/logs'\nimport { MACRO } from '../constants/macros'\nimport { PRODUCT_COMMAND } from '../constants/product'\nconst IN_MEMORY_ERROR_LOG: Array<{\n error: string\n timestamp: string\n}> = []\nconst MAX_IN_MEMORY_ERRORS = 100 // Limit to prevent memory issues\n\nexport const SESSION_ID = randomUUID()\n\nconst paths = envPaths(PRODUCT_COMMAND)\n\nfunction getProjectDir(cwd: string): string {\n return cwd.replace(/[^a-zA-Z0-9]/g, '-')\n}\n\nexport const CACHE_PATHS = {\n errors: () => join(paths.cache, getProjectDir(process.cwd()), 'errors'),\n messages: () => join(paths.cache, getProjectDir(process.cwd()), 'messages'),\n mcpLogs: (serverName: string) =>\n join(paths.cache, getProjectDir(process.cwd()), `mcp-logs-${serverName}`),\n}\n\nexport function dateToFilename(date: Date): string {\n return date.toISOString().replace(/[:.]/g, '-')\n}\n\nconst DATE = dateToFilename(new Date())\n\nfunction getErrorsPath(): string {\n return join(CACHE_PATHS.errors(), DATE + '.txt')\n}\n\nexport function getMessagesPath(\n messageLogName: string,\n forkNumber: number,\n sidechainNumber: number,\n): string {\n return join(\n CACHE_PATHS.messages(),\n `${messageLogName}${forkNumber > 0 ? `-${forkNumber}` : ''}${\n sidechainNumber > 0 ? `-sidechain-${sidechainNumber}` : ''\n }.json`,\n )\n}\n\nexport function logError(error: unknown): void {\n try {\n if (process.env.NODE_ENV === 'test') {\n console.error(error)\n }\n\n const errorStr =\n error instanceof Error ? error.stack || error.message : String(error)\n\n const errorInfo = {\n error: errorStr,\n timestamp: new Date().toISOString(),\n }\n\n if (IN_MEMORY_ERROR_LOG.length >= MAX_IN_MEMORY_ERRORS) {\n IN_MEMORY_ERROR_LOG.shift() // Remove oldest error\n }\n IN_MEMORY_ERROR_LOG.push(errorInfo)\n\n appendToLog(getErrorsPath(), {\n error: errorStr,\n })\n } catch {\n // pass\n }\n // Also send to Sentry with session ID, but don't await\n captureException(error)\n}\n\nexport function getErrorsLog(): object[] {\n return readLog(getErrorsPath())\n}\n\nexport function getInMemoryErrors(): object[] {\n return [...IN_MEMORY_ERROR_LOG]\n}\n\nfunction readLog(path: string): object[] {\n if (!existsSync(path)) {\n return []\n }\n try {\n return JSON.parse(readFileSync(path, 'utf8'))\n } catch {\n return []\n }\n}\n\nfunction appendToLog(path: string, message: object): void {\n if (process.env.USER_TYPE === 'external') {\n return\n }\n\n const dir = dirname(path)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n\n // Create messages file with empty array if it doesn't exist\n if (!existsSync(path)) {\n writeFileSync(path, '[]', 'utf8')\n }\n\n const messages = readLog(path)\n const messageWithTimestamp = {\n ...message,\n cwd: process.cwd(),\n userType: process.env.USER_TYPE,\n sessionId: SESSION_ID,\n timestamp: new Date().toISOString(),\n version: MACRO.VERSION,\n }\n messages.push(messageWithTimestamp)\n\n writeFileSync(path, JSON.stringify(messages, null, 2), 'utf8')\n}\n\nexport function overwriteLog(path: string, messages: object[]): void {\n if (process.env.USER_TYPE === 'external') {\n return\n }\n\n if (!messages.length) {\n return\n }\n\n const dir = dirname(path)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n\n const messagesWithMetadata = messages.map(message => ({\n ...message,\n cwd: process.cwd(),\n userType: process.env.USER_TYPE,\n sessionId: SESSION_ID,\n timestamp: new Date().toISOString(),\n version: MACRO.VERSION,\n }))\n\n writeFileSync(path, JSON.stringify(messagesWithMetadata, null, 2), 'utf8')\n}\n\nexport async function loadLogList(\n path = CACHE_PATHS.messages(),\n): Promise<LogOption[]> {\n if (!existsSync(path)) {\n logError(`No logs found at ${path}`)\n return []\n }\n\n const files = await fsPromises.readdir(path)\n const logData = await Promise.all(\n files.map(async (file, i) => {\n const fullPath = join(path, file)\n const content = await fsPromises.readFile(fullPath, 'utf8')\n const messages = JSON.parse(content) as SerializedMessage[]\n const firstMessage = messages[0]\n const lastMessage = messages[messages.length - 1]\n const firstPrompt =\n firstMessage?.type === 'user' &&\n typeof firstMessage?.message?.content === 'string'\n ? firstMessage?.message?.content\n : 'No prompt'\n\n const { date, forkNumber, sidechainNumber } = parseLogFilename(file)\n return {\n date,\n forkNumber,\n fullPath,\n messages,\n value: i, // hack: overwritten after sorting, right below this\n created: parseISOString(firstMessage?.timestamp || date),\n modified: lastMessage?.timestamp\n ? parseISOString(lastMessage.timestamp)\n : parseISOString(date),\n firstPrompt:\n firstPrompt.split('\\n')[0]?.slice(0, 50) +\n (firstPrompt.length > 50 ? '\u2026' : '') || 'No prompt',\n messageCount: messages.length,\n sidechainNumber,\n }\n }),\n )\n\n return sortLogs(logData.filter(_ => _.messages.length)).map((_, i) => ({\n ..._,\n value: i,\n }))\n}\n\nexport function parseLogFilename(filename: string): {\n date: string\n forkNumber: number | undefined\n sidechainNumber: number | undefined\n} {\n const base = filename.split('.')[0]!\n // Default timestamp format has 6 segments: 2025-01-27T01-31-35-104Z\n const segments = base.split('-')\n const hasSidechain = base.includes('-sidechain-')\n\n let date = base\n let forkNumber: number | undefined = undefined\n let sidechainNumber: number | undefined = undefined\n\n if (hasSidechain) {\n const sidechainIndex = segments.indexOf('sidechain')\n sidechainNumber = Number(segments[sidechainIndex + 1])\n // Fork number is before sidechain if exists\n if (sidechainIndex > 6) {\n forkNumber = Number(segments[sidechainIndex - 1])\n date = segments.slice(0, 6).join('-')\n } else {\n date = segments.slice(0, 6).join('-')\n }\n } else if (segments.length > 6) {\n // Has fork number\n const lastSegment = Number(segments[segments.length - 1])\n forkNumber = lastSegment >= 0 ? lastSegment : undefined\n date = segments.slice(0, 6).join('-')\n } else {\n // Basic timestamp only\n date = base\n }\n\n return { date, forkNumber, sidechainNumber }\n}\n\nexport function getNextAvailableLogForkNumber(\n date: string,\n forkNumber: number,\n // Main chain has sidechainNumber 0\n sidechainNumber: number,\n): number {\n while (existsSync(getMessagesPath(date, forkNumber, sidechainNumber))) {\n forkNumber++\n }\n return forkNumber\n}\n\nexport function getNextAvailableLogSidechainNumber(\n date: string,\n forkNumber: number,\n): number {\n let sidechainNumber = 1\n while (existsSync(getMessagesPath(date, forkNumber, sidechainNumber))) {\n sidechainNumber++\n }\n return sidechainNumber\n}\n\nexport function getForkNumberFromFilename(\n filename: string,\n): number | undefined {\n const base = filename.split('.')[0]!\n const segments = base.split('-')\n const hasSidechain = base.includes('-sidechain-')\n\n if (hasSidechain) {\n const sidechainIndex = segments.indexOf('sidechain')\n if (sidechainIndex > 6) {\n return Number(segments[sidechainIndex - 1])\n }\n return undefined\n }\n\n if (segments.length > 6) {\n const lastNumber = Number(segments[segments.length - 1])\n return lastNumber >= 0 ? lastNumber : undefined\n }\n return undefined\n}\n\nexport function sortLogs(logs: LogOption[]): LogOption[] {\n return logs.sort((a, b) => {\n // Sort by modified date (newest first)\n const modifiedDiff = b.modified.getTime() - a.modified.getTime()\n if (modifiedDiff !== 0) {\n return modifiedDiff\n }\n\n // If modified dates are equal, sort by created date\n const createdDiff = b.created.getTime() - a.created.getTime()\n if (createdDiff !== 0) {\n return createdDiff\n }\n\n // If both dates are equal, sort by fork number\n return (b.forkNumber ?? 0) - (a.forkNumber ?? 0)\n })\n}\n\nexport function formatDate(date: Date): string {\n const now = new Date()\n const yesterday = new Date(now)\n yesterday.setDate(yesterday.getDate() - 1)\n\n const isToday = date.toDateString() === now.toDateString()\n const isYesterday = date.toDateString() === yesterday.toDateString()\n\n const timeStr = date\n .toLocaleTimeString('en-US', {\n hour: 'numeric',\n minute: '2-digit',\n hour12: true,\n })\n .toLowerCase()\n\n if (isToday) {\n return `Today at ${timeStr}`\n } else if (isYesterday) {\n return `Yesterday at ${timeStr}`\n } else {\n return (\n date.toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n }) + ` at ${timeStr}`\n )\n }\n}\n\nexport function parseISOString(s: string): Date {\n const b = s.split(/\\D+/)\n return new Date(\n Date.UTC(\n parseInt(b[0]!, 10),\n parseInt(b[1]!, 10) - 1,\n parseInt(b[2]!, 10),\n parseInt(b[3]!, 10),\n parseInt(b[4]!, 10),\n parseInt(b[5]!, 10),\n parseInt(b[6]!, 10),\n ),\n )\n}\n\nexport function logMCPError(serverName: string, error: unknown): void {\n try {\n const logDir = CACHE_PATHS.mcpLogs(serverName)\n const errorStr =\n error instanceof Error ? error.stack || error.message : String(error)\n const timestamp = new Date().toISOString()\n\n const logFile = join(logDir, DATE + '.txt')\n\n if (!existsSync(logDir)) {\n mkdirSync(logDir, { recursive: true })\n }\n\n if (!existsSync(logFile)) {\n writeFileSync(logFile, '[]', 'utf8')\n }\n\n const errorInfo = {\n error: errorStr,\n timestamp,\n sessionId: SESSION_ID,\n cwd: process.cwd(),\n }\n\n const messages = readLog(logFile)\n messages.push(errorInfo)\n writeFileSync(logFile, JSON.stringify(messages, null, 2), 'utf8')\n } catch {\n // Silently fail\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { marked } from "marked";
|
|
2
|
+
import { stripSystemMessages } from "./messages.js";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { EOL } from "os";
|
|
5
|
+
import { highlight, supportsLanguage } from "cli-highlight";
|
|
6
|
+
import { logError } from "./log.js";
|
|
7
|
+
function applyMarkdown(content) {
|
|
8
|
+
return marked.lexer(stripSystemMessages(content)).map((_) => format(_)).join("").trim();
|
|
9
|
+
}
|
|
10
|
+
function format(token, listDepth = 0, orderedListNumber = null, parent = null) {
|
|
11
|
+
switch (token.type) {
|
|
12
|
+
case "blockquote":
|
|
13
|
+
return chalk.dim.italic((token.tokens ?? []).map((_) => format(_)).join(""));
|
|
14
|
+
case "code":
|
|
15
|
+
if (token.lang && supportsLanguage(token.lang)) {
|
|
16
|
+
return highlight(token.text, { language: token.lang }) + EOL;
|
|
17
|
+
} else {
|
|
18
|
+
logError(
|
|
19
|
+
`Language not supported while highlighting code, falling back to markdown: ${token.lang}`
|
|
20
|
+
);
|
|
21
|
+
return highlight(token.text, { language: "markdown" }) + EOL;
|
|
22
|
+
}
|
|
23
|
+
case "codespan":
|
|
24
|
+
return chalk.blue(token.text);
|
|
25
|
+
case "em":
|
|
26
|
+
return chalk.italic((token.tokens ?? []).map((_) => format(_)).join(""));
|
|
27
|
+
case "strong":
|
|
28
|
+
return chalk.bold((token.tokens ?? []).map((_) => format(_)).join(""));
|
|
29
|
+
case "heading":
|
|
30
|
+
switch (token.depth) {
|
|
31
|
+
case 1:
|
|
32
|
+
return chalk.bold.italic.underline(
|
|
33
|
+
(token.tokens ?? []).map((_) => format(_)).join("")
|
|
34
|
+
) + EOL + EOL;
|
|
35
|
+
case 2:
|
|
36
|
+
return chalk.bold((token.tokens ?? []).map((_) => format(_)).join("")) + EOL + EOL;
|
|
37
|
+
default:
|
|
38
|
+
return chalk.bold.dim((token.tokens ?? []).map((_) => format(_)).join("")) + EOL + EOL;
|
|
39
|
+
}
|
|
40
|
+
case "hr":
|
|
41
|
+
return "---";
|
|
42
|
+
case "image":
|
|
43
|
+
return `[Image: ${token.title}: ${token.href}]`;
|
|
44
|
+
case "link":
|
|
45
|
+
return chalk.blue(token.href);
|
|
46
|
+
case "list": {
|
|
47
|
+
return token.items.map(
|
|
48
|
+
(_, index) => format(
|
|
49
|
+
_,
|
|
50
|
+
listDepth,
|
|
51
|
+
token.ordered ? token.start + index : null,
|
|
52
|
+
token
|
|
53
|
+
)
|
|
54
|
+
).join("");
|
|
55
|
+
}
|
|
56
|
+
case "list_item":
|
|
57
|
+
return (token.tokens ?? []).map(
|
|
58
|
+
(_) => `${" ".repeat(listDepth)}${format(_, listDepth + 1, orderedListNumber, token)}`
|
|
59
|
+
).join("");
|
|
60
|
+
case "paragraph":
|
|
61
|
+
return (token.tokens ?? []).map((_) => format(_)).join("") + EOL;
|
|
62
|
+
case "space":
|
|
63
|
+
return EOL;
|
|
64
|
+
case "text":
|
|
65
|
+
if (parent?.type === "list_item") {
|
|
66
|
+
return `${orderedListNumber === null ? "-" : getListNumber(listDepth, orderedListNumber) + "."} ${token.tokens ? token.tokens.map((_) => format(_, listDepth, orderedListNumber, token)).join("") : token.text}${EOL}`;
|
|
67
|
+
} else {
|
|
68
|
+
return token.text;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return "";
|
|
72
|
+
}
|
|
73
|
+
const DEPTH_1_LIST_NUMBERS = [
|
|
74
|
+
"a",
|
|
75
|
+
"b",
|
|
76
|
+
"c",
|
|
77
|
+
"d",
|
|
78
|
+
"e",
|
|
79
|
+
"f",
|
|
80
|
+
"g",
|
|
81
|
+
"h",
|
|
82
|
+
"i",
|
|
83
|
+
"j",
|
|
84
|
+
"k",
|
|
85
|
+
"l",
|
|
86
|
+
"m",
|
|
87
|
+
"n",
|
|
88
|
+
"o",
|
|
89
|
+
"p",
|
|
90
|
+
"q",
|
|
91
|
+
"r",
|
|
92
|
+
"s",
|
|
93
|
+
"t",
|
|
94
|
+
"u",
|
|
95
|
+
"v",
|
|
96
|
+
"w",
|
|
97
|
+
"x",
|
|
98
|
+
"y",
|
|
99
|
+
"z",
|
|
100
|
+
"aa",
|
|
101
|
+
"ab",
|
|
102
|
+
"ac",
|
|
103
|
+
"ad",
|
|
104
|
+
"ae",
|
|
105
|
+
"af",
|
|
106
|
+
"ag",
|
|
107
|
+
"ah",
|
|
108
|
+
"ai",
|
|
109
|
+
"aj",
|
|
110
|
+
"ak",
|
|
111
|
+
"al",
|
|
112
|
+
"am",
|
|
113
|
+
"an",
|
|
114
|
+
"ao",
|
|
115
|
+
"ap",
|
|
116
|
+
"aq",
|
|
117
|
+
"ar",
|
|
118
|
+
"as",
|
|
119
|
+
"at",
|
|
120
|
+
"au",
|
|
121
|
+
"av",
|
|
122
|
+
"aw",
|
|
123
|
+
"ax",
|
|
124
|
+
"ay",
|
|
125
|
+
"az"
|
|
126
|
+
];
|
|
127
|
+
const DEPTH_2_LIST_NUMBERS = [
|
|
128
|
+
"i",
|
|
129
|
+
"ii",
|
|
130
|
+
"iii",
|
|
131
|
+
"iv",
|
|
132
|
+
"v",
|
|
133
|
+
"vi",
|
|
134
|
+
"vii",
|
|
135
|
+
"viii",
|
|
136
|
+
"ix",
|
|
137
|
+
"x",
|
|
138
|
+
"xi",
|
|
139
|
+
"xii",
|
|
140
|
+
"xiii",
|
|
141
|
+
"xiv",
|
|
142
|
+
"xv",
|
|
143
|
+
"xvi",
|
|
144
|
+
"xvii",
|
|
145
|
+
"xviii",
|
|
146
|
+
"xix",
|
|
147
|
+
"xx",
|
|
148
|
+
"xxi",
|
|
149
|
+
"xxii",
|
|
150
|
+
"xxiii",
|
|
151
|
+
"xxiv",
|
|
152
|
+
"xxv",
|
|
153
|
+
"xxvi",
|
|
154
|
+
"xxvii",
|
|
155
|
+
"xxviii",
|
|
156
|
+
"xxix",
|
|
157
|
+
"xxx",
|
|
158
|
+
"xxxi",
|
|
159
|
+
"xxxii",
|
|
160
|
+
"xxxiii",
|
|
161
|
+
"xxxiv",
|
|
162
|
+
"xxxv",
|
|
163
|
+
"xxxvi",
|
|
164
|
+
"xxxvii",
|
|
165
|
+
"xxxviii",
|
|
166
|
+
"xxxix",
|
|
167
|
+
"xl"
|
|
168
|
+
];
|
|
169
|
+
function getListNumber(listDepth, orderedListNumber) {
|
|
170
|
+
switch (listDepth) {
|
|
171
|
+
case 0:
|
|
172
|
+
case 1:
|
|
173
|
+
return orderedListNumber.toString();
|
|
174
|
+
case 2:
|
|
175
|
+
return DEPTH_1_LIST_NUMBERS[orderedListNumber - 1];
|
|
176
|
+
// TODO: don't hard code the list
|
|
177
|
+
case 3:
|
|
178
|
+
return DEPTH_2_LIST_NUMBERS[orderedListNumber - 1];
|
|
179
|
+
// TODO: don't hard code the list
|
|
180
|
+
default:
|
|
181
|
+
return orderedListNumber.toString();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
export {
|
|
185
|
+
applyMarkdown
|
|
186
|
+
};
|
|
187
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/markdown.ts"],
|
|
4
|
+
"sourcesContent": ["import { marked, Token } from 'marked'\nimport { stripSystemMessages } from './messages'\nimport chalk from 'chalk'\nimport { EOL } from 'os'\nimport { highlight, supportsLanguage } from 'cli-highlight'\nimport { logError } from './log'\n\nexport function applyMarkdown(content: string): string {\n return marked\n .lexer(stripSystemMessages(content))\n .map(_ => format(_))\n .join('')\n .trim()\n}\n\nfunction format(\n token: Token,\n listDepth = 0,\n orderedListNumber: number | null = null,\n parent: Token | null = null,\n): string {\n switch (token.type) {\n case 'blockquote':\n return chalk.dim.italic((token.tokens ?? []).map(_ => format(_)).join(''))\n case 'code':\n if (token.lang && supportsLanguage(token.lang)) {\n return highlight(token.text, { language: token.lang }) + EOL\n } else {\n logError(\n `Language not supported while highlighting code, falling back to markdown: ${token.lang}`,\n )\n return highlight(token.text, { language: 'markdown' }) + EOL\n }\n case 'codespan':\n // inline code\n return chalk.blue(token.text)\n case 'em':\n return chalk.italic((token.tokens ?? []).map(_ => format(_)).join(''))\n case 'strong':\n return chalk.bold((token.tokens ?? []).map(_ => format(_)).join(''))\n case 'heading':\n switch (token.depth) {\n case 1: // h1\n return (\n chalk.bold.italic.underline(\n (token.tokens ?? []).map(_ => format(_)).join(''),\n ) +\n EOL +\n EOL\n )\n case 2: // h2\n return (\n chalk.bold((token.tokens ?? []).map(_ => format(_)).join('')) +\n EOL +\n EOL\n )\n default: // h3+\n return (\n chalk.bold.dim((token.tokens ?? []).map(_ => format(_)).join('')) +\n EOL +\n EOL\n )\n }\n case 'hr':\n return '---'\n case 'image':\n return `[Image: ${token.title}: ${token.href}]`\n case 'link':\n return chalk.blue(token.href)\n case 'list': {\n return token.items\n .map((_: Token, index: number) =>\n format(\n _,\n listDepth,\n token.ordered ? token.start + index : null,\n token,\n ),\n )\n .join('')\n }\n case 'list_item':\n return (token.tokens ?? [])\n .map(\n _ =>\n `${' '.repeat(listDepth)}${format(_, listDepth + 1, orderedListNumber, token)}`,\n )\n .join('')\n case 'paragraph':\n return (token.tokens ?? []).map(_ => format(_)).join('') + EOL\n case 'space':\n return EOL\n case 'text':\n if (parent?.type === 'list_item') {\n return `${orderedListNumber === null ? '-' : getListNumber(listDepth, orderedListNumber) + '.'} ${token.tokens ? token.tokens.map(_ => format(_, listDepth, orderedListNumber, token)).join('') : token.text}${EOL}`\n } else {\n return token.text\n }\n }\n // TODO: tables\n return ''\n}\n\nconst DEPTH_1_LIST_NUMBERS = [\n 'a',\n 'b',\n 'c',\n 'd',\n 'e',\n 'f',\n 'g',\n 'h',\n 'i',\n 'j',\n 'k',\n 'l',\n 'm',\n 'n',\n 'o',\n 'p',\n 'q',\n 'r',\n 's',\n 't',\n 'u',\n 'v',\n 'w',\n 'x',\n 'y',\n 'z',\n 'aa',\n 'ab',\n 'ac',\n 'ad',\n 'ae',\n 'af',\n 'ag',\n 'ah',\n 'ai',\n 'aj',\n 'ak',\n 'al',\n 'am',\n 'an',\n 'ao',\n 'ap',\n 'aq',\n 'ar',\n 'as',\n 'at',\n 'au',\n 'av',\n 'aw',\n 'ax',\n 'ay',\n 'az',\n]\nconst DEPTH_2_LIST_NUMBERS = [\n 'i',\n 'ii',\n 'iii',\n 'iv',\n 'v',\n 'vi',\n 'vii',\n 'viii',\n 'ix',\n 'x',\n 'xi',\n 'xii',\n 'xiii',\n 'xiv',\n 'xv',\n 'xvi',\n 'xvii',\n 'xviii',\n 'xix',\n 'xx',\n 'xxi',\n 'xxii',\n 'xxiii',\n 'xxiv',\n 'xxv',\n 'xxvi',\n 'xxvii',\n 'xxviii',\n 'xxix',\n 'xxx',\n 'xxxi',\n 'xxxii',\n 'xxxiii',\n 'xxxiv',\n 'xxxv',\n 'xxxvi',\n 'xxxvii',\n 'xxxviii',\n 'xxxix',\n 'xl',\n]\n\nfunction getListNumber(listDepth: number, orderedListNumber: number): string {\n switch (listDepth) {\n case 0:\n case 1:\n return orderedListNumber.toString()\n case 2:\n return DEPTH_1_LIST_NUMBERS[orderedListNumber - 1]! // TODO: don't hard code the list\n case 3:\n return DEPTH_2_LIST_NUMBERS[orderedListNumber - 1]! // TODO: don't hard code the list\n default:\n return orderedListNumber.toString()\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { countTokens } from "./tokens.js";
|
|
2
|
+
import crypto from "crypto";
|
|
3
|
+
class MessageContextManager {
|
|
4
|
+
/**
|
|
5
|
+
* Truncate messages intelligently based on strategy and token limit
|
|
6
|
+
*/
|
|
7
|
+
async truncateMessages(messages, strategy) {
|
|
8
|
+
switch (strategy.type) {
|
|
9
|
+
case "preserve_recent":
|
|
10
|
+
return this.preserveRecentMessages(messages, strategy);
|
|
11
|
+
case "preserve_important":
|
|
12
|
+
return this.preserveImportantMessages(messages, strategy);
|
|
13
|
+
case "smart_compression":
|
|
14
|
+
return this.smartCompressionStrategy(messages, strategy);
|
|
15
|
+
case "auto_compact":
|
|
16
|
+
return this.autoCompactStrategy(messages, strategy);
|
|
17
|
+
default:
|
|
18
|
+
return this.preserveRecentMessages(messages, strategy);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Strategy 1: Preserve most recent messages
|
|
23
|
+
*/
|
|
24
|
+
preserveRecentMessages(messages, strategy) {
|
|
25
|
+
const preserveCount = strategy.preserveCount || this.estimateMessageCount(strategy.maxTokens);
|
|
26
|
+
const truncatedMessages = messages.slice(-preserveCount);
|
|
27
|
+
const removedCount = messages.length - truncatedMessages.length;
|
|
28
|
+
return {
|
|
29
|
+
truncatedMessages,
|
|
30
|
+
removedCount,
|
|
31
|
+
preservedTokens: countTokens(truncatedMessages),
|
|
32
|
+
strategy: `Preserved last ${preserveCount} messages`,
|
|
33
|
+
summary: removedCount > 0 ? `Removed ${removedCount} older messages to fit context window` : "No messages removed"
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Strategy 2: Preserve important messages (errors, user queries, recent context)
|
|
38
|
+
*/
|
|
39
|
+
preserveImportantMessages(messages, strategy) {
|
|
40
|
+
const importantMessages = [];
|
|
41
|
+
const recentMessages = [];
|
|
42
|
+
const recentCount = Math.min(5, messages.length);
|
|
43
|
+
recentMessages.push(...messages.slice(-recentCount));
|
|
44
|
+
for (let i = 0; i < messages.length - recentCount; i++) {
|
|
45
|
+
const message = messages[i];
|
|
46
|
+
if (this.isImportantMessage(message)) {
|
|
47
|
+
importantMessages.push(message);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const combinedMessages = [
|
|
51
|
+
...importantMessages,
|
|
52
|
+
...recentMessages.filter(
|
|
53
|
+
(msg) => !importantMessages.some((imp) => this.messagesEqual(imp, msg))
|
|
54
|
+
)
|
|
55
|
+
];
|
|
56
|
+
const truncatedMessages = combinedMessages.sort((a, b) => {
|
|
57
|
+
const aIndex = messages.indexOf(a);
|
|
58
|
+
const bIndex = messages.indexOf(b);
|
|
59
|
+
return aIndex - bIndex;
|
|
60
|
+
});
|
|
61
|
+
const removedCount = messages.length - truncatedMessages.length;
|
|
62
|
+
return {
|
|
63
|
+
truncatedMessages,
|
|
64
|
+
removedCount,
|
|
65
|
+
preservedTokens: countTokens(truncatedMessages),
|
|
66
|
+
strategy: `Preserved ${importantMessages.length} important + ${recentMessages.length} recent messages`,
|
|
67
|
+
summary: `Kept critical errors, user decisions, and recent context (${removedCount} messages archived)`
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Strategy 3: Smart compression with summary
|
|
72
|
+
*/
|
|
73
|
+
async smartCompressionStrategy(messages, strategy) {
|
|
74
|
+
const recentCount = Math.min(10, Math.floor(messages.length * 0.3));
|
|
75
|
+
const recentMessages = messages.slice(-recentCount);
|
|
76
|
+
const olderMessages = messages.slice(0, -recentCount);
|
|
77
|
+
const summary = this.createMessagesSummary(olderMessages);
|
|
78
|
+
const summaryMessage = {
|
|
79
|
+
type: "assistant",
|
|
80
|
+
message: {
|
|
81
|
+
role: "assistant",
|
|
82
|
+
content: [
|
|
83
|
+
{
|
|
84
|
+
type: "text",
|
|
85
|
+
text: `[CONVERSATION SUMMARY - ${olderMessages.length} messages compressed]
|
|
86
|
+
|
|
87
|
+
${summary}
|
|
88
|
+
|
|
89
|
+
[END SUMMARY - Recent context follows...]`
|
|
90
|
+
}
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
costUSD: 0,
|
|
94
|
+
durationMs: 0,
|
|
95
|
+
uuid: crypto.randomUUID()
|
|
96
|
+
};
|
|
97
|
+
const truncatedMessages = [summaryMessage, ...recentMessages];
|
|
98
|
+
return {
|
|
99
|
+
truncatedMessages,
|
|
100
|
+
removedCount: olderMessages.length,
|
|
101
|
+
preservedTokens: countTokens(truncatedMessages),
|
|
102
|
+
strategy: `Compressed ${olderMessages.length} messages + preserved ${recentCount} recent`,
|
|
103
|
+
summary: `Created intelligent summary of conversation history`
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Strategy 4: Use existing auto-compact mechanism
|
|
108
|
+
*/
|
|
109
|
+
async autoCompactStrategy(messages, strategy) {
|
|
110
|
+
return this.preserveRecentMessages(messages, strategy);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Helper: Estimate how many messages fit in token budget
|
|
114
|
+
*/
|
|
115
|
+
estimateMessageCount(maxTokens) {
|
|
116
|
+
const avgTokensPerMessage = 150;
|
|
117
|
+
return Math.max(3, Math.floor(maxTokens / avgTokensPerMessage));
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Helper: Determine if a message is important
|
|
121
|
+
*/
|
|
122
|
+
isImportantMessage(message) {
|
|
123
|
+
if (message.type === "user") return true;
|
|
124
|
+
if (message.type === "assistant") {
|
|
125
|
+
const content = message.message.content;
|
|
126
|
+
if (Array.isArray(content)) {
|
|
127
|
+
const textContent = content.filter((c) => c.type === "text").map((c) => c.text).join(" ").toLowerCase();
|
|
128
|
+
return textContent.includes("error") || textContent.includes("failed") || textContent.includes("warning") || textContent.includes("critical") || textContent.includes("issue");
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Helper: Check if two messages are equal
|
|
135
|
+
*/
|
|
136
|
+
messagesEqual(a, b) {
|
|
137
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Helper: Create summary of message sequence
|
|
141
|
+
*/
|
|
142
|
+
createMessagesSummary(messages) {
|
|
143
|
+
const userMessages = messages.filter((m) => m.type === "user").length;
|
|
144
|
+
const assistantMessages = messages.filter(
|
|
145
|
+
(m) => m.type === "assistant"
|
|
146
|
+
).length;
|
|
147
|
+
const toolUses = messages.filter(
|
|
148
|
+
(m) => m.type === "assistant" && Array.isArray(m.message.content) && m.message.content.some((c) => c.type === "tool_use")
|
|
149
|
+
).length;
|
|
150
|
+
const topics = [];
|
|
151
|
+
messages.forEach((msg) => {
|
|
152
|
+
if (msg.type === "user" && Array.isArray(msg.message.content)) {
|
|
153
|
+
const text = msg.message.content.filter((c) => c.type === "text").map((c) => c.text).join(" ");
|
|
154
|
+
if (text.includes("error") || text.includes("bug"))
|
|
155
|
+
topics.push("debugging");
|
|
156
|
+
if (text.includes("implement") || text.includes("create"))
|
|
157
|
+
topics.push("implementation");
|
|
158
|
+
if (text.includes("explain") || text.includes("understand"))
|
|
159
|
+
topics.push("explanation");
|
|
160
|
+
if (text.includes("fix") || text.includes("solve"))
|
|
161
|
+
topics.push("problem-solving");
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
const uniqueTopics = [...new Set(topics)];
|
|
165
|
+
return `Previous conversation included ${userMessages} user messages and ${assistantMessages} assistant responses, with ${toolUses} tool invocations. Key topics: ${uniqueTopics.join(", ") || "general discussion"}.`;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function createRetentionStrategy(targetContextLength, currentTokens, userPreference = "balanced") {
|
|
169
|
+
const maxTokens = Math.floor(targetContextLength * 0.7);
|
|
170
|
+
switch (userPreference) {
|
|
171
|
+
case "aggressive":
|
|
172
|
+
return {
|
|
173
|
+
type: "preserve_recent",
|
|
174
|
+
maxTokens,
|
|
175
|
+
preserveCount: Math.max(3, Math.floor(maxTokens / 200))
|
|
176
|
+
};
|
|
177
|
+
case "conservative":
|
|
178
|
+
return {
|
|
179
|
+
type: "smart_compression",
|
|
180
|
+
maxTokens
|
|
181
|
+
};
|
|
182
|
+
case "balanced":
|
|
183
|
+
default:
|
|
184
|
+
return {
|
|
185
|
+
type: "preserve_important",
|
|
186
|
+
maxTokens,
|
|
187
|
+
preserveCount: Math.max(5, Math.floor(maxTokens / 150))
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
export {
|
|
192
|
+
MessageContextManager,
|
|
193
|
+
createRetentionStrategy
|
|
194
|
+
};
|
|
195
|
+
//# sourceMappingURL=messageContextManager.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/messageContextManager.ts"],
|
|
4
|
+
"sourcesContent": ["import { Message } from '../query'\nimport type { UUID } from '../types/common'\nimport { countTokens } from './tokens'\nimport crypto from 'crypto'\n\nexport interface MessageRetentionStrategy {\n type:\n | 'preserve_recent'\n | 'preserve_important'\n | 'smart_compression'\n | 'auto_compact'\n maxTokens: number\n preserveCount?: number\n importanceThreshold?: number\n}\n\nexport interface MessageTruncationResult {\n truncatedMessages: Message[]\n removedCount: number\n preservedTokens: number\n strategy: string\n summary?: string\n}\n\n/**\n * Smart message truncation for context-limited models\n * Implements multiple strategies for preserving important conversation content\n */\nexport class MessageContextManager {\n /**\n * Truncate messages intelligently based on strategy and token limit\n */\n async truncateMessages(\n messages: Message[],\n strategy: MessageRetentionStrategy,\n ): Promise<MessageTruncationResult> {\n switch (strategy.type) {\n case 'preserve_recent':\n return this.preserveRecentMessages(messages, strategy)\n case 'preserve_important':\n return this.preserveImportantMessages(messages, strategy)\n case 'smart_compression':\n return this.smartCompressionStrategy(messages, strategy)\n case 'auto_compact':\n return this.autoCompactStrategy(messages, strategy)\n default:\n return this.preserveRecentMessages(messages, strategy)\n }\n }\n\n /**\n * Strategy 1: Preserve most recent messages\n */\n private preserveRecentMessages(\n messages: Message[],\n strategy: MessageRetentionStrategy,\n ): MessageTruncationResult {\n const preserveCount =\n strategy.preserveCount || this.estimateMessageCount(strategy.maxTokens)\n const truncatedMessages = messages.slice(-preserveCount)\n const removedCount = messages.length - truncatedMessages.length\n\n return {\n truncatedMessages,\n removedCount,\n preservedTokens: countTokens(truncatedMessages),\n strategy: `Preserved last ${preserveCount} messages`,\n summary:\n removedCount > 0\n ? `Removed ${removedCount} older messages to fit context window`\n : 'No messages removed',\n }\n }\n\n /**\n * Strategy 2: Preserve important messages (errors, user queries, recent context)\n */\n private preserveImportantMessages(\n messages: Message[],\n strategy: MessageRetentionStrategy,\n ): MessageTruncationResult {\n const importantMessages: Message[] = []\n const recentMessages: Message[] = []\n\n // Always preserve the last few messages for context continuity\n const recentCount = Math.min(5, messages.length)\n recentMessages.push(...messages.slice(-recentCount))\n\n // Identify important messages (errors, tool failures, user decisions)\n for (let i = 0; i < messages.length - recentCount; i++) {\n const message = messages[i]\n if (this.isImportantMessage(message)) {\n importantMessages.push(message)\n }\n }\n\n // Combine and deduplicate\n const combinedMessages = [\n ...importantMessages,\n ...recentMessages.filter(\n msg => !importantMessages.some(imp => this.messagesEqual(imp, msg)),\n ),\n ]\n\n // Sort by original order\n const truncatedMessages = combinedMessages.sort((a, b) => {\n const aIndex = messages.indexOf(a)\n const bIndex = messages.indexOf(b)\n return aIndex - bIndex\n })\n\n const removedCount = messages.length - truncatedMessages.length\n\n return {\n truncatedMessages,\n removedCount,\n preservedTokens: countTokens(truncatedMessages),\n strategy: `Preserved ${importantMessages.length} important + ${recentMessages.length} recent messages`,\n summary: `Kept critical errors, user decisions, and recent context (${removedCount} messages archived)`,\n }\n }\n\n /**\n * Strategy 3: Smart compression with summary\n */\n private async smartCompressionStrategy(\n messages: Message[],\n strategy: MessageRetentionStrategy,\n ): Promise<MessageTruncationResult> {\n const recentCount = Math.min(10, Math.floor(messages.length * 0.3))\n const recentMessages = messages.slice(-recentCount)\n const olderMessages = messages.slice(0, -recentCount)\n\n // Create a summary of older messages\n const summary = this.createMessagesSummary(olderMessages)\n\n // Create a summary message\n const summaryMessage: Message = {\n type: 'assistant',\n message: {\n role: 'assistant',\n content: [\n {\n type: 'text',\n text: `[CONVERSATION SUMMARY - ${olderMessages.length} messages compressed]\\n\\n${summary}\\n\\n[END SUMMARY - Recent context follows...]`,\n },\n ],\n },\n costUSD: 0,\n durationMs: 0,\n uuid: crypto.randomUUID() as UUID\n }\n\n const truncatedMessages = [summaryMessage, ...recentMessages]\n\n return {\n truncatedMessages,\n removedCount: olderMessages.length,\n preservedTokens: countTokens(truncatedMessages),\n strategy: `Compressed ${olderMessages.length} messages + preserved ${recentCount} recent`,\n summary: `Created intelligent summary of conversation history`,\n }\n }\n\n /**\n * Strategy 4: Use existing auto-compact mechanism\n */\n private async autoCompactStrategy(\n messages: Message[],\n strategy: MessageRetentionStrategy,\n ): Promise<MessageTruncationResult> {\n // This would integrate with the existing autoCompactCore.ts\n // For now, fallback to preserve_recent\n return this.preserveRecentMessages(messages, strategy)\n }\n\n /**\n * Helper: Estimate how many messages fit in token budget\n */\n private estimateMessageCount(maxTokens: number): number {\n const avgTokensPerMessage = 150 // Conservative estimate\n return Math.max(3, Math.floor(maxTokens / avgTokensPerMessage))\n }\n\n /**\n * Helper: Determine if a message is important\n */\n private isImportantMessage(message: Message): boolean {\n if (message.type === 'user') return true // User messages are always important\n\n if (message.type === 'assistant') {\n const content = message.message.content\n if (Array.isArray(content)) {\n const textContent = content\n .filter(c => c.type === 'text')\n .map(c => c.text)\n .join(' ')\n .toLowerCase()\n\n // Mark as important if contains error keywords\n return (\n textContent.includes('error') ||\n textContent.includes('failed') ||\n textContent.includes('warning') ||\n textContent.includes('critical') ||\n textContent.includes('issue')\n )\n }\n }\n\n return false\n }\n\n /**\n * Helper: Check if two messages are equal\n */\n private messagesEqual(a: Message, b: Message): boolean {\n return JSON.stringify(a) === JSON.stringify(b)\n }\n\n /**\n * Helper: Create summary of message sequence\n */\n private createMessagesSummary(messages: Message[]): string {\n const userMessages = messages.filter(m => m.type === 'user').length\n const assistantMessages = messages.filter(\n m => m.type === 'assistant',\n ).length\n const toolUses = messages.filter(\n m =>\n m.type === 'assistant' &&\n Array.isArray(m.message.content) &&\n m.message.content.some(c => c.type === 'tool_use'),\n ).length\n\n const topics: string[] = []\n\n // Extract key topics from user messages\n messages.forEach(msg => {\n if (msg.type === 'user' && Array.isArray(msg.message.content)) {\n const text = msg.message.content\n .filter(c => c.type === 'text')\n .map(c => c.text)\n .join(' ')\n\n // Simple keyword extraction (could be enhanced with NLP)\n if (text.includes('error') || text.includes('bug'))\n topics.push('debugging')\n if (text.includes('implement') || text.includes('create'))\n topics.push('implementation')\n if (text.includes('explain') || text.includes('understand'))\n topics.push('explanation')\n if (text.includes('fix') || text.includes('solve'))\n topics.push('problem-solving')\n }\n })\n\n const uniqueTopics = [...new Set(topics)]\n\n return `Previous conversation included ${userMessages} user messages and ${assistantMessages} assistant responses, with ${toolUses} tool invocations. Key topics: ${uniqueTopics.join(', ') || 'general discussion'}.`\n }\n}\n\n/**\n * Factory function to create appropriate retention strategy\n */\nexport function createRetentionStrategy(\n targetContextLength: number,\n currentTokens: number,\n userPreference: 'aggressive' | 'balanced' | 'conservative' = 'balanced',\n): MessageRetentionStrategy {\n const maxTokens = Math.floor(targetContextLength * 0.7) // Leave room for new conversation\n\n switch (userPreference) {\n case 'aggressive':\n return {\n type: 'preserve_recent',\n maxTokens,\n preserveCount: Math.max(3, Math.floor(maxTokens / 200)),\n }\n case 'conservative':\n return {\n type: 'smart_compression',\n maxTokens,\n }\n case 'balanced':\n default:\n return {\n type: 'preserve_important',\n maxTokens,\n preserveCount: Math.max(5, Math.floor(maxTokens / 150)),\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|