@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,88 @@
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 { getCwd } from "../../utils/state.js";
7
+ import { glob } from "../../utils/file.js";
8
+ import { DESCRIPTION, TOOL_NAME_FOR_PROMPT } from "./prompt.js";
9
+ import { isAbsolute, relative, resolve } from "path";
10
+ import { hasReadPermission } from "../../utils/permissions/filesystem.js";
11
+ const inputSchema = z.strictObject({
12
+ pattern: z.string().describe("The glob pattern to match files against"),
13
+ path: z.string().optional().describe(
14
+ "The directory to search in. Defaults to the current working directory."
15
+ )
16
+ });
17
+ const GlobTool = {
18
+ name: TOOL_NAME_FOR_PROMPT,
19
+ async description() {
20
+ return DESCRIPTION;
21
+ },
22
+ userFacingName() {
23
+ return "Search";
24
+ },
25
+ inputSchema,
26
+ async isEnabled() {
27
+ return true;
28
+ },
29
+ isReadOnly() {
30
+ return true;
31
+ },
32
+ isConcurrencySafe() {
33
+ return true;
34
+ },
35
+ needsPermissions({ path }) {
36
+ return !hasReadPermission(path || getCwd());
37
+ },
38
+ async prompt() {
39
+ return DESCRIPTION;
40
+ },
41
+ renderToolUseMessage({ pattern, path }, { verbose }) {
42
+ const absolutePath = path ? isAbsolute(path) ? path : resolve(getCwd(), path) : void 0;
43
+ const relativePath = absolutePath ? relative(getCwd(), absolutePath) : void 0;
44
+ return `pattern: "${pattern}"${relativePath || verbose ? `, path: "${verbose ? absolutePath : relativePath}"` : ""}`;
45
+ },
46
+ renderToolUseRejectedMessage() {
47
+ return /* @__PURE__ */ React.createElement(FallbackToolUseRejectedMessage, null);
48
+ },
49
+ renderToolResultMessage(output) {
50
+ if (typeof output === "string") {
51
+ output = JSON.parse(output);
52
+ }
53
+ 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.numFiles, " "), /* @__PURE__ */ React.createElement(Text, null, output.numFiles === 0 || output.numFiles > 1 ? "files" : "file")), /* @__PURE__ */ React.createElement(Cost, { costUSD: 0, durationMs: output.durationMs, debug: false }));
54
+ },
55
+ async *call({ pattern, path }, { abortController }) {
56
+ const start = Date.now();
57
+ const { files, truncated } = await glob(
58
+ pattern,
59
+ path ?? getCwd(),
60
+ { limit: 100, offset: 0 },
61
+ abortController.signal
62
+ );
63
+ const output = {
64
+ filenames: files,
65
+ durationMs: Date.now() - start,
66
+ numFiles: files.length,
67
+ truncated
68
+ };
69
+ yield {
70
+ type: "result",
71
+ resultForAssistant: this.renderResultForAssistant(output),
72
+ data: output
73
+ };
74
+ },
75
+ renderResultForAssistant(output) {
76
+ let result = output.filenames.join("\n");
77
+ if (output.filenames.length === 0) {
78
+ result = "No files found";
79
+ } else if (output.truncated) {
80
+ result += "\n(Results are truncated. Consider using a more specific path or pattern.)";
81
+ }
82
+ return result;
83
+ }
84
+ };
85
+ export {
86
+ GlobTool
87
+ };
88
+ //# sourceMappingURL=GlobTool.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tools/GlobTool/GlobTool.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 } from '../../Tool'\nimport { getCwd } from '../../utils/state'\nimport { glob } from '../../utils/file'\nimport { DESCRIPTION, TOOL_NAME_FOR_PROMPT } from './prompt'\nimport { isAbsolute, relative, resolve } from 'path'\nimport { hasReadPermission } from '../../utils/permissions/filesystem'\n\nconst inputSchema = z.strictObject({\n pattern: z.string().describe('The glob pattern to match files against'),\n path: z\n .string()\n .optional()\n .describe(\n 'The directory to search in. Defaults to the current working directory.',\n ),\n})\n\ntype Output = {\n durationMs: number\n numFiles: number\n filenames: string[]\n truncated: boolean\n}\n\nexport const GlobTool = {\n name: TOOL_NAME_FOR_PROMPT,\n async description() {\n return DESCRIPTION\n },\n userFacingName() {\n return 'Search'\n },\n inputSchema,\n async isEnabled() {\n return true\n },\n isReadOnly() {\n return true\n },\n isConcurrencySafe() {\n return true // GlobTool is read-only, safe for concurrent execution\n },\n needsPermissions({ path }) {\n return !hasReadPermission(path || getCwd())\n },\n async prompt() {\n return DESCRIPTION\n },\n renderToolUseMessage({ pattern, path }, { verbose }) {\n const absolutePath = path\n ? isAbsolute(path)\n ? path\n : resolve(getCwd(), path)\n : undefined\n const relativePath = absolutePath\n ? relative(getCwd(), absolutePath)\n : undefined\n return `pattern: \"${pattern}\"${relativePath || verbose ? `, path: \"${verbose ? absolutePath : relativePath}\"` : ''}`\n },\n renderToolUseRejectedMessage() {\n return <FallbackToolUseRejectedMessage />\n },\n renderToolResultMessage(output) {\n // Handle string content for backward compatibility\n if (typeof output === 'string') {\n output = JSON.parse(output) as Output\n }\n\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.numFiles} </Text>\n <Text>\n {output.numFiles === 0 || output.numFiles > 1 ? 'files' : 'file'}\n </Text>\n </Box>\n <Cost costUSD={0} durationMs={output.durationMs} debug={false} />\n </Box>\n )\n },\n async *call({ pattern, path }, { abortController }) {\n const start = Date.now()\n const { files, truncated } = await glob(\n pattern,\n path ?? getCwd(),\n { limit: 100, offset: 0 },\n abortController.signal,\n )\n const output: Output = {\n filenames: files,\n durationMs: Date.now() - start,\n numFiles: files.length,\n truncated,\n }\n yield {\n type: 'result',\n resultForAssistant: this.renderResultForAssistant(output),\n data: output,\n }\n },\n renderResultForAssistant(output) {\n let result = output.filenames.join('\\n')\n if (output.filenames.length === 0) {\n result = 'No files found'\n }\n // Only add truncation message if results were actually truncated\n else if (output.truncated) {\n result +=\n '\\n(Results are truncated. Consider using a more specific path or pattern.)'\n }\n return result\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,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,aAAa,4BAA4B;AAClD,SAAS,YAAY,UAAU,eAAe;AAC9C,SAAS,yBAAyB;AAElC,MAAM,cAAc,EAAE,aAAa;AAAA,EACjC,SAAS,EAAE,OAAO,EAAE,SAAS,yCAAyC;AAAA,EACtE,MAAM,EACH,OAAO,EACP,SAAS,EACT;AAAA,IACC;AAAA,EACF;AACJ,CAAC;AASM,MAAM,WAAW;AAAA,EACtB,MAAM;AAAA,EACN,MAAM,cAAc;AAClB,WAAO;AAAA,EACT;AAAA,EACA,iBAAiB;AACf,WAAO;AAAA,EACT;AAAA,EACA;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,EAAE,KAAK,GAAG;AACzB,WAAO,CAAC,kBAAkB,QAAQ,OAAO,CAAC;AAAA,EAC5C;AAAA,EACA,MAAM,SAAS;AACb,WAAO;AAAA,EACT;AAAA,EACA,qBAAqB,EAAE,SAAS,KAAK,GAAG,EAAE,QAAQ,GAAG;AACnD,UAAM,eAAe,OACjB,WAAW,IAAI,IACb,OACA,QAAQ,OAAO,GAAG,IAAI,IACxB;AACJ,UAAM,eAAe,eACjB,SAAS,OAAO,GAAG,YAAY,IAC/B;AACJ,WAAO,aAAa,OAAO,IAAI,gBAAgB,UAAU,YAAY,UAAU,eAAe,YAAY,MAAM,EAAE;AAAA,EACpH;AAAA,EACA,+BAA+B;AAC7B,WAAO,oCAAC,oCAA+B;AAAA,EACzC;AAAA,EACA,wBAAwB,QAAQ;AAE9B,QAAI,OAAO,WAAW,UAAU;AAC9B,eAAS,KAAK,MAAM,MAAM;AAAA,IAC5B;AAEA,WACE,oCAAC,OAAI,gBAAe,iBAAgB,OAAM,UACxC,oCAAC,OAAI,eAAc,SACjB,oCAAC,YAAK,2BAA0B,GAChC,oCAAC,QAAK,MAAI,QAAE,OAAO,UAAS,GAAC,GAC7B,oCAAC,YACE,OAAO,aAAa,KAAK,OAAO,WAAW,IAAI,UAAU,MAC5D,CACF,GACA,oCAAC,QAAK,SAAS,GAAG,YAAY,OAAO,YAAY,OAAO,OAAO,CACjE;AAAA,EAEJ;AAAA,EACA,OAAO,KAAK,EAAE,SAAS,KAAK,GAAG,EAAE,gBAAgB,GAAG;AAClD,UAAM,QAAQ,KAAK,IAAI;AACvB,UAAM,EAAE,OAAO,UAAU,IAAI,MAAM;AAAA,MACjC;AAAA,MACA,QAAQ,OAAO;AAAA,MACf,EAAE,OAAO,KAAK,QAAQ,EAAE;AAAA,MACxB,gBAAgB;AAAA,IAClB;AACA,UAAM,SAAiB;AAAA,MACrB,WAAW;AAAA,MACX,YAAY,KAAK,IAAI,IAAI;AAAA,MACzB,UAAU,MAAM;AAAA,MAChB;AAAA,IACF;AACA,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,oBAAoB,KAAK,yBAAyB,MAAM;AAAA,MACxD,MAAM;AAAA,IACR;AAAA,EACF;AAAA,EACA,yBAAyB,QAAQ;AAC/B,QAAI,SAAS,OAAO,UAAU,KAAK,IAAI;AACvC,QAAI,OAAO,UAAU,WAAW,GAAG;AACjC,eAAS;AAAA,IACX,WAES,OAAO,WAAW;AACzB,gBACE;AAAA,IACJ;AACA,WAAO;AAAA,EACT;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,12 @@
1
+ const TOOL_NAME_FOR_PROMPT = "GlobTool";
2
+ const DESCRIPTION = `- Fast file pattern matching tool that works with any codebase size
3
+ - Supports glob patterns like "**/*.js" or "src/**/*.ts"
4
+ - Returns matching file paths sorted by modification time
5
+ - Use this tool when you need to find files by name patterns
6
+ - When you are doing an open ended search that may require multiple rounds of globbing and grepping, use the Agent tool instead
7
+ `;
8
+ export {
9
+ DESCRIPTION,
10
+ TOOL_NAME_FOR_PROMPT
11
+ };
12
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tools/GlobTool/prompt.ts"],
4
+ "sourcesContent": ["export const TOOL_NAME_FOR_PROMPT = 'GlobTool'\n\nexport const DESCRIPTION = `- Fast file pattern matching tool that works with any codebase size\n- Supports glob patterns like \"**/*.js\" or \"src/**/*.ts\"\n- Returns matching file paths sorted by modification time\n- Use this tool when you need to find files by name patterns\n- When you are doing an open ended search that may require multiple rounds of globbing and grepping, use the Agent tool instead\n`\n"],
5
+ "mappings": "AAAO,MAAM,uBAAuB;AAE7B,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,107 @@
1
+ import { stat } from "fs/promises";
2
+ import { Box, Text } from "ink";
3
+ import React from "react";
4
+ import { z } from "zod";
5
+ import { Cost } from "../../components/Cost.js";
6
+ import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
7
+ import { getCwd } from "../../utils/state.js";
8
+ import {
9
+ getAbsolutePath,
10
+ getAbsoluteAndRelativePaths
11
+ } from "../../utils/file.js";
12
+ import { ripGrep } from "../../utils/ripgrep.js";
13
+ import { DESCRIPTION, TOOL_NAME_FOR_PROMPT } from "./prompt.js";
14
+ import { hasReadPermission } from "../../utils/permissions/filesystem.js";
15
+ const inputSchema = z.strictObject({
16
+ pattern: z.string().describe("The regular expression pattern to search for in file contents"),
17
+ path: z.string().optional().describe(
18
+ "The directory to search in. Defaults to the current working directory."
19
+ ),
20
+ include: z.string().optional().describe(
21
+ 'File pattern to include in the search (e.g. "*.js", "*.{ts,tsx}")'
22
+ )
23
+ });
24
+ const MAX_RESULTS = 100;
25
+ const GrepTool = {
26
+ name: TOOL_NAME_FOR_PROMPT,
27
+ async description() {
28
+ return DESCRIPTION;
29
+ },
30
+ userFacingName() {
31
+ return "Search";
32
+ },
33
+ inputSchema,
34
+ isReadOnly() {
35
+ return true;
36
+ },
37
+ isConcurrencySafe() {
38
+ return true;
39
+ },
40
+ async isEnabled() {
41
+ return true;
42
+ },
43
+ needsPermissions({ path }) {
44
+ return !hasReadPermission(path || getCwd());
45
+ },
46
+ async prompt() {
47
+ return DESCRIPTION;
48
+ },
49
+ renderToolUseMessage({ pattern, path, include }, { verbose }) {
50
+ const { absolutePath, relativePath } = getAbsoluteAndRelativePaths(path);
51
+ return `pattern: "${pattern}"${relativePath || verbose ? `, path: "${verbose ? absolutePath : relativePath}"` : ""}${include ? `, include: "${include}"` : ""}`;
52
+ },
53
+ renderToolUseRejectedMessage() {
54
+ return /* @__PURE__ */ React.createElement(FallbackToolUseRejectedMessage, null);
55
+ },
56
+ renderToolResultMessage(output) {
57
+ if (typeof output === "string") {
58
+ output = output;
59
+ }
60
+ 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.numFiles, " "), /* @__PURE__ */ React.createElement(Text, null, output.numFiles === 0 || output.numFiles > 1 ? "files" : "file")), /* @__PURE__ */ React.createElement(Cost, { costUSD: 0, durationMs: output.durationMs, debug: false }));
61
+ },
62
+ renderResultForAssistant({ numFiles, filenames }) {
63
+ if (numFiles === 0) {
64
+ return "No files found";
65
+ }
66
+ let result = `Found ${numFiles} file${numFiles === 1 ? "" : "s"}
67
+ ${filenames.slice(0, MAX_RESULTS).join("\n")}`;
68
+ if (numFiles > MAX_RESULTS) {
69
+ result += "\n(Results are truncated. Consider using a more specific path or pattern.)";
70
+ }
71
+ return result;
72
+ },
73
+ async *call({ pattern, path, include }, { abortController }) {
74
+ const start = Date.now();
75
+ const absolutePath = getAbsolutePath(path) || getCwd();
76
+ const args = ["-li", pattern];
77
+ if (include) {
78
+ args.push("--glob", include);
79
+ }
80
+ const results = await ripGrep(args, absolutePath, abortController.signal);
81
+ const stats = await Promise.all(results.map((_) => stat(_)));
82
+ const matches = results.map((_, i) => [_, stats[i]]).sort((a, b) => {
83
+ if (process.env.NODE_ENV === "test") {
84
+ return a[0].localeCompare(b[0]);
85
+ }
86
+ const timeComparison = (b[1].mtimeMs ?? 0) - (a[1].mtimeMs ?? 0);
87
+ if (timeComparison === 0) {
88
+ return a[0].localeCompare(b[0]);
89
+ }
90
+ return timeComparison;
91
+ }).map((_) => _[0]);
92
+ const output = {
93
+ filenames: matches,
94
+ durationMs: Date.now() - start,
95
+ numFiles: matches.length
96
+ };
97
+ yield {
98
+ type: "result",
99
+ resultForAssistant: this.renderResultForAssistant(output),
100
+ data: output
101
+ };
102
+ }
103
+ };
104
+ export {
105
+ GrepTool
106
+ };
107
+ //# sourceMappingURL=GrepTool.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tools/GrepTool/GrepTool.tsx"],
4
+ "sourcesContent": ["import { stat } from 'fs/promises'\nimport { Box, Text } from 'ink'\nimport React from 'react'\nimport { z } from 'zod'\nimport { Cost } from '../../components/Cost'\nimport { FallbackToolUseRejectedMessage } from '../../components/FallbackToolUseRejectedMessage'\nimport { Tool } from '../../Tool'\nimport { getCwd } from '../../utils/state'\nimport {\n getAbsolutePath,\n getAbsoluteAndRelativePaths,\n} from '../../utils/file.js'\nimport { ripGrep } from '../../utils/ripgrep'\nimport { DESCRIPTION, TOOL_NAME_FOR_PROMPT } from './prompt'\nimport { hasReadPermission } from '../../utils/permissions/filesystem'\n\nconst inputSchema = z.strictObject({\n pattern: z\n .string()\n .describe('The regular expression pattern to search for in file contents'),\n path: z\n .string()\n .optional()\n .describe(\n 'The directory to search in. Defaults to the current working directory.',\n ),\n include: z\n .string()\n .optional()\n .describe(\n 'File pattern to include in the search (e.g. \"*.js\", \"*.{ts,tsx}\")',\n ),\n})\n\nconst MAX_RESULTS = 100\n\ntype Input = typeof inputSchema\ntype Output = {\n durationMs: number\n numFiles: number\n filenames: string[]\n}\n\nexport const GrepTool = {\n name: TOOL_NAME_FOR_PROMPT,\n async description() {\n return DESCRIPTION\n },\n userFacingName() {\n return 'Search'\n },\n inputSchema,\n isReadOnly() {\n return true\n },\n isConcurrencySafe() {\n return true // GrepTool is read-only, safe for concurrent execution\n },\n async isEnabled() {\n return true\n },\n needsPermissions({ path }) {\n return !hasReadPermission(path || getCwd())\n },\n async prompt() {\n return DESCRIPTION\n },\n renderToolUseMessage({ pattern, path, include }, { verbose }) {\n const { absolutePath, relativePath } = getAbsoluteAndRelativePaths(path)\n return `pattern: \"${pattern}\"${relativePath || verbose ? `, path: \"${verbose ? absolutePath : relativePath}\"` : ''}${include ? `, include: \"${include}\"` : ''}`\n },\n renderToolUseRejectedMessage() {\n return <FallbackToolUseRejectedMessage />\n },\n renderToolResultMessage(output) {\n // Handle string content for backward compatibility\n if (typeof output === 'string') {\n // Convert string to Output type using tmpDeserializeOldLogResult if needed\n output = output as unknown as Output\n }\n\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.numFiles} </Text>\n <Text>\n {output.numFiles === 0 || output.numFiles > 1 ? 'files' : 'file'}\n </Text>\n </Box>\n <Cost costUSD={0} durationMs={output.durationMs} debug={false} />\n </Box>\n )\n },\n renderResultForAssistant({ numFiles, filenames }) {\n if (numFiles === 0) {\n return 'No files found'\n }\n let result = `Found ${numFiles} file${numFiles === 1 ? '' : 's'}\\n${filenames.slice(0, MAX_RESULTS).join('\\n')}`\n if (numFiles > MAX_RESULTS) {\n result +=\n '\\n(Results are truncated. Consider using a more specific path or pattern.)'\n }\n return result\n },\n async *call({ pattern, path, include }, { abortController }) {\n const start = Date.now()\n const absolutePath = getAbsolutePath(path) || getCwd()\n\n const args = ['-li', pattern]\n if (include) {\n args.push('--glob', include)\n }\n\n const results = await ripGrep(args, absolutePath, abortController.signal)\n\n const stats = await Promise.all(results.map(_ => stat(_)))\n const matches = results\n // Sort by modification time\n .map((_, i) => [_, stats[i]!] as const)\n .sort((a, b) => {\n if (process.env.NODE_ENV === 'test') {\n // In tests, we always want to sort by filename, so that results are deterministic\n return a[0].localeCompare(b[0])\n }\n const timeComparison = (b[1].mtimeMs ?? 0) - (a[1].mtimeMs ?? 0)\n if (timeComparison === 0) {\n // Sort by filename as a tiebreaker\n return a[0].localeCompare(b[0])\n }\n return timeComparison\n })\n .map(_ => _[0])\n\n const output = {\n filenames: matches,\n durationMs: Date.now() - start,\n numFiles: matches.length,\n }\n\n yield {\n type: 'result',\n resultForAssistant: this.renderResultForAssistant(output),\n data: output,\n }\n },\n} satisfies Tool<Input, Output>\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,15 @@
1
+ const TOOL_NAME_FOR_PROMPT = "GrepTool";
2
+ const DESCRIPTION = `
3
+ - Fast content search tool that works with any codebase size
4
+ - Searches file contents using regular expressions
5
+ - Supports full regex syntax (eg. "log.*Error", "function\\s+\\w+", etc.)
6
+ - Filter files by pattern with the include parameter (eg. "*.js", "*.{ts,tsx}")
7
+ - Returns matching file paths sorted by modification time
8
+ - Use this tool when you need to find files containing specific patterns
9
+ - When you are doing an open ended search that may require multiple rounds of globbing and grepping, use the Agent tool instead
10
+ `;
11
+ export {
12
+ DESCRIPTION,
13
+ TOOL_NAME_FOR_PROMPT
14
+ };
15
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tools/GrepTool/prompt.ts"],
4
+ "sourcesContent": ["export const TOOL_NAME_FOR_PROMPT = 'GrepTool'\n\nexport const DESCRIPTION = `\n- Fast content search tool that works with any codebase size\n- Searches file contents using regular expressions\n- Supports full regex syntax (eg. \"log.*Error\", \"function\\\\s+\\\\w+\", etc.)\n- Filter files by pattern with the include parameter (eg. \"*.js\", \"*.{ts,tsx}\")\n- Returns matching file paths sorted by modification time\n- Use this tool when you need to find files containing specific patterns\n- When you are doing an open ended search that may require multiple rounds of globbing and grepping, use the Agent tool instead\n`\n"],
5
+ "mappings": "AAAO,MAAM,uBAAuB;AAE7B,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,90 @@
1
+ import { Box, Text } from "ink";
2
+ import * as React from "react";
3
+ import { z } from "zod";
4
+ import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
5
+ import { getTheme } from "../../utils/theme.js";
6
+ import { DESCRIPTION, PROMPT } from "./prompt.js";
7
+ import { OutputLine } from "../BashTool/OutputLine.js";
8
+ const inputSchema = z.object({}).passthrough();
9
+ const MCPTool = {
10
+ async isEnabled() {
11
+ return true;
12
+ },
13
+ isReadOnly() {
14
+ return false;
15
+ },
16
+ isConcurrencySafe() {
17
+ return false;
18
+ },
19
+ // Overridden in mcpClient.ts
20
+ name: "mcp",
21
+ // Overridden in mcpClient.ts
22
+ async description() {
23
+ return DESCRIPTION;
24
+ },
25
+ // Overridden in mcpClient.ts
26
+ async prompt() {
27
+ return PROMPT;
28
+ },
29
+ inputSchema,
30
+ // Overridden in mcpClient.ts
31
+ async *call() {
32
+ yield {
33
+ type: "result",
34
+ data: "",
35
+ resultForAssistant: ""
36
+ };
37
+ },
38
+ needsPermissions() {
39
+ return true;
40
+ },
41
+ renderToolUseMessage(input) {
42
+ return Object.entries(input).map(([key, value]) => `${key}: ${JSON.stringify(value)}`).join(", ");
43
+ },
44
+ // Overridden in mcpClient.ts
45
+ userFacingName: () => "mcp",
46
+ renderToolUseRejectedMessage() {
47
+ return /* @__PURE__ */ React.createElement(FallbackToolUseRejectedMessage, null);
48
+ },
49
+ renderToolResultMessage(output) {
50
+ const verbose = false;
51
+ if (Array.isArray(output)) {
52
+ return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column" }, output.map((item, i) => {
53
+ if (item.type === "image") {
54
+ return /* @__PURE__ */ React.createElement(
55
+ Box,
56
+ {
57
+ key: i,
58
+ justifyContent: "space-between",
59
+ overflowX: "hidden",
60
+ width: "100%"
61
+ },
62
+ /* @__PURE__ */ React.createElement(Box, { flexDirection: "row" }, /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0"), /* @__PURE__ */ React.createElement(Text, null, "[Image]"))
63
+ );
64
+ }
65
+ const lines2 = item.text.split("\n").length;
66
+ return /* @__PURE__ */ React.createElement(
67
+ OutputLine,
68
+ {
69
+ key: i,
70
+ content: item.text,
71
+ lines: lines2,
72
+ verbose
73
+ }
74
+ );
75
+ }));
76
+ }
77
+ if (!output) {
78
+ return /* @__PURE__ */ React.createElement(Box, { justifyContent: "space-between", overflowX: "hidden", width: "100%" }, /* @__PURE__ */ React.createElement(Box, { flexDirection: "row" }, /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0"), /* @__PURE__ */ React.createElement(Text, { color: getTheme().secondaryText }, "(No content)")));
79
+ }
80
+ const lines = output.split("\n").length;
81
+ return /* @__PURE__ */ React.createElement(OutputLine, { content: output, lines, verbose });
82
+ },
83
+ renderResultForAssistant(content) {
84
+ return content;
85
+ }
86
+ };
87
+ export {
88
+ MCPTool
89
+ };
90
+ //# sourceMappingURL=MCPTool.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tools/MCPTool/MCPTool.tsx"],
4
+ "sourcesContent": ["import { Box, Text } from 'ink'\nimport * as React from 'react'\nimport { z } from 'zod'\nimport { FallbackToolUseRejectedMessage } from '../../components/FallbackToolUseRejectedMessage'\nimport { type Tool } from '../../Tool'\nimport { getTheme } from '../../utils/theme'\nimport { DESCRIPTION, PROMPT } from './prompt'\nimport { OutputLine } from '../BashTool/OutputLine'\n\n// Allow any input object since MCP tools define their own schemas\nconst inputSchema = z.object({}).passthrough()\n\nexport const MCPTool = {\n async isEnabled() {\n return true\n },\n isReadOnly() {\n return false\n },\n isConcurrencySafe() {\n return false // MCPTool can modify state through MCP calls, not safe for concurrent execution\n },\n // Overridden in mcpClient.ts\n name: 'mcp',\n // Overridden in mcpClient.ts\n async description() {\n return DESCRIPTION\n },\n // Overridden in mcpClient.ts\n async prompt() {\n return PROMPT\n },\n inputSchema,\n // Overridden in mcpClient.ts\n async *call() {\n yield {\n type: 'result',\n data: '',\n resultForAssistant: '',\n }\n },\n needsPermissions() {\n return true\n },\n renderToolUseMessage(input) {\n return Object.entries(input)\n .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)\n .join(', ')\n },\n // Overridden in mcpClient.ts\n userFacingName: () => 'mcp',\n renderToolUseRejectedMessage() {\n return <FallbackToolUseRejectedMessage />\n },\n renderToolResultMessage(output) {\n const verbose = false // Set default value for verbose\n if (Array.isArray(output)) {\n return (\n <Box flexDirection=\"column\">\n {output.map((item, i) => {\n if (item.type === 'image') {\n return (\n <Box\n key={i}\n justifyContent=\"space-between\"\n overflowX=\"hidden\"\n width=\"100%\"\n >\n <Box flexDirection=\"row\">\n <Text>&nbsp;&nbsp;\u23BF &nbsp;</Text>\n <Text>[Image]</Text>\n </Box>\n </Box>\n )\n }\n const lines = item.text.split('\\n').length\n return (\n <OutputLine\n key={i}\n content={item.text}\n lines={lines}\n verbose={verbose}\n />\n )\n })}\n </Box>\n )\n }\n\n if (!output) {\n return (\n <Box justifyContent=\"space-between\" overflowX=\"hidden\" width=\"100%\">\n <Box flexDirection=\"row\">\n <Text>&nbsp;&nbsp;\u23BF &nbsp;</Text>\n <Text color={getTheme().secondaryText}>(No content)</Text>\n </Box>\n </Box>\n )\n }\n\n const lines = output.split('\\n').length\n return <OutputLine content={output} lines={lines} verbose={verbose} />\n },\n renderResultForAssistant(content) {\n return content\n },\n} satisfies Tool<typeof inputSchema, string>\n"],
5
+ "mappings": "AAAA,SAAS,KAAK,YAAY;AAC1B,YAAY,WAAW;AACvB,SAAS,SAAS;AAClB,SAAS,sCAAsC;AAE/C,SAAS,gBAAgB;AACzB,SAAS,aAAa,cAAc;AACpC,SAAS,kBAAkB;AAG3B,MAAM,cAAc,EAAE,OAAO,CAAC,CAAC,EAAE,YAAY;AAEtC,MAAM,UAAU;AAAA,EACrB,MAAM,YAAY;AAChB,WAAO;AAAA,EACT;AAAA,EACA,aAAa;AACX,WAAO;AAAA,EACT;AAAA,EACA,oBAAoB;AAClB,WAAO;AAAA,EACT;AAAA;AAAA,EAEA,MAAM;AAAA;AAAA,EAEN,MAAM,cAAc;AAClB,WAAO;AAAA,EACT;AAAA;AAAA,EAEA,MAAM,SAAS;AACb,WAAO;AAAA,EACT;AAAA,EACA;AAAA;AAAA,EAEA,OAAO,OAAO;AACZ,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,oBAAoB;AAAA,IACtB;AAAA,EACF;AAAA,EACA,mBAAmB;AACjB,WAAO;AAAA,EACT;AAAA,EACA,qBAAqB,OAAO;AAC1B,WAAO,OAAO,QAAQ,KAAK,EACxB,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,KAAK,KAAK,UAAU,KAAK,CAAC,EAAE,EACxD,KAAK,IAAI;AAAA,EACd;AAAA;AAAA,EAEA,gBAAgB,MAAM;AAAA,EACtB,+BAA+B;AAC7B,WAAO,oCAAC,oCAA+B;AAAA,EACzC;AAAA,EACA,wBAAwB,QAAQ;AAC9B,UAAM,UAAU;AAChB,QAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,aACE,oCAAC,OAAI,eAAc,YAChB,OAAO,IAAI,CAAC,MAAM,MAAM;AACvB,YAAI,KAAK,SAAS,SAAS;AACzB,iBACE;AAAA,YAAC;AAAA;AAAA,cACC,KAAK;AAAA,cACL,gBAAe;AAAA,cACf,WAAU;AAAA,cACV,OAAM;AAAA;AAAA,YAEN,oCAAC,OAAI,eAAc,SACjB,oCAAC,YAAK,qBAAoB,GAC1B,oCAAC,YAAK,SAAO,CACf;AAAA,UACF;AAAA,QAEJ;AACA,cAAMA,SAAQ,KAAK,KAAK,MAAM,IAAI,EAAE;AACpC,eACE;AAAA,UAAC;AAAA;AAAA,YACC,KAAK;AAAA,YACL,SAAS,KAAK;AAAA,YACd,OAAOA;AAAA,YACP;AAAA;AAAA,QACF;AAAA,MAEJ,CAAC,CACH;AAAA,IAEJ;AAEA,QAAI,CAAC,QAAQ;AACX,aACE,oCAAC,OAAI,gBAAe,iBAAgB,WAAU,UAAS,OAAM,UAC3D,oCAAC,OAAI,eAAc,SACjB,oCAAC,YAAK,qBAAoB,GAC1B,oCAAC,QAAK,OAAO,SAAS,EAAE,iBAAe,cAAY,CACrD,CACF;AAAA,IAEJ;AAEA,UAAM,QAAQ,OAAO,MAAM,IAAI,EAAE;AACjC,WAAO,oCAAC,cAAW,SAAS,QAAQ,OAAc,SAAkB;AAAA,EACtE;AAAA,EACA,yBAAyB,SAAS;AAChC,WAAO;AAAA,EACT;AACF;",
6
+ "names": ["lines"]
7
+ }
@@ -0,0 +1,7 @@
1
+ const PROMPT = "";
2
+ const DESCRIPTION = "";
3
+ export {
4
+ DESCRIPTION,
5
+ PROMPT
6
+ };
7
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tools/MCPTool/prompt.ts"],
4
+ "sourcesContent": ["// Actual prompt and description are overridden in mcpClient.ts\nexport const PROMPT = ''\nexport const DESCRIPTION = ''\n"],
5
+ "mappings": "AACO,MAAM,SAAS;AACf,MAAM,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1,103 @@
1
+ import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync } from "fs";
2
+ import { Box, Text } from "ink";
3
+ import { join } from "path";
4
+ import * as React from "react";
5
+ import { z } from "zod";
6
+ import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
7
+ import { MEMORY_DIR } from "../../utils/env.js";
8
+ import { resolveAgentId } from "../../utils/agentStorage.js";
9
+ import { DESCRIPTION, PROMPT } from "./prompt.js";
10
+ const inputSchema = z.strictObject({
11
+ file_path: z.string().optional().describe("Optional path to a specific memory file to read")
12
+ });
13
+ const MemoryReadTool = {
14
+ name: "MemoryRead",
15
+ async description() {
16
+ return DESCRIPTION;
17
+ },
18
+ async prompt() {
19
+ return PROMPT;
20
+ },
21
+ inputSchema,
22
+ userFacingName() {
23
+ return "Read Memory";
24
+ },
25
+ async isEnabled() {
26
+ return false;
27
+ },
28
+ isReadOnly() {
29
+ return true;
30
+ },
31
+ isConcurrencySafe() {
32
+ return true;
33
+ },
34
+ needsPermissions() {
35
+ return false;
36
+ },
37
+ renderResultForAssistant({ content }) {
38
+ return content;
39
+ },
40
+ renderToolUseMessage(input) {
41
+ return Object.entries(input).map(([key, value]) => `${key}: ${JSON.stringify(value)}`).join(", ");
42
+ },
43
+ renderToolUseRejectedMessage() {
44
+ return /* @__PURE__ */ React.createElement(FallbackToolUseRejectedMessage, null);
45
+ },
46
+ renderToolResultMessage(output) {
47
+ return /* @__PURE__ */ React.createElement(Box, { justifyContent: "space-between", overflowX: "hidden", width: "100%" }, /* @__PURE__ */ React.createElement(Box, { flexDirection: "row" }, /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0"), /* @__PURE__ */ React.createElement(Text, null, output.content)));
48
+ },
49
+ async validateInput({ file_path }, context) {
50
+ const agentId = resolveAgentId(context?.agentId);
51
+ const agentMemoryDir = join(MEMORY_DIR, "agents", agentId);
52
+ if (file_path) {
53
+ const fullPath = join(agentMemoryDir, file_path);
54
+ if (!fullPath.startsWith(agentMemoryDir)) {
55
+ return { result: false, message: "Invalid memory file path" };
56
+ }
57
+ if (!existsSync(fullPath)) {
58
+ return { result: false, message: "Memory file does not exist" };
59
+ }
60
+ }
61
+ return { result: true };
62
+ },
63
+ async *call({ file_path }, context) {
64
+ const agentId = resolveAgentId(context?.agentId);
65
+ const agentMemoryDir = join(MEMORY_DIR, "agents", agentId);
66
+ mkdirSync(agentMemoryDir, { recursive: true });
67
+ if (file_path) {
68
+ const fullPath = join(agentMemoryDir, file_path);
69
+ if (!existsSync(fullPath)) {
70
+ throw new Error("Memory file does not exist");
71
+ }
72
+ const content2 = readFileSync(fullPath, "utf-8");
73
+ yield {
74
+ type: "result",
75
+ data: {
76
+ content: content2
77
+ },
78
+ resultForAssistant: this.renderResultForAssistant({ content: content2 })
79
+ };
80
+ return;
81
+ }
82
+ const files = readdirSync(agentMemoryDir, { recursive: true }).map((f) => join(agentMemoryDir, f.toString())).filter((f) => !lstatSync(f).isDirectory()).map((f) => `- ${f}`).join("\n");
83
+ const indexPath = join(agentMemoryDir, "index.md");
84
+ const index = existsSync(indexPath) ? readFileSync(indexPath, "utf-8") : "";
85
+ const quotes = "'''";
86
+ const content = `Here are the contents of the agent memory file, \`${indexPath}\`:
87
+ ${quotes}
88
+ ${index}
89
+ ${quotes}
90
+
91
+ Files in the agent memory directory:
92
+ ${files}`;
93
+ yield {
94
+ type: "result",
95
+ data: { content },
96
+ resultForAssistant: this.renderResultForAssistant({ content })
97
+ };
98
+ }
99
+ };
100
+ export {
101
+ MemoryReadTool
102
+ };
103
+ //# sourceMappingURL=MemoryReadTool.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tools/MemoryReadTool/MemoryReadTool.tsx"],
4
+ "sourcesContent": ["import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync } from 'fs'\nimport { Box, Text } from 'ink'\nimport { join } from 'path'\nimport * as React from 'react'\nimport { z } from 'zod'\nimport { FallbackToolUseRejectedMessage } from '../../components/FallbackToolUseRejectedMessage'\nimport { Tool } from '../../Tool'\nimport { MEMORY_DIR } from '../../utils/env'\nimport { resolveAgentId } from '../../utils/agentStorage'\nimport { DESCRIPTION, PROMPT } from './prompt'\n\nconst inputSchema = z.strictObject({\n file_path: z\n .string()\n .optional()\n .describe('Optional path to a specific memory file to read'),\n})\n\nexport const MemoryReadTool = {\n name: 'MemoryRead',\n async description() {\n return DESCRIPTION\n },\n async prompt() {\n return PROMPT\n },\n inputSchema,\n userFacingName() {\n return 'Read Memory'\n },\n async isEnabled() {\n // TODO: Use a statsig gate\n // TODO: Figure out how to do that without regressing app startup perf\n return false\n },\n isReadOnly() {\n return true\n },\n isConcurrencySafe() {\n return true // MemoryRead is read-only, safe for concurrent execution\n },\n needsPermissions() {\n return false\n },\n renderResultForAssistant({ content }) {\n return content\n },\n renderToolUseMessage(input) {\n return Object.entries(input)\n .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)\n .join(', ')\n },\n renderToolUseRejectedMessage() {\n return <FallbackToolUseRejectedMessage />\n },\n renderToolResultMessage(output) {\n return (\n <Box justifyContent=\"space-between\" overflowX=\"hidden\" width=\"100%\">\n <Box flexDirection=\"row\">\n <Text>&nbsp;&nbsp;\u23BF &nbsp;</Text>\n <Text>{output.content}</Text>\n </Box>\n </Box>\n )\n },\n async validateInput({ file_path }, context) {\n const agentId = resolveAgentId(context?.agentId)\n const agentMemoryDir = join(MEMORY_DIR, 'agents', agentId)\n\n if (file_path) {\n const fullPath = join(agentMemoryDir, file_path)\n if (!fullPath.startsWith(agentMemoryDir)) {\n return { result: false, message: 'Invalid memory file path' }\n }\n if (!existsSync(fullPath)) {\n return { result: false, message: 'Memory file does not exist' }\n }\n }\n return { result: true }\n },\n async *call({ file_path }, context) {\n const agentId = resolveAgentId(context?.agentId)\n const agentMemoryDir = join(MEMORY_DIR, 'agents', agentId)\n mkdirSync(agentMemoryDir, { recursive: true })\n\n // If a specific file is requested, return its contents\n if (file_path) {\n const fullPath = join(agentMemoryDir, file_path)\n if (!existsSync(fullPath)) {\n throw new Error('Memory file does not exist')\n }\n const content = readFileSync(fullPath, 'utf-8')\n yield {\n type: 'result',\n data: {\n content,\n },\n resultForAssistant: this.renderResultForAssistant({ content }),\n }\n return\n }\n\n // Otherwise return the index and file list for this agent\n const files = readdirSync(agentMemoryDir, { recursive: true })\n .map(f => join(agentMemoryDir, f.toString()))\n .filter(f => !lstatSync(f).isDirectory())\n .map(f => `- ${f}`)\n .join('\\n')\n\n const indexPath = join(agentMemoryDir, 'index.md')\n const index = existsSync(indexPath) ? readFileSync(indexPath, 'utf-8') : ''\n\n const quotes = \"'''\"\n const content = `Here are the contents of the agent memory file, \\`${indexPath}\\`:\n${quotes}\n${index}\n${quotes}\n\nFiles in the agent memory directory:\n${files}`\n yield {\n type: 'result',\n data: { content },\n resultForAssistant: this.renderResultForAssistant({ content }),\n }\n },\n} satisfies Tool<typeof inputSchema, { content: string }>\n"],
5
+ "mappings": "AAAA,SAAS,YAAY,WAAW,WAAW,aAAa,oBAAoB;AAC5E,SAAS,KAAK,YAAY;AAC1B,SAAS,YAAY;AACrB,YAAY,WAAW;AACvB,SAAS,SAAS;AAClB,SAAS,sCAAsC;AAE/C,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAC/B,SAAS,aAAa,cAAc;AAEpC,MAAM,cAAc,EAAE,aAAa;AAAA,EACjC,WAAW,EACR,OAAO,EACP,SAAS,EACT,SAAS,iDAAiD;AAC/D,CAAC;AAEM,MAAM,iBAAiB;AAAA,EAC5B,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;AAGhB,WAAO;AAAA,EACT;AAAA,EACA,aAAa;AACX,WAAO;AAAA,EACT;AAAA,EACA,oBAAoB;AAClB,WAAO;AAAA,EACT;AAAA,EACA,mBAAmB;AACjB,WAAO;AAAA,EACT;AAAA,EACA,yBAAyB,EAAE,QAAQ,GAAG;AACpC,WAAO;AAAA,EACT;AAAA,EACA,qBAAqB,OAAO;AAC1B,WAAO,OAAO,QAAQ,KAAK,EACxB,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,KAAK,KAAK,UAAU,KAAK,CAAC,EAAE,EACxD,KAAK,IAAI;AAAA,EACd;AAAA,EACA,+BAA+B;AAC7B,WAAO,oCAAC,oCAA+B;AAAA,EACzC;AAAA,EACA,wBAAwB,QAAQ;AAC9B,WACE,oCAAC,OAAI,gBAAe,iBAAgB,WAAU,UAAS,OAAM,UAC3D,oCAAC,OAAI,eAAc,SACjB,oCAAC,YAAK,qBAAoB,GAC1B,oCAAC,YAAM,OAAO,OAAQ,CACxB,CACF;AAAA,EAEJ;AAAA,EACA,MAAM,cAAc,EAAE,UAAU,GAAG,SAAS;AAC1C,UAAM,UAAU,eAAe,SAAS,OAAO;AAC/C,UAAM,iBAAiB,KAAK,YAAY,UAAU,OAAO;AAEzD,QAAI,WAAW;AACb,YAAM,WAAW,KAAK,gBAAgB,SAAS;AAC/C,UAAI,CAAC,SAAS,WAAW,cAAc,GAAG;AACxC,eAAO,EAAE,QAAQ,OAAO,SAAS,2BAA2B;AAAA,MAC9D;AACA,UAAI,CAAC,WAAW,QAAQ,GAAG;AACzB,eAAO,EAAE,QAAQ,OAAO,SAAS,6BAA6B;AAAA,MAChE;AAAA,IACF;AACA,WAAO,EAAE,QAAQ,KAAK;AAAA,EACxB;AAAA,EACA,OAAO,KAAK,EAAE,UAAU,GAAG,SAAS;AAClC,UAAM,UAAU,eAAe,SAAS,OAAO;AAC/C,UAAM,iBAAiB,KAAK,YAAY,UAAU,OAAO;AACzD,cAAU,gBAAgB,EAAE,WAAW,KAAK,CAAC;AAG7C,QAAI,WAAW;AACb,YAAM,WAAW,KAAK,gBAAgB,SAAS;AAC/C,UAAI,CAAC,WAAW,QAAQ,GAAG;AACzB,cAAM,IAAI,MAAM,4BAA4B;AAAA,MAC9C;AACA,YAAMA,WAAU,aAAa,UAAU,OAAO;AAC9C,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,UACJ,SAAAA;AAAA,QACF;AAAA,QACA,oBAAoB,KAAK,yBAAyB,EAAE,SAAAA,SAAQ,CAAC;AAAA,MAC/D;AACA;AAAA,IACF;AAGA,UAAM,QAAQ,YAAY,gBAAgB,EAAE,WAAW,KAAK,CAAC,EAC1D,IAAI,OAAK,KAAK,gBAAgB,EAAE,SAAS,CAAC,CAAC,EAC3C,OAAO,OAAK,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,EACvC,IAAI,OAAK,KAAK,CAAC,EAAE,EACjB,KAAK,IAAI;AAEZ,UAAM,YAAY,KAAK,gBAAgB,UAAU;AACjD,UAAM,QAAQ,WAAW,SAAS,IAAI,aAAa,WAAW,OAAO,IAAI;AAEzE,UAAM,SAAS;AACf,UAAM,UAAU,qDAAqD,SAAS;AAAA,EAChF,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA;AAAA;AAAA,EAGN,KAAK;AACH,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,MAAM,EAAE,QAAQ;AAAA,MAChB,oBAAoB,KAAK,yBAAyB,EAAE,QAAQ,CAAC;AAAA,IAC/D;AAAA,EACF;AACF;",
6
+ "names": ["content"]
7
+ }
@@ -0,0 +1,7 @@
1
+ const PROMPT = "";
2
+ const DESCRIPTION = "";
3
+ export {
4
+ DESCRIPTION,
5
+ PROMPT
6
+ };
7
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tools/MemoryReadTool/prompt.ts"],
4
+ "sourcesContent": ["// Actual prompt and description are overridden in mcpClient.ts\nexport const PROMPT = ''\nexport const DESCRIPTION = ''\n"],
5
+ "mappings": "AACO,MAAM,SAAS;AACf,MAAM,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1,77 @@
1
+ import { mkdirSync, writeFileSync } from "fs";
2
+ import { Box, Text } from "ink";
3
+ import { dirname, join } from "path";
4
+ import * as React from "react";
5
+ import { z } from "zod";
6
+ import { FallbackToolUseRejectedMessage } from "../../components/FallbackToolUseRejectedMessage.js";
7
+ import { MEMORY_DIR } from "../../utils/env.js";
8
+ import { resolveAgentId } from "../../utils/agentStorage.js";
9
+ import { recordFileEdit } from "../../services/fileFreshness.js";
10
+ import { DESCRIPTION, PROMPT } from "./prompt.js";
11
+ const inputSchema = z.strictObject({
12
+ file_path: z.string().describe("Path to the memory file to write"),
13
+ content: z.string().describe("Content to write to the file")
14
+ });
15
+ const MemoryWriteTool = {
16
+ name: "MemoryWrite",
17
+ async description() {
18
+ return DESCRIPTION;
19
+ },
20
+ async prompt() {
21
+ return PROMPT;
22
+ },
23
+ inputSchema,
24
+ userFacingName() {
25
+ return "Write Memory";
26
+ },
27
+ async isEnabled() {
28
+ return false;
29
+ },
30
+ isReadOnly() {
31
+ return false;
32
+ },
33
+ isConcurrencySafe() {
34
+ return false;
35
+ },
36
+ needsPermissions() {
37
+ return false;
38
+ },
39
+ renderResultForAssistant(content) {
40
+ return content;
41
+ },
42
+ renderToolUseMessage(input) {
43
+ return Object.entries(input).map(([key, value]) => `${key}: ${JSON.stringify(value)}`).join(", ");
44
+ },
45
+ renderToolUseRejectedMessage() {
46
+ return /* @__PURE__ */ React.createElement(FallbackToolUseRejectedMessage, null);
47
+ },
48
+ renderToolResultMessage() {
49
+ return /* @__PURE__ */ React.createElement(Box, { justifyContent: "space-between", overflowX: "hidden", width: "100%" }, /* @__PURE__ */ React.createElement(Box, { flexDirection: "row" }, /* @__PURE__ */ React.createElement(Text, null, " ", "\u23BF Updated memory")));
50
+ },
51
+ async validateInput({ file_path }, context) {
52
+ const agentId = resolveAgentId(context?.agentId);
53
+ const agentMemoryDir = join(MEMORY_DIR, "agents", agentId);
54
+ const fullPath = join(agentMemoryDir, file_path);
55
+ if (!fullPath.startsWith(agentMemoryDir)) {
56
+ return { result: false, message: "Invalid memory file path" };
57
+ }
58
+ return { result: true };
59
+ },
60
+ async *call({ file_path, content }, context) {
61
+ const agentId = resolveAgentId(context?.agentId);
62
+ const agentMemoryDir = join(MEMORY_DIR, "agents", agentId);
63
+ const fullPath = join(agentMemoryDir, file_path);
64
+ mkdirSync(dirname(fullPath), { recursive: true });
65
+ writeFileSync(fullPath, content, "utf-8");
66
+ recordFileEdit(fullPath, content);
67
+ yield {
68
+ type: "result",
69
+ data: "Saved",
70
+ resultForAssistant: "Saved"
71
+ };
72
+ }
73
+ };
74
+ export {
75
+ MemoryWriteTool
76
+ };
77
+ //# sourceMappingURL=MemoryWriteTool.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/tools/MemoryWriteTool/MemoryWriteTool.tsx"],
4
+ "sourcesContent": ["import { mkdirSync, writeFileSync } from 'fs'\nimport { Box, Text } from 'ink'\nimport { dirname, join } from 'path'\nimport * as React from 'react'\nimport { z } from 'zod'\nimport { FallbackToolUseRejectedMessage } from '../../components/FallbackToolUseRejectedMessage'\nimport { Tool } from '../../Tool'\nimport { MEMORY_DIR } from '../../utils/env'\nimport { resolveAgentId } from '../../utils/agentStorage'\nimport { recordFileEdit } from '../../services/fileFreshness'\nimport { DESCRIPTION, PROMPT } from './prompt'\n\nconst inputSchema = z.strictObject({\n file_path: z.string().describe('Path to the memory file to write'),\n content: z.string().describe('Content to write to the file'),\n})\n\nexport const MemoryWriteTool = {\n name: 'MemoryWrite',\n async description() {\n return DESCRIPTION\n },\n async prompt() {\n return PROMPT\n },\n inputSchema,\n userFacingName() {\n return 'Write Memory'\n },\n async isEnabled() {\n // TODO: Use a statsig gate\n // TODO: Figure out how to do that without regressing app startup perf\n return false\n },\n isReadOnly() {\n return false\n },\n isConcurrencySafe() {\n return false // MemoryWrite modifies state, not safe for concurrent execution\n },\n needsPermissions() {\n return false\n },\n renderResultForAssistant(content) {\n return content\n },\n renderToolUseMessage(input) {\n return Object.entries(input)\n .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)\n .join(', ')\n },\n renderToolUseRejectedMessage() {\n return <FallbackToolUseRejectedMessage />\n },\n renderToolResultMessage() {\n return (\n <Box justifyContent=\"space-between\" overflowX=\"hidden\" width=\"100%\">\n <Box flexDirection=\"row\">\n <Text>{' '}\u23BF Updated memory</Text>\n </Box>\n </Box>\n )\n },\n async validateInput({ file_path }, context) {\n const agentId = resolveAgentId(context?.agentId)\n const agentMemoryDir = join(MEMORY_DIR, 'agents', agentId)\n const fullPath = join(agentMemoryDir, file_path)\n if (!fullPath.startsWith(agentMemoryDir)) {\n return { result: false, message: 'Invalid memory file path' }\n }\n return { result: true }\n },\n async *call({ file_path, content }, context) {\n const agentId = resolveAgentId(context?.agentId)\n const agentMemoryDir = join(MEMORY_DIR, 'agents', agentId)\n const fullPath = join(agentMemoryDir, file_path)\n mkdirSync(dirname(fullPath), { recursive: true })\n writeFileSync(fullPath, content, 'utf-8')\n\n // Record Agent edit operation for file freshness tracking\n recordFileEdit(fullPath, content)\n\n yield {\n type: 'result',\n data: 'Saved',\n resultForAssistant: 'Saved',\n }\n },\n} satisfies Tool<typeof inputSchema, string>\n"],
5
+ "mappings": "AAAA,SAAS,WAAW,qBAAqB;AACzC,SAAS,KAAK,YAAY;AAC1B,SAAS,SAAS,YAAY;AAC9B,YAAY,WAAW;AACvB,SAAS,SAAS;AAClB,SAAS,sCAAsC;AAE/C,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAC/B,SAAS,sBAAsB;AAC/B,SAAS,aAAa,cAAc;AAEpC,MAAM,cAAc,EAAE,aAAa;AAAA,EACjC,WAAW,EAAE,OAAO,EAAE,SAAS,kCAAkC;AAAA,EACjE,SAAS,EAAE,OAAO,EAAE,SAAS,8BAA8B;AAC7D,CAAC;AAEM,MAAM,kBAAkB;AAAA,EAC7B,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;AAGhB,WAAO;AAAA,EACT;AAAA,EACA,aAAa;AACX,WAAO;AAAA,EACT;AAAA,EACA,oBAAoB;AAClB,WAAO;AAAA,EACT;AAAA,EACA,mBAAmB;AACjB,WAAO;AAAA,EACT;AAAA,EACA,yBAAyB,SAAS;AAChC,WAAO;AAAA,EACT;AAAA,EACA,qBAAqB,OAAO;AAC1B,WAAO,OAAO,QAAQ,KAAK,EACxB,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,KAAK,KAAK,UAAU,KAAK,CAAC,EAAE,EACxD,KAAK,IAAI;AAAA,EACd;AAAA,EACA,+BAA+B;AAC7B,WAAO,oCAAC,oCAA+B;AAAA,EACzC;AAAA,EACA,0BAA0B;AACxB,WACE,oCAAC,OAAI,gBAAe,iBAAgB,WAAU,UAAS,OAAM,UAC3D,oCAAC,OAAI,eAAc,SACjB,oCAAC,YAAM,MAAK,uBAAgB,CAC9B,CACF;AAAA,EAEJ;AAAA,EACA,MAAM,cAAc,EAAE,UAAU,GAAG,SAAS;AAC1C,UAAM,UAAU,eAAe,SAAS,OAAO;AAC/C,UAAM,iBAAiB,KAAK,YAAY,UAAU,OAAO;AACzD,UAAM,WAAW,KAAK,gBAAgB,SAAS;AAC/C,QAAI,CAAC,SAAS,WAAW,cAAc,GAAG;AACxC,aAAO,EAAE,QAAQ,OAAO,SAAS,2BAA2B;AAAA,IAC9D;AACA,WAAO,EAAE,QAAQ,KAAK;AAAA,EACxB;AAAA,EACA,OAAO,KAAK,EAAE,WAAW,QAAQ,GAAG,SAAS;AAC3C,UAAM,UAAU,eAAe,SAAS,OAAO;AAC/C,UAAM,iBAAiB,KAAK,YAAY,UAAU,OAAO;AACzD,UAAM,WAAW,KAAK,gBAAgB,SAAS;AAC/C,cAAU,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAChD,kBAAc,UAAU,SAAS,OAAO;AAGxC,mBAAe,UAAU,OAAO;AAEhC,UAAM;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,oBAAoB;AAAA,IACtB;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }