@shareai-lab/kode 1.1.23 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (726) hide show
  1. package/README.md +25 -404
  2. package/cli-acp.js +82 -0
  3. package/cli.js +89 -79
  4. package/dist/REPL-CW7AYLVL.js +42 -0
  5. package/dist/acp-VEPJ74LT.js +1357 -0
  6. package/dist/acp-VEPJ74LT.js.map +7 -0
  7. package/dist/agentsValidate-7LH4HTNR.js +373 -0
  8. package/dist/agentsValidate-7LH4HTNR.js.map +7 -0
  9. package/dist/ask-3NHFFUQG.js +125 -0
  10. package/dist/ask-3NHFFUQG.js.map +7 -0
  11. package/dist/autoUpdater-ITPIHCOI.js +17 -0
  12. package/dist/chunk-3IN27HA5.js +128 -0
  13. package/dist/chunk-3IN27HA5.js.map +7 -0
  14. package/dist/chunk-3RUXVV4S.js +23 -0
  15. package/dist/chunk-3RUXVV4S.js.map +7 -0
  16. package/dist/chunk-4FX3IVPT.js +164 -0
  17. package/dist/chunk-4FX3IVPT.js.map +7 -0
  18. package/dist/chunk-4RTX4AG4.js +249 -0
  19. package/dist/chunk-4RTX4AG4.js.map +7 -0
  20. package/dist/chunk-5PDP7R6N.js +515 -0
  21. package/dist/chunk-5PDP7R6N.js.map +7 -0
  22. package/dist/chunk-73WGVYLQ.js +735 -0
  23. package/dist/chunk-73WGVYLQ.js.map +7 -0
  24. package/dist/{services/systemReminder.js → chunk-7M2YN6TU.js} +221 -59
  25. package/dist/chunk-7M2YN6TU.js.map +7 -0
  26. package/dist/{utils/theme.js → chunk-7U7L4NMD.js} +28 -6
  27. package/dist/chunk-7U7L4NMD.js.map +7 -0
  28. package/dist/chunk-ABLVTESJ.js +19 -0
  29. package/dist/chunk-ABLVTESJ.js.map +7 -0
  30. package/dist/chunk-AFFSCMYS.js +191 -0
  31. package/dist/chunk-AFFSCMYS.js.map +7 -0
  32. package/dist/chunk-ARZSBOAO.js +1256 -0
  33. package/dist/chunk-ARZSBOAO.js.map +7 -0
  34. package/dist/chunk-CIG63V4E.js +72 -0
  35. package/dist/chunk-CIG63V4E.js.map +7 -0
  36. package/dist/chunk-CM3EGTG6.js +1609 -0
  37. package/dist/chunk-CM3EGTG6.js.map +7 -0
  38. package/dist/{services/openai.js → chunk-DZE5YA7L.js} +168 -234
  39. package/dist/chunk-DZE5YA7L.js.map +7 -0
  40. package/dist/chunk-E6YNABER.js +24 -0
  41. package/dist/chunk-E6YNABER.js.map +7 -0
  42. package/dist/{cost-tracker.js → chunk-EZXMVTDU.js} +51 -32
  43. package/dist/chunk-EZXMVTDU.js.map +7 -0
  44. package/dist/chunk-F2SJXUDI.js +148 -0
  45. package/dist/chunk-F2SJXUDI.js.map +7 -0
  46. package/dist/chunk-FC5ZCKBI.js +30167 -0
  47. package/dist/chunk-FC5ZCKBI.js.map +7 -0
  48. package/dist/chunk-HCBELH4J.js +145 -0
  49. package/dist/chunk-HCBELH4J.js.map +7 -0
  50. package/dist/chunk-HN4E4UUQ.js +96 -0
  51. package/dist/chunk-HN4E4UUQ.js.map +7 -0
  52. package/dist/{utils/model.js → chunk-IZVMU4S2.js} +194 -227
  53. package/dist/chunk-IZVMU4S2.js.map +7 -0
  54. package/dist/chunk-JC6NCUG5.js +11 -0
  55. package/dist/chunk-K2CWOTI2.js +196 -0
  56. package/dist/chunk-K2CWOTI2.js.map +7 -0
  57. package/dist/chunk-KAA5BGMQ.js +12 -0
  58. package/dist/chunk-KAA5BGMQ.js.map +7 -0
  59. package/dist/{utils/config.js → chunk-LC4TVOCZ.js} +351 -171
  60. package/dist/chunk-LC4TVOCZ.js.map +7 -0
  61. package/dist/chunk-MIW7N2MY.js +2613 -0
  62. package/dist/chunk-MIW7N2MY.js.map +7 -0
  63. package/dist/chunk-MWRSY4X6.js +240 -0
  64. package/dist/chunk-MWRSY4X6.js.map +7 -0
  65. package/dist/chunk-ND3XWFO6.js +34 -0
  66. package/dist/chunk-ND3XWFO6.js.map +7 -0
  67. package/dist/chunk-NPFOMITO.js +21 -0
  68. package/dist/chunk-NPFOMITO.js.map +7 -0
  69. package/dist/chunk-QVLYOPO5.js +1097 -0
  70. package/dist/chunk-QVLYOPO5.js.map +7 -0
  71. package/dist/chunk-RZWOUA25.js +490 -0
  72. package/dist/chunk-RZWOUA25.js.map +7 -0
  73. package/dist/chunk-S3J2TLV6.js +16 -0
  74. package/dist/chunk-S3J2TLV6.js.map +7 -0
  75. package/dist/chunk-S6HRABTA.js +95 -0
  76. package/dist/chunk-S6HRABTA.js.map +7 -0
  77. package/dist/{utils/debugLogger.js → chunk-STSX7GIX.js} +107 -204
  78. package/dist/chunk-STSX7GIX.js.map +7 -0
  79. package/dist/chunk-UHYRLID6.js +472 -0
  80. package/dist/chunk-UHYRLID6.js.map +7 -0
  81. package/dist/chunk-UKHTVRJM.js +47 -0
  82. package/dist/chunk-UKHTVRJM.js.map +7 -0
  83. package/dist/chunk-UYXEDKOZ.js +24 -0
  84. package/dist/chunk-UYXEDKOZ.js.map +7 -0
  85. package/dist/chunk-W7GRKO7Q.js +766 -0
  86. package/dist/chunk-W7GRKO7Q.js.map +7 -0
  87. package/dist/chunk-WVHORZQ5.js +17 -0
  88. package/dist/chunk-WVHORZQ5.js.map +7 -0
  89. package/dist/chunk-WWUWDNWW.js +49 -0
  90. package/dist/chunk-WWUWDNWW.js.map +7 -0
  91. package/dist/chunk-YC6LJCDE.js +511 -0
  92. package/dist/chunk-YC6LJCDE.js.map +7 -0
  93. package/dist/chunk-YXYYDIMI.js +2931 -0
  94. package/dist/chunk-YXYYDIMI.js.map +7 -0
  95. package/dist/chunk-ZVDRDPII.js +138 -0
  96. package/dist/chunk-ZVDRDPII.js.map +7 -0
  97. package/dist/cli-DOPVY2CW.js +3917 -0
  98. package/dist/cli-DOPVY2CW.js.map +7 -0
  99. package/dist/commands-2BF2CJ3A.js +46 -0
  100. package/dist/config-RUSD6G5Y.js +81 -0
  101. package/dist/context-6FXPETYH.js +30 -0
  102. package/dist/costTracker-6SL26FDB.js +19 -0
  103. package/dist/customCommands-TOIJFZAL.js +25 -0
  104. package/dist/customCommands-TOIJFZAL.js.map +7 -0
  105. package/dist/env-XGKBLU3D.js +22 -0
  106. package/dist/env-XGKBLU3D.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-MITZADPB.js +18 -0
  112. package/dist/kodeAgentSessionLoad-MITZADPB.js.map +7 -0
  113. package/dist/kodeAgentSessionResume-GVRWB4WO.js +16 -0
  114. package/dist/kodeAgentSessionResume-GVRWB4WO.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-UGEZJJEB.js +131 -0
  118. package/dist/kodeAgentStreamJsonSession-UGEZJJEB.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-QWM36A3D.js +36 -0
  122. package/dist/kodeHooks-QWM36A3D.js.map +7 -0
  123. package/dist/llm-ZUQC4WYM.js +3118 -0
  124. package/dist/llm-ZUQC4WYM.js.map +7 -0
  125. package/dist/llmLazy-54QQHA54.js +15 -0
  126. package/dist/llmLazy-54QQHA54.js.map +7 -0
  127. package/dist/loader-FYHJQES5.js +28 -0
  128. package/dist/loader-FYHJQES5.js.map +7 -0
  129. package/dist/mcp-J332IKT3.js +49 -0
  130. package/dist/mcp-J332IKT3.js.map +7 -0
  131. package/dist/{services/mentionProcessor.js → mentionProcessor-EE3XFHCJ.js} +61 -50
  132. package/dist/mentionProcessor-EE3XFHCJ.js.map +7 -0
  133. package/dist/messages-EOYQKPGM.js +63 -0
  134. package/dist/messages-EOYQKPGM.js.map +7 -0
  135. package/dist/model-FV3JDJKH.js +30 -0
  136. package/dist/model-FV3JDJKH.js.map +7 -0
  137. package/dist/openai-RRCWW33N.js +29 -0
  138. package/dist/openai-RRCWW33N.js.map +7 -0
  139. package/dist/outputStyles-62Q3VH2J.js +28 -0
  140. package/dist/outputStyles-62Q3VH2J.js.map +7 -0
  141. package/dist/package.json +1 -1
  142. package/dist/pluginRuntime-6ETCZ2LL.js +218 -0
  143. package/dist/pluginRuntime-6ETCZ2LL.js.map +7 -0
  144. package/dist/pluginValidation-I4YKUWGS.js +17 -0
  145. package/dist/pluginValidation-I4YKUWGS.js.map +7 -0
  146. package/dist/prompts-ZLEKDD77.js +48 -0
  147. package/dist/prompts-ZLEKDD77.js.map +7 -0
  148. package/dist/query-VFRJPBGD.js +50 -0
  149. package/dist/query-VFRJPBGD.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-3NTIKQYW.js +17 -0
  153. package/dist/ripgrep-3NTIKQYW.js.map +7 -0
  154. package/dist/skillMarketplace-3RXQBVOL.js +37 -0
  155. package/dist/skillMarketplace-3RXQBVOL.js.map +7 -0
  156. package/dist/state-P5G6CO5V.js +16 -0
  157. package/dist/state-P5G6CO5V.js.map +7 -0
  158. package/dist/theme-3LWP3BG7.js +14 -0
  159. package/dist/theme-3LWP3BG7.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-3ROBVTUK.js +18 -0
  163. package/dist/toolPermissionSettings-3ROBVTUK.js.map +7 -0
  164. package/dist/tools-RO7HSSE5.js +47 -0
  165. package/dist/tools-RO7HSSE5.js.map +7 -0
  166. package/dist/userInput-JSBJRFSK.js +311 -0
  167. package/dist/userInput-JSBJRFSK.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 -15
  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 -326
  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 -31
  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 -501
  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 -1029
  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 -1122
  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 -143
  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 -596
  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 -293
  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 +0 -360
  633. package/dist/utils/autoUpdater.js.map +0 -7
  634. package/dist/utils/betas.js +0 -21
  635. package/dist/utils/betas.js.map +0 -7
  636. package/dist/utils/browser.js +0 -15
  637. package/dist/utils/browser.js.map +0 -7
  638. package/dist/utils/cleanup.js +0 -54
  639. package/dist/utils/cleanup.js.map +0 -7
  640. package/dist/utils/commands.js +0 -207
  641. package/dist/utils/commands.js.map +0 -7
  642. package/dist/utils/commonUnixCommands.js +0 -687
  643. package/dist/utils/commonUnixCommands.js.map +0 -7
  644. package/dist/utils/config.js.map +0 -7
  645. package/dist/utils/conversationRecovery.js +0 -35
  646. package/dist/utils/conversationRecovery.js.map +0 -7
  647. package/dist/utils/debugLogger.js.map +0 -7
  648. package/dist/utils/diff.js +0 -32
  649. package/dist/utils/diff.js.map +0 -7
  650. package/dist/utils/env.js +0 -44
  651. package/dist/utils/env.js.map +0 -7
  652. package/dist/utils/errors.js +0 -23
  653. package/dist/utils/errors.js.map +0 -7
  654. package/dist/utils/exampleCommands.js +0 -80
  655. package/dist/utils/exampleCommands.js.map +0 -7
  656. package/dist/utils/execFileNoThrow.js +0 -44
  657. package/dist/utils/execFileNoThrow.js.map +0 -7
  658. package/dist/utils/expertChatStorage.js +0 -78
  659. package/dist/utils/expertChatStorage.js.map +0 -7
  660. package/dist/utils/file.js +0 -282
  661. package/dist/utils/file.js.map +0 -7
  662. package/dist/utils/fileRecoveryCore.js +0 -41
  663. package/dist/utils/fileRecoveryCore.js.map +0 -7
  664. package/dist/utils/format.js +0 -41
  665. package/dist/utils/format.js.map +0 -7
  666. package/dist/utils/fuzzyMatcher.js +0 -252
  667. package/dist/utils/fuzzyMatcher.js.map +0 -7
  668. package/dist/utils/generators.js +0 -46
  669. package/dist/utils/generators.js.map +0 -7
  670. package/dist/utils/git.js +0 -83
  671. package/dist/utils/git.js.map +0 -7
  672. package/dist/utils/globalLogger.js +0 -54
  673. package/dist/utils/globalLogger.js.map +0 -7
  674. package/dist/utils/http.js +0 -7
  675. package/dist/utils/http.js.map +0 -7
  676. package/dist/utils/imagePaste.js +0 -29
  677. package/dist/utils/imagePaste.js.map +0 -7
  678. package/dist/utils/json.js +0 -16
  679. package/dist/utils/json.js.map +0 -7
  680. package/dist/utils/log.js +0 -298
  681. package/dist/utils/log.js.map +0 -7
  682. package/dist/utils/markdown.js +0 -187
  683. package/dist/utils/markdown.js.map +0 -7
  684. package/dist/utils/messageContextManager.js +0 -195
  685. package/dist/utils/messageContextManager.js.map +0 -7
  686. package/dist/utils/messages.js +0 -633
  687. package/dist/utils/messages.js.map +0 -7
  688. package/dist/utils/model.js.map +0 -7
  689. package/dist/utils/permissions/filesystem.js +0 -80
  690. package/dist/utils/permissions/filesystem.js.map +0 -7
  691. package/dist/utils/responseState.js +0 -20
  692. package/dist/utils/responseState.js.map +0 -7
  693. package/dist/utils/ripgrep.js +0 -131
  694. package/dist/utils/ripgrep.js.map +0 -7
  695. package/dist/utils/secureFile.js +0 -483
  696. package/dist/utils/secureFile.js.map +0 -7
  697. package/dist/utils/sessionState.js +0 -31
  698. package/dist/utils/sessionState.js.map +0 -7
  699. package/dist/utils/state.js +0 -24
  700. package/dist/utils/state.js.map +0 -7
  701. package/dist/utils/style.js +0 -31
  702. package/dist/utils/style.js.map +0 -7
  703. package/dist/utils/terminal.js +0 -43
  704. package/dist/utils/terminal.js.map +0 -7
  705. package/dist/utils/theme.js.map +0 -7
  706. package/dist/utils/thinking.js +0 -103
  707. package/dist/utils/thinking.js.map +0 -7
  708. package/dist/utils/todoStorage.js +0 -291
  709. package/dist/utils/todoStorage.js.map +0 -7
  710. package/dist/utils/tokens.js +0 -30
  711. package/dist/utils/tokens.js.map +0 -7
  712. package/dist/utils/toolExecutionController.js +0 -109
  713. package/dist/utils/toolExecutionController.js.map +0 -7
  714. package/dist/utils/unaryLogging.js +0 -14
  715. package/dist/utils/unaryLogging.js.map +0 -7
  716. package/dist/utils/user.js +0 -40
  717. package/dist/utils/user.js.map +0 -7
  718. package/dist/utils/validate.js +0 -132
  719. package/dist/utils/validate.js.map +0 -7
  720. /package/dist/{Tool.js.map → REPL-CW7AYLVL.js.map} +0 -0
  721. /package/dist/{components/CustomSelect/theme.js.map → autoUpdater-ITPIHCOI.js.map} +0 -0
  722. /package/dist/{types/common.d.js.map → chunk-JC6NCUG5.js.map} +0 -0
  723. /package/dist/{types/conversation.js.map → commands-2BF2CJ3A.js.map} +0 -0
  724. /package/dist/{types/logs.js.map → config-RUSD6G5Y.js.map} +0 -0
  725. /package/dist/{types/modelCapabilities.js.map → context-6FXPETYH.js.map} +0 -0
  726. /package/dist/{types/notebook.js.map → costTracker-6SL26FDB.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/tools/MultiEditTool/MultiEditTool.tsx"],
4
- "sourcesContent": ["import { existsSync, mkdirSync, readFileSync, statSync } from 'fs'\nimport { Box, Text } from 'ink'\nimport { dirname, isAbsolute, relative, resolve, sep } from 'path'\nimport * as React from 'react'\nimport { z } from 'zod'\nimport { FileEditToolUpdatedMessage } from '../../components/FileEditToolUpdatedMessage'\nimport { StructuredDiff } from '../../components/StructuredDiff'\nimport { logEvent } from '../../services/statsig'\nimport { Tool, ValidationResult } from '../../Tool'\nimport { intersperse } from '../../utils/array'\nimport {\n addLineNumbers,\n detectFileEncoding,\n detectLineEndings,\n findSimilarFile,\n writeTextContent,\n} from '../../utils/file.js'\nimport { logError } from '../../utils/log'\nimport { getCwd } from '../../utils/state'\nimport { getTheme } from '../../utils/theme'\nimport { NotebookEditTool } from '../NotebookEditTool/NotebookEditTool'\n// Local content-based edit function for MultiEditTool\nfunction applyContentEdit(\n content: string,\n oldString: string,\n newString: string,\n replaceAll: boolean = false\n): { newContent: string; occurrences: number } {\n if (replaceAll) {\n const regex = new RegExp(oldString.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g')\n const matches = content.match(regex)\n const occurrences = matches ? matches.length : 0\n const newContent = content.replace(regex, newString)\n return { newContent, occurrences }\n } else {\n if (content.includes(oldString)) {\n const newContent = content.replace(oldString, newString)\n return { newContent, occurrences: 1 }\n } else {\n throw new Error(`String not found: ${oldString.substring(0, 50)}...`)\n }\n }\n}\nimport { hasWritePermission } from '../../utils/permissions/filesystem'\nimport { PROJECT_FILE } from '../../constants/product'\nimport { DESCRIPTION, PROMPT } from './prompt'\nimport { emitReminderEvent } from '../../services/systemReminder'\nimport { recordFileEdit } from '../../services/fileFreshness'\n\nconst EditSchema = z.object({\n old_string: z.string().describe('The text to replace'),\n new_string: z.string().describe('The text to replace it with'),\n replace_all: z\n .boolean()\n .optional()\n .default(false)\n .describe('Replace all occurences of old_string (default false)'),\n})\n\nconst inputSchema = z.strictObject({\n file_path: z.string().describe('The absolute path to the file to modify'),\n edits: z\n .array(EditSchema)\n .min(1)\n .describe('Array of edit operations to perform sequentially on the file'),\n})\n\nexport type In = typeof inputSchema\n\n// Number of lines of context to include before/after the change in our result message\nconst N_LINES_SNIPPET = 4\n\nexport const MultiEditTool = {\n name: 'MultiEdit',\n async description() {\n return 'A tool for making multiple edits to a single file atomically'\n },\n async prompt() {\n return PROMPT\n },\n inputSchema,\n userFacingName() {\n return 'Multi-Edit'\n },\n async isEnabled() {\n return true\n },\n isReadOnly() {\n return false\n },\n isConcurrencySafe() {\n return false // MultiEdit modifies files, not safe for concurrent execution\n },\n needsPermissions(input?: z.infer<typeof inputSchema>) {\n if (!input) return true\n return !hasWritePermission(input.file_path)\n },\n renderResultForAssistant(content) {\n return content\n },\n renderToolUseMessage(input, { verbose }) {\n const { file_path, edits } = input\n const workingDir = getCwd()\n const relativePath = isAbsolute(file_path)\n ? relative(workingDir, file_path)\n : file_path\n\n if (verbose) {\n const editSummary = edits\n .map(\n (edit, index) =>\n `${index + 1}. Replace \"${edit.old_string.substring(0, 50)}${edit.old_string.length > 50 ? '...' : ''}\" with \"${edit.new_string.substring(0, 50)}${edit.new_string.length > 50 ? '...' : ''}\"`,\n )\n .join('\\n')\n return `Multiple edits to ${relativePath}:\\n${editSummary}`\n }\n\n return `Making ${edits.length} edits to ${relativePath}`\n },\n renderToolUseRejectedMessage() {\n return (\n <Box>\n <Text color={getTheme().error}>\u26A0 Edit request rejected</Text>\n </Box>\n )\n },\n renderToolResultMessage(output) {\n if (typeof output === 'string') {\n const isError = output.includes('Error:')\n return (\n <Box flexDirection=\"column\">\n <Text color={isError ? getTheme().error : getTheme().success}>\n {output}\n </Text>\n </Box>\n )\n }\n\n return <FileEditToolUpdatedMessage {...output} />\n },\n async validateInput(\n { file_path, edits }: z.infer<typeof inputSchema>,\n context?: { readFileTimestamps?: Record<string, number> },\n ): Promise<ValidationResult> {\n const workingDir = getCwd()\n const normalizedPath = isAbsolute(file_path)\n ? resolve(file_path)\n : resolve(workingDir, file_path)\n\n // Check if it's a notebook file\n if (normalizedPath.endsWith('.ipynb')) {\n return {\n result: false,\n errorCode: 1,\n message: `For Jupyter notebooks (.ipynb files), use the ${NotebookEditTool.name} tool instead.`,\n }\n }\n\n // For new files, check parent directory exists\n if (!existsSync(normalizedPath)) {\n const parentDir = dirname(normalizedPath)\n if (!existsSync(parentDir)) {\n return {\n result: false,\n errorCode: 2,\n message: `Parent directory does not exist: ${parentDir}`,\n }\n }\n\n // For new files, ensure first edit creates the file (empty old_string)\n if (edits.length === 0 || edits[0].old_string !== '') {\n return {\n result: false,\n errorCode: 6,\n message:\n 'For new files, the first edit must have an empty old_string to create the file content.',\n }\n }\n } else {\n // For existing files, apply file protection mechanisms\n const readFileTimestamps = context?.readFileTimestamps || {}\n const readTimestamp = readFileTimestamps[normalizedPath]\n\n if (!readTimestamp) {\n return {\n result: false,\n errorCode: 7,\n message:\n 'File has not been read yet. Read it first before editing it.',\n meta: {\n filePath: normalizedPath,\n isFilePathAbsolute: String(isAbsolute(file_path)),\n },\n }\n }\n\n // Check if file has been modified since last read\n const stats = statSync(normalizedPath)\n const lastWriteTime = stats.mtimeMs\n if (lastWriteTime > readTimestamp) {\n return {\n result: false,\n errorCode: 8,\n message:\n 'File has been modified since read, either by the user or by a linter. Read it again before attempting to edit it.',\n meta: {\n filePath: normalizedPath,\n lastWriteTime,\n readTimestamp,\n },\n }\n }\n\n // Pre-validate that all old_strings exist in the file\n const encoding = detectFileEncoding(normalizedPath)\n if (encoding === 'binary') {\n return {\n result: false,\n errorCode: 9,\n message: 'Cannot edit binary files.',\n }\n }\n\n const currentContent = readFileSync(normalizedPath, 'utf-8')\n for (let i = 0; i < edits.length; i++) {\n const edit = edits[i]\n if (\n edit.old_string !== '' &&\n !currentContent.includes(edit.old_string)\n ) {\n return {\n result: false,\n errorCode: 10,\n message: `Edit ${i + 1}: String to replace not found in file: \"${edit.old_string.substring(0, 100)}${edit.old_string.length > 100 ? '...' : ''}\"`,\n meta: {\n editIndex: i + 1,\n oldString: edit.old_string.substring(0, 200),\n },\n }\n }\n }\n }\n\n // Validate each edit\n for (let i = 0; i < edits.length; i++) {\n const edit = edits[i]\n if (edit.old_string === edit.new_string) {\n return {\n result: false,\n errorCode: 3,\n message: `Edit ${i + 1}: old_string and new_string cannot be the same`,\n }\n }\n }\n\n return { result: true }\n },\n async *call({ file_path, edits }, { readFileTimestamps }) {\n const startTime = Date.now()\n const workingDir = getCwd()\n const filePath = isAbsolute(file_path)\n ? resolve(file_path)\n : resolve(workingDir, file_path)\n\n try {\n // Read current file content (or empty for new files)\n let currentContent = ''\n let fileExists = existsSync(filePath)\n\n if (fileExists) {\n const encoding = detectFileEncoding(filePath)\n if (encoding === 'binary') {\n yield {\n type: 'result',\n data: 'Error: Cannot edit binary files',\n resultForAssistant: 'Error: Cannot edit binary files',\n }\n return\n }\n currentContent = readFileSync(filePath, 'utf-8')\n } else {\n // For new files, ensure parent directory exists\n const parentDir = dirname(filePath)\n if (!existsSync(parentDir)) {\n mkdirSync(parentDir, { recursive: true })\n }\n }\n\n // Apply all edits sequentially\n let modifiedContent = currentContent\n const appliedEdits = []\n\n for (let i = 0; i < edits.length; i++) {\n const edit = edits[i]\n const { old_string, new_string, replace_all } = edit\n\n try {\n const result = applyContentEdit(\n modifiedContent,\n old_string,\n new_string,\n replace_all,\n )\n modifiedContent = result.newContent\n appliedEdits.push({\n editIndex: i + 1,\n success: true,\n old_string: old_string.substring(0, 100),\n new_string: new_string.substring(0, 100),\n occurrences: result.occurrences,\n })\n } catch (error) {\n // If any edit fails, abort the entire operation\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error'\n yield {\n type: 'result',\n data: `Error in edit ${i + 1}: ${errorMessage}`,\n resultForAssistant: `Error in edit ${i + 1}: ${errorMessage}`,\n }\n return\n }\n }\n\n // Write the modified content\n const lineEndings = fileExists ? detectLineEndings(currentContent) : 'LF'\n const encoding = fileExists ? detectFileEncoding(filePath) : 'utf8'\n writeTextContent(filePath, modifiedContent, encoding, lineEndings)\n\n // Record Agent edit operation for file freshness tracking\n recordFileEdit(filePath, modifiedContent)\n\n // Update readFileTimestamps to prevent stale file warnings\n readFileTimestamps[filePath] = Date.now()\n\n // Emit file edited event for system reminders\n emitReminderEvent('file:edited', {\n filePath,\n edits: edits.map(e => ({\n oldString: e.old_string,\n newString: e.new_string,\n })),\n originalContent: currentContent,\n newContent: modifiedContent,\n timestamp: Date.now(),\n operation: fileExists ? 'update' : 'create',\n })\n\n // Generate result data\n const relativePath = relative(workingDir, filePath)\n const summary = `Successfully applied ${edits.length} edits to ${relativePath}`\n\n const resultData = {\n filePath: relativePath,\n wasNewFile: !fileExists,\n editsApplied: appliedEdits,\n totalEdits: edits.length,\n summary,\n }\n\n // Log the operation\n logEvent('multi_edit_tool_used', {\n file_path: relativePath,\n edits_count: String(edits.length),\n was_new_file: String(!fileExists),\n duration_ms: String(Date.now() - startTime),\n })\n\n yield {\n type: 'result',\n data: resultData,\n resultForAssistant: summary,\n }\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Unknown error occurred'\n const errorResult = `Error applying multi-edit: ${errorMessage}`\n\n logError(error)\n\n yield {\n type: 'result',\n data: errorResult,\n resultForAssistant: errorResult,\n }\n }\n },\n} satisfies Tool<typeof inputSchema, any>\n"],
5
- "mappings": "AAAA,SAAS,YAAY,WAAW,cAAc,gBAAgB;AAC9D,SAAS,KAAK,YAAY;AAC1B,SAAS,SAAS,YAAY,UAAU,eAAoB;AAC5D,YAAY,WAAW;AACvB,SAAS,SAAS;AAClB,SAAS,kCAAkC;AAE3C,SAAS,gBAAgB;AAGzB;AAAA,EAEE;AAAA,EACA;AAAA,EAEA;AAAA,OACK;AACP,SAAS,gBAAgB;AACzB,SAAS,cAAc;AACvB,SAAS,gBAAgB;AACzB,SAAS,wBAAwB;AAEjC,SAAS,iBACP,SACA,WACA,WACA,aAAsB,OACuB;AAC7C,MAAI,YAAY;AACd,UAAM,QAAQ,IAAI,OAAO,UAAU,QAAQ,uBAAuB,MAAM,GAAG,GAAG;AAC9E,UAAM,UAAU,QAAQ,MAAM,KAAK;AACnC,UAAM,cAAc,UAAU,QAAQ,SAAS;AAC/C,UAAM,aAAa,QAAQ,QAAQ,OAAO,SAAS;AACnD,WAAO,EAAE,YAAY,YAAY;AAAA,EACnC,OAAO;AACL,QAAI,QAAQ,SAAS,SAAS,GAAG;AAC/B,YAAM,aAAa,QAAQ,QAAQ,WAAW,SAAS;AACvD,aAAO,EAAE,YAAY,aAAa,EAAE;AAAA,IACtC,OAAO;AACL,YAAM,IAAI,MAAM,qBAAqB,UAAU,UAAU,GAAG,EAAE,CAAC,KAAK;AAAA,IACtE;AAAA,EACF;AACF;AACA,SAAS,0BAA0B;AAEnC,SAAsB,cAAc;AACpC,SAAS,yBAAyB;AAClC,SAAS,sBAAsB;AAE/B,MAAM,aAAa,EAAE,OAAO;AAAA,EAC1B,YAAY,EAAE,OAAO,EAAE,SAAS,qBAAqB;AAAA,EACrD,YAAY,EAAE,OAAO,EAAE,SAAS,6BAA6B;AAAA,EAC7D,aAAa,EACV,QAAQ,EACR,SAAS,EACT,QAAQ,KAAK,EACb,SAAS,sDAAsD;AACpE,CAAC;AAED,MAAM,cAAc,EAAE,aAAa;AAAA,EACjC,WAAW,EAAE,OAAO,EAAE,SAAS,yCAAyC;AAAA,EACxE,OAAO,EACJ,MAAM,UAAU,EAChB,IAAI,CAAC,EACL,SAAS,8DAA8D;AAC5E,CAAC;AAKD,MAAM,kBAAkB;AAEjB,MAAM,gBAAgB;AAAA,EAC3B,MAAM;AAAA,EACN,MAAM,cAAc;AAClB,WAAO;AAAA,EACT;AAAA,EACA,MAAM,SAAS;AACb,WAAO;AAAA,EACT;AAAA,EACA;AAAA,EACA,iBAAiB;AACf,WAAO;AAAA,EACT;AAAA,EACA,MAAM,YAAY;AAChB,WAAO;AAAA,EACT;AAAA,EACA,aAAa;AACX,WAAO;AAAA,EACT;AAAA,EACA,oBAAoB;AAClB,WAAO;AAAA,EACT;AAAA,EACA,iBAAiB,OAAqC;AACpD,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,CAAC,mBAAmB,MAAM,SAAS;AAAA,EAC5C;AAAA,EACA,yBAAyB,SAAS;AAChC,WAAO;AAAA,EACT;AAAA,EACA,qBAAqB,OAAO,EAAE,QAAQ,GAAG;AACvC,UAAM,EAAE,WAAW,MAAM,IAAI;AAC7B,UAAM,aAAa,OAAO;AAC1B,UAAM,eAAe,WAAW,SAAS,IACrC,SAAS,YAAY,SAAS,IAC9B;AAEJ,QAAI,SAAS;AACX,YAAM,cAAc,MACjB;AAAA,QACC,CAAC,MAAM,UACL,GAAG,QAAQ,CAAC,cAAc,KAAK,WAAW,UAAU,GAAG,EAAE,CAAC,GAAG,KAAK,WAAW,SAAS,KAAK,QAAQ,EAAE,WAAW,KAAK,WAAW,UAAU,GAAG,EAAE,CAAC,GAAG,KAAK,WAAW,SAAS,KAAK,QAAQ,EAAE;AAAA,MAC/L,EACC,KAAK,IAAI;AACZ,aAAO,qBAAqB,YAAY;AAAA,EAAM,WAAW;AAAA,IAC3D;AAEA,WAAO,UAAU,MAAM,MAAM,aAAa,YAAY;AAAA,EACxD;AAAA,EACA,+BAA+B;AAC7B,WACE,oCAAC,WACC,oCAAC,QAAK,OAAO,SAAS,EAAE,SAAO,8BAAuB,CACxD;AAAA,EAEJ;AAAA,EACA,wBAAwB,QAAQ;AAC9B,QAAI,OAAO,WAAW,UAAU;AAC9B,YAAM,UAAU,OAAO,SAAS,QAAQ;AACxC,aACE,oCAAC,OAAI,eAAc,YACjB,oCAAC,QAAK,OAAO,UAAU,SAAS,EAAE,QAAQ,SAAS,EAAE,WAClD,MACH,CACF;AAAA,IAEJ;AAEA,WAAO,oCAAC,8BAA4B,GAAG,QAAQ;AAAA,EACjD;AAAA,EACA,MAAM,cACJ,EAAE,WAAW,MAAM,GACnB,SAC2B;AAC3B,UAAM,aAAa,OAAO;AAC1B,UAAM,iBAAiB,WAAW,SAAS,IACvC,QAAQ,SAAS,IACjB,QAAQ,YAAY,SAAS;AAGjC,QAAI,eAAe,SAAS,QAAQ,GAAG;AACrC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,SAAS,iDAAiD,iBAAiB,IAAI;AAAA,MACjF;AAAA,IACF;AAGA,QAAI,CAAC,WAAW,cAAc,GAAG;AAC/B,YAAM,YAAY,QAAQ,cAAc;AACxC,UAAI,CAAC,WAAW,SAAS,GAAG;AAC1B,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,SAAS,oCAAoC,SAAS;AAAA,QACxD;AAAA,MACF;AAGA,UAAI,MAAM,WAAW,KAAK,MAAM,CAAC,EAAE,eAAe,IAAI;AACpD,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,SACE;AAAA,QACJ;AAAA,MACF;AAAA,IACF,OAAO;AAEL,YAAM,qBAAqB,SAAS,sBAAsB,CAAC;AAC3D,YAAM,gBAAgB,mBAAmB,cAAc;AAEvD,UAAI,CAAC,eAAe;AAClB,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,SACE;AAAA,UACF,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,oBAAoB,OAAO,WAAW,SAAS,CAAC;AAAA,UAClD;AAAA,QACF;AAAA,MACF;AAGA,YAAM,QAAQ,SAAS,cAAc;AACrC,YAAM,gBAAgB,MAAM;AAC5B,UAAI,gBAAgB,eAAe;AACjC,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,SACE;AAAA,UACF,MAAM;AAAA,YACJ,UAAU;AAAA,YACV;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAGA,YAAM,WAAW,mBAAmB,cAAc;AAClD,UAAI,aAAa,UAAU;AACzB,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,SAAS;AAAA,QACX;AAAA,MACF;AAEA,YAAM,iBAAiB,aAAa,gBAAgB,OAAO;AAC3D,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,cAAM,OAAO,MAAM,CAAC;AACpB,YACE,KAAK,eAAe,MACpB,CAAC,eAAe,SAAS,KAAK,UAAU,GACxC;AACA,iBAAO;AAAA,YACL,QAAQ;AAAA,YACR,WAAW;AAAA,YACX,SAAS,QAAQ,IAAI,CAAC,2CAA2C,KAAK,WAAW,UAAU,GAAG,GAAG,CAAC,GAAG,KAAK,WAAW,SAAS,MAAM,QAAQ,EAAE;AAAA,YAC9I,MAAM;AAAA,cACJ,WAAW,IAAI;AAAA,cACf,WAAW,KAAK,WAAW,UAAU,GAAG,GAAG;AAAA,YAC7C;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,OAAO,MAAM,CAAC;AACpB,UAAI,KAAK,eAAe,KAAK,YAAY;AACvC,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,SAAS,QAAQ,IAAI,CAAC;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAEA,WAAO,EAAE,QAAQ,KAAK;AAAA,EACxB;AAAA,EACA,OAAO,KAAK,EAAE,WAAW,MAAM,GAAG,EAAE,mBAAmB,GAAG;AACxD,UAAM,YAAY,KAAK,IAAI;AAC3B,UAAM,aAAa,OAAO;AAC1B,UAAM,WAAW,WAAW,SAAS,IACjC,QAAQ,SAAS,IACjB,QAAQ,YAAY,SAAS;AAEjC,QAAI;AAEF,UAAI,iBAAiB;AACrB,UAAI,aAAa,WAAW,QAAQ;AAEpC,UAAI,YAAY;AACd,cAAMA,YAAW,mBAAmB,QAAQ;AAC5C,YAAIA,cAAa,UAAU;AACzB,gBAAM;AAAA,YACJ,MAAM;AAAA,YACN,MAAM;AAAA,YACN,oBAAoB;AAAA,UACtB;AACA;AAAA,QACF;AACA,yBAAiB,aAAa,UAAU,OAAO;AAAA,MACjD,OAAO;AAEL,cAAM,YAAY,QAAQ,QAAQ;AAClC,YAAI,CAAC,WAAW,SAAS,GAAG;AAC1B,oBAAU,WAAW,EAAE,WAAW,KAAK,CAAC;AAAA,QAC1C;AAAA,MACF;AAGA,UAAI,kBAAkB;AACtB,YAAM,eAAe,CAAC;AAEtB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,cAAM,OAAO,MAAM,CAAC;AACpB,cAAM,EAAE,YAAY,YAAY,YAAY,IAAI;AAEhD,YAAI;AACF,gBAAM,SAAS;AAAA,YACb;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AACA,4BAAkB,OAAO;AACzB,uBAAa,KAAK;AAAA,YAChB,WAAW,IAAI;AAAA,YACf,SAAS;AAAA,YACT,YAAY,WAAW,UAAU,GAAG,GAAG;AAAA,YACvC,YAAY,WAAW,UAAU,GAAG,GAAG;AAAA,YACvC,aAAa,OAAO;AAAA,UACtB,CAAC;AAAA,QACH,SAAS,OAAO;AAEd,gBAAM,eACJ,iBAAiB,QAAQ,MAAM,UAAU;AAC3C,gBAAM;AAAA,YACJ,MAAM;AAAA,YACN,MAAM,iBAAiB,IAAI,CAAC,KAAK,YAAY;AAAA,YAC7C,oBAAoB,iBAAiB,IAAI,CAAC,KAAK,YAAY;AAAA,UAC7D;AACA;AAAA,QACF;AAAA,MACF;AAGA,YAAM,cAAc,aAAa,kBAAkB,cAAc,IAAI;AACrE,YAAM,WAAW,aAAa,mBAAmB,QAAQ,IAAI;AAC7D,uBAAiB,UAAU,iBAAiB,UAAU,WAAW;AAGjE,qBAAe,UAAU,eAAe;AAGxC,yBAAmB,QAAQ,IAAI,KAAK,IAAI;AAGxC,wBAAkB,eAAe;AAAA,QAC/B;AAAA,QACA,OAAO,MAAM,IAAI,QAAM;AAAA,UACrB,WAAW,EAAE;AAAA,UACb,WAAW,EAAE;AAAA,QACf,EAAE;AAAA,QACF,iBAAiB;AAAA,QACjB,YAAY;AAAA,QACZ,WAAW,KAAK,IAAI;AAAA,QACpB,WAAW,aAAa,WAAW;AAAA,MACrC,CAAC;AAGD,YAAM,eAAe,SAAS,YAAY,QAAQ;AAClD,YAAM,UAAU,wBAAwB,MAAM,MAAM,aAAa,YAAY;AAE7E,YAAM,aAAa;AAAA,QACjB,UAAU;AAAA,QACV,YAAY,CAAC;AAAA,QACb,cAAc;AAAA,QACd,YAAY,MAAM;AAAA,QAClB;AAAA,MACF;AAGA,eAAS,wBAAwB;AAAA,QAC/B,WAAW;AAAA,QACX,aAAa,OAAO,MAAM,MAAM;AAAA,QAChC,cAAc,OAAO,CAAC,UAAU;AAAA,QAChC,aAAa,OAAO,KAAK,IAAI,IAAI,SAAS;AAAA,MAC5C,CAAC;AAED,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,oBAAoB;AAAA,MACtB;AAAA,IACF,SAAS,OAAO;AACd,YAAM,eACJ,iBAAiB,QAAQ,MAAM,UAAU;AAC3C,YAAM,cAAc,8BAA8B,YAAY;AAE9D,eAAS,KAAK;AAEd,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,oBAAoB;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AACF;",
6
- "names": ["encoding"]
7
- }
@@ -1,48 +0,0 @@
1
- import { NotebookEditTool } from "../NotebookEditTool/NotebookEditTool.js";
2
- const DESCRIPTION = `This is a tool for making multiple edits to a single file in one operation. It is built on top of the Edit tool and allows you to perform multiple find-and-replace operations efficiently. Prefer this tool over the Edit tool when you need to make multiple edits to the same file.
3
-
4
- Before using this tool:
5
-
6
- 1. Use the Read tool to understand the file's contents and context
7
- 2. Verify the directory path is correct
8
-
9
- To make multiple file edits, provide the following:
10
- 1. file_path: The absolute path to the file to modify (must be absolute, not relative)
11
- 2. edits: An array of edit operations to perform, where each edit contains:
12
- - old_string: The text to replace (must match the file contents exactly, including all whitespace and indentation)
13
- - new_string: The edited text to replace the old_string
14
- - replace_all: Replace all occurences of old_string. This parameter is optional and defaults to false.
15
-
16
- IMPORTANT:
17
- - All edits are applied in sequence, in the order they are provided
18
- - Each edit operates on the result of the previous edit
19
- - All edits must be valid for the operation to succeed - if any edit fails, none will be applied
20
- - This tool is ideal when you need to make several changes to different parts of the same file
21
- - For Jupyter notebooks (.ipynb files), use the ${NotebookEditTool.name} instead
22
-
23
- CRITICAL REQUIREMENTS:
24
- 1. All edits follow the same requirements as the single Edit tool
25
- 2. The edits are atomic - either all succeed or none are applied
26
- 3. Plan your edits carefully to avoid conflicts between sequential operations
27
-
28
- WARNING:
29
- - The tool will fail if edits.old_string doesn't match the file contents exactly (including whitespace)
30
- - The tool will fail if edits.old_string and edits.new_string are the same
31
- - Since edits are applied in sequence, ensure that earlier edits don't affect the text that later edits are trying to find
32
-
33
- When making edits:
34
- - Ensure all edits result in idiomatic, correct code
35
- - Do not leave the code in a broken state
36
- - Always use absolute file paths (starting with /)
37
- - Use replace_all for replacing and renaming strings across the file. This parameter is useful if you want to rename a variable for instance.
38
-
39
- If you want to create a new file, use:
40
- - A new file path, including dir name if needed
41
- - First edit: empty old_string and the new file's contents as new_string
42
- - Subsequent edits: normal edit operations on the created content`;
43
- const PROMPT = DESCRIPTION;
44
- export {
45
- DESCRIPTION,
46
- PROMPT
47
- };
48
- //# sourceMappingURL=prompt.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/tools/MultiEditTool/prompt.ts"],
4
- "sourcesContent": ["import { NotebookEditTool } from '../NotebookEditTool/NotebookEditTool'\n\nexport const DESCRIPTION = `This is a tool for making multiple edits to a single file in one operation. It is built on top of the Edit tool and allows you to perform multiple find-and-replace operations efficiently. Prefer this tool over the Edit tool when you need to make multiple edits to the same file.\n\nBefore using this tool:\n\n1. Use the Read tool to understand the file's contents and context\n2. Verify the directory path is correct\n\nTo make multiple file edits, provide the following:\n1. file_path: The absolute path to the file to modify (must be absolute, not relative)\n2. edits: An array of edit operations to perform, where each edit contains:\n - old_string: The text to replace (must match the file contents exactly, including all whitespace and indentation)\n - new_string: The edited text to replace the old_string\n - replace_all: Replace all occurences of old_string. This parameter is optional and defaults to false.\n\nIMPORTANT:\n- All edits are applied in sequence, in the order they are provided\n- Each edit operates on the result of the previous edit\n- All edits must be valid for the operation to succeed - if any edit fails, none will be applied\n- This tool is ideal when you need to make several changes to different parts of the same file\n- For Jupyter notebooks (.ipynb files), use the ${NotebookEditTool.name} instead\n\nCRITICAL REQUIREMENTS:\n1. All edits follow the same requirements as the single Edit tool\n2. The edits are atomic - either all succeed or none are applied\n3. Plan your edits carefully to avoid conflicts between sequential operations\n\nWARNING:\n- The tool will fail if edits.old_string doesn't match the file contents exactly (including whitespace)\n- The tool will fail if edits.old_string and edits.new_string are the same\n- Since edits are applied in sequence, ensure that earlier edits don't affect the text that later edits are trying to find\n\nWhen making edits:\n- Ensure all edits result in idiomatic, correct code\n- Do not leave the code in a broken state\n- Always use absolute file paths (starting with /)\n- Use replace_all for replacing and renaming strings across the file. This parameter is useful if you want to rename a variable for instance.\n\nIf you want to create a new file, use:\n- A new file path, including dir name if needed\n- First edit: empty old_string and the new file's contents as new_string\n- Subsequent edits: normal edit operations on the created content`\n\nexport const PROMPT = DESCRIPTION\n"],
5
- "mappings": "AAAA,SAAS,wBAAwB;AAE1B,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kDAmBuB,iBAAiB,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBhE,MAAM,SAAS;",
6
- "names": []
7
- }
@@ -1,238 +0,0 @@
1
- import { existsSync, readFileSync } from "fs";
2
- import { Box, Text } from "ink";
3
- import { extname, isAbsolute, relative, resolve } from "path";
4
- import * as React from "react";
5
- import { z } from "zod";
6
- import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
7
- import { HighlightedCode } from "../../components/HighlightedCode.js";
8
- import {
9
- detectFileEncoding,
10
- detectLineEndings,
11
- writeTextContent
12
- } from "../../utils/file.js";
13
- import { safeParseJSON } from "../../utils/json.js";
14
- import { getCwd } from "../../utils/state.js";
15
- import { DESCRIPTION, PROMPT } from "./prompt.js";
16
- import { hasWritePermission } from "../../utils/permissions/filesystem.js";
17
- import { emitReminderEvent } from "../../services/systemReminder.js";
18
- import { recordFileEdit } from "../../services/fileFreshness.js";
19
- const inputSchema = z.strictObject({
20
- notebook_path: z.string().describe(
21
- "The absolute path to the Jupyter notebook file to edit (must be absolute, not relative)"
22
- ),
23
- cell_number: z.number().describe("The index of the cell to edit (0-based)"),
24
- new_source: z.string().describe("The new source for the cell"),
25
- cell_type: z.enum(["code", "markdown"]).optional().describe(
26
- "The type of the cell (code or markdown). If not specified, it defaults to the current cell type. If using edit_mode=insert, this is required."
27
- ),
28
- edit_mode: z.string().optional().describe(
29
- "The type of edit to make (replace, insert, delete). Defaults to replace."
30
- )
31
- });
32
- const NotebookEditTool = {
33
- name: "NotebookEditCell",
34
- async description() {
35
- return DESCRIPTION;
36
- },
37
- async prompt() {
38
- return PROMPT;
39
- },
40
- inputSchema,
41
- userFacingName() {
42
- return "Edit Notebook";
43
- },
44
- async isEnabled() {
45
- return true;
46
- },
47
- isReadOnly() {
48
- return false;
49
- },
50
- isConcurrencySafe() {
51
- return false;
52
- },
53
- needsPermissions({ notebook_path }) {
54
- return !hasWritePermission(notebook_path);
55
- },
56
- renderResultForAssistant({ cell_number, edit_mode, new_source, error }) {
57
- if (error) {
58
- return error;
59
- }
60
- switch (edit_mode) {
61
- case "replace":
62
- return `Updated cell ${cell_number} with ${new_source}`;
63
- case "insert":
64
- return `Inserted cell ${cell_number} with ${new_source}`;
65
- case "delete":
66
- return `Deleted cell ${cell_number}`;
67
- }
68
- },
69
- renderToolUseMessage(input, { verbose }) {
70
- return `notebook_path: ${verbose ? input.notebook_path : relative(getCwd(), input.notebook_path)}, cell: ${input.cell_number}, content: ${input.new_source.slice(0, 30)}\u2026, cell_type: ${input.cell_type}, edit_mode: ${input.edit_mode ?? "replace"}`;
71
- },
72
- renderToolUseRejectedMessage() {
73
- return /* @__PURE__ */ React.createElement(FallbackToolUseRejectedMessage, null);
74
- },
75
- renderToolResultMessage({ cell_number, new_source, language, error }) {
76
- if (error) {
77
- return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, { color: "red" }, error));
78
- }
79
- return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, null, "Updated cell ", cell_number, ":"), /* @__PURE__ */ React.createElement(Box, { marginLeft: 2 }, /* @__PURE__ */ React.createElement(HighlightedCode, { code: new_source, language })));
80
- },
81
- async validateInput({
82
- notebook_path,
83
- cell_number,
84
- cell_type,
85
- edit_mode = "replace"
86
- }) {
87
- const fullPath = isAbsolute(notebook_path) ? notebook_path : resolve(getCwd(), notebook_path);
88
- if (!existsSync(fullPath)) {
89
- return {
90
- result: false,
91
- message: "Notebook file does not exist."
92
- };
93
- }
94
- if (extname(fullPath) !== ".ipynb") {
95
- return {
96
- result: false,
97
- message: "File must be a Jupyter notebook (.ipynb file). For editing other file types, use the FileEdit tool."
98
- };
99
- }
100
- if (cell_number < 0) {
101
- return {
102
- result: false,
103
- message: "Cell number must be non-negative."
104
- };
105
- }
106
- if (edit_mode !== "replace" && edit_mode !== "insert" && edit_mode !== "delete") {
107
- return {
108
- result: false,
109
- message: "Edit mode must be replace, insert, or delete."
110
- };
111
- }
112
- if (edit_mode === "insert" && !cell_type) {
113
- return {
114
- result: false,
115
- message: "Cell type is required when using edit_mode=insert."
116
- };
117
- }
118
- const enc = detectFileEncoding(fullPath);
119
- const content = readFileSync(fullPath, enc);
120
- const notebook = safeParseJSON(content);
121
- if (!notebook) {
122
- return {
123
- result: false,
124
- message: "Notebook is not valid JSON."
125
- };
126
- }
127
- if (edit_mode === "insert" && cell_number > notebook.cells.length) {
128
- return {
129
- result: false,
130
- message: `Cell number is out of bounds. For insert mode, the maximum value is ${notebook.cells.length} (to append at the end).`
131
- };
132
- } else if ((edit_mode === "replace" || edit_mode === "delete") && (cell_number >= notebook.cells.length || !notebook.cells[cell_number])) {
133
- return {
134
- result: false,
135
- message: `Cell number is out of bounds. Notebook has ${notebook.cells.length} cells.`
136
- };
137
- }
138
- return { result: true };
139
- },
140
- async *call({
141
- notebook_path,
142
- cell_number,
143
- new_source,
144
- cell_type,
145
- edit_mode
146
- }) {
147
- const fullPath = isAbsolute(notebook_path) ? notebook_path : resolve(getCwd(), notebook_path);
148
- try {
149
- const enc = detectFileEncoding(fullPath);
150
- const content = readFileSync(fullPath, enc);
151
- const notebook = JSON.parse(content);
152
- const language = notebook.metadata.language_info?.name ?? "python";
153
- if (edit_mode === "delete") {
154
- notebook.cells.splice(cell_number, 1);
155
- } else if (edit_mode === "insert") {
156
- const new_cell = {
157
- cell_type,
158
- // validateInput ensures cell_type is not undefined
159
- source: new_source,
160
- metadata: {}
161
- };
162
- notebook.cells.splice(
163
- cell_number,
164
- 0,
165
- cell_type == "markdown" ? new_cell : { ...new_cell, outputs: [] }
166
- );
167
- } else {
168
- const targetCell = notebook.cells[cell_number];
169
- targetCell.source = new_source;
170
- targetCell.execution_count = void 0;
171
- targetCell.outputs = [];
172
- if (cell_type && cell_type !== targetCell.cell_type) {
173
- targetCell.cell_type = cell_type;
174
- }
175
- }
176
- const endings = detectLineEndings(fullPath);
177
- const updatedNotebook = JSON.stringify(notebook, null, 1);
178
- writeTextContent(fullPath, updatedNotebook, enc, endings);
179
- recordFileEdit(fullPath, updatedNotebook);
180
- emitReminderEvent("file:edited", {
181
- filePath: fullPath,
182
- cellNumber: cell_number,
183
- newSource: new_source,
184
- cellType: cell_type,
185
- editMode: edit_mode || "replace",
186
- timestamp: Date.now(),
187
- operation: "notebook_edit"
188
- });
189
- const data = {
190
- cell_number,
191
- new_source,
192
- cell_type: cell_type ?? "code",
193
- language,
194
- edit_mode: edit_mode ?? "replace",
195
- error: ""
196
- };
197
- yield {
198
- type: "result",
199
- data,
200
- resultForAssistant: this.renderResultForAssistant(data)
201
- };
202
- } catch (error) {
203
- if (error instanceof Error) {
204
- const data2 = {
205
- cell_number,
206
- new_source,
207
- cell_type: cell_type ?? "code",
208
- language: "python",
209
- edit_mode: "replace",
210
- error: error.message
211
- };
212
- yield {
213
- type: "result",
214
- data: data2,
215
- resultForAssistant: this.renderResultForAssistant(data2)
216
- };
217
- return;
218
- }
219
- const data = {
220
- cell_number,
221
- new_source,
222
- cell_type: cell_type ?? "code",
223
- language: "python",
224
- edit_mode: "replace",
225
- error: "Unknown error occurred while editing notebook"
226
- };
227
- yield {
228
- type: "result",
229
- data,
230
- resultForAssistant: this.renderResultForAssistant(data)
231
- };
232
- }
233
- }
234
- };
235
- export {
236
- NotebookEditTool
237
- };
238
- //# sourceMappingURL=NotebookEditTool.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/tools/NotebookEditTool/NotebookEditTool.tsx"],
4
- "sourcesContent": ["import { existsSync, readFileSync } from 'fs'\nimport { Box, Text } from 'ink'\nimport { extname, isAbsolute, relative, resolve } from 'path'\nimport * as React from 'react'\nimport { z } from 'zod'\nimport { FallbackToolUseRejectedMessage } from '../../components/FallbackToolUseRejectedMessage'\nimport { HighlightedCode } from '../../components/HighlightedCode'\nimport type { Tool } from '../../Tool'\nimport { NotebookCellType, NotebookContent } from '../../types/notebook'\nimport {\n detectFileEncoding,\n detectLineEndings,\n writeTextContent,\n} from '../../utils/file.js'\nimport { safeParseJSON } from '../../utils/json'\nimport { getCwd } from '../../utils/state'\nimport { DESCRIPTION, PROMPT } from './prompt'\nimport { hasWritePermission } from '../../utils/permissions/filesystem'\nimport { emitReminderEvent } from '../../services/systemReminder'\nimport { recordFileEdit } from '../../services/fileFreshness'\n\nconst inputSchema = z.strictObject({\n notebook_path: z\n .string()\n .describe(\n 'The absolute path to the Jupyter notebook file to edit (must be absolute, not relative)',\n ),\n cell_number: z.number().describe('The index of the cell to edit (0-based)'),\n new_source: z.string().describe('The new source for the cell'),\n cell_type: z\n .enum(['code', 'markdown'])\n .optional()\n .describe(\n 'The type of the cell (code or markdown). If not specified, it defaults to the current cell type. If using edit_mode=insert, this is required.',\n ),\n edit_mode: z\n .string()\n .optional()\n .describe(\n 'The type of edit to make (replace, insert, delete). Defaults to replace.',\n ),\n})\n\nexport const NotebookEditTool = {\n name: 'NotebookEditCell',\n async description() {\n return DESCRIPTION\n },\n async prompt() {\n return PROMPT\n },\n inputSchema,\n userFacingName() {\n return 'Edit Notebook'\n },\n async isEnabled() {\n return true\n },\n isReadOnly() {\n return false\n },\n isConcurrencySafe() {\n return false // NotebookEditTool modifies state/files, not safe for concurrent execution\n },\n needsPermissions({ notebook_path }) {\n return !hasWritePermission(notebook_path)\n },\n renderResultForAssistant({ cell_number, edit_mode, new_source, error }) {\n if (error) {\n return error\n }\n switch (edit_mode) {\n case 'replace':\n return `Updated cell ${cell_number} with ${new_source}`\n case 'insert':\n return `Inserted cell ${cell_number} with ${new_source}`\n case 'delete':\n return `Deleted cell ${cell_number}`\n }\n },\n renderToolUseMessage(input, { verbose }) {\n return `notebook_path: ${verbose ? input.notebook_path : relative(getCwd(), input.notebook_path)}, cell: ${input.cell_number}, content: ${input.new_source.slice(0, 30)}\u2026, cell_type: ${input.cell_type}, edit_mode: ${input.edit_mode ?? 'replace'}`\n },\n renderToolUseRejectedMessage() {\n return <FallbackToolUseRejectedMessage />\n },\n renderToolResultMessage({ cell_number, new_source, language, error }) {\n if (error) {\n return (\n <Box flexDirection=\"column\">\n <Text color=\"red\">{error}</Text>\n </Box>\n )\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text>Updated cell {cell_number}:</Text>\n <Box marginLeft={2}>\n <HighlightedCode code={new_source} language={language} />\n </Box>\n </Box>\n )\n },\n async validateInput({\n notebook_path,\n cell_number,\n cell_type,\n edit_mode = 'replace',\n }) {\n const fullPath = isAbsolute(notebook_path)\n ? notebook_path\n : resolve(getCwd(), notebook_path)\n\n if (!existsSync(fullPath)) {\n return {\n result: false,\n message: 'Notebook file does not exist.',\n }\n }\n\n if (extname(fullPath) !== '.ipynb') {\n return {\n result: false,\n message:\n 'File must be a Jupyter notebook (.ipynb file). For editing other file types, use the FileEdit tool.',\n }\n }\n\n if (cell_number < 0) {\n return {\n result: false,\n message: 'Cell number must be non-negative.',\n }\n }\n\n if (\n edit_mode !== 'replace' &&\n edit_mode !== 'insert' &&\n edit_mode !== 'delete'\n ) {\n return {\n result: false,\n message: 'Edit mode must be replace, insert, or delete.',\n }\n }\n\n if (edit_mode === 'insert' && !cell_type) {\n return {\n result: false,\n message: 'Cell type is required when using edit_mode=insert.',\n }\n }\n\n const enc = detectFileEncoding(fullPath)\n const content = readFileSync(fullPath, enc)\n const notebook = safeParseJSON(content) as NotebookContent | null\n if (!notebook) {\n return {\n result: false,\n message: 'Notebook is not valid JSON.',\n }\n }\n\n if (edit_mode === 'insert' && cell_number > notebook.cells.length) {\n return {\n result: false,\n message: `Cell number is out of bounds. For insert mode, the maximum value is ${notebook.cells.length} (to append at the end).`,\n }\n } else if (\n (edit_mode === 'replace' || edit_mode === 'delete') &&\n (cell_number >= notebook.cells.length || !notebook.cells[cell_number])\n ) {\n return {\n result: false,\n message: `Cell number is out of bounds. Notebook has ${notebook.cells.length} cells.`,\n }\n }\n\n return { result: true }\n },\n async *call({\n notebook_path,\n cell_number,\n new_source,\n cell_type,\n edit_mode,\n }) {\n const fullPath = isAbsolute(notebook_path)\n ? notebook_path\n : resolve(getCwd(), notebook_path)\n\n try {\n const enc = detectFileEncoding(fullPath)\n const content = readFileSync(fullPath, enc)\n const notebook = JSON.parse(content) as NotebookContent\n const language = notebook.metadata.language_info?.name ?? 'python'\n\n if (edit_mode === 'delete') {\n // Delete the specified cell\n notebook.cells.splice(cell_number, 1)\n } else if (edit_mode === 'insert') {\n // Insert the new cell\n const new_cell = {\n cell_type: cell_type!, // validateInput ensures cell_type is not undefined\n source: new_source,\n metadata: {},\n }\n notebook.cells.splice(\n cell_number,\n 0,\n cell_type == 'markdown' ? new_cell : { ...new_cell, outputs: [] },\n )\n } else {\n // Find the specified cell\n const targetCell = notebook.cells[cell_number]! // validateInput ensures cell_number is in bounds\n targetCell.source = new_source\n // Reset execution count and clear outputs since cell was modified\n targetCell.execution_count = undefined\n targetCell.outputs = []\n if (cell_type && cell_type !== targetCell.cell_type) {\n targetCell.cell_type = cell_type\n }\n }\n // Write back to file\n const endings = detectLineEndings(fullPath)\n const updatedNotebook = JSON.stringify(notebook, null, 1)\n writeTextContent(fullPath, updatedNotebook, enc, endings!)\n\n // Record Agent edit operation for file freshness tracking\n recordFileEdit(fullPath, updatedNotebook)\n\n // Emit file edited event for system reminders\n emitReminderEvent('file:edited', {\n filePath: fullPath,\n cellNumber: cell_number,\n newSource: new_source,\n cellType: cell_type,\n editMode: edit_mode || 'replace',\n timestamp: Date.now(),\n operation: 'notebook_edit',\n })\n const data = {\n cell_number,\n new_source,\n cell_type: cell_type ?? 'code',\n language,\n edit_mode: edit_mode ?? 'replace',\n error: '',\n }\n yield {\n type: 'result',\n data,\n resultForAssistant: this.renderResultForAssistant(data),\n }\n } catch (error) {\n if (error instanceof Error) {\n const data = {\n cell_number,\n new_source,\n cell_type: cell_type ?? 'code',\n language: 'python',\n edit_mode: 'replace',\n error: error.message,\n }\n yield {\n type: 'result',\n data,\n resultForAssistant: this.renderResultForAssistant(data),\n }\n return\n }\n const data = {\n cell_number,\n new_source,\n cell_type: cell_type ?? 'code',\n language: 'python',\n edit_mode: 'replace',\n error: 'Unknown error occurred while editing notebook',\n }\n yield {\n type: 'result',\n data,\n resultForAssistant: this.renderResultForAssistant(data),\n }\n }\n },\n} satisfies Tool<\n typeof inputSchema,\n {\n cell_number: number\n new_source: string\n cell_type: NotebookCellType\n language: string\n edit_mode: string\n error?: string\n }\n>\n"],
5
- "mappings": "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",
6
- "names": ["data"]
7
- }
@@ -1,7 +0,0 @@
1
- const DESCRIPTION = "Replace the contents of a specific cell in a Jupyter notebook.";
2
- const PROMPT = `Completely replaces the contents of a specific cell in a Jupyter notebook (.ipynb file) with new source. Jupyter notebooks are interactive documents that combine code, text, and visualizations, commonly used for data analysis and scientific computing. The notebook_path parameter must be an absolute path, not a relative path. The cell_number is 0-indexed. Use edit_mode=insert to add a new cell at the index specified by cell_number. Use edit_mode=delete to delete the cell at the index specified by cell_number.`;
3
- export {
4
- DESCRIPTION,
5
- PROMPT
6
- };
7
- //# sourceMappingURL=prompt.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/tools/NotebookEditTool/prompt.ts"],
4
- "sourcesContent": ["export const DESCRIPTION =\n 'Replace the contents of a specific cell in a Jupyter notebook.'\nexport const PROMPT = `Completely replaces the contents of a specific cell in a Jupyter notebook (.ipynb file) with new source. Jupyter notebooks are interactive documents that combine code, text, and visualizations, commonly used for data analysis and scientific computing. The notebook_path parameter must be an absolute path, not a relative path. The cell_number is 0-indexed. Use edit_mode=insert to add a new cell at the index specified by cell_number. Use edit_mode=delete to delete the cell at the index specified by cell_number.`\n"],
5
- "mappings": "AAAO,MAAM,cACX;AACK,MAAM,SAAS;",
6
- "names": []
7
- }
@@ -1,212 +0,0 @@
1
- import { existsSync, readFileSync } from "fs";
2
- import { Text } from "ink";
3
- import { extname, isAbsolute, relative, resolve } from "path";
4
- import * as React from "react";
5
- import { z } from "zod";
6
- import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
7
- import { formatOutput } from "../BashTool/utils.js";
8
- import { getCwd } from "../../utils/state.js";
9
- import { findSimilarFile } from "../../utils/file.js";
10
- import { DESCRIPTION, PROMPT } from "./prompt.js";
11
- import { hasReadPermission } from "../../utils/permissions/filesystem.js";
12
- const inputSchema = z.strictObject({
13
- notebook_path: z.string().describe(
14
- "The absolute path to the Jupyter notebook file to read (must be absolute, not relative)"
15
- )
16
- });
17
- const NotebookReadTool = {
18
- name: "ReadNotebook",
19
- async description() {
20
- return DESCRIPTION;
21
- },
22
- async prompt() {
23
- return PROMPT;
24
- },
25
- isReadOnly() {
26
- return true;
27
- },
28
- isConcurrencySafe() {
29
- return true;
30
- },
31
- inputSchema,
32
- userFacingName() {
33
- return "Read Notebook";
34
- },
35
- async isEnabled() {
36
- return true;
37
- },
38
- needsPermissions({ notebook_path }) {
39
- return !hasReadPermission(notebook_path);
40
- },
41
- async validateInput({ notebook_path }) {
42
- const fullFilePath = isAbsolute(notebook_path) ? notebook_path : resolve(getCwd(), notebook_path);
43
- if (!existsSync(fullFilePath)) {
44
- const similarFilename = findSimilarFile(fullFilePath);
45
- let message = "File does not exist.";
46
- if (similarFilename) {
47
- message += ` Did you mean ${similarFilename}?`;
48
- }
49
- return {
50
- result: false,
51
- message
52
- };
53
- }
54
- if (extname(fullFilePath) !== ".ipynb") {
55
- return {
56
- result: false,
57
- message: "File must be a Jupyter notebook (.ipynb file)."
58
- };
59
- }
60
- return { result: true };
61
- },
62
- renderToolUseMessage(input, { verbose }) {
63
- return `notebook_path: ${verbose ? input.notebook_path : relative(getCwd(), input.notebook_path)}`;
64
- },
65
- renderToolUseRejectedMessage() {
66
- return /* @__PURE__ */ React.createElement(FallbackToolUseRejectedMessage, null);
67
- },
68
- renderToolResultMessage(content) {
69
- if (!content) {
70
- return /* @__PURE__ */ React.createElement(Text, null, "No cells found in notebook");
71
- }
72
- if (content.length < 1 || !content[0]) {
73
- return /* @__PURE__ */ React.createElement(Text, null, "No cells found in notebook");
74
- }
75
- return /* @__PURE__ */ React.createElement(Text, null, "Read ", content.length, " cells");
76
- },
77
- async *call({ notebook_path }) {
78
- const fullPath = isAbsolute(notebook_path) ? notebook_path : resolve(getCwd(), notebook_path);
79
- const content = readFileSync(fullPath, "utf-8");
80
- const notebook = JSON.parse(content);
81
- const language = notebook.metadata.language_info?.name ?? "python";
82
- const cells = notebook.cells.map(
83
- (cell, index) => processCell(cell, index, language)
84
- );
85
- yield {
86
- type: "result",
87
- resultForAssistant: this.renderResultForAssistant(cells),
88
- data: cells
89
- };
90
- },
91
- renderResultForAssistant(data) {
92
- return data.map((cell, index) => {
93
- let content = `Cell ${index + 1} (${cell.cellType}):
94
- ${cell.source}`;
95
- if (cell.outputs && cell.outputs.length > 0) {
96
- const outputText = cell.outputs.map((output) => output.text).filter(Boolean).join("\n");
97
- if (outputText) {
98
- content += `
99
- Output:
100
- ${outputText}`;
101
- }
102
- }
103
- return content;
104
- }).join("\n\n");
105
- }
106
- };
107
- function processOutputText(text) {
108
- if (!text) return "";
109
- const rawText = Array.isArray(text) ? text.join("") : text;
110
- const { truncatedContent } = formatOutput(rawText);
111
- return truncatedContent;
112
- }
113
- function extractImage(data) {
114
- if (typeof data["image/png"] === "string") {
115
- return {
116
- image_data: data["image/png"],
117
- media_type: "image/png"
118
- };
119
- }
120
- if (typeof data["image/jpeg"] === "string") {
121
- return {
122
- image_data: data["image/jpeg"],
123
- media_type: "image/jpeg"
124
- };
125
- }
126
- return void 0;
127
- }
128
- function processOutput(output) {
129
- switch (output.output_type) {
130
- case "stream":
131
- return {
132
- output_type: output.output_type,
133
- text: processOutputText(output.text)
134
- };
135
- case "execute_result":
136
- case "display_data":
137
- return {
138
- output_type: output.output_type,
139
- text: processOutputText(output.data?.["text/plain"]),
140
- image: output.data && extractImage(output.data)
141
- };
142
- case "error":
143
- return {
144
- output_type: output.output_type,
145
- text: processOutputText(
146
- `${output.ename}: ${output.evalue}
147
- ${output.traceback.join("\n")}`
148
- )
149
- };
150
- }
151
- }
152
- function processCell(cell, index, language) {
153
- const cellData = {
154
- cell: index,
155
- cellType: cell.cell_type,
156
- source: Array.isArray(cell.source) ? cell.source.join("") : cell.source,
157
- language,
158
- execution_count: cell.execution_count
159
- };
160
- if (cell.outputs?.length) {
161
- cellData.outputs = cell.outputs.map(processOutput);
162
- }
163
- return cellData;
164
- }
165
- function cellContentToToolResult(cell) {
166
- const metadata = [];
167
- if (cell.cellType !== "code") {
168
- metadata.push(`<cell_type>${cell.cellType}</cell_type>`);
169
- }
170
- if (cell.language !== "python" && cell.cellType === "code") {
171
- metadata.push(`<language>${cell.language}</language>`);
172
- }
173
- const cellContent = `<cell ${cell.cell}>${metadata.join("")}${cell.source}</cell ${cell.cell}>`;
174
- return {
175
- text: cellContent,
176
- type: "text"
177
- };
178
- }
179
- function cellOutputToToolResult(output) {
180
- const outputs = [];
181
- if (output.text) {
182
- outputs.push({
183
- text: `
184
- ${output.text}`,
185
- type: "text"
186
- });
187
- }
188
- if (output.image) {
189
- outputs.push({
190
- type: "image",
191
- source: {
192
- data: output.image.image_data,
193
- media_type: output.image.media_type,
194
- type: "base64"
195
- }
196
- });
197
- }
198
- return outputs;
199
- }
200
- function getToolResultFromCell(cell) {
201
- const contentResult = cellContentToToolResult(cell);
202
- const outputResults = cell.outputs?.flatMap(cellOutputToToolResult);
203
- return [contentResult, ...outputResults ?? []];
204
- }
205
- function isNotebookCellType(value) {
206
- return value === "code" || value === "markdown";
207
- }
208
- export {
209
- NotebookReadTool,
210
- isNotebookCellType
211
- };
212
- //# sourceMappingURL=NotebookReadTool.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/tools/NotebookReadTool/NotebookReadTool.tsx"],
4
- "sourcesContent": ["import type {\n ImageBlockParam,\n TextBlockParam,\n} from '@anthropic-ai/sdk/resources/index.mjs'\n\nimport { existsSync, readFileSync } from 'fs'\nimport { Text } from 'ink'\nimport { extname, isAbsolute, relative, resolve } from 'path'\nimport * as React from 'react'\nimport { z } from 'zod'\nimport { FallbackToolUseRejectedMessage } from '../../components/FallbackToolUseRejectedMessage'\nimport { Tool } from '../../Tool'\nimport {\n NotebookCellSource,\n NotebookContent,\n NotebookCell,\n NotebookOutputImage,\n NotebookCellSourceOutput,\n NotebookCellOutput,\n NotebookCellType,\n} from '../../types/notebook'\nimport { formatOutput } from '../BashTool/utils'\nimport { getCwd } from '../../utils/state'\nimport { findSimilarFile } from '../../utils/file'\nimport { DESCRIPTION, PROMPT } from './prompt'\nimport { hasReadPermission } from '../../utils/permissions/filesystem'\n\nconst inputSchema = z.strictObject({\n notebook_path: z\n .string()\n .describe(\n 'The absolute path to the Jupyter notebook file to read (must be absolute, not relative)',\n ),\n})\n\ntype In = typeof inputSchema\ntype Out = NotebookCellSource[]\n\n\nexport const NotebookReadTool = {\n name: 'ReadNotebook',\n async description() {\n return DESCRIPTION\n },\n async prompt() {\n return PROMPT\n },\n isReadOnly() {\n return true\n },\n isConcurrencySafe() {\n return true // NotebookReadTool is read-only, safe for concurrent execution\n },\n inputSchema,\n userFacingName() {\n return 'Read Notebook'\n },\n async isEnabled() {\n return true\n },\n needsPermissions({ notebook_path }) {\n return !hasReadPermission(notebook_path)\n },\n async validateInput({ notebook_path }) {\n const fullFilePath = isAbsolute(notebook_path)\n ? notebook_path\n : resolve(getCwd(), notebook_path)\n\n if (!existsSync(fullFilePath)) {\n // Try to find a similar file with a different extension\n const similarFilename = findSimilarFile(fullFilePath)\n let message = 'File does not exist.'\n\n // If we found a similar file, suggest it to the assistant\n if (similarFilename) {\n message += ` Did you mean ${similarFilename}?`\n }\n\n return {\n result: false,\n message,\n }\n }\n\n if (extname(fullFilePath) !== '.ipynb') {\n return {\n result: false,\n message: 'File must be a Jupyter notebook (.ipynb file).',\n }\n }\n\n return { result: true }\n },\n renderToolUseMessage(input, { verbose }) {\n return `notebook_path: ${verbose ? input.notebook_path : relative(getCwd(), input.notebook_path)}`\n },\n renderToolUseRejectedMessage() {\n return <FallbackToolUseRejectedMessage />\n },\n\n renderToolResultMessage(content) {\n if (!content) {\n return <Text>No cells found in notebook</Text>\n }\n if (content.length < 1 || !content[0]) {\n return <Text>No cells found in notebook</Text>\n }\n return <Text>Read {content.length} cells</Text>\n },\n async *call({ notebook_path }) {\n const fullPath = isAbsolute(notebook_path)\n ? notebook_path\n : resolve(getCwd(), notebook_path)\n\n const content = readFileSync(fullPath, 'utf-8')\n const notebook = JSON.parse(content) as NotebookContent\n const language = notebook.metadata.language_info?.name ?? 'python'\n const cells = notebook.cells.map((cell, index) =>\n processCell(cell, index, language),\n )\n\n yield {\n type: 'result',\n resultForAssistant: this.renderResultForAssistant(cells),\n data: cells,\n }\n },\n renderResultForAssistant(data: NotebookCellSource[]) {\n // Convert the complex structure to a string representation for the assistant\n return data.map((cell, index) => {\n let content = `Cell ${index + 1} (${cell.cellType}):\\n${cell.source}`\n if (cell.outputs && cell.outputs.length > 0) {\n const outputText = cell.outputs.map(output => output.text).filter(Boolean).join('\\n')\n if (outputText) {\n content += `\\nOutput:\\n${outputText}`\n }\n }\n return content\n }).join('\\n\\n')\n },\n} satisfies Tool<In, Out>\n\nfunction processOutputText(text: string | string[] | undefined): string {\n if (!text) return ''\n const rawText = Array.isArray(text) ? text.join('') : text\n const { truncatedContent } = formatOutput(rawText)\n return truncatedContent\n}\n\nfunction extractImage(\n data: Record<string, unknown>,\n): NotebookOutputImage | undefined {\n if (typeof data['image/png'] === 'string') {\n return {\n image_data: data['image/png'] as string,\n media_type: 'image/png',\n }\n }\n if (typeof data['image/jpeg'] === 'string') {\n return {\n image_data: data['image/jpeg'] as string,\n media_type: 'image/jpeg',\n }\n }\n return undefined\n}\n\nfunction processOutput(output: NotebookCellOutput) {\n switch (output.output_type) {\n case 'stream':\n return {\n output_type: output.output_type,\n text: processOutputText(output.text),\n }\n case 'execute_result':\n case 'display_data':\n return {\n output_type: output.output_type,\n text: processOutputText(output.data?.['text/plain'] as string | string[] | undefined),\n image: output.data && extractImage(output.data),\n }\n case 'error':\n return {\n output_type: output.output_type,\n text: processOutputText(\n `${output.ename}: ${output.evalue}\\n${output.traceback.join('\\n')}`,\n ),\n }\n }\n}\n\nfunction processCell(\n cell: NotebookCell,\n index: number,\n language: string,\n): NotebookCellSource {\n const cellData: NotebookCellSource = {\n cell: index,\n cellType: cell.cell_type,\n source: Array.isArray(cell.source) ? cell.source.join('') : cell.source,\n language,\n execution_count: cell.execution_count,\n }\n\n if (cell.outputs?.length) {\n cellData.outputs = cell.outputs.map(processOutput)\n }\n\n return cellData\n}\n\nfunction cellContentToToolResult(cell: NotebookCellSource): TextBlockParam {\n const metadata = []\n if (cell.cellType !== 'code') {\n metadata.push(`<cell_type>${cell.cellType}</cell_type>`)\n }\n if (cell.language !== 'python' && cell.cellType === 'code') {\n metadata.push(`<language>${cell.language}</language>`)\n }\n const cellContent = `<cell ${cell.cell}>${metadata.join('')}${cell.source}</cell ${cell.cell}>`\n return {\n text: cellContent,\n type: 'text',\n }\n}\n\nfunction cellOutputToToolResult(output: NotebookCellSourceOutput) {\n const outputs: (TextBlockParam | ImageBlockParam)[] = []\n if (output.text) {\n outputs.push({\n text: `\\n${output.text}`,\n type: 'text',\n })\n }\n if (output.image) {\n outputs.push({\n type: 'image',\n source: {\n data: output.image.image_data,\n media_type: output.image.media_type,\n type: 'base64',\n },\n })\n }\n return outputs\n}\n\nfunction getToolResultFromCell(cell: NotebookCellSource) {\n const contentResult = cellContentToToolResult(cell)\n const outputResults = cell.outputs?.flatMap(cellOutputToToolResult)\n return [contentResult, ...(outputResults ?? [])]\n}\n\nexport function isNotebookCellType(\n value: string | null,\n): value is NotebookCellType {\n return value === 'code' || value === 'markdown'\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }