@shareai-lab/kode 1.1.12 → 1.1.14

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 +83 -57
  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,891 @@
1
+ import { existsSync, mkdirSync, appendFileSync } from "fs";
2
+ import { join } from "path";
3
+ import { homedir } from "os";
4
+ import { randomUUID } from "crypto";
5
+ import chalk from "chalk";
6
+ import { SESSION_ID } from "./log.js";
7
+ var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
8
+ LogLevel2["TRACE"] = "TRACE";
9
+ LogLevel2["DEBUG"] = "DEBUG";
10
+ LogLevel2["INFO"] = "INFO";
11
+ LogLevel2["WARN"] = "WARN";
12
+ LogLevel2["ERROR"] = "ERROR";
13
+ LogLevel2["FLOW"] = "FLOW";
14
+ LogLevel2["API"] = "API";
15
+ LogLevel2["STATE"] = "STATE";
16
+ LogLevel2["REMINDER"] = "REMINDER";
17
+ return LogLevel2;
18
+ })(LogLevel || {});
19
+ const isDebugMode = () => process.argv.includes("--debug") || process.argv.includes("--debug-verbose");
20
+ const isVerboseMode = () => process.argv.includes("--verbose");
21
+ const isDebugVerboseMode = () => process.argv.includes("--debug-verbose");
22
+ const TERMINAL_LOG_LEVELS = /* @__PURE__ */ new Set([
23
+ "ERROR" /* ERROR */,
24
+ "WARN" /* WARN */,
25
+ "INFO" /* INFO */,
26
+ // 添加 INFO 级别,显示关键系统状态
27
+ "REMINDER" /* REMINDER */
28
+ // 系统提醒事件,用户应该看到
29
+ ]);
30
+ const DEBUG_VERBOSE_TERMINAL_LOG_LEVELS = /* @__PURE__ */ new Set([
31
+ "ERROR" /* ERROR */,
32
+ "WARN" /* WARN */,
33
+ "FLOW" /* FLOW */,
34
+ "API" /* API */,
35
+ "STATE" /* STATE */,
36
+ "INFO" /* INFO */,
37
+ "REMINDER" /* REMINDER */
38
+ // 系统提醒在详细模式下也显示
39
+ ]);
40
+ const USER_FRIENDLY_LEVELS = /* @__PURE__ */ new Set([
41
+ "SESSION_START",
42
+ "QUERY_START",
43
+ "QUERY_PROGRESS",
44
+ "QUERY_COMPLETE",
45
+ "TOOL_EXECUTION",
46
+ "ERROR_OCCURRED",
47
+ "PERFORMANCE_SUMMARY"
48
+ ]);
49
+ const STARTUP_TIMESTAMP = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
50
+ const REQUEST_START_TIME = Date.now();
51
+ const KODE_DIR = join(homedir(), ".kode");
52
+ function getProjectDir(cwd) {
53
+ return cwd.replace(/[^a-zA-Z0-9]/g, "-");
54
+ }
55
+ const DEBUG_PATHS = {
56
+ base: () => join(KODE_DIR, getProjectDir(process.cwd()), "debug"),
57
+ detailed: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-detailed.log`),
58
+ flow: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-flow.log`),
59
+ api: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-api.log`),
60
+ state: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-state.log`)
61
+ };
62
+ function ensureDebugDir() {
63
+ const debugDir = DEBUG_PATHS.base();
64
+ if (!existsSync(debugDir)) {
65
+ mkdirSync(debugDir, { recursive: true });
66
+ }
67
+ }
68
+ class RequestContext {
69
+ id;
70
+ startTime;
71
+ phases = /* @__PURE__ */ new Map();
72
+ constructor() {
73
+ this.id = randomUUID().slice(0, 8);
74
+ this.startTime = Date.now();
75
+ }
76
+ markPhase(phase) {
77
+ this.phases.set(phase, Date.now() - this.startTime);
78
+ }
79
+ getPhaseTime(phase) {
80
+ return this.phases.get(phase) || 0;
81
+ }
82
+ getAllPhases() {
83
+ return Object.fromEntries(this.phases);
84
+ }
85
+ }
86
+ const activeRequests = /* @__PURE__ */ new Map();
87
+ let currentRequest = null;
88
+ function writeToFile(filePath, entry) {
89
+ if (!isDebugMode()) return;
90
+ try {
91
+ ensureDebugDir();
92
+ const logLine = JSON.stringify(
93
+ {
94
+ ...entry,
95
+ sessionId: SESSION_ID,
96
+ pid: process.pid,
97
+ uptime: Date.now() - REQUEST_START_TIME
98
+ },
99
+ null,
100
+ 2
101
+ ) + ",\n";
102
+ appendFileSync(filePath, logLine);
103
+ } catch (error) {
104
+ }
105
+ }
106
+ const recentLogs = /* @__PURE__ */ new Map();
107
+ const LOG_DEDUPE_WINDOW_MS = 5e3;
108
+ function getDedupeKey(level, phase, data) {
109
+ if (phase.startsWith("CONFIG_")) {
110
+ const file = data?.file || "";
111
+ return `${level}:${phase}:${file}`;
112
+ }
113
+ return `${level}:${phase}`;
114
+ }
115
+ function shouldLogWithDedupe(level, phase, data) {
116
+ const key = getDedupeKey(level, phase, data);
117
+ const now = Date.now();
118
+ const lastLogTime = recentLogs.get(key);
119
+ if (!lastLogTime || now - lastLogTime > LOG_DEDUPE_WINDOW_MS) {
120
+ recentLogs.set(key, now);
121
+ for (const [oldKey, oldTime] of recentLogs.entries()) {
122
+ if (now - oldTime > LOG_DEDUPE_WINDOW_MS) {
123
+ recentLogs.delete(oldKey);
124
+ }
125
+ }
126
+ return true;
127
+ }
128
+ return false;
129
+ }
130
+ function formatMessages(messages) {
131
+ if (Array.isArray(messages)) {
132
+ const recentMessages = messages.slice(-5);
133
+ return recentMessages.map((msg, index) => {
134
+ const role = msg.role || "unknown";
135
+ let content = "";
136
+ if (typeof msg.content === "string") {
137
+ content = msg.content.length > 300 ? msg.content.substring(0, 300) + "..." : msg.content;
138
+ } else if (typeof msg.content === "object") {
139
+ content = "[complex_content]";
140
+ } else {
141
+ content = String(msg.content || "");
142
+ }
143
+ const totalIndex = messages.length - recentMessages.length + index;
144
+ return `[${totalIndex}] ${chalk.dim(role)}: ${content}`;
145
+ }).join("\n ");
146
+ }
147
+ if (typeof messages === "string") {
148
+ try {
149
+ const parsed = JSON.parse(messages);
150
+ if (Array.isArray(parsed)) {
151
+ return formatMessages(parsed);
152
+ }
153
+ } catch {
154
+ }
155
+ }
156
+ if (typeof messages === "string" && messages.length > 200) {
157
+ return messages.substring(0, 200) + "...";
158
+ }
159
+ return typeof messages === "string" ? messages : JSON.stringify(messages);
160
+ }
161
+ function shouldShowInTerminal(level) {
162
+ if (!isDebugMode()) return false;
163
+ if (isDebugVerboseMode()) {
164
+ return DEBUG_VERBOSE_TERMINAL_LOG_LEVELS.has(level);
165
+ }
166
+ return TERMINAL_LOG_LEVELS.has(level);
167
+ }
168
+ function logToTerminal(entry) {
169
+ if (!shouldShowInTerminal(entry.level)) return;
170
+ const { level, phase, data, requestId, elapsed } = entry;
171
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString().slice(11, 23);
172
+ let prefix = "";
173
+ let color = chalk.gray;
174
+ switch (level) {
175
+ case "FLOW" /* FLOW */:
176
+ prefix = "\u{1F504}";
177
+ color = chalk.cyan;
178
+ break;
179
+ case "API" /* API */:
180
+ prefix = "\u{1F310}";
181
+ color = chalk.yellow;
182
+ break;
183
+ case "STATE" /* STATE */:
184
+ prefix = "\u{1F4CA}";
185
+ color = chalk.blue;
186
+ break;
187
+ case "ERROR" /* ERROR */:
188
+ prefix = "\u274C";
189
+ color = chalk.red;
190
+ break;
191
+ case "WARN" /* WARN */:
192
+ prefix = "\u26A0\uFE0F";
193
+ color = chalk.yellow;
194
+ break;
195
+ case "INFO" /* INFO */:
196
+ prefix = "\u2139\uFE0F";
197
+ color = chalk.green;
198
+ break;
199
+ case "TRACE" /* TRACE */:
200
+ prefix = "\u{1F4C8}";
201
+ color = chalk.magenta;
202
+ break;
203
+ default:
204
+ prefix = "\u{1F50D}";
205
+ color = chalk.gray;
206
+ }
207
+ const reqId = requestId ? chalk.dim(`[${requestId}]`) : "";
208
+ const elapsedStr = elapsed !== void 0 ? chalk.dim(`+${elapsed}ms`) : "";
209
+ let dataStr = "";
210
+ if (typeof data === "object" && data !== null) {
211
+ if (data.messages) {
212
+ const formattedMessages = formatMessages(data.messages);
213
+ dataStr = JSON.stringify(
214
+ {
215
+ ...data,
216
+ messages: `
217
+ ${formattedMessages}`
218
+ },
219
+ null,
220
+ 2
221
+ );
222
+ } else {
223
+ dataStr = JSON.stringify(data, null, 2);
224
+ }
225
+ } else {
226
+ dataStr = typeof data === "string" ? data : JSON.stringify(data);
227
+ }
228
+ console.log(
229
+ `${color(`[${timestamp}]`)} ${prefix} ${color(phase)} ${reqId} ${dataStr} ${elapsedStr}`
230
+ );
231
+ }
232
+ function debugLog(level, phase, data, requestId) {
233
+ if (!isDebugMode()) return;
234
+ if (!shouldLogWithDedupe(level, phase, data)) {
235
+ return;
236
+ }
237
+ const entry = {
238
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
239
+ level,
240
+ phase,
241
+ data,
242
+ requestId: requestId || currentRequest?.id,
243
+ elapsed: currentRequest ? Date.now() - currentRequest.startTime : void 0
244
+ };
245
+ writeToFile(DEBUG_PATHS.detailed(), entry);
246
+ switch (level) {
247
+ case "FLOW" /* FLOW */:
248
+ writeToFile(DEBUG_PATHS.flow(), entry);
249
+ break;
250
+ case "API" /* API */:
251
+ writeToFile(DEBUG_PATHS.api(), entry);
252
+ break;
253
+ case "STATE" /* STATE */:
254
+ writeToFile(DEBUG_PATHS.state(), entry);
255
+ break;
256
+ }
257
+ logToTerminal(entry);
258
+ }
259
+ const debug = {
260
+ flow: (phase, data, requestId) => debugLog("FLOW" /* FLOW */, phase, data, requestId),
261
+ api: (phase, data, requestId) => debugLog("API" /* API */, phase, data, requestId),
262
+ state: (phase, data, requestId) => debugLog("STATE" /* STATE */, phase, data, requestId),
263
+ info: (phase, data, requestId) => debugLog("INFO" /* INFO */, phase, data, requestId),
264
+ warn: (phase, data, requestId) => debugLog("WARN" /* WARN */, phase, data, requestId),
265
+ error: (phase, data, requestId) => debugLog("ERROR" /* ERROR */, phase, data, requestId),
266
+ trace: (phase, data, requestId) => debugLog("TRACE" /* TRACE */, phase, data, requestId),
267
+ // 新增UI相关的调试函数 (只记录到文件,不显示在终端)
268
+ ui: (phase, data, requestId) => debugLog("STATE" /* STATE */, `UI_${phase}`, data, requestId),
269
+ // 新增Statsig事件追踪
270
+ statsig: (phase, data) => debugLog("TRACE" /* TRACE */, phase, data)
271
+ };
272
+ function startRequest() {
273
+ const ctx = new RequestContext();
274
+ currentRequest = ctx;
275
+ activeRequests.set(ctx.id, ctx);
276
+ debug.flow("REQUEST_START", {
277
+ requestId: ctx.id,
278
+ activeRequests: activeRequests.size
279
+ });
280
+ return ctx;
281
+ }
282
+ function endRequest(ctx) {
283
+ const request = ctx || currentRequest;
284
+ if (!request) return;
285
+ debug.flow("REQUEST_END", {
286
+ requestId: request.id,
287
+ totalTime: Date.now() - request.startTime,
288
+ phases: request.getAllPhases()
289
+ });
290
+ activeRequests.delete(request.id);
291
+ if (currentRequest === request) {
292
+ currentRequest = null;
293
+ }
294
+ }
295
+ function getCurrentRequest() {
296
+ return currentRequest;
297
+ }
298
+ function markPhase(phase, data) {
299
+ if (!currentRequest) return;
300
+ currentRequest.markPhase(phase);
301
+ debug.flow(`PHASE_${phase.toUpperCase()}`, {
302
+ requestId: currentRequest.id,
303
+ elapsed: currentRequest.getPhaseTime(phase),
304
+ data
305
+ });
306
+ }
307
+ function logReminderEvent(eventType, reminderData, agentId) {
308
+ if (!isDebugMode()) return;
309
+ debug.info("REMINDER_EVENT_TRIGGERED", {
310
+ eventType,
311
+ agentId: agentId || "default",
312
+ reminderType: reminderData.type || "unknown",
313
+ reminderCategory: reminderData.category || "general",
314
+ reminderPriority: reminderData.priority || "medium",
315
+ contentLength: reminderData.content ? reminderData.content.length : 0,
316
+ timestamp: Date.now()
317
+ });
318
+ }
319
+ function logAPIError(context) {
320
+ const errorDir = join(KODE_DIR, "logs", "error", "api");
321
+ if (!existsSync(errorDir)) {
322
+ try {
323
+ mkdirSync(errorDir, { recursive: true });
324
+ } catch (err) {
325
+ console.error("Failed to create error log directory:", err);
326
+ return;
327
+ }
328
+ }
329
+ const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
330
+ const sanitizedModel = context.model.replace(/[^a-zA-Z0-9-_]/g, "_");
331
+ const filename = `${sanitizedModel}_${timestamp}.log`;
332
+ const filepath = join(errorDir, filename);
333
+ const fullLogContent = {
334
+ timestamp: (/* @__PURE__ */ new Date()).toISOString(),
335
+ sessionId: SESSION_ID,
336
+ requestId: getCurrentRequest()?.id,
337
+ model: context.model,
338
+ provider: context.provider,
339
+ endpoint: context.endpoint,
340
+ status: context.status,
341
+ error: context.error,
342
+ request: context.request,
343
+ // 保存完整请求
344
+ response: context.response,
345
+ // 保存完整响应
346
+ environment: {
347
+ nodeVersion: process.version,
348
+ platform: process.platform,
349
+ cwd: process.cwd()
350
+ }
351
+ };
352
+ try {
353
+ appendFileSync(filepath, JSON.stringify(fullLogContent, null, 2) + "\n");
354
+ appendFileSync(filepath, "=".repeat(80) + "\n\n");
355
+ } catch (err) {
356
+ console.error("Failed to write API error log:", err);
357
+ }
358
+ if (isDebugMode()) {
359
+ debug.error("API_ERROR", {
360
+ model: context.model,
361
+ status: context.status,
362
+ error: typeof context.error === "string" ? context.error : context.error?.message || "Unknown error",
363
+ endpoint: context.endpoint,
364
+ logFile: filename
365
+ });
366
+ }
367
+ if (isVerboseMode() || isDebugVerboseMode()) {
368
+ console.log();
369
+ console.log(chalk.red("\u2501".repeat(60)));
370
+ console.log(chalk.red.bold("\u26A0\uFE0F API Error"));
371
+ console.log(chalk.red("\u2501".repeat(60)));
372
+ console.log(chalk.white(" Model: ") + chalk.yellow(context.model));
373
+ console.log(chalk.white(" Status: ") + chalk.red(context.status));
374
+ let errorMessage = "Unknown error";
375
+ if (typeof context.error === "string") {
376
+ errorMessage = context.error;
377
+ } else if (context.error?.message) {
378
+ errorMessage = context.error.message;
379
+ } else if (context.error?.error?.message) {
380
+ errorMessage = context.error.error.message;
381
+ }
382
+ console.log(chalk.white(" Error: ") + chalk.red(errorMessage));
383
+ if (context.response) {
384
+ console.log();
385
+ console.log(chalk.gray(" Response:"));
386
+ const responseStr = typeof context.response === "string" ? context.response : JSON.stringify(context.response, null, 2);
387
+ responseStr.split("\n").forEach((line) => {
388
+ console.log(chalk.gray(" " + line));
389
+ });
390
+ }
391
+ console.log();
392
+ console.log(chalk.dim(` \u{1F4C1} Full log: ${filepath}`));
393
+ console.log(chalk.red("\u2501".repeat(60)));
394
+ console.log();
395
+ }
396
+ }
397
+ function logLLMInteraction(context) {
398
+ if (!isDebugMode()) return;
399
+ const duration = context.timing.end - context.timing.start;
400
+ console.log("\n" + chalk.blue("\u{1F9E0} LLM CALL DEBUG"));
401
+ console.log(chalk.gray("\u2501".repeat(60)));
402
+ console.log(chalk.yellow("\u{1F4CA} Context Overview:"));
403
+ console.log(` Messages Count: ${context.messages.length}`);
404
+ console.log(` System Prompt Length: ${context.systemPrompt.length} chars`);
405
+ console.log(` Duration: ${duration.toFixed(0)}ms`);
406
+ if (context.usage) {
407
+ console.log(
408
+ ` Token Usage: ${context.usage.inputTokens} \u2192 ${context.usage.outputTokens}`
409
+ );
410
+ }
411
+ const apiLabel = context.apiFormat ? ` (${context.apiFormat.toUpperCase()})` : "";
412
+ console.log(chalk.cyan(`
413
+ \u{1F4AC} Real API Messages${apiLabel} (last 10):`));
414
+ const recentMessages = context.messages.slice(-10);
415
+ recentMessages.forEach((msg, index) => {
416
+ const globalIndex = context.messages.length - recentMessages.length + index;
417
+ const roleColor = msg.role === "user" ? "green" : msg.role === "assistant" ? "blue" : msg.role === "system" ? "yellow" : "gray";
418
+ let content = "";
419
+ let isReminder = false;
420
+ if (typeof msg.content === "string") {
421
+ if (msg.content.includes("<system-reminder>")) {
422
+ isReminder = true;
423
+ const reminderContent = msg.content.replace(/<\/?system-reminder>/g, "").trim();
424
+ content = `\u{1F514} ${reminderContent.length > 800 ? reminderContent.substring(0, 800) + "..." : reminderContent}`;
425
+ } else {
426
+ const maxLength = msg.role === "user" ? 1e3 : msg.role === "system" ? 1200 : 800;
427
+ content = msg.content.length > maxLength ? msg.content.substring(0, maxLength) + "..." : msg.content;
428
+ }
429
+ } else if (Array.isArray(msg.content)) {
430
+ const textBlocks = msg.content.filter(
431
+ (block) => block.type === "text"
432
+ );
433
+ const toolBlocks = msg.content.filter(
434
+ (block) => block.type === "tool_use"
435
+ );
436
+ if (textBlocks.length > 0) {
437
+ const text = textBlocks[0].text || "";
438
+ const maxLength = msg.role === "assistant" ? 1e3 : 800;
439
+ content = text.length > maxLength ? text.substring(0, maxLength) + "..." : text;
440
+ }
441
+ if (toolBlocks.length > 0) {
442
+ content += ` [+ ${toolBlocks.length} tool calls]`;
443
+ }
444
+ if (textBlocks.length === 0 && toolBlocks.length === 0) {
445
+ content = `[${msg.content.length} blocks: ${msg.content.map((b) => b.type || "unknown").join(", ")}]`;
446
+ }
447
+ } else {
448
+ content = "[complex_content]";
449
+ }
450
+ if (isReminder) {
451
+ console.log(
452
+ ` [${globalIndex}] ${chalk.magenta("\u{1F514} REMINDER")}: ${chalk.dim(content)}`
453
+ );
454
+ } else {
455
+ const roleIcon = msg.role === "user" ? "\u{1F464}" : msg.role === "assistant" ? "\u{1F916}" : msg.role === "system" ? "\u2699\uFE0F" : "\u{1F4C4}";
456
+ console.log(
457
+ ` [${globalIndex}] ${chalk[roleColor](roleIcon + " " + msg.role.toUpperCase())}: ${content}`
458
+ );
459
+ }
460
+ if (msg.role === "assistant" && Array.isArray(msg.content)) {
461
+ const toolCalls2 = msg.content.filter(
462
+ (block) => block.type === "tool_use"
463
+ );
464
+ if (toolCalls2.length > 0) {
465
+ console.log(
466
+ chalk.cyan(
467
+ ` \u{1F527} \u2192 Tool calls (${toolCalls2.length}): ${toolCalls2.map((t) => t.name).join(", ")}`
468
+ )
469
+ );
470
+ toolCalls2.forEach((tool, idx) => {
471
+ const inputStr = JSON.stringify(tool.input || {});
472
+ const maxLength = 200;
473
+ const displayInput = inputStr.length > maxLength ? inputStr.substring(0, maxLength) + "..." : inputStr;
474
+ console.log(
475
+ chalk.dim(` [${idx}] ${tool.name}: ${displayInput}`)
476
+ );
477
+ });
478
+ }
479
+ }
480
+ if (msg.tool_calls && msg.tool_calls.length > 0) {
481
+ console.log(
482
+ chalk.cyan(
483
+ ` \u{1F527} \u2192 Tool calls (${msg.tool_calls.length}): ${msg.tool_calls.map((t) => t.function.name).join(", ")}`
484
+ )
485
+ );
486
+ msg.tool_calls.forEach((tool, idx) => {
487
+ const inputStr = tool.function.arguments || "{}";
488
+ const maxLength = 200;
489
+ const displayInput = inputStr.length > maxLength ? inputStr.substring(0, maxLength) + "..." : inputStr;
490
+ console.log(
491
+ chalk.dim(` [${idx}] ${tool.function.name}: ${displayInput}`)
492
+ );
493
+ });
494
+ }
495
+ });
496
+ console.log(chalk.magenta("\n\u{1F916} LLM Response:"));
497
+ let responseContent = "";
498
+ let toolCalls = [];
499
+ if (Array.isArray(context.response.content)) {
500
+ const textBlocks = context.response.content.filter(
501
+ (block) => block.type === "text"
502
+ );
503
+ responseContent = textBlocks.length > 0 ? textBlocks[0].text || "" : "";
504
+ toolCalls = context.response.content.filter(
505
+ (block) => block.type === "tool_use"
506
+ );
507
+ } else if (typeof context.response.content === "string") {
508
+ responseContent = context.response.content;
509
+ toolCalls = context.response.tool_calls || [];
510
+ } else {
511
+ responseContent = JSON.stringify(context.response.content || "");
512
+ }
513
+ const maxResponseLength = 1e3;
514
+ const displayContent = responseContent.length > maxResponseLength ? responseContent.substring(0, maxResponseLength) + "..." : responseContent;
515
+ console.log(` Content: ${displayContent}`);
516
+ if (toolCalls.length > 0) {
517
+ const toolNames = toolCalls.map(
518
+ (t) => t.name || t.function?.name || "unknown"
519
+ );
520
+ console.log(
521
+ chalk.cyan(
522
+ ` \u{1F527} Tool Calls (${toolCalls.length}): ${toolNames.join(", ")}`
523
+ )
524
+ );
525
+ toolCalls.forEach((tool, index) => {
526
+ const toolName = tool.name || tool.function?.name || "unknown";
527
+ const toolInput = tool.input || tool.function?.arguments || "{}";
528
+ const inputStr = typeof toolInput === "string" ? toolInput : JSON.stringify(toolInput);
529
+ const maxToolInputLength = 300;
530
+ const displayInput = inputStr.length > maxToolInputLength ? inputStr.substring(0, maxToolInputLength) + "..." : inputStr;
531
+ console.log(chalk.dim(` [${index}] ${toolName}: ${displayInput}`));
532
+ });
533
+ }
534
+ console.log(
535
+ ` Stop Reason: ${context.response.stop_reason || context.response.finish_reason || "unknown"}`
536
+ );
537
+ console.log(chalk.gray("\u2501".repeat(60)));
538
+ }
539
+ function logSystemPromptConstruction(construction) {
540
+ if (!isDebugMode()) return;
541
+ console.log("\n" + chalk.yellow("\u{1F4DD} SYSTEM PROMPT CONSTRUCTION"));
542
+ console.log(` Base Prompt: ${construction.basePrompt.length} chars`);
543
+ if (construction.kodeContext) {
544
+ console.log(` + Kode Context: ${construction.kodeContext.length} chars`);
545
+ }
546
+ if (construction.reminders.length > 0) {
547
+ console.log(
548
+ ` + Dynamic Reminders: ${construction.reminders.length} items`
549
+ );
550
+ construction.reminders.forEach((reminder, index) => {
551
+ console.log(chalk.dim(` [${index}] ${reminder.substring(0, 80)}...`));
552
+ });
553
+ }
554
+ console.log(` = Final Length: ${construction.finalPrompt.length} chars`);
555
+ }
556
+ function logContextCompression(compression) {
557
+ if (!isDebugMode()) return;
558
+ console.log("\n" + chalk.red("\u{1F5DC}\uFE0F CONTEXT COMPRESSION"));
559
+ console.log(` Trigger: ${compression.trigger}`);
560
+ console.log(
561
+ ` Messages: ${compression.beforeMessages} \u2192 ${compression.afterMessages}`
562
+ );
563
+ console.log(
564
+ ` Compression Ratio: ${(compression.compressionRatio * 100).toFixed(1)}%`
565
+ );
566
+ if (compression.preservedFiles.length > 0) {
567
+ console.log(` Preserved Files: ${compression.preservedFiles.join(", ")}`);
568
+ }
569
+ }
570
+ function logUserFriendly(type, data, requestId) {
571
+ if (!isDebugMode()) return;
572
+ const timestamp = (/* @__PURE__ */ new Date()).toLocaleTimeString();
573
+ let message = "";
574
+ let color = chalk.gray;
575
+ let icon = "\u2022";
576
+ switch (type) {
577
+ case "SESSION_START":
578
+ icon = "\u{1F680}";
579
+ color = chalk.green;
580
+ message = `Session started with ${data.model || "default model"}`;
581
+ break;
582
+ case "QUERY_START":
583
+ icon = "\u{1F4AD}";
584
+ color = chalk.blue;
585
+ message = `Processing query: "${data.query?.substring(0, 50)}${data.query?.length > 50 ? "..." : ""}"`;
586
+ break;
587
+ case "QUERY_PROGRESS":
588
+ icon = "\u23F3";
589
+ color = chalk.yellow;
590
+ message = `${data.phase} (${data.elapsed}ms)`;
591
+ break;
592
+ case "QUERY_COMPLETE":
593
+ icon = "\u2705";
594
+ color = chalk.green;
595
+ message = `Query completed in ${data.duration}ms - Cost: $${data.cost} - ${data.tokens} tokens`;
596
+ break;
597
+ case "TOOL_EXECUTION":
598
+ icon = "\u{1F527}";
599
+ color = chalk.cyan;
600
+ message = `${data.toolName}: ${data.action} ${data.target ? "\u2192 " + data.target : ""}`;
601
+ break;
602
+ case "ERROR_OCCURRED":
603
+ icon = "\u274C";
604
+ color = chalk.red;
605
+ message = `${data.error} ${data.context ? "(" + data.context + ")" : ""}`;
606
+ break;
607
+ case "PERFORMANCE_SUMMARY":
608
+ icon = "\u{1F4CA}";
609
+ color = chalk.magenta;
610
+ message = `Session: ${data.queries} queries, $${data.totalCost}, ${data.avgResponseTime}ms avg`;
611
+ break;
612
+ default:
613
+ message = JSON.stringify(data);
614
+ }
615
+ const reqId = requestId ? chalk.dim(`[${requestId.slice(0, 8)}]`) : "";
616
+ console.log(`${color(`[${timestamp}]`)} ${icon} ${color(message)} ${reqId}`);
617
+ }
618
+ function initDebugLogger() {
619
+ if (!isDebugMode()) return;
620
+ debug.info("DEBUG_LOGGER_INIT", {
621
+ startupTimestamp: STARTUP_TIMESTAMP,
622
+ sessionId: SESSION_ID,
623
+ debugPaths: {
624
+ detailed: DEBUG_PATHS.detailed(),
625
+ flow: DEBUG_PATHS.flow(),
626
+ api: DEBUG_PATHS.api(),
627
+ state: DEBUG_PATHS.state()
628
+ }
629
+ });
630
+ const terminalLevels = isDebugVerboseMode() ? Array.from(DEBUG_VERBOSE_TERMINAL_LOG_LEVELS).join(", ") : Array.from(TERMINAL_LOG_LEVELS).join(", ");
631
+ console.log(
632
+ chalk.dim(`[DEBUG] Terminal output filtered to: ${terminalLevels}`)
633
+ );
634
+ console.log(
635
+ chalk.dim(`[DEBUG] Complete logs saved to: ${DEBUG_PATHS.base()}`)
636
+ );
637
+ if (!isDebugVerboseMode()) {
638
+ console.log(
639
+ chalk.dim(
640
+ `[DEBUG] Use --debug-verbose for detailed system logs (FLOW, API, STATE)`
641
+ )
642
+ );
643
+ }
644
+ }
645
+ function diagnoseError(error, context) {
646
+ const errorMessage = error instanceof Error ? error.message : String(error);
647
+ const errorStack = error instanceof Error ? error.stack : void 0;
648
+ if (errorMessage.includes("aborted") || errorMessage.includes("AbortController")) {
649
+ return {
650
+ errorType: "REQUEST_ABORTED",
651
+ category: "SYSTEM",
652
+ severity: "MEDIUM",
653
+ description: "Request was aborted, often due to user cancellation or timeout",
654
+ suggestions: [
655
+ "\u68C0\u67E5\u662F\u5426\u6309\u4E0B\u4E86 ESC \u952E\u53D6\u6D88\u8BF7\u6C42",
656
+ "\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u662F\u5426\u7A33\u5B9A",
657
+ "\u9A8C\u8BC1 AbortController \u72B6\u6001: isActive \u548C signal.aborted \u5E94\u8BE5\u4E00\u81F4",
658
+ "\u67E5\u770B\u662F\u5426\u6709\u91CD\u590D\u7684\u8BF7\u6C42\u5BFC\u81F4\u51B2\u7A81"
659
+ ],
660
+ debugSteps: [
661
+ "\u4F7F\u7528 --debug-verbose \u6A21\u5F0F\u67E5\u770B\u8BE6\u7EC6\u7684\u8BF7\u6C42\u6D41\u7A0B",
662
+ "\u68C0\u67E5 debug \u65E5\u5FD7\u4E2D\u7684 BINARY_FEEDBACK_* \u4E8B\u4EF6",
663
+ "\u9A8C\u8BC1 REQUEST_START \u548C REQUEST_END \u65E5\u5FD7\u914D\u5BF9",
664
+ "\u67E5\u770B QUERY_ABORTED \u4E8B\u4EF6\u7684\u89E6\u53D1\u539F\u56E0"
665
+ ]
666
+ };
667
+ }
668
+ if (errorMessage.includes("api-key") || errorMessage.includes("authentication") || errorMessage.includes("401")) {
669
+ return {
670
+ errorType: "API_AUTHENTICATION",
671
+ category: "API",
672
+ severity: "HIGH",
673
+ description: "API authentication failed - invalid or missing API key",
674
+ suggestions: [
675
+ "\u8FD0\u884C /login \u91CD\u65B0\u8BBE\u7F6E API \u5BC6\u94A5",
676
+ "\u68C0\u67E5 ~/.kode/ \u914D\u7F6E\u6587\u4EF6\u4E2D\u7684 API \u5BC6\u94A5",
677
+ "\u9A8C\u8BC1 API \u5BC6\u94A5\u662F\u5426\u5DF2\u8FC7\u671F\u6216\u88AB\u64A4\u9500",
678
+ "\u786E\u8BA4\u4F7F\u7528\u7684 provider \u8BBE\u7F6E\u6B63\u786E (anthropic/opendev/bigdream)"
679
+ ],
680
+ debugSteps: [
681
+ "\u68C0\u67E5 CONFIG_LOAD \u65E5\u5FD7\u4E2D\u7684 provider \u548C API \u5BC6\u94A5\u72B6\u6001",
682
+ "\u8FD0\u884C kode doctor \u68C0\u67E5\u7CFB\u7EDF\u5065\u5EB7\u72B6\u6001",
683
+ "\u67E5\u770B API_ERROR \u65E5\u5FD7\u4E86\u89E3\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F",
684
+ "\u4F7F\u7528 kode config \u547D\u4EE4\u67E5\u770B\u5F53\u524D\u914D\u7F6E"
685
+ ]
686
+ };
687
+ }
688
+ if (errorMessage.includes("ECONNREFUSED") || errorMessage.includes("ENOTFOUND") || errorMessage.includes("timeout")) {
689
+ return {
690
+ errorType: "NETWORK_CONNECTION",
691
+ category: "NETWORK",
692
+ severity: "HIGH",
693
+ description: "Network connection failed - unable to reach API endpoint",
694
+ suggestions: [
695
+ "\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u662F\u5426\u6B63\u5E38",
696
+ "\u786E\u8BA4\u9632\u706B\u5899\u6CA1\u6709\u963B\u6B62\u76F8\u5173\u7AEF\u53E3",
697
+ "\u68C0\u67E5 proxy \u8BBE\u7F6E\u662F\u5426\u6B63\u786E",
698
+ "\u5C1D\u8BD5\u5207\u6362\u5230\u4E0D\u540C\u7684\u7F51\u7EDC\u73AF\u5883",
699
+ "\u9A8C\u8BC1 baseURL \u914D\u7F6E\u662F\u5426\u6B63\u786E"
700
+ ],
701
+ debugSteps: [
702
+ "\u68C0\u67E5 API_REQUEST_START \u548C\u76F8\u5173\u7F51\u7EDC\u65E5\u5FD7",
703
+ "\u67E5\u770B LLM_REQUEST_ERROR \u4E2D\u7684\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F",
704
+ "\u4F7F\u7528 ping \u6216 curl \u6D4B\u8BD5 API \u7AEF\u70B9\u8FDE\u901A\u6027",
705
+ "\u68C0\u67E5\u4F01\u4E1A\u7F51\u7EDC\u662F\u5426\u9700\u8981\u4EE3\u7406\u8BBE\u7F6E"
706
+ ]
707
+ };
708
+ }
709
+ if (errorMessage.includes("permission") || errorMessage.includes("EACCES") || errorMessage.includes("denied")) {
710
+ return {
711
+ errorType: "PERMISSION_DENIED",
712
+ category: "PERMISSION",
713
+ severity: "MEDIUM",
714
+ description: "Permission denied - insufficient access rights",
715
+ suggestions: [
716
+ "\u68C0\u67E5\u6587\u4EF6\u548C\u76EE\u5F55\u7684\u8BFB\u5199\u6743\u9650",
717
+ "\u786E\u8BA4\u5F53\u524D\u7528\u6237\u6709\u8DB3\u591F\u7684\u7CFB\u7EDF\u6743\u9650",
718
+ "\u67E5\u770B\u662F\u5426\u9700\u8981\u7BA1\u7406\u5458\u6743\u9650\u8FD0\u884C",
719
+ "\u68C0\u67E5\u5DE5\u5177\u6743\u9650\u8BBE\u7F6E\u662F\u5426\u6B63\u786E\u914D\u7F6E"
720
+ ],
721
+ debugSteps: [
722
+ "\u67E5\u770B PERMISSION_* \u65E5\u5FD7\u4E86\u89E3\u6743\u9650\u68C0\u67E5\u8FC7\u7A0B",
723
+ "\u68C0\u67E5\u6587\u4EF6\u7CFB\u7EDF\u6743\u9650: ls -la",
724
+ "\u9A8C\u8BC1\u5DE5\u5177\u5BA1\u6279\u72B6\u6001",
725
+ "\u67E5\u770B TOOL_* \u76F8\u5173\u7684\u8C03\u8BD5\u65E5\u5FD7"
726
+ ]
727
+ };
728
+ }
729
+ if (errorMessage.includes("substring is not a function") || errorMessage.includes("content")) {
730
+ return {
731
+ errorType: "RESPONSE_FORMAT",
732
+ category: "API",
733
+ severity: "MEDIUM",
734
+ description: "LLM response format mismatch between different providers",
735
+ suggestions: [
736
+ "\u68C0\u67E5\u5F53\u524D\u4F7F\u7528\u7684 provider \u662F\u5426\u4E0E\u671F\u671B\u4E00\u81F4",
737
+ "\u9A8C\u8BC1\u54CD\u5E94\u683C\u5F0F\u5904\u7406\u903B\u8F91",
738
+ "\u786E\u8BA4\u4E0D\u540C provider \u7684\u54CD\u5E94\u683C\u5F0F\u5DEE\u5F02",
739
+ "\u68C0\u67E5\u662F\u5426\u9700\u8981\u66F4\u65B0\u54CD\u5E94\u89E3\u6790\u4EE3\u7801"
740
+ ],
741
+ debugSteps: [
742
+ "\u67E5\u770B LLM_CALL_DEBUG \u4E2D\u7684\u54CD\u5E94\u683C\u5F0F",
743
+ "\u68C0\u67E5 provider \u914D\u7F6E\u548C\u5B9E\u9645\u4F7F\u7528\u7684 API",
744
+ "\u5BF9\u6BD4 Anthropic \u548C OpenAI \u54CD\u5E94\u683C\u5F0F\u5DEE\u5F02",
745
+ "\u9A8C\u8BC1 logLLMInteraction \u51FD\u6570\u7684\u683C\u5F0F\u5904\u7406"
746
+ ]
747
+ };
748
+ }
749
+ if (errorMessage.includes("too long") || errorMessage.includes("context") || errorMessage.includes("token")) {
750
+ return {
751
+ errorType: "CONTEXT_OVERFLOW",
752
+ category: "SYSTEM",
753
+ severity: "MEDIUM",
754
+ description: "Context window exceeded - conversation too long",
755
+ suggestions: [
756
+ "\u8FD0\u884C /compact \u624B\u52A8\u538B\u7F29\u5BF9\u8BDD\u5386\u53F2",
757
+ "\u68C0\u67E5\u81EA\u52A8\u538B\u7F29\u8BBE\u7F6E\u662F\u5426\u6B63\u786E\u914D\u7F6E",
758
+ "\u51CF\u5C11\u5355\u6B21\u8F93\u5165\u7684\u5185\u5BB9\u957F\u5EA6",
759
+ "\u6E05\u7406\u4E0D\u5FC5\u8981\u7684\u4E0A\u4E0B\u6587\u4FE1\u606F"
760
+ ],
761
+ debugSteps: [
762
+ "\u67E5\u770B AUTO_COMPACT_* \u65E5\u5FD7\u68C0\u67E5\u538B\u7F29\u89E6\u53D1",
763
+ "\u68C0\u67E5 token \u4F7F\u7528\u91CF\u548C\u9608\u503C",
764
+ "\u67E5\u770B CONTEXT_COMPRESSION \u76F8\u5173\u65E5\u5FD7",
765
+ "\u9A8C\u8BC1\u6A21\u578B\u7684\u6700\u5927 token \u9650\u5236"
766
+ ]
767
+ };
768
+ }
769
+ if (errorMessage.includes("config") || errorMessage.includes("undefined") && context?.configRelated) {
770
+ return {
771
+ errorType: "CONFIGURATION",
772
+ category: "CONFIG",
773
+ severity: "MEDIUM",
774
+ description: "Configuration error - missing or invalid settings",
775
+ suggestions: [
776
+ "\u8FD0\u884C kode config \u68C0\u67E5\u914D\u7F6E\u8BBE\u7F6E",
777
+ "\u5220\u9664\u635F\u574F\u7684\u914D\u7F6E\u6587\u4EF6\u91CD\u65B0\u521D\u59CB\u5316",
778
+ "\u68C0\u67E5 JSON \u914D\u7F6E\u6587\u4EF6\u8BED\u6CD5\u662F\u5426\u6B63\u786E",
779
+ "\u9A8C\u8BC1\u73AF\u5883\u53D8\u91CF\u8BBE\u7F6E"
780
+ ],
781
+ debugSteps: [
782
+ "\u67E5\u770B CONFIG_LOAD \u548C CONFIG_SAVE \u65E5\u5FD7",
783
+ "\u68C0\u67E5\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84\u548C\u6743\u9650",
784
+ "\u9A8C\u8BC1 JSON \u683C\u5F0F: cat ~/.kode/config.json | jq",
785
+ "\u67E5\u770B\u914D\u7F6E\u7F13\u5B58\u76F8\u5173\u7684\u8C03\u8BD5\u4FE1\u606F"
786
+ ]
787
+ };
788
+ }
789
+ return {
790
+ errorType: "UNKNOWN",
791
+ category: "SYSTEM",
792
+ severity: "MEDIUM",
793
+ description: `Unexpected error: ${errorMessage}`,
794
+ suggestions: [
795
+ "\u91CD\u65B0\u542F\u52A8\u5E94\u7528\u7A0B\u5E8F",
796
+ "\u68C0\u67E5\u7CFB\u7EDF\u8D44\u6E90\u662F\u5426\u5145\u8DB3",
797
+ "\u67E5\u770B\u5B8C\u6574\u7684\u9519\u8BEF\u65E5\u5FD7\u83B7\u53D6\u66F4\u591A\u4FE1\u606F",
798
+ "\u5982\u679C\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u62A5\u544A\u6B64\u9519\u8BEF"
799
+ ],
800
+ debugSteps: [
801
+ "\u4F7F\u7528 --debug-verbose \u83B7\u53D6\u8BE6\u7EC6\u65E5\u5FD7",
802
+ "\u68C0\u67E5 error.log \u4E2D\u7684\u5B8C\u6574\u9519\u8BEF\u4FE1\u606F",
803
+ "\u67E5\u770B\u7CFB\u7EDF\u8D44\u6E90\u4F7F\u7528\u60C5\u51B5",
804
+ "\u6536\u96C6\u91CD\u73B0\u6B65\u9AA4\u548C\u73AF\u5883\u4FE1\u606F"
805
+ ],
806
+ relatedLogs: errorStack ? [errorStack] : void 0
807
+ };
808
+ }
809
+ function logErrorWithDiagnosis(error, context, requestId) {
810
+ if (!isDebugMode()) return;
811
+ const diagnosis = diagnoseError(error, context);
812
+ const errorMessage = error instanceof Error ? error.message : String(error);
813
+ debug.error(
814
+ "ERROR_OCCURRED",
815
+ {
816
+ error: errorMessage,
817
+ errorType: diagnosis.errorType,
818
+ category: diagnosis.category,
819
+ severity: diagnosis.severity,
820
+ context
821
+ },
822
+ requestId
823
+ );
824
+ console.log("\n" + chalk.red("\u{1F6A8} ERROR DIAGNOSIS"));
825
+ console.log(chalk.gray("\u2501".repeat(60)));
826
+ console.log(chalk.red(`\u274C ${diagnosis.errorType}`));
827
+ console.log(
828
+ chalk.dim(
829
+ `Category: ${diagnosis.category} | Severity: ${diagnosis.severity}`
830
+ )
831
+ );
832
+ console.log(`
833
+ ${diagnosis.description}`);
834
+ console.log(chalk.yellow("\n\u{1F4A1} Recovery Suggestions:"));
835
+ diagnosis.suggestions.forEach((suggestion, index) => {
836
+ console.log(` ${index + 1}. ${suggestion}`);
837
+ });
838
+ console.log(chalk.cyan("\n\u{1F50D} Debug Steps:"));
839
+ diagnosis.debugSteps.forEach((step, index) => {
840
+ console.log(` ${index + 1}. ${step}`);
841
+ });
842
+ if (diagnosis.relatedLogs && diagnosis.relatedLogs.length > 0) {
843
+ console.log(chalk.magenta("\n\u{1F4CB} Related Information:"));
844
+ diagnosis.relatedLogs.forEach((log, index) => {
845
+ const truncatedLog = log.length > 200 ? log.substring(0, 200) + "..." : log;
846
+ console.log(chalk.dim(` ${truncatedLog}`));
847
+ });
848
+ }
849
+ const debugPath = DEBUG_PATHS.base();
850
+ console.log(chalk.gray(`
851
+ \u{1F4C1} Complete logs: ${debugPath}`));
852
+ console.log(chalk.gray("\u2501".repeat(60)));
853
+ }
854
+ function getDebugInfo() {
855
+ return {
856
+ isDebugMode: isDebugMode(),
857
+ isVerboseMode: isVerboseMode(),
858
+ isDebugVerboseMode: isDebugVerboseMode(),
859
+ startupTimestamp: STARTUP_TIMESTAMP,
860
+ sessionId: SESSION_ID,
861
+ currentRequest: currentRequest?.id,
862
+ activeRequests: Array.from(activeRequests.keys()),
863
+ terminalLogLevels: isDebugVerboseMode() ? Array.from(DEBUG_VERBOSE_TERMINAL_LOG_LEVELS) : Array.from(TERMINAL_LOG_LEVELS),
864
+ debugPaths: {
865
+ detailed: DEBUG_PATHS.detailed(),
866
+ flow: DEBUG_PATHS.flow(),
867
+ api: DEBUG_PATHS.api(),
868
+ state: DEBUG_PATHS.state()
869
+ }
870
+ };
871
+ }
872
+ export {
873
+ LogLevel,
874
+ debug,
875
+ debugLog,
876
+ diagnoseError,
877
+ endRequest,
878
+ getCurrentRequest,
879
+ getDebugInfo,
880
+ initDebugLogger,
881
+ logAPIError,
882
+ logContextCompression,
883
+ logErrorWithDiagnosis,
884
+ logLLMInteraction,
885
+ logReminderEvent,
886
+ logSystemPromptConstruction,
887
+ logUserFriendly,
888
+ markPhase,
889
+ startRequest
890
+ };
891
+ //# sourceMappingURL=debugLogger.js.map