@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,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/fuzzyMatcher.ts"],
4
+ "sourcesContent": ["/**\n * Input Method Inspired Fuzzy Matching Algorithm\n * \n * Multi-algorithm weighted scoring system inspired by:\n * - Sogou/Baidu Pinyin input method algorithms\n * - Double-pinyin abbreviation matching\n * - Terminal completion best practices (fzf, zsh, fish)\n * \n * Designed specifically for command/terminal completion scenarios\n * where users type abbreviations like \"nde\" expecting \"node\"\n */\n\nexport interface MatchResult {\n score: number\n algorithm: string // Which algorithm contributed most to the score\n confidence: number // 0-1 confidence level\n}\n\nexport interface FuzzyMatcherConfig {\n // Algorithm weights (must sum to 1.0)\n weights: {\n prefix: number // Direct prefix matching (\"nod\" \u2192 \"node\")\n substring: number // Substring matching (\"ode\" \u2192 \"node\") \n abbreviation: number // Key chars matching (\"nde\" \u2192 \"node\")\n editDistance: number // Typo tolerance (\"noda\" \u2192 \"node\")\n popularity: number // Common command boost\n }\n \n // Scoring parameters\n minScore: number // Minimum score threshold\n maxEditDistance: number // Maximum edits allowed\n popularCommands: string[] // Commands to boost\n}\n\nconst DEFAULT_CONFIG: FuzzyMatcherConfig = {\n weights: {\n prefix: 0.35, // Strong weight for prefix matching\n substring: 0.20, // Good for partial matches \n abbreviation: 0.30, // Key for \"nde\"\u2192\"node\" cases\n editDistance: 0.10, // Typo tolerance\n popularity: 0.05 // Slight bias for common commands\n },\n minScore: 10, // Lower threshold for better matching\n maxEditDistance: 2,\n popularCommands: [\n 'node', 'npm', 'git', 'ls', 'cd', 'cat', 'grep', 'find', 'cp', 'mv',\n 'python', 'java', 'docker', 'curl', 'wget', 'vim', 'nano'\n ]\n}\n\nexport class FuzzyMatcher {\n private config: FuzzyMatcherConfig\n\n constructor(config: Partial<FuzzyMatcherConfig> = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config }\n \n // Normalize weights to sum to 1.0\n const weightSum = Object.values(this.config.weights).reduce((a, b) => a + b, 0)\n if (Math.abs(weightSum - 1.0) > 0.01) {\n Object.keys(this.config.weights).forEach(key => {\n this.config.weights[key as keyof typeof this.config.weights] /= weightSum\n })\n }\n }\n\n /**\n * Calculate fuzzy match score for a candidate against a query\n */\n match(candidate: string, query: string): MatchResult {\n const text = candidate.toLowerCase()\n const pattern = query.toLowerCase()\n\n // Quick perfect match exits\n if (text === pattern) {\n return { score: 1000, algorithm: 'exact', confidence: 1.0 }\n }\n if (text.startsWith(pattern)) {\n return { \n score: 900 + (10 - pattern.length), \n algorithm: 'prefix-exact', \n confidence: 0.95 \n }\n }\n\n // Run all algorithms\n const scores = {\n prefix: this.prefixScore(text, pattern),\n substring: this.substringScore(text, pattern), \n abbreviation: this.abbreviationScore(text, pattern),\n editDistance: this.editDistanceScore(text, pattern),\n popularity: this.popularityScore(text)\n }\n\n // Weighted combination\n const rawScore = Object.entries(scores).reduce((total, [algorithm, score]) => {\n const weight = this.config.weights[algorithm as keyof typeof this.config.weights]\n return total + (score * weight)\n }, 0)\n\n // Length penalty (prefer shorter commands)\n const lengthPenalty = Math.max(0, text.length - 6) * 1.5\n const finalScore = Math.max(0, rawScore - lengthPenalty)\n\n // Determine primary algorithm and confidence\n const maxAlgorithm = Object.entries(scores).reduce((max, [alg, score]) => \n score > max.score ? { algorithm: alg, score } : max, \n { algorithm: 'none', score: 0 }\n )\n\n const confidence = Math.min(1.0, finalScore / 100)\n\n return {\n score: finalScore,\n algorithm: maxAlgorithm.algorithm,\n confidence\n }\n }\n\n /**\n * Algorithm 1: Prefix Matching (like pinyin prefix)\n * Handles cases like \"nod\" \u2192 \"node\"\n */\n private prefixScore(text: string, pattern: string): number {\n if (!text.startsWith(pattern)) return 0\n \n // Score based on prefix length vs total length\n const coverage = pattern.length / text.length\n return 100 * coverage\n }\n\n /**\n * Algorithm 2: Substring Matching (like pinyin contains) \n * Handles cases like \"ode\" \u2192 \"node\", \"py3\" \u2192 \"python3\"\n */\n private substringScore(text: string, pattern: string): number {\n // Direct substring match\n const index = text.indexOf(pattern)\n if (index !== -1) {\n // Earlier position and better coverage = higher score\n const positionFactor = Math.max(0, 10 - index) / 10\n const coverageFactor = pattern.length / text.length\n return 80 * positionFactor * coverageFactor\n }\n \n // Special handling for numeric suffixes (py3 \u2192 python3)\n // Check if pattern ends with a number and try prefix match + number\n const numMatch = pattern.match(/^(.+?)(\\d+)$/)\n if (numMatch) {\n const [, prefix, num] = numMatch\n // Check if text starts with prefix and ends with the same number\n if (text.startsWith(prefix) && text.endsWith(num)) {\n // Good match for patterns like \"py3\" \u2192 \"python3\"\n const coverageFactor = pattern.length / text.length\n return 70 * coverageFactor + 20 // Bonus for numeric suffix match\n }\n }\n \n return 0\n }\n\n /**\n * Algorithm 3: Abbreviation Matching (key innovation)\n * Handles cases like \"nde\" \u2192 \"node\", \"pyt3\" \u2192 \"python3\", \"gp5\" \u2192 \"gpt-5\"\n */\n private abbreviationScore(text: string, pattern: string): number {\n let score = 0\n let textPos = 0\n let perfectStart = false\n let consecutiveMatches = 0\n let wordBoundaryMatches = 0\n \n // Split text by hyphens to handle word boundaries better\n const textWords = text.split('-')\n const textClean = text.replace(/-/g, '').toLowerCase()\n \n for (let i = 0; i < pattern.length; i++) {\n const char = pattern[i]\n let charFound = false\n \n // Try to find in clean text (no hyphens)\n for (let j = textPos; j < textClean.length; j++) {\n if (textClean[j] === char) {\n charFound = true\n \n // Check if this character is at a word boundary in original text\n let originalPos = 0\n let cleanPos = 0\n for (let k = 0; k < text.length; k++) {\n if (text[k] === '-') continue\n if (cleanPos === j) {\n originalPos = k\n break\n }\n cleanPos++\n }\n \n // Consecutive character bonus\n if (j === textPos) {\n consecutiveMatches++\n } else {\n consecutiveMatches = 1\n }\n \n // Position-sensitive scoring\n if (i === 0 && j === 0) {\n score += 50 // Perfect first character\n perfectStart = true\n } else if (originalPos === 0 || text[originalPos - 1] === '-') {\n score += 35 // Word boundary match\n wordBoundaryMatches++\n } else if (j <= 2) {\n score += 20 // Early position\n } else if (j <= 6) {\n score += 10 // Mid position \n } else {\n score += 5 // Late position\n }\n \n // Consecutive character bonus\n if (consecutiveMatches > 1) {\n score += consecutiveMatches * 5\n }\n \n textPos = j + 1\n break\n }\n }\n \n if (!charFound) return 0 // Invalid abbreviation\n }\n \n // Critical bonuses\n if (perfectStart) score += 30\n if (wordBoundaryMatches >= 2) score += 25 // Multiple word boundaries\n if (textPos <= textClean.length * 0.8) score += 15 // Compact abbreviation\n \n // Special bonus for number matching at end\n const lastPatternChar = pattern[pattern.length - 1]\n const lastTextChar = text[text.length - 1]\n if (/\\d/.test(lastPatternChar) && lastPatternChar === lastTextChar) {\n score += 25\n }\n \n return score\n }\n\n /**\n * Algorithm 4: Edit Distance (typo tolerance)\n * Handles cases like \"noda\" \u2192 \"node\"\n */\n private editDistanceScore(text: string, pattern: string): number {\n if (pattern.length > text.length + this.config.maxEditDistance) return 0\n \n // Simplified Levenshtein distance \n const dp: number[][] = []\n const m = pattern.length\n const n = text.length\n \n // Initialize DP table\n for (let i = 0; i <= m; i++) {\n dp[i] = []\n for (let j = 0; j <= n; j++) {\n if (i === 0) dp[i][j] = j\n else if (j === 0) dp[i][j] = i\n else {\n const cost = pattern[i-1] === text[j-1] ? 0 : 1\n dp[i][j] = Math.min(\n dp[i-1][j] + 1, // deletion\n dp[i][j-1] + 1, // insertion\n dp[i-1][j-1] + cost // substitution\n )\n }\n }\n }\n \n const distance = dp[m][n]\n if (distance > this.config.maxEditDistance) return 0\n \n return Math.max(0, 30 - distance * 10)\n }\n\n /**\n * Algorithm 5: Command Popularity (like frequency in input method)\n * Boost common commands that users frequently type\n */\n private popularityScore(text: string): number {\n if (this.config.popularCommands.includes(text)) {\n return 40\n }\n \n // Short commands are often more commonly used\n if (text.length <= 5) return 10\n \n return 0\n }\n\n /**\n * Batch match multiple candidates and return sorted results\n */\n matchMany(candidates: string[], query: string): Array<{candidate: string, result: MatchResult}> {\n return candidates\n .map(candidate => ({ \n candidate, \n result: this.match(candidate, query) \n }))\n .filter(item => item.result.score >= this.config.minScore)\n .sort((a, b) => b.result.score - a.result.score)\n }\n}\n\n// Export convenience functions\nexport const defaultMatcher = new FuzzyMatcher()\n\nexport function matchCommand(command: string, query: string): MatchResult {\n return defaultMatcher.match(command, query)\n}\n\n// Import the advanced matcher\nimport { matchManyAdvanced } from './advancedFuzzyMatcher'\n\nexport function matchCommands(commands: string[], query: string): Array<{command: string, score: number}> {\n // Use the advanced matcher for better results\n return matchManyAdvanced(commands, query, 5) // Lower threshold for better matching\n .map(item => ({ \n command: item.candidate, \n score: item.score \n }))\n}"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,46 @@
1
+ const NO_VALUE = Symbol("NO_VALUE");
2
+ async function lastX(as) {
3
+ let lastValue = NO_VALUE;
4
+ for await (const a of as) {
5
+ lastValue = a;
6
+ }
7
+ if (lastValue === NO_VALUE) {
8
+ throw new Error("No items in generator");
9
+ }
10
+ return lastValue;
11
+ }
12
+ async function* all(generators, concurrencyCap = Infinity) {
13
+ const next = (generator) => {
14
+ const promise = generator.next().then(({ done, value }) => ({
15
+ done,
16
+ value,
17
+ generator,
18
+ promise
19
+ }));
20
+ return promise;
21
+ };
22
+ const waiting = [...generators];
23
+ const promises = /* @__PURE__ */ new Set();
24
+ while (promises.size < concurrencyCap && waiting.length > 0) {
25
+ const gen = waiting.shift();
26
+ promises.add(next(gen));
27
+ }
28
+ while (promises.size > 0) {
29
+ const { done, value, generator, promise } = await Promise.race(promises);
30
+ promises.delete(promise);
31
+ if (!done) {
32
+ promises.add(next(generator));
33
+ if (value !== void 0) {
34
+ yield value;
35
+ }
36
+ } else if (waiting.length > 0) {
37
+ const nextGen = waiting.shift();
38
+ promises.add(next(nextGen));
39
+ }
40
+ }
41
+ }
42
+ export {
43
+ all,
44
+ lastX
45
+ };
46
+ //# sourceMappingURL=generators.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/generators.ts"],
4
+ "sourcesContent": ["const NO_VALUE = Symbol('NO_VALUE')\n\nexport async function lastX<A>(as: AsyncGenerator<A>): Promise<A> {\n let lastValue: A | typeof NO_VALUE = NO_VALUE\n for await (const a of as) {\n lastValue = a\n }\n if (lastValue === NO_VALUE) {\n throw new Error('No items in generator')\n }\n return lastValue\n}\n\ntype QueuedGenerator<A> = {\n done: boolean | void\n value: A | void\n generator: AsyncGenerator<A, void>\n promise: Promise<QueuedGenerator<A>>\n}\n\n// Run all generators concurrently up to a concurrency cap, yielding values as they come in\nexport async function* all<A>(\n generators: AsyncGenerator<A, void>[],\n concurrencyCap = Infinity,\n): AsyncGenerator<A, void> {\n const next = (generator: AsyncGenerator<A, void>) => {\n const promise: Promise<QueuedGenerator<A>> = generator\n .next()\n .then(({ done, value }) => ({\n done,\n value,\n generator,\n promise,\n }))\n return promise\n }\n const waiting = [...generators]\n const promises = new Set<Promise<QueuedGenerator<A>>>()\n\n // Start initial batch up to concurrency cap\n while (promises.size < concurrencyCap && waiting.length > 0) {\n const gen = waiting.shift()!\n promises.add(next(gen))\n }\n\n while (promises.size > 0) {\n const { done, value, generator, promise } = await Promise.race(promises)\n promises.delete(promise)\n\n if (!done) {\n promises.add(next(generator))\n // TODO: Clean this up\n if (value !== undefined) {\n yield value as A\n }\n } else if (waiting.length > 0) {\n // Start a new generator when one finishes\n const nextGen = waiting.shift()!\n promises.add(next(nextGen))\n }\n }\n}\n"],
5
+ "mappings": "AAAA,MAAM,WAAW,OAAO,UAAU;AAElC,eAAsB,MAAS,IAAmC;AAChE,MAAI,YAAiC;AACrC,mBAAiB,KAAK,IAAI;AACxB,gBAAY;AAAA,EACd;AACA,MAAI,cAAc,UAAU;AAC1B,UAAM,IAAI,MAAM,uBAAuB;AAAA,EACzC;AACA,SAAO;AACT;AAUA,gBAAuB,IACrB,YACA,iBAAiB,UACQ;AACzB,QAAM,OAAO,CAAC,cAAuC;AACnD,UAAM,UAAuC,UAC1C,KAAK,EACL,KAAK,CAAC,EAAE,MAAM,MAAM,OAAO;AAAA,MAC1B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE;AACJ,WAAO;AAAA,EACT;AACA,QAAM,UAAU,CAAC,GAAG,UAAU;AAC9B,QAAM,WAAW,oBAAI,IAAiC;AAGtD,SAAO,SAAS,OAAO,kBAAkB,QAAQ,SAAS,GAAG;AAC3D,UAAM,MAAM,QAAQ,MAAM;AAC1B,aAAS,IAAI,KAAK,GAAG,CAAC;AAAA,EACxB;AAEA,SAAO,SAAS,OAAO,GAAG;AACxB,UAAM,EAAE,MAAM,OAAO,WAAW,QAAQ,IAAI,MAAM,QAAQ,KAAK,QAAQ;AACvE,aAAS,OAAO,OAAO;AAEvB,QAAI,CAAC,MAAM;AACT,eAAS,IAAI,KAAK,SAAS,CAAC;AAE5B,UAAI,UAAU,QAAW;AACvB,cAAM;AAAA,MACR;AAAA,IACF,WAAW,QAAQ,SAAS,GAAG;AAE7B,YAAM,UAAU,QAAQ,MAAM;AAC9B,eAAS,IAAI,KAAK,OAAO,CAAC;AAAA,IAC5B;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,83 @@
1
+ import { memoize } from "lodash-es";
2
+ import { execFileNoThrow } from "./execFileNoThrow.js";
3
+ const getIsGit = memoize(async () => {
4
+ const { code } = await execFileNoThrow("git", [
5
+ "rev-parse",
6
+ "--is-inside-work-tree"
7
+ ]);
8
+ return code === 0;
9
+ });
10
+ const getHead = async () => {
11
+ const { stdout } = await execFileNoThrow("git", ["rev-parse", "HEAD"]);
12
+ return stdout.trim();
13
+ };
14
+ const getBranch = async () => {
15
+ const { stdout } = await execFileNoThrow(
16
+ "git",
17
+ ["rev-parse", "--abbrev-ref", "HEAD"],
18
+ void 0,
19
+ void 0,
20
+ false
21
+ );
22
+ return stdout.trim();
23
+ };
24
+ const getRemoteUrl = async () => {
25
+ const { stdout, code } = await execFileNoThrow(
26
+ "git",
27
+ ["remote", "get-url", "origin"],
28
+ void 0,
29
+ void 0,
30
+ false
31
+ );
32
+ return code === 0 ? stdout.trim() : null;
33
+ };
34
+ const getIsHeadOnRemote = async () => {
35
+ const { code } = await execFileNoThrow(
36
+ "git",
37
+ ["rev-parse", "@{u}"],
38
+ void 0,
39
+ void 0,
40
+ false
41
+ );
42
+ return code === 0;
43
+ };
44
+ const getIsClean = async () => {
45
+ const { stdout } = await execFileNoThrow(
46
+ "git",
47
+ ["status", "--porcelain"],
48
+ void 0,
49
+ void 0,
50
+ false
51
+ );
52
+ return stdout.trim().length === 0;
53
+ };
54
+ async function getGitState() {
55
+ try {
56
+ const [commitHash, branchName, remoteUrl, isHeadOnRemote, isClean] = await Promise.all([
57
+ getHead(),
58
+ getBranch(),
59
+ getRemoteUrl(),
60
+ getIsHeadOnRemote(),
61
+ getIsClean()
62
+ ]);
63
+ return {
64
+ commitHash,
65
+ branchName,
66
+ remoteUrl,
67
+ isHeadOnRemote,
68
+ isClean
69
+ };
70
+ } catch (_) {
71
+ return null;
72
+ }
73
+ }
74
+ export {
75
+ getBranch,
76
+ getGitState,
77
+ getHead,
78
+ getIsClean,
79
+ getIsGit,
80
+ getIsHeadOnRemote,
81
+ getRemoteUrl
82
+ };
83
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/git.ts"],
4
+ "sourcesContent": ["import { memoize } from 'lodash-es'\nimport { execFileNoThrow } from './execFileNoThrow'\n\nexport const getIsGit = memoize(async (): Promise<boolean> => {\n const { code } = await execFileNoThrow('git', [\n 'rev-parse',\n '--is-inside-work-tree',\n ])\n return code === 0\n})\n\nexport const getHead = async (): Promise<string> => {\n const { stdout } = await execFileNoThrow('git', ['rev-parse', 'HEAD'])\n return stdout.trim()\n}\n\nexport const getBranch = async (): Promise<string> => {\n const { stdout } = await execFileNoThrow(\n 'git',\n ['rev-parse', '--abbrev-ref', 'HEAD'],\n undefined,\n undefined,\n false,\n )\n return stdout.trim()\n}\n\nexport const getRemoteUrl = async (): Promise<string | null> => {\n // This might fail if there is no remote called origin\n const { stdout, code } = await execFileNoThrow(\n 'git',\n ['remote', 'get-url', 'origin'],\n undefined,\n undefined,\n false,\n )\n return code === 0 ? stdout.trim() : null\n}\n\nexport const getIsHeadOnRemote = async (): Promise<boolean> => {\n const { code } = await execFileNoThrow(\n 'git',\n ['rev-parse', '@{u}'],\n undefined,\n undefined,\n false,\n )\n return code === 0\n}\n\nexport const getIsClean = async (): Promise<boolean> => {\n const { stdout } = await execFileNoThrow(\n 'git',\n ['status', '--porcelain'],\n undefined,\n undefined,\n false,\n )\n return stdout.trim().length === 0\n}\n\nexport interface GitRepoState {\n commitHash: string\n branchName: string\n remoteUrl: string | null\n isHeadOnRemote: boolean\n isClean: boolean\n}\n\nexport async function getGitState(): Promise<GitRepoState | null> {\n try {\n const [commitHash, branchName, remoteUrl, isHeadOnRemote, isClean] =\n await Promise.all([\n getHead(),\n getBranch(),\n getRemoteUrl(),\n getIsHeadOnRemote(),\n getIsClean(),\n ])\n\n return {\n commitHash,\n branchName,\n remoteUrl,\n isHeadOnRemote,\n isClean,\n }\n } catch (_) {\n // Fail silently - git state is best effort\n return null\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,eAAe;AACxB,SAAS,uBAAuB;AAEzB,MAAM,WAAW,QAAQ,YAA8B;AAC5D,QAAM,EAAE,KAAK,IAAI,MAAM,gBAAgB,OAAO;AAAA,IAC5C;AAAA,IACA;AAAA,EACF,CAAC;AACD,SAAO,SAAS;AAClB,CAAC;AAEM,MAAM,UAAU,YAA6B;AAClD,QAAM,EAAE,OAAO,IAAI,MAAM,gBAAgB,OAAO,CAAC,aAAa,MAAM,CAAC;AACrE,SAAO,OAAO,KAAK;AACrB;AAEO,MAAM,YAAY,YAA6B;AACpD,QAAM,EAAE,OAAO,IAAI,MAAM;AAAA,IACvB;AAAA,IACA,CAAC,aAAa,gBAAgB,MAAM;AAAA,IACpC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAO,OAAO,KAAK;AACrB;AAEO,MAAM,eAAe,YAAoC;AAE9D,QAAM,EAAE,QAAQ,KAAK,IAAI,MAAM;AAAA,IAC7B;AAAA,IACA,CAAC,UAAU,WAAW,QAAQ;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAO,SAAS,IAAI,OAAO,KAAK,IAAI;AACtC;AAEO,MAAM,oBAAoB,YAA8B;AAC7D,QAAM,EAAE,KAAK,IAAI,MAAM;AAAA,IACrB;AAAA,IACA,CAAC,aAAa,MAAM;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAO,SAAS;AAClB;AAEO,MAAM,aAAa,YAA8B;AACtD,QAAM,EAAE,OAAO,IAAI,MAAM;AAAA,IACvB;AAAA,IACA,CAAC,UAAU,aAAa;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,SAAO,OAAO,KAAK,EAAE,WAAW;AAClC;AAUA,eAAsB,cAA4C;AAChE,MAAI;AACF,UAAM,CAAC,YAAY,YAAY,WAAW,gBAAgB,OAAO,IAC/D,MAAM,QAAQ,IAAI;AAAA,MAChB,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,aAAa;AAAA,MACb,kBAAkB;AAAA,MAClB,WAAW;AAAA,IACb,CAAC;AAEH,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,SAAS,GAAG;AAEV,WAAO;AAAA,EACT;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,54 @@
1
+ const isDebugMode = () => process.argv.includes("--debug") || process.argv.includes("--verbose") || process.env.NODE_ENV === "development";
2
+ const LOGGING_ENABLED = isDebugMode();
3
+ const globalLogger = {
4
+ // 标准日志级别
5
+ debug: (...args) => {
6
+ if (LOGGING_ENABLED) console.debug(...args);
7
+ },
8
+ info: (...args) => {
9
+ if (LOGGING_ENABLED) console.info(...args);
10
+ },
11
+ warn: (...args) => {
12
+ if (LOGGING_ENABLED) console.warn(...args);
13
+ },
14
+ error: (...args) => {
15
+ if (LOGGING_ENABLED) console.error(...args);
16
+ },
17
+ log: (...args) => {
18
+ if (LOGGING_ENABLED) console.log(...args);
19
+ },
20
+ // 兼容现有的console.log调用
21
+ console: (...args) => {
22
+ if (LOGGING_ENABLED) console.log(...args);
23
+ },
24
+ // 模型切换相关日志
25
+ modelSwitch: (message, data) => {
26
+ if (LOGGING_ENABLED) {
27
+ console.log(`\u{1F504} Model Switch: ${message}`, data ? data : "");
28
+ }
29
+ },
30
+ // API 相关日志
31
+ api: (message, data) => {
32
+ if (LOGGING_ENABLED) {
33
+ console.log(`\u{1F310} API: ${message}`, data ? data : "");
34
+ }
35
+ },
36
+ // 用户友好的状态日志 - 只在调试模式下显示
37
+ status: (message) => {
38
+ if (LOGGING_ENABLED) {
39
+ console.log(`\u2139\uFE0F ${message}`);
40
+ }
41
+ },
42
+ // 检查日志是否启用
43
+ isEnabled: () => LOGGING_ENABLED
44
+ };
45
+ const logger = globalLogger;
46
+ const debugLog = globalLogger.console;
47
+ const statusLog = globalLogger.status;
48
+ export {
49
+ debugLog,
50
+ globalLogger,
51
+ logger,
52
+ statusLog
53
+ };
54
+ //# sourceMappingURL=globalLogger.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/globalLogger.ts"],
4
+ "sourcesContent": ["/**\n * \u7EDF\u4E00\u7684\u5168\u5C40\u65E5\u5FD7\u7CFB\u7EDF\n * \u666E\u901A\u6A21\u5F0F\uFF1A\u5B8C\u5168\u9759\u9ED8\uFF0C\u96F6\u65E5\u5FD7\u8F93\u51FA\n * \u8C03\u8BD5\u6A21\u5F0F\uFF1A\u8BE6\u7EC6\u65E5\u5FD7\u8F93\u51FA\n */\n\n// \u73AF\u5883\u68C0\u6D4B - \u53EA\u5728\u660E\u786E\u7684\u8C03\u8BD5\u6807\u5FD7\u4E0B\u624D\u542F\u7528\u65E5\u5FD7\nconst isDebugMode = () => \n process.argv.includes('--debug') || \n process.argv.includes('--verbose') || \n process.env.NODE_ENV === 'development'\n\n// \u5168\u5C40\u65E5\u5FD7\u5F00\u5173 - \u666E\u901A\u6A21\u5F0F\u4E0B\u5B8C\u5168\u5173\u95ED\nconst LOGGING_ENABLED = isDebugMode()\n\n/**\n * \u7EDF\u4E00\u7684\u65E5\u5FD7\u63A5\u53E3\n * \u666E\u901A\u6A21\u5F0F\u4E0B\u6240\u6709\u8C03\u7528\u90FD\u662F\u7A7A\u64CD\u4F5C\n */\nexport const globalLogger = {\n // \u6807\u51C6\u65E5\u5FD7\u7EA7\u522B\n debug: (...args: any[]) => {\n if (LOGGING_ENABLED) console.debug(...args)\n },\n \n info: (...args: any[]) => {\n if (LOGGING_ENABLED) console.info(...args)\n },\n \n warn: (...args: any[]) => {\n if (LOGGING_ENABLED) console.warn(...args)\n },\n \n error: (...args: any[]) => {\n if (LOGGING_ENABLED) console.error(...args)\n },\n \n log: (...args: any[]) => {\n if (LOGGING_ENABLED) console.log(...args)\n },\n \n // \u517C\u5BB9\u73B0\u6709\u7684console.log\u8C03\u7528\n console: (...args: any[]) => {\n if (LOGGING_ENABLED) console.log(...args)\n },\n\n // \u6A21\u578B\u5207\u6362\u76F8\u5173\u65E5\u5FD7\n modelSwitch: (message: string, data?: any) => {\n if (LOGGING_ENABLED) {\n console.log(`\uD83D\uDD04 Model Switch: ${message}`, data ? data : '')\n }\n },\n\n // API \u76F8\u5173\u65E5\u5FD7\n api: (message: string, data?: any) => {\n if (LOGGING_ENABLED) {\n console.log(`\uD83C\uDF10 API: ${message}`, data ? data : '')\n }\n },\n\n // \u7528\u6237\u53CB\u597D\u7684\u72B6\u6001\u65E5\u5FD7 - \u53EA\u5728\u8C03\u8BD5\u6A21\u5F0F\u4E0B\u663E\u793A\n status: (message: string) => {\n if (LOGGING_ENABLED) {\n console.log(`\u2139\uFE0F ${message}`)\n }\n },\n\n // \u68C0\u67E5\u65E5\u5FD7\u662F\u5426\u542F\u7528\n isEnabled: () => LOGGING_ENABLED\n}\n\n// \u517C\u5BB9\u6027\uFF1A\u5BFC\u51FA\u4E3A\u9ED8\u8BA4console\u66FF\u4EE3\nexport const logger = globalLogger\n\n// \u7528\u4E8E\u66FF\u6362\u73B0\u6709\u7684console.log\u8C03\u7528\nexport const debugLog = globalLogger.console\nexport const statusLog = globalLogger.status"],
5
+ "mappings": "AAOA,MAAM,cAAc,MAClB,QAAQ,KAAK,SAAS,SAAS,KAC/B,QAAQ,KAAK,SAAS,WAAW,KACjC,QAAQ,IAAI,aAAa;AAG3B,MAAM,kBAAkB,YAAY;AAM7B,MAAM,eAAe;AAAA;AAAA,EAE1B,OAAO,IAAI,SAAgB;AACzB,QAAI,gBAAiB,SAAQ,MAAM,GAAG,IAAI;AAAA,EAC5C;AAAA,EAEA,MAAM,IAAI,SAAgB;AACxB,QAAI,gBAAiB,SAAQ,KAAK,GAAG,IAAI;AAAA,EAC3C;AAAA,EAEA,MAAM,IAAI,SAAgB;AACxB,QAAI,gBAAiB,SAAQ,KAAK,GAAG,IAAI;AAAA,EAC3C;AAAA,EAEA,OAAO,IAAI,SAAgB;AACzB,QAAI,gBAAiB,SAAQ,MAAM,GAAG,IAAI;AAAA,EAC5C;AAAA,EAEA,KAAK,IAAI,SAAgB;AACvB,QAAI,gBAAiB,SAAQ,IAAI,GAAG,IAAI;AAAA,EAC1C;AAAA;AAAA,EAGA,SAAS,IAAI,SAAgB;AAC3B,QAAI,gBAAiB,SAAQ,IAAI,GAAG,IAAI;AAAA,EAC1C;AAAA;AAAA,EAGA,aAAa,CAAC,SAAiB,SAAe;AAC5C,QAAI,iBAAiB;AACnB,cAAQ,IAAI,2BAAoB,OAAO,IAAI,OAAO,OAAO,EAAE;AAAA,IAC7D;AAAA,EACF;AAAA;AAAA,EAGA,KAAK,CAAC,SAAiB,SAAe;AACpC,QAAI,iBAAiB;AACnB,cAAQ,IAAI,kBAAW,OAAO,IAAI,OAAO,OAAO,EAAE;AAAA,IACpD;AAAA,EACF;AAAA;AAAA,EAGA,QAAQ,CAAC,YAAoB;AAC3B,QAAI,iBAAiB;AACnB,cAAQ,IAAI,gBAAM,OAAO,EAAE;AAAA,IAC7B;AAAA,EACF;AAAA;AAAA,EAGA,WAAW,MAAM;AACnB;AAGO,MAAM,SAAS;AAGf,MAAM,WAAW,aAAa;AAC9B,MAAM,YAAY,aAAa;",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ import { MACRO } from "../constants/macros.js";
2
+ import { PRODUCT_COMMAND } from "../constants/product.js";
3
+ const USER_AGENT = `${PRODUCT_COMMAND}/${MACRO.VERSION} (${process.env.USER_TYPE})`;
4
+ export {
5
+ USER_AGENT
6
+ };
7
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/http.ts"],
4
+ "sourcesContent": ["/**\n * HTTP utility constants and helpers\n */\n\nimport { MACRO } from '../constants/macros'\nimport { PRODUCT_COMMAND } from '../constants/product'\n\n// WARNING: We rely on `claude-cli` in the user agent for log filtering.\n// Please do NOT change this without making sure that logging also gets updated!\nexport const USER_AGENT = `${PRODUCT_COMMAND}/${MACRO.VERSION} (${process.env.USER_TYPE})`\n"],
5
+ "mappings": "AAIA,SAAS,aAAa;AACtB,SAAS,uBAAuB;AAIzB,MAAM,aAAa,GAAG,eAAe,IAAI,MAAM,OAAO,KAAK,QAAQ,IAAI,SAAS;",
6
+ "names": []
7
+ }
@@ -0,0 +1,29 @@
1
+ import { execSync } from "child_process";
2
+ import { readFileSync } from "fs";
3
+ const SCREENSHOT_PATH = "/tmp/claude_cli_latest_screenshot.png";
4
+ const CLIPBOARD_ERROR_MESSAGE = "No image found in clipboard. Use Cmd + Ctrl + Shift + 4 to copy a screenshot to clipboard.";
5
+ function getImageFromClipboard() {
6
+ if (process.platform !== "darwin") {
7
+ return null;
8
+ }
9
+ try {
10
+ execSync(`osascript -e 'the clipboard as \xABclass PNGf\xBB'`, {
11
+ stdio: "ignore"
12
+ });
13
+ execSync(
14
+ `osascript -e 'set png_data to (the clipboard as \xABclass PNGf\xBB)' -e 'set fp to open for access POSIX file "${SCREENSHOT_PATH}" with write permission' -e 'write png_data to fp' -e 'close access fp'`,
15
+ { stdio: "ignore" }
16
+ );
17
+ const imageBuffer = readFileSync(SCREENSHOT_PATH);
18
+ const base64Image = imageBuffer.toString("base64");
19
+ execSync(`rm -f "${SCREENSHOT_PATH}"`, { stdio: "ignore" });
20
+ return base64Image;
21
+ } catch {
22
+ return null;
23
+ }
24
+ }
25
+ export {
26
+ CLIPBOARD_ERROR_MESSAGE,
27
+ getImageFromClipboard
28
+ };
29
+ //# sourceMappingURL=imagePaste.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/imagePaste.ts"],
4
+ "sourcesContent": ["import { execSync } from 'child_process'\nimport { readFileSync } from 'fs'\n\nconst SCREENSHOT_PATH = '/tmp/claude_cli_latest_screenshot.png'\n\nexport const CLIPBOARD_ERROR_MESSAGE =\n 'No image found in clipboard. Use Cmd + Ctrl + Shift + 4 to copy a screenshot to clipboard.'\n\nexport function getImageFromClipboard(): string | null {\n if (process.platform !== 'darwin') {\n // only support image paste on macOS for now\n return null\n }\n\n try {\n // Check if clipboard has image\n execSync(`osascript -e 'the clipboard as \u00ABclass PNGf\u00BB'`, {\n stdio: 'ignore',\n })\n\n // Save the image\n execSync(\n `osascript -e 'set png_data to (the clipboard as \u00ABclass PNGf\u00BB)' -e 'set fp to open for access POSIX file \"${SCREENSHOT_PATH}\" with write permission' -e 'write png_data to fp' -e 'close access fp'`,\n { stdio: 'ignore' },\n )\n\n // Read the image and convert to base64\n const imageBuffer = readFileSync(SCREENSHOT_PATH)\n const base64Image = imageBuffer.toString('base64')\n\n // Cleanup\n execSync(`rm -f \"${SCREENSHOT_PATH}\"`, { stdio: 'ignore' })\n\n return base64Image\n } catch {\n return null\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,gBAAgB;AACzB,SAAS,oBAAoB;AAE7B,MAAM,kBAAkB;AAEjB,MAAM,0BACX;AAEK,SAAS,wBAAuC;AACrD,MAAI,QAAQ,aAAa,UAAU;AAEjC,WAAO;AAAA,EACT;AAEA,MAAI;AAEF,aAAS,sDAAgD;AAAA,MACvD,OAAO;AAAA,IACT,CAAC;AAGD;AAAA,MACE,kHAA4G,eAAe;AAAA,MAC3H,EAAE,OAAO,SAAS;AAAA,IACpB;AAGA,UAAM,cAAc,aAAa,eAAe;AAChD,UAAM,cAAc,YAAY,SAAS,QAAQ;AAGjD,aAAS,UAAU,eAAe,KAAK,EAAE,OAAO,SAAS,CAAC;AAE1D,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,16 @@
1
+ import { logError } from "./log.js";
2
+ function safeParseJSON(json) {
3
+ if (!json) {
4
+ return null;
5
+ }
6
+ try {
7
+ return JSON.parse(json);
8
+ } catch (e) {
9
+ logError(e);
10
+ return null;
11
+ }
12
+ }
13
+ export {
14
+ safeParseJSON
15
+ };
16
+ //# sourceMappingURL=json.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/json.ts"],
4
+ "sourcesContent": ["import { logError } from './log'\n\nexport function safeParseJSON(json: string | null | undefined): unknown {\n if (!json) {\n return null\n }\n try {\n return JSON.parse(json)\n } catch (e) {\n logError(e)\n return null\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,gBAAgB;AAElB,SAAS,cAAc,MAA0C;AACtE,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,SAAS,GAAG;AACV,aAAS,CAAC;AACV,WAAO;AAAA,EACT;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,298 @@
1
+ import { existsSync, mkdirSync } from "fs";
2
+ import { dirname, join } from "path";
3
+ import { writeFileSync, readFileSync } from "fs";
4
+ import { captureException } from "../services/sentry.js";
5
+ import { randomUUID } from "crypto";
6
+ import envPaths from "env-paths";
7
+ import { promises as fsPromises } from "fs";
8
+ import { MACRO } from "../constants/macros.js";
9
+ import { PRODUCT_COMMAND } from "../constants/product.js";
10
+ const IN_MEMORY_ERROR_LOG = [];
11
+ const MAX_IN_MEMORY_ERRORS = 100;
12
+ const SESSION_ID = randomUUID();
13
+ const paths = envPaths(PRODUCT_COMMAND);
14
+ function getProjectDir(cwd) {
15
+ return cwd.replace(/[^a-zA-Z0-9]/g, "-");
16
+ }
17
+ const CACHE_PATHS = {
18
+ errors: () => join(paths.cache, getProjectDir(process.cwd()), "errors"),
19
+ messages: () => join(paths.cache, getProjectDir(process.cwd()), "messages"),
20
+ mcpLogs: (serverName) => join(paths.cache, getProjectDir(process.cwd()), `mcp-logs-${serverName}`)
21
+ };
22
+ function dateToFilename(date) {
23
+ return date.toISOString().replace(/[:.]/g, "-");
24
+ }
25
+ const DATE = dateToFilename(/* @__PURE__ */ new Date());
26
+ function getErrorsPath() {
27
+ return join(CACHE_PATHS.errors(), DATE + ".txt");
28
+ }
29
+ function getMessagesPath(messageLogName, forkNumber, sidechainNumber) {
30
+ return join(
31
+ CACHE_PATHS.messages(),
32
+ `${messageLogName}${forkNumber > 0 ? `-${forkNumber}` : ""}${sidechainNumber > 0 ? `-sidechain-${sidechainNumber}` : ""}.json`
33
+ );
34
+ }
35
+ function logError(error) {
36
+ try {
37
+ if (process.env.NODE_ENV === "test") {
38
+ console.error(error);
39
+ }
40
+ const errorStr = error instanceof Error ? error.stack || error.message : String(error);
41
+ const errorInfo = {
42
+ error: errorStr,
43
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
44
+ };
45
+ if (IN_MEMORY_ERROR_LOG.length >= MAX_IN_MEMORY_ERRORS) {
46
+ IN_MEMORY_ERROR_LOG.shift();
47
+ }
48
+ IN_MEMORY_ERROR_LOG.push(errorInfo);
49
+ appendToLog(getErrorsPath(), {
50
+ error: errorStr
51
+ });
52
+ } catch {
53
+ }
54
+ captureException(error);
55
+ }
56
+ function getErrorsLog() {
57
+ return readLog(getErrorsPath());
58
+ }
59
+ function getInMemoryErrors() {
60
+ return [...IN_MEMORY_ERROR_LOG];
61
+ }
62
+ function readLog(path) {
63
+ if (!existsSync(path)) {
64
+ return [];
65
+ }
66
+ try {
67
+ return JSON.parse(readFileSync(path, "utf8"));
68
+ } catch {
69
+ return [];
70
+ }
71
+ }
72
+ function appendToLog(path, message) {
73
+ if (process.env.USER_TYPE === "external") {
74
+ return;
75
+ }
76
+ const dir = dirname(path);
77
+ if (!existsSync(dir)) {
78
+ mkdirSync(dir, { recursive: true });
79
+ }
80
+ if (!existsSync(path)) {
81
+ writeFileSync(path, "[]", "utf8");
82
+ }
83
+ const messages = readLog(path);
84
+ const messageWithTimestamp = {
85
+ ...message,
86
+ cwd: process.cwd(),
87
+ userType: process.env.USER_TYPE,
88
+ sessionId: SESSION_ID,
89
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
90
+ version: MACRO.VERSION
91
+ };
92
+ messages.push(messageWithTimestamp);
93
+ writeFileSync(path, JSON.stringify(messages, null, 2), "utf8");
94
+ }
95
+ function overwriteLog(path, messages) {
96
+ if (process.env.USER_TYPE === "external") {
97
+ return;
98
+ }
99
+ if (!messages.length) {
100
+ return;
101
+ }
102
+ const dir = dirname(path);
103
+ if (!existsSync(dir)) {
104
+ mkdirSync(dir, { recursive: true });
105
+ }
106
+ const messagesWithMetadata = messages.map((message) => ({
107
+ ...message,
108
+ cwd: process.cwd(),
109
+ userType: process.env.USER_TYPE,
110
+ sessionId: SESSION_ID,
111
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
112
+ version: MACRO.VERSION
113
+ }));
114
+ writeFileSync(path, JSON.stringify(messagesWithMetadata, null, 2), "utf8");
115
+ }
116
+ async function loadLogList(path = CACHE_PATHS.messages()) {
117
+ if (!existsSync(path)) {
118
+ logError(`No logs found at ${path}`);
119
+ return [];
120
+ }
121
+ const files = await fsPromises.readdir(path);
122
+ const logData = await Promise.all(
123
+ files.map(async (file, i) => {
124
+ const fullPath = join(path, file);
125
+ const content = await fsPromises.readFile(fullPath, "utf8");
126
+ const messages = JSON.parse(content);
127
+ const firstMessage = messages[0];
128
+ const lastMessage = messages[messages.length - 1];
129
+ const firstPrompt = firstMessage?.type === "user" && typeof firstMessage?.message?.content === "string" ? firstMessage?.message?.content : "No prompt";
130
+ const { date, forkNumber, sidechainNumber } = parseLogFilename(file);
131
+ return {
132
+ date,
133
+ forkNumber,
134
+ fullPath,
135
+ messages,
136
+ value: i,
137
+ // hack: overwritten after sorting, right below this
138
+ created: parseISOString(firstMessage?.timestamp || date),
139
+ modified: lastMessage?.timestamp ? parseISOString(lastMessage.timestamp) : parseISOString(date),
140
+ firstPrompt: firstPrompt.split("\n")[0]?.slice(0, 50) + (firstPrompt.length > 50 ? "\u2026" : "") || "No prompt",
141
+ messageCount: messages.length,
142
+ sidechainNumber
143
+ };
144
+ })
145
+ );
146
+ return sortLogs(logData.filter((_) => _.messages.length)).map((_, i) => ({
147
+ ..._,
148
+ value: i
149
+ }));
150
+ }
151
+ function parseLogFilename(filename) {
152
+ const base = filename.split(".")[0];
153
+ const segments = base.split("-");
154
+ const hasSidechain = base.includes("-sidechain-");
155
+ let date = base;
156
+ let forkNumber = void 0;
157
+ let sidechainNumber = void 0;
158
+ if (hasSidechain) {
159
+ const sidechainIndex = segments.indexOf("sidechain");
160
+ sidechainNumber = Number(segments[sidechainIndex + 1]);
161
+ if (sidechainIndex > 6) {
162
+ forkNumber = Number(segments[sidechainIndex - 1]);
163
+ date = segments.slice(0, 6).join("-");
164
+ } else {
165
+ date = segments.slice(0, 6).join("-");
166
+ }
167
+ } else if (segments.length > 6) {
168
+ const lastSegment = Number(segments[segments.length - 1]);
169
+ forkNumber = lastSegment >= 0 ? lastSegment : void 0;
170
+ date = segments.slice(0, 6).join("-");
171
+ } else {
172
+ date = base;
173
+ }
174
+ return { date, forkNumber, sidechainNumber };
175
+ }
176
+ function getNextAvailableLogForkNumber(date, forkNumber, sidechainNumber) {
177
+ while (existsSync(getMessagesPath(date, forkNumber, sidechainNumber))) {
178
+ forkNumber++;
179
+ }
180
+ return forkNumber;
181
+ }
182
+ function getNextAvailableLogSidechainNumber(date, forkNumber) {
183
+ let sidechainNumber = 1;
184
+ while (existsSync(getMessagesPath(date, forkNumber, sidechainNumber))) {
185
+ sidechainNumber++;
186
+ }
187
+ return sidechainNumber;
188
+ }
189
+ function getForkNumberFromFilename(filename) {
190
+ const base = filename.split(".")[0];
191
+ const segments = base.split("-");
192
+ const hasSidechain = base.includes("-sidechain-");
193
+ if (hasSidechain) {
194
+ const sidechainIndex = segments.indexOf("sidechain");
195
+ if (sidechainIndex > 6) {
196
+ return Number(segments[sidechainIndex - 1]);
197
+ }
198
+ return void 0;
199
+ }
200
+ if (segments.length > 6) {
201
+ const lastNumber = Number(segments[segments.length - 1]);
202
+ return lastNumber >= 0 ? lastNumber : void 0;
203
+ }
204
+ return void 0;
205
+ }
206
+ function sortLogs(logs) {
207
+ return logs.sort((a, b) => {
208
+ const modifiedDiff = b.modified.getTime() - a.modified.getTime();
209
+ if (modifiedDiff !== 0) {
210
+ return modifiedDiff;
211
+ }
212
+ const createdDiff = b.created.getTime() - a.created.getTime();
213
+ if (createdDiff !== 0) {
214
+ return createdDiff;
215
+ }
216
+ return (b.forkNumber ?? 0) - (a.forkNumber ?? 0);
217
+ });
218
+ }
219
+ function formatDate(date) {
220
+ const now = /* @__PURE__ */ new Date();
221
+ const yesterday = new Date(now);
222
+ yesterday.setDate(yesterday.getDate() - 1);
223
+ const isToday = date.toDateString() === now.toDateString();
224
+ const isYesterday = date.toDateString() === yesterday.toDateString();
225
+ const timeStr = date.toLocaleTimeString("en-US", {
226
+ hour: "numeric",
227
+ minute: "2-digit",
228
+ hour12: true
229
+ }).toLowerCase();
230
+ if (isToday) {
231
+ return `Today at ${timeStr}`;
232
+ } else if (isYesterday) {
233
+ return `Yesterday at ${timeStr}`;
234
+ } else {
235
+ return date.toLocaleDateString("en-US", {
236
+ month: "short",
237
+ day: "numeric"
238
+ }) + ` at ${timeStr}`;
239
+ }
240
+ }
241
+ function parseISOString(s) {
242
+ const b = s.split(/\D+/);
243
+ return new Date(
244
+ Date.UTC(
245
+ parseInt(b[0], 10),
246
+ parseInt(b[1], 10) - 1,
247
+ parseInt(b[2], 10),
248
+ parseInt(b[3], 10),
249
+ parseInt(b[4], 10),
250
+ parseInt(b[5], 10),
251
+ parseInt(b[6], 10)
252
+ )
253
+ );
254
+ }
255
+ function logMCPError(serverName, error) {
256
+ try {
257
+ const logDir = CACHE_PATHS.mcpLogs(serverName);
258
+ const errorStr = error instanceof Error ? error.stack || error.message : String(error);
259
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString();
260
+ const logFile = join(logDir, DATE + ".txt");
261
+ if (!existsSync(logDir)) {
262
+ mkdirSync(logDir, { recursive: true });
263
+ }
264
+ if (!existsSync(logFile)) {
265
+ writeFileSync(logFile, "[]", "utf8");
266
+ }
267
+ const errorInfo = {
268
+ error: errorStr,
269
+ timestamp,
270
+ sessionId: SESSION_ID,
271
+ cwd: process.cwd()
272
+ };
273
+ const messages = readLog(logFile);
274
+ messages.push(errorInfo);
275
+ writeFileSync(logFile, JSON.stringify(messages, null, 2), "utf8");
276
+ } catch {
277
+ }
278
+ }
279
+ export {
280
+ CACHE_PATHS,
281
+ SESSION_ID,
282
+ dateToFilename,
283
+ formatDate,
284
+ getErrorsLog,
285
+ getForkNumberFromFilename,
286
+ getInMemoryErrors,
287
+ getMessagesPath,
288
+ getNextAvailableLogForkNumber,
289
+ getNextAvailableLogSidechainNumber,
290
+ loadLogList,
291
+ logError,
292
+ logMCPError,
293
+ overwriteLog,
294
+ parseISOString,
295
+ parseLogFilename,
296
+ sortLogs
297
+ };
298
+ //# sourceMappingURL=log.js.map