@shareai-lab/kode 1.2.0 → 2.0.2
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/README.md +25 -388
- package/cli-acp.js +82 -0
- package/cli.js +89 -79
- package/dist/REPL-GIU4ZIXM.js +42 -0
- package/dist/acp-H3VJ77YG.js +1357 -0
- package/dist/acp-H3VJ77YG.js.map +7 -0
- package/dist/agentsValidate-XP3CFN6F.js +373 -0
- package/dist/agentsValidate-XP3CFN6F.js.map +7 -0
- package/dist/ask-3G5H5KD5.js +125 -0
- package/dist/ask-3G5H5KD5.js.map +7 -0
- package/dist/autoUpdater-DNRMJWFQ.js +17 -0
- package/dist/chunk-2KWKUXLT.js +490 -0
- package/dist/chunk-2KWKUXLT.js.map +7 -0
- package/dist/chunk-2PMO2FS2.js +1097 -0
- package/dist/chunk-2PMO2FS2.js.map +7 -0
- package/dist/chunk-3RUXVV4S.js +23 -0
- package/dist/chunk-3RUXVV4S.js.map +7 -0
- package/dist/chunk-3TXNP6HH.js +240 -0
- package/dist/chunk-3TXNP6HH.js.map +7 -0
- package/dist/chunk-4GAIJGRH.js +472 -0
- package/dist/chunk-4GAIJGRH.js.map +7 -0
- package/dist/chunk-4RTX4AG4.js +249 -0
- package/dist/chunk-4RTX4AG4.js.map +7 -0
- package/dist/chunk-54DNHKOD.js +511 -0
- package/dist/chunk-54DNHKOD.js.map +7 -0
- package/dist/chunk-67PY5IX6.js +34 -0
- package/dist/chunk-67PY5IX6.js.map +7 -0
- package/dist/chunk-6DRDLOLP.js +2613 -0
- package/dist/chunk-6DRDLOLP.js.map +7 -0
- package/dist/chunk-7CQVZNQV.js +1609 -0
- package/dist/chunk-7CQVZNQV.js.map +7 -0
- package/dist/chunk-ABLVTESJ.js +19 -0
- package/dist/chunk-ABLVTESJ.js.map +7 -0
- package/dist/{utils/config.js → chunk-AIMIPK4B.js} +351 -171
- package/dist/chunk-AIMIPK4B.js.map +7 -0
- package/dist/{utils/autoUpdater.js → chunk-BHGTA6JQ.js} +38 -21
- package/dist/chunk-BHGTA6JQ.js.map +7 -0
- package/dist/chunk-CIG63V4E.js +72 -0
- package/dist/chunk-CIG63V4E.js.map +7 -0
- package/dist/chunk-E6YNABER.js +24 -0
- package/dist/chunk-E6YNABER.js.map +7 -0
- package/dist/chunk-EH34V7CY.js +191 -0
- package/dist/chunk-EH34V7CY.js.map +7 -0
- package/dist/{cost-tracker.js → chunk-EZXMVTDU.js} +51 -32
- package/dist/chunk-EZXMVTDU.js.map +7 -0
- package/dist/chunk-FH5CHM6L.js +148 -0
- package/dist/chunk-FH5CHM6L.js.map +7 -0
- package/dist/chunk-G6I7XROM.js +138 -0
- package/dist/chunk-G6I7XROM.js.map +7 -0
- package/dist/chunk-HN4E4UUQ.js +96 -0
- package/dist/chunk-HN4E4UUQ.js.map +7 -0
- package/dist/chunk-HSPVVDIW.js +30198 -0
- package/dist/chunk-HSPVVDIW.js.map +7 -0
- package/dist/{services/systemReminder.js → chunk-IE2CG2TV.js} +221 -59
- package/dist/chunk-IE2CG2TV.js.map +7 -0
- package/dist/chunk-JC6NCUG5.js +11 -0
- package/dist/chunk-K2MI4TPB.js +1256 -0
- package/dist/chunk-K2MI4TPB.js.map +7 -0
- package/dist/chunk-KAA5BGMQ.js +12 -0
- package/dist/chunk-KAA5BGMQ.js.map +7 -0
- package/dist/chunk-MN77D2F7.js +2931 -0
- package/dist/chunk-MN77D2F7.js.map +7 -0
- package/dist/chunk-NPFOMITO.js +21 -0
- package/dist/chunk-NPFOMITO.js.map +7 -0
- package/dist/chunk-NQLEUHMS.js +196 -0
- package/dist/chunk-NQLEUHMS.js.map +7 -0
- package/dist/chunk-OIFQB3S4.js +515 -0
- package/dist/chunk-OIFQB3S4.js.map +7 -0
- package/dist/chunk-OWTG2W3A.js +164 -0
- package/dist/chunk-OWTG2W3A.js.map +7 -0
- package/dist/chunk-OZNRLY3E.js +735 -0
- package/dist/chunk-OZNRLY3E.js.map +7 -0
- package/dist/{utils/debugLogger.js → chunk-QYFKRZQC.js} +107 -204
- package/dist/chunk-QYFKRZQC.js.map +7 -0
- package/dist/chunk-S3J2TLV6.js +16 -0
- package/dist/chunk-S3J2TLV6.js.map +7 -0
- package/dist/chunk-S6HRABTA.js +95 -0
- package/dist/chunk-S6HRABTA.js.map +7 -0
- package/dist/{utils/theme.js → chunk-SDGKPKDK.js} +28 -6
- package/dist/chunk-SDGKPKDK.js.map +7 -0
- package/dist/chunk-SRZZFAS7.js +766 -0
- package/dist/chunk-SRZZFAS7.js.map +7 -0
- package/dist/chunk-UKHTVRJM.js +47 -0
- package/dist/chunk-UKHTVRJM.js.map +7 -0
- package/dist/chunk-UYXEDKOZ.js +24 -0
- package/dist/chunk-UYXEDKOZ.js.map +7 -0
- package/dist/chunk-VBXVYQYY.js +145 -0
- package/dist/chunk-VBXVYQYY.js.map +7 -0
- package/dist/chunk-WVHORZQ5.js +17 -0
- package/dist/chunk-WVHORZQ5.js.map +7 -0
- package/dist/chunk-WWUWDNWW.js +49 -0
- package/dist/chunk-WWUWDNWW.js.map +7 -0
- package/dist/{utils/model.js → chunk-Z33T5YN5.js} +194 -227
- package/dist/chunk-Z33T5YN5.js.map +7 -0
- package/dist/{services/openai.js → chunk-ZQU3TXLC.js} +168 -234
- package/dist/chunk-ZQU3TXLC.js.map +7 -0
- package/dist/cli-SRV2INSL.js +3917 -0
- package/dist/cli-SRV2INSL.js.map +7 -0
- package/dist/commands-TWH6PGVG.js +46 -0
- package/dist/config-6ZMBCL23.js +81 -0
- package/dist/context-JQIOOI4W.js +30 -0
- package/dist/costTracker-6SL26FDB.js +19 -0
- package/dist/customCommands-DNEJS3ZU.js +25 -0
- package/dist/customCommands-DNEJS3ZU.js.map +7 -0
- package/dist/env-OFAXZ3XG.js +22 -0
- package/dist/env-OFAXZ3XG.js.map +7 -0
- package/dist/index.js +34 -5
- package/dist/index.js.map +4 -4
- package/dist/kodeAgentSessionId-X6XWQW7B.js +13 -0
- package/dist/kodeAgentSessionId-X6XWQW7B.js.map +7 -0
- package/dist/kodeAgentSessionLoad-6N27AC5K.js +18 -0
- package/dist/kodeAgentSessionLoad-6N27AC5K.js.map +7 -0
- package/dist/kodeAgentSessionResume-HUSAEO24.js +16 -0
- package/dist/kodeAgentSessionResume-HUSAEO24.js.map +7 -0
- package/dist/kodeAgentStreamJson-NXFN7TXH.js +13 -0
- package/dist/kodeAgentStreamJson-NXFN7TXH.js.map +7 -0
- package/dist/kodeAgentStreamJsonSession-GRWG3SPE.js +131 -0
- package/dist/kodeAgentStreamJsonSession-GRWG3SPE.js.map +7 -0
- package/dist/kodeAgentStructuredStdio-HGWJT7CU.js +10 -0
- package/dist/kodeAgentStructuredStdio-HGWJT7CU.js.map +7 -0
- package/dist/kodeHooks-TDMXFWSO.js +36 -0
- package/dist/kodeHooks-TDMXFWSO.js.map +7 -0
- package/dist/llm-XVXWYOHK.js +3118 -0
- package/dist/llm-XVXWYOHK.js.map +7 -0
- package/dist/llmLazy-7TD5N7XP.js +15 -0
- package/dist/llmLazy-7TD5N7XP.js.map +7 -0
- package/dist/loader-AUXIJTY6.js +28 -0
- package/dist/loader-AUXIJTY6.js.map +7 -0
- package/dist/mcp-BXJ3K7NZ.js +49 -0
- package/dist/mcp-BXJ3K7NZ.js.map +7 -0
- package/dist/{services/mentionProcessor.js → mentionProcessor-YD7YXYGF.js} +61 -50
- package/dist/mentionProcessor-YD7YXYGF.js.map +7 -0
- package/dist/messages-OFUJSPRV.js +63 -0
- package/dist/messages-OFUJSPRV.js.map +7 -0
- package/dist/model-KPYCXWBK.js +30 -0
- package/dist/model-KPYCXWBK.js.map +7 -0
- package/dist/openai-5G5D5Q4B.js +29 -0
- package/dist/openai-5G5D5Q4B.js.map +7 -0
- package/dist/outputStyles-HLDXFQK3.js +28 -0
- package/dist/outputStyles-HLDXFQK3.js.map +7 -0
- package/dist/package.json +1 -1
- package/dist/pluginRuntime-FPTKK6NY.js +218 -0
- package/dist/pluginRuntime-FPTKK6NY.js.map +7 -0
- package/dist/pluginValidation-DSFXZ4GF.js +17 -0
- package/dist/pluginValidation-DSFXZ4GF.js.map +7 -0
- package/dist/prompts-LWLAJRS2.js +48 -0
- package/dist/prompts-LWLAJRS2.js.map +7 -0
- package/dist/query-HVPWL27C.js +50 -0
- package/dist/query-HVPWL27C.js.map +7 -0
- package/dist/responsesStreaming-AW344PQO.js +10 -0
- package/dist/responsesStreaming-AW344PQO.js.map +7 -0
- package/dist/ripgrep-YOPCY2GO.js +17 -0
- package/dist/ripgrep-YOPCY2GO.js.map +7 -0
- package/dist/skillMarketplace-PSNKDINM.js +37 -0
- package/dist/skillMarketplace-PSNKDINM.js.map +7 -0
- package/dist/state-KNRWP3FO.js +16 -0
- package/dist/state-KNRWP3FO.js.map +7 -0
- package/dist/theme-7S2QN2FO.js +14 -0
- package/dist/theme-7S2QN2FO.js.map +7 -0
- package/dist/toolPermissionContext-65L65VEZ.js +17 -0
- package/dist/toolPermissionContext-65L65VEZ.js.map +7 -0
- package/dist/toolPermissionSettings-GPOBH4IV.js +18 -0
- package/dist/toolPermissionSettings-GPOBH4IV.js.map +7 -0
- package/dist/tools-FZU2FZBD.js +47 -0
- package/dist/tools-FZU2FZBD.js.map +7 -0
- package/dist/userInput-VHNBN2MW.js +311 -0
- package/dist/userInput-VHNBN2MW.js.map +7 -0
- package/dist/uuid-QN2CNKKN.js +9 -0
- package/dist/uuid-QN2CNKKN.js.map +7 -0
- package/package.json +43 -14
- package/scripts/binary-utils.cjs +62 -0
- package/scripts/cli-acp-wrapper.cjs +82 -0
- package/scripts/cli-wrapper.cjs +105 -0
- package/scripts/postinstall.js +135 -9
- package/LICENSE +0 -201
- package/README.zh-CN.md +0 -312
- package/dist/ProjectOnboarding.js +0 -99
- package/dist/ProjectOnboarding.js.map +0 -7
- package/dist/Tool.js +0 -1
- package/dist/commands/agents.js +0 -2087
- package/dist/commands/agents.js.map +0 -7
- package/dist/commands/approvedTools.js +0 -36
- package/dist/commands/approvedTools.js.map +0 -7
- package/dist/commands/bug.js +0 -21
- package/dist/commands/bug.js.map +0 -7
- package/dist/commands/clear.js +0 -37
- package/dist/commands/clear.js.map +0 -7
- package/dist/commands/compact.js +0 -104
- package/dist/commands/compact.js.map +0 -7
- package/dist/commands/config.js +0 -20
- package/dist/commands/config.js.map +0 -7
- package/dist/commands/cost.js +0 -19
- package/dist/commands/cost.js.map +0 -7
- package/dist/commands/ctx_viz.js +0 -152
- package/dist/commands/ctx_viz.js.map +0 -7
- package/dist/commands/doctor.js +0 -25
- package/dist/commands/doctor.js.map +0 -7
- package/dist/commands/help.js +0 -20
- package/dist/commands/help.js.map +0 -7
- package/dist/commands/init.js +0 -38
- package/dist/commands/init.js.map +0 -7
- package/dist/commands/listen.js +0 -37
- package/dist/commands/listen.js.map +0 -7
- package/dist/commands/login.js +0 -37
- package/dist/commands/login.js.map +0 -7
- package/dist/commands/logout.js +0 -33
- package/dist/commands/logout.js.map +0 -7
- package/dist/commands/mcp.js +0 -34
- package/dist/commands/mcp.js.map +0 -7
- package/dist/commands/model.js +0 -41
- package/dist/commands/model.js.map +0 -7
- package/dist/commands/modelstatus.js +0 -21
- package/dist/commands/modelstatus.js.map +0 -7
- package/dist/commands/onboarding.js +0 -36
- package/dist/commands/onboarding.js.map +0 -7
- package/dist/commands/pr_comments.js +0 -61
- package/dist/commands/pr_comments.js.map +0 -7
- package/dist/commands/refreshCommands.js +0 -37
- package/dist/commands/refreshCommands.js.map +0 -7
- package/dist/commands/release-notes.js +0 -30
- package/dist/commands/release-notes.js.map +0 -7
- package/dist/commands/resume.js +0 -35
- package/dist/commands/resume.js.map +0 -7
- package/dist/commands/review.js +0 -51
- package/dist/commands/review.js.map +0 -7
- package/dist/commands/terminalSetup.js +0 -163
- package/dist/commands/terminalSetup.js.map +0 -7
- package/dist/commands.js +0 -84
- package/dist/commands.js.map +0 -7
- package/dist/components/ApproveApiKey.js +0 -74
- package/dist/components/ApproveApiKey.js.map +0 -7
- package/dist/components/AsciiLogo.js +0 -12
- package/dist/components/AsciiLogo.js.map +0 -7
- package/dist/components/AutoUpdater.js +0 -74
- package/dist/components/AutoUpdater.js.map +0 -7
- package/dist/components/Bug.js +0 -147
- package/dist/components/Bug.js.map +0 -7
- package/dist/components/Config.js +0 -166
- package/dist/components/Config.js.map +0 -7
- package/dist/components/ConsoleOAuthFlow.js +0 -188
- package/dist/components/ConsoleOAuthFlow.js.map +0 -7
- package/dist/components/Cost.js +0 -13
- package/dist/components/Cost.js.map +0 -7
- package/dist/components/CostThresholdDialog.js +0 -38
- package/dist/components/CostThresholdDialog.js.map +0 -7
- package/dist/components/CustomSelect/option-map.js +0 -32
- package/dist/components/CustomSelect/option-map.js.map +0 -7
- package/dist/components/CustomSelect/select-option.js +0 -34
- package/dist/components/CustomSelect/select-option.js.map +0 -7
- package/dist/components/CustomSelect/select.js +0 -64
- package/dist/components/CustomSelect/select.js.map +0 -7
- package/dist/components/CustomSelect/theme.js +0 -1
- package/dist/components/CustomSelect/use-select-state.js +0 -220
- package/dist/components/CustomSelect/use-select-state.js.map +0 -7
- package/dist/components/CustomSelect/use-select.js +0 -21
- package/dist/components/CustomSelect/use-select.js.map +0 -7
- package/dist/components/FallbackToolUseRejectedMessage.js +0 -11
- package/dist/components/FallbackToolUseRejectedMessage.js.map +0 -7
- package/dist/components/FileEditToolUpdatedMessage.js +0 -32
- package/dist/components/FileEditToolUpdatedMessage.js.map +0 -7
- package/dist/components/Help.js +0 -41
- package/dist/components/Help.js.map +0 -7
- package/dist/components/HighlightedCode.js +0 -30
- package/dist/components/HighlightedCode.js.map +0 -7
- package/dist/components/InvalidConfigDialog.js +0 -83
- package/dist/components/InvalidConfigDialog.js.map +0 -7
- package/dist/components/Link.js +0 -18
- package/dist/components/Link.js.map +0 -7
- package/dist/components/LogSelector.js +0 -50
- package/dist/components/LogSelector.js.map +0 -7
- package/dist/components/Logo.js +0 -94
- package/dist/components/Logo.js.map +0 -7
- package/dist/components/MCPServerApprovalDialog.js +0 -79
- package/dist/components/MCPServerApprovalDialog.js.map +0 -7
- package/dist/components/MCPServerDialogCopy.js +0 -11
- package/dist/components/MCPServerDialogCopy.js.map +0 -7
- package/dist/components/MCPServerMultiselectDialog.js +0 -80
- package/dist/components/MCPServerMultiselectDialog.js.map +0 -7
- package/dist/components/Message.js +0 -146
- package/dist/components/Message.js.map +0 -7
- package/dist/components/MessageResponse.js +0 -9
- package/dist/components/MessageResponse.js.map +0 -7
- package/dist/components/MessageSelector.js +0 -133
- package/dist/components/MessageSelector.js.map +0 -7
- package/dist/components/ModeIndicator.js +0 -38
- package/dist/components/ModeIndicator.js.map +0 -7
- package/dist/components/ModelConfig.js +0 -208
- package/dist/components/ModelConfig.js.map +0 -7
- package/dist/components/ModelListManager.js +0 -140
- package/dist/components/ModelListManager.js.map +0 -7
- package/dist/components/ModelSelector.js +0 -1985
- package/dist/components/ModelSelector.js.map +0 -7
- package/dist/components/ModelStatusDisplay.js +0 -87
- package/dist/components/ModelStatusDisplay.js.map +0 -7
- package/dist/components/Onboarding.js +0 -153
- package/dist/components/Onboarding.js.map +0 -7
- package/dist/components/PressEnterToContinue.js +0 -10
- package/dist/components/PressEnterToContinue.js.map +0 -7
- package/dist/components/PromptInput.js +0 -488
- package/dist/components/PromptInput.js.map +0 -7
- package/dist/components/SentryErrorBoundary.js +0 -27
- package/dist/components/SentryErrorBoundary.js.map +0 -7
- package/dist/components/Spinner.js +0 -101
- package/dist/components/Spinner.js.map +0 -7
- package/dist/components/StickerRequestForm.js +0 -7
- package/dist/components/StickerRequestForm.js.map +0 -7
- package/dist/components/StructuredDiff.js +0 -148
- package/dist/components/StructuredDiff.js.map +0 -7
- package/dist/components/TextInput.js +0 -100
- package/dist/components/TextInput.js.map +0 -7
- package/dist/components/TodoItem.js +0 -35
- package/dist/components/TodoItem.js.map +0 -7
- package/dist/components/TokenWarning.js +0 -19
- package/dist/components/TokenWarning.js.map +0 -7
- package/dist/components/ToolUseLoader.js +0 -24
- package/dist/components/ToolUseLoader.js.map +0 -7
- package/dist/components/TrustDialog.js +0 -76
- package/dist/components/TrustDialog.js.map +0 -7
- package/dist/components/binary-feedback/BinaryFeedback.js +0 -50
- package/dist/components/binary-feedback/BinaryFeedback.js.map +0 -7
- package/dist/components/binary-feedback/BinaryFeedbackOption.js +0 -94
- package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +0 -7
- package/dist/components/binary-feedback/BinaryFeedbackView.js +0 -139
- package/dist/components/binary-feedback/BinaryFeedbackView.js.map +0 -7
- package/dist/components/binary-feedback/utils.js +0 -161
- package/dist/components/binary-feedback/utils.js.map +0 -7
- package/dist/components/messages/AssistantBashOutputMessage.js +0 -23
- package/dist/components/messages/AssistantBashOutputMessage.js.map +0 -7
- package/dist/components/messages/AssistantLocalCommandOutputMessage.js +0 -36
- package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +0 -7
- package/dist/components/messages/AssistantRedactedThinkingMessage.js +0 -12
- package/dist/components/messages/AssistantRedactedThinkingMessage.js.map +0 -7
- package/dist/components/messages/AssistantTextMessage.js +0 -78
- package/dist/components/messages/AssistantTextMessage.js.map +0 -7
- package/dist/components/messages/AssistantThinkingMessage.js +0 -27
- package/dist/components/messages/AssistantThinkingMessage.js.map +0 -7
- package/dist/components/messages/AssistantToolUseMessage.js +0 -91
- package/dist/components/messages/AssistantToolUseMessage.js.map +0 -7
- package/dist/components/messages/TaskProgressMessage.js +0 -11
- package/dist/components/messages/TaskProgressMessage.js.map +0 -7
- package/dist/components/messages/TaskToolMessage.js +0 -39
- package/dist/components/messages/TaskToolMessage.js.map +0 -7
- package/dist/components/messages/UserBashInputMessage.js +0 -18
- package/dist/components/messages/UserBashInputMessage.js.map +0 -7
- package/dist/components/messages/UserCommandMessage.js +0 -20
- package/dist/components/messages/UserCommandMessage.js.map +0 -7
- package/dist/components/messages/UserKodingInputMessage.js +0 -18
- package/dist/components/messages/UserKodingInputMessage.js.map +0 -7
- package/dist/components/messages/UserPromptMessage.js +0 -20
- package/dist/components/messages/UserPromptMessage.js.map +0 -7
- package/dist/components/messages/UserTextMessage.js +0 -25
- package/dist/components/messages/UserTextMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +0 -10
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js +0 -15
- package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +0 -25
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +0 -47
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +0 -23
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +0 -7
- package/dist/components/messages/UserToolResultMessage/utils.js +0 -42
- package/dist/components/messages/UserToolResultMessage/utils.js.map +0 -7
- package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js +0 -112
- package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js.map +0 -7
- package/dist/components/permissions/FallbackPermissionRequest.js +0 -131
- package/dist/components/permissions/FallbackPermissionRequest.js.map +0 -7
- package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +0 -159
- package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js.map +0 -7
- package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +0 -58
- package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +0 -7
- package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +0 -153
- package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js.map +0 -7
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +0 -70
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +0 -7
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +0 -212
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +0 -7
- package/dist/components/permissions/PermissionRequest.js +0 -70
- package/dist/components/permissions/PermissionRequest.js.map +0 -7
- package/dist/components/permissions/PermissionRequestTitle.js +0 -52
- package/dist/components/permissions/PermissionRequestTitle.js.map +0 -7
- package/dist/components/permissions/hooks.js +0 -28
- package/dist/components/permissions/hooks.js.map +0 -7
- package/dist/components/permissions/toolUseOptions.js +0 -46
- package/dist/components/permissions/toolUseOptions.js.map +0 -7
- package/dist/components/permissions/utils.js +0 -21
- package/dist/components/permissions/utils.js.map +0 -7
- package/dist/constants/betas.js +0 -11
- package/dist/constants/betas.js.map +0 -7
- package/dist/constants/claude-asterisk-ascii-art.js +0 -242
- package/dist/constants/claude-asterisk-ascii-art.js.map +0 -7
- package/dist/constants/figures.js +0 -6
- package/dist/constants/figures.js.map +0 -7
- package/dist/constants/keys.js +0 -7
- package/dist/constants/keys.js.map +0 -7
- package/dist/constants/macros.js +0 -13
- package/dist/constants/macros.js.map +0 -7
- package/dist/constants/modelCapabilities.js +0 -154
- package/dist/constants/modelCapabilities.js.map +0 -7
- package/dist/constants/models.js +0 -1034
- package/dist/constants/models.js.map +0 -7
- package/dist/constants/oauth.js +0 -18
- package/dist/constants/oauth.js.map +0 -7
- package/dist/constants/product.js +0 -26
- package/dist/constants/product.js.map +0 -7
- package/dist/constants/prompts.js +0 -168
- package/dist/constants/prompts.js.map +0 -7
- package/dist/constants/releaseNotes.js +0 -9
- package/dist/constants/releaseNotes.js.map +0 -7
- package/dist/context/PermissionContext.js +0 -111
- package/dist/context/PermissionContext.js.map +0 -7
- package/dist/context.js +0 -259
- package/dist/context.js.map +0 -7
- package/dist/cost-tracker.js.map +0 -7
- package/dist/entrypoints/cli.js +0 -1107
- package/dist/entrypoints/cli.js.map +0 -7
- package/dist/entrypoints/mcp.js +0 -150
- package/dist/entrypoints/mcp.js.map +0 -7
- package/dist/history.js +0 -25
- package/dist/history.js.map +0 -7
- package/dist/hooks/useApiKeyVerification.js +0 -12
- package/dist/hooks/useApiKeyVerification.js.map +0 -7
- package/dist/hooks/useArrowKeyHistory.js +0 -50
- package/dist/hooks/useArrowKeyHistory.js.map +0 -7
- package/dist/hooks/useCanUseTool.js +0 -112
- package/dist/hooks/useCanUseTool.js.map +0 -7
- package/dist/hooks/useCancelRequest.js +0 -30
- package/dist/hooks/useCancelRequest.js.map +0 -7
- package/dist/hooks/useDoublePress.js +0 -31
- package/dist/hooks/useDoublePress.js.map +0 -7
- package/dist/hooks/useExitOnCtrlCD.js +0 -26
- package/dist/hooks/useExitOnCtrlCD.js.map +0 -7
- package/dist/hooks/useInterval.js +0 -18
- package/dist/hooks/useInterval.js.map +0 -7
- package/dist/hooks/useLogMessages.js +0 -14
- package/dist/hooks/useLogMessages.js.map +0 -7
- package/dist/hooks/useLogStartupTime.js +0 -15
- package/dist/hooks/useLogStartupTime.js.map +0 -7
- package/dist/hooks/useNotifyAfterTimeout.js +0 -42
- package/dist/hooks/useNotifyAfterTimeout.js.map +0 -7
- package/dist/hooks/usePermissionRequestLogging.js +0 -28
- package/dist/hooks/usePermissionRequestLogging.js.map +0 -7
- package/dist/hooks/useTerminalSize.js +0 -38
- package/dist/hooks/useTerminalSize.js.map +0 -7
- package/dist/hooks/useTextInput.js +0 -250
- package/dist/hooks/useTextInput.js.map +0 -7
- package/dist/hooks/useUnifiedCompletion.js +0 -929
- package/dist/hooks/useUnifiedCompletion.js.map +0 -7
- package/dist/messages.js +0 -33
- package/dist/messages.js.map +0 -7
- package/dist/permissions.js +0 -194
- package/dist/permissions.js.map +0 -7
- package/dist/query.js +0 -492
- package/dist/query.js.map +0 -7
- package/dist/screens/ConfigureNpmPrefix.js +0 -128
- package/dist/screens/ConfigureNpmPrefix.js.map +0 -7
- package/dist/screens/Doctor.js +0 -22
- package/dist/screens/Doctor.js.map +0 -7
- package/dist/screens/LogList.js +0 -55
- package/dist/screens/LogList.js.map +0 -7
- package/dist/screens/REPL.js +0 -593
- package/dist/screens/REPL.js.map +0 -7
- package/dist/screens/ResumeConversation.js +0 -56
- package/dist/screens/ResumeConversation.js.map +0 -7
- package/dist/services/adapters/base.js +0 -29
- package/dist/services/adapters/base.js.map +0 -7
- package/dist/services/adapters/chatCompletions.js +0 -69
- package/dist/services/adapters/chatCompletions.js.map +0 -7
- package/dist/services/adapters/responsesAPI.js +0 -126
- package/dist/services/adapters/responsesAPI.js.map +0 -7
- package/dist/services/browserMocks.js +0 -48
- package/dist/services/browserMocks.js.map +0 -7
- package/dist/services/claude.js +0 -1605
- package/dist/services/claude.js.map +0 -7
- package/dist/services/customCommands.js +0 -359
- package/dist/services/customCommands.js.map +0 -7
- package/dist/services/fileFreshness.js +0 -280
- package/dist/services/fileFreshness.js.map +0 -7
- package/dist/services/gpt5ConnectionTest.js +0 -248
- package/dist/services/gpt5ConnectionTest.js.map +0 -7
- package/dist/services/mcpClient.js +0 -435
- package/dist/services/mcpClient.js.map +0 -7
- package/dist/services/mcpServerApproval.js +0 -55
- package/dist/services/mcpServerApproval.js.map +0 -7
- package/dist/services/mentionProcessor.js.map +0 -7
- package/dist/services/modelAdapterFactory.js +0 -47
- package/dist/services/modelAdapterFactory.js.map +0 -7
- package/dist/services/notifier.js +0 -35
- package/dist/services/notifier.js.map +0 -7
- package/dist/services/oauth.js +0 -259
- package/dist/services/oauth.js.map +0 -7
- package/dist/services/openai.js.map +0 -7
- package/dist/services/responseStateManager.js +0 -68
- package/dist/services/responseStateManager.js.map +0 -7
- package/dist/services/sentry.js +0 -9
- package/dist/services/sentry.js.map +0 -7
- package/dist/services/statsig.js +0 -112
- package/dist/services/statsig.js.map +0 -7
- package/dist/services/statsigStorage.js +0 -75
- package/dist/services/statsigStorage.js.map +0 -7
- package/dist/services/systemReminder.js.map +0 -7
- package/dist/services/vcr.js +0 -133
- package/dist/services/vcr.js.map +0 -7
- package/dist/tools/ArchitectTool/ArchitectTool.js +0 -119
- package/dist/tools/ArchitectTool/ArchitectTool.js.map +0 -7
- package/dist/tools/ArchitectTool/prompt.js +0 -18
- package/dist/tools/ArchitectTool/prompt.js.map +0 -7
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +0 -423
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +0 -7
- package/dist/tools/BashTool/BashTool.js +0 -188
- package/dist/tools/BashTool/BashTool.js.map +0 -7
- package/dist/tools/BashTool/BashToolResultMessage.js +0 -21
- package/dist/tools/BashTool/BashToolResultMessage.js.map +0 -7
- package/dist/tools/BashTool/OutputLine.js +0 -30
- package/dist/tools/BashTool/OutputLine.js.map +0 -7
- package/dist/tools/BashTool/prompt.js +0 -179
- package/dist/tools/BashTool/prompt.js.map +0 -7
- package/dist/tools/BashTool/utils.js +0 -51
- package/dist/tools/BashTool/utils.js.map +0 -7
- package/dist/tools/FileEditTool/FileEditTool.js +0 -228
- package/dist/tools/FileEditTool/FileEditTool.js.map +0 -7
- package/dist/tools/FileEditTool/prompt.js +0 -54
- package/dist/tools/FileEditTool/prompt.js.map +0 -7
- package/dist/tools/FileEditTool/utils.js +0 -42
- package/dist/tools/FileEditTool/utils.js.map +0 -7
- package/dist/tools/FileReadTool/FileReadTool.js +0 -272
- package/dist/tools/FileReadTool/FileReadTool.js.map +0 -7
- package/dist/tools/FileReadTool/prompt.js +0 -10
- package/dist/tools/FileReadTool/prompt.js.map +0 -7
- package/dist/tools/FileWriteTool/FileWriteTool.js +0 -204
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +0 -7
- package/dist/tools/FileWriteTool/prompt.js +0 -14
- package/dist/tools/FileWriteTool/prompt.js.map +0 -7
- package/dist/tools/GlobTool/GlobTool.js +0 -88
- package/dist/tools/GlobTool/GlobTool.js.map +0 -7
- package/dist/tools/GlobTool/prompt.js +0 -12
- package/dist/tools/GlobTool/prompt.js.map +0 -7
- package/dist/tools/GrepTool/GrepTool.js +0 -107
- package/dist/tools/GrepTool/GrepTool.js.map +0 -7
- package/dist/tools/GrepTool/prompt.js +0 -15
- package/dist/tools/GrepTool/prompt.js.map +0 -7
- package/dist/tools/MCPTool/MCPTool.js +0 -90
- package/dist/tools/MCPTool/MCPTool.js.map +0 -7
- package/dist/tools/MCPTool/prompt.js +0 -7
- package/dist/tools/MCPTool/prompt.js.map +0 -7
- package/dist/tools/MemoryReadTool/MemoryReadTool.js +0 -103
- package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +0 -7
- package/dist/tools/MemoryReadTool/prompt.js +0 -7
- package/dist/tools/MemoryReadTool/prompt.js.map +0 -7
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +0 -77
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +0 -7
- package/dist/tools/MemoryWriteTool/prompt.js +0 -7
- package/dist/tools/MemoryWriteTool/prompt.js.map +0 -7
- package/dist/tools/MultiEditTool/MultiEditTool.js +0 -308
- package/dist/tools/MultiEditTool/MultiEditTool.js.map +0 -7
- package/dist/tools/MultiEditTool/prompt.js +0 -48
- package/dist/tools/MultiEditTool/prompt.js.map +0 -7
- package/dist/tools/NotebookEditTool/NotebookEditTool.js +0 -238
- package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +0 -7
- package/dist/tools/NotebookEditTool/prompt.js +0 -7
- package/dist/tools/NotebookEditTool/prompt.js.map +0 -7
- package/dist/tools/NotebookReadTool/NotebookReadTool.js +0 -212
- package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +0 -7
- package/dist/tools/NotebookReadTool/prompt.js +0 -7
- package/dist/tools/NotebookReadTool/prompt.js.map +0 -7
- package/dist/tools/StickerRequestTool/StickerRequestTool.js +0 -86
- package/dist/tools/StickerRequestTool/StickerRequestTool.js.map +0 -7
- package/dist/tools/StickerRequestTool/prompt.js +0 -23
- package/dist/tools/StickerRequestTool/prompt.js.map +0 -7
- package/dist/tools/TaskTool/TaskTool.js +0 -351
- package/dist/tools/TaskTool/TaskTool.js.map +0 -7
- package/dist/tools/TaskTool/constants.js +0 -5
- package/dist/tools/TaskTool/constants.js.map +0 -7
- package/dist/tools/TaskTool/prompt.js +0 -82
- package/dist/tools/TaskTool/prompt.js.map +0 -7
- package/dist/tools/ThinkTool/ThinkTool.js +0 -48
- package/dist/tools/ThinkTool/ThinkTool.js.map +0 -7
- package/dist/tools/ThinkTool/prompt.js +0 -16
- package/dist/tools/ThinkTool/prompt.js.map +0 -7
- package/dist/tools/TodoWriteTool/TodoWriteTool.js +0 -216
- package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +0 -7
- package/dist/tools/TodoWriteTool/prompt.js +0 -66
- package/dist/tools/TodoWriteTool/prompt.js.map +0 -7
- package/dist/tools/URLFetcherTool/URLFetcherTool.js +0 -137
- package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +0 -7
- package/dist/tools/URLFetcherTool/cache.js +0 -45
- package/dist/tools/URLFetcherTool/cache.js.map +0 -7
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js +0 -42
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +0 -7
- package/dist/tools/URLFetcherTool/prompt.js +0 -22
- package/dist/tools/URLFetcherTool/prompt.js.map +0 -7
- package/dist/tools/WebSearchTool/WebSearchTool.js +0 -86
- package/dist/tools/WebSearchTool/WebSearchTool.js.map +0 -7
- package/dist/tools/WebSearchTool/prompt.js +0 -17
- package/dist/tools/WebSearchTool/prompt.js.map +0 -7
- package/dist/tools/WebSearchTool/searchProviders.js +0 -48
- package/dist/tools/WebSearchTool/searchProviders.js.map +0 -7
- package/dist/tools/lsTool/lsTool.js +0 -201
- package/dist/tools/lsTool/lsTool.js.map +0 -7
- package/dist/tools/lsTool/prompt.js +0 -5
- package/dist/tools/lsTool/prompt.js.map +0 -7
- package/dist/tools.js +0 -64
- package/dist/tools.js.map +0 -7
- package/dist/types/PermissionMode.js +0 -82
- package/dist/types/PermissionMode.js.map +0 -7
- package/dist/types/RequestContext.js +0 -47
- package/dist/types/RequestContext.js.map +0 -7
- package/dist/types/common.d.js +0 -1
- package/dist/types/conversation.js +0 -1
- package/dist/types/logs.js +0 -1
- package/dist/types/modelCapabilities.js +0 -1
- package/dist/types/notebook.js +0 -1
- package/dist/utils/Cursor.js +0 -313
- package/dist/utils/Cursor.js.map +0 -7
- package/dist/utils/PersistentShell.js +0 -382
- package/dist/utils/PersistentShell.js.map +0 -7
- package/dist/utils/advancedFuzzyMatcher.js +0 -206
- package/dist/utils/advancedFuzzyMatcher.js.map +0 -7
- package/dist/utils/agentLoader.js +0 -199
- package/dist/utils/agentLoader.js.map +0 -7
- package/dist/utils/agentStorage.js +0 -59
- package/dist/utils/agentStorage.js.map +0 -7
- package/dist/utils/array.js +0 -7
- package/dist/utils/array.js.map +0 -7
- package/dist/utils/ask.js +0 -77
- package/dist/utils/ask.js.map +0 -7
- package/dist/utils/auth.js +0 -11
- package/dist/utils/auth.js.map +0 -7
- package/dist/utils/autoCompactCore.js +0 -149
- package/dist/utils/autoCompactCore.js.map +0 -7
- package/dist/utils/autoUpdater.js.map +0 -7
- package/dist/utils/betas.js +0 -21
- package/dist/utils/betas.js.map +0 -7
- package/dist/utils/browser.js +0 -15
- package/dist/utils/browser.js.map +0 -7
- package/dist/utils/cleanup.js +0 -54
- package/dist/utils/cleanup.js.map +0 -7
- package/dist/utils/commands.js +0 -207
- package/dist/utils/commands.js.map +0 -7
- package/dist/utils/commonUnixCommands.js +0 -687
- package/dist/utils/commonUnixCommands.js.map +0 -7
- package/dist/utils/config.js.map +0 -7
- package/dist/utils/conversationRecovery.js +0 -35
- package/dist/utils/conversationRecovery.js.map +0 -7
- package/dist/utils/debugLogger.js.map +0 -7
- package/dist/utils/diff.js +0 -32
- package/dist/utils/diff.js.map +0 -7
- package/dist/utils/env.js +0 -44
- package/dist/utils/env.js.map +0 -7
- package/dist/utils/errors.js +0 -23
- package/dist/utils/errors.js.map +0 -7
- package/dist/utils/exampleCommands.js +0 -80
- package/dist/utils/exampleCommands.js.map +0 -7
- package/dist/utils/execFileNoThrow.js +0 -44
- package/dist/utils/execFileNoThrow.js.map +0 -7
- package/dist/utils/expertChatStorage.js +0 -78
- package/dist/utils/expertChatStorage.js.map +0 -7
- package/dist/utils/file.js +0 -282
- package/dist/utils/file.js.map +0 -7
- package/dist/utils/fileRecoveryCore.js +0 -41
- package/dist/utils/fileRecoveryCore.js.map +0 -7
- package/dist/utils/format.js +0 -41
- package/dist/utils/format.js.map +0 -7
- package/dist/utils/fuzzyMatcher.js +0 -252
- package/dist/utils/fuzzyMatcher.js.map +0 -7
- package/dist/utils/generators.js +0 -46
- package/dist/utils/generators.js.map +0 -7
- package/dist/utils/git.js +0 -83
- package/dist/utils/git.js.map +0 -7
- package/dist/utils/globalLogger.js +0 -54
- package/dist/utils/globalLogger.js.map +0 -7
- package/dist/utils/http.js +0 -7
- package/dist/utils/http.js.map +0 -7
- package/dist/utils/imagePaste.js +0 -29
- package/dist/utils/imagePaste.js.map +0 -7
- package/dist/utils/json.js +0 -16
- package/dist/utils/json.js.map +0 -7
- package/dist/utils/log.js +0 -298
- package/dist/utils/log.js.map +0 -7
- package/dist/utils/markdown.js +0 -187
- package/dist/utils/markdown.js.map +0 -7
- package/dist/utils/messageContextManager.js +0 -195
- package/dist/utils/messageContextManager.js.map +0 -7
- package/dist/utils/messages.js +0 -633
- package/dist/utils/messages.js.map +0 -7
- package/dist/utils/model.js.map +0 -7
- package/dist/utils/permissions/filesystem.js +0 -80
- package/dist/utils/permissions/filesystem.js.map +0 -7
- package/dist/utils/responseState.js +0 -20
- package/dist/utils/responseState.js.map +0 -7
- package/dist/utils/ripgrep.js +0 -131
- package/dist/utils/ripgrep.js.map +0 -7
- package/dist/utils/secureFile.js +0 -483
- package/dist/utils/secureFile.js.map +0 -7
- package/dist/utils/sessionState.js +0 -31
- package/dist/utils/sessionState.js.map +0 -7
- package/dist/utils/state.js +0 -24
- package/dist/utils/state.js.map +0 -7
- package/dist/utils/style.js +0 -31
- package/dist/utils/style.js.map +0 -7
- package/dist/utils/terminal.js +0 -43
- package/dist/utils/terminal.js.map +0 -7
- package/dist/utils/theme.js.map +0 -7
- package/dist/utils/thinking.js +0 -103
- package/dist/utils/thinking.js.map +0 -7
- package/dist/utils/todoStorage.js +0 -291
- package/dist/utils/todoStorage.js.map +0 -7
- package/dist/utils/tokens.js +0 -30
- package/dist/utils/tokens.js.map +0 -7
- package/dist/utils/toolExecutionController.js +0 -109
- package/dist/utils/toolExecutionController.js.map +0 -7
- package/dist/utils/unaryLogging.js +0 -14
- package/dist/utils/unaryLogging.js.map +0 -7
- package/dist/utils/user.js +0 -40
- package/dist/utils/user.js.map +0 -7
- package/dist/utils/validate.js +0 -132
- package/dist/utils/validate.js.map +0 -7
- /package/dist/{Tool.js.map → REPL-GIU4ZIXM.js.map} +0 -0
- /package/dist/{components/CustomSelect/theme.js.map → autoUpdater-DNRMJWFQ.js.map} +0 -0
- /package/dist/{types/common.d.js.map → chunk-JC6NCUG5.js.map} +0 -0
- /package/dist/{types/conversation.js.map → commands-TWH6PGVG.js.map} +0 -0
- /package/dist/{types/logs.js.map → config-6ZMBCL23.js.map} +0 -0
- /package/dist/{types/modelCapabilities.js.map → context-JQIOOI4W.js.map} +0 -0
- /package/dist/{types/notebook.js.map → costTracker-6SL26FDB.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/autoCompactCore.ts"],
|
|
4
|
-
"sourcesContent": ["import { Message } from '../query'\nimport { countTokens } from './tokens'\nimport { getMessagesGetter, getMessagesSetter } from '../messages'\nimport { getContext } from '../context'\nimport { getCodeStyle } from '../utils/style'\nimport { clearTerminal } from '../utils/terminal'\nimport { resetFileFreshnessSession } from '../services/fileFreshness'\nimport { createUserMessage, normalizeMessagesForAPI } from '../utils/messages'\nimport { queryLLM } from '../services/claude'\nimport { selectAndReadFiles } from './fileRecoveryCore'\nimport { addLineNumbers } from './file'\nimport { getModelManager } from './model'\n\n/**\n * Threshold ratio for triggering automatic context compression\n * When context usage exceeds 92% of the model's limit, auto-compact activates\n */\nconst AUTO_COMPACT_THRESHOLD_RATIO = 0.92\n\n/**\n * Retrieves the context length for the main model that should execute compression\n * Uses ModelManager to get the current model's context length\n */\nasync function getCompressionModelContextLimit(): Promise<number> {\n try {\n // \uD83D\uDD27 Fix: Use ModelManager instead of legacy config\n const modelManager = getModelManager()\n const modelProfile = modelManager.getModel('main')\n\n if (modelProfile?.contextLength) {\n return modelProfile.contextLength\n }\n\n // Fallback to a reasonable default\n return 200_000\n } catch (error) {\n return 200_000\n }\n}\n\nconst COMPRESSION_PROMPT = `Please provide a comprehensive summary of our conversation structured as follows:\n\n## Technical Context\nDevelopment environment, tools, frameworks, and configurations in use. Programming languages, libraries, and technical constraints. File structure, directory organization, and project architecture.\n\n## Project Overview \nMain project goals, features, and scope. Key components, modules, and their relationships. Data models, APIs, and integration patterns.\n\n## Code Changes\nFiles created, modified, or analyzed during our conversation. Specific code implementations, functions, and algorithms added. Configuration changes and structural modifications.\n\n## Debugging & Issues\nProblems encountered and their root causes. Solutions implemented and their effectiveness. Error messages, logs, and diagnostic information.\n\n## Current Status\nWhat we just completed successfully. Current state of the codebase and any ongoing work. Test results, validation steps, and verification performed.\n\n## Pending Tasks\nImmediate next steps and priorities. Planned features, improvements, and refactoring. Known issues, technical debt, and areas needing attention.\n\n## User Preferences\nCoding style, formatting, and organizational preferences. Communication patterns and feedback style. Tool choices and workflow preferences.\n\n## Key Decisions\nImportant technical decisions made and their rationale. Alternative approaches considered and why they were rejected. Trade-offs accepted and their implications.\n\nFocus on information essential for continuing the conversation effectively, including specific details about code, files, errors, and plans.`\n\n/**\n * Calculates context usage thresholds based on the main model's capabilities\n * Uses the main model context length since compression tasks require a capable model\n */\nasync function calculateThresholds(tokenCount: number) {\n const contextLimit = await getCompressionModelContextLimit()\n const autoCompactThreshold = contextLimit * AUTO_COMPACT_THRESHOLD_RATIO\n\n return {\n isAboveAutoCompactThreshold: tokenCount >= autoCompactThreshold,\n percentUsed: Math.round((tokenCount / contextLimit) * 100),\n tokensRemaining: Math.max(0, autoCompactThreshold - tokenCount),\n contextLimit,\n }\n}\n\n/**\n * Determines if auto-compact should trigger based on token usage\n * Uses the main model context limit since compression requires a capable model\n */\nasync function shouldAutoCompact(messages: Message[]): Promise<boolean> {\n if (messages.length < 3) return false\n\n const tokenCount = countTokens(messages)\n const { isAboveAutoCompactThreshold } = await calculateThresholds(tokenCount)\n\n return isAboveAutoCompactThreshold\n}\n\n/**\n * Main entry point for automatic context compression\n *\n * This function is called before each query to check if the conversation\n * has grown too large and needs compression. When triggered, it:\n * - Generates a structured summary of the conversation using the main model\n * - Recovers recently accessed files to maintain development context\n * - Resets conversation state while preserving essential information\n *\n * Uses the main model for compression tasks to ensure high-quality summaries\n *\n * @param messages Current conversation messages\n * @param toolUseContext Execution context with model and tool configuration\n * @returns Updated messages (compressed if needed) and compression status\n */\nexport async function checkAutoCompact(\n messages: Message[],\n toolUseContext: any,\n): Promise<{ messages: Message[]; wasCompacted: boolean }> {\n if (!(await shouldAutoCompact(messages))) {\n return { messages, wasCompacted: false }\n }\n\n try {\n const compactedMessages = await executeAutoCompact(messages, toolUseContext)\n\n return {\n messages: compactedMessages,\n wasCompacted: true,\n }\n } catch (error) {\n // Graceful degradation: if auto-compact fails, continue with original messages\n // This ensures system remains functional even if compression encounters issues\n console.error(\n 'Auto-compact failed, continuing with original messages:',\n error,\n )\n return { messages, wasCompacted: false }\n }\n}\n\n/**\n * Executes the conversation compression process using the main model\n *\n * This function generates a comprehensive summary using the main model\n * which is better suited for complex summarization tasks. It also\n * automatically recovers important files to maintain development context.\n */\nasync function executeAutoCompact(\n messages: Message[],\n toolUseContext: any,\n): Promise<Message[]> {\n const summaryRequest = createUserMessage(COMPRESSION_PROMPT)\n\n const summaryResponse = await queryLLM(\n normalizeMessagesForAPI([...messages, summaryRequest]),\n [\n 'You are a helpful AI assistant tasked with creating comprehensive conversation summaries that preserve all essential context for continuing development work.',\n ],\n 0,\n toolUseContext.options.tools,\n toolUseContext.abortController.signal,\n {\n safeMode: false,\n model: 'main', // \u4F7F\u7528\u6A21\u578B\u6307\u9488\uFF0C\u8BA9queryLLM\u7EDF\u4E00\u89E3\u6790\n prependCLISysprompt: true,\n },\n )\n\n const content = summaryResponse.message.content\n const summary =\n typeof content === 'string'\n ? content\n : content.length > 0 && content[0]?.type === 'text'\n ? content[0].text\n : null\n\n if (!summary) {\n throw new Error(\n 'Failed to generate conversation summary - response did not contain valid text content',\n )\n }\n\n summaryResponse.message.usage = {\n input_tokens: 0,\n output_tokens: summaryResponse.message.usage.output_tokens,\n cache_creation_input_tokens: 0,\n cache_read_input_tokens: 0,\n }\n\n // Automatic file recovery: preserve recently accessed development files\n // This maintains coding context even after conversation compression\n const recoveredFiles = await selectAndReadFiles()\n\n const compactedMessages = [\n createUserMessage(\n 'Context automatically compressed due to token limit. Essential information preserved.',\n ),\n summaryResponse,\n ]\n\n // Append recovered files to maintain development workflow continuity\n // Files are prioritized by recency and importance, with strict token limits\n if (recoveredFiles.length > 0) {\n for (const file of recoveredFiles) {\n const contentWithLines = addLineNumbers({\n content: file.content,\n startLine: 1,\n })\n const recoveryMessage = createUserMessage(\n `**Recovered File: ${file.path}**\\n\\n\\`\\`\\`\\n${contentWithLines}\\n\\`\\`\\`\\n\\n` +\n `*Automatically recovered (${file.tokens} tokens)${file.truncated ? ' [truncated]' : ''}*`,\n )\n compactedMessages.push(recoveryMessage)\n }\n }\n\n // State cleanup to ensure fresh context after compression\n // Mirrors the cleanup sequence from manual /compact command\n getMessagesSetter()([])\n getContext.cache.clear?.()\n getCodeStyle.cache.clear?.()\n resetFileFreshnessSession()\n\n return compactedMessages\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/autoUpdater.ts"],
|
|
4
|
-
"sourcesContent": ["import { execFileNoThrow } from './execFileNoThrow'\nimport { logError } from './log'\nimport { getDynamicConfig } from '../services/statsig'\nimport { lt, gt } from 'semver'\nimport { MACRO } from '../constants/macros'\nimport { PRODUCT_NAME } from '../constants/product'\nimport { getGlobalConfig, saveGlobalConfig, isAutoUpdaterDisabled } from './config'\nimport { env } from './env'\n\nexport type VersionConfig = {\n minVersion: string\n}\n\n// Ensure current version meets minimum supported version; exit if too old\nexport async function assertMinVersion(): Promise<void> {\n try {\n const versionConfig = await getDynamicConfig<VersionConfig>(\n 'tengu_version_config',\n { minVersion: '0.0.0' },\n )\n if (versionConfig.minVersion && lt(MACRO.VERSION, versionConfig.minVersion)) {\n const suggestions = await getUpdateCommandSuggestions()\n // Intentionally minimal: caller may print its own message; we just exit\n // eslint-disable-next-line no-console\n console.error(\n `Your ${PRODUCT_NAME} version ${MACRO.VERSION} is below the minimum supported ${versionConfig.minVersion}.\\n` +\n 'Update using one of:\\n' +\n suggestions.map(c => ` ${c}`).join('\\n'),\n )\n process.exit(1)\n }\n } catch (error) {\n logError(`Error checking minimum version: ${error}`)\n }\n}\n\n// Get latest version from npm (via npm CLI or HTTP fallback)\nexport async function getLatestVersion(): Promise<string | null> {\n // Prefer npm CLI (fast when available)\n try {\n const abortController = new AbortController()\n setTimeout(() => abortController.abort(), 5000)\n const result = await execFileNoThrow(\n 'npm',\n ['view', MACRO.PACKAGE_URL, 'version'],\n abortController.signal,\n )\n if (result.code === 0) {\n const v = result.stdout.trim()\n if (v) return v\n }\n } catch {}\n\n // Fallback: query npm registry directly\n try {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 5000)\n const res = await fetch(\n `https://registry.npmjs.org/${encodeURIComponent(MACRO.PACKAGE_URL)}`,\n {\n method: 'GET',\n headers: {\n Accept: 'application/vnd.npm.install-v1+json',\n 'User-Agent': `${PRODUCT_NAME}/${MACRO.VERSION}`,\n },\n signal: controller.signal,\n },\n )\n clearTimeout(timer)\n if (!res.ok) return null\n const json: any = await res.json().catch(() => null)\n const latest = json && json['dist-tags'] && json['dist-tags'].latest\n return typeof latest === 'string' ? latest : null\n } catch {\n return null\n }\n}\n\n// Suggest manual update commands; prefer Bun first, then npm\nexport async function getUpdateCommandSuggestions(): Promise<string[]> {\n return [\n `bun add -g ${MACRO.PACKAGE_URL}@latest`,\n `npm install -g ${MACRO.PACKAGE_URL}@latest`,\n ]\n}\n\n// Optional: background notifier that prints a simple banner\nexport async function checkAndNotifyUpdate(): Promise<void> {\n try {\n if (process.env.NODE_ENV === 'test') return\n if (await isAutoUpdaterDisabled()) return\n if (await env.getIsDocker()) return\n if (!(await env.hasInternetAccess())) return\n\n const config: any = getGlobalConfig()\n const now = Date.now()\n const DAY_MS = 24 * 60 * 60 * 1000\n const lastCheck = Number(config.lastUpdateCheckAt || 0)\n if (lastCheck && now - lastCheck < DAY_MS) return\n\n const latest = await getLatestVersion()\n if (!latest) {\n saveGlobalConfig({ ...config, lastUpdateCheckAt: now })\n return\n }\n\n if (gt(latest, MACRO.VERSION)) {\n saveGlobalConfig({\n ...config,\n lastUpdateCheckAt: now,\n lastSuggestedVersion: latest,\n })\n const suggestions = await getUpdateCommandSuggestions()\n // eslint-disable-next-line no-console\n console.log(`New version available: ${latest} (current: ${MACRO.VERSION})`)\n console.log('Run the following command to update:')\n for (const command of suggestions) console.log(` ${command}`)\n } else {\n saveGlobalConfig({ ...config, lastUpdateCheckAt: now })\n }\n } catch (error) {\n logError(`update-notify: ${error}`)\n }\n}\n\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/utils/betas.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { memoize } from "lodash-es";
|
|
2
|
-
import { checkGate } from "../services/statsig.js";
|
|
3
|
-
import {
|
|
4
|
-
GATE_TOKEN_EFFICIENT_TOOLS,
|
|
5
|
-
BETA_HEADER_TOKEN_EFFICIENT_TOOLS,
|
|
6
|
-
CLAUDE_CODE_20250219_BETA_HEADER
|
|
7
|
-
} from "../constants/betas.js";
|
|
8
|
-
const getBetas = memoize(async () => {
|
|
9
|
-
const betaHeaders = [CLAUDE_CODE_20250219_BETA_HEADER];
|
|
10
|
-
if (process.env.USER_TYPE === "ant" || process.env.SWE_BENCH) {
|
|
11
|
-
const useTokenEfficientTools = await checkGate(GATE_TOKEN_EFFICIENT_TOOLS);
|
|
12
|
-
if (useTokenEfficientTools) {
|
|
13
|
-
betaHeaders.push(BETA_HEADER_TOKEN_EFFICIENT_TOOLS);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
return betaHeaders;
|
|
17
|
-
});
|
|
18
|
-
export {
|
|
19
|
-
getBetas
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=betas.js.map
|
package/dist/utils/betas.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/betas.ts"],
|
|
4
|
-
"sourcesContent": ["import { memoize } from 'lodash-es'\nimport { checkGate } from '../services/statsig'\nimport {\n GATE_TOKEN_EFFICIENT_TOOLS,\n BETA_HEADER_TOKEN_EFFICIENT_TOOLS,\n CLAUDE_CODE_20250219_BETA_HEADER,\n} from '../constants/betas.js'\n\nexport const getBetas = memoize(async (): Promise<string[]> => {\n const betaHeaders = [CLAUDE_CODE_20250219_BETA_HEADER]\n\n if (process.env.USER_TYPE === 'ant' || process.env.SWE_BENCH) {\n const useTokenEfficientTools = await checkGate(GATE_TOKEN_EFFICIENT_TOOLS)\n if (useTokenEfficientTools) {\n betaHeaders.push(BETA_HEADER_TOKEN_EFFICIENT_TOOLS)\n }\n }\n\n return betaHeaders\n})\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,eAAe;AACxB,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,MAAM,WAAW,QAAQ,YAA+B;AAC7D,QAAM,cAAc,CAAC,gCAAgC;AAErD,MAAI,QAAQ,IAAI,cAAc,SAAS,QAAQ,IAAI,WAAW;AAC5D,UAAM,yBAAyB,MAAM,UAAU,0BAA0B;AACzE,QAAI,wBAAwB;AAC1B,kBAAY,KAAK,iCAAiC;AAAA,IACpD;AAAA,EACF;AAEA,SAAO;AACT,CAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/utils/browser.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { execFileNoThrow } from "./execFileNoThrow.js";
|
|
2
|
-
async function openBrowser(url) {
|
|
3
|
-
const platform = process.platform;
|
|
4
|
-
const command = platform === "win32" ? "start" : platform === "darwin" ? "open" : "xdg-open";
|
|
5
|
-
try {
|
|
6
|
-
const { code } = await execFileNoThrow(command, [url]);
|
|
7
|
-
return code === 0;
|
|
8
|
-
} catch (_) {
|
|
9
|
-
return false;
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
export {
|
|
13
|
-
openBrowser
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=browser.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/browser.ts"],
|
|
4
|
-
"sourcesContent": ["import { execFileNoThrow } from './execFileNoThrow'\n\nexport async function openBrowser(url: string): Promise<boolean> {\n const platform = process.platform\n const command =\n platform === 'win32' ? 'start' : platform === 'darwin' ? 'open' : 'xdg-open'\n\n try {\n const { code } = await execFileNoThrow(command, [url])\n return code === 0\n } catch (_) {\n return false\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,uBAAuB;AAEhC,eAAsB,YAAY,KAA+B;AAC/D,QAAM,WAAW,QAAQ;AACzB,QAAM,UACJ,aAAa,UAAU,UAAU,aAAa,WAAW,SAAS;AAEpE,MAAI;AACF,UAAM,EAAE,KAAK,IAAI,MAAM,gBAAgB,SAAS,CAAC,GAAG,CAAC;AACrD,WAAO,SAAS;AAAA,EAClB,SAAS,GAAG;AACV,WAAO;AAAA,EACT;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/utils/cleanup.js
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { promises as fs } from "fs";
|
|
2
|
-
import { join } from "path";
|
|
3
|
-
import { logError } from "./log.js";
|
|
4
|
-
import { CACHE_PATHS } from "./log.js";
|
|
5
|
-
const THIRTY_DAYS_MS = 30 * 24 * 60 * 60 * 1e3;
|
|
6
|
-
function convertFileNameToDate(filename) {
|
|
7
|
-
const isoStr = filename.split(".")[0].replace(/T(\d{2})-(\d{2})-(\d{2})-(\d{3})Z/, "T$1:$2:$3.$4Z");
|
|
8
|
-
return new Date(isoStr);
|
|
9
|
-
}
|
|
10
|
-
async function cleanupOldMessageFiles() {
|
|
11
|
-
const messagePath = CACHE_PATHS.messages();
|
|
12
|
-
const errorPath = CACHE_PATHS.errors();
|
|
13
|
-
const thirtyDaysAgo = new Date(Date.now() - THIRTY_DAYS_MS);
|
|
14
|
-
const deletedCounts = { messages: 0, errors: 0 };
|
|
15
|
-
for (const path of [messagePath, errorPath]) {
|
|
16
|
-
try {
|
|
17
|
-
const files = await fs.readdir(path);
|
|
18
|
-
for (const file of files) {
|
|
19
|
-
try {
|
|
20
|
-
const timestamp = convertFileNameToDate(file);
|
|
21
|
-
if (timestamp < thirtyDaysAgo) {
|
|
22
|
-
await fs.unlink(join(path, file));
|
|
23
|
-
if (path === messagePath) {
|
|
24
|
-
deletedCounts.messages++;
|
|
25
|
-
} else {
|
|
26
|
-
deletedCounts.errors++;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
} catch (error) {
|
|
30
|
-
logError(
|
|
31
|
-
`Failed to process file ${file}: ${error instanceof Error ? error.message : String(error)}`
|
|
32
|
-
);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
} catch (error) {
|
|
36
|
-
if (error instanceof Error && "code" in error && error.code !== "ENOENT") {
|
|
37
|
-
logError(
|
|
38
|
-
`Failed to cleanup directory ${path}: ${error instanceof Error ? error.message : String(error)}`
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return deletedCounts;
|
|
44
|
-
}
|
|
45
|
-
function cleanupOldMessageFilesInBackground() {
|
|
46
|
-
const immediate = setImmediate(cleanupOldMessageFiles);
|
|
47
|
-
immediate.unref();
|
|
48
|
-
}
|
|
49
|
-
export {
|
|
50
|
-
cleanupOldMessageFiles,
|
|
51
|
-
cleanupOldMessageFilesInBackground,
|
|
52
|
-
convertFileNameToDate
|
|
53
|
-
};
|
|
54
|
-
//# sourceMappingURL=cleanup.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/cleanup.ts"],
|
|
4
|
-
"sourcesContent": ["import { promises as fs } from 'fs'\nimport { join } from 'path'\nimport { logError } from './log'\nimport { CACHE_PATHS } from './log'\n\nconst THIRTY_DAYS_MS = 30 * 24 * 60 * 60 * 1000\n\nexport type CleanupResult = {\n messages: number\n errors: number\n}\n\nexport function convertFileNameToDate(filename: string): Date {\n const isoStr = filename\n .split('.')[0]!\n .replace(/T(\\d{2})-(\\d{2})-(\\d{2})-(\\d{3})Z/, 'T$1:$2:$3.$4Z')\n return new Date(isoStr)\n}\n\nexport async function cleanupOldMessageFiles(): Promise<CleanupResult> {\n const messagePath = CACHE_PATHS.messages()\n const errorPath = CACHE_PATHS.errors()\n const thirtyDaysAgo = new Date(Date.now() - THIRTY_DAYS_MS)\n const deletedCounts: CleanupResult = { messages: 0, errors: 0 }\n\n for (const path of [messagePath, errorPath]) {\n try {\n const files = await fs.readdir(path)\n\n for (const file of files) {\n try {\n // Convert filename format where all ':.' were replaced with '-'\n const timestamp = convertFileNameToDate(file)\n if (timestamp < thirtyDaysAgo) {\n await fs.unlink(join(path, file))\n // Increment the appropriate counter\n if (path === messagePath) {\n deletedCounts.messages++\n } else {\n deletedCounts.errors++\n }\n }\n } catch (error: unknown) {\n // Log but continue processing other files\n logError(\n `Failed to process file ${file}: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }\n } catch (error: unknown) {\n // Ignore if directory doesn't exist\n if (\n error instanceof Error &&\n 'code' in error &&\n error.code !== 'ENOENT'\n ) {\n logError(\n `Failed to cleanup directory ${path}: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }\n }\n\n return deletedCounts\n}\n\nexport function cleanupOldMessageFilesInBackground(): void {\n const immediate = setImmediate(cleanupOldMessageFiles)\n\n // Prevent the setImmediate from keeping the process alive\n immediate.unref()\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,YAAY,UAAU;AAC/B,SAAS,YAAY;AACrB,SAAS,gBAAgB;AACzB,SAAS,mBAAmB;AAE5B,MAAM,iBAAiB,KAAK,KAAK,KAAK,KAAK;AAOpC,SAAS,sBAAsB,UAAwB;AAC5D,QAAM,SAAS,SACZ,MAAM,GAAG,EAAE,CAAC,EACZ,QAAQ,qCAAqC,eAAe;AAC/D,SAAO,IAAI,KAAK,MAAM;AACxB;AAEA,eAAsB,yBAAiD;AACrE,QAAM,cAAc,YAAY,SAAS;AACzC,QAAM,YAAY,YAAY,OAAO;AACrC,QAAM,gBAAgB,IAAI,KAAK,KAAK,IAAI,IAAI,cAAc;AAC1D,QAAM,gBAA+B,EAAE,UAAU,GAAG,QAAQ,EAAE;AAE9D,aAAW,QAAQ,CAAC,aAAa,SAAS,GAAG;AAC3C,QAAI;AACF,YAAM,QAAQ,MAAM,GAAG,QAAQ,IAAI;AAEnC,iBAAW,QAAQ,OAAO;AACxB,YAAI;AAEF,gBAAM,YAAY,sBAAsB,IAAI;AAC5C,cAAI,YAAY,eAAe;AAC7B,kBAAM,GAAG,OAAO,KAAK,MAAM,IAAI,CAAC;AAEhC,gBAAI,SAAS,aAAa;AACxB,4BAAc;AAAA,YAChB,OAAO;AACL,4BAAc;AAAA,YAChB;AAAA,UACF;AAAA,QACF,SAAS,OAAgB;AAEvB;AAAA,YACE,0BAA0B,IAAI,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,UAC3F;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAgB;AAEvB,UACE,iBAAiB,SACjB,UAAU,SACV,MAAM,SAAS,UACf;AACA;AAAA,UACE,+BAA+B,IAAI,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,QAChG;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,qCAA2C;AACzD,QAAM,YAAY,aAAa,sBAAsB;AAGrD,YAAU,MAAM;AAClB;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/utils/commands.js
DELETED
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
import { memoize } from "lodash-es";
|
|
2
|
-
import { API_ERROR_MESSAGE_PREFIX, queryQuick } from "../services/claude.js";
|
|
3
|
-
import { parse } from "shell-quote";
|
|
4
|
-
import { PRODUCT_NAME } from "../constants/product.js";
|
|
5
|
-
const SINGLE_QUOTE = "__SINGLE_QUOTE__";
|
|
6
|
-
const DOUBLE_QUOTE = "__DOUBLE_QUOTE__";
|
|
7
|
-
function splitCommand(command) {
|
|
8
|
-
const parts = [];
|
|
9
|
-
for (const part of parse(
|
|
10
|
-
command.replaceAll('"', `"${DOUBLE_QUOTE}`).replaceAll("'", `'${SINGLE_QUOTE}`),
|
|
11
|
-
// parse() strips out quotes :P
|
|
12
|
-
(varName) => `$${varName}`
|
|
13
|
-
// Preserve shell variables
|
|
14
|
-
)) {
|
|
15
|
-
if (typeof part === "string") {
|
|
16
|
-
if (parts.length > 0 && typeof parts[parts.length - 1] === "string") {
|
|
17
|
-
parts[parts.length - 1] += " " + part;
|
|
18
|
-
continue;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
parts.push(part);
|
|
22
|
-
}
|
|
23
|
-
const stringParts = parts.map((part) => {
|
|
24
|
-
if (typeof part === "string") {
|
|
25
|
-
return part;
|
|
26
|
-
}
|
|
27
|
-
if ("comment" in part) {
|
|
28
|
-
return "#" + part.comment;
|
|
29
|
-
}
|
|
30
|
-
if ("op" in part && part.op === "glob") {
|
|
31
|
-
return part.pattern;
|
|
32
|
-
}
|
|
33
|
-
if ("op" in part) {
|
|
34
|
-
return part.op;
|
|
35
|
-
}
|
|
36
|
-
return null;
|
|
37
|
-
}).filter((_) => _ !== null);
|
|
38
|
-
const quotedParts = stringParts.map((part) => {
|
|
39
|
-
return part.replaceAll(`${SINGLE_QUOTE}`, "'").replaceAll(`${DOUBLE_QUOTE}`, '"');
|
|
40
|
-
});
|
|
41
|
-
return quotedParts.filter(
|
|
42
|
-
(part) => !COMMAND_LIST_SEPARATORS.has(part)
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
const getCommandSubcommandPrefix = memoize(
|
|
46
|
-
async (command, abortSignal) => {
|
|
47
|
-
const subcommands = splitCommand(command);
|
|
48
|
-
const [fullCommandPrefix, ...subcommandPrefixesResults] = await Promise.all(
|
|
49
|
-
[
|
|
50
|
-
getCommandPrefix(command, abortSignal),
|
|
51
|
-
...subcommands.map(async (subcommand) => ({
|
|
52
|
-
subcommand,
|
|
53
|
-
prefix: await getCommandPrefix(subcommand, abortSignal)
|
|
54
|
-
}))
|
|
55
|
-
]
|
|
56
|
-
);
|
|
57
|
-
if (!fullCommandPrefix) {
|
|
58
|
-
return null;
|
|
59
|
-
}
|
|
60
|
-
const subcommandPrefixes = subcommandPrefixesResults.reduce(
|
|
61
|
-
(acc, { subcommand, prefix }) => {
|
|
62
|
-
if (prefix) {
|
|
63
|
-
acc.set(subcommand, prefix);
|
|
64
|
-
}
|
|
65
|
-
return acc;
|
|
66
|
-
},
|
|
67
|
-
/* @__PURE__ */ new Map()
|
|
68
|
-
);
|
|
69
|
-
return {
|
|
70
|
-
...fullCommandPrefix,
|
|
71
|
-
subcommandPrefixes
|
|
72
|
-
};
|
|
73
|
-
},
|
|
74
|
-
(command) => command
|
|
75
|
-
// memoize by command only
|
|
76
|
-
);
|
|
77
|
-
const getCommandPrefix = memoize(
|
|
78
|
-
async (command, abortSignal) => {
|
|
79
|
-
const response = await queryQuick({
|
|
80
|
-
systemPrompt: [
|
|
81
|
-
`Your task is to process Bash commands that an AI coding agent wants to run.
|
|
82
|
-
|
|
83
|
-
This policy spec defines how to determine the prefix of a Bash command:`
|
|
84
|
-
],
|
|
85
|
-
userPrompt: `<policy_spec>
|
|
86
|
-
# ${PRODUCT_NAME} Code Bash command prefix detection
|
|
87
|
-
|
|
88
|
-
This document defines risk levels for actions that the ${PRODUCT_NAME} agent may take. This classification system is part of a broader safety framework and is used to determine when additional user confirmation or oversight may be needed.
|
|
89
|
-
|
|
90
|
-
## Definitions
|
|
91
|
-
|
|
92
|
-
**Command Injection:** Any technique used that would result in a command being run other than the detected prefix.
|
|
93
|
-
|
|
94
|
-
## Command prefix extraction examples
|
|
95
|
-
Examples:
|
|
96
|
-
- cat foo.txt => cat
|
|
97
|
-
- cd src => cd
|
|
98
|
-
- cd path/to/files/ => cd
|
|
99
|
-
- find ./src -type f -name "*.ts" => find
|
|
100
|
-
- gg cat foo.py => gg cat
|
|
101
|
-
- gg cp foo.py bar.py => gg cp
|
|
102
|
-
- git commit -m "foo" => git commit
|
|
103
|
-
- git diff HEAD~1 => git diff
|
|
104
|
-
- git diff --staged => git diff
|
|
105
|
-
- git diff $(pwd) => command_injection_detected
|
|
106
|
-
- git status => git status
|
|
107
|
-
- git status# test(\`id\`) => command_injection_detected
|
|
108
|
-
- git status\`ls\` => command_injection_detected
|
|
109
|
-
- git push => none
|
|
110
|
-
- git push origin master => git push
|
|
111
|
-
- git log -n 5 => git log
|
|
112
|
-
- git log --oneline -n 5 => git log
|
|
113
|
-
- grep -A 40 "from foo.bar.baz import" alpha/beta/gamma.py => grep
|
|
114
|
-
- pig tail zerba.log => pig tail
|
|
115
|
-
- npm test => none
|
|
116
|
-
- npm test --foo => npm test
|
|
117
|
-
- npm test -- -f "foo" => npm test
|
|
118
|
-
- pwd
|
|
119
|
-
curl example.com => command_injection_detected
|
|
120
|
-
- pytest foo/bar.py => pytest
|
|
121
|
-
- scalac build => none
|
|
122
|
-
</policy_spec>
|
|
123
|
-
|
|
124
|
-
The user has allowed certain command prefixes to be run, and will otherwise be asked to approve or deny the command.
|
|
125
|
-
Your task is to determine the command prefix for the following command.
|
|
126
|
-
|
|
127
|
-
IMPORTANT: Bash commands may run multiple commands that are chained together.
|
|
128
|
-
For safety, if the command seems to contain command injection, you must return "command_injection_detected".
|
|
129
|
-
(This will help protect the user: if they think that they're allowlisting command A,
|
|
130
|
-
but the AI coding agent sends a malicious command that technically has the same prefix as command A,
|
|
131
|
-
then the safety system will see that you said \u201Ccommand_injection_detected\u201D and ask the user for manual confirmation.)
|
|
132
|
-
|
|
133
|
-
Note that not every command has a prefix. If a command has no prefix, return "none".
|
|
134
|
-
|
|
135
|
-
ONLY return the prefix. Do not return any other text, markdown markers, or other content or formatting.
|
|
136
|
-
|
|
137
|
-
Command: ${command}
|
|
138
|
-
`,
|
|
139
|
-
signal: abortSignal,
|
|
140
|
-
enablePromptCaching: false
|
|
141
|
-
});
|
|
142
|
-
const prefix = typeof response.message.content === "string" ? response.message.content : Array.isArray(response.message.content) ? response.message.content.find((_) => _.type === "text")?.text ?? "none" : "none";
|
|
143
|
-
if (prefix.startsWith(API_ERROR_MESSAGE_PREFIX)) {
|
|
144
|
-
return null;
|
|
145
|
-
}
|
|
146
|
-
if (prefix === "command_injection_detected") {
|
|
147
|
-
return { commandInjectionDetected: true };
|
|
148
|
-
}
|
|
149
|
-
if (prefix === "git") {
|
|
150
|
-
return {
|
|
151
|
-
commandPrefix: null,
|
|
152
|
-
commandInjectionDetected: false
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
if (prefix === "none") {
|
|
156
|
-
return {
|
|
157
|
-
commandPrefix: null,
|
|
158
|
-
commandInjectionDetected: false
|
|
159
|
-
};
|
|
160
|
-
}
|
|
161
|
-
return {
|
|
162
|
-
commandPrefix: prefix,
|
|
163
|
-
commandInjectionDetected: false
|
|
164
|
-
};
|
|
165
|
-
},
|
|
166
|
-
(command) => command
|
|
167
|
-
// memoize by command only
|
|
168
|
-
);
|
|
169
|
-
const COMMAND_LIST_SEPARATORS = /* @__PURE__ */ new Set([
|
|
170
|
-
"&&",
|
|
171
|
-
"||",
|
|
172
|
-
";",
|
|
173
|
-
";;"
|
|
174
|
-
]);
|
|
175
|
-
function isCommandList(command) {
|
|
176
|
-
for (const part of parse(
|
|
177
|
-
command.replaceAll('"', `"${DOUBLE_QUOTE}`).replaceAll("'", `'${SINGLE_QUOTE}`),
|
|
178
|
-
// parse() strips out quotes :P
|
|
179
|
-
(varName) => `$${varName}`
|
|
180
|
-
// Preserve shell variables
|
|
181
|
-
)) {
|
|
182
|
-
if (typeof part === "string") {
|
|
183
|
-
continue;
|
|
184
|
-
}
|
|
185
|
-
if ("comment" in part) {
|
|
186
|
-
return false;
|
|
187
|
-
}
|
|
188
|
-
if ("op" in part) {
|
|
189
|
-
if (part.op === "glob") {
|
|
190
|
-
continue;
|
|
191
|
-
} else if (COMMAND_LIST_SEPARATORS.has(part.op)) {
|
|
192
|
-
continue;
|
|
193
|
-
}
|
|
194
|
-
return false;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
return true;
|
|
198
|
-
}
|
|
199
|
-
function isUnsafeCompoundCommand(command) {
|
|
200
|
-
return splitCommand(command).length > 1 && !isCommandList(command);
|
|
201
|
-
}
|
|
202
|
-
export {
|
|
203
|
-
getCommandSubcommandPrefix,
|
|
204
|
-
isUnsafeCompoundCommand,
|
|
205
|
-
splitCommand
|
|
206
|
-
};
|
|
207
|
-
//# sourceMappingURL=commands.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/commands.ts"],
|
|
4
|
-
"sourcesContent": ["import { memoize } from 'lodash-es'\nimport { API_ERROR_MESSAGE_PREFIX, queryQuick } from '../services/claude'\nimport { type ControlOperator, parse, ParseEntry } from 'shell-quote'\nimport { PRODUCT_NAME } from '../constants/product'\n\nconst SINGLE_QUOTE = '__SINGLE_QUOTE__'\nconst DOUBLE_QUOTE = '__DOUBLE_QUOTE__'\n\nexport type CommandPrefixResult =\n | {\n commandPrefix: string | null\n commandInjectionDetected: false\n }\n | { commandInjectionDetected: true }\n\n// Command prefix result alongside subcommand prefixes\nexport type CommandSubcommandPrefixResult = CommandPrefixResult & {\n subcommandPrefixes: Map<string, CommandPrefixResult>\n}\n\n/**\n * Splits a command string into individual commands based on shell operators\n */\nexport function splitCommand(command: string): string[] {\n const parts: ParseEntry[] = []\n\n // 1. Collapse adjacent strings\n for (const part of parse(\n command\n .replaceAll('\"', `\"${DOUBLE_QUOTE}`) // parse() strips out quotes :P\n .replaceAll(\"'\", `'${SINGLE_QUOTE}`), // parse() strips out quotes :P\n varName => `$${varName}`, // Preserve shell variables\n )) {\n if (typeof part === 'string') {\n if (parts.length > 0 && typeof parts[parts.length - 1] === 'string') {\n parts[parts.length - 1] += ' ' + part\n continue\n }\n }\n parts.push(part)\n }\n\n // 2. Map tokens to strings\n const stringParts = parts\n .map(part => {\n if (typeof part === 'string') {\n return part\n }\n if ('comment' in part) {\n // TODO: make this less hacky\n return '#' + part.comment\n }\n if ('op' in part && part.op === 'glob') {\n return part.pattern\n }\n if ('op' in part) {\n return part.op\n }\n return null\n })\n .filter(_ => _ !== null)\n\n // 3. Map quotes back to their original form\n const quotedParts = stringParts.map(part => {\n return part\n .replaceAll(`${SINGLE_QUOTE}`, \"'\")\n .replaceAll(`${DOUBLE_QUOTE}`, '\"')\n })\n\n // 4. Filter out separators\n return quotedParts.filter(\n part => !(COMMAND_LIST_SEPARATORS as Set<string>).has(part),\n )\n}\n\nexport const getCommandSubcommandPrefix = memoize(\n async (\n command: string,\n abortSignal: AbortSignal,\n ): Promise<CommandSubcommandPrefixResult | null> => {\n const subcommands = splitCommand(command)\n\n const [fullCommandPrefix, ...subcommandPrefixesResults] = await Promise.all(\n [\n getCommandPrefix(command, abortSignal),\n ...subcommands.map(async subcommand => ({\n subcommand,\n prefix: await getCommandPrefix(subcommand, abortSignal),\n })),\n ],\n )\n if (!fullCommandPrefix) {\n return null\n }\n const subcommandPrefixes = subcommandPrefixesResults.reduce(\n (acc, { subcommand, prefix }) => {\n if (prefix) {\n acc.set(subcommand, prefix)\n }\n return acc\n },\n new Map<string, CommandPrefixResult>(),\n )\n\n return {\n ...fullCommandPrefix,\n subcommandPrefixes,\n }\n },\n command => command, // memoize by command only\n)\n\nconst getCommandPrefix = memoize(\n async (\n command: string,\n abortSignal: AbortSignal,\n ): Promise<CommandPrefixResult | null> => {\n const response = await queryQuick({\n systemPrompt: [\n `Your task is to process Bash commands that an AI coding agent wants to run.\n\nThis policy spec defines how to determine the prefix of a Bash command:`,\n ],\n userPrompt: `<policy_spec>\n# ${PRODUCT_NAME} Code Bash command prefix detection\n\nThis document defines risk levels for actions that the ${PRODUCT_NAME} agent may take. This classification system is part of a broader safety framework and is used to determine when additional user confirmation or oversight may be needed.\n\n## Definitions\n\n**Command Injection:** Any technique used that would result in a command being run other than the detected prefix.\n\n## Command prefix extraction examples\nExamples:\n- cat foo.txt => cat\n- cd src => cd\n- cd path/to/files/ => cd\n- find ./src -type f -name \"*.ts\" => find\n- gg cat foo.py => gg cat\n- gg cp foo.py bar.py => gg cp\n- git commit -m \"foo\" => git commit\n- git diff HEAD~1 => git diff\n- git diff --staged => git diff\n- git diff $(pwd) => command_injection_detected\n- git status => git status\n- git status# test(\\`id\\`) => command_injection_detected\n- git status\\`ls\\` => command_injection_detected\n- git push => none\n- git push origin master => git push\n- git log -n 5 => git log\n- git log --oneline -n 5 => git log\n- grep -A 40 \"from foo.bar.baz import\" alpha/beta/gamma.py => grep\n- pig tail zerba.log => pig tail\n- npm test => none\n- npm test --foo => npm test\n- npm test -- -f \"foo\" => npm test\n- pwd\\n curl example.com => command_injection_detected\n- pytest foo/bar.py => pytest\n- scalac build => none\n</policy_spec>\n\nThe user has allowed certain command prefixes to be run, and will otherwise be asked to approve or deny the command.\nYour task is to determine the command prefix for the following command.\n\nIMPORTANT: Bash commands may run multiple commands that are chained together.\nFor safety, if the command seems to contain command injection, you must return \"command_injection_detected\". \n(This will help protect the user: if they think that they're allowlisting command A, \nbut the AI coding agent sends a malicious command that technically has the same prefix as command A, \nthen the safety system will see that you said \u201Ccommand_injection_detected\u201D and ask the user for manual confirmation.)\n\nNote that not every command has a prefix. If a command has no prefix, return \"none\".\n\nONLY return the prefix. Do not return any other text, markdown markers, or other content or formatting.\n\nCommand: ${command}\n`,\n signal: abortSignal,\n enablePromptCaching: false,\n })\n\n const prefix =\n typeof response.message.content === 'string'\n ? response.message.content\n : Array.isArray(response.message.content)\n ? (response.message.content.find(_ => _.type === 'text')?.text ??\n 'none')\n : 'none'\n\n if (prefix.startsWith(API_ERROR_MESSAGE_PREFIX)) {\n return null\n }\n\n if (prefix === 'command_injection_detected') {\n return { commandInjectionDetected: true }\n }\n\n // Never accept base `git` as a prefix (if e.g. `git diff` prefix not detected)\n if (prefix === 'git') {\n return {\n commandPrefix: null,\n commandInjectionDetected: false,\n }\n }\n\n if (prefix === 'none') {\n return {\n commandPrefix: null,\n commandInjectionDetected: false,\n }\n }\n\n return {\n commandPrefix: prefix,\n commandInjectionDetected: false,\n }\n },\n command => command, // memoize by command only\n)\n\nconst COMMAND_LIST_SEPARATORS = new Set<ControlOperator>([\n '&&',\n '||',\n ';',\n ';;',\n])\n\n// Checks if this is just a list of commands\nfunction isCommandList(command: string): boolean {\n for (const part of parse(\n command\n .replaceAll('\"', `\"${DOUBLE_QUOTE}`) // parse() strips out quotes :P\n .replaceAll(\"'\", `'${SINGLE_QUOTE}`), // parse() strips out quotes :P\n varName => `$${varName}`, // Preserve shell variables\n )) {\n if (typeof part === 'string') {\n // Strings are safe\n continue\n }\n if ('comment' in part) {\n // Don't trust comments, they can contain command injection\n return false\n }\n if ('op' in part) {\n if (part.op === 'glob') {\n // Globs are safe\n continue\n } else if (COMMAND_LIST_SEPARATORS.has(part.op)) {\n // Command list separators are safe\n continue\n }\n // Other operators are unsafe\n return false\n }\n }\n // No unsafe operators found in entire command\n return true\n}\n\nexport function isUnsafeCompoundCommand(command: string): boolean {\n return splitCommand(command).length > 1 && !isCommandList(command)\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,eAAe;AACxB,SAAS,0BAA0B,kBAAkB;AACrD,SAA+B,aAAyB;AACxD,SAAS,oBAAoB;AAE7B,MAAM,eAAe;AACrB,MAAM,eAAe;AAiBd,SAAS,aAAa,SAA2B;AACtD,QAAM,QAAsB,CAAC;AAG7B,aAAW,QAAQ;AAAA,IACjB,QACG,WAAW,KAAK,IAAI,YAAY,EAAE,EAClC,WAAW,KAAK,IAAI,YAAY,EAAE;AAAA;AAAA,IACrC,aAAW,IAAI,OAAO;AAAA;AAAA,EACxB,GAAG;AACD,QAAI,OAAO,SAAS,UAAU;AAC5B,UAAI,MAAM,SAAS,KAAK,OAAO,MAAM,MAAM,SAAS,CAAC,MAAM,UAAU;AACnE,cAAM,MAAM,SAAS,CAAC,KAAK,MAAM;AACjC;AAAA,MACF;AAAA,IACF;AACA,UAAM,KAAK,IAAI;AAAA,EACjB;AAGA,QAAM,cAAc,MACjB,IAAI,UAAQ;AACX,QAAI,OAAO,SAAS,UAAU;AAC5B,aAAO;AAAA,IACT;AACA,QAAI,aAAa,MAAM;AAErB,aAAO,MAAM,KAAK;AAAA,IACpB;AACA,QAAI,QAAQ,QAAQ,KAAK,OAAO,QAAQ;AACtC,aAAO,KAAK;AAAA,IACd;AACA,QAAI,QAAQ,MAAM;AAChB,aAAO,KAAK;AAAA,IACd;AACA,WAAO;AAAA,EACT,CAAC,EACA,OAAO,OAAK,MAAM,IAAI;AAGzB,QAAM,cAAc,YAAY,IAAI,UAAQ;AAC1C,WAAO,KACJ,WAAW,GAAG,YAAY,IAAI,GAAG,EACjC,WAAW,GAAG,YAAY,IAAI,GAAG;AAAA,EACtC,CAAC;AAGD,SAAO,YAAY;AAAA,IACjB,UAAQ,CAAE,wBAAwC,IAAI,IAAI;AAAA,EAC5D;AACF;AAEO,MAAM,6BAA6B;AAAA,EACxC,OACE,SACA,gBACkD;AAClD,UAAM,cAAc,aAAa,OAAO;AAExC,UAAM,CAAC,mBAAmB,GAAG,yBAAyB,IAAI,MAAM,QAAQ;AAAA,MACtE;AAAA,QACE,iBAAiB,SAAS,WAAW;AAAA,QACrC,GAAG,YAAY,IAAI,OAAM,gBAAe;AAAA,UACtC;AAAA,UACA,QAAQ,MAAM,iBAAiB,YAAY,WAAW;AAAA,QACxD,EAAE;AAAA,MACJ;AAAA,IACF;AACA,QAAI,CAAC,mBAAmB;AACtB,aAAO;AAAA,IACT;AACA,UAAM,qBAAqB,0BAA0B;AAAA,MACnD,CAAC,KAAK,EAAE,YAAY,OAAO,MAAM;AAC/B,YAAI,QAAQ;AACV,cAAI,IAAI,YAAY,MAAM;AAAA,QAC5B;AACA,eAAO;AAAA,MACT;AAAA,MACA,oBAAI,IAAiC;AAAA,IACvC;AAEA,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAW;AAAA;AACb;AAEA,MAAM,mBAAmB;AAAA,EACvB,OACE,SACA,gBACwC;AACxC,UAAM,WAAW,MAAM,WAAW;AAAA,MAChC,cAAc;AAAA,QACZ;AAAA;AAAA;AAAA,MAGF;AAAA,MACA,YAAY;AAAA,IACd,YAAY;AAAA;AAAA,yDAEyC,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAgD1D,OAAO;AAAA;AAAA,MAEZ,QAAQ;AAAA,MACR,qBAAqB;AAAA,IACvB,CAAC;AAED,UAAM,SACJ,OAAO,SAAS,QAAQ,YAAY,WAChC,SAAS,QAAQ,UACjB,MAAM,QAAQ,SAAS,QAAQ,OAAO,IACnC,SAAS,QAAQ,QAAQ,KAAK,OAAK,EAAE,SAAS,MAAM,GAAG,QACxD,SACA;AAER,QAAI,OAAO,WAAW,wBAAwB,GAAG;AAC/C,aAAO;AAAA,IACT;AAEA,QAAI,WAAW,8BAA8B;AAC3C,aAAO,EAAE,0BAA0B,KAAK;AAAA,IAC1C;AAGA,QAAI,WAAW,OAAO;AACpB,aAAO;AAAA,QACL,eAAe;AAAA,QACf,0BAA0B;AAAA,MAC5B;AAAA,IACF;AAEA,QAAI,WAAW,QAAQ;AACrB,aAAO;AAAA,QACL,eAAe;AAAA,QACf,0BAA0B;AAAA,MAC5B;AAAA,IACF;AAEA,WAAO;AAAA,MACL,eAAe;AAAA,MACf,0BAA0B;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,aAAW;AAAA;AACb;AAEA,MAAM,0BAA0B,oBAAI,IAAqB;AAAA,EACvD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAGD,SAAS,cAAc,SAA0B;AAC/C,aAAW,QAAQ;AAAA,IACjB,QACG,WAAW,KAAK,IAAI,YAAY,EAAE,EAClC,WAAW,KAAK,IAAI,YAAY,EAAE;AAAA;AAAA,IACrC,aAAW,IAAI,OAAO;AAAA;AAAA,EACxB,GAAG;AACD,QAAI,OAAO,SAAS,UAAU;AAE5B;AAAA,IACF;AACA,QAAI,aAAa,MAAM;AAErB,aAAO;AAAA,IACT;AACA,QAAI,QAAQ,MAAM;AAChB,UAAI,KAAK,OAAO,QAAQ;AAEtB;AAAA,MACF,WAAW,wBAAwB,IAAI,KAAK,EAAE,GAAG;AAE/C;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,wBAAwB,SAA0B;AAChE,SAAO,aAAa,OAAO,EAAE,SAAS,KAAK,CAAC,cAAc,OAAO;AACnE;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|