@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/advancedFuzzyMatcher.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Advanced Fuzzy Matching Algorithm\n * \n * Inspired by:\n * - Chinese Pinyin input methods (Sogou, Baidu)\n * - IDE intelligent completion (VSCode, IntelliJ)\n * - Terminal fuzzy finders (fzf, peco)\n * \n * Key features:\n * - Hyphen-aware matching (dao \u2192 dao-qi-harmony)\n * - Numeric suffix matching (py3 \u2192 python3)\n * - Abbreviation matching (dq \u2192 dao-qi)\n * - Subsequence matching\n * - Word boundary bonus\n */\n\nexport interface MatchResult {\n score: number\n matched: boolean\n algorithm: string\n}\n\nexport class AdvancedFuzzyMatcher {\n /**\n * Main matching function - combines multiple algorithms\n */\n match(candidate: string, query: string): MatchResult {\n // Normalize inputs\n const text = candidate.toLowerCase()\n const pattern = query.toLowerCase()\n \n // Quick exact match - give HUGE score for exact matches\n if (text === pattern) {\n return { score: 10000, matched: true, algorithm: 'exact' }\n }\n \n // Try all algorithms and combine scores\n const algorithms = [\n this.exactPrefixMatch(text, pattern),\n this.hyphenAwareMatch(text, pattern),\n this.wordBoundaryMatch(text, pattern),\n this.abbreviationMatch(text, pattern),\n this.numericSuffixMatch(text, pattern),\n this.subsequenceMatch(text, pattern),\n this.fuzzySegmentMatch(text, pattern),\n ]\n \n // Get best score\n let bestScore = 0\n let bestAlgorithm = 'none'\n \n for (const result of algorithms) {\n if (result.score > bestScore) {\n bestScore = result.score\n bestAlgorithm = result.algorithm\n }\n }\n \n return {\n score: bestScore,\n matched: bestScore > 10,\n algorithm: bestAlgorithm\n }\n }\n \n /**\n * Exact prefix matching\n */\n private exactPrefixMatch(text: string, pattern: string): { score: number; algorithm: string } {\n if (text.startsWith(pattern)) {\n const coverage = pattern.length / text.length\n // Higher base score for prefix matches to prioritize them\n return { score: 1000 + coverage * 500, algorithm: 'prefix' }\n }\n return { score: 0, algorithm: 'prefix' }\n }\n \n /**\n * Hyphen-aware matching (dao \u2192 dao-qi-harmony-designer)\n * Treats hyphens as optional word boundaries\n */\n private hyphenAwareMatch(text: string, pattern: string): { score: number; algorithm: string } {\n // Split by hyphens and try to match\n const words = text.split('-')\n \n // Check if pattern matches the beginning of hyphenated words\n if (words[0].startsWith(pattern)) {\n const coverage = pattern.length / words[0].length\n return { score: 300 + coverage * 100, algorithm: 'hyphen-prefix' }\n }\n \n // Check if pattern matches concatenated words (ignoring hyphens)\n const concatenated = words.join('')\n if (concatenated.startsWith(pattern)) {\n const coverage = pattern.length / concatenated.length\n return { score: 250 + coverage * 100, algorithm: 'hyphen-concat' }\n }\n \n // Check if pattern matches any word start\n for (let i = 0; i < words.length; i++) {\n if (words[i].startsWith(pattern)) {\n return { score: 200 - i * 10, algorithm: 'hyphen-word' }\n }\n }\n \n return { score: 0, algorithm: 'hyphen' }\n }\n \n /**\n * Word boundary matching (dq \u2192 dao-qi)\n * Matches characters at word boundaries\n */\n private wordBoundaryMatch(text: string, pattern: string): { score: number; algorithm: string } {\n const words = text.split(/[-_\\s]+/)\n let patternIdx = 0\n let score = 0\n let matched = false\n \n for (const word of words) {\n if (patternIdx >= pattern.length) break\n \n if (word[0] === pattern[patternIdx]) {\n score += 50 // Bonus for word boundary match\n patternIdx++\n matched = true\n \n // Try to match more characters in this word\n for (let i = 1; i < word.length && patternIdx < pattern.length; i++) {\n if (word[i] === pattern[patternIdx]) {\n score += 20\n patternIdx++\n }\n }\n }\n }\n \n if (matched && patternIdx === pattern.length) {\n return { score, algorithm: 'word-boundary' }\n }\n \n return { score: 0, algorithm: 'word-boundary' }\n }\n \n /**\n * Abbreviation matching (nde \u2192 node, daoqi \u2192 dao-qi)\n */\n private abbreviationMatch(text: string, pattern: string): { score: number; algorithm: string } {\n let textIdx = 0\n let patternIdx = 0\n let score = 0\n let lastMatchIdx = -1\n \n while (patternIdx < pattern.length && textIdx < text.length) {\n if (text[textIdx] === pattern[patternIdx]) {\n // Calculate position score\n const gap = lastMatchIdx === -1 ? 0 : textIdx - lastMatchIdx - 1\n \n if (textIdx === 0) {\n score += 50 // First character match\n } else if (lastMatchIdx >= 0 && gap === 0) {\n score += 30 // Consecutive match\n } else if (text[textIdx - 1] === '-' || text[textIdx - 1] === '_') {\n score += 40 // Word boundary match\n } else {\n score += Math.max(5, 20 - gap * 2) // Distance penalty\n }\n \n lastMatchIdx = textIdx\n patternIdx++\n }\n textIdx++\n }\n \n if (patternIdx === pattern.length) {\n // Bonus for compact matches\n const spread = lastMatchIdx / pattern.length\n if (spread <= 3) score += 50\n else if (spread <= 5) score += 30\n \n return { score, algorithm: 'abbreviation' }\n }\n \n return { score: 0, algorithm: 'abbreviation' }\n }\n \n /**\n * Numeric suffix matching (py3 \u2192 python3, np18 \u2192 node18)\n */\n private numericSuffixMatch(text: string, pattern: string): { score: number; algorithm: string } {\n // Check if pattern has numeric suffix\n const patternMatch = pattern.match(/^(.+?)(\\d+)$/)\n if (!patternMatch) return { score: 0, algorithm: 'numeric' }\n \n const [, prefix, suffix] = patternMatch\n \n // Check if text ends with same number\n if (!text.endsWith(suffix)) return { score: 0, algorithm: 'numeric' }\n \n // Check if prefix matches start of text\n const textWithoutSuffix = text.slice(0, -suffix.length)\n if (textWithoutSuffix.startsWith(prefix)) {\n const coverage = prefix.length / textWithoutSuffix.length\n return { score: 200 + coverage * 100, algorithm: 'numeric-suffix' }\n }\n \n // Check abbreviation match for prefix\n const abbrevResult = this.abbreviationMatch(textWithoutSuffix, prefix)\n if (abbrevResult.score > 0) {\n return { score: abbrevResult.score + 50, algorithm: 'numeric-abbrev' }\n }\n \n return { score: 0, algorithm: 'numeric' }\n }\n \n /**\n * Subsequence matching - characters appear in order\n */\n private subsequenceMatch(text: string, pattern: string): { score: number; algorithm: string } {\n let textIdx = 0\n let patternIdx = 0\n let score = 0\n \n while (patternIdx < pattern.length && textIdx < text.length) {\n if (text[textIdx] === pattern[patternIdx]) {\n score += 10\n patternIdx++\n }\n textIdx++\n }\n \n if (patternIdx === pattern.length) {\n // Penalty for spread\n const spread = textIdx / pattern.length\n score = Math.max(10, score - spread * 5)\n return { score, algorithm: 'subsequence' }\n }\n \n return { score: 0, algorithm: 'subsequence' }\n }\n \n /**\n * Fuzzy segment matching (dao \u2192 dao-qi-harmony)\n * Matches segments flexibly\n */\n private fuzzySegmentMatch(text: string, pattern: string): { score: number; algorithm: string } {\n // Remove hyphens and underscores for matching\n const cleanText = text.replace(/[-_]/g, '')\n const cleanPattern = pattern.replace(/[-_]/g, '')\n \n // Check if clean pattern is a prefix of clean text\n if (cleanText.startsWith(cleanPattern)) {\n const coverage = cleanPattern.length / cleanText.length\n return { score: 150 + coverage * 100, algorithm: 'fuzzy-segment' }\n }\n \n // Check if pattern appears anywhere in clean text\n const index = cleanText.indexOf(cleanPattern)\n if (index !== -1) {\n const positionPenalty = index * 5\n return { score: Math.max(50, 100 - positionPenalty), algorithm: 'fuzzy-contains' }\n }\n \n return { score: 0, algorithm: 'fuzzy-segment' }\n }\n}\n\n// Export singleton instance and helper functions\nexport const advancedMatcher = new AdvancedFuzzyMatcher()\n\nexport function matchAdvanced(candidate: string, query: string): MatchResult {\n return advancedMatcher.match(candidate, query)\n}\n\nexport function matchManyAdvanced(\n candidates: string[], \n query: string,\n minScore: number = 10\n): Array<{ candidate: string; score: number; algorithm: string }> {\n return candidates\n .map(candidate => {\n const result = advancedMatcher.match(candidate, query)\n return {\n candidate,\n score: result.score,\n algorithm: result.algorithm\n }\n })\n .filter(item => item.score >= minScore)\n .sort((a, b) => b.score - a.score)\n}"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync, readdirSync, statSync, watch } from "fs";
|
|
2
|
-
import { join } from "path";
|
|
3
|
-
import { homedir } from "os";
|
|
4
|
-
import matter from "gray-matter";
|
|
5
|
-
import { getCwd } from "./state.js";
|
|
6
|
-
import { memoize } from "lodash-es";
|
|
7
|
-
const warnedAgents = /* @__PURE__ */ new Set();
|
|
8
|
-
const BUILTIN_GENERAL_PURPOSE = {
|
|
9
|
-
agentType: "general-purpose",
|
|
10
|
-
whenToUse: "General-purpose agent for researching complex questions, searching for code, and executing multi-step tasks",
|
|
11
|
-
tools: "*",
|
|
12
|
-
systemPrompt: `You are a general-purpose agent. Given the user's task, use the tools available to complete it efficiently and thoroughly.
|
|
13
|
-
|
|
14
|
-
When to use your capabilities:
|
|
15
|
-
- Searching for code, configurations, and patterns across large codebases
|
|
16
|
-
- Analyzing multiple files to understand system architecture
|
|
17
|
-
- Investigating complex questions that require exploring many files
|
|
18
|
-
- Performing multi-step research tasks
|
|
19
|
-
|
|
20
|
-
Guidelines:
|
|
21
|
-
- For file searches: Use Grep or Glob when you need to search broadly. Use FileRead when you know the specific file path.
|
|
22
|
-
- For analysis: Start broad and narrow down. Use multiple search strategies if the first doesn't yield results.
|
|
23
|
-
- Be thorough: Check multiple locations, consider different naming conventions, look for related files.
|
|
24
|
-
- Complete tasks directly using your capabilities.`,
|
|
25
|
-
location: "built-in"
|
|
26
|
-
};
|
|
27
|
-
function parseTools(tools) {
|
|
28
|
-
if (!tools) return "*";
|
|
29
|
-
if (tools === "*") return "*";
|
|
30
|
-
if (Array.isArray(tools)) {
|
|
31
|
-
const filteredTools = tools.filter((t) => typeof t === "string");
|
|
32
|
-
return filteredTools.length > 0 ? filteredTools : "*";
|
|
33
|
-
}
|
|
34
|
-
if (typeof tools === "string") {
|
|
35
|
-
return [tools];
|
|
36
|
-
}
|
|
37
|
-
return "*";
|
|
38
|
-
}
|
|
39
|
-
async function scanAgentDirectory(dirPath, location) {
|
|
40
|
-
if (!existsSync(dirPath)) {
|
|
41
|
-
return [];
|
|
42
|
-
}
|
|
43
|
-
const agents = [];
|
|
44
|
-
try {
|
|
45
|
-
const files = readdirSync(dirPath);
|
|
46
|
-
for (const file of files) {
|
|
47
|
-
if (!file.endsWith(".md")) continue;
|
|
48
|
-
const filePath = join(dirPath, file);
|
|
49
|
-
const stat = statSync(filePath);
|
|
50
|
-
if (!stat.isFile()) continue;
|
|
51
|
-
try {
|
|
52
|
-
const content = readFileSync(filePath, "utf-8");
|
|
53
|
-
const { data: frontmatter, content: body } = matter(content);
|
|
54
|
-
if (!frontmatter.name || !frontmatter.description) {
|
|
55
|
-
console.warn(`Skipping ${filePath}: missing required fields (name, description)`);
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
if (frontmatter.model && !frontmatter.model_name && !warnedAgents.has(frontmatter.name) && process.env.KODE_DEBUG_AGENTS) {
|
|
59
|
-
console.warn(`\u26A0\uFE0F Agent ${frontmatter.name}: 'model' field is deprecated and ignored. Use 'model_name' instead, or omit to use default 'task' model.`);
|
|
60
|
-
warnedAgents.add(frontmatter.name);
|
|
61
|
-
}
|
|
62
|
-
const agent = {
|
|
63
|
-
agentType: frontmatter.name,
|
|
64
|
-
whenToUse: frontmatter.description.replace(/\\n/g, "\n"),
|
|
65
|
-
tools: parseTools(frontmatter.tools),
|
|
66
|
-
systemPrompt: body.trim(),
|
|
67
|
-
location,
|
|
68
|
-
...frontmatter.color && { color: frontmatter.color },
|
|
69
|
-
// Only use model_name field, ignore deprecated 'model' field
|
|
70
|
-
...frontmatter.model_name && { model_name: frontmatter.model_name }
|
|
71
|
-
};
|
|
72
|
-
agents.push(agent);
|
|
73
|
-
} catch (error) {
|
|
74
|
-
console.warn(`Failed to parse agent file ${filePath}:`, error);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
} catch (error) {
|
|
78
|
-
console.warn(`Failed to scan directory ${dirPath}:`, error);
|
|
79
|
-
}
|
|
80
|
-
return agents;
|
|
81
|
-
}
|
|
82
|
-
async function loadAllAgents() {
|
|
83
|
-
try {
|
|
84
|
-
const userClaudeDir = join(homedir(), ".claude", "agents");
|
|
85
|
-
const userKodeDir = join(homedir(), ".kode", "agents");
|
|
86
|
-
const projectClaudeDir = join(getCwd(), ".claude", "agents");
|
|
87
|
-
const projectKodeDir = join(getCwd(), ".kode", "agents");
|
|
88
|
-
const [userClaudeAgents, userKodeAgents, projectClaudeAgents, projectKodeAgents] = await Promise.all([
|
|
89
|
-
scanAgentDirectory(userClaudeDir, "user"),
|
|
90
|
-
scanAgentDirectory(userKodeDir, "user"),
|
|
91
|
-
scanAgentDirectory(projectClaudeDir, "project"),
|
|
92
|
-
scanAgentDirectory(projectKodeDir, "project")
|
|
93
|
-
]);
|
|
94
|
-
const builtinAgents = [BUILTIN_GENERAL_PURPOSE];
|
|
95
|
-
const agentMap = /* @__PURE__ */ new Map();
|
|
96
|
-
for (const agent of builtinAgents) {
|
|
97
|
-
agentMap.set(agent.agentType, agent);
|
|
98
|
-
}
|
|
99
|
-
for (const agent of userClaudeAgents) {
|
|
100
|
-
agentMap.set(agent.agentType, agent);
|
|
101
|
-
}
|
|
102
|
-
for (const agent of userKodeAgents) {
|
|
103
|
-
agentMap.set(agent.agentType, agent);
|
|
104
|
-
}
|
|
105
|
-
for (const agent of projectClaudeAgents) {
|
|
106
|
-
agentMap.set(agent.agentType, agent);
|
|
107
|
-
}
|
|
108
|
-
for (const agent of projectKodeAgents) {
|
|
109
|
-
agentMap.set(agent.agentType, agent);
|
|
110
|
-
}
|
|
111
|
-
const activeAgents = Array.from(agentMap.values());
|
|
112
|
-
const allAgents = [...builtinAgents, ...userClaudeAgents, ...userKodeAgents, ...projectClaudeAgents, ...projectKodeAgents];
|
|
113
|
-
return { activeAgents, allAgents };
|
|
114
|
-
} catch (error) {
|
|
115
|
-
console.error("Failed to load agents, falling back to built-in:", error);
|
|
116
|
-
return {
|
|
117
|
-
activeAgents: [BUILTIN_GENERAL_PURPOSE],
|
|
118
|
-
allAgents: [BUILTIN_GENERAL_PURPOSE]
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
const getActiveAgents = memoize(
|
|
123
|
-
async () => {
|
|
124
|
-
const { activeAgents } = await loadAllAgents();
|
|
125
|
-
return activeAgents;
|
|
126
|
-
}
|
|
127
|
-
);
|
|
128
|
-
const getAllAgents = memoize(
|
|
129
|
-
async () => {
|
|
130
|
-
const { allAgents } = await loadAllAgents();
|
|
131
|
-
return allAgents;
|
|
132
|
-
}
|
|
133
|
-
);
|
|
134
|
-
function clearAgentCache() {
|
|
135
|
-
getActiveAgents.cache?.clear?.();
|
|
136
|
-
getAllAgents.cache?.clear?.();
|
|
137
|
-
getAgentByType.cache?.clear?.();
|
|
138
|
-
getAvailableAgentTypes.cache?.clear?.();
|
|
139
|
-
}
|
|
140
|
-
const getAgentByType = memoize(
|
|
141
|
-
async (agentType) => {
|
|
142
|
-
const agents = await getActiveAgents();
|
|
143
|
-
return agents.find((agent) => agent.agentType === agentType);
|
|
144
|
-
}
|
|
145
|
-
);
|
|
146
|
-
const getAvailableAgentTypes = memoize(
|
|
147
|
-
async () => {
|
|
148
|
-
const agents = await getActiveAgents();
|
|
149
|
-
return agents.map((agent) => agent.agentType);
|
|
150
|
-
}
|
|
151
|
-
);
|
|
152
|
-
let watchers = [];
|
|
153
|
-
async function startAgentWatcher(onChange) {
|
|
154
|
-
await stopAgentWatcher();
|
|
155
|
-
const userClaudeDir = join(homedir(), ".claude", "agents");
|
|
156
|
-
const userKodeDir = join(homedir(), ".kode", "agents");
|
|
157
|
-
const projectClaudeDir = join(getCwd(), ".claude", "agents");
|
|
158
|
-
const projectKodeDir = join(getCwd(), ".kode", "agents");
|
|
159
|
-
const watchDirectory = (dirPath, label) => {
|
|
160
|
-
if (existsSync(dirPath)) {
|
|
161
|
-
const watcher = watch(dirPath, { recursive: false }, async (eventType, filename) => {
|
|
162
|
-
if (filename && filename.endsWith(".md")) {
|
|
163
|
-
console.log(`\u{1F504} Agent configuration changed in ${label}: ${filename}`);
|
|
164
|
-
clearAgentCache();
|
|
165
|
-
getAllAgents.cache?.clear?.();
|
|
166
|
-
onChange?.();
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
watchers.push(watcher);
|
|
170
|
-
}
|
|
171
|
-
};
|
|
172
|
-
watchDirectory(userClaudeDir, "user/.claude");
|
|
173
|
-
watchDirectory(userKodeDir, "user/.kode");
|
|
174
|
-
watchDirectory(projectClaudeDir, "project/.claude");
|
|
175
|
-
watchDirectory(projectKodeDir, "project/.kode");
|
|
176
|
-
}
|
|
177
|
-
async function stopAgentWatcher() {
|
|
178
|
-
try {
|
|
179
|
-
for (const watcher of watchers) {
|
|
180
|
-
try {
|
|
181
|
-
watcher.close();
|
|
182
|
-
} catch (err) {
|
|
183
|
-
console.error("Failed to close file watcher:", err);
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
} finally {
|
|
187
|
-
watchers = [];
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
export {
|
|
191
|
-
clearAgentCache,
|
|
192
|
-
getActiveAgents,
|
|
193
|
-
getAgentByType,
|
|
194
|
-
getAllAgents,
|
|
195
|
-
getAvailableAgentTypes,
|
|
196
|
-
startAgentWatcher,
|
|
197
|
-
stopAgentWatcher
|
|
198
|
-
};
|
|
199
|
-
//# sourceMappingURL=agentLoader.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/agentLoader.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Agent configuration loader\n * Loads agent configurations from markdown files with YAML frontmatter\n * Following Claude Code's agent system architecture\n */\n\nimport { existsSync, readFileSync, readdirSync, statSync, watch, FSWatcher } from 'fs'\nimport { join, resolve } from 'path'\nimport { homedir } from 'os'\nimport matter from 'gray-matter'\nimport { getCwd } from './state'\nimport { memoize } from 'lodash-es'\n\n// Track warned agents to avoid spam\nconst warnedAgents = new Set<string>()\n\nexport interface AgentConfig {\n agentType: string // Agent identifier (matches subagent_type)\n whenToUse: string // Description of when to use this agent \n tools: string[] | '*' // Tool permissions\n systemPrompt: string // System prompt content\n location: 'built-in' | 'user' | 'project'\n color?: string // Optional UI color\n model_name?: string // Optional model override\n}\n\n// Built-in general-purpose agent as fallback\nconst BUILTIN_GENERAL_PURPOSE: AgentConfig = {\n agentType: 'general-purpose',\n whenToUse: 'General-purpose agent for researching complex questions, searching for code, and executing multi-step tasks',\n tools: '*',\n systemPrompt: `You are a general-purpose agent. Given the user's task, use the tools available to complete it efficiently and thoroughly.\n\nWhen to use your capabilities:\n- Searching for code, configurations, and patterns across large codebases\n- Analyzing multiple files to understand system architecture \n- Investigating complex questions that require exploring many files\n- Performing multi-step research tasks\n\nGuidelines:\n- For file searches: Use Grep or Glob when you need to search broadly. Use FileRead when you know the specific file path.\n- For analysis: Start broad and narrow down. Use multiple search strategies if the first doesn't yield results.\n- Be thorough: Check multiple locations, consider different naming conventions, look for related files.\n- Complete tasks directly using your capabilities.`,\n location: 'built-in'\n}\n\n/**\n * Parse tools field from frontmatter\n */\nfunction parseTools(tools: any): string[] | '*' {\n if (!tools) return '*'\n if (tools === '*') return '*'\n if (Array.isArray(tools)) {\n // Ensure all items are strings and filter out non-strings\n const filteredTools = tools.filter((t): t is string => typeof t === 'string')\n return filteredTools.length > 0 ? filteredTools : '*'\n }\n if (typeof tools === 'string') {\n return [tools]\n }\n return '*'\n}\n\n/**\n * Scan a directory for agent configuration files\n */\nasync function scanAgentDirectory(dirPath: string, location: 'user' | 'project'): Promise<AgentConfig[]> {\n if (!existsSync(dirPath)) {\n return []\n }\n\n const agents: AgentConfig[] = []\n \n try {\n const files = readdirSync(dirPath)\n \n for (const file of files) {\n if (!file.endsWith('.md')) continue\n \n const filePath = join(dirPath, file)\n const stat = statSync(filePath)\n \n if (!stat.isFile()) continue\n \n try {\n const content = readFileSync(filePath, 'utf-8')\n const { data: frontmatter, content: body } = matter(content)\n \n // Validate required fields\n if (!frontmatter.name || !frontmatter.description) {\n console.warn(`Skipping ${filePath}: missing required fields (name, description)`)\n continue\n }\n \n // Silently ignore deprecated 'model' field - no warnings by default\n // Only warn if KODE_DEBUG_AGENTS environment variable is set\n if (frontmatter.model && !frontmatter.model_name && !warnedAgents.has(frontmatter.name) && process.env.KODE_DEBUG_AGENTS) {\n console.warn(`\u26A0\uFE0F Agent ${frontmatter.name}: 'model' field is deprecated and ignored. Use 'model_name' instead, or omit to use default 'task' model.`)\n warnedAgents.add(frontmatter.name)\n }\n \n // Build agent config\n const agent: AgentConfig = {\n agentType: frontmatter.name,\n whenToUse: frontmatter.description.replace(/\\\\n/g, '\\n'),\n tools: parseTools(frontmatter.tools),\n systemPrompt: body.trim(),\n location,\n ...(frontmatter.color && { color: frontmatter.color }),\n // Only use model_name field, ignore deprecated 'model' field\n ...(frontmatter.model_name && { model_name: frontmatter.model_name })\n }\n \n agents.push(agent)\n } catch (error) {\n console.warn(`Failed to parse agent file ${filePath}:`, error)\n }\n }\n } catch (error) {\n console.warn(`Failed to scan directory ${dirPath}:`, error)\n }\n \n return agents\n}\n\n/**\n * Load all agent configurations\n */\nasync function loadAllAgents(): Promise<{\n activeAgents: AgentConfig[]\n allAgents: AgentConfig[]\n}> {\n try {\n // Scan both .claude and .kode directories in parallel\n // Claude Code compatibility: support both ~/.claude/agents and ~/.kode/agents\n const userClaudeDir = join(homedir(), '.claude', 'agents')\n const userKodeDir = join(homedir(), '.kode', 'agents')\n const projectClaudeDir = join(getCwd(), '.claude', 'agents')\n const projectKodeDir = join(getCwd(), '.kode', 'agents')\n \n const [userClaudeAgents, userKodeAgents, projectClaudeAgents, projectKodeAgents] = await Promise.all([\n scanAgentDirectory(userClaudeDir, 'user'),\n scanAgentDirectory(userKodeDir, 'user'),\n scanAgentDirectory(projectClaudeDir, 'project'),\n scanAgentDirectory(projectKodeDir, 'project')\n ])\n \n // Built-in agents (currently just general-purpose)\n const builtinAgents = [BUILTIN_GENERAL_PURPOSE]\n \n // Apply priority override: built-in < .claude (user) < .kode (user) < .claude (project) < .kode (project)\n const agentMap = new Map<string, AgentConfig>()\n \n // Add in priority order (later entries override earlier ones)\n for (const agent of builtinAgents) {\n agentMap.set(agent.agentType, agent)\n }\n for (const agent of userClaudeAgents) {\n agentMap.set(agent.agentType, agent)\n }\n for (const agent of userKodeAgents) {\n agentMap.set(agent.agentType, agent)\n }\n for (const agent of projectClaudeAgents) {\n agentMap.set(agent.agentType, agent)\n }\n for (const agent of projectKodeAgents) {\n agentMap.set(agent.agentType, agent)\n }\n \n const activeAgents = Array.from(agentMap.values())\n const allAgents = [...builtinAgents, ...userClaudeAgents, ...userKodeAgents, ...projectClaudeAgents, ...projectKodeAgents]\n \n return { activeAgents, allAgents }\n } catch (error) {\n console.error('Failed to load agents, falling back to built-in:', error)\n return {\n activeAgents: [BUILTIN_GENERAL_PURPOSE],\n allAgents: [BUILTIN_GENERAL_PURPOSE]\n }\n }\n}\n\n// Memoized version for performance\nexport const getActiveAgents = memoize(\n async (): Promise<AgentConfig[]> => {\n const { activeAgents } = await loadAllAgents()\n return activeAgents\n }\n)\n\n// Get all agents (both active and overridden)\nexport const getAllAgents = memoize(\n async (): Promise<AgentConfig[]> => {\n const { allAgents } = await loadAllAgents()\n return allAgents\n }\n)\n\n// Clear cache when needed\nexport function clearAgentCache() {\n getActiveAgents.cache?.clear?.()\n getAllAgents.cache?.clear?.()\n getAgentByType.cache?.clear?.()\n getAvailableAgentTypes.cache?.clear?.()\n}\n\n// Get a specific agent by type\nexport const getAgentByType = memoize(\n async (agentType: string): Promise<AgentConfig | undefined> => {\n const agents = await getActiveAgents()\n return agents.find(agent => agent.agentType === agentType)\n }\n)\n\n// Get all available agent types for validation\nexport const getAvailableAgentTypes = memoize(\n async (): Promise<string[]> => {\n const agents = await getActiveAgents()\n return agents.map(agent => agent.agentType)\n }\n)\n\n// File watcher for hot reload\nlet watchers: FSWatcher[] = []\n\n/**\n * Start watching agent configuration directories for changes\n */\nexport async function startAgentWatcher(onChange?: () => void): Promise<void> {\n await stopAgentWatcher() // Clean up any existing watchers\n \n // Watch both .claude and .kode directories\n const userClaudeDir = join(homedir(), '.claude', 'agents')\n const userKodeDir = join(homedir(), '.kode', 'agents')\n const projectClaudeDir = join(getCwd(), '.claude', 'agents')\n const projectKodeDir = join(getCwd(), '.kode', 'agents')\n \n const watchDirectory = (dirPath: string, label: string) => {\n if (existsSync(dirPath)) {\n const watcher = watch(dirPath, { recursive: false }, async (eventType, filename) => {\n if (filename && filename.endsWith('.md')) {\n console.log(`\uD83D\uDD04 Agent configuration changed in ${label}: ${filename}`)\n clearAgentCache()\n // Also clear any other related caches\n getAllAgents.cache?.clear?.()\n onChange?.()\n }\n })\n watchers.push(watcher)\n }\n }\n \n // Watch all directories\n watchDirectory(userClaudeDir, 'user/.claude')\n watchDirectory(userKodeDir, 'user/.kode')\n watchDirectory(projectClaudeDir, 'project/.claude')\n watchDirectory(projectKodeDir, 'project/.kode')\n}\n\n/**\n * Stop watching agent configuration directories\n */\nexport async function stopAgentWatcher(): Promise<void> {\n // FSWatcher.close() is synchronous and does not accept a callback on Node 18/20\n try {\n for (const watcher of watchers) {\n try {\n watcher.close()\n } catch (err) {\n console.error('Failed to close file watcher:', err)\n }\n }\n } finally {\n watchers = []\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
2
|
-
import { join } from "path";
|
|
3
|
-
import { homedir } from "os";
|
|
4
|
-
import { randomUUID } from "crypto";
|
|
5
|
-
function getConfigDirectory() {
|
|
6
|
-
return process.env.KODE_CONFIG_DIR ?? process.env.ANYKODE_CONFIG_DIR ?? join(homedir(), ".kode");
|
|
7
|
-
}
|
|
8
|
-
function getSessionId() {
|
|
9
|
-
return process.env.ANYKODE_SESSION_ID ?? "default-session";
|
|
10
|
-
}
|
|
11
|
-
function getAgentFilePath(agentId) {
|
|
12
|
-
const sessionId = getSessionId();
|
|
13
|
-
const filename = `${sessionId}-agent-${agentId}.json`;
|
|
14
|
-
const configDir = getConfigDirectory();
|
|
15
|
-
if (!existsSync(configDir)) {
|
|
16
|
-
mkdirSync(configDir, { recursive: true });
|
|
17
|
-
}
|
|
18
|
-
return join(configDir, filename);
|
|
19
|
-
}
|
|
20
|
-
function readAgentData(agentId) {
|
|
21
|
-
const filePath = getAgentFilePath(agentId);
|
|
22
|
-
if (!existsSync(filePath)) {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
try {
|
|
26
|
-
const content = readFileSync(filePath, "utf-8");
|
|
27
|
-
return JSON.parse(content);
|
|
28
|
-
} catch (error) {
|
|
29
|
-
console.error(`Failed to read agent data for ${agentId}:`, error);
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
function writeAgentData(agentId, data) {
|
|
34
|
-
const filePath = getAgentFilePath(agentId);
|
|
35
|
-
try {
|
|
36
|
-
writeFileSync(filePath, JSON.stringify(data, null, 2), "utf-8");
|
|
37
|
-
} catch (error) {
|
|
38
|
-
console.error(`Failed to write agent data for ${agentId}:`, error);
|
|
39
|
-
throw error;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function getDefaultAgentId() {
|
|
43
|
-
return "default";
|
|
44
|
-
}
|
|
45
|
-
function resolveAgentId(agentId) {
|
|
46
|
-
return agentId || getDefaultAgentId();
|
|
47
|
-
}
|
|
48
|
-
function generateAgentId() {
|
|
49
|
-
return randomUUID();
|
|
50
|
-
}
|
|
51
|
-
export {
|
|
52
|
-
generateAgentId,
|
|
53
|
-
getAgentFilePath,
|
|
54
|
-
getDefaultAgentId,
|
|
55
|
-
readAgentData,
|
|
56
|
-
resolveAgentId,
|
|
57
|
-
writeAgentData
|
|
58
|
-
};
|
|
59
|
-
//# sourceMappingURL=agentStorage.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/agentStorage.ts"],
|
|
4
|
-
"sourcesContent": ["import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs'\nimport { join } from 'path'\nimport { homedir } from 'os'\nimport { randomUUID } from 'crypto'\n\n/**\n * Agent Storage Utilities\n * Provides file-based state isolation for different agents\n * Based on Kode's Agent ID architecture\n */\n\n/**\n * Get the kode config directory\n */\nfunction getConfigDirectory(): string {\n return process.env.KODE_CONFIG_DIR ?? process.env.ANYKODE_CONFIG_DIR ?? join(homedir(), '.kode')\n}\n\n/**\n * Get the current session ID\n */\nfunction getSessionId(): string {\n // This should be set when the session starts\n return process.env.ANYKODE_SESSION_ID ?? 'default-session'\n}\n\n/**\n * Generate agent-specific file path\n * Pattern: ${sessionId}-agent-${agentId}.json\n * Stored in ~/.kode/ directory\n */\nexport function getAgentFilePath(agentId: string): string {\n const sessionId = getSessionId()\n const filename = `${sessionId}-agent-${agentId}.json`\n const configDir = getConfigDirectory()\n\n // Ensure kode config directory exists\n if (!existsSync(configDir)) {\n mkdirSync(configDir, { recursive: true })\n }\n\n return join(configDir, filename)\n}\n\n/**\n * Read agent-specific data from storage\n */\nexport function readAgentData<T = any>(agentId: string): T | null {\n const filePath = getAgentFilePath(agentId)\n\n if (!existsSync(filePath)) {\n return null\n }\n\n try {\n const content = readFileSync(filePath, 'utf-8')\n return JSON.parse(content) as T\n } catch (error) {\n console.error(`Failed to read agent data for ${agentId}:`, error)\n return null\n }\n}\n\n/**\n * Write agent-specific data to storage\n */\nexport function writeAgentData<T = any>(agentId: string, data: T): void {\n const filePath = getAgentFilePath(agentId)\n\n try {\n writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf-8')\n } catch (error) {\n console.error(`Failed to write agent data for ${agentId}:`, error)\n throw error\n }\n}\n\n/**\n * Get default agent ID if none is provided\n */\nexport function getDefaultAgentId(): string {\n return 'default'\n}\n\n/**\n * Resolve agent ID from context\n */\nexport function resolveAgentId(agentId?: string): string {\n return agentId || getDefaultAgentId()\n}\n\n/**\n * Generate a new unique Agent ID\n */\nexport function generateAgentId(): string {\n return randomUUID()\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,YAAY,cAAc,eAAe,iBAAiB;AACnE,SAAS,YAAY;AACrB,SAAS,eAAe;AACxB,SAAS,kBAAkB;AAW3B,SAAS,qBAA6B;AACpC,SAAO,QAAQ,IAAI,mBAAmB,QAAQ,IAAI,sBAAsB,KAAK,QAAQ,GAAG,OAAO;AACjG;AAKA,SAAS,eAAuB;AAE9B,SAAO,QAAQ,IAAI,sBAAsB;AAC3C;AAOO,SAAS,iBAAiB,SAAyB;AACxD,QAAM,YAAY,aAAa;AAC/B,QAAM,WAAW,GAAG,SAAS,UAAU,OAAO;AAC9C,QAAM,YAAY,mBAAmB;AAGrC,MAAI,CAAC,WAAW,SAAS,GAAG;AAC1B,cAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,EAC1C;AAEA,SAAO,KAAK,WAAW,QAAQ;AACjC;AAKO,SAAS,cAAuB,SAA2B;AAChE,QAAM,WAAW,iBAAiB,OAAO;AAEzC,MAAI,CAAC,WAAW,QAAQ,GAAG;AACzB,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,UAAU,aAAa,UAAU,OAAO;AAC9C,WAAO,KAAK,MAAM,OAAO;AAAA,EAC3B,SAAS,OAAO;AACd,YAAQ,MAAM,iCAAiC,OAAO,KAAK,KAAK;AAChE,WAAO;AAAA,EACT;AACF;AAKO,SAAS,eAAwB,SAAiB,MAAe;AACtE,QAAM,WAAW,iBAAiB,OAAO;AAEzC,MAAI;AACF,kBAAc,UAAU,KAAK,UAAU,MAAM,MAAM,CAAC,GAAG,OAAO;AAAA,EAChE,SAAS,OAAO;AACd,YAAQ,MAAM,kCAAkC,OAAO,KAAK,KAAK;AACjE,UAAM;AAAA,EACR;AACF;AAKO,SAAS,oBAA4B;AAC1C,SAAO;AACT;AAKO,SAAS,eAAe,SAA0B;AACvD,SAAO,WAAW,kBAAkB;AACtC;AAKO,SAAS,kBAA0B;AACxC,SAAO,WAAW;AACpB;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/utils/array.js
DELETED
package/dist/utils/array.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/array.ts"],
|
|
4
|
-
"sourcesContent": ["export function intersperse<A>(as: A[], separator: (index: number) => A): A[] {\n return as.flatMap((a, i) => (i ? [separator(i), a] : [a]))\n}\n"],
|
|
5
|
-
"mappings": "AAAO,SAAS,YAAe,IAAS,WAAsC;AAC5E,SAAO,GAAG,QAAQ,CAAC,GAAG,MAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE;AAC3D;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/utils/ask.js
DELETED
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { last } from "lodash-es";
|
|
2
|
-
import { getSystemPrompt } from "../constants/prompts.js";
|
|
3
|
-
import { getContext } from "../context.js";
|
|
4
|
-
import { getTotalCost } from "../cost-tracker.js";
|
|
5
|
-
import { query } from "../query.js";
|
|
6
|
-
import { getModelManager } from "../utils/model.js";
|
|
7
|
-
import { setCwd } from "./state.js";
|
|
8
|
-
import { getMessagesPath, overwriteLog } from "./log.js";
|
|
9
|
-
import { createUserMessage } from "./messages.js";
|
|
10
|
-
async function ask({
|
|
11
|
-
commands,
|
|
12
|
-
safeMode,
|
|
13
|
-
hasPermissionsToUseTool,
|
|
14
|
-
messageLogName,
|
|
15
|
-
prompt,
|
|
16
|
-
cwd,
|
|
17
|
-
tools,
|
|
18
|
-
verbose = false
|
|
19
|
-
}) {
|
|
20
|
-
await setCwd(cwd);
|
|
21
|
-
const message = createUserMessage(prompt);
|
|
22
|
-
const messages = [message];
|
|
23
|
-
const [systemPrompt, context, model] = await Promise.all([
|
|
24
|
-
getSystemPrompt(),
|
|
25
|
-
getContext(),
|
|
26
|
-
getModelManager().getModelName("main")
|
|
27
|
-
]);
|
|
28
|
-
for await (const m of query(
|
|
29
|
-
messages,
|
|
30
|
-
systemPrompt,
|
|
31
|
-
context,
|
|
32
|
-
hasPermissionsToUseTool,
|
|
33
|
-
{
|
|
34
|
-
options: {
|
|
35
|
-
commands,
|
|
36
|
-
tools,
|
|
37
|
-
verbose,
|
|
38
|
-
safeMode,
|
|
39
|
-
forkNumber: 0,
|
|
40
|
-
messageLogName: "unused",
|
|
41
|
-
maxThinkingTokens: 0
|
|
42
|
-
},
|
|
43
|
-
abortController: new AbortController(),
|
|
44
|
-
messageId: void 0,
|
|
45
|
-
readFileTimestamps: {},
|
|
46
|
-
setToolJSX: () => {
|
|
47
|
-
}
|
|
48
|
-
// No-op function for non-interactive use
|
|
49
|
-
}
|
|
50
|
-
)) {
|
|
51
|
-
messages.push(m);
|
|
52
|
-
}
|
|
53
|
-
const result = last(messages);
|
|
54
|
-
if (!result || result.type !== "assistant") {
|
|
55
|
-
throw new Error("Expected content to be an assistant message");
|
|
56
|
-
}
|
|
57
|
-
if (result.message.content[0]?.type !== "text") {
|
|
58
|
-
throw new Error(
|
|
59
|
-
`Expected first content item to be text, but got ${JSON.stringify(
|
|
60
|
-
result.message.content[0],
|
|
61
|
-
null,
|
|
62
|
-
2
|
|
63
|
-
)}`
|
|
64
|
-
);
|
|
65
|
-
}
|
|
66
|
-
const messageHistoryFile = getMessagesPath(messageLogName, 0, 0);
|
|
67
|
-
overwriteLog(messageHistoryFile, messages);
|
|
68
|
-
return {
|
|
69
|
-
resultText: result.message.content[0].text,
|
|
70
|
-
totalCost: getTotalCost(),
|
|
71
|
-
messageHistoryFile
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
export {
|
|
75
|
-
ask
|
|
76
|
-
};
|
|
77
|
-
//# sourceMappingURL=ask.js.map
|
package/dist/utils/ask.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/ask.tsx"],
|
|
4
|
-
"sourcesContent": ["import { last } from 'lodash-es'\nimport { Command } from '../commands'\nimport { getSystemPrompt } from '../constants/prompts'\nimport { getContext } from '../context'\nimport { getTotalCost } from '../cost-tracker'\nimport { Message, query } from '../query'\nimport { CanUseToolFn } from '../hooks/useCanUseTool'\nimport { Tool } from '../Tool'\nimport { getModelManager } from '../utils/model'\nimport { setCwd } from './state'\nimport { getMessagesPath, overwriteLog } from './log'\nimport { createUserMessage } from './messages'\n\ntype Props = {\n commands: Command[]\n safeMode?: boolean\n hasPermissionsToUseTool: CanUseToolFn\n messageLogName: string\n prompt: string\n cwd: string\n tools: Tool[]\n verbose?: boolean\n}\n\n// Sends a single prompt to the Claude API and returns the response.\n// Assumes that claude is being used non-interactively -- will not\n// ask the user for permissions or further input.\nexport async function ask({\n commands,\n safeMode,\n hasPermissionsToUseTool,\n messageLogName,\n prompt,\n cwd,\n tools,\n verbose = false,\n}: Props): Promise<{\n resultText: string\n totalCost: number\n messageHistoryFile: string\n}> {\n await setCwd(cwd)\n const message = createUserMessage(prompt)\n const messages: Message[] = [message]\n\n const [systemPrompt, context, model] = await Promise.all([\n getSystemPrompt(),\n getContext(),\n getModelManager().getModelName('main'),\n ])\n\n for await (const m of query(\n messages,\n systemPrompt,\n context,\n hasPermissionsToUseTool,\n {\n options: {\n commands,\n tools,\n verbose,\n safeMode,\n forkNumber: 0,\n messageLogName: 'unused',\n maxThinkingTokens: 0,\n },\n abortController: new AbortController(),\n messageId: undefined,\n readFileTimestamps: {},\n setToolJSX: () => {}, // No-op function for non-interactive use\n },\n )) {\n messages.push(m)\n }\n\n const result = last(messages)\n if (!result || result.type !== 'assistant') {\n throw new Error('Expected content to be an assistant message')\n }\n if (result.message.content[0]?.type !== 'text') {\n throw new Error(\n `Expected first content item to be text, but got ${JSON.stringify(\n result.message.content[0],\n null,\n 2,\n )}`,\n )\n }\n\n // Write log that can be retrieved with `claude log`\n const messageHistoryFile = getMessagesPath(messageLogName, 0, 0)\n overwriteLog(messageHistoryFile, messages)\n\n return {\n resultText: result.message.content[0].text,\n totalCost: getTotalCost(),\n messageHistoryFile,\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,YAAY;AAErB,SAAS,uBAAuB;AAChC,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAC7B,SAAkB,aAAa;AAG/B,SAAS,uBAAuB;AAChC,SAAS,cAAc;AACvB,SAAS,iBAAiB,oBAAoB;AAC9C,SAAS,yBAAyB;AAgBlC,eAAsB,IAAI;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AACZ,GAIG;AACD,QAAM,OAAO,GAAG;AAChB,QAAM,UAAU,kBAAkB,MAAM;AACxC,QAAM,WAAsB,CAAC,OAAO;AAEpC,QAAM,CAAC,cAAc,SAAS,KAAK,IAAI,MAAM,QAAQ,IAAI;AAAA,IACvD,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,gBAAgB,EAAE,aAAa,MAAM;AAAA,EACvC,CAAC;AAED,mBAAiB,KAAK;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,SAAS;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,mBAAmB;AAAA,MACrB;AAAA,MACA,iBAAiB,IAAI,gBAAgB;AAAA,MACrC,WAAW;AAAA,MACX,oBAAoB,CAAC;AAAA,MACrB,YAAY,MAAM;AAAA,MAAC;AAAA;AAAA,IACrB;AAAA,EACF,GAAG;AACD,aAAS,KAAK,CAAC;AAAA,EACjB;AAEA,QAAM,SAAS,KAAK,QAAQ;AAC5B,MAAI,CAAC,UAAU,OAAO,SAAS,aAAa;AAC1C,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AACA,MAAI,OAAO,QAAQ,QAAQ,CAAC,GAAG,SAAS,QAAQ;AAC9C,UAAM,IAAI;AAAA,MACR,mDAAmD,KAAK;AAAA,QACtD,OAAO,QAAQ,QAAQ,CAAC;AAAA,QACxB;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAGA,QAAM,qBAAqB,gBAAgB,gBAAgB,GAAG,CAAC;AAC/D,eAAa,oBAAoB,QAAQ;AAEzC,SAAO;AAAA,IACL,YAAY,OAAO,QAAQ,QAAQ,CAAC,EAAE;AAAA,IACtC,WAAW,aAAa;AAAA,IACxB;AAAA,EACF;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/utils/auth.js
DELETED
package/dist/utils/auth.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/utils/auth.ts"],
|
|
4
|
-
"sourcesContent": ["import { USE_BEDROCK, USE_VERTEX } from './model'\nimport { getGlobalConfig } from './config'\n\nexport function isAnthropicAuthEnabled(): boolean {\n return false\n // return !(USE_BEDROCK || USE_VERTEX)\n}\n\nexport function isLoggedInToAnthropic(): boolean {\n return false\n // const config = getGlobalConfig()\n // return !!config.primaryApiKey\n}\n"],
|
|
5
|
-
"mappings": "AAGO,SAAS,yBAAkC;AAChD,SAAO;AAET;AAEO,SAAS,wBAAiC;AAC/C,SAAO;AAGT;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
import { countTokens } from "./tokens.js";
|
|
2
|
-
import { getMessagesSetter } from "../messages.js";
|
|
3
|
-
import { getContext } from "../context.js";
|
|
4
|
-
import { getCodeStyle } from "../utils/style.js";
|
|
5
|
-
import { resetFileFreshnessSession } from "../services/fileFreshness.js";
|
|
6
|
-
import { createUserMessage, normalizeMessagesForAPI } from "../utils/messages.js";
|
|
7
|
-
import { queryLLM } from "../services/claude.js";
|
|
8
|
-
import { selectAndReadFiles } from "./fileRecoveryCore.js";
|
|
9
|
-
import { addLineNumbers } from "./file.js";
|
|
10
|
-
import { getModelManager } from "./model.js";
|
|
11
|
-
const AUTO_COMPACT_THRESHOLD_RATIO = 0.92;
|
|
12
|
-
async function getCompressionModelContextLimit() {
|
|
13
|
-
try {
|
|
14
|
-
const modelManager = getModelManager();
|
|
15
|
-
const modelProfile = modelManager.getModel("main");
|
|
16
|
-
if (modelProfile?.contextLength) {
|
|
17
|
-
return modelProfile.contextLength;
|
|
18
|
-
}
|
|
19
|
-
return 2e5;
|
|
20
|
-
} catch (error) {
|
|
21
|
-
return 2e5;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
const COMPRESSION_PROMPT = `Please provide a comprehensive summary of our conversation structured as follows:
|
|
25
|
-
|
|
26
|
-
## Technical Context
|
|
27
|
-
Development environment, tools, frameworks, and configurations in use. Programming languages, libraries, and technical constraints. File structure, directory organization, and project architecture.
|
|
28
|
-
|
|
29
|
-
## Project Overview
|
|
30
|
-
Main project goals, features, and scope. Key components, modules, and their relationships. Data models, APIs, and integration patterns.
|
|
31
|
-
|
|
32
|
-
## Code Changes
|
|
33
|
-
Files created, modified, or analyzed during our conversation. Specific code implementations, functions, and algorithms added. Configuration changes and structural modifications.
|
|
34
|
-
|
|
35
|
-
## Debugging & Issues
|
|
36
|
-
Problems encountered and their root causes. Solutions implemented and their effectiveness. Error messages, logs, and diagnostic information.
|
|
37
|
-
|
|
38
|
-
## Current Status
|
|
39
|
-
What we just completed successfully. Current state of the codebase and any ongoing work. Test results, validation steps, and verification performed.
|
|
40
|
-
|
|
41
|
-
## Pending Tasks
|
|
42
|
-
Immediate next steps and priorities. Planned features, improvements, and refactoring. Known issues, technical debt, and areas needing attention.
|
|
43
|
-
|
|
44
|
-
## User Preferences
|
|
45
|
-
Coding style, formatting, and organizational preferences. Communication patterns and feedback style. Tool choices and workflow preferences.
|
|
46
|
-
|
|
47
|
-
## Key Decisions
|
|
48
|
-
Important technical decisions made and their rationale. Alternative approaches considered and why they were rejected. Trade-offs accepted and their implications.
|
|
49
|
-
|
|
50
|
-
Focus on information essential for continuing the conversation effectively, including specific details about code, files, errors, and plans.`;
|
|
51
|
-
async function calculateThresholds(tokenCount) {
|
|
52
|
-
const contextLimit = await getCompressionModelContextLimit();
|
|
53
|
-
const autoCompactThreshold = contextLimit * AUTO_COMPACT_THRESHOLD_RATIO;
|
|
54
|
-
return {
|
|
55
|
-
isAboveAutoCompactThreshold: tokenCount >= autoCompactThreshold,
|
|
56
|
-
percentUsed: Math.round(tokenCount / contextLimit * 100),
|
|
57
|
-
tokensRemaining: Math.max(0, autoCompactThreshold - tokenCount),
|
|
58
|
-
contextLimit
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
async function shouldAutoCompact(messages) {
|
|
62
|
-
if (messages.length < 3) return false;
|
|
63
|
-
const tokenCount = countTokens(messages);
|
|
64
|
-
const { isAboveAutoCompactThreshold } = await calculateThresholds(tokenCount);
|
|
65
|
-
return isAboveAutoCompactThreshold;
|
|
66
|
-
}
|
|
67
|
-
async function checkAutoCompact(messages, toolUseContext) {
|
|
68
|
-
if (!await shouldAutoCompact(messages)) {
|
|
69
|
-
return { messages, wasCompacted: false };
|
|
70
|
-
}
|
|
71
|
-
try {
|
|
72
|
-
const compactedMessages = await executeAutoCompact(messages, toolUseContext);
|
|
73
|
-
return {
|
|
74
|
-
messages: compactedMessages,
|
|
75
|
-
wasCompacted: true
|
|
76
|
-
};
|
|
77
|
-
} catch (error) {
|
|
78
|
-
console.error(
|
|
79
|
-
"Auto-compact failed, continuing with original messages:",
|
|
80
|
-
error
|
|
81
|
-
);
|
|
82
|
-
return { messages, wasCompacted: false };
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
async function executeAutoCompact(messages, toolUseContext) {
|
|
86
|
-
const summaryRequest = createUserMessage(COMPRESSION_PROMPT);
|
|
87
|
-
const summaryResponse = await queryLLM(
|
|
88
|
-
normalizeMessagesForAPI([...messages, summaryRequest]),
|
|
89
|
-
[
|
|
90
|
-
"You are a helpful AI assistant tasked with creating comprehensive conversation summaries that preserve all essential context for continuing development work."
|
|
91
|
-
],
|
|
92
|
-
0,
|
|
93
|
-
toolUseContext.options.tools,
|
|
94
|
-
toolUseContext.abortController.signal,
|
|
95
|
-
{
|
|
96
|
-
safeMode: false,
|
|
97
|
-
model: "main",
|
|
98
|
-
// 使用模型指针,让queryLLM统一解析
|
|
99
|
-
prependCLISysprompt: true
|
|
100
|
-
}
|
|
101
|
-
);
|
|
102
|
-
const content = summaryResponse.message.content;
|
|
103
|
-
const summary = typeof content === "string" ? content : content.length > 0 && content[0]?.type === "text" ? content[0].text : null;
|
|
104
|
-
if (!summary) {
|
|
105
|
-
throw new Error(
|
|
106
|
-
"Failed to generate conversation summary - response did not contain valid text content"
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
summaryResponse.message.usage = {
|
|
110
|
-
input_tokens: 0,
|
|
111
|
-
output_tokens: summaryResponse.message.usage.output_tokens,
|
|
112
|
-
cache_creation_input_tokens: 0,
|
|
113
|
-
cache_read_input_tokens: 0
|
|
114
|
-
};
|
|
115
|
-
const recoveredFiles = await selectAndReadFiles();
|
|
116
|
-
const compactedMessages = [
|
|
117
|
-
createUserMessage(
|
|
118
|
-
"Context automatically compressed due to token limit. Essential information preserved."
|
|
119
|
-
),
|
|
120
|
-
summaryResponse
|
|
121
|
-
];
|
|
122
|
-
if (recoveredFiles.length > 0) {
|
|
123
|
-
for (const file of recoveredFiles) {
|
|
124
|
-
const contentWithLines = addLineNumbers({
|
|
125
|
-
content: file.content,
|
|
126
|
-
startLine: 1
|
|
127
|
-
});
|
|
128
|
-
const recoveryMessage = createUserMessage(
|
|
129
|
-
`**Recovered File: ${file.path}**
|
|
130
|
-
|
|
131
|
-
\`\`\`
|
|
132
|
-
${contentWithLines}
|
|
133
|
-
\`\`\`
|
|
134
|
-
|
|
135
|
-
*Automatically recovered (${file.tokens} tokens)${file.truncated ? " [truncated]" : ""}*`
|
|
136
|
-
);
|
|
137
|
-
compactedMessages.push(recoveryMessage);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
getMessagesSetter()([]);
|
|
141
|
-
getContext.cache.clear?.();
|
|
142
|
-
getCodeStyle.cache.clear?.();
|
|
143
|
-
resetFileFreshnessSession();
|
|
144
|
-
return compactedMessages;
|
|
145
|
-
}
|
|
146
|
-
export {
|
|
147
|
-
checkAutoCompact
|
|
148
|
-
};
|
|
149
|
-
//# sourceMappingURL=autoCompactCore.js.map
|