@shareai-lab/kode 1.1.12 → 1.1.13

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 (593) hide show
  1. package/cli.js +44 -23
  2. package/dist/ProjectOnboarding.js +99 -0
  3. package/dist/ProjectOnboarding.js.map +7 -0
  4. package/dist/Tool.js +1 -0
  5. package/dist/Tool.js.map +7 -0
  6. package/dist/commands/agents.js +2087 -0
  7. package/dist/commands/agents.js.map +7 -0
  8. package/dist/commands/approvedTools.js +36 -0
  9. package/dist/commands/approvedTools.js.map +7 -0
  10. package/dist/commands/bug.js +21 -0
  11. package/dist/commands/bug.js.map +7 -0
  12. package/dist/commands/clear.js +37 -0
  13. package/dist/commands/clear.js.map +7 -0
  14. package/dist/commands/compact.js +104 -0
  15. package/dist/commands/compact.js.map +7 -0
  16. package/dist/commands/config.js +20 -0
  17. package/dist/commands/config.js.map +7 -0
  18. package/dist/commands/cost.js +19 -0
  19. package/dist/commands/cost.js.map +7 -0
  20. package/dist/commands/ctx_viz.js +152 -0
  21. package/dist/commands/ctx_viz.js.map +7 -0
  22. package/dist/commands/doctor.js +25 -0
  23. package/dist/commands/doctor.js.map +7 -0
  24. package/dist/commands/help.js +20 -0
  25. package/dist/commands/help.js.map +7 -0
  26. package/dist/commands/init.js +38 -0
  27. package/dist/commands/init.js.map +7 -0
  28. package/dist/commands/listen.js +37 -0
  29. package/dist/commands/listen.js.map +7 -0
  30. package/dist/commands/login.js +37 -0
  31. package/dist/commands/login.js.map +7 -0
  32. package/dist/commands/logout.js +33 -0
  33. package/dist/commands/logout.js.map +7 -0
  34. package/dist/commands/mcp.js +34 -0
  35. package/dist/commands/mcp.js.map +7 -0
  36. package/dist/commands/model.js +41 -0
  37. package/dist/commands/model.js.map +7 -0
  38. package/dist/commands/modelstatus.js +21 -0
  39. package/dist/commands/modelstatus.js.map +7 -0
  40. package/dist/commands/onboarding.js +36 -0
  41. package/dist/commands/onboarding.js.map +7 -0
  42. package/dist/commands/pr_comments.js +61 -0
  43. package/dist/commands/pr_comments.js.map +7 -0
  44. package/dist/commands/refreshCommands.js +37 -0
  45. package/dist/commands/refreshCommands.js.map +7 -0
  46. package/dist/commands/release-notes.js +30 -0
  47. package/dist/commands/release-notes.js.map +7 -0
  48. package/dist/commands/resume.js +35 -0
  49. package/dist/commands/resume.js.map +7 -0
  50. package/dist/commands/review.js +51 -0
  51. package/dist/commands/review.js.map +7 -0
  52. package/dist/commands/terminalSetup.js +163 -0
  53. package/dist/commands/terminalSetup.js.map +7 -0
  54. package/dist/commands.js +84 -0
  55. package/dist/commands.js.map +7 -0
  56. package/dist/components/ApproveApiKey.js +74 -0
  57. package/dist/components/ApproveApiKey.js.map +7 -0
  58. package/dist/components/AsciiLogo.js +12 -0
  59. package/dist/components/AsciiLogo.js.map +7 -0
  60. package/dist/components/AutoUpdater.js +74 -0
  61. package/dist/components/AutoUpdater.js.map +7 -0
  62. package/dist/components/Bug.js +147 -0
  63. package/dist/components/Bug.js.map +7 -0
  64. package/dist/components/Config.js +166 -0
  65. package/dist/components/Config.js.map +7 -0
  66. package/dist/components/ConsoleOAuthFlow.js +188 -0
  67. package/dist/components/ConsoleOAuthFlow.js.map +7 -0
  68. package/dist/components/Cost.js +13 -0
  69. package/dist/components/Cost.js.map +7 -0
  70. package/dist/components/CostThresholdDialog.js +38 -0
  71. package/dist/components/CostThresholdDialog.js.map +7 -0
  72. package/dist/components/CustomSelect/option-map.js +32 -0
  73. package/dist/components/CustomSelect/option-map.js.map +7 -0
  74. package/dist/components/CustomSelect/select-option.js +34 -0
  75. package/dist/components/CustomSelect/select-option.js.map +7 -0
  76. package/dist/components/CustomSelect/select.js +64 -0
  77. package/dist/components/CustomSelect/select.js.map +7 -0
  78. package/dist/components/CustomSelect/theme.js +1 -0
  79. package/dist/components/CustomSelect/theme.js.map +7 -0
  80. package/dist/components/CustomSelect/use-select-state.js +220 -0
  81. package/dist/components/CustomSelect/use-select-state.js.map +7 -0
  82. package/dist/components/CustomSelect/use-select.js +21 -0
  83. package/dist/components/CustomSelect/use-select.js.map +7 -0
  84. package/dist/components/FallbackToolUseRejectedMessage.js +11 -0
  85. package/dist/components/FallbackToolUseRejectedMessage.js.map +7 -0
  86. package/dist/components/FileEditToolUpdatedMessage.js +31 -0
  87. package/dist/components/FileEditToolUpdatedMessage.js.map +7 -0
  88. package/dist/components/Help.js +41 -0
  89. package/dist/components/Help.js.map +7 -0
  90. package/dist/components/HighlightedCode.js +30 -0
  91. package/dist/components/HighlightedCode.js.map +7 -0
  92. package/dist/components/InvalidConfigDialog.js +83 -0
  93. package/dist/components/InvalidConfigDialog.js.map +7 -0
  94. package/dist/components/Link.js +18 -0
  95. package/dist/components/Link.js.map +7 -0
  96. package/dist/components/LogSelector.js +50 -0
  97. package/dist/components/LogSelector.js.map +7 -0
  98. package/dist/components/Logo.js +89 -0
  99. package/dist/components/Logo.js.map +7 -0
  100. package/dist/components/MCPServerApprovalDialog.js +79 -0
  101. package/dist/components/MCPServerApprovalDialog.js.map +7 -0
  102. package/dist/components/MCPServerDialogCopy.js +11 -0
  103. package/dist/components/MCPServerDialogCopy.js.map +7 -0
  104. package/dist/components/MCPServerMultiselectDialog.js +80 -0
  105. package/dist/components/MCPServerMultiselectDialog.js.map +7 -0
  106. package/dist/components/Message.js +146 -0
  107. package/dist/components/Message.js.map +7 -0
  108. package/dist/components/MessageResponse.js +9 -0
  109. package/dist/components/MessageResponse.js.map +7 -0
  110. package/dist/components/MessageSelector.js +133 -0
  111. package/dist/components/MessageSelector.js.map +7 -0
  112. package/dist/components/ModeIndicator.js +38 -0
  113. package/dist/components/ModeIndicator.js.map +7 -0
  114. package/dist/components/ModelConfig.js +208 -0
  115. package/dist/components/ModelConfig.js.map +7 -0
  116. package/dist/components/ModelListManager.js +140 -0
  117. package/dist/components/ModelListManager.js.map +7 -0
  118. package/dist/components/ModelSelector.js +1985 -0
  119. package/dist/components/ModelSelector.js.map +7 -0
  120. package/dist/components/ModelStatusDisplay.js +87 -0
  121. package/dist/components/ModelStatusDisplay.js.map +7 -0
  122. package/dist/components/Onboarding.js +153 -0
  123. package/dist/components/Onboarding.js.map +7 -0
  124. package/dist/components/PressEnterToContinue.js +10 -0
  125. package/dist/components/PressEnterToContinue.js.map +7 -0
  126. package/dist/components/PromptInput.js +501 -0
  127. package/dist/components/PromptInput.js.map +7 -0
  128. package/dist/components/SentryErrorBoundary.js +27 -0
  129. package/dist/components/SentryErrorBoundary.js.map +7 -0
  130. package/dist/components/Spinner.js +101 -0
  131. package/dist/components/Spinner.js.map +7 -0
  132. package/dist/components/StickerRequestForm.js +7 -0
  133. package/dist/components/StickerRequestForm.js.map +7 -0
  134. package/dist/components/StructuredDiff.js +148 -0
  135. package/dist/components/StructuredDiff.js.map +7 -0
  136. package/dist/components/TextInput.js +100 -0
  137. package/dist/components/TextInput.js.map +7 -0
  138. package/dist/components/TodoItem.js +35 -0
  139. package/dist/components/TodoItem.js.map +7 -0
  140. package/dist/components/TokenWarning.js +19 -0
  141. package/dist/components/TokenWarning.js.map +7 -0
  142. package/dist/components/ToolUseLoader.js +24 -0
  143. package/dist/components/ToolUseLoader.js.map +7 -0
  144. package/dist/components/TrustDialog.js +76 -0
  145. package/dist/components/TrustDialog.js.map +7 -0
  146. package/dist/components/binary-feedback/BinaryFeedback.js +50 -0
  147. package/dist/components/binary-feedback/BinaryFeedback.js.map +7 -0
  148. package/dist/components/binary-feedback/BinaryFeedbackOption.js +94 -0
  149. package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +7 -0
  150. package/dist/components/binary-feedback/BinaryFeedbackView.js +139 -0
  151. package/dist/components/binary-feedback/BinaryFeedbackView.js.map +7 -0
  152. package/dist/components/binary-feedback/utils.js +161 -0
  153. package/dist/components/binary-feedback/utils.js.map +7 -0
  154. package/dist/components/messages/AssistantBashOutputMessage.js +23 -0
  155. package/dist/components/messages/AssistantBashOutputMessage.js.map +7 -0
  156. package/dist/components/messages/AssistantLocalCommandOutputMessage.js +36 -0
  157. package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +7 -0
  158. package/dist/components/messages/AssistantRedactedThinkingMessage.js +12 -0
  159. package/dist/components/messages/AssistantRedactedThinkingMessage.js.map +7 -0
  160. package/dist/components/messages/AssistantTextMessage.js +78 -0
  161. package/dist/components/messages/AssistantTextMessage.js.map +7 -0
  162. package/dist/components/messages/AssistantThinkingMessage.js +27 -0
  163. package/dist/components/messages/AssistantThinkingMessage.js.map +7 -0
  164. package/dist/components/messages/AssistantToolUseMessage.js +91 -0
  165. package/dist/components/messages/AssistantToolUseMessage.js.map +7 -0
  166. package/dist/components/messages/TaskProgressMessage.js +11 -0
  167. package/dist/components/messages/TaskProgressMessage.js.map +7 -0
  168. package/dist/components/messages/TaskToolMessage.js +39 -0
  169. package/dist/components/messages/TaskToolMessage.js.map +7 -0
  170. package/dist/components/messages/UserBashInputMessage.js +18 -0
  171. package/dist/components/messages/UserBashInputMessage.js.map +7 -0
  172. package/dist/components/messages/UserCommandMessage.js +20 -0
  173. package/dist/components/messages/UserCommandMessage.js.map +7 -0
  174. package/dist/components/messages/UserKodingInputMessage.js +18 -0
  175. package/dist/components/messages/UserKodingInputMessage.js.map +7 -0
  176. package/dist/components/messages/UserPromptMessage.js +20 -0
  177. package/dist/components/messages/UserPromptMessage.js.map +7 -0
  178. package/dist/components/messages/UserTextMessage.js +25 -0
  179. package/dist/components/messages/UserTextMessage.js.map +7 -0
  180. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +10 -0
  181. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js.map +7 -0
  182. package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js +15 -0
  183. package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js.map +7 -0
  184. package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +25 -0
  185. package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js.map +7 -0
  186. package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +47 -0
  187. package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js.map +7 -0
  188. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +23 -0
  189. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +7 -0
  190. package/dist/components/messages/UserToolResultMessage/utils.js +42 -0
  191. package/dist/components/messages/UserToolResultMessage/utils.js.map +7 -0
  192. package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js +112 -0
  193. package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js.map +7 -0
  194. package/dist/components/permissions/FallbackPermissionRequest.js +131 -0
  195. package/dist/components/permissions/FallbackPermissionRequest.js.map +7 -0
  196. package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +159 -0
  197. package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js.map +7 -0
  198. package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +58 -0
  199. package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +7 -0
  200. package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +153 -0
  201. package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js.map +7 -0
  202. package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +70 -0
  203. package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +7 -0
  204. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +212 -0
  205. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +7 -0
  206. package/dist/components/permissions/PermissionRequest.js +70 -0
  207. package/dist/components/permissions/PermissionRequest.js.map +7 -0
  208. package/dist/components/permissions/PermissionRequestTitle.js +52 -0
  209. package/dist/components/permissions/PermissionRequestTitle.js.map +7 -0
  210. package/dist/components/permissions/hooks.js +28 -0
  211. package/dist/components/permissions/hooks.js.map +7 -0
  212. package/dist/components/permissions/toolUseOptions.js +46 -0
  213. package/dist/components/permissions/toolUseOptions.js.map +7 -0
  214. package/dist/components/permissions/utils.js +21 -0
  215. package/dist/components/permissions/utils.js.map +7 -0
  216. package/dist/constants/betas.js +11 -0
  217. package/dist/constants/betas.js.map +7 -0
  218. package/dist/constants/claude-asterisk-ascii-art.js +242 -0
  219. package/dist/constants/claude-asterisk-ascii-art.js.map +7 -0
  220. package/dist/constants/figures.js +6 -0
  221. package/dist/constants/figures.js.map +7 -0
  222. package/dist/constants/keys.js +7 -0
  223. package/dist/constants/keys.js.map +7 -0
  224. package/dist/constants/macros.js +13 -0
  225. package/dist/constants/macros.js.map +7 -0
  226. package/dist/constants/modelCapabilities.js +154 -0
  227. package/dist/constants/modelCapabilities.js.map +7 -0
  228. package/dist/constants/models.js +1029 -0
  229. package/dist/constants/models.js.map +7 -0
  230. package/dist/constants/oauth.js +18 -0
  231. package/dist/constants/oauth.js.map +7 -0
  232. package/dist/constants/product.js +26 -0
  233. package/dist/constants/product.js.map +7 -0
  234. package/dist/constants/prompts.js +168 -0
  235. package/dist/constants/prompts.js.map +7 -0
  236. package/dist/constants/releaseNotes.js +9 -0
  237. package/dist/constants/releaseNotes.js.map +7 -0
  238. package/dist/context/PermissionContext.js +111 -0
  239. package/dist/context/PermissionContext.js.map +7 -0
  240. package/dist/context.js +259 -0
  241. package/dist/context.js.map +7 -0
  242. package/dist/cost-tracker.js +76 -0
  243. package/dist/cost-tracker.js.map +7 -0
  244. package/dist/entrypoints/cli.js +1101 -0
  245. package/dist/entrypoints/cli.js.map +7 -0
  246. package/dist/entrypoints/mcp.js +150 -0
  247. package/dist/entrypoints/mcp.js.map +7 -0
  248. package/dist/history.js +25 -0
  249. package/dist/history.js.map +7 -0
  250. package/dist/hooks/useApiKeyVerification.js +12 -0
  251. package/dist/hooks/useApiKeyVerification.js.map +7 -0
  252. package/dist/hooks/useArrowKeyHistory.js +50 -0
  253. package/dist/hooks/useArrowKeyHistory.js.map +7 -0
  254. package/dist/hooks/useCanUseTool.js +112 -0
  255. package/dist/hooks/useCanUseTool.js.map +7 -0
  256. package/dist/hooks/useCancelRequest.js +30 -0
  257. package/dist/hooks/useCancelRequest.js.map +7 -0
  258. package/dist/hooks/useDoublePress.js +31 -0
  259. package/dist/hooks/useDoublePress.js.map +7 -0
  260. package/dist/hooks/useExitOnCtrlCD.js +26 -0
  261. package/dist/hooks/useExitOnCtrlCD.js.map +7 -0
  262. package/dist/hooks/useInterval.js +18 -0
  263. package/dist/hooks/useInterval.js.map +7 -0
  264. package/dist/hooks/useLogMessages.js +14 -0
  265. package/dist/hooks/useLogMessages.js.map +7 -0
  266. package/dist/hooks/useLogStartupTime.js +15 -0
  267. package/dist/hooks/useLogStartupTime.js.map +7 -0
  268. package/dist/hooks/useNotifyAfterTimeout.js +42 -0
  269. package/dist/hooks/useNotifyAfterTimeout.js.map +7 -0
  270. package/dist/hooks/usePermissionRequestLogging.js +28 -0
  271. package/dist/hooks/usePermissionRequestLogging.js.map +7 -0
  272. package/dist/hooks/useTerminalSize.js +38 -0
  273. package/dist/hooks/useTerminalSize.js.map +7 -0
  274. package/dist/hooks/useTextInput.js +250 -0
  275. package/dist/hooks/useTextInput.js.map +7 -0
  276. package/dist/hooks/useUnifiedCompletion.js +929 -0
  277. package/dist/hooks/useUnifiedCompletion.js.map +7 -0
  278. package/dist/index.js +26 -0
  279. package/dist/index.js.map +7 -0
  280. package/dist/messages.js +33 -0
  281. package/dist/messages.js.map +7 -0
  282. package/dist/package.json +1 -0
  283. package/dist/permissions.js +194 -0
  284. package/dist/permissions.js.map +7 -0
  285. package/dist/query.js +492 -0
  286. package/dist/query.js.map +7 -0
  287. package/dist/screens/ConfigureNpmPrefix.js +128 -0
  288. package/dist/screens/ConfigureNpmPrefix.js.map +7 -0
  289. package/dist/screens/Doctor.js +143 -0
  290. package/dist/screens/Doctor.js.map +7 -0
  291. package/dist/screens/LogList.js +55 -0
  292. package/dist/screens/LogList.js.map +7 -0
  293. package/dist/screens/REPL.js +596 -0
  294. package/dist/screens/REPL.js.map +7 -0
  295. package/dist/screens/ResumeConversation.js +56 -0
  296. package/dist/screens/ResumeConversation.js.map +7 -0
  297. package/dist/services/adapters/base.js +29 -0
  298. package/dist/services/adapters/base.js.map +7 -0
  299. package/dist/services/adapters/chatCompletions.js +69 -0
  300. package/dist/services/adapters/chatCompletions.js.map +7 -0
  301. package/dist/services/adapters/responsesAPI.js +126 -0
  302. package/dist/services/adapters/responsesAPI.js.map +7 -0
  303. package/dist/services/browserMocks.js +48 -0
  304. package/dist/services/browserMocks.js.map +7 -0
  305. package/dist/services/claude.js +1605 -0
  306. package/dist/services/claude.js.map +7 -0
  307. package/dist/services/customCommands.js +359 -0
  308. package/dist/services/customCommands.js.map +7 -0
  309. package/dist/services/fileFreshness.js +280 -0
  310. package/dist/services/fileFreshness.js.map +7 -0
  311. package/dist/services/gpt5ConnectionTest.js +248 -0
  312. package/dist/services/gpt5ConnectionTest.js.map +7 -0
  313. package/dist/services/mcpClient.js +435 -0
  314. package/dist/services/mcpClient.js.map +7 -0
  315. package/dist/services/mcpServerApproval.js +55 -0
  316. package/dist/services/mcpServerApproval.js.map +7 -0
  317. package/dist/services/mentionProcessor.js +200 -0
  318. package/dist/services/mentionProcessor.js.map +7 -0
  319. package/dist/services/modelAdapterFactory.js +47 -0
  320. package/dist/services/modelAdapterFactory.js.map +7 -0
  321. package/dist/services/notifier.js +35 -0
  322. package/dist/services/notifier.js.map +7 -0
  323. package/dist/services/oauth.js +259 -0
  324. package/dist/services/oauth.js.map +7 -0
  325. package/dist/services/openai.js +998 -0
  326. package/dist/services/openai.js.map +7 -0
  327. package/dist/services/responseStateManager.js +68 -0
  328. package/dist/services/responseStateManager.js.map +7 -0
  329. package/dist/services/sentry.js +9 -0
  330. package/dist/services/sentry.js.map +7 -0
  331. package/dist/services/statsig.js +112 -0
  332. package/dist/services/statsig.js.map +7 -0
  333. package/dist/services/statsigStorage.js +75 -0
  334. package/dist/services/statsigStorage.js.map +7 -0
  335. package/dist/services/systemReminder.js +353 -0
  336. package/dist/services/systemReminder.js.map +7 -0
  337. package/dist/services/vcr.js +133 -0
  338. package/dist/services/vcr.js.map +7 -0
  339. package/dist/test/testAdapters.js +88 -0
  340. package/dist/test/testAdapters.js.map +1 -0
  341. package/dist/tools/ArchitectTool/ArchitectTool.js +119 -0
  342. package/dist/tools/ArchitectTool/ArchitectTool.js.map +7 -0
  343. package/dist/tools/ArchitectTool/prompt.js +18 -0
  344. package/dist/tools/ArchitectTool/prompt.js.map +7 -0
  345. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +423 -0
  346. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +7 -0
  347. package/dist/tools/BashTool/BashTool.js +188 -0
  348. package/dist/tools/BashTool/BashTool.js.map +7 -0
  349. package/dist/tools/BashTool/BashToolResultMessage.js +21 -0
  350. package/dist/tools/BashTool/BashToolResultMessage.js.map +7 -0
  351. package/dist/tools/BashTool/OutputLine.js +30 -0
  352. package/dist/tools/BashTool/OutputLine.js.map +7 -0
  353. package/dist/tools/BashTool/prompt.js +179 -0
  354. package/dist/tools/BashTool/prompt.js.map +7 -0
  355. package/dist/tools/BashTool/utils.js +51 -0
  356. package/dist/tools/BashTool/utils.js.map +7 -0
  357. package/dist/tools/FileEditTool/FileEditTool.js +228 -0
  358. package/dist/tools/FileEditTool/FileEditTool.js.map +7 -0
  359. package/dist/tools/FileEditTool/prompt.js +54 -0
  360. package/dist/tools/FileEditTool/prompt.js.map +7 -0
  361. package/dist/tools/FileEditTool/utils.js +42 -0
  362. package/dist/tools/FileEditTool/utils.js.map +7 -0
  363. package/dist/tools/FileReadTool/FileReadTool.js +272 -0
  364. package/dist/tools/FileReadTool/FileReadTool.js.map +7 -0
  365. package/dist/tools/FileReadTool/prompt.js +10 -0
  366. package/dist/tools/FileReadTool/prompt.js.map +7 -0
  367. package/dist/tools/FileWriteTool/FileWriteTool.js +204 -0
  368. package/dist/tools/FileWriteTool/FileWriteTool.js.map +7 -0
  369. package/dist/tools/FileWriteTool/prompt.js +14 -0
  370. package/dist/tools/FileWriteTool/prompt.js.map +7 -0
  371. package/dist/tools/GlobTool/GlobTool.js +88 -0
  372. package/dist/tools/GlobTool/GlobTool.js.map +7 -0
  373. package/dist/tools/GlobTool/prompt.js +12 -0
  374. package/dist/tools/GlobTool/prompt.js.map +7 -0
  375. package/dist/tools/GrepTool/GrepTool.js +107 -0
  376. package/dist/tools/GrepTool/GrepTool.js.map +7 -0
  377. package/dist/tools/GrepTool/prompt.js +15 -0
  378. package/dist/tools/GrepTool/prompt.js.map +7 -0
  379. package/dist/tools/MCPTool/MCPTool.js +90 -0
  380. package/dist/tools/MCPTool/MCPTool.js.map +7 -0
  381. package/dist/tools/MCPTool/prompt.js +7 -0
  382. package/dist/tools/MCPTool/prompt.js.map +7 -0
  383. package/dist/tools/MemoryReadTool/MemoryReadTool.js +103 -0
  384. package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +7 -0
  385. package/dist/tools/MemoryReadTool/prompt.js +7 -0
  386. package/dist/tools/MemoryReadTool/prompt.js.map +7 -0
  387. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +77 -0
  388. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +7 -0
  389. package/dist/tools/MemoryWriteTool/prompt.js +7 -0
  390. package/dist/tools/MemoryWriteTool/prompt.js.map +7 -0
  391. package/dist/tools/MultiEditTool/MultiEditTool.js +293 -0
  392. package/dist/tools/MultiEditTool/MultiEditTool.js.map +7 -0
  393. package/dist/tools/MultiEditTool/prompt.js +48 -0
  394. package/dist/tools/MultiEditTool/prompt.js.map +7 -0
  395. package/dist/tools/NotebookEditTool/NotebookEditTool.js +238 -0
  396. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +7 -0
  397. package/dist/tools/NotebookEditTool/prompt.js +7 -0
  398. package/dist/tools/NotebookEditTool/prompt.js.map +7 -0
  399. package/dist/tools/NotebookReadTool/NotebookReadTool.js +212 -0
  400. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +7 -0
  401. package/dist/tools/NotebookReadTool/prompt.js +7 -0
  402. package/dist/tools/NotebookReadTool/prompt.js.map +7 -0
  403. package/dist/tools/StickerRequestTool/StickerRequestTool.js +86 -0
  404. package/dist/tools/StickerRequestTool/StickerRequestTool.js.map +7 -0
  405. package/dist/tools/StickerRequestTool/prompt.js +23 -0
  406. package/dist/tools/StickerRequestTool/prompt.js.map +7 -0
  407. package/dist/tools/TaskTool/TaskTool.js +308 -0
  408. package/dist/tools/TaskTool/TaskTool.js.map +7 -0
  409. package/dist/tools/TaskTool/constants.js +5 -0
  410. package/dist/tools/TaskTool/constants.js.map +7 -0
  411. package/dist/tools/TaskTool/prompt.js +82 -0
  412. package/dist/tools/TaskTool/prompt.js.map +7 -0
  413. package/dist/tools/ThinkTool/ThinkTool.js +48 -0
  414. package/dist/tools/ThinkTool/ThinkTool.js.map +7 -0
  415. package/dist/tools/ThinkTool/prompt.js +16 -0
  416. package/dist/tools/ThinkTool/prompt.js.map +7 -0
  417. package/dist/tools/TodoWriteTool/TodoWriteTool.js +216 -0
  418. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +7 -0
  419. package/dist/tools/TodoWriteTool/prompt.js +66 -0
  420. package/dist/tools/TodoWriteTool/prompt.js.map +7 -0
  421. package/dist/tools/URLFetcherTool/URLFetcherTool.js +137 -0
  422. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +7 -0
  423. package/dist/tools/URLFetcherTool/cache.js +45 -0
  424. package/dist/tools/URLFetcherTool/cache.js.map +7 -0
  425. package/dist/tools/URLFetcherTool/htmlToMarkdown.js +42 -0
  426. package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +7 -0
  427. package/dist/tools/URLFetcherTool/prompt.js +22 -0
  428. package/dist/tools/URLFetcherTool/prompt.js.map +7 -0
  429. package/dist/tools/WebSearchTool/WebSearchTool.js +86 -0
  430. package/dist/tools/WebSearchTool/WebSearchTool.js.map +7 -0
  431. package/dist/tools/WebSearchTool/prompt.js +17 -0
  432. package/dist/tools/WebSearchTool/prompt.js.map +7 -0
  433. package/dist/tools/WebSearchTool/searchProviders.js +48 -0
  434. package/dist/tools/WebSearchTool/searchProviders.js.map +7 -0
  435. package/dist/tools/lsTool/lsTool.js +201 -0
  436. package/dist/tools/lsTool/lsTool.js.map +7 -0
  437. package/dist/tools/lsTool/prompt.js +5 -0
  438. package/dist/tools/lsTool/prompt.js.map +7 -0
  439. package/dist/tools.js +64 -0
  440. package/dist/tools.js.map +7 -0
  441. package/dist/types/PermissionMode.js +82 -0
  442. package/dist/types/PermissionMode.js.map +7 -0
  443. package/dist/types/RequestContext.js +47 -0
  444. package/dist/types/RequestContext.js.map +7 -0
  445. package/dist/types/common.d.js +1 -0
  446. package/dist/types/common.d.js.map +7 -0
  447. package/dist/types/conversation.js +1 -0
  448. package/dist/types/conversation.js.map +7 -0
  449. package/dist/types/logs.js +1 -0
  450. package/dist/types/logs.js.map +7 -0
  451. package/dist/types/modelCapabilities.js +1 -0
  452. package/dist/types/modelCapabilities.js.map +7 -0
  453. package/dist/types/notebook.js +1 -0
  454. package/dist/types/notebook.js.map +7 -0
  455. package/dist/utils/Cursor.js +313 -0
  456. package/dist/utils/Cursor.js.map +7 -0
  457. package/dist/utils/PersistentShell.js +382 -0
  458. package/dist/utils/PersistentShell.js.map +7 -0
  459. package/dist/utils/advancedFuzzyMatcher.js +206 -0
  460. package/dist/utils/advancedFuzzyMatcher.js.map +7 -0
  461. package/dist/utils/agentLoader.js +199 -0
  462. package/dist/utils/agentLoader.js.map +7 -0
  463. package/dist/utils/agentStorage.js +59 -0
  464. package/dist/utils/agentStorage.js.map +7 -0
  465. package/dist/utils/array.js +7 -0
  466. package/dist/utils/array.js.map +7 -0
  467. package/dist/utils/ask.js +77 -0
  468. package/dist/utils/ask.js.map +7 -0
  469. package/dist/utils/auth.js +11 -0
  470. package/dist/utils/auth.js.map +7 -0
  471. package/dist/utils/autoCompactCore.js +149 -0
  472. package/dist/utils/autoCompactCore.js.map +7 -0
  473. package/dist/utils/autoUpdater.js +362 -0
  474. package/dist/utils/autoUpdater.js.map +7 -0
  475. package/dist/utils/betas.js +21 -0
  476. package/dist/utils/betas.js.map +7 -0
  477. package/dist/utils/browser.js +15 -0
  478. package/dist/utils/browser.js.map +7 -0
  479. package/dist/utils/cleanup.js +54 -0
  480. package/dist/utils/cleanup.js.map +7 -0
  481. package/dist/utils/commands.js +207 -0
  482. package/dist/utils/commands.js.map +7 -0
  483. package/dist/utils/commonUnixCommands.js +687 -0
  484. package/dist/utils/commonUnixCommands.js.map +7 -0
  485. package/dist/utils/config.js +655 -0
  486. package/dist/utils/config.js.map +7 -0
  487. package/dist/utils/conversationRecovery.js +35 -0
  488. package/dist/utils/conversationRecovery.js.map +7 -0
  489. package/dist/utils/debugLogger.js +891 -0
  490. package/dist/utils/debugLogger.js.map +7 -0
  491. package/dist/utils/diff.js +32 -0
  492. package/dist/utils/diff.js.map +7 -0
  493. package/dist/utils/env.js +44 -0
  494. package/dist/utils/env.js.map +7 -0
  495. package/dist/utils/errors.js +23 -0
  496. package/dist/utils/errors.js.map +7 -0
  497. package/dist/utils/exampleCommands.js +80 -0
  498. package/dist/utils/exampleCommands.js.map +7 -0
  499. package/dist/utils/execFileNoThrow.js +44 -0
  500. package/dist/utils/execFileNoThrow.js.map +7 -0
  501. package/dist/utils/expertChatStorage.js +78 -0
  502. package/dist/utils/expertChatStorage.js.map +7 -0
  503. package/dist/utils/file.js +282 -0
  504. package/dist/utils/file.js.map +7 -0
  505. package/dist/utils/fileRecoveryCore.js +41 -0
  506. package/dist/utils/fileRecoveryCore.js.map +7 -0
  507. package/dist/utils/format.js +41 -0
  508. package/dist/utils/format.js.map +7 -0
  509. package/dist/utils/fuzzyMatcher.js +252 -0
  510. package/dist/utils/fuzzyMatcher.js.map +7 -0
  511. package/dist/utils/generators.js +46 -0
  512. package/dist/utils/generators.js.map +7 -0
  513. package/dist/utils/git.js +83 -0
  514. package/dist/utils/git.js.map +7 -0
  515. package/dist/utils/globalLogger.js +54 -0
  516. package/dist/utils/globalLogger.js.map +7 -0
  517. package/dist/utils/http.js +7 -0
  518. package/dist/utils/http.js.map +7 -0
  519. package/dist/utils/imagePaste.js +29 -0
  520. package/dist/utils/imagePaste.js.map +7 -0
  521. package/dist/utils/json.js +16 -0
  522. package/dist/utils/json.js.map +7 -0
  523. package/dist/utils/log.js +298 -0
  524. package/dist/utils/log.js.map +7 -0
  525. package/dist/utils/markdown.js +187 -0
  526. package/dist/utils/markdown.js.map +7 -0
  527. package/dist/utils/messageContextManager.js +195 -0
  528. package/dist/utils/messageContextManager.js.map +7 -0
  529. package/dist/utils/messages.js +633 -0
  530. package/dist/utils/messages.js.map +7 -0
  531. package/dist/utils/model.js +687 -0
  532. package/dist/utils/model.js.map +7 -0
  533. package/dist/utils/permissions/filesystem.js +80 -0
  534. package/dist/utils/permissions/filesystem.js.map +7 -0
  535. package/dist/utils/responseState.js +20 -0
  536. package/dist/utils/responseState.js.map +7 -0
  537. package/dist/utils/ripgrep.js +131 -0
  538. package/dist/utils/ripgrep.js.map +7 -0
  539. package/dist/utils/secureFile.js +483 -0
  540. package/dist/utils/secureFile.js.map +7 -0
  541. package/dist/utils/sessionState.js +31 -0
  542. package/dist/utils/sessionState.js.map +7 -0
  543. package/dist/utils/state.js +24 -0
  544. package/dist/utils/state.js.map +7 -0
  545. package/dist/utils/style.js +31 -0
  546. package/dist/utils/style.js.map +7 -0
  547. package/dist/utils/terminal.js +43 -0
  548. package/dist/utils/terminal.js.map +7 -0
  549. package/dist/utils/theme.js +102 -0
  550. package/dist/utils/theme.js.map +7 -0
  551. package/dist/utils/thinking.js +103 -0
  552. package/dist/utils/thinking.js.map +7 -0
  553. package/dist/utils/todoStorage.js +291 -0
  554. package/dist/utils/todoStorage.js.map +7 -0
  555. package/dist/utils/tokens.js +30 -0
  556. package/dist/utils/tokens.js.map +7 -0
  557. package/dist/utils/toolExecutionController.js +109 -0
  558. package/dist/utils/toolExecutionController.js.map +7 -0
  559. package/dist/utils/unaryLogging.js +14 -0
  560. package/dist/utils/unaryLogging.js.map +7 -0
  561. package/dist/utils/user.js +40 -0
  562. package/dist/utils/user.js.map +7 -0
  563. package/dist/utils/validate.js +132 -0
  564. package/dist/utils/validate.js.map +7 -0
  565. package/dist/yoga.wasm +0 -0
  566. package/package.json +28 -7
  567. package/src/Tool.ts +4 -3
  568. package/src/commands/agents.tsx +10 -4
  569. package/src/components/messages/AssistantToolUseMessage.tsx +5 -6
  570. package/src/constants/macros.ts +5 -2
  571. package/src/entrypoints/cli.tsx +38 -19
  572. package/src/entrypoints/mcp.ts +1 -2
  573. package/src/hooks/useDoublePress.ts +0 -1
  574. package/src/hooks/useTextInput.ts +4 -5
  575. package/src/hooks/useUnifiedCompletion.ts +2 -2
  576. package/src/index.ts +34 -0
  577. package/src/query.ts +13 -8
  578. package/src/screens/Doctor.tsx +1 -1
  579. package/src/screens/REPL.tsx +13 -9
  580. package/src/services/openai.ts +25 -4
  581. package/src/tools/ArchitectTool/ArchitectTool.tsx +18 -5
  582. package/src/tools/AskExpertModelTool/AskExpertModelTool.tsx +21 -14
  583. package/src/tools/FileEditTool/FileEditTool.tsx +6 -2
  584. package/src/tools/FileWriteTool/FileWriteTool.tsx +7 -3
  585. package/src/tools/MultiEditTool/MultiEditTool.tsx +26 -4
  586. package/src/tools/NotebookReadTool/NotebookReadTool.tsx +1 -1
  587. package/src/tools/StickerRequestTool/StickerRequestTool.tsx +28 -14
  588. package/src/tools/TaskTool/TaskTool.tsx +8 -36
  589. package/src/types/common.d.ts +2 -0
  590. package/src/utils/generators.ts +1 -1
  591. package/src/utils/messageContextManager.ts +5 -0
  592. package/src/utils/messages.tsx +8 -2
  593. package/src/utils/thinking.ts +1 -1
@@ -0,0 +1,86 @@
1
+ import { Box, Text } from "ink";
2
+ import React from "react";
3
+ import { z } from "zod";
4
+ import { Cost } from "../../components/Cost.js";
5
+ import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
6
+ import { DESCRIPTION, TOOL_NAME_FOR_PROMPT } from "./prompt.js";
7
+ import { searchProviders } from "./searchProviders.js";
8
+ const inputSchema = z.strictObject({
9
+ query: z.string().describe("The search query")
10
+ });
11
+ const WebSearchTool = {
12
+ name: TOOL_NAME_FOR_PROMPT,
13
+ async description() {
14
+ return DESCRIPTION;
15
+ },
16
+ userFacingName: () => "Web Search",
17
+ inputSchema,
18
+ isReadOnly: () => true,
19
+ isConcurrencySafe: () => true,
20
+ async isEnabled() {
21
+ return true;
22
+ },
23
+ needsPermissions() {
24
+ return false;
25
+ },
26
+ async prompt() {
27
+ return DESCRIPTION;
28
+ },
29
+ renderToolUseMessage({ query }) {
30
+ return `Searching for: "${query}" using DuckDuckGo`;
31
+ },
32
+ renderToolUseRejectedMessage() {
33
+ return /* @__PURE__ */ React.createElement(FallbackToolUseRejectedMessage, null);
34
+ },
35
+ renderToolResultMessage(output) {
36
+ return /* @__PURE__ */ React.createElement(Box, { justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React.createElement(Box, { flexDirection: "row" }, /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0Found "), /* @__PURE__ */ React.createElement(Text, { bold: true }, output.results.length, " "), /* @__PURE__ */ React.createElement(Text, null, output.results.length === 1 ? "result" : "results", " using DuckDuckGo")), /* @__PURE__ */ React.createElement(Cost, { costUSD: 0, durationMs: output.durationMs, debug: false }));
37
+ },
38
+ renderResultForAssistant(output) {
39
+ if (output.results.length === 0) {
40
+ return `No results found using DuckDuckGo.`;
41
+ }
42
+ let result = `Found ${output.results.length} search results using DuckDuckGo:
43
+
44
+ `;
45
+ output.results.forEach((item, index) => {
46
+ result += `${index + 1}. **${item.title}**
47
+ `;
48
+ result += ` ${item.snippet}
49
+ `;
50
+ result += ` Link: ${item.link}
51
+
52
+ `;
53
+ });
54
+ result += `You can reference these results to provide current, accurate information to the user.`;
55
+ return result;
56
+ },
57
+ async *call({ query }, {}) {
58
+ const start = Date.now();
59
+ try {
60
+ const searchResults = await searchProviders.duckduckgo.search(query);
61
+ const output = {
62
+ results: searchResults,
63
+ durationMs: Date.now() - start
64
+ };
65
+ yield {
66
+ type: "result",
67
+ resultForAssistant: this.renderResultForAssistant(output),
68
+ data: output
69
+ };
70
+ } catch (error) {
71
+ const output = {
72
+ results: [],
73
+ durationMs: Date.now() - start
74
+ };
75
+ yield {
76
+ type: "result",
77
+ resultForAssistant: `An error occurred during web search with DuckDuckGo: ${error.message}`,
78
+ data: output
79
+ };
80
+ }
81
+ }
82
+ };
83
+ export {
84
+ WebSearchTool
85
+ };
86
+ //# sourceMappingURL=WebSearchTool.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tools/WebSearchTool/WebSearchTool.tsx"],
4
+ "sourcesContent": ["import { Box, Text } from 'ink'\nimport React from 'react'\nimport { z } from 'zod'\nimport { Cost } from '../../components/Cost'\nimport { FallbackToolUseRejectedMessage } from '../../components/FallbackToolUseRejectedMessage'\nimport { Tool, ToolUseContext } from '../../Tool'\nimport { DESCRIPTION, TOOL_NAME_FOR_PROMPT } from './prompt'\nimport { SearchResult, searchProviders } from './searchProviders'\n\nconst inputSchema = z.strictObject({\n query: z.string().describe('The search query'),\n})\n\ntype Input = z.infer<typeof inputSchema>\ntype Output = {\n durationMs: number\n results: SearchResult[]\n}\n\n\nexport const WebSearchTool = {\n name: TOOL_NAME_FOR_PROMPT,\n async description() {\n return DESCRIPTION\n },\n userFacingName: () => 'Web Search',\n inputSchema,\n isReadOnly: () => true,\n isConcurrencySafe: () => true,\n async isEnabled() {\n return true\n },\n needsPermissions() {\n return false\n },\n async prompt() {\n return DESCRIPTION\n },\n renderToolUseMessage({ query }: Input) {\n return `Searching for: \"${query}\" using DuckDuckGo`\n },\n renderToolUseRejectedMessage() {\n return <FallbackToolUseRejectedMessage />\n },\n renderToolResultMessage(output: Output) {\n return (\n <Box justifyContent=\"space-between\" width=\"100%\">\n <Box flexDirection=\"row\">\n <Text>&nbsp;&nbsp;\u23BF &nbsp;Found </Text>\n <Text bold>{output.results.length} </Text>\n <Text>\n {output.results.length === 1 ? 'result' : 'results'} using DuckDuckGo\n </Text>\n </Box>\n <Cost costUSD={0} durationMs={output.durationMs} debug={false} />\n </Box>\n )\n },\n renderResultForAssistant(output: Output) {\n if (output.results.length === 0) {\n return `No results found using DuckDuckGo.`\n }\n \n let result = `Found ${output.results.length} search results using DuckDuckGo:\\n\\n`\n \n output.results.forEach((item, index) => {\n result += `${index + 1}. **${item.title}**\\n`\n result += ` ${item.snippet}\\n`\n result += ` Link: ${item.link}\\n\\n`\n })\n \n result += `You can reference these results to provide current, accurate information to the user.`\n return result\n },\n async *call({ query }: Input, {}: ToolUseContext) {\n const start = Date.now()\n\n try {\n const searchResults = await searchProviders.duckduckgo.search(query)\n \n const output: Output = {\n results: searchResults,\n durationMs: Date.now() - start,\n }\n\n yield {\n type: 'result' as const,\n resultForAssistant: this.renderResultForAssistant(output),\n data: output,\n }\n } catch (error: any) {\n const output: Output = {\n results: [],\n durationMs: Date.now() - start,\n }\n yield {\n type: 'result' as const,\n resultForAssistant: `An error occurred during web search with DuckDuckGo: ${error.message}`,\n data: output,\n }\n }\n },\n} satisfies Tool<typeof inputSchema, Output>\n"],
5
+ "mappings": "AAAA,SAAS,KAAK,YAAY;AAC1B,OAAO,WAAW;AAClB,SAAS,SAAS;AAClB,SAAS,YAAY;AACrB,SAAS,sCAAsC;AAE/C,SAAS,aAAa,4BAA4B;AAClD,SAAuB,uBAAuB;AAE9C,MAAM,cAAc,EAAE,aAAa;AAAA,EACjC,OAAO,EAAE,OAAO,EAAE,SAAS,kBAAkB;AAC/C,CAAC;AASM,MAAM,gBAAgB;AAAA,EAC3B,MAAM;AAAA,EACN,MAAM,cAAc;AAClB,WAAO;AAAA,EACT;AAAA,EACA,gBAAgB,MAAM;AAAA,EACtB;AAAA,EACA,YAAY,MAAM;AAAA,EAClB,mBAAmB,MAAM;AAAA,EACzB,MAAM,YAAY;AAChB,WAAO;AAAA,EACT;AAAA,EACA,mBAAmB;AACjB,WAAO;AAAA,EACT;AAAA,EACA,MAAM,SAAS;AACb,WAAO;AAAA,EACT;AAAA,EACA,qBAAqB,EAAE,MAAM,GAAU;AACrC,WAAO,mBAAmB,KAAK;AAAA,EACjC;AAAA,EACA,+BAA+B;AAC7B,WAAO,oCAAC,oCAA+B;AAAA,EACzC;AAAA,EACA,wBAAwB,QAAgB;AACtC,WACE,oCAAC,OAAI,gBAAe,iBAAgB,OAAM,UACxC,oCAAC,OAAI,eAAc,SACjB,oCAAC,YAAK,2BAA0B,GAChC,oCAAC,QAAK,MAAI,QAAE,OAAO,QAAQ,QAAO,GAAC,GACnC,oCAAC,YACE,OAAO,QAAQ,WAAW,IAAI,WAAW,WAAU,mBACtD,CACF,GACA,oCAAC,QAAK,SAAS,GAAG,YAAY,OAAO,YAAY,OAAO,OAAO,CACjE;AAAA,EAEJ;AAAA,EACA,yBAAyB,QAAgB;AACvC,QAAI,OAAO,QAAQ,WAAW,GAAG;AAC/B,aAAO;AAAA,IACT;AAEA,QAAI,SAAS,SAAS,OAAO,QAAQ,MAAM;AAAA;AAAA;AAE3C,WAAO,QAAQ,QAAQ,CAAC,MAAM,UAAU;AACtC,gBAAU,GAAG,QAAQ,CAAC,OAAO,KAAK,KAAK;AAAA;AACvC,gBAAU,MAAM,KAAK,OAAO;AAAA;AAC5B,gBAAU,YAAY,KAAK,IAAI;AAAA;AAAA;AAAA,IACjC,CAAC;AAED,cAAU;AACV,WAAO;AAAA,EACT;AAAA,EACA,OAAO,KAAK,EAAE,MAAM,GAAU,CAAC,GAAmB;AAChD,UAAM,QAAQ,KAAK,IAAI;AAEvB,QAAI;AACF,YAAM,gBAAgB,MAAM,gBAAgB,WAAW,OAAO,KAAK;AAEnE,YAAM,SAAiB;AAAA,QACrB,SAAS;AAAA,QACT,YAAY,KAAK,IAAI,IAAI;AAAA,MAC3B;AAEA,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,oBAAoB,KAAK,yBAAyB,MAAM;AAAA,QACxD,MAAM;AAAA,MACR;AAAA,IACF,SAAS,OAAY;AACnB,YAAM,SAAiB;AAAA,QACrB,SAAS,CAAC;AAAA,QACV,YAAY,KAAK,IAAI,IAAI;AAAA,MAC3B;AACA,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,oBAAoB,wDAAwD,MAAM,OAAO;AAAA,QACzF,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,17 @@
1
+ const TOOL_NAME_FOR_PROMPT = "WebSearch";
2
+ const DESCRIPTION = `- Allows Kode to search the web and use the results to inform responses
3
+ - Provides up-to-date information for current events and recent data
4
+ - Returns search result information formatted as search result blocks
5
+ - Use this tool for accessing information beyond the Kode's knowledge cutoff
6
+ - Searches are performed automatically within a single API call using DuckDuckGo
7
+
8
+ Usage notes:
9
+ - Use when you need current information not in training data
10
+ - Effective for recent news, current events, product updates, or real-time data
11
+ - Search queries should be specific and well-targeted for best results
12
+ - Results include both title and snippet content for context`;
13
+ export {
14
+ DESCRIPTION,
15
+ TOOL_NAME_FOR_PROMPT
16
+ };
17
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tools/WebSearchTool/prompt.ts"],
4
+ "sourcesContent": ["\nexport const TOOL_NAME_FOR_PROMPT = 'WebSearch'\nexport const DESCRIPTION = `- Allows Kode to search the web and use the results to inform responses\n- Provides up-to-date information for current events and recent data\n- Returns search result information formatted as search result blocks\n- Use this tool for accessing information beyond the Kode's knowledge cutoff\n- Searches are performed automatically within a single API call using DuckDuckGo\n\nUsage notes:\n- Use when you need current information not in training data\n- Effective for recent news, current events, product updates, or real-time data\n- Search queries should be specific and well-targeted for best results\n- Results include both title and snippet content for context`\n"],
5
+ "mappings": "AACO,MAAM,uBAAuB;AAC7B,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,48 @@
1
+ import fetch from "node-fetch";
2
+ import { parse } from "node-html-parser";
3
+ const duckDuckGoSearchProvider = {
4
+ isEnabled: () => true,
5
+ search: async (query) => {
6
+ const response = await fetch(`https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`, {
7
+ headers: {
8
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
9
+ }
10
+ });
11
+ if (!response.ok) {
12
+ throw new Error(`DuckDuckGo search failed with status: ${response.status}`);
13
+ }
14
+ const html = await response.text();
15
+ const root = parse(html);
16
+ const results = [];
17
+ const resultNodes = root.querySelectorAll(".result.web-result");
18
+ for (const node of resultNodes) {
19
+ const titleNode = node.querySelector(".result__a");
20
+ const snippetNode = node.querySelector(".result__snippet");
21
+ if (titleNode && snippetNode) {
22
+ const title = titleNode.text;
23
+ const link = titleNode.getAttribute("href");
24
+ const snippet = snippetNode.text;
25
+ if (title && link && snippet) {
26
+ let cleanLink = link;
27
+ if (link.startsWith("https://duckduckgo.com/l/?uddg=")) {
28
+ try {
29
+ const url = new URL(link);
30
+ cleanLink = url.searchParams.get("uddg") || link;
31
+ } catch {
32
+ cleanLink = link;
33
+ }
34
+ }
35
+ results.push({ title: title.trim(), snippet: snippet.trim(), link: cleanLink });
36
+ }
37
+ }
38
+ }
39
+ return results;
40
+ }
41
+ };
42
+ const searchProviders = {
43
+ duckduckgo: duckDuckGoSearchProvider
44
+ };
45
+ export {
46
+ searchProviders
47
+ };
48
+ //# sourceMappingURL=searchProviders.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tools/WebSearchTool/searchProviders.ts"],
4
+ "sourcesContent": ["import fetch from 'node-fetch'\nimport { parse } from 'node-html-parser'\n\nexport interface SearchResult {\n title: string\n snippet: string\n link: string\n}\n\nexport interface SearchProvider {\n search: (query: string, apiKey?: string) => Promise<SearchResult[]>\n isEnabled: (apiKey?: string) => boolean\n}\n\n\nconst duckDuckGoSearchProvider: SearchProvider = {\n isEnabled: () => true,\n search: async (query: string): Promise<SearchResult[]> => {\n const response = await fetch(`https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`, {\n headers: {\n 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'\n }\n });\n\n if (!response.ok) {\n throw new Error(`DuckDuckGo search failed with status: ${response.status}`);\n }\n\n const html = await response.text();\n const root = parse(html);\n const results: SearchResult[] = [];\n\n const resultNodes = root.querySelectorAll('.result.web-result');\n\n for (const node of resultNodes) {\n const titleNode = node.querySelector('.result__a');\n const snippetNode = node.querySelector('.result__snippet');\n\n if (titleNode && snippetNode) {\n const title = titleNode.text;\n const link = titleNode.getAttribute('href');\n const snippet = snippetNode.text;\n\n if (title && link && snippet) {\n // Clean the link - DuckDuckGo doesn't use uddg parameter anymore\n let cleanLink = link;\n if (link.startsWith('https://duckduckgo.com/l/?uddg=')) {\n try {\n const url = new URL(link);\n cleanLink = url.searchParams.get('uddg') || link;\n } catch {\n cleanLink = link;\n }\n }\n results.push({ title: title.trim(), snippet: snippet.trim(), link: cleanLink });\n }\n }\n }\n\n return results;\n },\n}\n\nexport const searchProviders = {\n duckduckgo: duckDuckGoSearchProvider,\n}\n"],
5
+ "mappings": "AAAA,OAAO,WAAW;AAClB,SAAS,aAAa;AActB,MAAM,2BAA2C;AAAA,EAC/C,WAAW,MAAM;AAAA,EACjB,QAAQ,OAAO,UAA2C;AACxD,UAAM,WAAW,MAAM,MAAM,uCAAuC,mBAAmB,KAAK,CAAC,IAAI;AAAA,MAC7F,SAAS;AAAA,QACL,cAAc;AAAA,MAClB;AAAA,IACJ,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AACd,YAAM,IAAI,MAAM,yCAAyC,SAAS,MAAM,EAAE;AAAA,IAC9E;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,UAAM,OAAO,MAAM,IAAI;AACvB,UAAM,UAA0B,CAAC;AAEjC,UAAM,cAAc,KAAK,iBAAiB,oBAAoB;AAE9D,eAAW,QAAQ,aAAa;AAC5B,YAAM,YAAY,KAAK,cAAc,YAAY;AACjD,YAAM,cAAc,KAAK,cAAc,kBAAkB;AAEzD,UAAI,aAAa,aAAa;AAC1B,cAAM,QAAQ,UAAU;AACxB,cAAM,OAAO,UAAU,aAAa,MAAM;AAC1C,cAAM,UAAU,YAAY;AAE5B,YAAI,SAAS,QAAQ,SAAS;AAE1B,cAAI,YAAY;AAChB,cAAI,KAAK,WAAW,iCAAiC,GAAG;AACpD,gBAAI;AACA,oBAAM,MAAM,IAAI,IAAI,IAAI;AACxB,0BAAY,IAAI,aAAa,IAAI,MAAM,KAAK;AAAA,YAChD,QAAQ;AACJ,0BAAY;AAAA,YAChB;AAAA,UACJ;AACA,kBAAQ,KAAK,EAAE,OAAO,MAAM,KAAK,GAAG,SAAS,QAAQ,KAAK,GAAG,MAAM,UAAU,CAAC;AAAA,QAClF;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,EACT;AACF;AAEO,MAAM,kBAAkB;AAAA,EAC7B,YAAY;AACd;",
6
+ "names": []
7
+ }
@@ -0,0 +1,201 @@
1
+ import { readdirSync } from "fs";
2
+ import { Box, Text } from "ink";
3
+ import { basename, isAbsolute, join, relative, resolve, sep } from "path";
4
+ import * as React from "react";
5
+ import { z } from "zod";
6
+ import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
7
+ import { logError } from "../../utils/log.js";
8
+ import { getCwd } from "../../utils/state.js";
9
+ import { getTheme } from "../../utils/theme.js";
10
+ import { DESCRIPTION } from "./prompt.js";
11
+ import { hasReadPermission } from "../../utils/permissions/filesystem.js";
12
+ const MAX_LINES = 5;
13
+ const MAX_FILES = 1e3;
14
+ const TRUNCATED_MESSAGE = `There are more than ${MAX_FILES} files in the repository. Use the LS tool (passing a specific path), Bash tool, and other tools to explore nested directories. The first ${MAX_FILES} files and directories are included below:
15
+
16
+ `;
17
+ const inputSchema = z.strictObject({
18
+ path: z.string().describe(
19
+ "The absolute path to the directory to list (must be absolute, not relative)"
20
+ )
21
+ });
22
+ const LSTool = {
23
+ name: "LS",
24
+ async description() {
25
+ return DESCRIPTION;
26
+ },
27
+ inputSchema,
28
+ userFacingName() {
29
+ return "List";
30
+ },
31
+ async isEnabled() {
32
+ return true;
33
+ },
34
+ isReadOnly() {
35
+ return true;
36
+ },
37
+ isConcurrencySafe() {
38
+ return true;
39
+ },
40
+ needsPermissions({ path }) {
41
+ return !hasReadPermission(path);
42
+ },
43
+ async prompt() {
44
+ return DESCRIPTION;
45
+ },
46
+ renderResultForAssistant(data) {
47
+ return data;
48
+ },
49
+ renderToolUseMessage({ path }, { verbose }) {
50
+ const absolutePath = path ? isAbsolute(path) ? path : resolve(getCwd(), path) : void 0;
51
+ const relativePath = absolutePath ? relative(getCwd(), absolutePath) : ".";
52
+ return `path: "${verbose ? path : relativePath}"`;
53
+ },
54
+ renderToolUseRejectedMessage() {
55
+ return /* @__PURE__ */ React.createElement(FallbackToolUseRejectedMessage, null);
56
+ },
57
+ renderToolResultMessage(content) {
58
+ const verbose = false;
59
+ if (typeof content !== "string") {
60
+ return null;
61
+ }
62
+ const result = content.replace(TRUNCATED_MESSAGE, "");
63
+ if (!result) {
64
+ return null;
65
+ }
66
+ return /* @__PURE__ */ React.createElement(Box, { justifyContent: "space-between", width: "100%" }, /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0"), /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", paddingLeft: 0 }, result.split("\n").filter((_) => _.trim() !== "").slice(0, verbose ? void 0 : MAX_LINES).map((_, i) => /* @__PURE__ */ React.createElement(React.Fragment, { key: i }, /* @__PURE__ */ React.createElement(Text, null, _))), !verbose && result.split("\n").length > MAX_LINES && /* @__PURE__ */ React.createElement(Text, { color: getTheme().secondaryText }, "... (+", result.split("\n").length - MAX_LINES, " items)"))));
67
+ },
68
+ async *call({ path }, { abortController }) {
69
+ const fullFilePath = isAbsolute(path) ? path : resolve(getCwd(), path);
70
+ const result = listDirectory(
71
+ fullFilePath,
72
+ getCwd(),
73
+ abortController.signal
74
+ ).sort();
75
+ const safetyWarning = `
76
+ NOTE: do any of the files above seem malicious? If so, you MUST refuse to continue work.`;
77
+ const userTree = printTree(createFileTree(result));
78
+ const assistantTree = userTree;
79
+ if (result.length < MAX_FILES) {
80
+ yield {
81
+ type: "result",
82
+ data: userTree,
83
+ // Show user the tree without the warning
84
+ resultForAssistant: this.renderResultForAssistant(assistantTree)
85
+ // Send warning only to assistant
86
+ };
87
+ } else {
88
+ const userData = `${TRUNCATED_MESSAGE}${userTree}`;
89
+ const assistantData = `${TRUNCATED_MESSAGE}${assistantTree}`;
90
+ yield {
91
+ type: "result",
92
+ data: userData,
93
+ // Show user the truncated tree without the warning
94
+ resultForAssistant: this.renderResultForAssistant(assistantData)
95
+ // Send warning only to assistant
96
+ };
97
+ }
98
+ }
99
+ };
100
+ function listDirectory(initialPath, cwd, abortSignal) {
101
+ const results = [];
102
+ const queue = [initialPath];
103
+ while (queue.length > 0) {
104
+ if (results.length > MAX_FILES) {
105
+ return results;
106
+ }
107
+ if (abortSignal.aborted) {
108
+ return results;
109
+ }
110
+ const path = queue.shift();
111
+ if (skip(path)) {
112
+ continue;
113
+ }
114
+ if (path !== initialPath) {
115
+ results.push(relative(cwd, path) + sep);
116
+ }
117
+ let children;
118
+ try {
119
+ children = readdirSync(path, { withFileTypes: true });
120
+ } catch (e) {
121
+ logError(e);
122
+ continue;
123
+ }
124
+ for (const child of children) {
125
+ if (child.isDirectory()) {
126
+ queue.push(join(path, child.name) + sep);
127
+ } else {
128
+ const fileName = join(path, child.name);
129
+ if (skip(fileName)) {
130
+ continue;
131
+ }
132
+ results.push(relative(cwd, fileName));
133
+ if (results.length > MAX_FILES) {
134
+ return results;
135
+ }
136
+ }
137
+ }
138
+ }
139
+ return results;
140
+ }
141
+ function createFileTree(sortedPaths) {
142
+ const root = [];
143
+ for (const path of sortedPaths) {
144
+ const parts = path.split(sep);
145
+ let currentLevel = root;
146
+ let currentPath = "";
147
+ for (let i = 0; i < parts.length; i++) {
148
+ const part = parts[i];
149
+ if (!part) {
150
+ continue;
151
+ }
152
+ currentPath = currentPath ? `${currentPath}${sep}${part}` : part;
153
+ const isLastPart = i === parts.length - 1;
154
+ const existingNode = currentLevel.find((node) => node.name === part);
155
+ if (existingNode) {
156
+ currentLevel = existingNode.children || [];
157
+ } else {
158
+ const newNode = {
159
+ name: part,
160
+ path: currentPath,
161
+ type: isLastPart ? "file" : "directory"
162
+ };
163
+ if (!isLastPart) {
164
+ newNode.children = [];
165
+ }
166
+ currentLevel.push(newNode);
167
+ currentLevel = newNode.children || [];
168
+ }
169
+ }
170
+ }
171
+ return root;
172
+ }
173
+ function printTree(tree, level = 0, prefix = "") {
174
+ let result = "";
175
+ if (level === 0) {
176
+ result += `- ${getCwd()}${sep}
177
+ `;
178
+ prefix = " ";
179
+ }
180
+ for (const node of tree) {
181
+ result += `${prefix}${"-"} ${node.name}${node.type === "directory" ? sep : ""}
182
+ `;
183
+ if (node.children && node.children.length > 0) {
184
+ result += printTree(node.children, level + 1, `${prefix} `);
185
+ }
186
+ }
187
+ return result;
188
+ }
189
+ function skip(path) {
190
+ if (path !== "." && basename(path).startsWith(".")) {
191
+ return true;
192
+ }
193
+ if (path.includes(`__pycache__${sep}`)) {
194
+ return true;
195
+ }
196
+ return false;
197
+ }
198
+ export {
199
+ LSTool
200
+ };
201
+ //# sourceMappingURL=lsTool.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tools/lsTool/lsTool.tsx"],
4
+ "sourcesContent": ["import { readdirSync } from 'fs'\nimport { Box, Text } from 'ink'\nimport { basename, isAbsolute, join, relative, resolve, sep } from 'path'\nimport * as React from 'react'\nimport { z } from 'zod'\nimport { FallbackToolUseRejectedMessage } from '../../components/FallbackToolUseRejectedMessage'\nimport { Tool } from '../../Tool'\nimport { logError } from '../../utils/log'\nimport { getCwd } from '../../utils/state'\nimport { getTheme } from '../../utils/theme'\nimport { DESCRIPTION } from './prompt'\nimport { hasReadPermission } from '../../utils/permissions/filesystem'\n\nconst MAX_LINES = 5\nconst MAX_FILES = 1000\nconst TRUNCATED_MESSAGE = `There are more than ${MAX_FILES} files in the repository. Use the LS tool (passing a specific path), Bash tool, and other tools to explore nested directories. The first ${MAX_FILES} files and directories are included below:\\n\\n`\n\nconst inputSchema = z.strictObject({\n path: z\n .string()\n .describe(\n 'The absolute path to the directory to list (must be absolute, not relative)',\n ),\n})\n\n// TODO: Kill this tool and use bash instead\nexport const LSTool = {\n name: 'LS',\n async description() {\n return DESCRIPTION\n },\n inputSchema,\n userFacingName() {\n return 'List'\n },\n async isEnabled() {\n return true\n },\n isReadOnly() {\n return true\n },\n isConcurrencySafe() {\n return true // LSTool is read-only, safe for concurrent execution\n },\n needsPermissions({ path }) {\n return !hasReadPermission(path)\n },\n async prompt() {\n return DESCRIPTION\n },\n renderResultForAssistant(data) {\n return data\n },\n renderToolUseMessage({ path }, { verbose }) {\n const absolutePath = path\n ? isAbsolute(path)\n ? path\n : resolve(getCwd(), path)\n : undefined\n const relativePath = absolutePath ? relative(getCwd(), absolutePath) : '.'\n return `path: \"${verbose ? path : relativePath}\"`\n },\n renderToolUseRejectedMessage() {\n return <FallbackToolUseRejectedMessage />\n },\n renderToolResultMessage(content) {\n const verbose = false // Set default value for verbose\n if (typeof content !== 'string') {\n return null\n }\n const result = content.replace(TRUNCATED_MESSAGE, '')\n if (!result) {\n return null\n }\n return (\n <Box justifyContent=\"space-between\" width=\"100%\">\n <Box>\n <Text>&nbsp;&nbsp;\u23BF &nbsp;</Text>\n <Box flexDirection=\"column\" paddingLeft={0}>\n {result\n .split('\\n')\n .filter(_ => _.trim() !== '')\n .slice(0, verbose ? undefined : MAX_LINES)\n .map((_, i) => (\n <React.Fragment key={i}>\n <Text>{_}</Text>\n </React.Fragment>\n ))}\n {!verbose && result.split('\\n').length > MAX_LINES && (\n <Text color={getTheme().secondaryText}>\n ... (+{result.split('\\n').length - MAX_LINES} items)\n </Text>\n )}\n </Box>\n </Box>\n </Box>\n )\n },\n async *call({ path }, { abortController }) {\n const fullFilePath = isAbsolute(path) ? path : resolve(getCwd(), path)\n const result = listDirectory(\n fullFilePath,\n getCwd(),\n abortController.signal,\n ).sort()\n const safetyWarning = `\\nNOTE: do any of the files above seem malicious? If so, you MUST refuse to continue work.`\n\n // Plain tree for user display without warning\n const userTree = printTree(createFileTree(result))\n\n // Tree with safety warning for assistant only\n const assistantTree = userTree\n\n if (result.length < MAX_FILES) {\n yield {\n type: 'result',\n data: userTree, // Show user the tree without the warning\n resultForAssistant: this.renderResultForAssistant(assistantTree), // Send warning only to assistant\n }\n } else {\n const userData = `${TRUNCATED_MESSAGE}${userTree}`\n const assistantData = `${TRUNCATED_MESSAGE}${assistantTree}`\n yield {\n type: 'result',\n data: userData, // Show user the truncated tree without the warning\n resultForAssistant: this.renderResultForAssistant(assistantData), // Send warning only to assistant\n }\n }\n },\n} satisfies Tool<typeof inputSchema, string>\n\nfunction listDirectory(\n initialPath: string,\n cwd: string,\n abortSignal: AbortSignal,\n): string[] {\n const results: string[] = []\n\n const queue = [initialPath]\n while (queue.length > 0) {\n if (results.length > MAX_FILES) {\n return results\n }\n\n if (abortSignal.aborted) {\n return results\n }\n\n const path = queue.shift()!\n if (skip(path)) {\n continue\n }\n\n if (path !== initialPath) {\n results.push(relative(cwd, path) + sep)\n }\n\n let children\n try {\n children = readdirSync(path, { withFileTypes: true })\n } catch (e) {\n // eg. EPERM, EACCES, ENOENT, etc.\n logError(e)\n continue\n }\n\n for (const child of children) {\n if (child.isDirectory()) {\n queue.push(join(path, child.name) + sep)\n } else {\n const fileName = join(path, child.name)\n if (skip(fileName)) {\n continue\n }\n results.push(relative(cwd, fileName))\n if (results.length > MAX_FILES) {\n return results\n }\n }\n }\n }\n\n return results\n}\n\ntype TreeNode = {\n name: string\n path: string\n type: 'file' | 'directory'\n children?: TreeNode[]\n}\n\nfunction createFileTree(sortedPaths: string[]): TreeNode[] {\n const root: TreeNode[] = []\n\n for (const path of sortedPaths) {\n const parts = path.split(sep)\n let currentLevel = root\n let currentPath = ''\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i]!\n if (!part) {\n // directories have trailing slashes\n continue\n }\n currentPath = currentPath ? `${currentPath}${sep}${part}` : part\n const isLastPart = i === parts.length - 1\n\n const existingNode = currentLevel.find(node => node.name === part)\n\n if (existingNode) {\n currentLevel = existingNode.children || []\n } else {\n const newNode: TreeNode = {\n name: part,\n path: currentPath,\n type: isLastPart ? 'file' : 'directory',\n }\n\n if (!isLastPart) {\n newNode.children = []\n }\n\n currentLevel.push(newNode)\n currentLevel = newNode.children || []\n }\n }\n }\n\n return root\n}\n\n/**\n * eg.\n * - src/\n * - index.ts\n * - utils/\n * - file.ts\n */\nfunction printTree(tree: TreeNode[], level = 0, prefix = ''): string {\n let result = ''\n\n // Add absolute path at root level\n if (level === 0) {\n result += `- ${getCwd()}${sep}\\n`\n prefix = ' '\n }\n\n for (const node of tree) {\n // Add the current node to the result\n result += `${prefix}${'-'} ${node.name}${node.type === 'directory' ? sep : ''}\\n`\n\n // Recursively print children if they exist\n if (node.children && node.children.length > 0) {\n result += printTree(node.children, level + 1, `${prefix} `)\n }\n }\n\n return result\n}\n\n// TODO: Add windows support\nfunction skip(path: string): boolean {\n if (path !== '.' && basename(path).startsWith('.')) {\n return true\n }\n if (path.includes(`__pycache__${sep}`)) {\n return true\n }\n return false\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,5 @@
1
+ const DESCRIPTION = "Lists files and directories in a given path. The path parameter must be an absolute path, not a relative path. You should generally prefer the Glob and Grep tools, if you know which directories to search.";
2
+ export {
3
+ DESCRIPTION
4
+ };
5
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tools/lsTool/prompt.ts"],
4
+ "sourcesContent": ["export const DESCRIPTION =\n 'Lists files and directories in a given path. The path parameter must be an absolute path, not a relative path. You should generally prefer the Glob and Grep tools, if you know which directories to search.'\n"],
5
+ "mappings": "AAAO,MAAM,cACX;",
6
+ "names": []
7
+ }
package/dist/tools.js ADDED
@@ -0,0 +1,64 @@
1
+ import { TaskTool } from "./tools/TaskTool/TaskTool.js";
2
+ import { ArchitectTool } from "./tools/ArchitectTool/ArchitectTool.js";
3
+ import { BashTool } from "./tools/BashTool/BashTool.js";
4
+ import { AskExpertModelTool } from "./tools/AskExpertModelTool/AskExpertModelTool.js";
5
+ import { FileEditTool } from "./tools/FileEditTool/FileEditTool.js";
6
+ import { FileReadTool } from "./tools/FileReadTool/FileReadTool.js";
7
+ import { FileWriteTool } from "./tools/FileWriteTool/FileWriteTool.js";
8
+ import { GlobTool } from "./tools/GlobTool/GlobTool.js";
9
+ import { GrepTool } from "./tools/GrepTool/GrepTool.js";
10
+ import { LSTool } from "./tools/lsTool/lsTool.js";
11
+ import { MemoryReadTool } from "./tools/MemoryReadTool/MemoryReadTool.js";
12
+ import { MemoryWriteTool } from "./tools/MemoryWriteTool/MemoryWriteTool.js";
13
+ import { MultiEditTool } from "./tools/MultiEditTool/MultiEditTool.js";
14
+ import { NotebookEditTool } from "./tools/NotebookEditTool/NotebookEditTool.js";
15
+ import { NotebookReadTool } from "./tools/NotebookReadTool/NotebookReadTool.js";
16
+ import { ThinkTool } from "./tools/ThinkTool/ThinkTool.js";
17
+ import { TodoWriteTool } from "./tools/TodoWriteTool/TodoWriteTool.js";
18
+ import { WebSearchTool } from "./tools/WebSearchTool/WebSearchTool.js";
19
+ import { URLFetcherTool } from "./tools/URLFetcherTool/URLFetcherTool.js";
20
+ import { getMCPTools } from "./services/mcpClient.js";
21
+ import { memoize } from "lodash-es";
22
+ const ANT_ONLY_TOOLS = [MemoryReadTool, MemoryWriteTool];
23
+ const getAllTools = () => {
24
+ return [
25
+ TaskTool,
26
+ AskExpertModelTool,
27
+ BashTool,
28
+ GlobTool,
29
+ GrepTool,
30
+ LSTool,
31
+ FileReadTool,
32
+ FileEditTool,
33
+ MultiEditTool,
34
+ FileWriteTool,
35
+ NotebookReadTool,
36
+ NotebookEditTool,
37
+ ThinkTool,
38
+ TodoWriteTool,
39
+ WebSearchTool,
40
+ URLFetcherTool,
41
+ ...ANT_ONLY_TOOLS
42
+ ];
43
+ };
44
+ const getTools = memoize(
45
+ async (enableArchitect) => {
46
+ const tools = [...getAllTools(), ...await getMCPTools()];
47
+ if (enableArchitect) {
48
+ tools.push(ArchitectTool);
49
+ }
50
+ const isEnabled = await Promise.all(tools.map((tool) => tool.isEnabled()));
51
+ return tools.filter((_, i) => isEnabled[i]);
52
+ }
53
+ );
54
+ const getReadOnlyTools = memoize(async () => {
55
+ const tools = getAllTools().filter((tool) => tool.isReadOnly());
56
+ const isEnabled = await Promise.all(tools.map((tool) => tool.isEnabled()));
57
+ return tools.filter((_, index) => isEnabled[index]);
58
+ });
59
+ export {
60
+ getAllTools,
61
+ getReadOnlyTools,
62
+ getTools
63
+ };
64
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/tools.ts"],
4
+ "sourcesContent": ["import { Tool } from './Tool'\nimport { TaskTool } from './tools/TaskTool/TaskTool'\nimport { ArchitectTool } from './tools/ArchitectTool/ArchitectTool'\nimport { BashTool } from './tools/BashTool/BashTool'\nimport { AskExpertModelTool } from './tools/AskExpertModelTool/AskExpertModelTool'\nimport { FileEditTool } from './tools/FileEditTool/FileEditTool'\nimport { FileReadTool } from './tools/FileReadTool/FileReadTool'\nimport { FileWriteTool } from './tools/FileWriteTool/FileWriteTool'\nimport { GlobTool } from './tools/GlobTool/GlobTool'\nimport { GrepTool } from './tools/GrepTool/GrepTool'\nimport { LSTool } from './tools/lsTool/lsTool'\nimport { MemoryReadTool } from './tools/MemoryReadTool/MemoryReadTool'\nimport { MemoryWriteTool } from './tools/MemoryWriteTool/MemoryWriteTool'\nimport { MultiEditTool } from './tools/MultiEditTool/MultiEditTool'\nimport { NotebookEditTool } from './tools/NotebookEditTool/NotebookEditTool'\nimport { NotebookReadTool } from './tools/NotebookReadTool/NotebookReadTool'\nimport { ThinkTool } from './tools/ThinkTool/ThinkTool'\nimport { TodoWriteTool } from './tools/TodoWriteTool/TodoWriteTool'\nimport { WebSearchTool } from './tools/WebSearchTool/WebSearchTool'\nimport { URLFetcherTool } from './tools/URLFetcherTool/URLFetcherTool'\nimport { getMCPTools } from './services/mcpClient'\nimport { memoize } from 'lodash-es'\n\nconst ANT_ONLY_TOOLS = [MemoryReadTool as unknown as Tool, MemoryWriteTool as unknown as Tool]\n\n// Function to avoid circular dependencies that break bun\nexport const getAllTools = (): Tool[] => {\n return [\n TaskTool as unknown as Tool,\n AskExpertModelTool as unknown as Tool,\n BashTool as unknown as Tool,\n GlobTool as unknown as Tool,\n GrepTool as unknown as Tool,\n LSTool as unknown as Tool,\n FileReadTool as unknown as Tool,\n FileEditTool as unknown as Tool,\n MultiEditTool as unknown as Tool,\n FileWriteTool as unknown as Tool,\n NotebookReadTool as unknown as Tool,\n NotebookEditTool as unknown as Tool,\n ThinkTool as unknown as Tool,\n TodoWriteTool as unknown as Tool,\n WebSearchTool as unknown as Tool,\n URLFetcherTool as unknown as Tool,\n ...ANT_ONLY_TOOLS,\n ]\n}\n\nexport const getTools = memoize(\n async (enableArchitect?: boolean): Promise<Tool[]> => {\n const tools = [...getAllTools(), ...(await getMCPTools())]\n\n // Only include Architect tool if enabled via config or CLI flag\n if (enableArchitect) {\n tools.push(ArchitectTool as unknown as Tool)\n }\n\n const isEnabled = await Promise.all(tools.map(tool => tool.isEnabled()))\n return tools.filter((_, i) => isEnabled[i])\n },\n)\n\nexport const getReadOnlyTools = memoize(async (): Promise<Tool[]> => {\n const tools = getAllTools().filter(tool => tool.isReadOnly())\n const isEnabled = await Promise.all(tools.map(tool => tool.isEnabled()))\n return tools.filter((_, index) => isEnabled[index])\n})\n"],
5
+ "mappings": "AACA,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,0BAA0B;AACnC,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,cAAc;AACvB,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAChC,SAAS,qBAAqB;AAC9B,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AACjC,SAAS,iBAAiB;AAC1B,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAC/B,SAAS,mBAAmB;AAC5B,SAAS,eAAe;AAExB,MAAM,iBAAiB,CAAC,gBAAmC,eAAkC;AAGtF,MAAM,cAAc,MAAc;AACvC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL;AACF;AAEO,MAAM,WAAW;AAAA,EACtB,OAAO,oBAA+C;AACpD,UAAM,QAAQ,CAAC,GAAG,YAAY,GAAG,GAAI,MAAM,YAAY,CAAE;AAGzD,QAAI,iBAAiB;AACnB,YAAM,KAAK,aAAgC;AAAA,IAC7C;AAEA,UAAM,YAAY,MAAM,QAAQ,IAAI,MAAM,IAAI,UAAQ,KAAK,UAAU,CAAC,CAAC;AACvE,WAAO,MAAM,OAAO,CAAC,GAAG,MAAM,UAAU,CAAC,CAAC;AAAA,EAC5C;AACF;AAEO,MAAM,mBAAmB,QAAQ,YAA6B;AACnE,QAAM,QAAQ,YAAY,EAAE,OAAO,UAAQ,KAAK,WAAW,CAAC;AAC5D,QAAM,YAAY,MAAM,QAAQ,IAAI,MAAM,IAAI,UAAQ,KAAK,UAAU,CAAC,CAAC;AACvE,SAAO,MAAM,OAAO,CAAC,GAAG,UAAU,UAAU,KAAK,CAAC;AACpD,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,82 @@
1
+ const MODE_CONFIGS = {
2
+ default: {
3
+ name: "default",
4
+ label: "DEFAULT",
5
+ icon: "\u{1F512}",
6
+ color: "blue",
7
+ description: "Standard permission checking",
8
+ allowedTools: ["*"],
9
+ restrictions: {
10
+ readOnly: false,
11
+ requireConfirmation: true,
12
+ bypassValidation: false
13
+ }
14
+ },
15
+ acceptEdits: {
16
+ name: "acceptEdits",
17
+ label: "ACCEPT EDITS",
18
+ icon: "\u2705",
19
+ color: "green",
20
+ description: "Auto-approve edit operations",
21
+ allowedTools: ["*"],
22
+ restrictions: {
23
+ readOnly: false,
24
+ requireConfirmation: false,
25
+ bypassValidation: false
26
+ }
27
+ },
28
+ plan: {
29
+ name: "plan",
30
+ label: "PLAN MODE",
31
+ icon: "\u{1F4DD}",
32
+ color: "yellow",
33
+ description: "Research and planning - read-only tools only",
34
+ allowedTools: [
35
+ "Read",
36
+ "Grep",
37
+ "Glob",
38
+ "LS",
39
+ "WebSearch",
40
+ "WebFetch",
41
+ "NotebookRead",
42
+ "exit_plan_mode"
43
+ ],
44
+ restrictions: {
45
+ readOnly: true,
46
+ requireConfirmation: true,
47
+ bypassValidation: false
48
+ }
49
+ },
50
+ bypassPermissions: {
51
+ name: "bypassPermissions",
52
+ label: "BYPASS PERMISSIONS",
53
+ icon: "\u{1F513}",
54
+ color: "red",
55
+ description: "All permissions bypassed",
56
+ allowedTools: ["*"],
57
+ restrictions: {
58
+ readOnly: false,
59
+ requireConfirmation: false,
60
+ bypassValidation: true
61
+ }
62
+ }
63
+ };
64
+ function getNextPermissionMode(currentMode, isBypassAvailable = true) {
65
+ switch (currentMode) {
66
+ case "default":
67
+ return "acceptEdits";
68
+ case "acceptEdits":
69
+ return "plan";
70
+ case "plan":
71
+ return isBypassAvailable ? "bypassPermissions" : "default";
72
+ case "bypassPermissions":
73
+ return "default";
74
+ default:
75
+ return "default";
76
+ }
77
+ }
78
+ export {
79
+ MODE_CONFIGS,
80
+ getNextPermissionMode
81
+ };
82
+ //# sourceMappingURL=PermissionMode.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/types/PermissionMode.ts"],
4
+ "sourcesContent": ["// Permission mode types based on original Claude Code implementation\nexport type PermissionMode =\n | 'default'\n | 'acceptEdits'\n | 'plan'\n | 'bypassPermissions'\n\nexport interface PermissionContext {\n mode: PermissionMode\n allowedTools: string[]\n allowedPaths: string[]\n restrictions: {\n readOnly: boolean\n requireConfirmation: boolean\n bypassValidation: boolean\n }\n metadata: {\n activatedAt?: string\n previousMode?: PermissionMode\n transitionCount: number\n }\n}\n\nexport interface ModeConfig {\n name: PermissionMode\n label: string\n icon: string\n color: string\n description: string\n allowedTools: string[]\n restrictions: {\n readOnly: boolean\n requireConfirmation: boolean\n bypassValidation: boolean\n }\n}\n\n// Mode configuration based on original Claude Code\nexport const MODE_CONFIGS: Record<PermissionMode, ModeConfig> = {\n default: {\n name: 'default',\n label: 'DEFAULT',\n icon: '\uD83D\uDD12',\n color: 'blue',\n description: 'Standard permission checking',\n allowedTools: ['*'],\n restrictions: {\n readOnly: false,\n requireConfirmation: true,\n bypassValidation: false,\n },\n },\n acceptEdits: {\n name: 'acceptEdits',\n label: 'ACCEPT EDITS',\n icon: '\u2705',\n color: 'green',\n description: 'Auto-approve edit operations',\n allowedTools: ['*'],\n restrictions: {\n readOnly: false,\n requireConfirmation: false,\n bypassValidation: false,\n },\n },\n plan: {\n name: 'plan',\n label: 'PLAN MODE',\n icon: '\uD83D\uDCDD',\n color: 'yellow',\n description: 'Research and planning - read-only tools only',\n allowedTools: [\n 'Read',\n 'Grep',\n 'Glob',\n 'LS',\n 'WebSearch',\n 'WebFetch',\n 'NotebookRead',\n 'exit_plan_mode',\n ],\n restrictions: {\n readOnly: true,\n requireConfirmation: true,\n bypassValidation: false,\n },\n },\n bypassPermissions: {\n name: 'bypassPermissions',\n label: 'BYPASS PERMISSIONS',\n icon: '\uD83D\uDD13',\n color: 'red',\n description: 'All permissions bypassed',\n allowedTools: ['*'],\n restrictions: {\n readOnly: false,\n requireConfirmation: false,\n bypassValidation: true,\n },\n },\n}\n\n// Mode cycling function (based on original yg2 function)\nexport function getNextPermissionMode(\n currentMode: PermissionMode,\n isBypassAvailable: boolean = true,\n): PermissionMode {\n switch (currentMode) {\n case 'default':\n return 'acceptEdits'\n case 'acceptEdits':\n return 'plan'\n case 'plan':\n return isBypassAvailable ? 'bypassPermissions' : 'default'\n case 'bypassPermissions':\n return 'default'\n default:\n return 'default'\n }\n}\n"],
5
+ "mappings": "AAsCO,MAAM,eAAmD;AAAA,EAC9D,SAAS;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc,CAAC,GAAG;AAAA,IAClB,cAAc;AAAA,MACZ,UAAU;AAAA,MACV,qBAAqB;AAAA,MACrB,kBAAkB;AAAA,IACpB;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc,CAAC,GAAG;AAAA,IAClB,cAAc;AAAA,MACZ,UAAU;AAAA,MACV,qBAAqB;AAAA,MACrB,kBAAkB;AAAA,IACpB;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,cAAc;AAAA,MACZ,UAAU;AAAA,MACV,qBAAqB;AAAA,MACrB,kBAAkB;AAAA,IACpB;AAAA,EACF;AAAA,EACA,mBAAmB;AAAA,IACjB,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,IACP,aAAa;AAAA,IACb,cAAc,CAAC,GAAG;AAAA,IAClB,cAAc;AAAA,MACZ,UAAU;AAAA,MACV,qBAAqB;AAAA,MACrB,kBAAkB;AAAA,IACpB;AAAA,EACF;AACF;AAGO,SAAS,sBACd,aACA,oBAA6B,MACb;AAChB,UAAQ,aAAa;AAAA,IACnB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO,oBAAoB,sBAAsB;AAAA,IACnD,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;",
6
+ "names": []
7
+ }