@shareai-lab/kode 1.1.12 → 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 +44 -23
- 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 +28 -7
- 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
package/src/entrypoints/cli.tsx
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env -S node --no-warnings=ExperimentalWarning --enable-source-maps
|
|
2
2
|
import { fileURLToPath } from 'node:url'
|
|
3
3
|
import { dirname, join } from 'node:path'
|
|
4
|
+
import { existsSync } from 'node:fs'
|
|
4
5
|
import { initSentry } from '../services/sentry'
|
|
5
6
|
import { PRODUCT_COMMAND, PRODUCT_NAME } from '../constants/product'
|
|
6
7
|
initSentry() // Initialize Sentry as early as possible
|
|
@@ -9,14 +10,18 @@ initSentry() // Initialize Sentry as early as possible
|
|
|
9
10
|
// Resolve yoga.wasm relative to this file when missing using ESM-friendly APIs
|
|
10
11
|
try {
|
|
11
12
|
if (!process.env.YOGA_WASM_PATH) {
|
|
12
|
-
const { existsSync: fsExistsSync } = require('fs')
|
|
13
13
|
const __filename = fileURLToPath(import.meta.url)
|
|
14
14
|
const __dirname = dirname(__filename)
|
|
15
15
|
const devCandidate = join(__dirname, '../../yoga.wasm')
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
?
|
|
19
|
-
:
|
|
16
|
+
const distCandidate = join(__dirname, './yoga.wasm')
|
|
17
|
+
const resolved = existsSync(distCandidate)
|
|
18
|
+
? distCandidate
|
|
19
|
+
: existsSync(devCandidate)
|
|
20
|
+
? devCandidate
|
|
21
|
+
: undefined
|
|
22
|
+
if (resolved) {
|
|
23
|
+
process.env.YOGA_WASM_PATH = resolved
|
|
24
|
+
}
|
|
20
25
|
}
|
|
21
26
|
} catch {}
|
|
22
27
|
|
|
@@ -29,8 +34,8 @@ Object.keys(dontcare)
|
|
|
29
34
|
import React from 'react'
|
|
30
35
|
import { ReadStream } from 'tty'
|
|
31
36
|
import { openSync, existsSync } from 'fs'
|
|
32
|
-
|
|
33
|
-
import {
|
|
37
|
+
// ink and REPL are imported lazily to avoid top-level awaits during module init
|
|
38
|
+
import type { RenderOptions } from 'ink'
|
|
34
39
|
import { addToHistory } from '../history'
|
|
35
40
|
import { getContext, setContext, removeContext } from '../context'
|
|
36
41
|
import { Command } from '@commander-js/extra-typings'
|
|
@@ -126,6 +131,7 @@ async function showSetupScreens(
|
|
|
126
131
|
!config.hasCompletedOnboarding // always show onboarding at least once
|
|
127
132
|
) {
|
|
128
133
|
await clearTerminal()
|
|
134
|
+
const { render } = await import('ink')
|
|
129
135
|
await new Promise<void>(resolve => {
|
|
130
136
|
render(
|
|
131
137
|
<Onboarding
|
|
@@ -207,7 +213,14 @@ async function setup(cwd: string, safeMode?: boolean): Promise<void> {
|
|
|
207
213
|
grantReadPermissionForOriginalDir()
|
|
208
214
|
|
|
209
215
|
// Start watching agent configuration files for changes
|
|
210
|
-
|
|
216
|
+
// Try ESM-friendly path first (compiled dist), then fall back to extensionless (dev/tsx)
|
|
217
|
+
let agentLoader: any
|
|
218
|
+
try {
|
|
219
|
+
agentLoader = await import('../utils/agentLoader.js')
|
|
220
|
+
} catch {
|
|
221
|
+
agentLoader = await import('../utils/agentLoader')
|
|
222
|
+
}
|
|
223
|
+
const { startAgentWatcher, clearAgentCache } = agentLoader
|
|
211
224
|
await startAgentWatcher(() => {
|
|
212
225
|
// Cache is already cleared in the watcher, just log
|
|
213
226
|
console.log('✅ Agent configurations hot-reloaded')
|
|
@@ -315,7 +328,7 @@ async function main() {
|
|
|
315
328
|
let inputPrompt = ''
|
|
316
329
|
let renderContext: RenderOptions | undefined = {
|
|
317
330
|
exitOnCtrlC: false,
|
|
318
|
-
|
|
331
|
+
|
|
319
332
|
onFlicker() {
|
|
320
333
|
logEvent('tengu_flicker', {})
|
|
321
334
|
},
|
|
@@ -451,8 +464,11 @@ ${commandList}`,
|
|
|
451
464
|
return { version: null as string | null, commands: null as string[] | null }
|
|
452
465
|
})()
|
|
453
466
|
|
|
454
|
-
|
|
455
|
-
|
|
467
|
+
{
|
|
468
|
+
const { render } = await import('ink')
|
|
469
|
+
const { REPL } = await import('../screens/REPL')
|
|
470
|
+
render(
|
|
471
|
+
<REPL
|
|
456
472
|
commands={commands}
|
|
457
473
|
debug={debug}
|
|
458
474
|
initialPrompt={inputPrompt}
|
|
@@ -467,7 +483,8 @@ ${commandList}`,
|
|
|
467
483
|
initialUpdateCommands={updateInfo.commands}
|
|
468
484
|
/>,
|
|
469
485
|
renderContext,
|
|
470
|
-
|
|
486
|
+
)
|
|
487
|
+
}
|
|
471
488
|
}
|
|
472
489
|
},
|
|
473
490
|
)
|
|
@@ -540,7 +557,7 @@ ${commandList}`,
|
|
|
540
557
|
.action(async ({ cwd, global }) => {
|
|
541
558
|
await setup(cwd, false)
|
|
542
559
|
console.log(
|
|
543
|
-
JSON.stringify(
|
|
560
|
+
JSON.stringify(global ? listConfigForCLI(true) : listConfigForCLI(false), null, 2),
|
|
544
561
|
)
|
|
545
562
|
process.exit(0)
|
|
546
563
|
})
|
|
@@ -1039,9 +1056,7 @@ ${commandList}`,
|
|
|
1039
1056
|
function ClaudeDesktopImport() {
|
|
1040
1057
|
const { useState } = reactModule
|
|
1041
1058
|
const [isFinished, setIsFinished] = useState(false)
|
|
1042
|
-
const [importResults, setImportResults] = useState
|
|
1043
|
-
{ name: string; success: boolean }[]
|
|
1044
|
-
>([])
|
|
1059
|
+
const [importResults, setImportResults] = useState([] as { name: string; success: boolean }[])
|
|
1045
1060
|
const [isImporting, setIsImporting] = useState(false)
|
|
1046
1061
|
const theme = getTheme()
|
|
1047
1062
|
|
|
@@ -1367,8 +1382,11 @@ ${commandList}`,
|
|
|
1367
1382
|
}
|
|
1368
1383
|
const fork = getNextAvailableLogForkNumber(date, forkNumber ?? 1, 0)
|
|
1369
1384
|
const isDefaultModel = await isDefaultSlowAndCapableModel()
|
|
1370
|
-
|
|
1371
|
-
|
|
1385
|
+
{
|
|
1386
|
+
const { render } = await import('ink')
|
|
1387
|
+
const { REPL } = await import('../screens/REPL')
|
|
1388
|
+
render(
|
|
1389
|
+
<REPL
|
|
1372
1390
|
initialPrompt=""
|
|
1373
1391
|
messageLogName={date}
|
|
1374
1392
|
initialForkNumber={fork}
|
|
@@ -1382,7 +1400,8 @@ ${commandList}`,
|
|
|
1382
1400
|
isDefaultModel={isDefaultModel}
|
|
1383
1401
|
/>,
|
|
1384
1402
|
{ exitOnCtrlC: false },
|
|
1385
|
-
|
|
1403
|
+
)
|
|
1404
|
+
}
|
|
1386
1405
|
} catch (error) {
|
|
1387
1406
|
logError(`Failed to load conversation: ${error}`)
|
|
1388
1407
|
process.exit(1)
|
package/src/entrypoints/mcp.ts
CHANGED
|
@@ -67,7 +67,7 @@ export async function startMCPServer(cwd: string): Promise<void> {
|
|
|
67
67
|
const tools = await Promise.all(
|
|
68
68
|
MCP_TOOLS.map(async tool => ({
|
|
69
69
|
...tool,
|
|
70
|
-
description: await tool.description(
|
|
70
|
+
description: await tool.description(),
|
|
71
71
|
inputSchema: zodToJsonSchema(tool.inputSchema) as ToolInput,
|
|
72
72
|
})),
|
|
73
73
|
)
|
|
@@ -127,7 +127,6 @@ export async function startMCPServer(cwd: string): Promise<void> {
|
|
|
127
127
|
},
|
|
128
128
|
readFileTimestamps: state.readFileTimestamps,
|
|
129
129
|
},
|
|
130
|
-
hasPermissionsToUseTool,
|
|
131
130
|
)
|
|
132
131
|
|
|
133
132
|
const finalResult = await lastX(result)
|
|
@@ -30,7 +30,6 @@ export function useDoublePress(
|
|
|
30
30
|
} else {
|
|
31
31
|
onFirstPress?.()
|
|
32
32
|
setPending(true)
|
|
33
|
-
// @ts-expect-error: Bun is overloading types here, but we're using the NodeJS runtime
|
|
34
33
|
timeoutRef.current = setTimeout(
|
|
35
34
|
() => setPending(false),
|
|
36
35
|
DOUBLE_PRESS_TIMEOUT_MS,
|
|
@@ -140,7 +140,6 @@ export function useTextInput({
|
|
|
140
140
|
onMessage?.(true, CLIPBOARD_ERROR_MESSAGE)
|
|
141
141
|
maybeClearImagePasteErrorTimeout()
|
|
142
142
|
setImagePasteErrorTimeout(
|
|
143
|
-
// @ts-expect-error: Bun is overloading types here, but we're using the NodeJS runtime
|
|
144
143
|
setTimeout(() => {
|
|
145
144
|
onMessage?.(false)
|
|
146
145
|
}, 4000),
|
|
@@ -263,15 +262,15 @@ export function useTextInput({
|
|
|
263
262
|
switch (true) {
|
|
264
263
|
case key.escape:
|
|
265
264
|
return handleEscape
|
|
266
|
-
case key.leftArrow && (key.ctrl || key.meta || key.fn):
|
|
265
|
+
case key.leftArrow && (key.ctrl || key.meta || ('fn' in key && key.fn)):
|
|
267
266
|
return () => cursor.prevWord()
|
|
268
|
-
case key.rightArrow && (key.ctrl || key.meta || key.fn):
|
|
267
|
+
case key.rightArrow && (key.ctrl || key.meta || ('fn' in key && key.fn)):
|
|
269
268
|
return () => cursor.nextWord()
|
|
270
269
|
case key.ctrl:
|
|
271
270
|
return handleCtrl
|
|
272
|
-
case key.home:
|
|
271
|
+
case 'home' in key && key.home:
|
|
273
272
|
return () => cursor.startOfLine()
|
|
274
|
-
case key.end:
|
|
273
|
+
case 'end' in key && key.end:
|
|
275
274
|
return () => cursor.endOfLine()
|
|
276
275
|
case key.pageDown:
|
|
277
276
|
return () => cursor.endOfLine()
|
|
@@ -1067,7 +1067,7 @@ export function useUnifiedCompletion({
|
|
|
1067
1067
|
})
|
|
1068
1068
|
|
|
1069
1069
|
// Handle navigation keys - simplified and unified
|
|
1070
|
-
useInput((
|
|
1070
|
+
useInput((inputChar, key) => {
|
|
1071
1071
|
// Enter key - confirm selection and end completion (always add space)
|
|
1072
1072
|
if (key.return && state.isActive && state.suggestions.length > 0) {
|
|
1073
1073
|
const selectedSuggestion = state.suggestions[state.selectedIndex]
|
|
@@ -1148,7 +1148,7 @@ export function useUnifiedCompletion({
|
|
|
1148
1148
|
}
|
|
1149
1149
|
|
|
1150
1150
|
// Space key - complete and potentially continue for directories
|
|
1151
|
-
if (
|
|
1151
|
+
if (inputChar === ' ' && state.isActive && state.suggestions.length > 0) {
|
|
1152
1152
|
const selectedSuggestion = state.suggestions[state.selectedIndex]
|
|
1153
1153
|
const isDirectory = selectedSuggestion.value.endsWith('/')
|
|
1154
1154
|
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Unified CLI entry (lightweight)
|
|
2
|
+
// - Development: use `bun run src/entrypoints/cli.tsx`
|
|
3
|
+
// - Production: transpiled to `dist/index.js` and used as bin/main
|
|
4
|
+
|
|
5
|
+
import { createRequire } from 'module'
|
|
6
|
+
const require = createRequire(import.meta.url)
|
|
7
|
+
|
|
8
|
+
function hasFlag(...flags: string[]): boolean {
|
|
9
|
+
return process.argv.some(arg => flags.includes(arg))
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// Minimal pre-parse: handle version/help early without loading heavy UI modules
|
|
13
|
+
if (hasFlag('--version', '-v')) {
|
|
14
|
+
try {
|
|
15
|
+
const pkg = require('../package.json')
|
|
16
|
+
console.log(pkg.version || '')
|
|
17
|
+
} catch {
|
|
18
|
+
console.log('')
|
|
19
|
+
}
|
|
20
|
+
process.exit(0)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (hasFlag('--help-lite')) {
|
|
24
|
+
console.log(`Usage: kode [options] [command] [prompt]\n\n` +
|
|
25
|
+
`Common options:\n` +
|
|
26
|
+
` -h, --help Show full help\n` +
|
|
27
|
+
` -v, --version Show version\n` +
|
|
28
|
+
` -p, --print Print response and exit (non-interactive)\n` +
|
|
29
|
+
` -c, --cwd <cwd> Set working directory`)
|
|
30
|
+
process.exit(0)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// For compatibility, --help loads full CLI help
|
|
34
|
+
await import('./entrypoints/cli.js')
|
package/src/query.ts
CHANGED
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
MessageParam,
|
|
4
4
|
ToolUseBlock,
|
|
5
5
|
} from '@anthropic-ai/sdk/resources/index.mjs'
|
|
6
|
-
import { UUID } from '
|
|
6
|
+
import type { UUID } from './types/common'
|
|
7
7
|
import type { Tool, ToolUseContext } from './Tool'
|
|
8
8
|
import {
|
|
9
9
|
messagePairValidForBinaryFeedback,
|
|
@@ -70,6 +70,9 @@ export type UserMessage = {
|
|
|
70
70
|
options?: {
|
|
71
71
|
isKodingRequest?: boolean
|
|
72
72
|
kodingContext?: string
|
|
73
|
+
isCustomCommand?: boolean
|
|
74
|
+
commandName?: string
|
|
75
|
+
commandArgs?: string
|
|
73
76
|
}
|
|
74
77
|
}
|
|
75
78
|
|
|
@@ -196,8 +199,9 @@ export async function* query(
|
|
|
196
199
|
if (reminders && messages.length > 0) {
|
|
197
200
|
// Find the last user message
|
|
198
201
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
199
|
-
|
|
200
|
-
|
|
202
|
+
const msg = messages[i]
|
|
203
|
+
if (msg?.type === 'user') {
|
|
204
|
+
const lastUserMessage = msg as UserMessage
|
|
201
205
|
messages[i] = {
|
|
202
206
|
...lastUserMessage,
|
|
203
207
|
message: {
|
|
@@ -637,7 +641,7 @@ async function* checkPermissionsAndCallTool(
|
|
|
637
641
|
|
|
638
642
|
// Call the tool
|
|
639
643
|
try {
|
|
640
|
-
const generator = tool.call(normalizedInput as never, context
|
|
644
|
+
const generator = tool.call(normalizedInput as never, context)
|
|
641
645
|
for await (const result of generator) {
|
|
642
646
|
switch (result.type) {
|
|
643
647
|
case 'result':
|
|
@@ -649,13 +653,13 @@ async function* checkPermissionsAndCallTool(
|
|
|
649
653
|
[
|
|
650
654
|
{
|
|
651
655
|
type: 'tool_result',
|
|
652
|
-
content: result.resultForAssistant,
|
|
656
|
+
content: result.resultForAssistant || String(result.data),
|
|
653
657
|
tool_use_id: toolUseID,
|
|
654
658
|
},
|
|
655
659
|
],
|
|
656
660
|
{
|
|
657
661
|
data: result.data,
|
|
658
|
-
resultForAssistant: result.resultForAssistant,
|
|
662
|
+
resultForAssistant: result.resultForAssistant || String(result.data),
|
|
659
663
|
},
|
|
660
664
|
)
|
|
661
665
|
return
|
|
@@ -668,9 +672,10 @@ async function* checkPermissionsAndCallTool(
|
|
|
668
672
|
toolUseID,
|
|
669
673
|
siblingToolUseIDs,
|
|
670
674
|
result.content,
|
|
671
|
-
result.normalizedMessages,
|
|
672
|
-
result.tools,
|
|
675
|
+
result.normalizedMessages || [],
|
|
676
|
+
result.tools || [],
|
|
673
677
|
)
|
|
678
|
+
break
|
|
674
679
|
}
|
|
675
680
|
}
|
|
676
681
|
} catch (error) {
|
package/src/screens/Doctor.tsx
CHANGED
|
@@ -2,7 +2,7 @@ import React, { useCallback, useEffect, useState } from 'react'
|
|
|
2
2
|
import { Box, Text, useInput } from 'ink'
|
|
3
3
|
import { Select } from '../components/CustomSelect/select'
|
|
4
4
|
import { getTheme } from '../utils/theme'
|
|
5
|
-
import { ConfigureNpmPrefix } from './ConfigureNpmPrefix
|
|
5
|
+
import { ConfigureNpmPrefix } from './ConfigureNpmPrefix'
|
|
6
6
|
import { platform } from 'process'
|
|
7
7
|
import {
|
|
8
8
|
checkNpmPermissions,
|
package/src/screens/REPL.tsx
CHANGED
|
@@ -523,7 +523,7 @@ export function REPL({
|
|
|
523
523
|
shouldShowDot={false}
|
|
524
524
|
/>
|
|
525
525
|
) : (
|
|
526
|
-
<MessageResponse
|
|
526
|
+
<MessageResponse children={
|
|
527
527
|
<Message
|
|
528
528
|
message={_.content}
|
|
529
529
|
messages={_.normalizedMessages}
|
|
@@ -541,7 +541,7 @@ export function REPL({
|
|
|
541
541
|
shouldAnimate={false}
|
|
542
542
|
shouldShowDot={false}
|
|
543
543
|
/>
|
|
544
|
-
|
|
544
|
+
} />
|
|
545
545
|
)
|
|
546
546
|
) : (
|
|
547
547
|
<Message
|
|
@@ -618,15 +618,17 @@ export function REPL({
|
|
|
618
618
|
const showingCostDialog = !isLoading && showCostDialog
|
|
619
619
|
|
|
620
620
|
return (
|
|
621
|
-
<PermissionProvider
|
|
622
|
-
{
|
|
623
|
-
|
|
621
|
+
<PermissionProvider
|
|
622
|
+
isBypassPermissionsModeAvailable={!safeMode}
|
|
623
|
+
children={
|
|
624
|
+
<React.Fragment>
|
|
625
|
+
{/* Update banner now renders inside Logo for stable placement */}
|
|
626
|
+
<ModeIndicator />
|
|
624
627
|
<React.Fragment key={`static-messages-${forkNumber}`}>
|
|
625
628
|
<Static
|
|
626
629
|
items={messagesJSX.filter(_ => _.type === 'static')}
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
</Static>
|
|
630
|
+
children={_ => ((_ as any).jsx)}
|
|
631
|
+
/>
|
|
630
632
|
</React.Fragment>
|
|
631
633
|
{messagesJSX.filter(_ => _.type === 'transient').map(_ => _.jsx)}
|
|
632
634
|
<Box
|
|
@@ -767,7 +769,9 @@ export function REPL({
|
|
|
767
769
|
)}
|
|
768
770
|
{/** Fix occasional rendering artifact */}
|
|
769
771
|
<Newline />
|
|
770
|
-
|
|
772
|
+
</React.Fragment>
|
|
773
|
+
}
|
|
774
|
+
/>
|
|
771
775
|
)
|
|
772
776
|
}
|
|
773
777
|
|
package/src/services/openai.ts
CHANGED
|
@@ -608,7 +608,13 @@ export async function getCompletionWithProfile(
|
|
|
608
608
|
// 🔥 NEW: Parse error message to detect and handle specific API errors
|
|
609
609
|
try {
|
|
610
610
|
const errorData = await response.json()
|
|
611
|
-
|
|
611
|
+
// Type guard for error data structure
|
|
612
|
+
const hasError = (data: unknown): data is { error?: { message?: string }; message?: string } => {
|
|
613
|
+
return typeof data === 'object' && data !== null
|
|
614
|
+
}
|
|
615
|
+
const errorMessage = hasError(errorData)
|
|
616
|
+
? (errorData.error?.message || errorData.message || `HTTP ${response.status}`)
|
|
617
|
+
: `HTTP ${response.status}`
|
|
612
618
|
|
|
613
619
|
// Check if this is a parameter error that we can fix
|
|
614
620
|
const isGPT5 = opts.model.startsWith('gpt-5')
|
|
@@ -740,7 +746,13 @@ export async function getCompletionWithProfile(
|
|
|
740
746
|
// 🔥 NEW: Parse error message to detect and handle specific API errors
|
|
741
747
|
try {
|
|
742
748
|
const errorData = await response.json()
|
|
743
|
-
|
|
749
|
+
// Type guard for error data structure
|
|
750
|
+
const hasError = (data: unknown): data is { error?: { message?: string }; message?: string } => {
|
|
751
|
+
return typeof data === 'object' && data !== null
|
|
752
|
+
}
|
|
753
|
+
const errorMessage = hasError(errorData)
|
|
754
|
+
? (errorData.error?.message || errorData.message || `HTTP ${response.status}`)
|
|
755
|
+
: `HTTP ${response.status}`
|
|
744
756
|
|
|
745
757
|
// Check if this is a parameter error that we can fix
|
|
746
758
|
const isGPT5 = opts.model.startsWith('gpt-5')
|
|
@@ -1285,16 +1297,25 @@ export async function fetchCustomModels(
|
|
|
1285
1297
|
|
|
1286
1298
|
const data = await response.json()
|
|
1287
1299
|
|
|
1300
|
+
// Type guards for different API response formats
|
|
1301
|
+
const hasDataArray = (obj: unknown): obj is { data: unknown[] } => {
|
|
1302
|
+
return typeof obj === 'object' && obj !== null && 'data' in obj && Array.isArray((obj as any).data)
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
const hasModelsArray = (obj: unknown): obj is { models: unknown[] } => {
|
|
1306
|
+
return typeof obj === 'object' && obj !== null && 'models' in obj && Array.isArray((obj as any).models)
|
|
1307
|
+
}
|
|
1308
|
+
|
|
1288
1309
|
// Validate response format and extract models array
|
|
1289
1310
|
let models = []
|
|
1290
1311
|
|
|
1291
|
-
if (
|
|
1312
|
+
if (hasDataArray(data)) {
|
|
1292
1313
|
// Standard OpenAI format: { data: [...] }
|
|
1293
1314
|
models = data.data
|
|
1294
1315
|
} else if (Array.isArray(data)) {
|
|
1295
1316
|
// Direct array format
|
|
1296
1317
|
models = data
|
|
1297
|
-
} else if (
|
|
1318
|
+
} else if (hasModelsArray(data)) {
|
|
1298
1319
|
// Alternative format: { models: [...] }
|
|
1299
1320
|
models = data.models
|
|
1300
1321
|
} else {
|
|
@@ -57,7 +57,7 @@ export const ArchitectTool = {
|
|
|
57
57
|
needsPermissions() {
|
|
58
58
|
return false
|
|
59
59
|
},
|
|
60
|
-
async *call({ prompt, context }, toolUseContext
|
|
60
|
+
async *call({ prompt, context }, toolUseContext) {
|
|
61
61
|
const content = context
|
|
62
62
|
? `<context>${context}</context>\n\n${prompt}`
|
|
63
63
|
: prompt
|
|
@@ -67,10 +67,13 @@ export const ArchitectTool = {
|
|
|
67
67
|
const messages: Message[] = [userMessage]
|
|
68
68
|
|
|
69
69
|
// We only allow the file exploration tools to be used in the architect tool
|
|
70
|
-
const allowedTools = (toolUseContext.options
|
|
70
|
+
const allowedTools = (toolUseContext.options?.tools ?? []).filter(_ =>
|
|
71
71
|
FS_EXPLORATION_TOOLS.map(_ => _.name).includes(_.name),
|
|
72
72
|
)
|
|
73
73
|
|
|
74
|
+
// Create a dummy canUseTool function since this tool controls its own tool usage
|
|
75
|
+
const canUseTool = async () => ({ result: true as const })
|
|
76
|
+
|
|
74
77
|
const lastResponse = await lastX(
|
|
75
78
|
query(
|
|
76
79
|
messages,
|
|
@@ -79,7 +82,17 @@ export const ArchitectTool = {
|
|
|
79
82
|
canUseTool,
|
|
80
83
|
{
|
|
81
84
|
...toolUseContext,
|
|
82
|
-
|
|
85
|
+
setToolJSX: () => {}, // Dummy function since ArchitectTool doesn't use UI
|
|
86
|
+
options: {
|
|
87
|
+
commands: toolUseContext.options?.commands || [],
|
|
88
|
+
forkNumber: toolUseContext.options?.forkNumber || 0,
|
|
89
|
+
messageLogName: toolUseContext.options?.messageLogName || 'default',
|
|
90
|
+
verbose: toolUseContext.options?.verbose || false,
|
|
91
|
+
safeMode: toolUseContext.options?.safeMode || false,
|
|
92
|
+
maxThinkingTokens: toolUseContext.options?.maxThinkingTokens || 0,
|
|
93
|
+
...toolUseContext.options,
|
|
94
|
+
tools: allowedTools
|
|
95
|
+
},
|
|
83
96
|
},
|
|
84
97
|
),
|
|
85
98
|
)
|
|
@@ -98,8 +111,8 @@ export const ArchitectTool = {
|
|
|
98
111
|
async prompt() {
|
|
99
112
|
return DESCRIPTION
|
|
100
113
|
},
|
|
101
|
-
renderResultForAssistant(data) {
|
|
102
|
-
return data
|
|
114
|
+
renderResultForAssistant(data: TextBlock[]): string {
|
|
115
|
+
return data.map(block => block.text).join('\n')
|
|
103
116
|
},
|
|
104
117
|
renderToolUseMessage(input) {
|
|
105
118
|
return Object.entries(input)
|
|
@@ -146,7 +146,7 @@ Question: What are the most effective React optimization techniques for handling
|
|
|
146
146
|
}
|
|
147
147
|
} catch (e) {
|
|
148
148
|
// If we can't determine current model, allow the request
|
|
149
|
-
debugLogger('AskExpertModel', 'Could not determine current model
|
|
149
|
+
debugLogger.error('AskExpertModel', { message: 'Could not determine current model', error: e })
|
|
150
150
|
}
|
|
151
151
|
|
|
152
152
|
// Validate that the model exists and is available
|
|
@@ -169,7 +169,8 @@ Question: What are the most effective React optimization techniques for handling
|
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
171
|
} catch (error) {
|
|
172
|
-
|
|
172
|
+
console.error('Model validation error in AskExpertModelTool:', error)
|
|
173
|
+
logError(error)
|
|
173
174
|
return {
|
|
174
175
|
result: false,
|
|
175
176
|
message: `Failed to validate expert model '${expert_model}'. Please check your model configuration.`,
|
|
@@ -303,7 +304,8 @@ ${output.expertAnswer}`
|
|
|
303
304
|
const session = createExpertChatSession(expertModel)
|
|
304
305
|
sessionId = session.sessionId
|
|
305
306
|
} catch (error) {
|
|
306
|
-
|
|
307
|
+
console.error('Failed to create new expert chat session:', error)
|
|
308
|
+
logError(error)
|
|
307
309
|
throw new Error('Failed to create new chat session')
|
|
308
310
|
}
|
|
309
311
|
} else {
|
|
@@ -316,16 +318,15 @@ ${output.expertAnswer}`
|
|
|
316
318
|
sessionId = newSession.sessionId
|
|
317
319
|
}
|
|
318
320
|
} catch (error) {
|
|
319
|
-
|
|
321
|
+
console.error('Failed to load expert chat session:', error)
|
|
322
|
+
logError(error)
|
|
320
323
|
// Fallback: create new session
|
|
321
324
|
try {
|
|
322
325
|
const newSession = createExpertChatSession(expertModel)
|
|
323
326
|
sessionId = newSession.sessionId
|
|
324
327
|
} catch (createError) {
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
createError,
|
|
328
|
-
)
|
|
328
|
+
console.error('Failed to create fallback expert chat session:', createError)
|
|
329
|
+
logError(createError)
|
|
329
330
|
throw new Error('Unable to create or load chat session')
|
|
330
331
|
}
|
|
331
332
|
}
|
|
@@ -341,7 +342,8 @@ ${output.expertAnswer}`
|
|
|
341
342
|
try {
|
|
342
343
|
historyMessages = getSessionMessages(sessionId)
|
|
343
344
|
} catch (error) {
|
|
344
|
-
|
|
345
|
+
console.error('Failed to load session messages:', error)
|
|
346
|
+
logError(error)
|
|
345
347
|
historyMessages = [] // Fallback to empty history
|
|
346
348
|
}
|
|
347
349
|
|
|
@@ -355,7 +357,8 @@ ${output.expertAnswer}`
|
|
|
355
357
|
: createAssistantMessage(msg.content),
|
|
356
358
|
)
|
|
357
359
|
} catch (error) {
|
|
358
|
-
|
|
360
|
+
console.error('Failed to create system messages:', error)
|
|
361
|
+
logError(error)
|
|
359
362
|
throw new Error('Failed to prepare conversation messages')
|
|
360
363
|
}
|
|
361
364
|
|
|
@@ -414,7 +417,8 @@ ${output.expertAnswer}`
|
|
|
414
417
|
timeoutPromise
|
|
415
418
|
])
|
|
416
419
|
} catch (error: any) {
|
|
417
|
-
|
|
420
|
+
console.error('Expert model query failed:', error)
|
|
421
|
+
logError(error)
|
|
418
422
|
|
|
419
423
|
// Check for specific error types
|
|
420
424
|
if (
|
|
@@ -496,7 +500,8 @@ ${output.expertAnswer}`
|
|
|
496
500
|
throw new Error('Expert response was empty')
|
|
497
501
|
}
|
|
498
502
|
} catch (error) {
|
|
499
|
-
|
|
503
|
+
console.error('Failed to extract expert answer:', error)
|
|
504
|
+
logError(error)
|
|
500
505
|
throw new Error('Failed to process expert response')
|
|
501
506
|
}
|
|
502
507
|
|
|
@@ -505,7 +510,8 @@ ${output.expertAnswer}`
|
|
|
505
510
|
addMessageToSession(sessionId, 'user', question)
|
|
506
511
|
addMessageToSession(sessionId, 'assistant', expertAnswer)
|
|
507
512
|
} catch (error) {
|
|
508
|
-
|
|
513
|
+
console.error('Failed to save conversation to session:', error)
|
|
514
|
+
logError(error)
|
|
509
515
|
// Don't throw here - we got a valid response, saving is non-critical
|
|
510
516
|
}
|
|
511
517
|
|
|
@@ -530,7 +536,8 @@ ${output.expertAnswer}`
|
|
|
530
536
|
return yield* this.handleInterrupt()
|
|
531
537
|
}
|
|
532
538
|
|
|
533
|
-
|
|
539
|
+
console.error('AskExpertModelTool execution failed:', error)
|
|
540
|
+
logError(error)
|
|
534
541
|
|
|
535
542
|
// Ensure we have a valid sessionId for error response
|
|
536
543
|
const errorSessionId = sessionId || 'error-session'
|
|
@@ -6,6 +6,7 @@ import * as React from 'react'
|
|
|
6
6
|
import { z } from 'zod'
|
|
7
7
|
import { FileEditToolUpdatedMessage } from '../../components/FileEditToolUpdatedMessage'
|
|
8
8
|
import { StructuredDiff } from '../../components/StructuredDiff'
|
|
9
|
+
import { FallbackToolUseRejectedMessage } from '../../components/FallbackToolUseRejectedMessage'
|
|
9
10
|
import { logEvent } from '../../services/statsig'
|
|
10
11
|
import { Tool, ValidationResult } from '../../Tool'
|
|
11
12
|
import { intersperse } from '../../utils/array'
|
|
@@ -76,10 +77,13 @@ export const FileEditTool = {
|
|
|
76
77
|
)
|
|
77
78
|
},
|
|
78
79
|
renderToolUseRejectedMessage(
|
|
79
|
-
{ file_path, old_string, new_string },
|
|
80
|
-
{ columns, verbose },
|
|
80
|
+
{ file_path, old_string, new_string }: any = {},
|
|
81
|
+
{ columns, verbose }: any = {},
|
|
81
82
|
) {
|
|
82
83
|
try {
|
|
84
|
+
if (!file_path) {
|
|
85
|
+
return <FallbackToolUseRejectedMessage />
|
|
86
|
+
}
|
|
83
87
|
const { patch } = applyEdit(file_path, old_string, new_string)
|
|
84
88
|
return (
|
|
85
89
|
<Box flexDirection="column">
|
|
@@ -8,6 +8,7 @@ import { z } from 'zod'
|
|
|
8
8
|
import { FileEditToolUpdatedMessage } from '../../components/FileEditToolUpdatedMessage'
|
|
9
9
|
import { HighlightedCode } from '../../components/HighlightedCode'
|
|
10
10
|
import { StructuredDiff } from '../../components/StructuredDiff'
|
|
11
|
+
import { FallbackToolUseRejectedMessage } from '../../components/FallbackToolUseRejectedMessage'
|
|
11
12
|
import { logEvent } from '../../services/statsig'
|
|
12
13
|
import type { Tool } from '../../Tool'
|
|
13
14
|
import { intersperse } from '../../utils/array'
|
|
@@ -67,8 +68,11 @@ export const FileWriteTool = {
|
|
|
67
68
|
renderToolUseMessage(input, { verbose }) {
|
|
68
69
|
return `file_path: ${verbose ? input.file_path : relative(getCwd(), input.file_path)}`
|
|
69
70
|
},
|
|
70
|
-
renderToolUseRejectedMessage({ file_path, content }, { columns, verbose }) {
|
|
71
|
+
renderToolUseRejectedMessage({ file_path, content }: any = {}, { columns, verbose }: any = {}) {
|
|
71
72
|
try {
|
|
73
|
+
if (!file_path) {
|
|
74
|
+
return <FallbackToolUseRejectedMessage />
|
|
75
|
+
}
|
|
72
76
|
const fullFilePath = isAbsolute(file_path)
|
|
73
77
|
? file_path
|
|
74
78
|
: resolve(getCwd(), file_path)
|
|
@@ -120,9 +124,9 @@ export const FileWriteTool = {
|
|
|
120
124
|
}
|
|
121
125
|
},
|
|
122
126
|
renderToolResultMessage(
|
|
123
|
-
{ filePath, content, structuredPatch, type }
|
|
124
|
-
{ verbose },
|
|
127
|
+
{ filePath, content, structuredPatch, type }
|
|
125
128
|
) {
|
|
129
|
+
const verbose = false // Default to false since verbose is no longer passed
|
|
126
130
|
switch (type) {
|
|
127
131
|
case 'create': {
|
|
128
132
|
const contentWithFallback = content || '(No content)'
|