@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.
Files changed (725) hide show
  1. package/README.md +25 -388
  2. package/cli-acp.js +82 -0
  3. package/cli.js +89 -79
  4. package/dist/REPL-GIU4ZIXM.js +42 -0
  5. package/dist/acp-H3VJ77YG.js +1357 -0
  6. package/dist/acp-H3VJ77YG.js.map +7 -0
  7. package/dist/agentsValidate-XP3CFN6F.js +373 -0
  8. package/dist/agentsValidate-XP3CFN6F.js.map +7 -0
  9. package/dist/ask-3G5H5KD5.js +125 -0
  10. package/dist/ask-3G5H5KD5.js.map +7 -0
  11. package/dist/autoUpdater-DNRMJWFQ.js +17 -0
  12. package/dist/chunk-2KWKUXLT.js +490 -0
  13. package/dist/chunk-2KWKUXLT.js.map +7 -0
  14. package/dist/chunk-2PMO2FS2.js +1097 -0
  15. package/dist/chunk-2PMO2FS2.js.map +7 -0
  16. package/dist/chunk-3RUXVV4S.js +23 -0
  17. package/dist/chunk-3RUXVV4S.js.map +7 -0
  18. package/dist/chunk-3TXNP6HH.js +240 -0
  19. package/dist/chunk-3TXNP6HH.js.map +7 -0
  20. package/dist/chunk-4GAIJGRH.js +472 -0
  21. package/dist/chunk-4GAIJGRH.js.map +7 -0
  22. package/dist/chunk-4RTX4AG4.js +249 -0
  23. package/dist/chunk-4RTX4AG4.js.map +7 -0
  24. package/dist/chunk-54DNHKOD.js +511 -0
  25. package/dist/chunk-54DNHKOD.js.map +7 -0
  26. package/dist/chunk-67PY5IX6.js +34 -0
  27. package/dist/chunk-67PY5IX6.js.map +7 -0
  28. package/dist/chunk-6DRDLOLP.js +2613 -0
  29. package/dist/chunk-6DRDLOLP.js.map +7 -0
  30. package/dist/chunk-7CQVZNQV.js +1609 -0
  31. package/dist/chunk-7CQVZNQV.js.map +7 -0
  32. package/dist/chunk-ABLVTESJ.js +19 -0
  33. package/dist/chunk-ABLVTESJ.js.map +7 -0
  34. package/dist/{utils/config.js → chunk-AIMIPK4B.js} +351 -171
  35. package/dist/chunk-AIMIPK4B.js.map +7 -0
  36. package/dist/{utils/autoUpdater.js → chunk-BHGTA6JQ.js} +38 -21
  37. package/dist/chunk-BHGTA6JQ.js.map +7 -0
  38. package/dist/chunk-CIG63V4E.js +72 -0
  39. package/dist/chunk-CIG63V4E.js.map +7 -0
  40. package/dist/chunk-E6YNABER.js +24 -0
  41. package/dist/chunk-E6YNABER.js.map +7 -0
  42. package/dist/chunk-EH34V7CY.js +191 -0
  43. package/dist/chunk-EH34V7CY.js.map +7 -0
  44. package/dist/{cost-tracker.js → chunk-EZXMVTDU.js} +51 -32
  45. package/dist/chunk-EZXMVTDU.js.map +7 -0
  46. package/dist/chunk-FH5CHM6L.js +148 -0
  47. package/dist/chunk-FH5CHM6L.js.map +7 -0
  48. package/dist/chunk-G6I7XROM.js +138 -0
  49. package/dist/chunk-G6I7XROM.js.map +7 -0
  50. package/dist/chunk-HN4E4UUQ.js +96 -0
  51. package/dist/chunk-HN4E4UUQ.js.map +7 -0
  52. package/dist/chunk-HSPVVDIW.js +30198 -0
  53. package/dist/chunk-HSPVVDIW.js.map +7 -0
  54. package/dist/{services/systemReminder.js → chunk-IE2CG2TV.js} +221 -59
  55. package/dist/chunk-IE2CG2TV.js.map +7 -0
  56. package/dist/chunk-JC6NCUG5.js +11 -0
  57. package/dist/chunk-K2MI4TPB.js +1256 -0
  58. package/dist/chunk-K2MI4TPB.js.map +7 -0
  59. package/dist/chunk-KAA5BGMQ.js +12 -0
  60. package/dist/chunk-KAA5BGMQ.js.map +7 -0
  61. package/dist/chunk-MN77D2F7.js +2931 -0
  62. package/dist/chunk-MN77D2F7.js.map +7 -0
  63. package/dist/chunk-NPFOMITO.js +21 -0
  64. package/dist/chunk-NPFOMITO.js.map +7 -0
  65. package/dist/chunk-NQLEUHMS.js +196 -0
  66. package/dist/chunk-NQLEUHMS.js.map +7 -0
  67. package/dist/chunk-OIFQB3S4.js +515 -0
  68. package/dist/chunk-OIFQB3S4.js.map +7 -0
  69. package/dist/chunk-OWTG2W3A.js +164 -0
  70. package/dist/chunk-OWTG2W3A.js.map +7 -0
  71. package/dist/chunk-OZNRLY3E.js +735 -0
  72. package/dist/chunk-OZNRLY3E.js.map +7 -0
  73. package/dist/{utils/debugLogger.js → chunk-QYFKRZQC.js} +107 -204
  74. package/dist/chunk-QYFKRZQC.js.map +7 -0
  75. package/dist/chunk-S3J2TLV6.js +16 -0
  76. package/dist/chunk-S3J2TLV6.js.map +7 -0
  77. package/dist/chunk-S6HRABTA.js +95 -0
  78. package/dist/chunk-S6HRABTA.js.map +7 -0
  79. package/dist/{utils/theme.js → chunk-SDGKPKDK.js} +28 -6
  80. package/dist/chunk-SDGKPKDK.js.map +7 -0
  81. package/dist/chunk-SRZZFAS7.js +766 -0
  82. package/dist/chunk-SRZZFAS7.js.map +7 -0
  83. package/dist/chunk-UKHTVRJM.js +47 -0
  84. package/dist/chunk-UKHTVRJM.js.map +7 -0
  85. package/dist/chunk-UYXEDKOZ.js +24 -0
  86. package/dist/chunk-UYXEDKOZ.js.map +7 -0
  87. package/dist/chunk-VBXVYQYY.js +145 -0
  88. package/dist/chunk-VBXVYQYY.js.map +7 -0
  89. package/dist/chunk-WVHORZQ5.js +17 -0
  90. package/dist/chunk-WVHORZQ5.js.map +7 -0
  91. package/dist/chunk-WWUWDNWW.js +49 -0
  92. package/dist/chunk-WWUWDNWW.js.map +7 -0
  93. package/dist/{utils/model.js → chunk-Z33T5YN5.js} +194 -227
  94. package/dist/chunk-Z33T5YN5.js.map +7 -0
  95. package/dist/{services/openai.js → chunk-ZQU3TXLC.js} +168 -234
  96. package/dist/chunk-ZQU3TXLC.js.map +7 -0
  97. package/dist/cli-SRV2INSL.js +3917 -0
  98. package/dist/cli-SRV2INSL.js.map +7 -0
  99. package/dist/commands-TWH6PGVG.js +46 -0
  100. package/dist/config-6ZMBCL23.js +81 -0
  101. package/dist/context-JQIOOI4W.js +30 -0
  102. package/dist/costTracker-6SL26FDB.js +19 -0
  103. package/dist/customCommands-DNEJS3ZU.js +25 -0
  104. package/dist/customCommands-DNEJS3ZU.js.map +7 -0
  105. package/dist/env-OFAXZ3XG.js +22 -0
  106. package/dist/env-OFAXZ3XG.js.map +7 -0
  107. package/dist/index.js +34 -5
  108. package/dist/index.js.map +4 -4
  109. package/dist/kodeAgentSessionId-X6XWQW7B.js +13 -0
  110. package/dist/kodeAgentSessionId-X6XWQW7B.js.map +7 -0
  111. package/dist/kodeAgentSessionLoad-6N27AC5K.js +18 -0
  112. package/dist/kodeAgentSessionLoad-6N27AC5K.js.map +7 -0
  113. package/dist/kodeAgentSessionResume-HUSAEO24.js +16 -0
  114. package/dist/kodeAgentSessionResume-HUSAEO24.js.map +7 -0
  115. package/dist/kodeAgentStreamJson-NXFN7TXH.js +13 -0
  116. package/dist/kodeAgentStreamJson-NXFN7TXH.js.map +7 -0
  117. package/dist/kodeAgentStreamJsonSession-GRWG3SPE.js +131 -0
  118. package/dist/kodeAgentStreamJsonSession-GRWG3SPE.js.map +7 -0
  119. package/dist/kodeAgentStructuredStdio-HGWJT7CU.js +10 -0
  120. package/dist/kodeAgentStructuredStdio-HGWJT7CU.js.map +7 -0
  121. package/dist/kodeHooks-TDMXFWSO.js +36 -0
  122. package/dist/kodeHooks-TDMXFWSO.js.map +7 -0
  123. package/dist/llm-XVXWYOHK.js +3118 -0
  124. package/dist/llm-XVXWYOHK.js.map +7 -0
  125. package/dist/llmLazy-7TD5N7XP.js +15 -0
  126. package/dist/llmLazy-7TD5N7XP.js.map +7 -0
  127. package/dist/loader-AUXIJTY6.js +28 -0
  128. package/dist/loader-AUXIJTY6.js.map +7 -0
  129. package/dist/mcp-BXJ3K7NZ.js +49 -0
  130. package/dist/mcp-BXJ3K7NZ.js.map +7 -0
  131. package/dist/{services/mentionProcessor.js → mentionProcessor-YD7YXYGF.js} +61 -50
  132. package/dist/mentionProcessor-YD7YXYGF.js.map +7 -0
  133. package/dist/messages-OFUJSPRV.js +63 -0
  134. package/dist/messages-OFUJSPRV.js.map +7 -0
  135. package/dist/model-KPYCXWBK.js +30 -0
  136. package/dist/model-KPYCXWBK.js.map +7 -0
  137. package/dist/openai-5G5D5Q4B.js +29 -0
  138. package/dist/openai-5G5D5Q4B.js.map +7 -0
  139. package/dist/outputStyles-HLDXFQK3.js +28 -0
  140. package/dist/outputStyles-HLDXFQK3.js.map +7 -0
  141. package/dist/package.json +1 -1
  142. package/dist/pluginRuntime-FPTKK6NY.js +218 -0
  143. package/dist/pluginRuntime-FPTKK6NY.js.map +7 -0
  144. package/dist/pluginValidation-DSFXZ4GF.js +17 -0
  145. package/dist/pluginValidation-DSFXZ4GF.js.map +7 -0
  146. package/dist/prompts-LWLAJRS2.js +48 -0
  147. package/dist/prompts-LWLAJRS2.js.map +7 -0
  148. package/dist/query-HVPWL27C.js +50 -0
  149. package/dist/query-HVPWL27C.js.map +7 -0
  150. package/dist/responsesStreaming-AW344PQO.js +10 -0
  151. package/dist/responsesStreaming-AW344PQO.js.map +7 -0
  152. package/dist/ripgrep-YOPCY2GO.js +17 -0
  153. package/dist/ripgrep-YOPCY2GO.js.map +7 -0
  154. package/dist/skillMarketplace-PSNKDINM.js +37 -0
  155. package/dist/skillMarketplace-PSNKDINM.js.map +7 -0
  156. package/dist/state-KNRWP3FO.js +16 -0
  157. package/dist/state-KNRWP3FO.js.map +7 -0
  158. package/dist/theme-7S2QN2FO.js +14 -0
  159. package/dist/theme-7S2QN2FO.js.map +7 -0
  160. package/dist/toolPermissionContext-65L65VEZ.js +17 -0
  161. package/dist/toolPermissionContext-65L65VEZ.js.map +7 -0
  162. package/dist/toolPermissionSettings-GPOBH4IV.js +18 -0
  163. package/dist/toolPermissionSettings-GPOBH4IV.js.map +7 -0
  164. package/dist/tools-FZU2FZBD.js +47 -0
  165. package/dist/tools-FZU2FZBD.js.map +7 -0
  166. package/dist/userInput-VHNBN2MW.js +311 -0
  167. package/dist/userInput-VHNBN2MW.js.map +7 -0
  168. package/dist/uuid-QN2CNKKN.js +9 -0
  169. package/dist/uuid-QN2CNKKN.js.map +7 -0
  170. package/package.json +43 -14
  171. package/scripts/binary-utils.cjs +62 -0
  172. package/scripts/cli-acp-wrapper.cjs +82 -0
  173. package/scripts/cli-wrapper.cjs +105 -0
  174. package/scripts/postinstall.js +135 -9
  175. package/LICENSE +0 -201
  176. package/README.zh-CN.md +0 -312
  177. package/dist/ProjectOnboarding.js +0 -99
  178. package/dist/ProjectOnboarding.js.map +0 -7
  179. package/dist/Tool.js +0 -1
  180. package/dist/commands/agents.js +0 -2087
  181. package/dist/commands/agents.js.map +0 -7
  182. package/dist/commands/approvedTools.js +0 -36
  183. package/dist/commands/approvedTools.js.map +0 -7
  184. package/dist/commands/bug.js +0 -21
  185. package/dist/commands/bug.js.map +0 -7
  186. package/dist/commands/clear.js +0 -37
  187. package/dist/commands/clear.js.map +0 -7
  188. package/dist/commands/compact.js +0 -104
  189. package/dist/commands/compact.js.map +0 -7
  190. package/dist/commands/config.js +0 -20
  191. package/dist/commands/config.js.map +0 -7
  192. package/dist/commands/cost.js +0 -19
  193. package/dist/commands/cost.js.map +0 -7
  194. package/dist/commands/ctx_viz.js +0 -152
  195. package/dist/commands/ctx_viz.js.map +0 -7
  196. package/dist/commands/doctor.js +0 -25
  197. package/dist/commands/doctor.js.map +0 -7
  198. package/dist/commands/help.js +0 -20
  199. package/dist/commands/help.js.map +0 -7
  200. package/dist/commands/init.js +0 -38
  201. package/dist/commands/init.js.map +0 -7
  202. package/dist/commands/listen.js +0 -37
  203. package/dist/commands/listen.js.map +0 -7
  204. package/dist/commands/login.js +0 -37
  205. package/dist/commands/login.js.map +0 -7
  206. package/dist/commands/logout.js +0 -33
  207. package/dist/commands/logout.js.map +0 -7
  208. package/dist/commands/mcp.js +0 -34
  209. package/dist/commands/mcp.js.map +0 -7
  210. package/dist/commands/model.js +0 -41
  211. package/dist/commands/model.js.map +0 -7
  212. package/dist/commands/modelstatus.js +0 -21
  213. package/dist/commands/modelstatus.js.map +0 -7
  214. package/dist/commands/onboarding.js +0 -36
  215. package/dist/commands/onboarding.js.map +0 -7
  216. package/dist/commands/pr_comments.js +0 -61
  217. package/dist/commands/pr_comments.js.map +0 -7
  218. package/dist/commands/refreshCommands.js +0 -37
  219. package/dist/commands/refreshCommands.js.map +0 -7
  220. package/dist/commands/release-notes.js +0 -30
  221. package/dist/commands/release-notes.js.map +0 -7
  222. package/dist/commands/resume.js +0 -35
  223. package/dist/commands/resume.js.map +0 -7
  224. package/dist/commands/review.js +0 -51
  225. package/dist/commands/review.js.map +0 -7
  226. package/dist/commands/terminalSetup.js +0 -163
  227. package/dist/commands/terminalSetup.js.map +0 -7
  228. package/dist/commands.js +0 -84
  229. package/dist/commands.js.map +0 -7
  230. package/dist/components/ApproveApiKey.js +0 -74
  231. package/dist/components/ApproveApiKey.js.map +0 -7
  232. package/dist/components/AsciiLogo.js +0 -12
  233. package/dist/components/AsciiLogo.js.map +0 -7
  234. package/dist/components/AutoUpdater.js +0 -74
  235. package/dist/components/AutoUpdater.js.map +0 -7
  236. package/dist/components/Bug.js +0 -147
  237. package/dist/components/Bug.js.map +0 -7
  238. package/dist/components/Config.js +0 -166
  239. package/dist/components/Config.js.map +0 -7
  240. package/dist/components/ConsoleOAuthFlow.js +0 -188
  241. package/dist/components/ConsoleOAuthFlow.js.map +0 -7
  242. package/dist/components/Cost.js +0 -13
  243. package/dist/components/Cost.js.map +0 -7
  244. package/dist/components/CostThresholdDialog.js +0 -38
  245. package/dist/components/CostThresholdDialog.js.map +0 -7
  246. package/dist/components/CustomSelect/option-map.js +0 -32
  247. package/dist/components/CustomSelect/option-map.js.map +0 -7
  248. package/dist/components/CustomSelect/select-option.js +0 -34
  249. package/dist/components/CustomSelect/select-option.js.map +0 -7
  250. package/dist/components/CustomSelect/select.js +0 -64
  251. package/dist/components/CustomSelect/select.js.map +0 -7
  252. package/dist/components/CustomSelect/theme.js +0 -1
  253. package/dist/components/CustomSelect/use-select-state.js +0 -220
  254. package/dist/components/CustomSelect/use-select-state.js.map +0 -7
  255. package/dist/components/CustomSelect/use-select.js +0 -21
  256. package/dist/components/CustomSelect/use-select.js.map +0 -7
  257. package/dist/components/FallbackToolUseRejectedMessage.js +0 -11
  258. package/dist/components/FallbackToolUseRejectedMessage.js.map +0 -7
  259. package/dist/components/FileEditToolUpdatedMessage.js +0 -32
  260. package/dist/components/FileEditToolUpdatedMessage.js.map +0 -7
  261. package/dist/components/Help.js +0 -41
  262. package/dist/components/Help.js.map +0 -7
  263. package/dist/components/HighlightedCode.js +0 -30
  264. package/dist/components/HighlightedCode.js.map +0 -7
  265. package/dist/components/InvalidConfigDialog.js +0 -83
  266. package/dist/components/InvalidConfigDialog.js.map +0 -7
  267. package/dist/components/Link.js +0 -18
  268. package/dist/components/Link.js.map +0 -7
  269. package/dist/components/LogSelector.js +0 -50
  270. package/dist/components/LogSelector.js.map +0 -7
  271. package/dist/components/Logo.js +0 -94
  272. package/dist/components/Logo.js.map +0 -7
  273. package/dist/components/MCPServerApprovalDialog.js +0 -79
  274. package/dist/components/MCPServerApprovalDialog.js.map +0 -7
  275. package/dist/components/MCPServerDialogCopy.js +0 -11
  276. package/dist/components/MCPServerDialogCopy.js.map +0 -7
  277. package/dist/components/MCPServerMultiselectDialog.js +0 -80
  278. package/dist/components/MCPServerMultiselectDialog.js.map +0 -7
  279. package/dist/components/Message.js +0 -146
  280. package/dist/components/Message.js.map +0 -7
  281. package/dist/components/MessageResponse.js +0 -9
  282. package/dist/components/MessageResponse.js.map +0 -7
  283. package/dist/components/MessageSelector.js +0 -133
  284. package/dist/components/MessageSelector.js.map +0 -7
  285. package/dist/components/ModeIndicator.js +0 -38
  286. package/dist/components/ModeIndicator.js.map +0 -7
  287. package/dist/components/ModelConfig.js +0 -208
  288. package/dist/components/ModelConfig.js.map +0 -7
  289. package/dist/components/ModelListManager.js +0 -140
  290. package/dist/components/ModelListManager.js.map +0 -7
  291. package/dist/components/ModelSelector.js +0 -1985
  292. package/dist/components/ModelSelector.js.map +0 -7
  293. package/dist/components/ModelStatusDisplay.js +0 -87
  294. package/dist/components/ModelStatusDisplay.js.map +0 -7
  295. package/dist/components/Onboarding.js +0 -153
  296. package/dist/components/Onboarding.js.map +0 -7
  297. package/dist/components/PressEnterToContinue.js +0 -10
  298. package/dist/components/PressEnterToContinue.js.map +0 -7
  299. package/dist/components/PromptInput.js +0 -488
  300. package/dist/components/PromptInput.js.map +0 -7
  301. package/dist/components/SentryErrorBoundary.js +0 -27
  302. package/dist/components/SentryErrorBoundary.js.map +0 -7
  303. package/dist/components/Spinner.js +0 -101
  304. package/dist/components/Spinner.js.map +0 -7
  305. package/dist/components/StickerRequestForm.js +0 -7
  306. package/dist/components/StickerRequestForm.js.map +0 -7
  307. package/dist/components/StructuredDiff.js +0 -148
  308. package/dist/components/StructuredDiff.js.map +0 -7
  309. package/dist/components/TextInput.js +0 -100
  310. package/dist/components/TextInput.js.map +0 -7
  311. package/dist/components/TodoItem.js +0 -35
  312. package/dist/components/TodoItem.js.map +0 -7
  313. package/dist/components/TokenWarning.js +0 -19
  314. package/dist/components/TokenWarning.js.map +0 -7
  315. package/dist/components/ToolUseLoader.js +0 -24
  316. package/dist/components/ToolUseLoader.js.map +0 -7
  317. package/dist/components/TrustDialog.js +0 -76
  318. package/dist/components/TrustDialog.js.map +0 -7
  319. package/dist/components/binary-feedback/BinaryFeedback.js +0 -50
  320. package/dist/components/binary-feedback/BinaryFeedback.js.map +0 -7
  321. package/dist/components/binary-feedback/BinaryFeedbackOption.js +0 -94
  322. package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +0 -7
  323. package/dist/components/binary-feedback/BinaryFeedbackView.js +0 -139
  324. package/dist/components/binary-feedback/BinaryFeedbackView.js.map +0 -7
  325. package/dist/components/binary-feedback/utils.js +0 -161
  326. package/dist/components/binary-feedback/utils.js.map +0 -7
  327. package/dist/components/messages/AssistantBashOutputMessage.js +0 -23
  328. package/dist/components/messages/AssistantBashOutputMessage.js.map +0 -7
  329. package/dist/components/messages/AssistantLocalCommandOutputMessage.js +0 -36
  330. package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +0 -7
  331. package/dist/components/messages/AssistantRedactedThinkingMessage.js +0 -12
  332. package/dist/components/messages/AssistantRedactedThinkingMessage.js.map +0 -7
  333. package/dist/components/messages/AssistantTextMessage.js +0 -78
  334. package/dist/components/messages/AssistantTextMessage.js.map +0 -7
  335. package/dist/components/messages/AssistantThinkingMessage.js +0 -27
  336. package/dist/components/messages/AssistantThinkingMessage.js.map +0 -7
  337. package/dist/components/messages/AssistantToolUseMessage.js +0 -91
  338. package/dist/components/messages/AssistantToolUseMessage.js.map +0 -7
  339. package/dist/components/messages/TaskProgressMessage.js +0 -11
  340. package/dist/components/messages/TaskProgressMessage.js.map +0 -7
  341. package/dist/components/messages/TaskToolMessage.js +0 -39
  342. package/dist/components/messages/TaskToolMessage.js.map +0 -7
  343. package/dist/components/messages/UserBashInputMessage.js +0 -18
  344. package/dist/components/messages/UserBashInputMessage.js.map +0 -7
  345. package/dist/components/messages/UserCommandMessage.js +0 -20
  346. package/dist/components/messages/UserCommandMessage.js.map +0 -7
  347. package/dist/components/messages/UserKodingInputMessage.js +0 -18
  348. package/dist/components/messages/UserKodingInputMessage.js.map +0 -7
  349. package/dist/components/messages/UserPromptMessage.js +0 -20
  350. package/dist/components/messages/UserPromptMessage.js.map +0 -7
  351. package/dist/components/messages/UserTextMessage.js +0 -25
  352. package/dist/components/messages/UserTextMessage.js.map +0 -7
  353. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +0 -10
  354. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js.map +0 -7
  355. package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js +0 -15
  356. package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js.map +0 -7
  357. package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +0 -25
  358. package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js.map +0 -7
  359. package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +0 -47
  360. package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js.map +0 -7
  361. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +0 -23
  362. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +0 -7
  363. package/dist/components/messages/UserToolResultMessage/utils.js +0 -42
  364. package/dist/components/messages/UserToolResultMessage/utils.js.map +0 -7
  365. package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js +0 -112
  366. package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js.map +0 -7
  367. package/dist/components/permissions/FallbackPermissionRequest.js +0 -131
  368. package/dist/components/permissions/FallbackPermissionRequest.js.map +0 -7
  369. package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +0 -159
  370. package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js.map +0 -7
  371. package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +0 -58
  372. package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +0 -7
  373. package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +0 -153
  374. package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js.map +0 -7
  375. package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +0 -70
  376. package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +0 -7
  377. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +0 -212
  378. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +0 -7
  379. package/dist/components/permissions/PermissionRequest.js +0 -70
  380. package/dist/components/permissions/PermissionRequest.js.map +0 -7
  381. package/dist/components/permissions/PermissionRequestTitle.js +0 -52
  382. package/dist/components/permissions/PermissionRequestTitle.js.map +0 -7
  383. package/dist/components/permissions/hooks.js +0 -28
  384. package/dist/components/permissions/hooks.js.map +0 -7
  385. package/dist/components/permissions/toolUseOptions.js +0 -46
  386. package/dist/components/permissions/toolUseOptions.js.map +0 -7
  387. package/dist/components/permissions/utils.js +0 -21
  388. package/dist/components/permissions/utils.js.map +0 -7
  389. package/dist/constants/betas.js +0 -11
  390. package/dist/constants/betas.js.map +0 -7
  391. package/dist/constants/claude-asterisk-ascii-art.js +0 -242
  392. package/dist/constants/claude-asterisk-ascii-art.js.map +0 -7
  393. package/dist/constants/figures.js +0 -6
  394. package/dist/constants/figures.js.map +0 -7
  395. package/dist/constants/keys.js +0 -7
  396. package/dist/constants/keys.js.map +0 -7
  397. package/dist/constants/macros.js +0 -13
  398. package/dist/constants/macros.js.map +0 -7
  399. package/dist/constants/modelCapabilities.js +0 -154
  400. package/dist/constants/modelCapabilities.js.map +0 -7
  401. package/dist/constants/models.js +0 -1034
  402. package/dist/constants/models.js.map +0 -7
  403. package/dist/constants/oauth.js +0 -18
  404. package/dist/constants/oauth.js.map +0 -7
  405. package/dist/constants/product.js +0 -26
  406. package/dist/constants/product.js.map +0 -7
  407. package/dist/constants/prompts.js +0 -168
  408. package/dist/constants/prompts.js.map +0 -7
  409. package/dist/constants/releaseNotes.js +0 -9
  410. package/dist/constants/releaseNotes.js.map +0 -7
  411. package/dist/context/PermissionContext.js +0 -111
  412. package/dist/context/PermissionContext.js.map +0 -7
  413. package/dist/context.js +0 -259
  414. package/dist/context.js.map +0 -7
  415. package/dist/cost-tracker.js.map +0 -7
  416. package/dist/entrypoints/cli.js +0 -1107
  417. package/dist/entrypoints/cli.js.map +0 -7
  418. package/dist/entrypoints/mcp.js +0 -150
  419. package/dist/entrypoints/mcp.js.map +0 -7
  420. package/dist/history.js +0 -25
  421. package/dist/history.js.map +0 -7
  422. package/dist/hooks/useApiKeyVerification.js +0 -12
  423. package/dist/hooks/useApiKeyVerification.js.map +0 -7
  424. package/dist/hooks/useArrowKeyHistory.js +0 -50
  425. package/dist/hooks/useArrowKeyHistory.js.map +0 -7
  426. package/dist/hooks/useCanUseTool.js +0 -112
  427. package/dist/hooks/useCanUseTool.js.map +0 -7
  428. package/dist/hooks/useCancelRequest.js +0 -30
  429. package/dist/hooks/useCancelRequest.js.map +0 -7
  430. package/dist/hooks/useDoublePress.js +0 -31
  431. package/dist/hooks/useDoublePress.js.map +0 -7
  432. package/dist/hooks/useExitOnCtrlCD.js +0 -26
  433. package/dist/hooks/useExitOnCtrlCD.js.map +0 -7
  434. package/dist/hooks/useInterval.js +0 -18
  435. package/dist/hooks/useInterval.js.map +0 -7
  436. package/dist/hooks/useLogMessages.js +0 -14
  437. package/dist/hooks/useLogMessages.js.map +0 -7
  438. package/dist/hooks/useLogStartupTime.js +0 -15
  439. package/dist/hooks/useLogStartupTime.js.map +0 -7
  440. package/dist/hooks/useNotifyAfterTimeout.js +0 -42
  441. package/dist/hooks/useNotifyAfterTimeout.js.map +0 -7
  442. package/dist/hooks/usePermissionRequestLogging.js +0 -28
  443. package/dist/hooks/usePermissionRequestLogging.js.map +0 -7
  444. package/dist/hooks/useTerminalSize.js +0 -38
  445. package/dist/hooks/useTerminalSize.js.map +0 -7
  446. package/dist/hooks/useTextInput.js +0 -250
  447. package/dist/hooks/useTextInput.js.map +0 -7
  448. package/dist/hooks/useUnifiedCompletion.js +0 -929
  449. package/dist/hooks/useUnifiedCompletion.js.map +0 -7
  450. package/dist/messages.js +0 -33
  451. package/dist/messages.js.map +0 -7
  452. package/dist/permissions.js +0 -194
  453. package/dist/permissions.js.map +0 -7
  454. package/dist/query.js +0 -492
  455. package/dist/query.js.map +0 -7
  456. package/dist/screens/ConfigureNpmPrefix.js +0 -128
  457. package/dist/screens/ConfigureNpmPrefix.js.map +0 -7
  458. package/dist/screens/Doctor.js +0 -22
  459. package/dist/screens/Doctor.js.map +0 -7
  460. package/dist/screens/LogList.js +0 -55
  461. package/dist/screens/LogList.js.map +0 -7
  462. package/dist/screens/REPL.js +0 -593
  463. package/dist/screens/REPL.js.map +0 -7
  464. package/dist/screens/ResumeConversation.js +0 -56
  465. package/dist/screens/ResumeConversation.js.map +0 -7
  466. package/dist/services/adapters/base.js +0 -29
  467. package/dist/services/adapters/base.js.map +0 -7
  468. package/dist/services/adapters/chatCompletions.js +0 -69
  469. package/dist/services/adapters/chatCompletions.js.map +0 -7
  470. package/dist/services/adapters/responsesAPI.js +0 -126
  471. package/dist/services/adapters/responsesAPI.js.map +0 -7
  472. package/dist/services/browserMocks.js +0 -48
  473. package/dist/services/browserMocks.js.map +0 -7
  474. package/dist/services/claude.js +0 -1605
  475. package/dist/services/claude.js.map +0 -7
  476. package/dist/services/customCommands.js +0 -359
  477. package/dist/services/customCommands.js.map +0 -7
  478. package/dist/services/fileFreshness.js +0 -280
  479. package/dist/services/fileFreshness.js.map +0 -7
  480. package/dist/services/gpt5ConnectionTest.js +0 -248
  481. package/dist/services/gpt5ConnectionTest.js.map +0 -7
  482. package/dist/services/mcpClient.js +0 -435
  483. package/dist/services/mcpClient.js.map +0 -7
  484. package/dist/services/mcpServerApproval.js +0 -55
  485. package/dist/services/mcpServerApproval.js.map +0 -7
  486. package/dist/services/mentionProcessor.js.map +0 -7
  487. package/dist/services/modelAdapterFactory.js +0 -47
  488. package/dist/services/modelAdapterFactory.js.map +0 -7
  489. package/dist/services/notifier.js +0 -35
  490. package/dist/services/notifier.js.map +0 -7
  491. package/dist/services/oauth.js +0 -259
  492. package/dist/services/oauth.js.map +0 -7
  493. package/dist/services/openai.js.map +0 -7
  494. package/dist/services/responseStateManager.js +0 -68
  495. package/dist/services/responseStateManager.js.map +0 -7
  496. package/dist/services/sentry.js +0 -9
  497. package/dist/services/sentry.js.map +0 -7
  498. package/dist/services/statsig.js +0 -112
  499. package/dist/services/statsig.js.map +0 -7
  500. package/dist/services/statsigStorage.js +0 -75
  501. package/dist/services/statsigStorage.js.map +0 -7
  502. package/dist/services/systemReminder.js.map +0 -7
  503. package/dist/services/vcr.js +0 -133
  504. package/dist/services/vcr.js.map +0 -7
  505. package/dist/tools/ArchitectTool/ArchitectTool.js +0 -119
  506. package/dist/tools/ArchitectTool/ArchitectTool.js.map +0 -7
  507. package/dist/tools/ArchitectTool/prompt.js +0 -18
  508. package/dist/tools/ArchitectTool/prompt.js.map +0 -7
  509. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +0 -423
  510. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +0 -7
  511. package/dist/tools/BashTool/BashTool.js +0 -188
  512. package/dist/tools/BashTool/BashTool.js.map +0 -7
  513. package/dist/tools/BashTool/BashToolResultMessage.js +0 -21
  514. package/dist/tools/BashTool/BashToolResultMessage.js.map +0 -7
  515. package/dist/tools/BashTool/OutputLine.js +0 -30
  516. package/dist/tools/BashTool/OutputLine.js.map +0 -7
  517. package/dist/tools/BashTool/prompt.js +0 -179
  518. package/dist/tools/BashTool/prompt.js.map +0 -7
  519. package/dist/tools/BashTool/utils.js +0 -51
  520. package/dist/tools/BashTool/utils.js.map +0 -7
  521. package/dist/tools/FileEditTool/FileEditTool.js +0 -228
  522. package/dist/tools/FileEditTool/FileEditTool.js.map +0 -7
  523. package/dist/tools/FileEditTool/prompt.js +0 -54
  524. package/dist/tools/FileEditTool/prompt.js.map +0 -7
  525. package/dist/tools/FileEditTool/utils.js +0 -42
  526. package/dist/tools/FileEditTool/utils.js.map +0 -7
  527. package/dist/tools/FileReadTool/FileReadTool.js +0 -272
  528. package/dist/tools/FileReadTool/FileReadTool.js.map +0 -7
  529. package/dist/tools/FileReadTool/prompt.js +0 -10
  530. package/dist/tools/FileReadTool/prompt.js.map +0 -7
  531. package/dist/tools/FileWriteTool/FileWriteTool.js +0 -204
  532. package/dist/tools/FileWriteTool/FileWriteTool.js.map +0 -7
  533. package/dist/tools/FileWriteTool/prompt.js +0 -14
  534. package/dist/tools/FileWriteTool/prompt.js.map +0 -7
  535. package/dist/tools/GlobTool/GlobTool.js +0 -88
  536. package/dist/tools/GlobTool/GlobTool.js.map +0 -7
  537. package/dist/tools/GlobTool/prompt.js +0 -12
  538. package/dist/tools/GlobTool/prompt.js.map +0 -7
  539. package/dist/tools/GrepTool/GrepTool.js +0 -107
  540. package/dist/tools/GrepTool/GrepTool.js.map +0 -7
  541. package/dist/tools/GrepTool/prompt.js +0 -15
  542. package/dist/tools/GrepTool/prompt.js.map +0 -7
  543. package/dist/tools/MCPTool/MCPTool.js +0 -90
  544. package/dist/tools/MCPTool/MCPTool.js.map +0 -7
  545. package/dist/tools/MCPTool/prompt.js +0 -7
  546. package/dist/tools/MCPTool/prompt.js.map +0 -7
  547. package/dist/tools/MemoryReadTool/MemoryReadTool.js +0 -103
  548. package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +0 -7
  549. package/dist/tools/MemoryReadTool/prompt.js +0 -7
  550. package/dist/tools/MemoryReadTool/prompt.js.map +0 -7
  551. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +0 -77
  552. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +0 -7
  553. package/dist/tools/MemoryWriteTool/prompt.js +0 -7
  554. package/dist/tools/MemoryWriteTool/prompt.js.map +0 -7
  555. package/dist/tools/MultiEditTool/MultiEditTool.js +0 -308
  556. package/dist/tools/MultiEditTool/MultiEditTool.js.map +0 -7
  557. package/dist/tools/MultiEditTool/prompt.js +0 -48
  558. package/dist/tools/MultiEditTool/prompt.js.map +0 -7
  559. package/dist/tools/NotebookEditTool/NotebookEditTool.js +0 -238
  560. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +0 -7
  561. package/dist/tools/NotebookEditTool/prompt.js +0 -7
  562. package/dist/tools/NotebookEditTool/prompt.js.map +0 -7
  563. package/dist/tools/NotebookReadTool/NotebookReadTool.js +0 -212
  564. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +0 -7
  565. package/dist/tools/NotebookReadTool/prompt.js +0 -7
  566. package/dist/tools/NotebookReadTool/prompt.js.map +0 -7
  567. package/dist/tools/StickerRequestTool/StickerRequestTool.js +0 -86
  568. package/dist/tools/StickerRequestTool/StickerRequestTool.js.map +0 -7
  569. package/dist/tools/StickerRequestTool/prompt.js +0 -23
  570. package/dist/tools/StickerRequestTool/prompt.js.map +0 -7
  571. package/dist/tools/TaskTool/TaskTool.js +0 -351
  572. package/dist/tools/TaskTool/TaskTool.js.map +0 -7
  573. package/dist/tools/TaskTool/constants.js +0 -5
  574. package/dist/tools/TaskTool/constants.js.map +0 -7
  575. package/dist/tools/TaskTool/prompt.js +0 -82
  576. package/dist/tools/TaskTool/prompt.js.map +0 -7
  577. package/dist/tools/ThinkTool/ThinkTool.js +0 -48
  578. package/dist/tools/ThinkTool/ThinkTool.js.map +0 -7
  579. package/dist/tools/ThinkTool/prompt.js +0 -16
  580. package/dist/tools/ThinkTool/prompt.js.map +0 -7
  581. package/dist/tools/TodoWriteTool/TodoWriteTool.js +0 -216
  582. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +0 -7
  583. package/dist/tools/TodoWriteTool/prompt.js +0 -66
  584. package/dist/tools/TodoWriteTool/prompt.js.map +0 -7
  585. package/dist/tools/URLFetcherTool/URLFetcherTool.js +0 -137
  586. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +0 -7
  587. package/dist/tools/URLFetcherTool/cache.js +0 -45
  588. package/dist/tools/URLFetcherTool/cache.js.map +0 -7
  589. package/dist/tools/URLFetcherTool/htmlToMarkdown.js +0 -42
  590. package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +0 -7
  591. package/dist/tools/URLFetcherTool/prompt.js +0 -22
  592. package/dist/tools/URLFetcherTool/prompt.js.map +0 -7
  593. package/dist/tools/WebSearchTool/WebSearchTool.js +0 -86
  594. package/dist/tools/WebSearchTool/WebSearchTool.js.map +0 -7
  595. package/dist/tools/WebSearchTool/prompt.js +0 -17
  596. package/dist/tools/WebSearchTool/prompt.js.map +0 -7
  597. package/dist/tools/WebSearchTool/searchProviders.js +0 -48
  598. package/dist/tools/WebSearchTool/searchProviders.js.map +0 -7
  599. package/dist/tools/lsTool/lsTool.js +0 -201
  600. package/dist/tools/lsTool/lsTool.js.map +0 -7
  601. package/dist/tools/lsTool/prompt.js +0 -5
  602. package/dist/tools/lsTool/prompt.js.map +0 -7
  603. package/dist/tools.js +0 -64
  604. package/dist/tools.js.map +0 -7
  605. package/dist/types/PermissionMode.js +0 -82
  606. package/dist/types/PermissionMode.js.map +0 -7
  607. package/dist/types/RequestContext.js +0 -47
  608. package/dist/types/RequestContext.js.map +0 -7
  609. package/dist/types/common.d.js +0 -1
  610. package/dist/types/conversation.js +0 -1
  611. package/dist/types/logs.js +0 -1
  612. package/dist/types/modelCapabilities.js +0 -1
  613. package/dist/types/notebook.js +0 -1
  614. package/dist/utils/Cursor.js +0 -313
  615. package/dist/utils/Cursor.js.map +0 -7
  616. package/dist/utils/PersistentShell.js +0 -382
  617. package/dist/utils/PersistentShell.js.map +0 -7
  618. package/dist/utils/advancedFuzzyMatcher.js +0 -206
  619. package/dist/utils/advancedFuzzyMatcher.js.map +0 -7
  620. package/dist/utils/agentLoader.js +0 -199
  621. package/dist/utils/agentLoader.js.map +0 -7
  622. package/dist/utils/agentStorage.js +0 -59
  623. package/dist/utils/agentStorage.js.map +0 -7
  624. package/dist/utils/array.js +0 -7
  625. package/dist/utils/array.js.map +0 -7
  626. package/dist/utils/ask.js +0 -77
  627. package/dist/utils/ask.js.map +0 -7
  628. package/dist/utils/auth.js +0 -11
  629. package/dist/utils/auth.js.map +0 -7
  630. package/dist/utils/autoCompactCore.js +0 -149
  631. package/dist/utils/autoCompactCore.js.map +0 -7
  632. package/dist/utils/autoUpdater.js.map +0 -7
  633. package/dist/utils/betas.js +0 -21
  634. package/dist/utils/betas.js.map +0 -7
  635. package/dist/utils/browser.js +0 -15
  636. package/dist/utils/browser.js.map +0 -7
  637. package/dist/utils/cleanup.js +0 -54
  638. package/dist/utils/cleanup.js.map +0 -7
  639. package/dist/utils/commands.js +0 -207
  640. package/dist/utils/commands.js.map +0 -7
  641. package/dist/utils/commonUnixCommands.js +0 -687
  642. package/dist/utils/commonUnixCommands.js.map +0 -7
  643. package/dist/utils/config.js.map +0 -7
  644. package/dist/utils/conversationRecovery.js +0 -35
  645. package/dist/utils/conversationRecovery.js.map +0 -7
  646. package/dist/utils/debugLogger.js.map +0 -7
  647. package/dist/utils/diff.js +0 -32
  648. package/dist/utils/diff.js.map +0 -7
  649. package/dist/utils/env.js +0 -44
  650. package/dist/utils/env.js.map +0 -7
  651. package/dist/utils/errors.js +0 -23
  652. package/dist/utils/errors.js.map +0 -7
  653. package/dist/utils/exampleCommands.js +0 -80
  654. package/dist/utils/exampleCommands.js.map +0 -7
  655. package/dist/utils/execFileNoThrow.js +0 -44
  656. package/dist/utils/execFileNoThrow.js.map +0 -7
  657. package/dist/utils/expertChatStorage.js +0 -78
  658. package/dist/utils/expertChatStorage.js.map +0 -7
  659. package/dist/utils/file.js +0 -282
  660. package/dist/utils/file.js.map +0 -7
  661. package/dist/utils/fileRecoveryCore.js +0 -41
  662. package/dist/utils/fileRecoveryCore.js.map +0 -7
  663. package/dist/utils/format.js +0 -41
  664. package/dist/utils/format.js.map +0 -7
  665. package/dist/utils/fuzzyMatcher.js +0 -252
  666. package/dist/utils/fuzzyMatcher.js.map +0 -7
  667. package/dist/utils/generators.js +0 -46
  668. package/dist/utils/generators.js.map +0 -7
  669. package/dist/utils/git.js +0 -83
  670. package/dist/utils/git.js.map +0 -7
  671. package/dist/utils/globalLogger.js +0 -54
  672. package/dist/utils/globalLogger.js.map +0 -7
  673. package/dist/utils/http.js +0 -7
  674. package/dist/utils/http.js.map +0 -7
  675. package/dist/utils/imagePaste.js +0 -29
  676. package/dist/utils/imagePaste.js.map +0 -7
  677. package/dist/utils/json.js +0 -16
  678. package/dist/utils/json.js.map +0 -7
  679. package/dist/utils/log.js +0 -298
  680. package/dist/utils/log.js.map +0 -7
  681. package/dist/utils/markdown.js +0 -187
  682. package/dist/utils/markdown.js.map +0 -7
  683. package/dist/utils/messageContextManager.js +0 -195
  684. package/dist/utils/messageContextManager.js.map +0 -7
  685. package/dist/utils/messages.js +0 -633
  686. package/dist/utils/messages.js.map +0 -7
  687. package/dist/utils/model.js.map +0 -7
  688. package/dist/utils/permissions/filesystem.js +0 -80
  689. package/dist/utils/permissions/filesystem.js.map +0 -7
  690. package/dist/utils/responseState.js +0 -20
  691. package/dist/utils/responseState.js.map +0 -7
  692. package/dist/utils/ripgrep.js +0 -131
  693. package/dist/utils/ripgrep.js.map +0 -7
  694. package/dist/utils/secureFile.js +0 -483
  695. package/dist/utils/secureFile.js.map +0 -7
  696. package/dist/utils/sessionState.js +0 -31
  697. package/dist/utils/sessionState.js.map +0 -7
  698. package/dist/utils/state.js +0 -24
  699. package/dist/utils/state.js.map +0 -7
  700. package/dist/utils/style.js +0 -31
  701. package/dist/utils/style.js.map +0 -7
  702. package/dist/utils/terminal.js +0 -43
  703. package/dist/utils/terminal.js.map +0 -7
  704. package/dist/utils/theme.js.map +0 -7
  705. package/dist/utils/thinking.js +0 -103
  706. package/dist/utils/thinking.js.map +0 -7
  707. package/dist/utils/todoStorage.js +0 -291
  708. package/dist/utils/todoStorage.js.map +0 -7
  709. package/dist/utils/tokens.js +0 -30
  710. package/dist/utils/tokens.js.map +0 -7
  711. package/dist/utils/toolExecutionController.js +0 -109
  712. package/dist/utils/toolExecutionController.js.map +0 -7
  713. package/dist/utils/unaryLogging.js +0 -14
  714. package/dist/utils/unaryLogging.js.map +0 -7
  715. package/dist/utils/user.js +0 -40
  716. package/dist/utils/user.js.map +0 -7
  717. package/dist/utils/validate.js +0 -132
  718. package/dist/utils/validate.js.map +0 -7
  719. /package/dist/{Tool.js.map → REPL-GIU4ZIXM.js.map} +0 -0
  720. /package/dist/{components/CustomSelect/theme.js.map → autoUpdater-DNRMJWFQ.js.map} +0 -0
  721. /package/dist/{types/common.d.js.map → chunk-JC6NCUG5.js.map} +0 -0
  722. /package/dist/{types/conversation.js.map → commands-TWH6PGVG.js.map} +0 -0
  723. /package/dist/{types/logs.js.map → config-6ZMBCL23.js.map} +0 -0
  724. /package/dist/{types/modelCapabilities.js.map → context-JQIOOI4W.js.map} +0 -0
  725. /package/dist/{types/notebook.js.map → costTracker-6SL26FDB.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/messages.tsx"],
4
- "sourcesContent": ["import { randomUUID, UUID } from 'crypto'\nimport { Box } from 'ink'\nimport {\n AssistantMessage,\n Message,\n ProgressMessage,\n UserMessage,\n} from '../query.js'\nimport { getCommand, hasCommand } from '../commands'\nimport { MalformedCommandError } from './errors'\nimport { logError } from './log'\nimport { resolve } from 'path'\nimport { last, memoize } from 'lodash-es'\nimport { logEvent } from '../services/statsig'\nimport type { SetToolJSXFn, Tool, ToolUseContext } from '../Tool'\nimport { lastX } from '../utils/generators'\nimport { NO_CONTENT_MESSAGE } from '../services/claude'\nimport {\n ImageBlockParam,\n TextBlockParam,\n ToolResultBlockParam,\n ToolUseBlockParam,\n Message as APIMessage,\n ContentBlockParam,\n ContentBlock,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport { setCwd } from './state'\nimport { getCwd } from './state'\nimport chalk from 'chalk'\nimport * as React from 'react'\nimport { UserBashInputMessage } from '../components/messages/UserBashInputMessage'\nimport { Spinner } from '../components/Spinner'\nimport { BashTool } from '../tools/BashTool/BashTool'\nimport { ToolUseBlock } from '@anthropic-ai/sdk/resources/index.mjs'\n\n// NOTE: Dynamic content processing for custom commands has been moved to\n// src/services/customCommands.ts for better organization and reusability.\n// The functions executeBashCommands and resolveFileReferences are no longer\n// duplicated here but are imported when needed for custom command processing.\n\nexport const INTERRUPT_MESSAGE = '[Request interrupted by user]'\nexport const INTERRUPT_MESSAGE_FOR_TOOL_USE =\n '[Request interrupted by user for tool use]'\nexport const CANCEL_MESSAGE =\n \"The user doesn't want to take this action right now. STOP what you are doing and wait for the user to tell you how to proceed.\"\nexport const REJECT_MESSAGE =\n \"The user doesn't want to proceed with this tool use. The tool use was rejected (eg. if it was a file edit, the new_string was NOT written to the file). STOP what you are doing and wait for the user to tell you how to proceed.\"\nexport const NO_RESPONSE_REQUESTED = 'No response requested.'\n\nexport const SYNTHETIC_ASSISTANT_MESSAGES = new Set([\n INTERRUPT_MESSAGE,\n INTERRUPT_MESSAGE_FOR_TOOL_USE,\n CANCEL_MESSAGE,\n REJECT_MESSAGE,\n NO_RESPONSE_REQUESTED,\n])\n\nfunction baseCreateAssistantMessage(\n content: ContentBlock[],\n extra?: Partial<AssistantMessage>,\n): AssistantMessage {\n return {\n type: 'assistant',\n costUSD: 0,\n durationMs: 0,\n uuid: randomUUID(),\n message: {\n id: randomUUID(),\n model: '<synthetic>',\n role: 'assistant',\n stop_reason: 'stop_sequence',\n stop_sequence: '',\n type: 'message',\n usage: {\n input_tokens: 0,\n output_tokens: 0,\n cache_creation_input_tokens: 0,\n cache_read_input_tokens: 0,\n },\n content,\n },\n ...extra,\n }\n}\n\nexport function createAssistantMessage(content: string): AssistantMessage {\n return baseCreateAssistantMessage([\n {\n type: 'text' as const,\n text: content === '' ? NO_CONTENT_MESSAGE : content,\n citations: [],\n },\n ])\n}\n\nexport function createAssistantAPIErrorMessage(\n content: string,\n): AssistantMessage {\n return baseCreateAssistantMessage(\n [\n {\n type: 'text' as const,\n text: content === '' ? NO_CONTENT_MESSAGE : content,\n citations: [],\n },\n ],\n { isApiErrorMessage: true },\n )\n}\n\nexport type FullToolUseResult = {\n data: unknown // Matches tool's `Output` type\n resultForAssistant: ToolResultBlockParam['content']\n}\n\nexport function createUserMessage(\n content: string | ContentBlockParam[],\n toolUseResult?: FullToolUseResult,\n): UserMessage {\n const m: UserMessage = {\n type: 'user',\n message: {\n role: 'user',\n content,\n },\n uuid: randomUUID(),\n toolUseResult,\n }\n return m\n}\n\nexport function createProgressMessage(\n toolUseID: string,\n siblingToolUseIDs: Set<string>,\n content: AssistantMessage,\n normalizedMessages: NormalizedMessage[],\n tools: Tool[],\n): ProgressMessage {\n return {\n type: 'progress',\n content,\n normalizedMessages,\n siblingToolUseIDs,\n tools,\n toolUseID,\n uuid: randomUUID(),\n }\n}\n\nexport function createToolResultStopMessage(\n toolUseID: string,\n): ToolResultBlockParam {\n return {\n type: 'tool_result',\n content: CANCEL_MESSAGE,\n is_error: true,\n tool_use_id: toolUseID,\n }\n}\n\nexport async function processUserInput(\n input: string,\n mode: 'bash' | 'prompt' | 'koding',\n setToolJSX: SetToolJSXFn,\n context: ToolUseContext & {\n setForkConvoWithMessagesOnTheNextRender: (\n forkConvoWithMessages: Message[],\n ) => void\n options?: {\n isKodingRequest?: boolean\n kodingContext?: string\n }\n },\n pastedImage: string | null,\n): Promise<Message[]> {\n // Bash commands\n if (mode === 'bash') {\n logEvent('tengu_input_bash', {})\n\n const userMessage = createUserMessage(`<bash-input>${input}</bash-input>`)\n\n // Special case: cd\n if (input.startsWith('cd ')) {\n const oldCwd = getCwd()\n const newCwd = resolve(oldCwd, input.slice(3))\n try {\n await setCwd(newCwd)\n return [\n userMessage,\n createAssistantMessage(\n `<bash-stdout>Changed directory to ${chalk.bold(`${newCwd}/`)}</bash-stdout>`,\n ),\n ]\n } catch (e) {\n logError(e)\n return [\n userMessage,\n createAssistantMessage(\n `<bash-stderr>cwd error: ${e instanceof Error ? e.message : String(e)}</bash-stderr>`,\n ),\n ]\n }\n }\n\n // All other bash commands\n setToolJSX({\n jsx: (\n <Box flexDirection=\"column\" marginTop={1}>\n <UserBashInputMessage\n addMargin={false}\n param={{ text: `<bash-input>${input}</bash-input>`, type: 'text' }}\n />\n <Spinner />\n </Box>\n ),\n shouldHidePromptInput: false,\n })\n try {\n const validationResult = await BashTool.validateInput({\n command: input,\n })\n if (!validationResult.result) {\n return [userMessage, createAssistantMessage(validationResult.message)]\n }\n const { data } = await lastX(BashTool.call({ command: input }, context))\n return [\n userMessage,\n createAssistantMessage(\n `<bash-stdout>${data.stdout}</bash-stdout><bash-stderr>${data.stderr}</bash-stderr>`,\n ),\n ]\n } catch (e) {\n return [\n userMessage,\n createAssistantMessage(\n `<bash-stderr>Command failed: ${e instanceof Error ? e.message : String(e)}</bash-stderr>`,\n ),\n ]\n } finally {\n setToolJSX(null)\n }\n }\n // Koding mode - special wrapper for display\n else if (mode === 'koding') {\n logEvent('tengu_input_koding', {})\n\n const userMessage = createUserMessage(\n `<koding-input>${input}</koding-input>`,\n )\n // Add the Koding flag to the message\n userMessage.options = {\n ...userMessage.options,\n isKodingRequest: true,\n }\n\n // Rest of koding processing is handled separately to capture assistant response\n return [userMessage]\n }\n\n // Slash commands\n if (input.startsWith('/')) {\n const words = input.slice(1).split(' ')\n let commandName = words[0]\n if (words.length > 1 && words[1] === '(MCP)') {\n commandName = commandName + ' (MCP)'\n }\n if (!commandName) {\n logEvent('tengu_input_slash_missing', { input })\n return [\n createAssistantMessage('Commands are in the form `/command [args]`'),\n ]\n }\n\n // Check if it's a real command before processing\n if (!hasCommand(commandName, context.options.commands)) {\n // If not a real command, treat it as a regular user input\n logEvent('tengu_input_prompt', {})\n return [createUserMessage(input)]\n }\n\n const args = input.slice(commandName.length + 2)\n const newMessages = await getMessagesForSlashCommand(\n commandName,\n args,\n setToolJSX,\n context,\n )\n\n // Local JSX commands\n if (newMessages.length === 0) {\n logEvent('tengu_input_command', { input })\n return []\n }\n\n // For invalid commands, preserve both the user message and error\n if (\n newMessages.length === 2 &&\n newMessages[0]!.type === 'user' &&\n newMessages[1]!.type === 'assistant' &&\n typeof newMessages[1]!.message.content === 'string' &&\n newMessages[1]!.message.content.startsWith('Unknown command:')\n ) {\n logEvent('tengu_input_slash_invalid', { input })\n return newMessages\n }\n\n // User-Assistant pair (eg. local commands)\n if (newMessages.length === 2) {\n logEvent('tengu_input_command', { input })\n return newMessages\n }\n\n // A valid command\n logEvent('tengu_input_command', { input })\n return newMessages\n }\n\n // Regular user prompt\n logEvent('tengu_input_prompt', {})\n\n // Check if this is a Koding request that needs special handling\n const isKodingRequest = context.options?.isKodingRequest === true\n const kodingContextInfo = context.options?.kodingContext\n\n // Create base message\n let userMessage: UserMessage\n\n if (pastedImage) {\n userMessage = createUserMessage([\n {\n type: 'image',\n source: {\n type: 'base64',\n media_type: 'image/png',\n data: pastedImage,\n },\n },\n {\n type: 'text',\n text:\n isKodingRequest && kodingContextInfo\n ? `${kodingContextInfo}\\n\\n${input}`\n : input,\n },\n ])\n } else {\n let processedInput =\n isKodingRequest && kodingContextInfo\n ? `${kodingContextInfo}\\n\\n${input}`\n : input\n\n // Process dynamic content for custom commands with ! and @ prefixes\n // This uses the same processing functions as custom commands to maintain consistency\n if (input.includes('!`') || input.includes('@')) {\n try {\n // Import functions from customCommands service to avoid code duplication\n const { executeBashCommands } = await import(\n '../services/customCommands'\n )\n\n // Execute bash commands if present\n if (input.includes('!`')) {\n // Note: This function is not exported from customCommands.ts, so we need to expose it\n // For now, we'll keep the local implementation until we refactor the service\n processedInput = await executeBashCommands(processedInput)\n }\n\n // Process mentions for system reminder integration\n // Note: We don't call resolveFileReferences here anymore - \n // @file mentions should trigger Read tool usage via reminders, not embed content\n if (input.includes('@')) {\n const { processMentions } = await import('../services/mentionProcessor')\n await processMentions(input)\n }\n } catch (error) {\n console.warn('Dynamic content processing failed:', error)\n // Continue with original input if processing fails\n }\n }\n\n userMessage = createUserMessage(processedInput)\n }\n\n // Add the Koding flag to the message if needed\n if (isKodingRequest) {\n userMessage.options = {\n ...userMessage.options,\n isKodingRequest: true,\n }\n }\n\n return [userMessage]\n}\n\nasync function getMessagesForSlashCommand(\n commandName: string,\n args: string,\n setToolJSX: SetToolJSXFn,\n context: ToolUseContext & {\n setForkConvoWithMessagesOnTheNextRender: (\n forkConvoWithMessages: Message[],\n ) => void\n },\n): Promise<Message[]> {\n try {\n const command = getCommand(commandName, context.options.commands)\n switch (command.type) {\n case 'local-jsx': {\n return new Promise(resolve => {\n command\n .call(r => {\n setToolJSX(null)\n resolve([\n createUserMessage(`<command-name>${command.userFacingName()}</command-name>\n <command-message>${command.userFacingName()}</command-message>\n <command-args>${args}</command-args>`),\n r\n ? createAssistantMessage(r)\n : createAssistantMessage(NO_RESPONSE_REQUESTED),\n ])\n }, context)\n .then(jsx => {\n setToolJSX({\n jsx,\n shouldHidePromptInput: true,\n })\n })\n })\n }\n case 'local': {\n const userMessage =\n createUserMessage(`<command-name>${command.userFacingName()}</command-name>\n <command-message>${command.userFacingName()}</command-message>\n <command-args>${args}</command-args>`)\n\n try {\n // Use the context's abortController for local commands\n const result = await command.call(args, {\n ...context,\n options: {\n commands: context.options.commands || [],\n tools: context.options.tools || [],\n slowAndCapableModel: context.options.slowAndCapableModel || 'main'\n }\n })\n\n return [\n userMessage,\n createAssistantMessage(\n `<local-command-stdout>${result}</local-command-stdout>`,\n ),\n ]\n } catch (e) {\n logError(e)\n return [\n userMessage,\n createAssistantMessage(\n `<local-command-stderr>${String(e)}</local-command-stderr>`,\n ),\n ]\n }\n }\n case 'prompt': {\n // For custom commands, process them naturally instead of wrapping in command-contents\n const prompt = await command.getPromptForCommand(args)\n return prompt.map(msg => {\n // Create a normal user message from the custom command content\n const userMessage = createUserMessage(\n typeof msg.content === 'string'\n ? msg.content\n : msg.content\n .map(block => (block.type === 'text' ? block.text : ''))\n .join('\\n'),\n )\n\n // Add metadata for tracking but don't wrap in special tags\n userMessage.options = {\n ...userMessage.options,\n isCustomCommand: true,\n commandName: command.userFacingName(),\n commandArgs: args,\n }\n\n return userMessage\n })\n }\n }\n } catch (e) {\n if (e instanceof MalformedCommandError) {\n return [createAssistantMessage(e.message)]\n }\n throw e\n }\n}\n\nexport function extractTagFromMessage(\n message: Message,\n tagName: string,\n): string | null {\n if (message.type === 'progress') {\n return null\n }\n if (typeof message.message.content !== 'string') {\n return null\n }\n return extractTag(message.message.content, tagName)\n}\n\nexport function extractTag(html: string, tagName: string): string | null {\n if (!html.trim() || !tagName.trim()) {\n return null\n }\n\n // Escape special characters in the tag name\n const escapedTag = tagName.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n\n // Create regex pattern that handles:\n // 1. Self-closing tags\n // 2. Tags with attributes\n // 3. Nested tags of the same type\n // 4. Multiline content\n const pattern = new RegExp(\n `<${escapedTag}(?:\\\\s+[^>]*)?>` + // Opening tag with optional attributes\n '([\\\\s\\\\S]*?)' + // Content (non-greedy match)\n `<\\\\/${escapedTag}>`, // Closing tag\n 'gi',\n )\n\n let match\n let depth = 0\n let lastIndex = 0\n const openingTag = new RegExp(`<${escapedTag}(?:\\\\s+[^>]*?)?>`, 'gi')\n const closingTag = new RegExp(`<\\\\/${escapedTag}>`, 'gi')\n\n while ((match = pattern.exec(html)) !== null) {\n // Check for nested tags\n const content = match[1]\n const beforeMatch = html.slice(lastIndex, match.index)\n\n // Reset depth counter\n depth = 0\n\n // Count opening tags before this match\n openingTag.lastIndex = 0\n while (openingTag.exec(beforeMatch) !== null) {\n depth++\n }\n\n // Count closing tags before this match\n closingTag.lastIndex = 0\n while (closingTag.exec(beforeMatch) !== null) {\n depth--\n }\n\n // Only include content if we're at the correct nesting level\n if (depth === 0 && content) {\n return content\n }\n\n lastIndex = match.index + match[0].length\n }\n\n return null\n}\n\nexport function isNotEmptyMessage(message: Message): boolean {\n if (message.type === 'progress') {\n return true\n }\n\n if (typeof message.message.content === 'string') {\n return message.message.content.trim().length > 0\n }\n\n if (message.message.content.length === 0) {\n return false\n }\n\n // Skip multi-block messages for now\n if (message.message.content.length > 1) {\n return true\n }\n\n if (message.message.content[0]!.type !== 'text') {\n return true\n }\n\n return (\n message.message.content[0]!.text.trim().length > 0 &&\n message.message.content[0]!.text !== NO_CONTENT_MESSAGE &&\n message.message.content[0]!.text !== INTERRUPT_MESSAGE_FOR_TOOL_USE\n )\n}\n\n// TODO: replace this with plain UserMessage if/when PR #405 lands\ntype NormalizedUserMessage = {\n message: {\n content: [\n | TextBlockParam\n | ImageBlockParam\n | ToolUseBlockParam\n | ToolResultBlockParam,\n ]\n role: 'user'\n }\n type: 'user'\n uuid: UUID\n}\n\nexport type NormalizedMessage =\n | NormalizedUserMessage\n | AssistantMessage\n | ProgressMessage\n\n// Split messages, so each content block gets its own message\nexport function normalizeMessages(messages: Message[]): NormalizedMessage[] {\n return messages.flatMap(message => {\n if (message.type === 'progress') {\n return [message] as NormalizedMessage[]\n }\n if (typeof message.message.content === 'string') {\n return [message] as NormalizedMessage[]\n }\n return message.message.content.map(_ => {\n switch (message.type) {\n case 'assistant':\n return {\n type: 'assistant',\n uuid: randomUUID(),\n message: {\n ...message.message,\n content: [_],\n },\n costUSD:\n (message as AssistantMessage).costUSD /\n message.message.content.length,\n durationMs: (message as AssistantMessage).durationMs,\n } as NormalizedMessage\n case 'user':\n // It seems like the line below was a no-op before, but I'm not sure.\n // To check, we could throw an error if any of the following are true:\n // - message `role` does isn't `user` -- this possibility is allowed by MCP tools,\n // though isn't supposed to happen in practice (we should fix this)\n // - message `content` is not an array -- this one is more concerning because it's\n // not allowed by the `NormalizedUserMessage` type, but if it's happening that was\n // probably a bug before.\n // Maybe I'm missing something? -(ab)\n // return createUserMessage([_]) as NormalizedMessage\n return message as NormalizedUserMessage\n }\n })\n })\n}\n\ntype ToolUseRequestMessage = AssistantMessage & {\n message: { content: ToolUseBlock[] }\n}\n\nfunction isToolUseRequestMessage(\n message: Message,\n): message is ToolUseRequestMessage {\n return (\n message.type === 'assistant' &&\n 'costUSD' in message &&\n // Note: stop_reason === 'tool_use' is unreliable -- it's not always set correctly\n message.message.content.some(_ => _.type === 'tool_use')\n )\n}\n\n// Re-order, to move result messages to be after their tool use messages\nexport function reorderMessages(\n messages: NormalizedMessage[],\n): NormalizedMessage[] {\n const ms: NormalizedMessage[] = []\n const toolUseMessages: ToolUseRequestMessage[] = []\n\n for (const message of messages) {\n // track tool use messages we've seen\n if (isToolUseRequestMessage(message)) {\n toolUseMessages.push(message)\n }\n\n // if it's a tool progress message...\n if (message.type === 'progress') {\n // replace any existing progress messages with this one\n const existingProgressMessage = ms.find(\n _ => _.type === 'progress' && _.toolUseID === message.toolUseID,\n )\n if (existingProgressMessage) {\n ms[ms.indexOf(existingProgressMessage)] = message\n continue\n }\n // otherwise, insert it after its tool use\n const toolUseMessage = toolUseMessages.find(\n _ => _.message.content[0]?.id === message.toolUseID,\n )\n if (toolUseMessage) {\n ms.splice(ms.indexOf(toolUseMessage) + 1, 0, message)\n continue\n }\n }\n\n // if it's a tool result, insert it after its tool use and progress messages\n if (\n message.type === 'user' &&\n Array.isArray(message.message.content) &&\n message.message.content[0]?.type === 'tool_result'\n ) {\n const toolUseID = (message.message.content[0] as ToolResultBlockParam)\n ?.tool_use_id\n\n // First check for progress messages\n const lastProgressMessage = ms.find(\n _ => _.type === 'progress' && _.toolUseID === toolUseID,\n )\n if (lastProgressMessage) {\n ms.splice(ms.indexOf(lastProgressMessage) + 1, 0, message)\n continue\n }\n\n // If no progress messages, check for tool use messages\n const toolUseMessage = toolUseMessages.find(\n _ => _.message.content[0]?.id === toolUseID,\n )\n if (toolUseMessage) {\n ms.splice(ms.indexOf(toolUseMessage) + 1, 0, message)\n continue\n }\n }\n\n // otherwise, just add it to the list\n else {\n ms.push(message)\n }\n }\n\n return ms\n}\n\nconst getToolResultIDs = memoize(\n (normalizedMessages: NormalizedMessage[]): { [toolUseID: string]: boolean } =>\n Object.fromEntries(\n normalizedMessages.flatMap(_ =>\n _.type === 'user' && _.message.content[0]?.type === 'tool_result'\n ? [\n [\n _.message.content[0]!.tool_use_id,\n _.message.content[0]!.is_error ?? false,\n ],\n ]\n : ([] as [string, boolean][]),\n ),\n ),\n)\n\nexport function getUnresolvedToolUseIDs(\n normalizedMessages: NormalizedMessage[],\n): Set<string> {\n const toolResults = getToolResultIDs(normalizedMessages)\n return new Set(\n normalizedMessages\n .filter(\n (\n _,\n ): _ is AssistantMessage & {\n message: { content: [ToolUseBlockParam] }\n } =>\n _.type === 'assistant' &&\n Array.isArray(_.message.content) &&\n _.message.content[0]?.type === 'tool_use' &&\n !(_.message.content[0]?.id in toolResults),\n )\n .map(_ => _.message.content[0].id),\n )\n}\n\n/**\n * Tool uses are in flight if either:\n * 1. They have a corresponding progress message and no result message\n * 2. They are the first unresoved tool use\n *\n * TODO: Find a way to harden this logic to make it more explicit\n */\nexport function getInProgressToolUseIDs(\n normalizedMessages: NormalizedMessage[],\n): Set<string> {\n const unresolvedToolUseIDs = getUnresolvedToolUseIDs(normalizedMessages)\n const toolUseIDsThatHaveProgressMessages = new Set(\n normalizedMessages.filter(_ => _.type === 'progress').map(_ => _.toolUseID),\n )\n return new Set(\n (\n normalizedMessages.filter(_ => {\n if (_.type !== 'assistant') {\n return false\n }\n if (_.message.content[0]?.type !== 'tool_use') {\n return false\n }\n const toolUseID = _.message.content[0].id\n if (toolUseID === unresolvedToolUseIDs.values().next().value) {\n return true\n }\n\n if (\n toolUseIDsThatHaveProgressMessages.has(toolUseID) &&\n unresolvedToolUseIDs.has(toolUseID)\n ) {\n return true\n }\n\n return false\n }) as AssistantMessage[]\n ).map(_ => (_.message.content[0]! as ToolUseBlockParam).id),\n )\n}\n\nexport function getErroredToolUseMessages(\n normalizedMessages: NormalizedMessage[],\n): AssistantMessage[] {\n const toolResults = getToolResultIDs(normalizedMessages)\n return normalizedMessages.filter(\n _ =>\n _.type === 'assistant' &&\n Array.isArray(_.message.content) &&\n _.message.content[0]?.type === 'tool_use' &&\n _.message.content[0]?.id in toolResults &&\n toolResults[_.message.content[0]?.id],\n ) as AssistantMessage[]\n}\n\nexport function normalizeMessagesForAPI(\n messages: Message[],\n): (UserMessage | AssistantMessage)[] {\n const result: (UserMessage | AssistantMessage)[] = []\n messages\n .filter(_ => _.type !== 'progress')\n .forEach(message => {\n switch (message.type) {\n case 'user': {\n // If the current message is not a tool result, add it to the result\n if (\n !Array.isArray(message.message.content) ||\n message.message.content[0]?.type !== 'tool_result'\n ) {\n result.push(message)\n return\n }\n\n // If the last message is not a tool result, add it to the result\n const lastMessage = last(result)\n if (\n !lastMessage ||\n lastMessage?.type === 'assistant' ||\n !Array.isArray(lastMessage.message.content) ||\n lastMessage.message.content[0]?.type !== 'tool_result'\n ) {\n result.push(message)\n return\n }\n\n // Otherwise, merge the current message with the last message\n result[result.indexOf(lastMessage)] = {\n ...lastMessage,\n message: {\n ...lastMessage.message,\n content: [\n ...lastMessage.message.content,\n ...message.message.content,\n ],\n },\n }\n return\n }\n case 'assistant':\n result.push(message)\n return\n }\n })\n return result\n}\n\n// Sometimes the API returns empty messages (eg. \"\\n\\n\"). We need to filter these out,\n// otherwise they will give an API error when we send them to the API next time we call query().\nexport function normalizeContentFromAPI(\n content: APIMessage['content'],\n): APIMessage['content'] {\n const filteredContent = content.filter(\n _ => _.type !== 'text' || _.text.trim().length > 0,\n )\n\n if (filteredContent.length === 0) {\n return [{ type: 'text', text: NO_CONTENT_MESSAGE, citations: [] }]\n }\n\n return filteredContent\n}\n\nexport function isEmptyMessageText(text: string): boolean {\n return (\n stripSystemMessages(text).trim() === '' ||\n text.trim() === NO_CONTENT_MESSAGE\n )\n}\nconst STRIPPED_TAGS = [\n 'commit_analysis',\n 'context',\n 'function_analysis',\n 'pr_analysis',\n]\n\nexport function stripSystemMessages(content: string): string {\n const regex = new RegExp(`<(${STRIPPED_TAGS.join('|')})>.*?</\\\\1>\\n?`, 'gs')\n return content.replace(regex, '').trim()\n}\n\nexport function getToolUseID(message: NormalizedMessage): string | null {\n switch (message.type) {\n case 'assistant':\n if (message.message.content[0]?.type !== 'tool_use') {\n return null\n }\n return message.message.content[0].id\n case 'user':\n if (message.message.content[0]?.type !== 'tool_result') {\n return null\n }\n return message.message.content[0].tool_use_id\n case 'progress':\n return message.toolUseID\n }\n}\n\nexport function getLastAssistantMessageId(\n messages: Message[],\n): string | undefined {\n // Iterate from the end of the array to find the last assistant message\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i]\n if (message && message.type === 'assistant') {\n return message.message.id\n }\n }\n return undefined\n}\n"],
5
- "mappings": "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",
6
- "names": ["userMessage", "resolve"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/model.ts"],
4
- "sourcesContent": ["import { memoize } from 'lodash-es'\nimport { getDynamicConfig, getExperimentValue } from '../services/statsig'\nimport { logError } from './log'\nimport {\n getGlobalConfig,\n ModelProfile,\n ModelPointerType,\n saveGlobalConfig,\n} from './config'\n\nexport const USE_BEDROCK = !!process.env.CLAUDE_CODE_USE_BEDROCK\nexport const USE_VERTEX = !!process.env.CLAUDE_CODE_USE_VERTEX\n\nexport interface ModelConfig {\n bedrock: string\n vertex: string\n firstParty: string\n}\n\nconst DEFAULT_MODEL_CONFIG: ModelConfig = {\n bedrock: 'us.anthropic.claude-3-7-sonnet-20250219-v1:0',\n vertex: 'claude-3-7-sonnet@20250219',\n firstParty: 'claude-sonnet-4-20250514',\n}\n\n/**\n * Helper to get the model config from statsig or defaults\n * Relies on the built-in caching from StatsigClient\n */\nasync function getModelConfig(): Promise<ModelConfig> {\n try {\n return await getDynamicConfig<ModelConfig>(\n 'tengu-capable-model-config',\n DEFAULT_MODEL_CONFIG,\n )\n } catch (error) {\n logError(error)\n return DEFAULT_MODEL_CONFIG\n }\n}\n\nexport const getSlowAndCapableModel = memoize(async (): Promise<string> => {\n const config = await getGlobalConfig()\n\n // Use ModelManager for proper model resolution\n const modelManager = new ModelManager(config)\n const model = modelManager.getMainAgentModel()\n\n if (model) {\n return model\n }\n\n // Final fallback to default model\n const modelConfig = await getModelConfig()\n if (USE_BEDROCK) return modelConfig.bedrock\n if (USE_VERTEX) return modelConfig.vertex\n return modelConfig.firstParty\n})\n\nexport async function isDefaultSlowAndCapableModel(): Promise<boolean> {\n return (\n !process.env.ANTHROPIC_MODEL ||\n process.env.ANTHROPIC_MODEL === (await getSlowAndCapableModel())\n )\n}\n\n/**\n * Get the region for a specific Vertex model\n * Checks for hardcoded model-specific environment variables first,\n * then falls back to CLOUD_ML_REGION env var or default region\n */\nexport function getVertexRegionForModel(\n model: string | undefined,\n): string | undefined {\n if (model?.startsWith('claude-3-5-haiku')) {\n return process.env.VERTEX_REGION_CLAUDE_3_5_HAIKU\n } else if (model?.startsWith('claude-3-5-sonnet')) {\n return process.env.VERTEX_REGION_CLAUDE_3_5_SONNET\n } else if (model?.startsWith('claude-3-7-sonnet')) {\n return process.env.VERTEX_REGION_CLAUDE_3_7_SONNET\n }\n}\n\n/**\n * Comprehensive ModelManager class for centralized model selection and management.\n * Provides a clean interface for model selection across the application.\n */\nexport class ModelManager {\n private config: any // Using any to handle legacy properties\n private modelProfiles: ModelProfile[]\n\n constructor(config: any) {\n this.config = config\n this.modelProfiles = config.modelProfiles || []\n }\n\n /**\n * Get the current terminal model (for interactive CLI sessions)\n */\n getCurrentModel(): string | null {\n // Use main pointer from new ModelProfile system\n const mainModelName = this.config.modelPointers?.main\n if (mainModelName) {\n const profile = this.findModelProfile(mainModelName)\n if (profile && profile.isActive) {\n return profile.modelName\n }\n }\n\n // Fallback to main agent model\n return this.getMainAgentModel()\n }\n\n /**\n * Get the main agent default model (for non-terminal mode and MCP calls)\n */\n getMainAgentModel(): string | null {\n // Use main pointer from new ModelProfile system\n const mainModelName = this.config.modelPointers?.main\n if (mainModelName) {\n const profile = this.findModelProfile(mainModelName)\n if (profile && profile.isActive) {\n return profile.modelName\n }\n }\n\n // Fallback to first active profile\n const activeProfile = this.modelProfiles.find(p => p.isActive)\n if (activeProfile) {\n return activeProfile.modelName\n }\n\n return null\n }\n\n /**\n * Get the task tool default model (for Task tool sub-agents)\n */\n getTaskToolModel(): string | null {\n // Use task pointer from new ModelProfile system\n const taskModelName = this.config.modelPointers?.task\n if (taskModelName) {\n const profile = this.findModelProfile(taskModelName)\n if (profile && profile.isActive) {\n return profile.modelName\n }\n }\n\n // Fallback to main agent model\n return this.getMainAgentModel()\n }\n\n /**\n * Switch to the next available model with simple context overflow handling\n * If target model can't handle current context, shows warning and reverts after delay\n *\n * @param currentContextTokens - Current conversation token count for validation\n * @returns Object with model name and context status information\n */\n switchToNextModelWithContextCheck(currentContextTokens: number = 0): {\n success: boolean\n modelName: string | null\n previousModelName: string | null\n contextOverflow: boolean\n usagePercentage: number\n } {\n // Use ALL configured models, not just active ones\n const allProfiles = this.getAllConfiguredModels()\n if (allProfiles.length === 0) {\n return {\n success: false,\n modelName: null,\n previousModelName: null,\n contextOverflow: false,\n usagePercentage: 0,\n }\n }\n\n // Sort by createdAt for consistent cycling order (don't use lastUsed)\n // Using lastUsed causes the order to change each time, preventing proper cycling\n allProfiles.sort((a, b) => {\n return a.createdAt - b.createdAt // Oldest first for consistent order\n })\n\n const currentMainModelName = this.config.modelPointers?.main\n const currentModel = currentMainModelName\n ? this.findModelProfile(currentMainModelName)\n : null\n const previousModelName = currentModel?.name || null\n\n if (!currentMainModelName) {\n // No current main model, select first available (activate if needed)\n const firstModel = allProfiles[0]\n if (!firstModel.isActive) {\n firstModel.isActive = true\n }\n this.setPointer('main', firstModel.modelName)\n this.updateLastUsed(firstModel.modelName)\n\n const analysis = this.analyzeContextCompatibility(\n firstModel,\n currentContextTokens,\n )\n return {\n success: true,\n modelName: firstModel.name,\n previousModelName: null,\n contextOverflow: !analysis.compatible,\n usagePercentage: analysis.usagePercentage,\n }\n }\n\n // Find current model index in ALL models\n const currentIndex = allProfiles.findIndex(\n p => p.modelName === currentMainModelName,\n )\n if (currentIndex === -1) {\n // Current model not found, select first available (activate if needed)\n const firstModel = allProfiles[0]\n if (!firstModel.isActive) {\n firstModel.isActive = true\n }\n this.setPointer('main', firstModel.modelName)\n this.updateLastUsed(firstModel.modelName)\n\n const analysis = this.analyzeContextCompatibility(\n firstModel,\n currentContextTokens,\n )\n return {\n success: true,\n modelName: firstModel.name,\n previousModelName,\n contextOverflow: !analysis.compatible,\n usagePercentage: analysis.usagePercentage,\n }\n }\n\n // Check if only one model is available\n if (allProfiles.length === 1) {\n return {\n success: false,\n modelName: null,\n previousModelName,\n contextOverflow: false,\n usagePercentage: 0,\n }\n }\n\n // Get next model in cycle (from ALL models)\n const nextIndex = (currentIndex + 1) % allProfiles.length\n const nextModel = allProfiles[nextIndex]\n \n // Activate the model if it's not already active\n const wasInactive = !nextModel.isActive\n if (!nextModel.isActive) {\n nextModel.isActive = true\n }\n\n // Analyze context compatibility for next model\n const analysis = this.analyzeContextCompatibility(\n nextModel,\n currentContextTokens,\n )\n\n // Always switch to next model, but return context status\n this.setPointer('main', nextModel.modelName)\n this.updateLastUsed(nextModel.modelName)\n \n // Save configuration if we activated a new model\n if (wasInactive) {\n this.saveConfig()\n }\n\n return {\n success: true,\n modelName: nextModel.name,\n previousModelName,\n contextOverflow: !analysis.compatible,\n usagePercentage: analysis.usagePercentage,\n }\n }\n\n /**\n * Simple model switching for UI components (compatible interface)\n * @param currentContextTokens - Current conversation token count for validation\n * @returns Compatible interface for PromptInput component\n */\n switchToNextModel(currentContextTokens: number = 0): {\n success: boolean\n modelName: string | null\n blocked?: boolean\n message?: string\n } {\n // Use the enhanced context check method for consistency\n const result = this.switchToNextModelWithContextCheck(currentContextTokens)\n \n if (!result.success) {\n const allModels = this.getAllConfiguredModels()\n if (allModels.length === 0) {\n return {\n success: false,\n modelName: null,\n blocked: false,\n message: '\u274C No models configured. Use /model to add models.',\n }\n } else if (allModels.length === 1) {\n return {\n success: false,\n modelName: null,\n blocked: false,\n message: `\u26A0\uFE0F Only one model configured (${allModels[0].modelName}). Use /model to add more models for switching.`,\n }\n }\n }\n \n // Convert the detailed result to the simple interface\n const currentModel = this.findModelProfile(this.config.modelPointers?.main)\n const allModels = this.getAllConfiguredModels()\n const currentIndex = allModels.findIndex(m => m.modelName === currentModel?.modelName)\n const totalModels = allModels.length\n \n return {\n success: result.success,\n modelName: result.modelName,\n blocked: result.contextOverflow,\n message: result.success\n ? result.contextOverflow\n ? `\u26A0\uFE0F Context usage: ${result.usagePercentage.toFixed(1)}% - ${result.modelName}`\n : `\u2705 Switched to ${result.modelName} (${currentIndex + 1}/${totalModels})${currentModel?.provider ? ` [${currentModel.provider}]` : ''}`\n : `\u274C Failed to switch models`,\n }\n }\n\n /**\n * Revert to previous model (used when context overflow requires rollback)\n */\n revertToPreviousModel(previousModelName: string): boolean {\n const previousModel = this.modelProfiles.find(\n p => p.name === previousModelName && p.isActive,\n )\n if (!previousModel) {\n return false\n }\n\n this.setPointer('main', previousModel.modelName)\n this.updateLastUsed(previousModel.modelName)\n return true\n }\n\n /**\n * Enhanced context validation with different severity levels\n */\n analyzeContextCompatibility(\n model: ModelProfile,\n contextTokens: number,\n ): {\n compatible: boolean\n severity: 'safe' | 'warning' | 'critical'\n usagePercentage: number\n recommendation: string\n } {\n const usableContext = Math.floor(model.contextLength * 0.8) // Reserve 20% for output\n const usagePercentage = (contextTokens / usableContext) * 100\n\n if (usagePercentage <= 70) {\n return {\n compatible: true,\n severity: 'safe',\n usagePercentage,\n recommendation: 'Full context preserved',\n }\n } else if (usagePercentage <= 90) {\n return {\n compatible: true,\n severity: 'warning',\n usagePercentage,\n recommendation: 'Context usage high, consider compression',\n }\n } else {\n return {\n compatible: false,\n severity: 'critical',\n usagePercentage,\n recommendation: 'Auto-compression or message truncation required',\n }\n }\n }\n\n /**\n * Switch to next model with enhanced context analysis\n */\n switchToNextModelWithAnalysis(currentContextTokens: number = 0): {\n modelName: string | null\n contextAnalysis: ReturnType<typeof this.analyzeContextCompatibility> | null\n requiresCompression: boolean\n estimatedTokensAfterSwitch: number\n } {\n const result = this.switchToNextModel(currentContextTokens)\n\n if (!result.success || !result.modelName) {\n return {\n modelName: null,\n contextAnalysis: null,\n requiresCompression: false,\n estimatedTokensAfterSwitch: 0,\n }\n }\n\n const newModel = this.getModel('main')\n if (!newModel) {\n return {\n modelName: result.modelName,\n contextAnalysis: null,\n requiresCompression: false,\n estimatedTokensAfterSwitch: currentContextTokens,\n }\n }\n\n const analysis = this.analyzeContextCompatibility(\n newModel,\n currentContextTokens,\n )\n\n return {\n modelName: result.modelName,\n contextAnalysis: analysis,\n requiresCompression: analysis.severity === 'critical',\n estimatedTokensAfterSwitch: currentContextTokens,\n }\n }\n\n /**\n * Check if a model can handle the given context size (legacy method)\n */\n canModelHandleContext(model: ModelProfile, contextTokens: number): boolean {\n const analysis = this.analyzeContextCompatibility(model, contextTokens)\n return analysis.compatible\n }\n\n /**\n * Find the first model that can handle the given context size\n */\n findModelWithSufficientContext(\n models: ModelProfile[],\n contextTokens: number,\n ): ModelProfile | null {\n return (\n models.find(model => this.canModelHandleContext(model, contextTokens)) ||\n null\n )\n }\n\n /**\n * Unified model getter for different contexts\n */\n getModelForContext(\n contextType: 'terminal' | 'main-agent' | 'task-tool',\n ): string | null {\n switch (contextType) {\n case 'terminal':\n return this.getCurrentModel()\n case 'main-agent':\n return this.getMainAgentModel()\n case 'task-tool':\n return this.getTaskToolModel()\n default:\n return this.getMainAgentModel()\n }\n }\n\n /**\n * Get all active model profiles\n */\n getActiveModelProfiles(): ModelProfile[] {\n return this.modelProfiles.filter(p => p.isActive)\n }\n\n /**\n * Check if any models are configured\n */\n hasConfiguredModels(): boolean {\n return this.getActiveModelProfiles().length > 0\n }\n\n // New model pointer system methods\n\n /**\n * Get model by pointer type (main, task, reasoning, quick)\n */\n getModel(pointer: ModelPointerType): ModelProfile | null {\n const pointerId = this.config.modelPointers?.[pointer]\n if (!pointerId) {\n return this.getDefaultModel()\n }\n\n const profile = this.findModelProfile(pointerId)\n return profile && profile.isActive ? profile : this.getDefaultModel()\n }\n\n /**\n * Get model name by pointer type\n */\n getModelName(pointer: ModelPointerType): string | null {\n const profile = this.getModel(pointer)\n return profile ? profile.modelName : null\n }\n\n /**\n * Get reasoning model (with fallback)\n */\n getReasoningModel(): string | null {\n return this.getModelName('reasoning') || this.getModelName('main')\n }\n\n /**\n * Get quick model (with fallback)\n */\n getQuickModel(): string | null {\n return (\n this.getModelName('quick') ||\n this.getModelName('task') ||\n this.getModelName('main')\n )\n }\n\n /**\n * Add a new model profile with duplicate validation\n */\n async addModel(\n config: Omit<ModelProfile, 'createdAt' | 'isActive'>,\n ): Promise<string> {\n // Check for duplicate modelName (actual model identifier)\n const existingByModelName = this.modelProfiles.find(\n p => p.modelName === config.modelName,\n )\n if (existingByModelName) {\n throw new Error(\n `Model with modelName '${config.modelName}' already exists: ${existingByModelName.name}`,\n )\n }\n\n // Check for duplicate friendly name\n const existingByName = this.modelProfiles.find(p => p.name === config.name)\n if (existingByName) {\n throw new Error(`Model with name '${config.name}' already exists`)\n }\n\n const newModel: ModelProfile = {\n ...config,\n createdAt: Date.now(),\n isActive: true,\n }\n\n this.modelProfiles.push(newModel)\n\n // If this is the first model, set all pointers to it\n if (this.modelProfiles.length === 1) {\n this.config.modelPointers = {\n main: config.modelName,\n task: config.modelName,\n reasoning: config.modelName,\n quick: config.modelName,\n }\n this.config.defaultModelName = config.modelName\n }\n\n this.saveConfig()\n return config.modelName\n }\n\n /**\n * Set model pointer assignment\n */\n setPointer(pointer: ModelPointerType, modelName: string): void {\n if (!this.findModelProfile(modelName)) {\n throw new Error(`Model '${modelName}' not found`)\n }\n\n if (!this.config.modelPointers) {\n this.config.modelPointers = {\n main: '',\n task: '',\n reasoning: '',\n quick: '',\n }\n }\n\n this.config.modelPointers[pointer] = modelName\n this.saveConfig()\n }\n\n /**\n * Get all active models for pointer assignment\n */\n getAvailableModels(): ModelProfile[] {\n return this.modelProfiles.filter(p => p.isActive)\n }\n\n /**\n * Get all configured models (both active and inactive) for switching\n */\n getAllConfiguredModels(): ModelProfile[] {\n return this.modelProfiles\n }\n\n /**\n * Get all available model names (modelName field) - active only\n */\n getAllAvailableModelNames(): string[] {\n return this.getAvailableModels().map(p => p.modelName)\n }\n\n /**\n * Get all configured model names (both active and inactive)\n */\n getAllConfiguredModelNames(): string[] {\n return this.getAllConfiguredModels().map(p => p.modelName)\n }\n\n /**\n * Debug method to get detailed model switching information\n */\n getModelSwitchingDebugInfo(): {\n totalModels: number\n activeModels: number\n inactiveModels: number\n currentMainModel: string | null\n availableModels: Array<{\n name: string\n modelName: string \n provider: string\n isActive: boolean\n lastUsed?: number\n }>\n modelPointers: Record<string, string | undefined>\n } {\n const availableModels = this.getAvailableModels()\n const currentMainModelName = this.config.modelPointers?.main\n \n return {\n totalModels: this.modelProfiles.length,\n activeModels: availableModels.length,\n inactiveModels: this.modelProfiles.length - availableModels.length,\n currentMainModel: currentMainModelName || null,\n availableModels: this.modelProfiles.map(p => ({\n name: p.name,\n modelName: p.modelName,\n provider: p.provider,\n isActive: p.isActive,\n lastUsed: p.lastUsed,\n })),\n modelPointers: this.config.modelPointers || {},\n }\n }\n\n /**\n * Remove a model profile\n */\n removeModel(modelName: string): void {\n this.modelProfiles = this.modelProfiles.filter(\n p => p.modelName !== modelName,\n )\n\n // Clean up pointers that reference deleted model\n if (this.config.modelPointers) {\n Object.keys(this.config.modelPointers).forEach(pointer => {\n if (\n this.config.modelPointers[pointer as ModelPointerType] === modelName\n ) {\n this.config.modelPointers[pointer as ModelPointerType] =\n this.config.defaultModelName || ''\n }\n })\n }\n\n this.saveConfig()\n }\n\n /**\n * Get default model profile\n */\n private getDefaultModel(): ModelProfile | null {\n if (this.config.defaultModelId) {\n const profile = this.findModelProfile(this.config.defaultModelId)\n if (profile && profile.isActive) {\n return profile\n }\n }\n return this.modelProfiles.find(p => p.isActive) || null\n }\n\n /**\n * Save configuration changes\n */\n private saveConfig(): void {\n const updatedConfig = {\n ...this.config,\n modelProfiles: this.modelProfiles,\n }\n saveGlobalConfig(updatedConfig)\n }\n\n /**\n * Get a fallback model when no specific model is configured\n */\n async getFallbackModel(): Promise<string> {\n const modelConfig = await getModelConfig()\n if (USE_BEDROCK) return modelConfig.bedrock\n if (USE_VERTEX) return modelConfig.vertex\n return modelConfig.firstParty\n }\n\n /**\n * \u7EDF\u4E00\u7684\u6A21\u578B\u89E3\u6790\u65B9\u6CD5\uFF1A\u652F\u6301\u6307\u9488\u3001model ID \u548C\u771F\u5B9E\u6A21\u578B\u540D\u79F0\n * @param modelParam - \u53EF\u4EE5\u662F\u6A21\u578B\u6307\u9488 ('main', 'task', etc.)\u3001\u5185\u90E8model ID \u6216\u771F\u5B9E\u6A21\u578B\u540D\u79F0 ('gpt-4o', 'claude-3-5-sonnet')\n * @returns ModelProfile \u6216 null\n */\n resolveModel(modelParam: string | ModelPointerType): ModelProfile | null {\n // \u9996\u5148\u68C0\u67E5\u662F\u5426\u662F\u6A21\u578B\u6307\u9488\n if (['main', 'task', 'reasoning', 'quick'].includes(modelParam)) {\n const pointerId =\n this.config.modelPointers?.[modelParam as ModelPointerType]\n if (pointerId) {\n // pointerId \u53EF\u80FD\u662F\u5185\u90E8ID\u6216\u771F\u5B9E\u6A21\u578B\u540D\u79F0\uFF0C\u5C1D\u8BD5\u4E24\u79CD\u67E5\u627E\u65B9\u5F0F\n let profile = this.findModelProfile(pointerId) // \u6309\u5185\u90E8ID\u67E5\u627E\n if (!profile) {\n profile = this.findModelProfileByModelName(pointerId) // \u6309\u771F\u5B9E\u6A21\u578B\u540D\u67E5\u627E\n }\n if (profile && profile.isActive) {\n return profile\n }\n }\n // \u6307\u9488\u65E0\u6548\u65F6\uFF0C\u5C1D\u8BD5 fallback \u5230\u9ED8\u8BA4\u6A21\u578B\n return this.getDefaultModel()\n }\n\n // \u4E0D\u662F\u6307\u9488\uFF0C\u5C1D\u8BD5\u591A\u79CD\u67E5\u627E\u65B9\u5F0F\n // 1. \u5C1D\u8BD5\u6309\u5185\u90E8 model ID \u67E5\u627E\n let profile = this.findModelProfile(modelParam)\n if (profile && profile.isActive) {\n return profile\n }\n\n // 2. \u5C1D\u8BD5\u6309\u771F\u5B9E\u6A21\u578B\u540D\u79F0\u67E5\u627E\n profile = this.findModelProfileByModelName(modelParam)\n if (profile && profile.isActive) {\n return profile\n }\n\n // 3. \u5C1D\u8BD5\u6309\u53CB\u597D\u540D\u79F0\u67E5\u627E\n profile = this.findModelProfileByName(modelParam)\n if (profile && profile.isActive) {\n return profile\n }\n\n // \u6240\u6709\u67E5\u627E\u65B9\u5F0F\u90FD\u5931\u8D25\uFF0C\u5C1D\u8BD5 fallback \u5230\u9ED8\u8BA4\u6A21\u578B\n return this.getDefaultModel()\n }\n\n /**\n * \u89E3\u6790\u6A21\u578B\u53C2\u6570\u5E76\u8FD4\u56DE\u5B8C\u6574\u4FE1\u606F\n */\n resolveModelWithInfo(modelParam: string | ModelPointerType): {\n success: boolean\n profile: ModelProfile | null\n error?: string\n } {\n const isPointer = ['main', 'task', 'reasoning', 'quick'].includes(\n modelParam,\n )\n\n if (isPointer) {\n const pointerId =\n this.config.modelPointers?.[modelParam as ModelPointerType]\n if (!pointerId) {\n return {\n success: false,\n profile: null,\n error: `Model pointer '${modelParam}' is not configured. Use /model to set up models.`,\n }\n }\n\n // pointerId \u53EF\u80FD\u662F\u5185\u90E8ID\u6216\u771F\u5B9E\u6A21\u578B\u540D\u79F0\n let profile = this.findModelProfile(pointerId)\n if (!profile) {\n profile = this.findModelProfileByModelName(pointerId)\n }\n\n if (!profile) {\n return {\n success: false,\n profile: null,\n error: `Model pointer '${modelParam}' points to invalid model '${pointerId}'. Use /model to reconfigure.`,\n }\n }\n\n if (!profile.isActive) {\n return {\n success: false,\n profile: null,\n error: `Model '${profile.name}' (pointed by '${modelParam}') is inactive. Use /model to activate it.`,\n }\n }\n\n return {\n success: true,\n profile,\n }\n } else {\n // \u76F4\u63A5\u7684 model ID \u6216\u6A21\u578B\u540D\u79F0\uFF0C\u5C1D\u8BD5\u591A\u79CD\u67E5\u627E\u65B9\u5F0F\n let profile = this.findModelProfile(modelParam)\n if (!profile) {\n profile = this.findModelProfileByModelName(modelParam)\n }\n if (!profile) {\n profile = this.findModelProfileByName(modelParam)\n }\n\n if (!profile) {\n return {\n success: false,\n profile: null,\n error: `Model '${modelParam}' not found. Use /model to add models.`,\n }\n }\n\n if (!profile.isActive) {\n return {\n success: false,\n profile: null,\n error: `Model '${profile.name}' is inactive. Use /model to activate it.`,\n }\n }\n\n return {\n success: true,\n profile,\n }\n }\n }\n\n // Private helper methods\n private findModelProfile(modelName: string): ModelProfile | null {\n return this.modelProfiles.find(p => p.modelName === modelName) || null\n }\n\n private findModelProfileByModelName(modelName: string): ModelProfile | null {\n return this.modelProfiles.find(p => p.modelName === modelName) || null\n }\n\n private findModelProfileByName(name: string): ModelProfile | null {\n return this.modelProfiles.find(p => p.name === name) || null\n }\n\n private updateLastUsed(modelName: string): void {\n const profile = this.findModelProfile(modelName)\n if (profile) {\n profile.lastUsed = Date.now()\n }\n }\n}\n\n// Global ModelManager instance to avoid config read/write race conditions\nlet globalModelManager: ModelManager | null = null\n\n/**\n * Get the global ModelManager instance (singleton pattern to fix race conditions)\n */\nexport const getModelManager = (): ModelManager => {\n try {\n if (!globalModelManager) {\n const config = getGlobalConfig()\n if (!config) {\n console.warn(\n 'No global config available, creating ModelManager with empty config',\n )\n globalModelManager = new ModelManager({\n modelProfiles: [],\n modelPointers: { main: '', task: '', reasoning: '', quick: '' },\n })\n } else {\n globalModelManager = new ModelManager(config)\n }\n }\n return globalModelManager\n } catch (error) {\n console.error('Error creating ModelManager:', error)\n // Return a fallback ModelManager with empty configuration\n return new ModelManager({\n modelProfiles: [],\n modelPointers: { main: '', task: '', reasoning: '', quick: '' },\n })\n }\n}\n\n/**\n * Force reload of the global ModelManager instance\n * Used when configuration changes to ensure fresh data\n */\nexport const reloadModelManager = (): void => {\n globalModelManager = null\n // Force creation of new instance with fresh config\n getModelManager()\n}\n\n/**\n * Get the quick model for fast operations\n */\nexport const getQuickModel = (): string => {\n const manager = getModelManager()\n const quickModel = manager.getModel('quick')\n return quickModel?.modelName || 'quick' // Return pointer if model not resolved\n}\n"],
5
- "mappings": "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",
6
- "names": ["analysis", "allModels", "profile"]
7
- }
@@ -1,80 +0,0 @@
1
- import { isAbsolute, resolve, relative } from "path";
2
- import { getCwd, getOriginalCwd } from "../state.js";
3
- const readFileAllowedDirectories = /* @__PURE__ */ new Set();
4
- const writeFileAllowedDirectories = /* @__PURE__ */ new Set();
5
- function toAbsolutePath(path) {
6
- const abs = isAbsolute(path) ? resolve(path) : resolve(getCwd(), path);
7
- return normalizeForCompare(abs);
8
- }
9
- function normalizeForCompare(p) {
10
- const norm = resolve(p);
11
- return process.platform === "win32" ? norm.toLowerCase() : norm;
12
- }
13
- function isSubpath(base, target) {
14
- const rel = relative(base, target);
15
- if (!rel || rel === "") return true;
16
- if (rel.startsWith("..")) return false;
17
- if (isAbsolute(rel)) return false;
18
- return true;
19
- }
20
- function pathInOriginalCwd(path) {
21
- const absolutePath = toAbsolutePath(path);
22
- const base = toAbsolutePath(getOriginalCwd());
23
- return isSubpath(base, absolutePath);
24
- }
25
- function hasReadPermission(directory) {
26
- const absolutePath = toAbsolutePath(directory);
27
- for (const allowedPath of readFileAllowedDirectories) {
28
- if (isSubpath(allowedPath, absolutePath)) return true;
29
- }
30
- return false;
31
- }
32
- function hasWritePermission(directory) {
33
- const absolutePath = toAbsolutePath(directory);
34
- for (const allowedPath of writeFileAllowedDirectories) {
35
- if (isSubpath(allowedPath, absolutePath)) return true;
36
- }
37
- return false;
38
- }
39
- function saveReadPermission(directory) {
40
- const absolutePath = toAbsolutePath(directory);
41
- for (const allowedPath of Array.from(readFileAllowedDirectories)) {
42
- if (isSubpath(absolutePath, allowedPath)) {
43
- readFileAllowedDirectories.delete(allowedPath);
44
- }
45
- }
46
- readFileAllowedDirectories.add(absolutePath);
47
- }
48
- const saveReadPermissionForTest = saveReadPermission;
49
- function grantReadPermissionForOriginalDir() {
50
- const originalProjectDir = getOriginalCwd();
51
- saveReadPermission(originalProjectDir);
52
- }
53
- function saveWritePermission(directory) {
54
- const absolutePath = toAbsolutePath(directory);
55
- for (const allowedPath of Array.from(writeFileAllowedDirectories)) {
56
- if (isSubpath(absolutePath, allowedPath)) {
57
- writeFileAllowedDirectories.delete(allowedPath);
58
- }
59
- }
60
- writeFileAllowedDirectories.add(absolutePath);
61
- }
62
- function grantWritePermissionForOriginalDir() {
63
- const originalProjectDir = getOriginalCwd();
64
- saveWritePermission(originalProjectDir);
65
- }
66
- function clearFilePermissions() {
67
- readFileAllowedDirectories.clear();
68
- writeFileAllowedDirectories.clear();
69
- }
70
- export {
71
- clearFilePermissions,
72
- grantReadPermissionForOriginalDir,
73
- grantWritePermissionForOriginalDir,
74
- hasReadPermission,
75
- hasWritePermission,
76
- pathInOriginalCwd,
77
- saveReadPermissionForTest,
78
- toAbsolutePath
79
- };
80
- //# sourceMappingURL=filesystem.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/utils/permissions/filesystem.ts"],
4
- "sourcesContent": ["import { isAbsolute, resolve, relative, sep } from 'path'\nimport { getCwd, getOriginalCwd } from '../state'\n\n// In-memory storage for file permissions that resets each session\n// Sets of allowed directories for read and write operations\nconst readFileAllowedDirectories: Set<string> = new Set()\nconst writeFileAllowedDirectories: Set<string> = new Set()\n\n/**\n * Ensures a path is absolute by resolving it relative to cwd if necessary\n * @param path The path to normalize\n * @returns Absolute path\n */\nexport function toAbsolutePath(path: string): string {\n const abs = isAbsolute(path) ? resolve(path) : resolve(getCwd(), path)\n return normalizeForCompare(abs)\n}\n\nfunction normalizeForCompare(p: string): string {\n // Normalize separators and resolve .. and . segments\n const norm = resolve(p)\n // On Windows, comparisons should be case-insensitive\n return process.platform === 'win32' ? norm.toLowerCase() : norm\n}\n\nfunction isSubpath(base: string, target: string): boolean {\n const rel = relative(base, target)\n // If different drive letters on Windows, relative returns the target path\n if (!rel || rel === '') return true\n // Not a subpath if it goes up to parent\n if (rel.startsWith('..')) return false\n // Not a subpath if absolute\n if (isAbsolute(rel)) return false\n return true\n}\n\n/**\n * Ensures a path is in the original cwd path\n * @param directory The directory path to normalize\n * @returns Absolute path\n */\nexport function pathInOriginalCwd(path: string): boolean {\n const absolutePath = toAbsolutePath(path)\n const base = toAbsolutePath(getOriginalCwd())\n return isSubpath(base, absolutePath)\n}\n\n/**\n * Check if read permission exists for the specified directory\n * @param directory The directory to check permission for\n * @returns true if read permission exists, false otherwise\n */\nexport function hasReadPermission(directory: string): boolean {\n const absolutePath = toAbsolutePath(directory)\n for (const allowedPath of readFileAllowedDirectories) {\n if (isSubpath(allowedPath, absolutePath)) return true\n }\n return false\n}\n\n/**\n * Check if write permission exists for the specified directory\n * @param directory The directory to check permission for\n * @returns true if write permission exists, false otherwise\n */\nexport function hasWritePermission(directory: string): boolean {\n const absolutePath = toAbsolutePath(directory)\n for (const allowedPath of writeFileAllowedDirectories) {\n if (isSubpath(allowedPath, absolutePath)) return true\n }\n return false\n}\n\n/**\n * Save read permission for a directory\n * @param directory The directory to grant read permission for\n */\nfunction saveReadPermission(directory: string): void {\n const absolutePath = toAbsolutePath(directory)\n // Remove any existing subpaths contained by this new path\n for (const allowedPath of Array.from(readFileAllowedDirectories)) {\n if (isSubpath(absolutePath, allowedPath)) {\n readFileAllowedDirectories.delete(allowedPath)\n }\n }\n readFileAllowedDirectories.add(absolutePath)\n}\n\nexport const saveReadPermissionForTest = saveReadPermission\n\n/**\n * Grants read permission for the original project directory.\n * This is useful for initializing read access to the project root.\n */\nexport function grantReadPermissionForOriginalDir(): void {\n const originalProjectDir = getOriginalCwd()\n saveReadPermission(originalProjectDir)\n}\n\n/**\n * Save write permission for a directory\n * @param directory The directory to grant write permission for\n */\nfunction saveWritePermission(directory: string): void {\n const absolutePath = toAbsolutePath(directory)\n for (const allowedPath of Array.from(writeFileAllowedDirectories)) {\n if (isSubpath(absolutePath, allowedPath)) {\n writeFileAllowedDirectories.delete(allowedPath)\n }\n }\n writeFileAllowedDirectories.add(absolutePath)\n}\n\n/**\n * Grants write permission for the original project directory.\n * This is useful for initializing write access to the project root.\n */\nexport function grantWritePermissionForOriginalDir(): void {\n const originalProjectDir = getOriginalCwd()\n saveWritePermission(originalProjectDir)\n}\n\n// For testing purposes\nexport function clearFilePermissions(): void {\n readFileAllowedDirectories.clear()\n writeFileAllowedDirectories.clear()\n}\n"],
5
- "mappings": "AAAA,SAAS,YAAY,SAAS,gBAAqB;AACnD,SAAS,QAAQ,sBAAsB;AAIvC,MAAM,6BAA0C,oBAAI,IAAI;AACxD,MAAM,8BAA2C,oBAAI,IAAI;AAOlD,SAAS,eAAe,MAAsB;AACnD,QAAM,MAAM,WAAW,IAAI,IAAI,QAAQ,IAAI,IAAI,QAAQ,OAAO,GAAG,IAAI;AACrE,SAAO,oBAAoB,GAAG;AAChC;AAEA,SAAS,oBAAoB,GAAmB;AAE9C,QAAM,OAAO,QAAQ,CAAC;AAEtB,SAAO,QAAQ,aAAa,UAAU,KAAK,YAAY,IAAI;AAC7D;AAEA,SAAS,UAAU,MAAc,QAAyB;AACxD,QAAM,MAAM,SAAS,MAAM,MAAM;AAEjC,MAAI,CAAC,OAAO,QAAQ,GAAI,QAAO;AAE/B,MAAI,IAAI,WAAW,IAAI,EAAG,QAAO;AAEjC,MAAI,WAAW,GAAG,EAAG,QAAO;AAC5B,SAAO;AACT;AAOO,SAAS,kBAAkB,MAAuB;AACvD,QAAM,eAAe,eAAe,IAAI;AACxC,QAAM,OAAO,eAAe,eAAe,CAAC;AAC5C,SAAO,UAAU,MAAM,YAAY;AACrC;AAOO,SAAS,kBAAkB,WAA4B;AAC5D,QAAM,eAAe,eAAe,SAAS;AAC7C,aAAW,eAAe,4BAA4B;AACpD,QAAI,UAAU,aAAa,YAAY,EAAG,QAAO;AAAA,EACnD;AACA,SAAO;AACT;AAOO,SAAS,mBAAmB,WAA4B;AAC7D,QAAM,eAAe,eAAe,SAAS;AAC7C,aAAW,eAAe,6BAA6B;AACrD,QAAI,UAAU,aAAa,YAAY,EAAG,QAAO;AAAA,EACnD;AACA,SAAO;AACT;AAMA,SAAS,mBAAmB,WAAyB;AACnD,QAAM,eAAe,eAAe,SAAS;AAE7C,aAAW,eAAe,MAAM,KAAK,0BAA0B,GAAG;AAChE,QAAI,UAAU,cAAc,WAAW,GAAG;AACxC,iCAA2B,OAAO,WAAW;AAAA,IAC/C;AAAA,EACF;AACA,6BAA2B,IAAI,YAAY;AAC7C;AAEO,MAAM,4BAA4B;AAMlC,SAAS,oCAA0C;AACxD,QAAM,qBAAqB,eAAe;AAC1C,qBAAmB,kBAAkB;AACvC;AAMA,SAAS,oBAAoB,WAAyB;AACpD,QAAM,eAAe,eAAe,SAAS;AAC7C,aAAW,eAAe,MAAM,KAAK,2BAA2B,GAAG;AACjE,QAAI,UAAU,cAAc,WAAW,GAAG;AACxC,kCAA4B,OAAO,WAAW;AAAA,IAChD;AAAA,EACF;AACA,8BAA4B,IAAI,YAAY;AAC9C;AAMO,SAAS,qCAA2C;AACzD,QAAM,qBAAqB,eAAe;AAC1C,sBAAoB,kBAAkB;AACxC;AAGO,SAAS,uBAA6B;AAC3C,6BAA2B,MAAM;AACjC,8BAA4B,MAAM;AACpC;",
6
- "names": []
7
- }
@@ -1,20 +0,0 @@
1
- const responseIdCache = /* @__PURE__ */ new Map();
2
- function getLastResponseId(conversationId) {
3
- return responseIdCache.get(conversationId);
4
- }
5
- function setLastResponseId(conversationId, responseId) {
6
- responseIdCache.set(conversationId, responseId);
7
- }
8
- function clearResponseId(conversationId) {
9
- responseIdCache.delete(conversationId);
10
- }
11
- function clearAllResponseIds() {
12
- responseIdCache.clear();
13
- }
14
- export {
15
- clearAllResponseIds,
16
- clearResponseId,
17
- getLastResponseId,
18
- setLastResponseId
19
- };
20
- //# sourceMappingURL=responseState.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/responseState.ts"],
4
- "sourcesContent": ["/**\n * Response state management for Responses API\n * Tracks previous_response_id for conversation chaining\n */\n\n// Store the last response ID for each conversation\nconst responseIdCache = new Map<string, string>()\n\nexport function getLastResponseId(conversationId: string): string | undefined {\n return responseIdCache.get(conversationId)\n}\n\nexport function setLastResponseId(conversationId: string, responseId: string): void {\n responseIdCache.set(conversationId, responseId)\n}\n\nexport function clearResponseId(conversationId: string): void {\n responseIdCache.delete(conversationId)\n}\n\nexport function clearAllResponseIds(): void {\n responseIdCache.clear()\n}"],
5
- "mappings": "AAMA,MAAM,kBAAkB,oBAAI,IAAoB;AAEzC,SAAS,kBAAkB,gBAA4C;AAC5E,SAAO,gBAAgB,IAAI,cAAc;AAC3C;AAEO,SAAS,kBAAkB,gBAAwB,YAA0B;AAClF,kBAAgB,IAAI,gBAAgB,UAAU;AAChD;AAEO,SAAS,gBAAgB,gBAA8B;AAC5D,kBAAgB,OAAO,cAAc;AACvC;AAEO,SAAS,sBAA4B;AAC1C,kBAAgB,MAAM;AACxB;",
6
- "names": []
7
- }
@@ -1,131 +0,0 @@
1
- import { findActualExecutable } from "spawn-rx";
2
- import { memoize } from "lodash-es";
3
- import { fileURLToPath, resolve } from "node:url";
4
- import * as path from "path";
5
- import { logError } from "./log.js";
6
- import { execFileNoThrow } from "./execFileNoThrow.js";
7
- import { execFile } from "child_process";
8
- import debug from "debug";
9
- const __filename = fileURLToPath(import.meta.url);
10
- const __dirname = resolve(
11
- __filename,
12
- process.env.NODE_ENV === "test" ? "../.." : "."
13
- );
14
- const d = debug("claude:ripgrep");
15
- const useBuiltinRipgrep = !!process.env.USE_BUILTIN_RIPGREP;
16
- if (useBuiltinRipgrep) {
17
- d("Using builtin ripgrep because USE_BUILTIN_RIPGREP is set");
18
- }
19
- const ripgrepPath = memoize(() => {
20
- const { cmd } = findActualExecutable("rg", []);
21
- d(`ripgrep initially resolved as: ${cmd}`);
22
- if (cmd !== "rg" && !useBuiltinRipgrep) {
23
- return cmd;
24
- } else {
25
- const rgRoot = path.resolve(__dirname, "vendor", "ripgrep");
26
- if (process.platform === "win32") {
27
- return path.resolve(rgRoot, "x64-win32", "rg.exe");
28
- }
29
- const ret = path.resolve(
30
- rgRoot,
31
- `${process.arch}-${process.platform}`,
32
- "rg"
33
- );
34
- d("internal ripgrep resolved as: %s", ret);
35
- return ret;
36
- }
37
- });
38
- async function ripGrep(args, target, abortSignal) {
39
- await codesignRipgrepIfNecessary();
40
- const rg = ripgrepPath();
41
- d("ripgrep called: %s %o", rg, target, args);
42
- return new Promise((resolve2) => {
43
- execFile(
44
- ripgrepPath(),
45
- [...args, target],
46
- {
47
- maxBuffer: 1e6,
48
- signal: abortSignal,
49
- timeout: 1e4
50
- },
51
- (error, stdout) => {
52
- if (error) {
53
- if (error.code !== 1) {
54
- d("ripgrep error: %o", error);
55
- logError(error);
56
- }
57
- resolve2([]);
58
- } else {
59
- d("ripgrep succeeded with %s", stdout);
60
- resolve2(stdout.trim().split("\n").filter(Boolean));
61
- }
62
- }
63
- );
64
- });
65
- }
66
- async function listAllContentFiles(path2, abortSignal, limit) {
67
- try {
68
- d("listAllContentFiles called: %s", path2);
69
- return (await ripGrep(["-l", ".", path2], path2, abortSignal)).slice(0, limit);
70
- } catch (e) {
71
- d("listAllContentFiles failed: %o", e);
72
- logError(e);
73
- return [];
74
- }
75
- }
76
- let alreadyDoneSignCheck = false;
77
- async function codesignRipgrepIfNecessary() {
78
- if (process.platform !== "darwin" || alreadyDoneSignCheck) {
79
- return;
80
- }
81
- alreadyDoneSignCheck = true;
82
- d("checking if ripgrep is already signed");
83
- const lines = (await execFileNoThrow(
84
- "codesign",
85
- ["-vv", "-d", ripgrepPath()],
86
- void 0,
87
- void 0,
88
- false
89
- )).stdout.split("\n");
90
- const needsSigned = lines.find((line) => line.includes("linker-signed"));
91
- if (!needsSigned) {
92
- d("seems to be already signed");
93
- return;
94
- }
95
- try {
96
- d("signing ripgrep");
97
- const signResult = await execFileNoThrow("codesign", [
98
- "--sign",
99
- "-",
100
- "--force",
101
- "--preserve-metadata=entitlements,requirements,flags,runtime",
102
- ripgrepPath()
103
- ]);
104
- if (signResult.code !== 0) {
105
- d("failed to sign ripgrep: %o", signResult);
106
- logError(
107
- `Failed to sign ripgrep: ${signResult.stdout} ${signResult.stderr}`
108
- );
109
- }
110
- d("removing quarantine");
111
- const quarantineResult = await execFileNoThrow("xattr", [
112
- "-d",
113
- "com.apple.quarantine",
114
- ripgrepPath()
115
- ]);
116
- if (quarantineResult.code !== 0) {
117
- d("failed to remove quarantine: %o", quarantineResult);
118
- logError(
119
- `Failed to remove quarantine: ${quarantineResult.stdout} ${quarantineResult.stderr}`
120
- );
121
- }
122
- } catch (e) {
123
- d("failed during sign: %o", e);
124
- logError(e);
125
- }
126
- }
127
- export {
128
- listAllContentFiles,
129
- ripGrep
130
- };
131
- //# sourceMappingURL=ripgrep.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/utils/ripgrep.ts"],
4
- "sourcesContent": ["import { findActualExecutable } from 'spawn-rx'\nimport { memoize } from 'lodash-es'\nimport { fileURLToPath, resolve } from 'node:url'\nimport * as path from 'path'\nimport { logError } from './log'\nimport { execFileNoThrow } from './execFileNoThrow'\nimport { execFile } from 'child_process'\nimport debug from 'debug'\n\nconst __filename = fileURLToPath(import.meta.url)\nconst __dirname = resolve(\n __filename,\n process.env.NODE_ENV === 'test' ? '../..' : '.',\n)\n\nconst d = debug('claude:ripgrep')\n\nconst useBuiltinRipgrep = !!process.env.USE_BUILTIN_RIPGREP\nif (useBuiltinRipgrep) {\n d('Using builtin ripgrep because USE_BUILTIN_RIPGREP is set')\n}\n\nconst ripgrepPath = memoize(() => {\n const { cmd } = findActualExecutable('rg', [])\n d(`ripgrep initially resolved as: ${cmd}`)\n\n if (cmd !== 'rg' && !useBuiltinRipgrep) {\n // NB: If we're able to find ripgrep in $PATH, cmd will be an absolute\n // path rather than just returning 'rg'\n return cmd\n } else {\n // Use the one we ship in-box\n const rgRoot = path.resolve(__dirname, 'vendor', 'ripgrep')\n if (process.platform === 'win32') {\n // NB: Ripgrep doesn't ship an aarch64 binary for Windows, boooooo\n return path.resolve(rgRoot, 'x64-win32', 'rg.exe')\n }\n\n const ret = path.resolve(\n rgRoot,\n `${process.arch}-${process.platform}`,\n 'rg',\n )\n\n d('internal ripgrep resolved as: %s', ret)\n return ret\n }\n})\n\nexport async function ripGrep(\n args: string[],\n target: string,\n abortSignal: AbortSignal,\n): Promise<string[]> {\n await codesignRipgrepIfNecessary()\n const rg = ripgrepPath()\n d('ripgrep called: %s %o', rg, target, args)\n\n // NB: When running interactively, ripgrep does not require a path as its last\n // argument, but when run non-interactively, it will hang unless a path or file\n // pattern is provided\n return new Promise(resolve => {\n execFile(\n ripgrepPath(),\n [...args, target],\n {\n maxBuffer: 1_000_000,\n signal: abortSignal,\n timeout: 10_000,\n },\n (error, stdout) => {\n if (error) {\n // Exit code 1 from ripgrep means \"no matches found\" - this is normal\n if (error.code !== 1) {\n d('ripgrep error: %o', error)\n logError(error)\n }\n resolve([])\n } else {\n d('ripgrep succeeded with %s', stdout)\n resolve(stdout.trim().split('\\n').filter(Boolean))\n }\n },\n )\n })\n}\n\n// NB: We do something tricky here. We know that ripgrep processes common\n// ignore files for us, so we just ripgrep for any character, which matches\n// all non-empty files\nexport async function listAllContentFiles(\n path: string,\n abortSignal: AbortSignal,\n limit: number,\n): Promise<string[]> {\n try {\n d('listAllContentFiles called: %s', path)\n return (await ripGrep(['-l', '.', path], path, abortSignal)).slice(0, limit)\n } catch (e) {\n d('listAllContentFiles failed: %o', e)\n\n logError(e)\n return []\n }\n}\n\nlet alreadyDoneSignCheck = false\nasync function codesignRipgrepIfNecessary() {\n if (process.platform !== 'darwin' || alreadyDoneSignCheck) {\n return\n }\n\n alreadyDoneSignCheck = true\n\n // First, check to see if ripgrep is already signed\n d('checking if ripgrep is already signed')\n const lines = (\n await execFileNoThrow(\n 'codesign',\n ['-vv', '-d', ripgrepPath()],\n undefined,\n undefined,\n false,\n )\n ).stdout.split('\\n')\n\n const needsSigned = lines.find(line => line.includes('linker-signed'))\n if (!needsSigned) {\n d('seems to be already signed')\n return\n }\n\n try {\n d('signing ripgrep')\n const signResult = await execFileNoThrow('codesign', [\n '--sign',\n '-',\n '--force',\n '--preserve-metadata=entitlements,requirements,flags,runtime',\n ripgrepPath(),\n ])\n\n if (signResult.code !== 0) {\n d('failed to sign ripgrep: %o', signResult)\n logError(\n `Failed to sign ripgrep: ${signResult.stdout} ${signResult.stderr}`,\n )\n }\n\n d('removing quarantine')\n const quarantineResult = await execFileNoThrow('xattr', [\n '-d',\n 'com.apple.quarantine',\n ripgrepPath(),\n ])\n\n if (quarantineResult.code !== 0) {\n d('failed to remove quarantine: %o', quarantineResult)\n logError(\n `Failed to remove quarantine: ${quarantineResult.stdout} ${quarantineResult.stderr}`,\n )\n }\n } catch (e) {\n d('failed during sign: %o', e)\n logError(e)\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["resolve", "path"]
7
- }