@shareai-lab/kode 1.1.23 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -404
- package/cli-acp.js +82 -0
- package/cli.js +89 -79
- package/dist/REPL-CW7AYLVL.js +42 -0
- package/dist/acp-VEPJ74LT.js +1357 -0
- package/dist/acp-VEPJ74LT.js.map +7 -0
- package/dist/agentsValidate-7LH4HTNR.js +373 -0
- package/dist/agentsValidate-7LH4HTNR.js.map +7 -0
- package/dist/ask-3NHFFUQG.js +125 -0
- package/dist/ask-3NHFFUQG.js.map +7 -0
- package/dist/autoUpdater-ITPIHCOI.js +17 -0
- package/dist/chunk-3IN27HA5.js +128 -0
- package/dist/chunk-3IN27HA5.js.map +7 -0
- package/dist/chunk-3RUXVV4S.js +23 -0
- package/dist/chunk-3RUXVV4S.js.map +7 -0
- package/dist/chunk-4FX3IVPT.js +164 -0
- package/dist/chunk-4FX3IVPT.js.map +7 -0
- package/dist/chunk-4RTX4AG4.js +249 -0
- package/dist/chunk-4RTX4AG4.js.map +7 -0
- package/dist/chunk-5PDP7R6N.js +515 -0
- package/dist/chunk-5PDP7R6N.js.map +7 -0
- package/dist/chunk-73WGVYLQ.js +735 -0
- package/dist/chunk-73WGVYLQ.js.map +7 -0
- package/dist/{services/systemReminder.js → chunk-7M2YN6TU.js} +221 -59
- package/dist/chunk-7M2YN6TU.js.map +7 -0
- package/dist/{utils/theme.js → chunk-7U7L4NMD.js} +28 -6
- package/dist/chunk-7U7L4NMD.js.map +7 -0
- package/dist/chunk-ABLVTESJ.js +19 -0
- package/dist/chunk-ABLVTESJ.js.map +7 -0
- package/dist/chunk-AFFSCMYS.js +191 -0
- package/dist/chunk-AFFSCMYS.js.map +7 -0
- package/dist/chunk-ARZSBOAO.js +1256 -0
- package/dist/chunk-ARZSBOAO.js.map +7 -0
- package/dist/chunk-CIG63V4E.js +72 -0
- package/dist/chunk-CIG63V4E.js.map +7 -0
- package/dist/chunk-CM3EGTG6.js +1609 -0
- package/dist/chunk-CM3EGTG6.js.map +7 -0
- package/dist/{services/openai.js → chunk-DZE5YA7L.js} +168 -234
- package/dist/chunk-DZE5YA7L.js.map +7 -0
- package/dist/chunk-E6YNABER.js +24 -0
- package/dist/chunk-E6YNABER.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-F2SJXUDI.js +148 -0
- package/dist/chunk-F2SJXUDI.js.map +7 -0
- package/dist/chunk-FC5ZCKBI.js +30167 -0
- package/dist/chunk-FC5ZCKBI.js.map +7 -0
- package/dist/chunk-HCBELH4J.js +145 -0
- package/dist/chunk-HCBELH4J.js.map +7 -0
- package/dist/chunk-HN4E4UUQ.js +96 -0
- package/dist/chunk-HN4E4UUQ.js.map +7 -0
- package/dist/{utils/model.js → chunk-IZVMU4S2.js} +194 -227
- package/dist/chunk-IZVMU4S2.js.map +7 -0
- package/dist/chunk-JC6NCUG5.js +11 -0
- package/dist/chunk-K2CWOTI2.js +196 -0
- package/dist/chunk-K2CWOTI2.js.map +7 -0
- package/dist/chunk-KAA5BGMQ.js +12 -0
- package/dist/chunk-KAA5BGMQ.js.map +7 -0
- package/dist/{utils/config.js → chunk-LC4TVOCZ.js} +351 -171
- package/dist/chunk-LC4TVOCZ.js.map +7 -0
- package/dist/chunk-MIW7N2MY.js +2613 -0
- package/dist/chunk-MIW7N2MY.js.map +7 -0
- package/dist/chunk-MWRSY4X6.js +240 -0
- package/dist/chunk-MWRSY4X6.js.map +7 -0
- package/dist/chunk-ND3XWFO6.js +34 -0
- package/dist/chunk-ND3XWFO6.js.map +7 -0
- package/dist/chunk-NPFOMITO.js +21 -0
- package/dist/chunk-NPFOMITO.js.map +7 -0
- package/dist/chunk-QVLYOPO5.js +1097 -0
- package/dist/chunk-QVLYOPO5.js.map +7 -0
- package/dist/chunk-RZWOUA25.js +490 -0
- package/dist/chunk-RZWOUA25.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/debugLogger.js → chunk-STSX7GIX.js} +107 -204
- package/dist/chunk-STSX7GIX.js.map +7 -0
- package/dist/chunk-UHYRLID6.js +472 -0
- package/dist/chunk-UHYRLID6.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-W7GRKO7Q.js +766 -0
- package/dist/chunk-W7GRKO7Q.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/chunk-YC6LJCDE.js +511 -0
- package/dist/chunk-YC6LJCDE.js.map +7 -0
- package/dist/chunk-YXYYDIMI.js +2931 -0
- package/dist/chunk-YXYYDIMI.js.map +7 -0
- package/dist/chunk-ZVDRDPII.js +138 -0
- package/dist/chunk-ZVDRDPII.js.map +7 -0
- package/dist/cli-DOPVY2CW.js +3917 -0
- package/dist/cli-DOPVY2CW.js.map +7 -0
- package/dist/commands-2BF2CJ3A.js +46 -0
- package/dist/config-RUSD6G5Y.js +81 -0
- package/dist/context-6FXPETYH.js +30 -0
- package/dist/costTracker-6SL26FDB.js +19 -0
- package/dist/customCommands-TOIJFZAL.js +25 -0
- package/dist/customCommands-TOIJFZAL.js.map +7 -0
- package/dist/env-XGKBLU3D.js +22 -0
- package/dist/env-XGKBLU3D.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-MITZADPB.js +18 -0
- package/dist/kodeAgentSessionLoad-MITZADPB.js.map +7 -0
- package/dist/kodeAgentSessionResume-GVRWB4WO.js +16 -0
- package/dist/kodeAgentSessionResume-GVRWB4WO.js.map +7 -0
- package/dist/kodeAgentStreamJson-NXFN7TXH.js +13 -0
- package/dist/kodeAgentStreamJson-NXFN7TXH.js.map +7 -0
- package/dist/kodeAgentStreamJsonSession-UGEZJJEB.js +131 -0
- package/dist/kodeAgentStreamJsonSession-UGEZJJEB.js.map +7 -0
- package/dist/kodeAgentStructuredStdio-HGWJT7CU.js +10 -0
- package/dist/kodeAgentStructuredStdio-HGWJT7CU.js.map +7 -0
- package/dist/kodeHooks-QWM36A3D.js +36 -0
- package/dist/kodeHooks-QWM36A3D.js.map +7 -0
- package/dist/llm-ZUQC4WYM.js +3118 -0
- package/dist/llm-ZUQC4WYM.js.map +7 -0
- package/dist/llmLazy-54QQHA54.js +15 -0
- package/dist/llmLazy-54QQHA54.js.map +7 -0
- package/dist/loader-FYHJQES5.js +28 -0
- package/dist/loader-FYHJQES5.js.map +7 -0
- package/dist/mcp-J332IKT3.js +49 -0
- package/dist/mcp-J332IKT3.js.map +7 -0
- package/dist/{services/mentionProcessor.js → mentionProcessor-EE3XFHCJ.js} +61 -50
- package/dist/mentionProcessor-EE3XFHCJ.js.map +7 -0
- package/dist/messages-EOYQKPGM.js +63 -0
- package/dist/messages-EOYQKPGM.js.map +7 -0
- package/dist/model-FV3JDJKH.js +30 -0
- package/dist/model-FV3JDJKH.js.map +7 -0
- package/dist/openai-RRCWW33N.js +29 -0
- package/dist/openai-RRCWW33N.js.map +7 -0
- package/dist/outputStyles-62Q3VH2J.js +28 -0
- package/dist/outputStyles-62Q3VH2J.js.map +7 -0
- package/dist/package.json +1 -1
- package/dist/pluginRuntime-6ETCZ2LL.js +218 -0
- package/dist/pluginRuntime-6ETCZ2LL.js.map +7 -0
- package/dist/pluginValidation-I4YKUWGS.js +17 -0
- package/dist/pluginValidation-I4YKUWGS.js.map +7 -0
- package/dist/prompts-ZLEKDD77.js +48 -0
- package/dist/prompts-ZLEKDD77.js.map +7 -0
- package/dist/query-VFRJPBGD.js +50 -0
- package/dist/query-VFRJPBGD.js.map +7 -0
- package/dist/responsesStreaming-AW344PQO.js +10 -0
- package/dist/responsesStreaming-AW344PQO.js.map +7 -0
- package/dist/ripgrep-3NTIKQYW.js +17 -0
- package/dist/ripgrep-3NTIKQYW.js.map +7 -0
- package/dist/skillMarketplace-3RXQBVOL.js +37 -0
- package/dist/skillMarketplace-3RXQBVOL.js.map +7 -0
- package/dist/state-P5G6CO5V.js +16 -0
- package/dist/state-P5G6CO5V.js.map +7 -0
- package/dist/theme-3LWP3BG7.js +14 -0
- package/dist/theme-3LWP3BG7.js.map +7 -0
- package/dist/toolPermissionContext-65L65VEZ.js +17 -0
- package/dist/toolPermissionContext-65L65VEZ.js.map +7 -0
- package/dist/toolPermissionSettings-3ROBVTUK.js +18 -0
- package/dist/toolPermissionSettings-3ROBVTUK.js.map +7 -0
- package/dist/tools-RO7HSSE5.js +47 -0
- package/dist/tools-RO7HSSE5.js.map +7 -0
- package/dist/userInput-JSBJRFSK.js +311 -0
- package/dist/userInput-JSBJRFSK.js.map +7 -0
- package/dist/uuid-QN2CNKKN.js +9 -0
- package/dist/uuid-QN2CNKKN.js.map +7 -0
- package/package.json +43 -15
- 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 -326
- 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 -31
- 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 -501
- 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 -1029
- 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 -1122
- 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 -143
- 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 -596
- 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 -293
- 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 +0 -360
- 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-CW7AYLVL.js.map} +0 -0
- /package/dist/{components/CustomSelect/theme.js.map → autoUpdater-ITPIHCOI.js.map} +0 -0
- /package/dist/{types/common.d.js.map → chunk-JC6NCUG5.js.map} +0 -0
- /package/dist/{types/conversation.js.map → commands-2BF2CJ3A.js.map} +0 -0
- /package/dist/{types/logs.js.map → config-RUSD6G5Y.js.map} +0 -0
- /package/dist/{types/modelCapabilities.js.map → context-6FXPETYH.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/services/responseStateManager.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * GPT-5 Responses API state management\n * Manages previous_response_id for conversation continuity and reasoning context reuse\n */\n\ninterface ConversationState {\n previousResponseId?: string\n lastUpdate: number\n}\n\nclass ResponseStateManager {\n private conversationStates = new Map<string, ConversationState>()\n \n // Cache cleanup after 1 hour of inactivity\n private readonly CLEANUP_INTERVAL = 60 * 60 * 1000\n \n constructor() {\n // Periodic cleanup of stale conversations\n setInterval(() => {\n this.cleanup()\n }, this.CLEANUP_INTERVAL)\n }\n \n /**\n * Set the previous response ID for a conversation\n */\n setPreviousResponseId(conversationId: string, responseId: string): void {\n this.conversationStates.set(conversationId, {\n previousResponseId: responseId,\n lastUpdate: Date.now()\n })\n }\n \n /**\n * Get the previous response ID for a conversation\n */\n getPreviousResponseId(conversationId: string): string | undefined {\n const state = this.conversationStates.get(conversationId)\n if (state) {\n // Update last access time\n state.lastUpdate = Date.now()\n return state.previousResponseId\n }\n return undefined\n }\n \n /**\n * Clear state for a conversation\n */\n clearConversation(conversationId: string): void {\n this.conversationStates.delete(conversationId)\n }\n \n /**\n * Clear all conversation states\n */\n clearAll(): void {\n this.conversationStates.clear()\n }\n \n /**\n * Clean up stale conversations\n */\n private cleanup(): void {\n const now = Date.now()\n for (const [conversationId, state] of this.conversationStates.entries()) {\n if (now - state.lastUpdate > this.CLEANUP_INTERVAL) {\n this.conversationStates.delete(conversationId)\n }\n }\n }\n \n /**\n * Get current state size (for debugging/monitoring)\n */\n getStateSize(): number {\n return this.conversationStates.size\n }\n}\n\n// Singleton instance\nexport const responseStateManager = new ResponseStateManager()\n\n/**\n * Helper to generate conversation ID from context\n */\nexport function getConversationId(agentId?: string, messageId?: string): string {\n // Use agentId as primary identifier, fallback to messageId or timestamp\n return agentId || messageId || `conv_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`\n}"],
|
|
5
|
-
"mappings": "AAUA,MAAM,qBAAqB;AAAA,EACjB,qBAAqB,oBAAI,IAA+B;AAAA;AAAA,EAG/C,mBAAmB,KAAK,KAAK;AAAA,EAE9C,cAAc;AAEZ,gBAAY,MAAM;AAChB,WAAK,QAAQ;AAAA,IACf,GAAG,KAAK,gBAAgB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,gBAAwB,YAA0B;AACtE,SAAK,mBAAmB,IAAI,gBAAgB;AAAA,MAC1C,oBAAoB;AAAA,MACpB,YAAY,KAAK,IAAI;AAAA,IACvB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,gBAA4C;AAChE,UAAM,QAAQ,KAAK,mBAAmB,IAAI,cAAc;AACxD,QAAI,OAAO;AAET,YAAM,aAAa,KAAK,IAAI;AAC5B,aAAO,MAAM;AAAA,IACf;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,gBAA8B;AAC9C,SAAK,mBAAmB,OAAO,cAAc;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,WAAiB;AACf,SAAK,mBAAmB,MAAM;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKQ,UAAgB;AACtB,UAAM,MAAM,KAAK,IAAI;AACrB,eAAW,CAAC,gBAAgB,KAAK,KAAK,KAAK,mBAAmB,QAAQ,GAAG;AACvE,UAAI,MAAM,MAAM,aAAa,KAAK,kBAAkB;AAClD,aAAK,mBAAmB,OAAO,cAAc;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,eAAuB;AACrB,WAAO,KAAK,mBAAmB;AAAA,EACjC;AACF;AAGO,MAAM,uBAAuB,IAAI,qBAAqB;AAKtD,SAAS,kBAAkB,SAAkB,WAA4B;AAE9E,SAAO,WAAW,aAAa,QAAQ,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;AAC9F;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/services/sentry.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/services/sentry.ts"],
|
|
4
|
-
"sourcesContent": ["export function initSentry(): void {}\n\nexport async function captureException(error: unknown): Promise<void> {}\n"],
|
|
5
|
-
"mappings": "AAAO,SAAS,aAAmB;AAAC;AAEpC,eAAsB,iBAAiB,OAA+B;AAAC;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/services/statsig.js
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { memoize } from "lodash-es";
|
|
2
|
-
import chalk from "chalk";
|
|
3
|
-
import {
|
|
4
|
-
StatsigClient,
|
|
5
|
-
LogLevel
|
|
6
|
-
} from "@statsig/js-client";
|
|
7
|
-
import "./browserMocks.js";
|
|
8
|
-
import { FileSystemStorageProvider } from "./statsigStorage.js";
|
|
9
|
-
import { STATSIG_CLIENT_KEY } from "../constants/keys.js";
|
|
10
|
-
import { env } from "../utils/env.js";
|
|
11
|
-
import { getUser } from "../utils/user.js";
|
|
12
|
-
import { logError } from "../utils/log.js";
|
|
13
|
-
import { SESSION_ID } from "../utils/log.js";
|
|
14
|
-
import { getBetas } from "../utils/betas.js";
|
|
15
|
-
import { getIsGit } from "../utils/git.js";
|
|
16
|
-
import { getModelManager } from "../utils/model.js";
|
|
17
|
-
import { MACRO } from "../constants/macros.js";
|
|
18
|
-
const gateValues = {};
|
|
19
|
-
let client = null;
|
|
20
|
-
const initializeStatsig = memoize(
|
|
21
|
-
async () => {
|
|
22
|
-
if (env.isCI || process.env.NODE_ENV === "test") {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
const user = await getUser();
|
|
26
|
-
const options = {
|
|
27
|
-
networkConfig: {
|
|
28
|
-
api: "https://statsig.anthropic.com/v1/"
|
|
29
|
-
},
|
|
30
|
-
environment: {
|
|
31
|
-
tier: env.isCI || ["test", "development"].includes(process.env.NODE_ENV ?? "") ? "dev" : "production"
|
|
32
|
-
},
|
|
33
|
-
logLevel: LogLevel.None,
|
|
34
|
-
storageProvider: new FileSystemStorageProvider()
|
|
35
|
-
};
|
|
36
|
-
client = new StatsigClient(STATSIG_CLIENT_KEY, user, options);
|
|
37
|
-
client.on("error", (errorEvent) => {
|
|
38
|
-
logError(`Statsig error: ${errorEvent}`);
|
|
39
|
-
});
|
|
40
|
-
await client.initializeAsync();
|
|
41
|
-
process.on("exit", () => {
|
|
42
|
-
client?.flush();
|
|
43
|
-
});
|
|
44
|
-
return client;
|
|
45
|
-
}
|
|
46
|
-
);
|
|
47
|
-
function logEvent(eventName, metadata) {
|
|
48
|
-
if (env.isCI || process.env.NODE_ENV === "test") {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
Promise.all([
|
|
52
|
-
initializeStatsig(),
|
|
53
|
-
getIsGit(),
|
|
54
|
-
getBetas(),
|
|
55
|
-
metadata.model ? Promise.resolve(metadata.model) : Promise.resolve(getModelManager().getModelName("main") || "unknown")
|
|
56
|
-
]).then(([statsigClient, isGit, betas, model]) => {
|
|
57
|
-
if (!statsigClient) return;
|
|
58
|
-
const eventMetadata = {
|
|
59
|
-
...metadata,
|
|
60
|
-
model,
|
|
61
|
-
sessionId: SESSION_ID,
|
|
62
|
-
userType: process.env.USER_TYPE || "",
|
|
63
|
-
...process.env.SWE_BENCH_RUN_ID ? { sweBenchId: process.env.SWE_BENCH_RUN_ID } : {},
|
|
64
|
-
...betas.length > 0 ? { betas: betas.join(",") } : {},
|
|
65
|
-
env: JSON.stringify({
|
|
66
|
-
isGit,
|
|
67
|
-
platform: env.platform,
|
|
68
|
-
nodeVersion: env.nodeVersion,
|
|
69
|
-
terminal: env.terminal,
|
|
70
|
-
version: MACRO.VERSION
|
|
71
|
-
})
|
|
72
|
-
};
|
|
73
|
-
if (process.argv.includes("--debug") || process.argv.includes("-d")) {
|
|
74
|
-
console.log(
|
|
75
|
-
chalk.dim(
|
|
76
|
-
`[DEBUG-ONLY] Statsig event: ${eventName} ${JSON.stringify(metadata, null, 0)}`
|
|
77
|
-
)
|
|
78
|
-
);
|
|
79
|
-
}
|
|
80
|
-
const event = {
|
|
81
|
-
eventName,
|
|
82
|
-
metadata: eventMetadata
|
|
83
|
-
};
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
const checkGate = memoize(async (gateName) => {
|
|
87
|
-
return false;
|
|
88
|
-
});
|
|
89
|
-
const useStatsigGate = (gateName, defaultValue = false) => {
|
|
90
|
-
return false;
|
|
91
|
-
};
|
|
92
|
-
function getGateValues() {
|
|
93
|
-
return { ...gateValues };
|
|
94
|
-
}
|
|
95
|
-
const getExperimentValue = memoize(
|
|
96
|
-
async (experimentName, defaultValue) => {
|
|
97
|
-
return defaultValue;
|
|
98
|
-
}
|
|
99
|
-
);
|
|
100
|
-
const getDynamicConfig = async (configName, defaultValue) => {
|
|
101
|
-
return defaultValue;
|
|
102
|
-
};
|
|
103
|
-
export {
|
|
104
|
-
checkGate,
|
|
105
|
-
getDynamicConfig,
|
|
106
|
-
getExperimentValue,
|
|
107
|
-
getGateValues,
|
|
108
|
-
initializeStatsig,
|
|
109
|
-
logEvent,
|
|
110
|
-
useStatsigGate
|
|
111
|
-
};
|
|
112
|
-
//# sourceMappingURL=statsig.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/services/statsig.ts"],
|
|
4
|
-
"sourcesContent": ["import React from 'react'\nimport { memoize } from 'lodash-es'\nimport chalk from 'chalk'\nimport {\n StatsigClient,\n StatsigOptions,\n StatsigEvent,\n LogLevel,\n} from '@statsig/js-client'\nimport './browserMocks.js' // Initialize browser mocks\nimport { FileSystemStorageProvider } from './statsigStorage'\nimport { STATSIG_CLIENT_KEY } from '../constants/keys'\nimport { env } from '../utils/env'\nimport { getUser } from '../utils/user'\nimport { logError } from '../utils/log'\nimport { SESSION_ID } from '../utils/log'\nimport { getBetas } from '../utils/betas'\nimport { getIsGit } from '../utils/git'\nimport { getModelManager } from '../utils/model'\nimport { MACRO } from '../constants/macros'\nconst gateValues: Record<string, boolean> = {}\nlet client: StatsigClient | null = null\n\nexport const initializeStatsig = memoize(\n async (): Promise<StatsigClient | null> => {\n if (env.isCI || process.env.NODE_ENV === 'test') {\n return null\n }\n\n const user = await getUser()\n const options: StatsigOptions = {\n networkConfig: {\n api: 'https://statsig.anthropic.com/v1/',\n },\n environment: {\n tier:\n env.isCI ||\n ['test', 'development'].includes(process.env.NODE_ENV ?? '')\n ? 'dev'\n : 'production',\n },\n logLevel: LogLevel.None,\n storageProvider: new FileSystemStorageProvider(),\n }\n\n client = new StatsigClient(STATSIG_CLIENT_KEY, user, options)\n client.on('error', errorEvent => {\n logError(`Statsig error: ${errorEvent}`)\n })\n await client.initializeAsync()\n process.on('exit', () => {\n client?.flush()\n })\n return client\n },\n)\n\nexport function logEvent(\n eventName: string,\n metadata: { [key: string]: string | undefined },\n): void {\n // console.log('logEvent', eventName, metadata)\n if (env.isCI || process.env.NODE_ENV === 'test') {\n return\n }\n Promise.all([\n initializeStatsig(),\n getIsGit(),\n getBetas(),\n metadata.model ? Promise.resolve(metadata.model) : Promise.resolve(getModelManager().getModelName('main') || 'unknown'),\n ]).then(([statsigClient, isGit, betas, model]) => {\n if (!statsigClient) return\n\n const eventMetadata: Record<string, string> = {\n ...metadata,\n model,\n sessionId: SESSION_ID,\n userType: process.env.USER_TYPE || '',\n ...(process.env.SWE_BENCH_RUN_ID\n ? { sweBenchId: process.env.SWE_BENCH_RUN_ID }\n : {}),\n ...(betas.length > 0 ? { betas: betas.join(',') } : {}),\n env: JSON.stringify({\n isGit,\n platform: env.platform,\n nodeVersion: env.nodeVersion,\n terminal: env.terminal,\n version: MACRO.VERSION,\n }),\n }\n\n // Debug logging when debug mode is enabled\n if (process.argv.includes('--debug') || process.argv.includes('-d')) {\n console.log(\n chalk.dim(\n `[DEBUG-ONLY] Statsig event: ${eventName} ${JSON.stringify(metadata, null, 0)}`,\n ),\n )\n }\n\n const event: StatsigEvent = {\n eventName,\n metadata: eventMetadata,\n }\n // statsigClient.logEvent(event)\n })\n}\n\nexport const checkGate = memoize(async (gateName: string): Promise<boolean> => {\n // Default to disabled gates when Statsig is not active\n return false\n // if (env.isCI || process.env.NODE_ENV === 'test') {\n // return false\n // }\n // const statsigClient = await initializeStatsig()\n // if (!statsigClient) return false\n\n // const value = statsigClient.checkGate(gateName)\n // gateValues[gateName] = value\n // return value\n})\n\nexport const useStatsigGate = (gateName: string, defaultValue = false) => {\n return false\n // const [gateValue, setGateValue] = React.useState(defaultValue)\n // React.useEffect(() => {\n // checkGate(gateName).then(setGateValue)\n // }, [gateName])\n // return gateValue\n}\n\nexport function getGateValues(): Record<string, boolean> {\n return { ...gateValues }\n}\n\nexport const getExperimentValue = memoize(\n async <T>(experimentName: string, defaultValue: T): Promise<T> => {\n return defaultValue\n // if (env.isCI || process.env.NODE_ENV === 'test') {\n // return defaultValue\n // }\n // const statsigClient = await initializeStatsig()\n // if (!statsigClient) return defaultValue\n\n // const experiment = statsigClient.getExperiment(experimentName)\n // if (Object.keys(experiment.value).length === 0) {\n // logError(`getExperimentValue got empty value for ${experimentName}`)\n // return defaultValue\n // }\n // return experiment.value as T\n },\n)\n\n// NB Not memoized like other methods, to allow for dynamic config changes\nexport const getDynamicConfig = async <T>(\n configName: string,\n defaultValue: T,\n): Promise<T> => {\n return defaultValue\n // if (env.isCI || process.env.NODE_ENV === 'test') {\n // return defaultValue\n // }\n // const statsigClient = await initializeStatsig()\n // if (!statsigClient) return defaultValue\n\n // const config = statsigClient.getDynamicConfig(configName)\n // if (Object.keys(config.value).length === 0) {\n // logError(`getDynamicConfig got empty value for ${configName}`)\n // return defaultValue\n // }\n // return config.value as T\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import * as fs from "fs";
|
|
2
|
-
import * as path from "path";
|
|
3
|
-
import { homedir } from "os";
|
|
4
|
-
import { logError } from "../utils/log.js";
|
|
5
|
-
import { existsSync, unlinkSync } from "fs";
|
|
6
|
-
import { CONFIG_BASE_DIR } from "../constants/product.js";
|
|
7
|
-
const CONFIG_DIR = process.env.KODE_CONFIG_DIR ?? process.env.CLAUDE_CONFIG_DIR ?? path.join(homedir(), CONFIG_BASE_DIR);
|
|
8
|
-
const STATSIG_DIR = path.join(CONFIG_DIR, "statsig");
|
|
9
|
-
try {
|
|
10
|
-
fs.mkdirSync(STATSIG_DIR, { recursive: true });
|
|
11
|
-
} catch (error) {
|
|
12
|
-
logError(`Failed to create statsig storage directory: ${error}`);
|
|
13
|
-
}
|
|
14
|
-
class FileSystemStorageProvider {
|
|
15
|
-
cache = /* @__PURE__ */ new Map();
|
|
16
|
-
ready = false;
|
|
17
|
-
constructor() {
|
|
18
|
-
try {
|
|
19
|
-
if (!fs.existsSync(STATSIG_DIR)) {
|
|
20
|
-
fs.mkdirSync(STATSIG_DIR, { recursive: true });
|
|
21
|
-
}
|
|
22
|
-
const files = fs.readdirSync(STATSIG_DIR);
|
|
23
|
-
for (const file of files) {
|
|
24
|
-
const key = decodeURIComponent(file);
|
|
25
|
-
const value = fs.readFileSync(path.join(STATSIG_DIR, file), "utf8");
|
|
26
|
-
this.cache.set(key, value);
|
|
27
|
-
}
|
|
28
|
-
this.ready = true;
|
|
29
|
-
} catch (error) {
|
|
30
|
-
logError(`Failed to initialize statsig storage: ${error}`);
|
|
31
|
-
this.ready = true;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
isReady() {
|
|
35
|
-
return this.ready;
|
|
36
|
-
}
|
|
37
|
-
isReadyResolver() {
|
|
38
|
-
return this.ready ? Promise.resolve() : null;
|
|
39
|
-
}
|
|
40
|
-
getProviderName() {
|
|
41
|
-
return "FileSystemStorageProvider";
|
|
42
|
-
}
|
|
43
|
-
getItem(key) {
|
|
44
|
-
return this.cache.get(key) ?? null;
|
|
45
|
-
}
|
|
46
|
-
setItem(key, value) {
|
|
47
|
-
this.cache.set(key, value);
|
|
48
|
-
try {
|
|
49
|
-
const encodedKey = encodeURIComponent(key);
|
|
50
|
-
fs.writeFileSync(path.join(STATSIG_DIR, encodedKey), value, "utf8");
|
|
51
|
-
} catch (error) {
|
|
52
|
-
logError(`Failed to write statsig storage item: ${error}`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
removeItem(key) {
|
|
56
|
-
this.cache.delete(key);
|
|
57
|
-
const encodedKey = encodeURIComponent(key);
|
|
58
|
-
const file = path.join(STATSIG_DIR, encodedKey);
|
|
59
|
-
if (!existsSync(file)) {
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
try {
|
|
63
|
-
unlinkSync(file);
|
|
64
|
-
} catch (error) {
|
|
65
|
-
logError(`Failed to remove statsig storage item: ${error}`);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
getAllKeys() {
|
|
69
|
-
return Array.from(this.cache.keys());
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
export {
|
|
73
|
-
FileSystemStorageProvider
|
|
74
|
-
};
|
|
75
|
-
//# sourceMappingURL=statsigStorage.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/services/statsigStorage.ts"],
|
|
4
|
-
"sourcesContent": ["import { StorageProvider } from '@statsig/client-core'\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport { homedir } from 'os'\nimport { logError } from '../utils/log'\nimport { existsSync, unlinkSync } from 'fs'\nimport { CONFIG_BASE_DIR } from '../constants/product'\n\n// Support both KODE_CONFIG_DIR and CLAUDE_CONFIG_DIR environment variables\nconst CONFIG_DIR = process.env.KODE_CONFIG_DIR ?? process.env.CLAUDE_CONFIG_DIR ?? path.join(homedir(), CONFIG_BASE_DIR)\nconst STATSIG_DIR = path.join(CONFIG_DIR, 'statsig')\n\n// Ensure the directory exists\ntry {\n fs.mkdirSync(STATSIG_DIR, { recursive: true })\n} catch (error) {\n logError(`Failed to create statsig storage directory: ${error}`)\n}\n\nexport class FileSystemStorageProvider implements StorageProvider {\n private cache: Map<string, string> = new Map()\n private ready = false\n\n constructor() {\n // Load all existing files into cache on startup\n try {\n if (!fs.existsSync(STATSIG_DIR)) {\n fs.mkdirSync(STATSIG_DIR, { recursive: true })\n }\n const files = fs.readdirSync(STATSIG_DIR)\n for (const file of files) {\n const key = decodeURIComponent(file)\n const value = fs.readFileSync(path.join(STATSIG_DIR, file), 'utf8')\n this.cache.set(key, value)\n }\n this.ready = true\n } catch (error) {\n logError(`Failed to initialize statsig storage: ${error}`)\n this.ready = true // Still mark as ready to avoid blocking\n }\n }\n\n isReady(): boolean {\n return this.ready\n }\n\n isReadyResolver(): Promise<void> | null {\n return this.ready ? Promise.resolve() : null\n }\n\n getProviderName(): string {\n return 'FileSystemStorageProvider'\n }\n\n getItem(key: string): string | null {\n return this.cache.get(key) ?? null\n }\n\n setItem(key: string, value: string): void {\n this.cache.set(key, value)\n try {\n const encodedKey = encodeURIComponent(key)\n fs.writeFileSync(path.join(STATSIG_DIR, encodedKey), value, 'utf8')\n } catch (error) {\n logError(`Failed to write statsig storage item: ${error}`)\n }\n }\n\n removeItem(key: string): void {\n this.cache.delete(key)\n const encodedKey = encodeURIComponent(key)\n const file = path.join(STATSIG_DIR, encodedKey)\n if (!existsSync(file)) {\n return\n }\n try {\n unlinkSync(file)\n } catch (error) {\n logError(`Failed to remove statsig storage item: ${error}`)\n }\n }\n\n getAllKeys(): readonly string[] {\n return Array.from(this.cache.keys())\n }\n}\n"],
|
|
5
|
-
"mappings": "AACA,YAAY,QAAQ;AACpB,YAAY,UAAU;AACtB,SAAS,eAAe;AACxB,SAAS,gBAAgB;AACzB,SAAS,YAAY,kBAAkB;AACvC,SAAS,uBAAuB;AAGhC,MAAM,aAAa,QAAQ,IAAI,mBAAmB,QAAQ,IAAI,qBAAqB,KAAK,KAAK,QAAQ,GAAG,eAAe;AACvH,MAAM,cAAc,KAAK,KAAK,YAAY,SAAS;AAGnD,IAAI;AACF,KAAG,UAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAC/C,SAAS,OAAO;AACd,WAAS,+CAA+C,KAAK,EAAE;AACjE;AAEO,MAAM,0BAAqD;AAAA,EACxD,QAA6B,oBAAI,IAAI;AAAA,EACrC,QAAQ;AAAA,EAEhB,cAAc;AAEZ,QAAI;AACF,UAAI,CAAC,GAAG,WAAW,WAAW,GAAG;AAC/B,WAAG,UAAU,aAAa,EAAE,WAAW,KAAK,CAAC;AAAA,MAC/C;AACA,YAAM,QAAQ,GAAG,YAAY,WAAW;AACxC,iBAAW,QAAQ,OAAO;AACxB,cAAM,MAAM,mBAAmB,IAAI;AACnC,cAAM,QAAQ,GAAG,aAAa,KAAK,KAAK,aAAa,IAAI,GAAG,MAAM;AAClE,aAAK,MAAM,IAAI,KAAK,KAAK;AAAA,MAC3B;AACA,WAAK,QAAQ;AAAA,IACf,SAAS,OAAO;AACd,eAAS,yCAAyC,KAAK,EAAE;AACzD,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEA,UAAmB;AACjB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,kBAAwC;AACtC,WAAO,KAAK,QAAQ,QAAQ,QAAQ,IAAI;AAAA,EAC1C;AAAA,EAEA,kBAA0B;AACxB,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,KAA4B;AAClC,WAAO,KAAK,MAAM,IAAI,GAAG,KAAK;AAAA,EAChC;AAAA,EAEA,QAAQ,KAAa,OAAqB;AACxC,SAAK,MAAM,IAAI,KAAK,KAAK;AACzB,QAAI;AACF,YAAM,aAAa,mBAAmB,GAAG;AACzC,SAAG,cAAc,KAAK,KAAK,aAAa,UAAU,GAAG,OAAO,MAAM;AAAA,IACpE,SAAS,OAAO;AACd,eAAS,yCAAyC,KAAK,EAAE;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,WAAW,KAAmB;AAC5B,SAAK,MAAM,OAAO,GAAG;AACrB,UAAM,aAAa,mBAAmB,GAAG;AACzC,UAAM,OAAO,KAAK,KAAK,aAAa,UAAU;AAC9C,QAAI,CAAC,WAAW,IAAI,GAAG;AACrB;AAAA,IACF;AACA,QAAI;AACF,iBAAW,IAAI;AAAA,IACjB,SAAS,OAAO;AACd,eAAS,0CAA0C,KAAK,EAAE;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,aAAgC;AAC9B,WAAO,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC;AAAA,EACrC;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/services/systemReminder.ts"],
|
|
4
|
-
"sourcesContent": ["import { getTodos, TodoItem } from '../utils/todoStorage'\nimport { logEvent } from './statsig'\n\nexport interface ReminderMessage {\n role: 'system'\n content: string\n isMeta: boolean\n timestamp: number\n type: string\n priority: 'low' | 'medium' | 'high'\n category: 'task' | 'security' | 'performance' | 'general'\n}\n\ninterface ReminderConfig {\n todoEmptyReminder: boolean\n securityReminder: boolean\n performanceReminder: boolean\n maxRemindersPerSession: number\n}\n\ninterface SessionReminderState {\n lastTodoUpdate: number\n lastFileAccess: number\n sessionStartTime: number\n remindersSent: Set<string>\n contextPresent: boolean\n reminderCount: number\n config: ReminderConfig\n}\n\nclass SystemReminderService {\n private sessionState: SessionReminderState = {\n lastTodoUpdate: 0,\n lastFileAccess: 0,\n sessionStartTime: Date.now(),\n remindersSent: new Set(),\n contextPresent: false,\n reminderCount: 0,\n config: {\n todoEmptyReminder: true,\n securityReminder: true,\n performanceReminder: true,\n maxRemindersPerSession: 10,\n },\n }\n\n private eventDispatcher = new Map<string, Array<(context: any) => void>>()\n private reminderCache = new Map<string, ReminderMessage>()\n\n constructor() {\n this.setupEventDispatcher()\n }\n\n /**\n * Conditional reminder injection - only when context is present\n * Enhanced with performance optimizations and priority management\n */\n public generateReminders(\n hasContext: boolean = false,\n agentId?: string,\n ): ReminderMessage[] {\n this.sessionState.contextPresent = hasContext\n\n // Only inject when context is present (matching original behavior)\n if (!hasContext) {\n return []\n }\n\n // Check session reminder limit to prevent overload\n if (\n this.sessionState.reminderCount >=\n this.sessionState.config.maxRemindersPerSession\n ) {\n return []\n }\n\n const reminders: ReminderMessage[] = []\n const currentTime = Date.now()\n\n // Use lazy evaluation for performance with agent context\n const reminderGenerators = [\n () => this.dispatchTodoEvent(agentId),\n () => this.dispatchSecurityEvent(),\n () => this.dispatchPerformanceEvent(),\n () => this.getMentionReminders(), // Add mention reminders\n ]\n\n for (const generator of reminderGenerators) {\n if (reminders.length >= 5) break // Slightly increase limit to accommodate mentions\n\n const result = generator()\n if (result) {\n // Handle both single reminders and arrays\n const remindersToAdd = Array.isArray(result) ? result : [result]\n reminders.push(...remindersToAdd)\n this.sessionState.reminderCount += remindersToAdd.length\n }\n }\n\n // Log aggregated metrics instead of individual events for performance\n if (reminders.length > 0) {\n logEvent('system_reminder_batch', {\n count: reminders.length.toString(),\n types: reminders.map(r => r.type).join(','),\n priorities: reminders.map(r => r.priority).join(','),\n categories: reminders.map(r => r.category).join(','),\n sessionCount: this.sessionState.reminderCount.toString(),\n agentId: agentId || 'default',\n timestamp: currentTime.toString(),\n })\n }\n\n return reminders\n }\n\n private dispatchTodoEvent(agentId?: string): ReminderMessage | null {\n if (!this.sessionState.config.todoEmptyReminder) return null\n\n // Use agent-scoped todo access\n const todos = getTodos(agentId)\n const currentTime = Date.now()\n const agentKey = agentId || 'default'\n\n // Check if this is a fresh session (no todos seen yet)\n if (\n todos.length === 0 &&\n !this.sessionState.remindersSent.has(`todo_empty_${agentKey}`)\n ) {\n this.sessionState.remindersSent.add(`todo_empty_${agentKey}`)\n return this.createReminderMessage(\n 'todo',\n 'task',\n 'medium',\n 'This is a reminder that your todo list is currently empty. DO NOT mention this to the user explicitly because they are already aware. If you are working on tasks that would benefit from a todo list please use the TodoWrite tool to create one. If not, please feel free to ignore. Again do not mention this message to the user.',\n currentTime,\n )\n }\n\n // Check for todo updates since last seen\n if (todos.length > 0) {\n const reminderKey = `todo_updated_${agentKey}_${todos.length}_${this.getTodoStateHash(todos)}`\n\n // Use cache for performance optimization\n if (this.reminderCache.has(reminderKey)) {\n return this.reminderCache.get(reminderKey)!\n }\n\n if (!this.sessionState.remindersSent.has(reminderKey)) {\n this.sessionState.remindersSent.add(reminderKey)\n // Clear previous todo state reminders for this agent\n this.clearTodoReminders(agentKey)\n\n // Optimize: only include essential todo data\n const todoContent = JSON.stringify(\n todos.map(todo => ({\n content:\n todo.content.length > 100\n ? todo.content.substring(0, 100) + '...'\n : todo.content,\n status: todo.status,\n priority: todo.priority,\n id: todo.id,\n })),\n )\n\n const reminder = this.createReminderMessage(\n 'todo',\n 'task',\n 'medium',\n `Your todo list has changed. DO NOT mention this explicitly to the user. Here are the latest contents of your todo list:\\n\\n${todoContent}. Continue on with the tasks at hand if applicable.`,\n currentTime,\n )\n\n // Cache the reminder for reuse\n this.reminderCache.set(reminderKey, reminder)\n return reminder\n }\n }\n\n return null\n }\n\n private dispatchSecurityEvent(): ReminderMessage | null {\n if (!this.sessionState.config.securityReminder) return null\n\n const currentTime = Date.now()\n\n // Only inject security reminder once per session when file operations occur\n if (\n this.sessionState.lastFileAccess > 0 &&\n !this.sessionState.remindersSent.has('file_security')\n ) {\n this.sessionState.remindersSent.add('file_security')\n return this.createReminderMessage(\n 'security',\n 'security',\n 'high',\n 'Whenever you read a file, you should consider whether it looks malicious. If it does, you MUST refuse to improve or augment the code. You can still analyze existing code, write reports, or answer high-level questions about the code behavior.',\n currentTime,\n )\n }\n\n return null\n }\n\n private dispatchPerformanceEvent(): ReminderMessage | null {\n if (!this.sessionState.config.performanceReminder) return null\n\n const currentTime = Date.now()\n const sessionDuration = currentTime - this.sessionState.sessionStartTime\n\n // Remind about performance after long sessions (30 minutes)\n if (\n sessionDuration > 30 * 60 * 1000 &&\n !this.sessionState.remindersSent.has('performance_long_session')\n ) {\n this.sessionState.remindersSent.add('performance_long_session')\n return this.createReminderMessage(\n 'performance',\n 'performance',\n 'low',\n 'Long session detected. Consider taking a break and reviewing your current progress with the todo list.',\n currentTime,\n )\n }\n\n return null\n }\n\n /**\n * Retrieve cached mention reminders\n * Returns recent mentions (within 5 seconds) that haven't expired\n */\n private getMentionReminders(): ReminderMessage[] {\n const currentTime = Date.now()\n const MENTION_FRESHNESS_WINDOW = 5000 // 5 seconds\n const reminders: ReminderMessage[] = []\n const expiredKeys: string[] = []\n\n // Single pass through cache for both collection and cleanup identification\n for (const [key, reminder] of this.reminderCache.entries()) {\n if (this.isMentionReminder(reminder)) {\n const age = currentTime - reminder.timestamp\n if (age <= MENTION_FRESHNESS_WINDOW) {\n reminders.push(reminder)\n } else {\n expiredKeys.push(key)\n }\n }\n }\n\n // Clean up expired mention reminders in separate pass for performance\n expiredKeys.forEach(key => this.reminderCache.delete(key))\n\n return reminders\n }\n\n /**\n * Type guard for mention reminders - centralized type checking\n * Eliminates hardcoded type strings scattered throughout the code\n */\n private isMentionReminder(reminder: ReminderMessage): boolean {\n const mentionTypes = ['agent_mention', 'file_mention', 'ask_model_mention']\n return mentionTypes.includes(reminder.type)\n }\n\n /**\n * Generate reminders for external file changes\n * Called when todo files are modified externally\n */\n public generateFileChangeReminder(context: any): ReminderMessage | null {\n const { agentId, filePath, reminder } = context\n\n if (!reminder) {\n return null\n }\n\n const currentTime = Date.now()\n const reminderKey = `file_changed_${agentId}_${filePath}_${currentTime}`\n\n // Ensure this specific file change reminder is only shown once\n if (this.sessionState.remindersSent.has(reminderKey)) {\n return null\n }\n\n this.sessionState.remindersSent.add(reminderKey)\n\n return this.createReminderMessage(\n 'file_changed',\n 'general',\n 'medium',\n reminder,\n currentTime,\n )\n }\n\n private createReminderMessage(\n type: string,\n category: ReminderMessage['category'],\n priority: ReminderMessage['priority'],\n content: string,\n timestamp: number,\n ): ReminderMessage {\n return {\n role: 'system',\n content: `<system-reminder>\\n${content}\\n</system-reminder>`,\n isMeta: true,\n timestamp,\n type,\n priority,\n category,\n }\n }\n\n private getTodoStateHash(todos: TodoItem[]): string {\n return todos\n .map(t => `${t.id}:${t.status}`)\n .sort()\n .join('|')\n }\n\n private clearTodoReminders(agentId?: string): void {\n const agentKey = agentId || 'default'\n for (const key of this.sessionState.remindersSent) {\n if (key.startsWith(`todo_updated_${agentKey}_`)) {\n this.sessionState.remindersSent.delete(key)\n }\n }\n }\n\n private setupEventDispatcher(): void {\n // Session startup events\n this.addEventListener('session:startup', context => {\n // Reset session state on startup\n this.resetSession()\n\n // Initialize session tracking\n this.sessionState.sessionStartTime = Date.now()\n this.sessionState.contextPresent =\n Object.keys(context.context || {}).length > 0\n\n // Log session startup\n logEvent('system_reminder_session_startup', {\n agentId: context.agentId || 'default',\n contextKeys: Object.keys(context.context || {}).join(','),\n messageCount: (context.messages || 0).toString(),\n timestamp: context.timestamp.toString(),\n })\n })\n\n // Todo change events\n this.addEventListener('todo:changed', context => {\n this.sessionState.lastTodoUpdate = Date.now()\n this.clearTodoReminders(context.agentId)\n })\n\n // Todo file changed externally\n this.addEventListener('todo:file_changed', context => {\n // External file change detected, trigger reminder injection\n const agentId = context.agentId || 'default'\n this.clearTodoReminders(agentId)\n this.sessionState.lastTodoUpdate = Date.now()\n\n // Generate and inject file change reminder immediately\n const reminder = this.generateFileChangeReminder(context)\n if (reminder) {\n // Inject reminder into the latest user message through event system\n this.emitEvent('reminder:inject', {\n reminder: reminder.content,\n agentId,\n type: 'file_changed',\n timestamp: Date.now(),\n })\n }\n })\n\n // File access events\n this.addEventListener('file:read', context => {\n this.sessionState.lastFileAccess = Date.now()\n })\n\n // File edit events for freshness detection\n this.addEventListener('file:edited', context => {\n // File edit handling\n })\n\n // Unified mention event handlers - eliminates code duplication\n this.addEventListener('agent:mentioned', context => {\n this.createMentionReminder({\n type: 'agent_mention',\n key: `agent_mention_${context.agentType}_${context.timestamp}`,\n category: 'task',\n priority: 'high',\n content: `The user mentioned @${context.originalMention}. You MUST use the Task tool with subagent_type=\"${context.agentType}\" to delegate this task to the specified agent. Provide a detailed, self-contained task description that fully captures the user's intent for the ${context.agentType} agent to execute.`,\n timestamp: context.timestamp\n })\n })\n\n this.addEventListener('file:mentioned', context => {\n this.createMentionReminder({\n type: 'file_mention',\n key: `file_mention_${context.filePath}_${context.timestamp}`,\n category: 'general',\n priority: 'high',\n content: `The user mentioned @${context.originalMention}. You MUST read the entire content of the file at path: ${context.filePath} using the Read tool to understand the full context before proceeding with the user's request.`,\n timestamp: context.timestamp\n })\n })\n\n this.addEventListener('ask-model:mentioned', context => {\n this.createMentionReminder({\n type: 'ask_model_mention',\n key: `ask_model_mention_${context.modelName}_${context.timestamp}`,\n category: 'task',\n priority: 'high',\n content: `The user mentioned @${context.modelName}. You MUST use the AskExpertModelTool to consult this specific model for expert opinions and analysis. Provide the user's question or context clearly to get the most relevant response from ${context.modelName}.`,\n timestamp: context.timestamp\n })\n })\n }\n\n public addEventListener(\n event: string,\n callback: (context: any) => void,\n ): void {\n if (!this.eventDispatcher.has(event)) {\n this.eventDispatcher.set(event, [])\n }\n this.eventDispatcher.get(event)!.push(callback)\n }\n\n public emitEvent(event: string, context: any): void {\n const listeners = this.eventDispatcher.get(event) || []\n listeners.forEach(callback => {\n try {\n callback(context)\n } catch (error) {\n console.error(`Error in event listener for ${event}:`, error)\n }\n })\n }\n\n /**\n * Unified mention reminder creation - eliminates duplicate logic\n * Centralizes reminder creation with consistent deduplication\n */\n private createMentionReminder(params: {\n type: string\n key: string\n category: ReminderMessage['category']\n priority: ReminderMessage['priority']\n content: string\n timestamp: number\n }): void {\n if (!this.sessionState.remindersSent.has(params.key)) {\n this.sessionState.remindersSent.add(params.key)\n \n const reminder = this.createReminderMessage(\n params.type,\n params.category,\n params.priority,\n params.content,\n params.timestamp\n )\n \n this.reminderCache.set(params.key, reminder)\n }\n }\n\n public resetSession(): void {\n this.sessionState = {\n lastTodoUpdate: 0,\n lastFileAccess: 0,\n sessionStartTime: Date.now(),\n remindersSent: new Set(),\n contextPresent: false,\n reminderCount: 0,\n config: { ...this.sessionState.config }, // Preserve config across resets\n }\n this.reminderCache.clear() // Clear cache on session reset\n }\n\n public updateConfig(config: Partial<ReminderConfig>): void {\n this.sessionState.config = { ...this.sessionState.config, ...config }\n }\n\n public getSessionState(): SessionReminderState {\n return { ...this.sessionState }\n }\n}\n\nexport const systemReminderService = new SystemReminderService()\n\nexport const generateSystemReminders = (\n hasContext: boolean = false,\n agentId?: string,\n) => systemReminderService.generateReminders(hasContext, agentId)\n\nexport const generateFileChangeReminder = (context: any) =>\n systemReminderService.generateFileChangeReminder(context)\n\nexport const emitReminderEvent = (event: string, context: any) =>\n systemReminderService.emitEvent(event, context)\n\nexport const resetReminderSession = () => systemReminderService.resetSession()\nexport const getReminderSessionState = () =>\n systemReminderService.getSessionState()\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/services/vcr.js
DELETED
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { createHash } from "crypto";
|
|
2
|
-
import { mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
3
|
-
import { dirname } from "path";
|
|
4
|
-
import { existsSync } from "fs";
|
|
5
|
-
import { env } from "../utils/env.js";
|
|
6
|
-
import { getCwd } from "../utils/state.js";
|
|
7
|
-
import * as path from "path";
|
|
8
|
-
import { mapValues } from "lodash-es";
|
|
9
|
-
async function withVCR(messages, f) {
|
|
10
|
-
if (process.env.NODE_ENV !== "test") {
|
|
11
|
-
return await f();
|
|
12
|
-
}
|
|
13
|
-
const dehydratedInput = mapMessages(
|
|
14
|
-
messages.map((_) => _.message.content),
|
|
15
|
-
dehydrateValue
|
|
16
|
-
);
|
|
17
|
-
const filename = `./fixtures/${dehydratedInput.map((_) => createHash("sha1").update(JSON.stringify(_)).digest("hex").slice(0, 6)).join("-")}.json`;
|
|
18
|
-
if (existsSync(filename)) {
|
|
19
|
-
const cached = JSON.parse(readFileSync(filename, "utf-8"));
|
|
20
|
-
return mapAssistantMessage(cached.output, hydrateValue);
|
|
21
|
-
}
|
|
22
|
-
if (env.isCI) {
|
|
23
|
-
console.warn(
|
|
24
|
-
`Anthropic API fixture missing. Re-run npm test locally, then commit the result. ${JSON.stringify({ input: dehydratedInput }, null, 2)}`
|
|
25
|
-
);
|
|
26
|
-
}
|
|
27
|
-
const result = await f();
|
|
28
|
-
if (env.isCI) {
|
|
29
|
-
return result;
|
|
30
|
-
}
|
|
31
|
-
if (!existsSync(dirname(filename))) {
|
|
32
|
-
mkdirSync(dirname(filename), { recursive: true });
|
|
33
|
-
}
|
|
34
|
-
writeFileSync(
|
|
35
|
-
filename,
|
|
36
|
-
JSON.stringify(
|
|
37
|
-
{
|
|
38
|
-
input: dehydratedInput,
|
|
39
|
-
output: mapAssistantMessage(result, dehydrateValue)
|
|
40
|
-
},
|
|
41
|
-
null,
|
|
42
|
-
2
|
|
43
|
-
)
|
|
44
|
-
);
|
|
45
|
-
return result;
|
|
46
|
-
}
|
|
47
|
-
function mapMessages(messages, f) {
|
|
48
|
-
return messages.map((_) => {
|
|
49
|
-
if (typeof _ === "string") {
|
|
50
|
-
return f(_);
|
|
51
|
-
}
|
|
52
|
-
return _.map((_2) => {
|
|
53
|
-
switch (_2.type) {
|
|
54
|
-
case "tool_result":
|
|
55
|
-
if (typeof _2.content === "string") {
|
|
56
|
-
return { ..._2, content: f(_2.content) };
|
|
57
|
-
}
|
|
58
|
-
if (Array.isArray(_2.content)) {
|
|
59
|
-
return {
|
|
60
|
-
..._2,
|
|
61
|
-
content: _2.content.map((_3) => {
|
|
62
|
-
switch (_3.type) {
|
|
63
|
-
case "text":
|
|
64
|
-
return { ..._3, text: f(_3.text) };
|
|
65
|
-
case "image":
|
|
66
|
-
return _3;
|
|
67
|
-
}
|
|
68
|
-
})
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
return _2;
|
|
72
|
-
case "text":
|
|
73
|
-
return { ..._2, text: f(_2.text) };
|
|
74
|
-
case "tool_use":
|
|
75
|
-
return {
|
|
76
|
-
..._2,
|
|
77
|
-
input: mapValues(_2.input, f)
|
|
78
|
-
};
|
|
79
|
-
case "image":
|
|
80
|
-
return _2;
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
function mapAssistantMessage(message, f) {
|
|
86
|
-
return {
|
|
87
|
-
durationMs: "DURATION",
|
|
88
|
-
costUSD: "COST",
|
|
89
|
-
uuid: "UUID",
|
|
90
|
-
message: {
|
|
91
|
-
...message.message,
|
|
92
|
-
content: message.message.content.map((_) => {
|
|
93
|
-
switch (_.type) {
|
|
94
|
-
case "text":
|
|
95
|
-
return {
|
|
96
|
-
..._,
|
|
97
|
-
text: f(_.text),
|
|
98
|
-
citations: _.citations || []
|
|
99
|
-
};
|
|
100
|
-
// Ensure citations
|
|
101
|
-
case "tool_use":
|
|
102
|
-
return {
|
|
103
|
-
..._,
|
|
104
|
-
input: mapValues(_.input, f)
|
|
105
|
-
};
|
|
106
|
-
default:
|
|
107
|
-
return _;
|
|
108
|
-
}
|
|
109
|
-
}).filter(Boolean)
|
|
110
|
-
},
|
|
111
|
-
type: "assistant"
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
function dehydrateValue(s) {
|
|
115
|
-
if (typeof s !== "string") {
|
|
116
|
-
return s;
|
|
117
|
-
}
|
|
118
|
-
const s1 = s.replace(/num_files="\d+"/g, 'num_files="[NUM]"').replace(/duration_ms="\d+"/g, 'duration_ms="[DURATION]"').replace(/cost_usd="\d+"/g, 'cost_usd="[COST]"').replace(/\//g, path.sep).replaceAll(getCwd(), "[CWD]");
|
|
119
|
-
if (s1.includes("Files modified by user:")) {
|
|
120
|
-
return "Files modified by user: [FILES]";
|
|
121
|
-
}
|
|
122
|
-
return s1;
|
|
123
|
-
}
|
|
124
|
-
function hydrateValue(s) {
|
|
125
|
-
if (typeof s !== "string") {
|
|
126
|
-
return s;
|
|
127
|
-
}
|
|
128
|
-
return s.replaceAll("[NUM]", "1").replaceAll("[DURATION]", "100").replaceAll("[CWD]", getCwd());
|
|
129
|
-
}
|
|
130
|
-
export {
|
|
131
|
-
withVCR
|
|
132
|
-
};
|
|
133
|
-
//# sourceMappingURL=vcr.js.map
|
package/dist/services/vcr.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/services/vcr.ts"],
|
|
4
|
-
"sourcesContent": ["import { createHash, type UUID } from 'crypto'\nimport { mkdirSync, readFileSync, writeFileSync } from 'fs'\nimport { dirname } from 'path'\nimport type { AssistantMessage, UserMessage } from '../query'\nimport { existsSync } from 'fs'\nimport { env } from '../utils/env'\nimport { getCwd } from '../utils/state'\nimport * as path from 'path'\nimport { mapValues } from 'lodash-es'\nimport type { ContentBlock } from '@anthropic-ai/sdk/resources/index.mjs'\n\nexport async function withVCR(\n messages: (UserMessage | AssistantMessage)[],\n f: () => Promise<AssistantMessage>,\n): Promise<AssistantMessage> {\n if (process.env.NODE_ENV !== 'test') {\n return await f()\n }\n\n const dehydratedInput = mapMessages(\n messages.map(_ => _.message.content),\n dehydrateValue,\n )\n const filename = `./fixtures/${dehydratedInput.map(_ => createHash('sha1').update(JSON.stringify(_)).digest('hex').slice(0, 6)).join('-')}.json`\n\n // Fetch cached fixture\n if (existsSync(filename)) {\n const cached = JSON.parse(readFileSync(filename, 'utf-8'))\n return mapAssistantMessage(cached.output, hydrateValue)\n }\n\n if (env.isCI) {\n console.warn(\n `Anthropic API fixture missing. Re-run npm test locally, then commit the result. ${JSON.stringify({ input: dehydratedInput }, null, 2)}`,\n )\n }\n\n // Create & write new fixture\n const result = await f()\n if (env.isCI) {\n return result\n }\n\n if (!existsSync(dirname(filename))) {\n mkdirSync(dirname(filename), { recursive: true })\n }\n writeFileSync(\n filename,\n JSON.stringify(\n {\n input: dehydratedInput,\n output: mapAssistantMessage(result, dehydrateValue),\n },\n null,\n 2,\n ),\n )\n return result\n}\n\nfunction mapMessages(\n messages: (UserMessage | AssistantMessage)['message']['content'][],\n f: (s: unknown) => unknown,\n): (UserMessage | AssistantMessage)['message']['content'][] {\n return messages.map(_ => {\n if (typeof _ === 'string') {\n return f(_)\n }\n return _.map(_ => {\n switch (_.type) {\n case 'tool_result':\n if (typeof _.content === 'string') {\n return { ..._, content: f(_.content) }\n }\n if (Array.isArray(_.content)) {\n return {\n ..._,\n content: _.content.map(_ => {\n switch (_.type) {\n case 'text':\n return { ..._, text: f(_.text) }\n case 'image':\n return _\n }\n }),\n }\n }\n return _\n case 'text':\n return { ..._, text: f(_.text) }\n case 'tool_use':\n return {\n ..._,\n input: mapValues(_.input as Record<string, unknown>, f),\n }\n case 'image':\n return _\n }\n })\n }) as (UserMessage | AssistantMessage)['message']['content'][]\n}\n\nfunction mapAssistantMessage(\n message: AssistantMessage,\n f: (s: unknown) => unknown,\n): AssistantMessage {\n return {\n durationMs: 'DURATION' as unknown as number,\n costUSD: 'COST' as unknown as number,\n uuid: 'UUID' as unknown as UUID,\n message: {\n ...message.message,\n content: message.message.content\n .map(_ => {\n switch (_.type) {\n case 'text':\n return {\n ..._,\n text: f(_.text) as string,\n citations: _.citations || [],\n } // Ensure citations\n case 'tool_use':\n return {\n ..._,\n input: mapValues(_.input as Record<string, unknown>, f),\n }\n default:\n return _ // Handle other block types unchanged\n }\n })\n .filter(Boolean) as ContentBlock[],\n },\n type: 'assistant',\n }\n}\n\nfunction dehydrateValue(s: unknown): unknown {\n if (typeof s !== 'string') {\n return s\n }\n const s1 = s\n .replace(/num_files=\"\\d+\"/g, 'num_files=\"[NUM]\"')\n .replace(/duration_ms=\"\\d+\"/g, 'duration_ms=\"[DURATION]\"')\n .replace(/cost_usd=\"\\d+\"/g, 'cost_usd=\"[COST]\"')\n .replace(/\\//g, path.sep)\n .replaceAll(getCwd(), '[CWD]')\n if (s1.includes('Files modified by user:')) {\n return 'Files modified by user: [FILES]'\n }\n return s1\n}\n\nfunction hydrateValue(s: unknown): unknown {\n if (typeof s !== 'string') {\n return s\n }\n return s\n .replaceAll('[NUM]', '1')\n .replaceAll('[DURATION]', '100')\n .replaceAll('[CWD]', getCwd())\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["_"]
|
|
7
|
-
}
|
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
import { Box } from "ink";
|
|
2
|
-
import * as React from "react";
|
|
3
|
-
import { z } from "zod";
|
|
4
|
-
import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
|
|
5
|
-
import { HighlightedCode } from "../../components/HighlightedCode.js";
|
|
6
|
-
import { getContext } from "../../context.js";
|
|
7
|
-
import { query } from "../../query.js";
|
|
8
|
-
import { lastX } from "../../utils/generators.js";
|
|
9
|
-
import { createUserMessage } from "../../utils/messages.js";
|
|
10
|
-
import { BashTool } from "../BashTool/BashTool.js";
|
|
11
|
-
import { FileReadTool } from "../FileReadTool/FileReadTool.js";
|
|
12
|
-
import { FileWriteTool } from "../FileWriteTool/FileWriteTool.js";
|
|
13
|
-
import { GlobTool } from "../GlobTool/GlobTool.js";
|
|
14
|
-
import { GrepTool } from "../GrepTool/GrepTool.js";
|
|
15
|
-
import { LSTool } from "../lsTool/lsTool.js";
|
|
16
|
-
import { ARCHITECT_SYSTEM_PROMPT, DESCRIPTION } from "./prompt.js";
|
|
17
|
-
const FS_EXPLORATION_TOOLS = [
|
|
18
|
-
BashTool,
|
|
19
|
-
LSTool,
|
|
20
|
-
FileReadTool,
|
|
21
|
-
FileWriteTool,
|
|
22
|
-
GlobTool,
|
|
23
|
-
GrepTool
|
|
24
|
-
];
|
|
25
|
-
const inputSchema = z.strictObject({
|
|
26
|
-
prompt: z.string().describe("The technical request or coding task to analyze"),
|
|
27
|
-
context: z.string().describe("Optional context from previous conversation or system state").optional()
|
|
28
|
-
});
|
|
29
|
-
const ArchitectTool = {
|
|
30
|
-
name: "Architect",
|
|
31
|
-
async description() {
|
|
32
|
-
return DESCRIPTION;
|
|
33
|
-
},
|
|
34
|
-
inputSchema,
|
|
35
|
-
isReadOnly() {
|
|
36
|
-
return true;
|
|
37
|
-
},
|
|
38
|
-
isConcurrencySafe() {
|
|
39
|
-
return true;
|
|
40
|
-
},
|
|
41
|
-
userFacingName() {
|
|
42
|
-
return "Architect";
|
|
43
|
-
},
|
|
44
|
-
async isEnabled() {
|
|
45
|
-
return false;
|
|
46
|
-
},
|
|
47
|
-
needsPermissions() {
|
|
48
|
-
return false;
|
|
49
|
-
},
|
|
50
|
-
async *call({ prompt, context }, toolUseContext) {
|
|
51
|
-
const content = context ? `<context>${context}</context>
|
|
52
|
-
|
|
53
|
-
${prompt}` : prompt;
|
|
54
|
-
const userMessage = createUserMessage(content);
|
|
55
|
-
const messages = [userMessage];
|
|
56
|
-
const allowedTools = (toolUseContext.options?.tools ?? []).filter(
|
|
57
|
-
(_) => FS_EXPLORATION_TOOLS.map((_2) => _2.name).includes(_.name)
|
|
58
|
-
);
|
|
59
|
-
const canUseTool = async () => ({ result: true });
|
|
60
|
-
const lastResponse = await lastX(
|
|
61
|
-
query(
|
|
62
|
-
messages,
|
|
63
|
-
[ARCHITECT_SYSTEM_PROMPT],
|
|
64
|
-
await getContext(),
|
|
65
|
-
canUseTool,
|
|
66
|
-
{
|
|
67
|
-
...toolUseContext,
|
|
68
|
-
setToolJSX: () => {
|
|
69
|
-
},
|
|
70
|
-
// Dummy function since ArchitectTool doesn't use UI
|
|
71
|
-
options: {
|
|
72
|
-
commands: toolUseContext.options?.commands || [],
|
|
73
|
-
forkNumber: toolUseContext.options?.forkNumber || 0,
|
|
74
|
-
messageLogName: toolUseContext.options?.messageLogName || "default",
|
|
75
|
-
verbose: toolUseContext.options?.verbose || false,
|
|
76
|
-
safeMode: toolUseContext.options?.safeMode || false,
|
|
77
|
-
maxThinkingTokens: toolUseContext.options?.maxThinkingTokens || 0,
|
|
78
|
-
...toolUseContext.options,
|
|
79
|
-
tools: allowedTools
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
)
|
|
83
|
-
);
|
|
84
|
-
if (lastResponse.type !== "assistant") {
|
|
85
|
-
throw new Error(`Invalid response from API`);
|
|
86
|
-
}
|
|
87
|
-
const data = lastResponse.message.content.filter((_) => _.type === "text");
|
|
88
|
-
yield {
|
|
89
|
-
type: "result",
|
|
90
|
-
data,
|
|
91
|
-
resultForAssistant: this.renderResultForAssistant(data)
|
|
92
|
-
};
|
|
93
|
-
},
|
|
94
|
-
async prompt() {
|
|
95
|
-
return DESCRIPTION;
|
|
96
|
-
},
|
|
97
|
-
renderResultForAssistant(data) {
|
|
98
|
-
return data.map((block) => block.text).join("\n");
|
|
99
|
-
},
|
|
100
|
-
renderToolUseMessage(input) {
|
|
101
|
-
return Object.entries(input).map(([key, value]) => `${key}: ${JSON.stringify(value)}`).join(", ");
|
|
102
|
-
},
|
|
103
|
-
renderToolResultMessage(content) {
|
|
104
|
-
return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", gap: 1 }, /* @__PURE__ */ React.createElement(
|
|
105
|
-
HighlightedCode,
|
|
106
|
-
{
|
|
107
|
-
code: content.map((_) => _.text).join("\n"),
|
|
108
|
-
language: "markdown"
|
|
109
|
-
}
|
|
110
|
-
));
|
|
111
|
-
},
|
|
112
|
-
renderToolUseRejectedMessage() {
|
|
113
|
-
return /* @__PURE__ */ React.createElement(FallbackToolUseRejectedMessage, null);
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
|
-
export {
|
|
117
|
-
ArchitectTool
|
|
118
|
-
};
|
|
119
|
-
//# sourceMappingURL=ArchitectTool.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/tools/ArchitectTool/ArchitectTool.tsx"],
|
|
4
|
-
"sourcesContent": ["import type { TextBlock } from '@anthropic-ai/sdk/resources/index.mjs'\nimport { Box } from 'ink'\nimport * as React from 'react'\nimport { z } from 'zod'\nimport type { Tool } from '../../Tool'\nimport { FallbackToolUseRejectedMessage } from '../../components/FallbackToolUseRejectedMessage'\nimport { HighlightedCode } from '../../components/HighlightedCode'\nimport { getContext } from '../../context'\nimport { Message, query } from '../../query'\nimport { lastX } from '../../utils/generators'\nimport { createUserMessage } from '../../utils/messages'\nimport { BashTool } from '../BashTool/BashTool'\nimport { FileReadTool } from '../FileReadTool/FileReadTool'\nimport { FileWriteTool } from '../FileWriteTool/FileWriteTool'\nimport { GlobTool } from '../GlobTool/GlobTool'\nimport { GrepTool } from '../GrepTool/GrepTool'\nimport { LSTool } from '../lsTool/lsTool'\nimport { ARCHITECT_SYSTEM_PROMPT, DESCRIPTION } from './prompt'\n\nconst FS_EXPLORATION_TOOLS: Tool[] = [\n BashTool,\n LSTool,\n FileReadTool,\n FileWriteTool,\n GlobTool,\n GrepTool,\n]\n\nconst inputSchema = z.strictObject({\n prompt: z\n .string()\n .describe('The technical request or coding task to analyze'),\n context: z\n .string()\n .describe('Optional context from previous conversation or system state')\n .optional(),\n})\n\nexport const ArchitectTool = {\n name: 'Architect',\n async description() {\n return DESCRIPTION\n },\n inputSchema,\n isReadOnly() {\n return true\n },\n isConcurrencySafe() {\n return true // ArchitectTool is read-only, safe for concurrent execution\n },\n userFacingName() {\n return 'Architect'\n },\n async isEnabled() {\n return false\n },\n needsPermissions() {\n return false\n },\n async *call({ prompt, context }, toolUseContext) {\n const content = context\n ? `<context>${context}</context>\\n\\n${prompt}`\n : prompt\n\n const userMessage = createUserMessage(content)\n\n const messages: Message[] = [userMessage]\n\n // We only allow the file exploration tools to be used in the architect tool\n const allowedTools = (toolUseContext.options?.tools ?? []).filter(_ =>\n FS_EXPLORATION_TOOLS.map(_ => _.name).includes(_.name),\n )\n\n // Create a dummy canUseTool function since this tool controls its own tool usage\n const canUseTool = async () => ({ result: true as const })\n\n const lastResponse = await lastX(\n query(\n messages,\n [ARCHITECT_SYSTEM_PROMPT],\n await getContext(),\n canUseTool,\n {\n ...toolUseContext,\n setToolJSX: () => {}, // Dummy function since ArchitectTool doesn't use UI\n options: { \n commands: toolUseContext.options?.commands || [],\n forkNumber: toolUseContext.options?.forkNumber || 0,\n messageLogName: toolUseContext.options?.messageLogName || 'default',\n verbose: toolUseContext.options?.verbose || false,\n safeMode: toolUseContext.options?.safeMode || false,\n maxThinkingTokens: toolUseContext.options?.maxThinkingTokens || 0,\n ...toolUseContext.options, \n tools: allowedTools \n },\n },\n ),\n )\n\n if (lastResponse.type !== 'assistant') {\n throw new Error(`Invalid response from API`)\n }\n\n const data = lastResponse.message.content.filter(_ => _.type === 'text')\n yield {\n type: 'result',\n data,\n resultForAssistant: this.renderResultForAssistant(data),\n }\n },\n async prompt() {\n return DESCRIPTION\n },\n renderResultForAssistant(data: TextBlock[]): string {\n return data.map(block => block.text).join('\\n')\n },\n renderToolUseMessage(input) {\n return Object.entries(input)\n .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)\n .join(', ')\n },\n renderToolResultMessage(content) {\n return (\n <Box flexDirection=\"column\" gap={1}>\n <HighlightedCode\n code={content.map(_ => _.text).join('\\n')}\n language=\"markdown\"\n />\n </Box>\n )\n },\n renderToolUseRejectedMessage() {\n return <FallbackToolUseRejectedMessage />\n },\n} satisfies Tool<typeof inputSchema, TextBlock[]>\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["_"]
|
|
7
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
const ARCHITECT_SYSTEM_PROMPT = `You are an expert software architect. Your role is to analyze technical requirements and produce clear, actionable implementation plans.
|
|
2
|
-
These plans will then be carried out by a junior software engineer so you need to be specific and detailed. However do not actually write the code, just explain the plan.
|
|
3
|
-
|
|
4
|
-
Follow these steps for each request:
|
|
5
|
-
1. Carefully analyze requirements to identify core functionality and constraints
|
|
6
|
-
2. Define clear technical approach with specific technologies and patterns
|
|
7
|
-
3. Break down implementation into concrete, actionable steps at the appropriate level of abstraction
|
|
8
|
-
|
|
9
|
-
Keep responses focused, specific and actionable.
|
|
10
|
-
|
|
11
|
-
IMPORTANT: Do not ask the user if you should implement the changes at the end. Just provide the plan as described above.
|
|
12
|
-
IMPORTANT: Do not attempt to write the code or use any string modification tools. Just provide the plan.`;
|
|
13
|
-
const DESCRIPTION = "Your go-to tool for any technical or coding task. Analyzes requirements and breaks them down into clear, actionable implementation steps. Use this whenever you need help planning how to implement a feature, solve a technical problem, or structure your code.";
|
|
14
|
-
export {
|
|
15
|
-
ARCHITECT_SYSTEM_PROMPT,
|
|
16
|
-
DESCRIPTION
|
|
17
|
-
};
|
|
18
|
-
//# sourceMappingURL=prompt.js.map
|