@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
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env -S node --no-warnings=ExperimentalWarning --enable-source-maps
2
2
  import { fileURLToPath } from 'node:url'
3
3
  import { dirname, join } from 'node:path'
4
+ import { existsSync } from 'node:fs'
4
5
  import { initSentry } from '../services/sentry'
5
6
  import { PRODUCT_COMMAND, PRODUCT_NAME } from '../constants/product'
6
7
  initSentry() // Initialize Sentry as early as possible
@@ -9,14 +10,18 @@ initSentry() // Initialize Sentry as early as possible
9
10
  // Resolve yoga.wasm relative to this file when missing using ESM-friendly APIs
10
11
  try {
11
12
  if (!process.env.YOGA_WASM_PATH) {
12
- const { existsSync: fsExistsSync } = require('fs')
13
13
  const __filename = fileURLToPath(import.meta.url)
14
14
  const __dirname = dirname(__filename)
15
15
  const devCandidate = join(__dirname, '../../yoga.wasm')
16
- // Prefer dev path; wrapper already sets env for normal runs
17
- process.env.YOGA_WASM_PATH = fsExistsSync(devCandidate)
18
- ? devCandidate
19
- : process.env.YOGA_WASM_PATH
16
+ const distCandidate = join(__dirname, './yoga.wasm')
17
+ const resolved = existsSync(distCandidate)
18
+ ? distCandidate
19
+ : existsSync(devCandidate)
20
+ ? devCandidate
21
+ : undefined
22
+ if (resolved) {
23
+ process.env.YOGA_WASM_PATH = resolved
24
+ }
20
25
  }
21
26
  } catch {}
22
27
 
@@ -29,8 +34,8 @@ Object.keys(dontcare)
29
34
  import React from 'react'
30
35
  import { ReadStream } from 'tty'
31
36
  import { openSync, existsSync } from 'fs'
32
- import { render, RenderOptions } from 'ink'
33
- import { REPL } from '../screens/REPL'
37
+ // ink and REPL are imported lazily to avoid top-level awaits during module init
38
+ import type { RenderOptions } from 'ink'
34
39
  import { addToHistory } from '../history'
35
40
  import { getContext, setContext, removeContext } from '../context'
36
41
  import { Command } from '@commander-js/extra-typings'
@@ -126,6 +131,7 @@ async function showSetupScreens(
126
131
  !config.hasCompletedOnboarding // always show onboarding at least once
127
132
  ) {
128
133
  await clearTerminal()
134
+ const { render } = await import('ink')
129
135
  await new Promise<void>(resolve => {
130
136
  render(
131
137
  <Onboarding
@@ -207,7 +213,14 @@ async function setup(cwd: string, safeMode?: boolean): Promise<void> {
207
213
  grantReadPermissionForOriginalDir()
208
214
 
209
215
  // Start watching agent configuration files for changes
210
- const { startAgentWatcher, clearAgentCache } = await import('../utils/agentLoader')
216
+ // Try ESM-friendly path first (compiled dist), then fall back to extensionless (dev/tsx)
217
+ let agentLoader: any
218
+ try {
219
+ agentLoader = await import('../utils/agentLoader.js')
220
+ } catch {
221
+ agentLoader = await import('../utils/agentLoader')
222
+ }
223
+ const { startAgentWatcher, clearAgentCache } = agentLoader
211
224
  await startAgentWatcher(() => {
212
225
  // Cache is already cleared in the watcher, just log
213
226
  console.log('✅ Agent configurations hot-reloaded')
@@ -315,7 +328,7 @@ async function main() {
315
328
  let inputPrompt = ''
316
329
  let renderContext: RenderOptions | undefined = {
317
330
  exitOnCtrlC: false,
318
- // @ts-expect-error - onFlicker not in RenderOptions interface
331
+
319
332
  onFlicker() {
320
333
  logEvent('tengu_flicker', {})
321
334
  },
@@ -451,8 +464,11 @@ ${commandList}`,
451
464
  return { version: null as string | null, commands: null as string[] | null }
452
465
  })()
453
466
 
454
- render(
455
- <REPL
467
+ {
468
+ const { render } = await import('ink')
469
+ const { REPL } = await import('../screens/REPL')
470
+ render(
471
+ <REPL
456
472
  commands={commands}
457
473
  debug={debug}
458
474
  initialPrompt={inputPrompt}
@@ -467,7 +483,8 @@ ${commandList}`,
467
483
  initialUpdateCommands={updateInfo.commands}
468
484
  />,
469
485
  renderContext,
470
- )
486
+ )
487
+ }
471
488
  }
472
489
  },
473
490
  )
@@ -540,7 +557,7 @@ ${commandList}`,
540
557
  .action(async ({ cwd, global }) => {
541
558
  await setup(cwd, false)
542
559
  console.log(
543
- JSON.stringify(listConfigForCLI(global ? (true as const) : (false as const)), null, 2),
560
+ JSON.stringify(global ? listConfigForCLI(true) : listConfigForCLI(false), null, 2),
544
561
  )
545
562
  process.exit(0)
546
563
  })
@@ -1039,9 +1056,7 @@ ${commandList}`,
1039
1056
  function ClaudeDesktopImport() {
1040
1057
  const { useState } = reactModule
1041
1058
  const [isFinished, setIsFinished] = useState(false)
1042
- const [importResults, setImportResults] = useState<
1043
- { name: string; success: boolean }[]
1044
- >([])
1059
+ const [importResults, setImportResults] = useState([] as { name: string; success: boolean }[])
1045
1060
  const [isImporting, setIsImporting] = useState(false)
1046
1061
  const theme = getTheme()
1047
1062
 
@@ -1367,8 +1382,11 @@ ${commandList}`,
1367
1382
  }
1368
1383
  const fork = getNextAvailableLogForkNumber(date, forkNumber ?? 1, 0)
1369
1384
  const isDefaultModel = await isDefaultSlowAndCapableModel()
1370
- render(
1371
- <REPL
1385
+ {
1386
+ const { render } = await import('ink')
1387
+ const { REPL } = await import('../screens/REPL')
1388
+ render(
1389
+ <REPL
1372
1390
  initialPrompt=""
1373
1391
  messageLogName={date}
1374
1392
  initialForkNumber={fork}
@@ -1382,7 +1400,8 @@ ${commandList}`,
1382
1400
  isDefaultModel={isDefaultModel}
1383
1401
  />,
1384
1402
  { exitOnCtrlC: false },
1385
- )
1403
+ )
1404
+ }
1386
1405
  } catch (error) {
1387
1406
  logError(`Failed to load conversation: ${error}`)
1388
1407
  process.exit(1)
@@ -67,7 +67,7 @@ export async function startMCPServer(cwd: string): Promise<void> {
67
67
  const tools = await Promise.all(
68
68
  MCP_TOOLS.map(async tool => ({
69
69
  ...tool,
70
- description: await tool.description(z.object({})),
70
+ description: await tool.description(),
71
71
  inputSchema: zodToJsonSchema(tool.inputSchema) as ToolInput,
72
72
  })),
73
73
  )
@@ -127,7 +127,6 @@ export async function startMCPServer(cwd: string): Promise<void> {
127
127
  },
128
128
  readFileTimestamps: state.readFileTimestamps,
129
129
  },
130
- hasPermissionsToUseTool,
131
130
  )
132
131
 
133
132
  const finalResult = await lastX(result)
@@ -30,7 +30,6 @@ export function useDoublePress(
30
30
  } else {
31
31
  onFirstPress?.()
32
32
  setPending(true)
33
- // @ts-expect-error: Bun is overloading types here, but we're using the NodeJS runtime
34
33
  timeoutRef.current = setTimeout(
35
34
  () => setPending(false),
36
35
  DOUBLE_PRESS_TIMEOUT_MS,
@@ -140,7 +140,6 @@ export function useTextInput({
140
140
  onMessage?.(true, CLIPBOARD_ERROR_MESSAGE)
141
141
  maybeClearImagePasteErrorTimeout()
142
142
  setImagePasteErrorTimeout(
143
- // @ts-expect-error: Bun is overloading types here, but we're using the NodeJS runtime
144
143
  setTimeout(() => {
145
144
  onMessage?.(false)
146
145
  }, 4000),
@@ -263,15 +262,15 @@ export function useTextInput({
263
262
  switch (true) {
264
263
  case key.escape:
265
264
  return handleEscape
266
- case key.leftArrow && (key.ctrl || key.meta || key.fn):
265
+ case key.leftArrow && (key.ctrl || key.meta || ('fn' in key && key.fn)):
267
266
  return () => cursor.prevWord()
268
- case key.rightArrow && (key.ctrl || key.meta || key.fn):
267
+ case key.rightArrow && (key.ctrl || key.meta || ('fn' in key && key.fn)):
269
268
  return () => cursor.nextWord()
270
269
  case key.ctrl:
271
270
  return handleCtrl
272
- case key.home:
271
+ case 'home' in key && key.home:
273
272
  return () => cursor.startOfLine()
274
- case key.end:
273
+ case 'end' in key && key.end:
275
274
  return () => cursor.endOfLine()
276
275
  case key.pageDown:
277
276
  return () => cursor.endOfLine()
@@ -1067,7 +1067,7 @@ export function useUnifiedCompletion({
1067
1067
  })
1068
1068
 
1069
1069
  // Handle navigation keys - simplified and unified
1070
- useInput((_, key) => {
1070
+ useInput((inputChar, key) => {
1071
1071
  // Enter key - confirm selection and end completion (always add space)
1072
1072
  if (key.return && state.isActive && state.suggestions.length > 0) {
1073
1073
  const selectedSuggestion = state.suggestions[state.selectedIndex]
@@ -1148,7 +1148,7 @@ export function useUnifiedCompletion({
1148
1148
  }
1149
1149
 
1150
1150
  // Space key - complete and potentially continue for directories
1151
- if (key.space && state.isActive && state.suggestions.length > 0) {
1151
+ if (inputChar === ' ' && state.isActive && state.suggestions.length > 0) {
1152
1152
  const selectedSuggestion = state.suggestions[state.selectedIndex]
1153
1153
  const isDirectory = selectedSuggestion.value.endsWith('/')
1154
1154
 
package/src/index.ts ADDED
@@ -0,0 +1,34 @@
1
+ // Unified CLI entry (lightweight)
2
+ // - Development: use `bun run src/entrypoints/cli.tsx`
3
+ // - Production: transpiled to `dist/index.js` and used as bin/main
4
+
5
+ import { createRequire } from 'module'
6
+ const require = createRequire(import.meta.url)
7
+
8
+ function hasFlag(...flags: string[]): boolean {
9
+ return process.argv.some(arg => flags.includes(arg))
10
+ }
11
+
12
+ // Minimal pre-parse: handle version/help early without loading heavy UI modules
13
+ if (hasFlag('--version', '-v')) {
14
+ try {
15
+ const pkg = require('../package.json')
16
+ console.log(pkg.version || '')
17
+ } catch {
18
+ console.log('')
19
+ }
20
+ process.exit(0)
21
+ }
22
+
23
+ if (hasFlag('--help-lite')) {
24
+ console.log(`Usage: kode [options] [command] [prompt]\n\n` +
25
+ `Common options:\n` +
26
+ ` -h, --help Show full help\n` +
27
+ ` -v, --version Show version\n` +
28
+ ` -p, --print Print response and exit (non-interactive)\n` +
29
+ ` -c, --cwd <cwd> Set working directory`)
30
+ process.exit(0)
31
+ }
32
+
33
+ // For compatibility, --help loads full CLI help
34
+ await import('./entrypoints/cli.js')
package/src/query.ts CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  MessageParam,
4
4
  ToolUseBlock,
5
5
  } from '@anthropic-ai/sdk/resources/index.mjs'
6
- import { UUID } from 'crypto'
6
+ import type { UUID } from './types/common'
7
7
  import type { Tool, ToolUseContext } from './Tool'
8
8
  import {
9
9
  messagePairValidForBinaryFeedback,
@@ -70,6 +70,9 @@ export type UserMessage = {
70
70
  options?: {
71
71
  isKodingRequest?: boolean
72
72
  kodingContext?: string
73
+ isCustomCommand?: boolean
74
+ commandName?: string
75
+ commandArgs?: string
73
76
  }
74
77
  }
75
78
 
@@ -196,8 +199,9 @@ export async function* query(
196
199
  if (reminders && messages.length > 0) {
197
200
  // Find the last user message
198
201
  for (let i = messages.length - 1; i >= 0; i--) {
199
- if (messages[i]?.type === 'user') {
200
- const lastUserMessage = messages[i]
202
+ const msg = messages[i]
203
+ if (msg?.type === 'user') {
204
+ const lastUserMessage = msg as UserMessage
201
205
  messages[i] = {
202
206
  ...lastUserMessage,
203
207
  message: {
@@ -637,7 +641,7 @@ async function* checkPermissionsAndCallTool(
637
641
 
638
642
  // Call the tool
639
643
  try {
640
- const generator = tool.call(normalizedInput as never, context, canUseTool)
644
+ const generator = tool.call(normalizedInput as never, context)
641
645
  for await (const result of generator) {
642
646
  switch (result.type) {
643
647
  case 'result':
@@ -649,13 +653,13 @@ async function* checkPermissionsAndCallTool(
649
653
  [
650
654
  {
651
655
  type: 'tool_result',
652
- content: result.resultForAssistant,
656
+ content: result.resultForAssistant || String(result.data),
653
657
  tool_use_id: toolUseID,
654
658
  },
655
659
  ],
656
660
  {
657
661
  data: result.data,
658
- resultForAssistant: result.resultForAssistant,
662
+ resultForAssistant: result.resultForAssistant || String(result.data),
659
663
  },
660
664
  )
661
665
  return
@@ -668,9 +672,10 @@ async function* checkPermissionsAndCallTool(
668
672
  toolUseID,
669
673
  siblingToolUseIDs,
670
674
  result.content,
671
- result.normalizedMessages,
672
- result.tools,
675
+ result.normalizedMessages || [],
676
+ result.tools || [],
673
677
  )
678
+ break
674
679
  }
675
680
  }
676
681
  } catch (error) {
@@ -2,7 +2,7 @@ import React, { useCallback, useEffect, useState } from 'react'
2
2
  import { Box, Text, useInput } from 'ink'
3
3
  import { Select } from '../components/CustomSelect/select'
4
4
  import { getTheme } from '../utils/theme'
5
- import { ConfigureNpmPrefix } from './ConfigureNpmPrefix.tsx'
5
+ import { ConfigureNpmPrefix } from './ConfigureNpmPrefix'
6
6
  import { platform } from 'process'
7
7
  import {
8
8
  checkNpmPermissions,
@@ -523,7 +523,7 @@ export function REPL({
523
523
  shouldShowDot={false}
524
524
  />
525
525
  ) : (
526
- <MessageResponse>
526
+ <MessageResponse children={
527
527
  <Message
528
528
  message={_.content}
529
529
  messages={_.normalizedMessages}
@@ -541,7 +541,7 @@ export function REPL({
541
541
  shouldAnimate={false}
542
542
  shouldShowDot={false}
543
543
  />
544
- </MessageResponse>
544
+ } />
545
545
  )
546
546
  ) : (
547
547
  <Message
@@ -618,15 +618,17 @@ export function REPL({
618
618
  const showingCostDialog = !isLoading && showCostDialog
619
619
 
620
620
  return (
621
- <PermissionProvider isBypassPermissionsModeAvailable={!safeMode}>
622
- {/* Update banner now renders inside Logo for stable placement */}
623
- <ModeIndicator />
621
+ <PermissionProvider
622
+ isBypassPermissionsModeAvailable={!safeMode}
623
+ children={
624
+ <React.Fragment>
625
+ {/* Update banner now renders inside Logo for stable placement */}
626
+ <ModeIndicator />
624
627
  <React.Fragment key={`static-messages-${forkNumber}`}>
625
628
  <Static
626
629
  items={messagesJSX.filter(_ => _.type === 'static')}
627
- >
628
- {_ => _.jsx}
629
- </Static>
630
+ children={_ => ((_ as any).jsx)}
631
+ />
630
632
  </React.Fragment>
631
633
  {messagesJSX.filter(_ => _.type === 'transient').map(_ => _.jsx)}
632
634
  <Box
@@ -767,7 +769,9 @@ export function REPL({
767
769
  )}
768
770
  {/** Fix occasional rendering artifact */}
769
771
  <Newline />
770
- </PermissionProvider>
772
+ </React.Fragment>
773
+ }
774
+ />
771
775
  )
772
776
  }
773
777
 
@@ -608,7 +608,13 @@ export async function getCompletionWithProfile(
608
608
  // 🔥 NEW: Parse error message to detect and handle specific API errors
609
609
  try {
610
610
  const errorData = await response.json()
611
- const errorMessage = errorData?.error?.message || errorData?.message || `HTTP ${response.status}`
611
+ // Type guard for error data structure
612
+ const hasError = (data: unknown): data is { error?: { message?: string }; message?: string } => {
613
+ return typeof data === 'object' && data !== null
614
+ }
615
+ const errorMessage = hasError(errorData)
616
+ ? (errorData.error?.message || errorData.message || `HTTP ${response.status}`)
617
+ : `HTTP ${response.status}`
612
618
 
613
619
  // Check if this is a parameter error that we can fix
614
620
  const isGPT5 = opts.model.startsWith('gpt-5')
@@ -740,7 +746,13 @@ export async function getCompletionWithProfile(
740
746
  // 🔥 NEW: Parse error message to detect and handle specific API errors
741
747
  try {
742
748
  const errorData = await response.json()
743
- const errorMessage = errorData?.error?.message || errorData?.message || `HTTP ${response.status}`
749
+ // Type guard for error data structure
750
+ const hasError = (data: unknown): data is { error?: { message?: string }; message?: string } => {
751
+ return typeof data === 'object' && data !== null
752
+ }
753
+ const errorMessage = hasError(errorData)
754
+ ? (errorData.error?.message || errorData.message || `HTTP ${response.status}`)
755
+ : `HTTP ${response.status}`
744
756
 
745
757
  // Check if this is a parameter error that we can fix
746
758
  const isGPT5 = opts.model.startsWith('gpt-5')
@@ -1285,16 +1297,25 @@ export async function fetchCustomModels(
1285
1297
 
1286
1298
  const data = await response.json()
1287
1299
 
1300
+ // Type guards for different API response formats
1301
+ const hasDataArray = (obj: unknown): obj is { data: unknown[] } => {
1302
+ return typeof obj === 'object' && obj !== null && 'data' in obj && Array.isArray((obj as any).data)
1303
+ }
1304
+
1305
+ const hasModelsArray = (obj: unknown): obj is { models: unknown[] } => {
1306
+ return typeof obj === 'object' && obj !== null && 'models' in obj && Array.isArray((obj as any).models)
1307
+ }
1308
+
1288
1309
  // Validate response format and extract models array
1289
1310
  let models = []
1290
1311
 
1291
- if (data && data.data && Array.isArray(data.data)) {
1312
+ if (hasDataArray(data)) {
1292
1313
  // Standard OpenAI format: { data: [...] }
1293
1314
  models = data.data
1294
1315
  } else if (Array.isArray(data)) {
1295
1316
  // Direct array format
1296
1317
  models = data
1297
- } else if (data && data.models && Array.isArray(data.models)) {
1318
+ } else if (hasModelsArray(data)) {
1298
1319
  // Alternative format: { models: [...] }
1299
1320
  models = data.models
1300
1321
  } else {
@@ -57,7 +57,7 @@ export const ArchitectTool = {
57
57
  needsPermissions() {
58
58
  return false
59
59
  },
60
- async *call({ prompt, context }, toolUseContext, canUseTool) {
60
+ async *call({ prompt, context }, toolUseContext) {
61
61
  const content = context
62
62
  ? `<context>${context}</context>\n\n${prompt}`
63
63
  : prompt
@@ -67,10 +67,13 @@ export const ArchitectTool = {
67
67
  const messages: Message[] = [userMessage]
68
68
 
69
69
  // We only allow the file exploration tools to be used in the architect tool
70
- const allowedTools = (toolUseContext.options.tools ?? []).filter(_ =>
70
+ const allowedTools = (toolUseContext.options?.tools ?? []).filter(_ =>
71
71
  FS_EXPLORATION_TOOLS.map(_ => _.name).includes(_.name),
72
72
  )
73
73
 
74
+ // Create a dummy canUseTool function since this tool controls its own tool usage
75
+ const canUseTool = async () => ({ result: true as const })
76
+
74
77
  const lastResponse = await lastX(
75
78
  query(
76
79
  messages,
@@ -79,7 +82,17 @@ export const ArchitectTool = {
79
82
  canUseTool,
80
83
  {
81
84
  ...toolUseContext,
82
- options: { ...toolUseContext.options, tools: allowedTools },
85
+ setToolJSX: () => {}, // Dummy function since ArchitectTool doesn't use UI
86
+ options: {
87
+ commands: toolUseContext.options?.commands || [],
88
+ forkNumber: toolUseContext.options?.forkNumber || 0,
89
+ messageLogName: toolUseContext.options?.messageLogName || 'default',
90
+ verbose: toolUseContext.options?.verbose || false,
91
+ safeMode: toolUseContext.options?.safeMode || false,
92
+ maxThinkingTokens: toolUseContext.options?.maxThinkingTokens || 0,
93
+ ...toolUseContext.options,
94
+ tools: allowedTools
95
+ },
83
96
  },
84
97
  ),
85
98
  )
@@ -98,8 +111,8 @@ export const ArchitectTool = {
98
111
  async prompt() {
99
112
  return DESCRIPTION
100
113
  },
101
- renderResultForAssistant(data) {
102
- return data
114
+ renderResultForAssistant(data: TextBlock[]): string {
115
+ return data.map(block => block.text).join('\n')
103
116
  },
104
117
  renderToolUseMessage(input) {
105
118
  return Object.entries(input)
@@ -146,7 +146,7 @@ Question: What are the most effective React optimization techniques for handling
146
146
  }
147
147
  } catch (e) {
148
148
  // If we can't determine current model, allow the request
149
- debugLogger('AskExpertModel', 'Could not determine current model:', e)
149
+ debugLogger.error('AskExpertModel', { message: 'Could not determine current model', error: e })
150
150
  }
151
151
 
152
152
  // Validate that the model exists and is available
@@ -169,7 +169,8 @@ Question: What are the most effective React optimization techniques for handling
169
169
  }
170
170
  }
171
171
  } catch (error) {
172
- logError('Model validation error in AskExpertModelTool', error)
172
+ console.error('Model validation error in AskExpertModelTool:', error)
173
+ logError(error)
173
174
  return {
174
175
  result: false,
175
176
  message: `Failed to validate expert model '${expert_model}'. Please check your model configuration.`,
@@ -303,7 +304,8 @@ ${output.expertAnswer}`
303
304
  const session = createExpertChatSession(expertModel)
304
305
  sessionId = session.sessionId
305
306
  } catch (error) {
306
- logError('Failed to create new expert chat session', error)
307
+ console.error('Failed to create new expert chat session:', error)
308
+ logError(error)
307
309
  throw new Error('Failed to create new chat session')
308
310
  }
309
311
  } else {
@@ -316,16 +318,15 @@ ${output.expertAnswer}`
316
318
  sessionId = newSession.sessionId
317
319
  }
318
320
  } catch (error) {
319
- logError('Failed to load expert chat session', error)
321
+ console.error('Failed to load expert chat session:', error)
322
+ logError(error)
320
323
  // Fallback: create new session
321
324
  try {
322
325
  const newSession = createExpertChatSession(expertModel)
323
326
  sessionId = newSession.sessionId
324
327
  } catch (createError) {
325
- logError(
326
- 'Failed to create fallback expert chat session',
327
- createError,
328
- )
328
+ console.error('Failed to create fallback expert chat session:', createError)
329
+ logError(createError)
329
330
  throw new Error('Unable to create or load chat session')
330
331
  }
331
332
  }
@@ -341,7 +342,8 @@ ${output.expertAnswer}`
341
342
  try {
342
343
  historyMessages = getSessionMessages(sessionId)
343
344
  } catch (error) {
344
- logError('Failed to load session messages', error)
345
+ console.error('Failed to load session messages:', error)
346
+ logError(error)
345
347
  historyMessages = [] // Fallback to empty history
346
348
  }
347
349
 
@@ -355,7 +357,8 @@ ${output.expertAnswer}`
355
357
  : createAssistantMessage(msg.content),
356
358
  )
357
359
  } catch (error) {
358
- logError('Failed to create system messages', error)
360
+ console.error('Failed to create system messages:', error)
361
+ logError(error)
359
362
  throw new Error('Failed to prepare conversation messages')
360
363
  }
361
364
 
@@ -414,7 +417,8 @@ ${output.expertAnswer}`
414
417
  timeoutPromise
415
418
  ])
416
419
  } catch (error: any) {
417
- logError('Expert model query failed', error)
420
+ console.error('Expert model query failed:', error)
421
+ logError(error)
418
422
 
419
423
  // Check for specific error types
420
424
  if (
@@ -496,7 +500,8 @@ ${output.expertAnswer}`
496
500
  throw new Error('Expert response was empty')
497
501
  }
498
502
  } catch (error) {
499
- logError('Failed to extract expert answer', error)
503
+ console.error('Failed to extract expert answer:', error)
504
+ logError(error)
500
505
  throw new Error('Failed to process expert response')
501
506
  }
502
507
 
@@ -505,7 +510,8 @@ ${output.expertAnswer}`
505
510
  addMessageToSession(sessionId, 'user', question)
506
511
  addMessageToSession(sessionId, 'assistant', expertAnswer)
507
512
  } catch (error) {
508
- logError('Failed to save conversation to session', error)
513
+ console.error('Failed to save conversation to session:', error)
514
+ logError(error)
509
515
  // Don't throw here - we got a valid response, saving is non-critical
510
516
  }
511
517
 
@@ -530,7 +536,8 @@ ${output.expertAnswer}`
530
536
  return yield* this.handleInterrupt()
531
537
  }
532
538
 
533
- logError('AskExpertModelTool execution failed', error)
539
+ console.error('AskExpertModelTool execution failed:', error)
540
+ logError(error)
534
541
 
535
542
  // Ensure we have a valid sessionId for error response
536
543
  const errorSessionId = sessionId || 'error-session'
@@ -6,6 +6,7 @@ import * as React from 'react'
6
6
  import { z } from 'zod'
7
7
  import { FileEditToolUpdatedMessage } from '../../components/FileEditToolUpdatedMessage'
8
8
  import { StructuredDiff } from '../../components/StructuredDiff'
9
+ import { FallbackToolUseRejectedMessage } from '../../components/FallbackToolUseRejectedMessage'
9
10
  import { logEvent } from '../../services/statsig'
10
11
  import { Tool, ValidationResult } from '../../Tool'
11
12
  import { intersperse } from '../../utils/array'
@@ -76,10 +77,13 @@ export const FileEditTool = {
76
77
  )
77
78
  },
78
79
  renderToolUseRejectedMessage(
79
- { file_path, old_string, new_string },
80
- { columns, verbose },
80
+ { file_path, old_string, new_string }: any = {},
81
+ { columns, verbose }: any = {},
81
82
  ) {
82
83
  try {
84
+ if (!file_path) {
85
+ return <FallbackToolUseRejectedMessage />
86
+ }
83
87
  const { patch } = applyEdit(file_path, old_string, new_string)
84
88
  return (
85
89
  <Box flexDirection="column">
@@ -8,6 +8,7 @@ import { z } from 'zod'
8
8
  import { FileEditToolUpdatedMessage } from '../../components/FileEditToolUpdatedMessage'
9
9
  import { HighlightedCode } from '../../components/HighlightedCode'
10
10
  import { StructuredDiff } from '../../components/StructuredDiff'
11
+ import { FallbackToolUseRejectedMessage } from '../../components/FallbackToolUseRejectedMessage'
11
12
  import { logEvent } from '../../services/statsig'
12
13
  import type { Tool } from '../../Tool'
13
14
  import { intersperse } from '../../utils/array'
@@ -67,8 +68,11 @@ export const FileWriteTool = {
67
68
  renderToolUseMessage(input, { verbose }) {
68
69
  return `file_path: ${verbose ? input.file_path : relative(getCwd(), input.file_path)}`
69
70
  },
70
- renderToolUseRejectedMessage({ file_path, content }, { columns, verbose }) {
71
+ renderToolUseRejectedMessage({ file_path, content }: any = {}, { columns, verbose }: any = {}) {
71
72
  try {
73
+ if (!file_path) {
74
+ return <FallbackToolUseRejectedMessage />
75
+ }
72
76
  const fullFilePath = isAbsolute(file_path)
73
77
  ? file_path
74
78
  : resolve(getCwd(), file_path)
@@ -120,9 +124,9 @@ export const FileWriteTool = {
120
124
  }
121
125
  },
122
126
  renderToolResultMessage(
123
- { filePath, content, structuredPatch, type },
124
- { verbose },
127
+ { filePath, content, structuredPatch, type }
125
128
  ) {
129
+ const verbose = false // Default to false since verbose is no longer passed
126
130
  switch (type) {
127
131
  case 'create': {
128
132
  const contentWithFallback = content || '(No content)'