@shareai-lab/kode 2.0.1 → 2.0.3

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 (343) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +649 -25
  3. package/README.zh-CN.md +579 -0
  4. package/cli-acp.js +3 -17
  5. package/cli.js +5 -7
  6. package/dist/chunks/Doctor-M3J7GRTJ.js +12 -0
  7. package/dist/chunks/LogList-ISWZ6DDD.js +121 -0
  8. package/dist/chunks/LogList-ISWZ6DDD.js.map +7 -0
  9. package/dist/chunks/REPL-RQ6LO6S7.js +56 -0
  10. package/dist/chunks/ResumeConversation-6DMVBEGH.js +56 -0
  11. package/dist/chunks/agentLoader-FCRG3TFJ.js +31 -0
  12. package/dist/{agentsValidate-7LH4HTNR.js → chunks/agentsValidate-PEWMYN4Q.js} +97 -69
  13. package/dist/chunks/agentsValidate-PEWMYN4Q.js.map +7 -0
  14. package/dist/{ask-3NHFFUQG.js → chunks/ask-D7SOHJ6Z.js} +36 -44
  15. package/dist/chunks/ask-D7SOHJ6Z.js.map +7 -0
  16. package/dist/chunks/autoUpdater-CNESBOKO.js +19 -0
  17. package/dist/{chunk-AFFSCMYS.js → chunks/chunk-2JN5MY67.js} +12 -14
  18. package/dist/chunks/chunk-2JN5MY67.js.map +7 -0
  19. package/dist/chunks/chunk-2QONJ5MG.js +14 -0
  20. package/dist/chunks/chunk-2QONJ5MG.js.map +7 -0
  21. package/dist/chunks/chunk-2WEXPKHH.js +903 -0
  22. package/dist/chunks/chunk-2WEXPKHH.js.map +7 -0
  23. package/dist/{chunk-ARZSBOAO.js → chunks/chunk-3BYE3ME6.js} +717 -792
  24. package/dist/chunks/chunk-3BYE3ME6.js.map +7 -0
  25. package/dist/chunks/chunk-3JDNWX7W.js +1264 -0
  26. package/dist/chunks/chunk-3JDNWX7W.js.map +7 -0
  27. package/dist/chunks/chunk-3OEJVB5A.js +906 -0
  28. package/dist/chunks/chunk-3OEJVB5A.js.map +7 -0
  29. package/dist/chunks/chunk-3TNIOEBO.js +369 -0
  30. package/dist/chunks/chunk-3TNIOEBO.js.map +7 -0
  31. package/dist/chunks/chunk-4A46ZXMJ.js +67 -0
  32. package/dist/chunks/chunk-4A46ZXMJ.js.map +7 -0
  33. package/dist/{chunk-UHYRLID6.js → chunks/chunk-4ATBQOFO.js} +107 -55
  34. package/dist/chunks/chunk-4ATBQOFO.js.map +7 -0
  35. package/dist/chunks/chunk-4CRUCZR4.js +0 -0
  36. package/dist/{chunk-YC6LJCDE.js → chunks/chunk-4EO6SIQY.js} +32 -75
  37. package/dist/chunks/chunk-4EO6SIQY.js.map +7 -0
  38. package/dist/chunks/chunk-53M46S5I.js +64 -0
  39. package/dist/chunks/chunk-53M46S5I.js.map +7 -0
  40. package/dist/{chunk-JC6NCUG5.js → chunks/chunk-54KOYG5C.js} +0 -2
  41. package/dist/{chunk-EZXMVTDU.js → chunks/chunk-6BAS4WY6.js} +29 -45
  42. package/dist/chunks/chunk-6BAS4WY6.js.map +7 -0
  43. package/dist/{chunk-3IN27HA5.js → chunks/chunk-6KRRFSDN.js} +4 -6
  44. package/dist/chunks/chunk-6KRRFSDN.js.map +7 -0
  45. package/dist/chunks/chunk-6LJNZK4K.js +39 -0
  46. package/dist/chunks/chunk-6LJNZK4K.js.map +7 -0
  47. package/dist/chunks/chunk-6ZWEOSEI.js +666 -0
  48. package/dist/chunks/chunk-6ZWEOSEI.js.map +7 -0
  49. package/dist/chunks/chunk-77XDJMBP.js +3326 -0
  50. package/dist/chunks/chunk-77XDJMBP.js.map +7 -0
  51. package/dist/chunks/chunk-7RRW4NTB.js +6454 -0
  52. package/dist/chunks/chunk-7RRW4NTB.js.map +7 -0
  53. package/dist/chunks/chunk-7X3TW4JB.js +4520 -0
  54. package/dist/chunks/chunk-7X3TW4JB.js.map +7 -0
  55. package/dist/chunks/chunk-B3MW3YGY.js +1409 -0
  56. package/dist/chunks/chunk-B3MW3YGY.js.map +7 -0
  57. package/dist/chunks/chunk-BBJFHTBC.js +28 -0
  58. package/dist/chunks/chunk-BBJFHTBC.js.map +7 -0
  59. package/dist/chunks/chunk-BHDHXOXB.js +24 -0
  60. package/dist/chunks/chunk-BHDHXOXB.js.map +7 -0
  61. package/dist/{chunk-73WGVYLQ.js → chunks/chunk-BTA7SZ26.js} +152 -223
  62. package/dist/chunks/chunk-BTA7SZ26.js.map +7 -0
  63. package/dist/chunks/chunk-CDGRYGPZ.js +103 -0
  64. package/dist/chunks/chunk-CDGRYGPZ.js.map +7 -0
  65. package/dist/{chunk-S6HRABTA.js → chunks/chunk-CP6E5UG6.js} +1 -4
  66. package/dist/chunks/chunk-CP6E5UG6.js.map +7 -0
  67. package/dist/{chunk-QVLYOPO5.js → chunks/chunk-DQ4JHXMT.js} +462 -424
  68. package/dist/chunks/chunk-DQ4JHXMT.js.map +7 -0
  69. package/dist/chunks/chunk-DXD76CMV.js +208 -0
  70. package/dist/chunks/chunk-DXD76CMV.js.map +7 -0
  71. package/dist/chunks/chunk-GCQCAXJZ.js +0 -0
  72. package/dist/chunks/chunk-GELCZWMB.js +42 -0
  73. package/dist/chunks/chunk-GELCZWMB.js.map +7 -0
  74. package/dist/{chunk-K2CWOTI2.js → chunks/chunk-HJYOH4HC.js} +23 -18
  75. package/dist/chunks/chunk-HJYOH4HC.js.map +7 -0
  76. package/dist/chunks/chunk-HPYNW6TT.js +744 -0
  77. package/dist/chunks/chunk-HPYNW6TT.js.map +7 -0
  78. package/dist/{chunk-RZWOUA25.js → chunks/chunk-HRJ3ICQK.js} +59 -55
  79. package/dist/chunks/chunk-HRJ3ICQK.js.map +7 -0
  80. package/dist/{chunk-DZE5YA7L.js → chunks/chunk-IFCIADS3.js} +571 -573
  81. package/dist/chunks/chunk-IFCIADS3.js.map +7 -0
  82. package/dist/chunks/chunk-IN7XZ7BC.js +27 -0
  83. package/dist/chunks/chunk-IN7XZ7BC.js.map +7 -0
  84. package/dist/chunks/chunk-L7P4M4KW.js +193 -0
  85. package/dist/chunks/chunk-L7P4M4KW.js.map +7 -0
  86. package/dist/chunks/chunk-LB6TCPDI.js +0 -0
  87. package/dist/{chunk-3RUXVV4S.js → chunks/chunk-LOCXPQNJ.js} +1 -4
  88. package/dist/{chunk-3RUXVV4S.js.map → chunks/chunk-LOCXPQNJ.js.map} +2 -2
  89. package/dist/{chunk-7M2YN6TU.js → chunks/chunk-LOD5ZHCI.js} +213 -208
  90. package/dist/chunks/chunk-LOD5ZHCI.js.map +7 -0
  91. package/dist/{chunk-S3J2TLV6.js → chunks/chunk-M7P3QNRU.js} +1 -4
  92. package/dist/{chunk-S3J2TLV6.js.map → chunks/chunk-M7P3QNRU.js.map} +2 -2
  93. package/dist/chunks/chunk-PPHLQVL7.js +4234 -0
  94. package/dist/chunks/chunk-PPHLQVL7.js.map +7 -0
  95. package/dist/{chunk-ABLVTESJ.js → chunks/chunk-QAXE37B5.js} +1 -4
  96. package/dist/chunks/chunk-QAXE37B5.js.map +7 -0
  97. package/dist/chunks/chunk-QHQOBUF6.js +60 -0
  98. package/dist/chunks/chunk-QHQOBUF6.js.map +7 -0
  99. package/dist/{chunk-W7GRKO7Q.js → chunks/chunk-RPJXO7GG.js} +241 -214
  100. package/dist/chunks/chunk-RPJXO7GG.js.map +7 -0
  101. package/dist/{chunk-NPFOMITO.js → chunks/chunk-SWQV4KSY.js} +1 -4
  102. package/dist/{chunk-NPFOMITO.js.map → chunks/chunk-SWQV4KSY.js.map} +2 -2
  103. package/dist/chunks/chunk-SZLAPULP.js +28 -0
  104. package/dist/chunks/chunk-SZLAPULP.js.map +7 -0
  105. package/dist/{chunk-7U7L4NMD.js → chunks/chunk-T7RB5V5J.js} +23 -25
  106. package/dist/chunks/chunk-T7RB5V5J.js.map +7 -0
  107. package/dist/{chunk-HN4E4UUQ.js → chunks/chunk-TI2CTTMA.js} +25 -17
  108. package/dist/chunks/chunk-TI2CTTMA.js.map +7 -0
  109. package/dist/{chunk-ZVDRDPII.js → chunks/chunk-TNGVRTO5.js} +45 -20
  110. package/dist/chunks/chunk-TNGVRTO5.js.map +7 -0
  111. package/dist/chunks/chunk-TNWB3U5Y.js +2077 -0
  112. package/dist/chunks/chunk-TNWB3U5Y.js.map +7 -0
  113. package/dist/chunks/chunk-U2IHWPCU.js +12 -0
  114. package/dist/chunks/chunk-U2IHWPCU.js.map +7 -0
  115. package/dist/{chunk-KAA5BGMQ.js → chunks/chunk-UNOY3VJ2.js} +1 -4
  116. package/dist/{chunk-KAA5BGMQ.js.map → chunks/chunk-UNOY3VJ2.js.map} +2 -2
  117. package/dist/{chunk-MWRSY4X6.js → chunks/chunk-UVDJL6ZZ.js} +97 -58
  118. package/dist/chunks/chunk-UVDJL6ZZ.js.map +7 -0
  119. package/dist/chunks/chunk-VNCW4C2Z.js +13452 -0
  120. package/dist/chunks/chunk-VNCW4C2Z.js.map +7 -0
  121. package/dist/chunks/chunk-W5EGGA44.js +15 -0
  122. package/dist/chunks/chunk-W5EGGA44.js.map +7 -0
  123. package/dist/chunks/chunk-XR2W3MAM.js +1533 -0
  124. package/dist/chunks/chunk-XR2W3MAM.js.map +7 -0
  125. package/dist/{chunk-STSX7GIX.js → chunks/chunk-YIO5EBMQ.js} +423 -377
  126. package/dist/chunks/chunk-YIO5EBMQ.js.map +7 -0
  127. package/dist/chunks/chunk-ZBVLKZ5V.js +1062 -0
  128. package/dist/chunks/chunk-ZBVLKZ5V.js.map +7 -0
  129. package/dist/{chunk-E6YNABER.js → chunks/chunk-ZCLTZIVP.js} +1 -4
  130. package/dist/chunks/chunk-ZCLTZIVP.js.map +7 -0
  131. package/dist/chunks/client-SILZNM5N.js +42 -0
  132. package/dist/{config-RUSD6G5Y.js → chunks/config-25HRTPSP.js} +48 -10
  133. package/dist/chunks/cost-tracker-Z2UZT2J5.js +28 -0
  134. package/dist/{customCommands-TOIJFZAL.js → chunks/customCommands-TYMYZRG5.js} +11 -8
  135. package/dist/chunks/engine-MRVF6FK6.js +39 -0
  136. package/dist/{env-XGKBLU3D.js → chunks/env-TJ5NOBEB.js} +7 -5
  137. package/dist/{kodeAgentSessionId-X6XWQW7B.js → chunks/kodeAgentSessionId-VTNISJ2L.js} +2 -4
  138. package/dist/chunks/kodeAgentSessionLoad-YB2RKBGJ.js +15 -0
  139. package/dist/chunks/kodeAgentSessionResume-DZSIVKVA.js +13 -0
  140. package/dist/chunks/kodeAgentStreamJson-X5PLS2S6.js +11 -0
  141. package/dist/{kodeAgentStreamJsonSession-UGEZJJEB.js → chunks/kodeAgentStreamJsonSession-RDXM4XYF.js} +38 -24
  142. package/dist/chunks/kodeAgentStreamJsonSession-RDXM4XYF.js.map +7 -0
  143. package/dist/{chunk-4RTX4AG4.js → chunks/kodeAgentStructuredStdio-SVGDSB4P.js} +14 -9
  144. package/dist/chunks/kodeAgentStructuredStdio-SVGDSB4P.js.map +7 -0
  145. package/dist/{kodeHooks-QWM36A3D.js → chunks/kodeHooks-RVKYRJHG.js} +11 -9
  146. package/dist/{llm-ZUQC4WYM.js → chunks/llm-62N6T5ZT.js} +1734 -1526
  147. package/dist/chunks/llm-62N6T5ZT.js.map +7 -0
  148. package/dist/chunks/llmLazy-ZUSSE3ZA.js +13 -0
  149. package/dist/{mentionProcessor-EE3XFHCJ.js → chunks/mentionProcessor-RJW5UPJD.js} +46 -16
  150. package/dist/chunks/mentionProcessor-RJW5UPJD.js.map +7 -0
  151. package/dist/{messages-EOYQKPGM.js → chunks/messages-EEWWLPHN.js} +2 -6
  152. package/dist/chunks/model-5TIEKQPD.js +37 -0
  153. package/dist/{openai-RRCWW33N.js → chunks/openai-XXK3YZG4.js} +13 -10
  154. package/dist/{outputStyles-62Q3VH2J.js → chunks/outputStyles-FAJTXN2A.js} +6 -9
  155. package/dist/chunks/permissions-HO7INPWM.js +27 -0
  156. package/dist/{pluginRuntime-6ETCZ2LL.js → chunks/pluginRuntime-C7K5ULK2.js} +31 -48
  157. package/dist/chunks/pluginRuntime-C7K5ULK2.js.map +7 -0
  158. package/dist/chunks/pluginValidation-DAM7WRTC.js +20 -0
  159. package/dist/chunks/registry-XYJXMOA5.js +60 -0
  160. package/dist/chunks/responsesStreaming-JNGE2P3D.js +8 -0
  161. package/dist/chunks/runNonTextPrintMode-SVBLCZQX.js +577 -0
  162. package/dist/chunks/runNonTextPrintMode-SVBLCZQX.js.map +7 -0
  163. package/dist/chunks/server-REXXF5IK.js +46 -0
  164. package/dist/{skillMarketplace-3RXQBVOL.js → chunks/skillMarketplace-N4HVHNST.js} +8 -6
  165. package/dist/chunks/src-OROQIWP3.js +44 -0
  166. package/dist/chunks/src-QXLGGMUW.js +1647 -0
  167. package/dist/chunks/src-QXLGGMUW.js.map +7 -0
  168. package/dist/{cli-DOPVY2CW.js → chunks/src-SSDT6MVP.js} +2659 -3384
  169. package/dist/chunks/src-SSDT6MVP.js.map +7 -0
  170. package/dist/chunks/theme-YBJUIMWK.js +10 -0
  171. package/dist/{toolPermissionContext-65L65VEZ.js → chunks/toolPermissionContext-MOCTRR7N.js} +2 -4
  172. package/dist/chunks/toolPermissionSettings-EV2EJAXL.js +18 -0
  173. package/dist/chunks/toolPermissionSettings-EV2EJAXL.js.map +7 -0
  174. package/dist/chunks/uuid-6577SO6X.js +7 -0
  175. package/dist/chunks/uuid-6577SO6X.js.map +7 -0
  176. package/dist/chunks/webOnlyMode-ALXX7UQY.js +66 -0
  177. package/dist/chunks/webOnlyMode-ALXX7UQY.js.map +7 -0
  178. package/dist/entrypoints/cli.js +10 -0
  179. package/dist/entrypoints/cli.js.map +7 -0
  180. package/dist/entrypoints/daemon.js +10 -0
  181. package/dist/entrypoints/daemon.js.map +7 -0
  182. package/dist/entrypoints/mcp.js +71 -0
  183. package/dist/entrypoints/mcp.js.map +7 -0
  184. package/dist/index.js +6 -7
  185. package/dist/index.js.map +3 -3
  186. package/dist/sdk/client.cjs +391 -0
  187. package/dist/sdk/client.cjs.map +7 -0
  188. package/dist/sdk/client.js +364 -0
  189. package/dist/sdk/client.js.map +7 -0
  190. package/dist/sdk/core.cjs +19932 -0
  191. package/dist/sdk/core.cjs.map +7 -0
  192. package/dist/sdk/core.js +19893 -0
  193. package/dist/sdk/core.js.map +7 -0
  194. package/dist/sdk/daemon-client.cjs +257 -0
  195. package/dist/sdk/daemon-client.cjs.map +7 -0
  196. package/dist/sdk/daemon-client.js +221 -0
  197. package/dist/sdk/daemon-client.js.map +7 -0
  198. package/dist/sdk/protocol.cjs +170 -0
  199. package/dist/sdk/protocol.cjs.map +7 -0
  200. package/dist/sdk/protocol.js +140 -0
  201. package/dist/sdk/protocol.js.map +7 -0
  202. package/dist/sdk/runtime-node.cjs +236 -0
  203. package/dist/sdk/runtime-node.cjs.map +7 -0
  204. package/dist/sdk/runtime-node.js +222 -0
  205. package/dist/sdk/runtime-node.js.map +7 -0
  206. package/dist/sdk/runtime.cjs +17 -0
  207. package/dist/sdk/runtime.cjs.map +7 -0
  208. package/dist/sdk/runtime.js +0 -0
  209. package/dist/sdk/runtime.js.map +7 -0
  210. package/dist/sdk/tools.cjs +30300 -0
  211. package/dist/sdk/tools.cjs.map +7 -0
  212. package/dist/sdk/tools.js +30282 -0
  213. package/dist/sdk/tools.js.map +7 -0
  214. package/dist/webui/assets/index-5hlfByVS.css +1 -0
  215. package/dist/webui/assets/index-BR9lm1lA.js +82 -0
  216. package/dist/webui/index.html +28 -0
  217. package/package.json +93 -22
  218. package/scripts/binary-utils.cjs +12 -4
  219. package/scripts/cli-acp-wrapper.cjs +3 -17
  220. package/scripts/cli-wrapper.cjs +5 -7
  221. package/scripts/postinstall.js +8 -4
  222. package/dist/REPL-CW7AYLVL.js +0 -42
  223. package/dist/acp-VEPJ74LT.js +0 -1357
  224. package/dist/acp-VEPJ74LT.js.map +0 -7
  225. package/dist/agentsValidate-7LH4HTNR.js.map +0 -7
  226. package/dist/ask-3NHFFUQG.js.map +0 -7
  227. package/dist/autoUpdater-ITPIHCOI.js +0 -17
  228. package/dist/chunk-3IN27HA5.js.map +0 -7
  229. package/dist/chunk-4FX3IVPT.js +0 -164
  230. package/dist/chunk-4FX3IVPT.js.map +0 -7
  231. package/dist/chunk-4RTX4AG4.js.map +0 -7
  232. package/dist/chunk-5PDP7R6N.js +0 -515
  233. package/dist/chunk-5PDP7R6N.js.map +0 -7
  234. package/dist/chunk-73WGVYLQ.js.map +0 -7
  235. package/dist/chunk-7M2YN6TU.js.map +0 -7
  236. package/dist/chunk-7U7L4NMD.js.map +0 -7
  237. package/dist/chunk-ABLVTESJ.js.map +0 -7
  238. package/dist/chunk-AFFSCMYS.js.map +0 -7
  239. package/dist/chunk-ARZSBOAO.js.map +0 -7
  240. package/dist/chunk-CIG63V4E.js +0 -72
  241. package/dist/chunk-CIG63V4E.js.map +0 -7
  242. package/dist/chunk-CM3EGTG6.js +0 -1609
  243. package/dist/chunk-CM3EGTG6.js.map +0 -7
  244. package/dist/chunk-DZE5YA7L.js.map +0 -7
  245. package/dist/chunk-E6YNABER.js.map +0 -7
  246. package/dist/chunk-EZXMVTDU.js.map +0 -7
  247. package/dist/chunk-F2SJXUDI.js +0 -148
  248. package/dist/chunk-F2SJXUDI.js.map +0 -7
  249. package/dist/chunk-FC5ZCKBI.js +0 -30167
  250. package/dist/chunk-FC5ZCKBI.js.map +0 -7
  251. package/dist/chunk-HCBELH4J.js +0 -145
  252. package/dist/chunk-HCBELH4J.js.map +0 -7
  253. package/dist/chunk-HN4E4UUQ.js.map +0 -7
  254. package/dist/chunk-IZVMU4S2.js +0 -654
  255. package/dist/chunk-IZVMU4S2.js.map +0 -7
  256. package/dist/chunk-K2CWOTI2.js.map +0 -7
  257. package/dist/chunk-LC4TVOCZ.js +0 -835
  258. package/dist/chunk-LC4TVOCZ.js.map +0 -7
  259. package/dist/chunk-MIW7N2MY.js +0 -2613
  260. package/dist/chunk-MIW7N2MY.js.map +0 -7
  261. package/dist/chunk-MWRSY4X6.js.map +0 -7
  262. package/dist/chunk-ND3XWFO6.js +0 -34
  263. package/dist/chunk-ND3XWFO6.js.map +0 -7
  264. package/dist/chunk-QVLYOPO5.js.map +0 -7
  265. package/dist/chunk-RZWOUA25.js.map +0 -7
  266. package/dist/chunk-S6HRABTA.js.map +0 -7
  267. package/dist/chunk-STSX7GIX.js.map +0 -7
  268. package/dist/chunk-UHYRLID6.js.map +0 -7
  269. package/dist/chunk-UKHTVRJM.js +0 -47
  270. package/dist/chunk-UKHTVRJM.js.map +0 -7
  271. package/dist/chunk-UYXEDKOZ.js +0 -24
  272. package/dist/chunk-UYXEDKOZ.js.map +0 -7
  273. package/dist/chunk-W7GRKO7Q.js.map +0 -7
  274. package/dist/chunk-WVHORZQ5.js +0 -17
  275. package/dist/chunk-WVHORZQ5.js.map +0 -7
  276. package/dist/chunk-WWUWDNWW.js +0 -49
  277. package/dist/chunk-WWUWDNWW.js.map +0 -7
  278. package/dist/chunk-YC6LJCDE.js.map +0 -7
  279. package/dist/chunk-YXYYDIMI.js +0 -2931
  280. package/dist/chunk-YXYYDIMI.js.map +0 -7
  281. package/dist/chunk-ZVDRDPII.js.map +0 -7
  282. package/dist/cli-DOPVY2CW.js.map +0 -7
  283. package/dist/commands-2BF2CJ3A.js +0 -46
  284. package/dist/context-6FXPETYH.js +0 -30
  285. package/dist/costTracker-6SL26FDB.js +0 -19
  286. package/dist/kodeAgentSessionLoad-MITZADPB.js +0 -18
  287. package/dist/kodeAgentSessionResume-GVRWB4WO.js +0 -16
  288. package/dist/kodeAgentStreamJson-NXFN7TXH.js +0 -13
  289. package/dist/kodeAgentStreamJsonSession-UGEZJJEB.js.map +0 -7
  290. package/dist/kodeAgentStructuredStdio-HGWJT7CU.js +0 -10
  291. package/dist/llm-ZUQC4WYM.js.map +0 -7
  292. package/dist/llmLazy-54QQHA54.js +0 -15
  293. package/dist/loader-FYHJQES5.js +0 -28
  294. package/dist/mcp-J332IKT3.js +0 -49
  295. package/dist/mentionProcessor-EE3XFHCJ.js.map +0 -7
  296. package/dist/model-FV3JDJKH.js +0 -30
  297. package/dist/pluginRuntime-6ETCZ2LL.js.map +0 -7
  298. package/dist/pluginValidation-I4YKUWGS.js +0 -17
  299. package/dist/prompts-ZLEKDD77.js +0 -48
  300. package/dist/query-VFRJPBGD.js +0 -50
  301. package/dist/responsesStreaming-AW344PQO.js +0 -10
  302. package/dist/ripgrep-3NTIKQYW.js +0 -17
  303. package/dist/state-P5G6CO5V.js +0 -16
  304. package/dist/theme-3LWP3BG7.js +0 -14
  305. package/dist/toolPermissionSettings-3ROBVTUK.js +0 -18
  306. package/dist/tools-RO7HSSE5.js +0 -47
  307. package/dist/userInput-JSBJRFSK.js +0 -311
  308. package/dist/userInput-JSBJRFSK.js.map +0 -7
  309. package/dist/uuid-QN2CNKKN.js +0 -9
  310. /package/dist/{REPL-CW7AYLVL.js.map → chunks/Doctor-M3J7GRTJ.js.map} +0 -0
  311. /package/dist/{autoUpdater-ITPIHCOI.js.map → chunks/REPL-RQ6LO6S7.js.map} +0 -0
  312. /package/dist/{chunk-JC6NCUG5.js.map → chunks/ResumeConversation-6DMVBEGH.js.map} +0 -0
  313. /package/dist/{commands-2BF2CJ3A.js.map → chunks/agentLoader-FCRG3TFJ.js.map} +0 -0
  314. /package/dist/{config-RUSD6G5Y.js.map → chunks/autoUpdater-CNESBOKO.js.map} +0 -0
  315. /package/dist/{context-6FXPETYH.js.map → chunks/chunk-4CRUCZR4.js.map} +0 -0
  316. /package/dist/{costTracker-6SL26FDB.js.map → chunks/chunk-54KOYG5C.js.map} +0 -0
  317. /package/dist/{customCommands-TOIJFZAL.js.map → chunks/chunk-GCQCAXJZ.js.map} +0 -0
  318. /package/dist/{env-XGKBLU3D.js.map → chunks/chunk-LB6TCPDI.js.map} +0 -0
  319. /package/dist/{kodeAgentSessionId-X6XWQW7B.js.map → chunks/client-SILZNM5N.js.map} +0 -0
  320. /package/dist/{kodeAgentSessionLoad-MITZADPB.js.map → chunks/config-25HRTPSP.js.map} +0 -0
  321. /package/dist/{kodeAgentSessionResume-GVRWB4WO.js.map → chunks/cost-tracker-Z2UZT2J5.js.map} +0 -0
  322. /package/dist/{kodeAgentStreamJson-NXFN7TXH.js.map → chunks/customCommands-TYMYZRG5.js.map} +0 -0
  323. /package/dist/{kodeAgentStructuredStdio-HGWJT7CU.js.map → chunks/engine-MRVF6FK6.js.map} +0 -0
  324. /package/dist/{kodeHooks-QWM36A3D.js.map → chunks/env-TJ5NOBEB.js.map} +0 -0
  325. /package/dist/{llmLazy-54QQHA54.js.map → chunks/kodeAgentSessionId-VTNISJ2L.js.map} +0 -0
  326. /package/dist/{loader-FYHJQES5.js.map → chunks/kodeAgentSessionLoad-YB2RKBGJ.js.map} +0 -0
  327. /package/dist/{mcp-J332IKT3.js.map → chunks/kodeAgentSessionResume-DZSIVKVA.js.map} +0 -0
  328. /package/dist/{messages-EOYQKPGM.js.map → chunks/kodeAgentStreamJson-X5PLS2S6.js.map} +0 -0
  329. /package/dist/{model-FV3JDJKH.js.map → chunks/kodeHooks-RVKYRJHG.js.map} +0 -0
  330. /package/dist/{openai-RRCWW33N.js.map → chunks/llmLazy-ZUSSE3ZA.js.map} +0 -0
  331. /package/dist/{outputStyles-62Q3VH2J.js.map → chunks/messages-EEWWLPHN.js.map} +0 -0
  332. /package/dist/{pluginValidation-I4YKUWGS.js.map → chunks/model-5TIEKQPD.js.map} +0 -0
  333. /package/dist/{prompts-ZLEKDD77.js.map → chunks/openai-XXK3YZG4.js.map} +0 -0
  334. /package/dist/{query-VFRJPBGD.js.map → chunks/outputStyles-FAJTXN2A.js.map} +0 -0
  335. /package/dist/{responsesStreaming-AW344PQO.js.map → chunks/permissions-HO7INPWM.js.map} +0 -0
  336. /package/dist/{ripgrep-3NTIKQYW.js.map → chunks/pluginValidation-DAM7WRTC.js.map} +0 -0
  337. /package/dist/{skillMarketplace-3RXQBVOL.js.map → chunks/registry-XYJXMOA5.js.map} +0 -0
  338. /package/dist/{state-P5G6CO5V.js.map → chunks/responsesStreaming-JNGE2P3D.js.map} +0 -0
  339. /package/dist/{theme-3LWP3BG7.js.map → chunks/server-REXXF5IK.js.map} +0 -0
  340. /package/dist/{toolPermissionContext-65L65VEZ.js.map → chunks/skillMarketplace-N4HVHNST.js.map} +0 -0
  341. /package/dist/{toolPermissionSettings-3ROBVTUK.js.map → chunks/src-OROQIWP3.js.map} +0 -0
  342. /package/dist/{tools-RO7HSSE5.js.map → chunks/theme-YBJUIMWK.js.map} +0 -0
  343. /package/dist/{uuid-QN2CNKKN.js.map → chunks/toolPermissionContext-MOCTRR7N.js.map} +0 -0
@@ -1,20 +1,11 @@
1
- import { createRequire as __kodeCreateRequire } from "node:module";
2
- const require = __kodeCreateRequire(import.meta.url);
3
1
  import {
4
2
  SESSION_ID
5
- } from "./chunk-YXYYDIMI.js";
3
+ } from "./chunk-3OEJVB5A.js";
6
4
 
7
- // src/utils/log/debugLogger.ts
8
- import { existsSync, mkdirSync, appendFileSync } from "fs";
9
- import { join } from "path";
10
- import { homedir } from "os";
11
- import { format } from "node:util";
12
- import chalk from "chalk";
13
- var isDebugMode = () => process.argv.includes("--debug-verbose") || process.argv.includes("--mcp-debug") || process.argv.some(
14
- (arg) => arg === "--debug" || arg === "-d" || arg.startsWith("--debug=")
15
- );
16
- var isVerboseMode = () => process.argv.includes("--verbose");
17
- var isDebugVerboseMode = () => process.argv.includes("--debug-verbose");
5
+ // packages/core/src/logging/logger.ts
6
+ import chalk2 from "chalk";
7
+
8
+ // packages/core/src/logging/levels.ts
18
9
  var TERMINAL_LOG_LEVELS = /* @__PURE__ */ new Set([
19
10
  "ERROR" /* ERROR */,
20
11
  "WARN" /* WARN */,
@@ -30,54 +21,19 @@ var DEBUG_VERBOSE_TERMINAL_LOG_LEVELS = /* @__PURE__ */ new Set([
30
21
  "INFO" /* INFO */,
31
22
  "REMINDER" /* REMINDER */
32
23
  ]);
33
- var STARTUP_TIMESTAMP = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
34
- var REQUEST_START_TIME = Date.now();
35
- var KODE_DIR = join(homedir(), ".kode");
36
- function getProjectDir(cwd) {
37
- return cwd.replace(/[^a-zA-Z0-9]/g, "-");
38
- }
39
- var DEBUG_PATHS = {
40
- base: () => join(KODE_DIR, getProjectDir(process.cwd()), "debug"),
41
- detailed: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-detailed.log`),
42
- flow: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-flow.log`),
43
- api: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-api.log`),
44
- state: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-state.log`)
45
- };
46
- function ensureDebugDir() {
47
- const debugDir = DEBUG_PATHS.base();
48
- if (!existsSync(debugDir)) {
49
- mkdirSync(debugDir, { recursive: true });
50
- }
51
- }
52
- var currentRequest = null;
53
- function terminalLog(...args) {
54
- process.stderr.write(`${format(...args)}
55
- `);
56
- }
57
- function writeToFile(filePath, entry) {
58
- if (!isDebugMode()) return;
59
- try {
60
- ensureDebugDir();
61
- const logLine = JSON.stringify(
62
- {
63
- ...entry,
64
- sessionId: SESSION_ID,
65
- pid: process.pid,
66
- uptime: Date.now() - REQUEST_START_TIME
67
- },
68
- null,
69
- 2
70
- ) + ",\n";
71
- appendFileSync(filePath, logLine);
72
- } catch (error) {
73
- }
74
- }
24
+
25
+ // packages/core/src/logging/dedupe.ts
75
26
  var recentLogs = /* @__PURE__ */ new Map();
76
27
  var LOG_DEDUPE_WINDOW_MS = 5e3;
28
+ function getFileForDedupe(data) {
29
+ if (!data || typeof data !== "object") return "";
30
+ const record = data;
31
+ const file = record.file;
32
+ return typeof file === "string" ? file : "";
33
+ }
77
34
  function getDedupeKey(level, phase, data) {
78
35
  if (phase.startsWith("CONFIG_")) {
79
- const file = data?.file || "";
80
- return `${level}:${phase}:${file}`;
36
+ return `${level}:${phase}:${getFileForDedupe(data)}`;
81
37
  }
82
38
  return `${level}:${phase}`;
83
39
  }
@@ -96,18 +52,28 @@ function shouldLogWithDedupe(level, phase, data) {
96
52
  }
97
53
  return false;
98
54
  }
55
+
56
+ // packages/core/src/logging/formatters.ts
57
+ import chalk from "chalk";
58
+ function asMessageRecord(value) {
59
+ if (!value || typeof value !== "object") return null;
60
+ return value;
61
+ }
99
62
  function formatMessages(messages) {
100
63
  if (Array.isArray(messages)) {
101
64
  const recentMessages = messages.slice(-5);
102
65
  return recentMessages.map((msg, index) => {
103
- const role = msg.role || "unknown";
66
+ const record = asMessageRecord(msg);
67
+ const roleRaw = record?.role;
68
+ const role = typeof roleRaw === "string" ? roleRaw : "unknown";
69
+ const contentRaw = record?.content;
104
70
  let content = "";
105
- if (typeof msg.content === "string") {
106
- content = msg.content.length > 300 ? msg.content.substring(0, 300) + "..." : msg.content;
107
- } else if (typeof msg.content === "object") {
71
+ if (typeof contentRaw === "string") {
72
+ content = contentRaw.length > 300 ? contentRaw.substring(0, 300) + "..." : contentRaw;
73
+ } else if (typeof contentRaw === "object") {
108
74
  content = "[complex_content]";
109
75
  } else {
110
- content = String(msg.content || "");
76
+ content = String(contentRaw ?? "");
111
77
  }
112
78
  const totalIndex = messages.length - recentMessages.length + index;
113
79
  return `[${totalIndex}] ${chalk.dim(role)}: ${content}`;
@@ -127,11 +93,93 @@ function formatMessages(messages) {
127
93
  }
128
94
  return typeof messages === "string" ? messages : JSON.stringify(messages);
129
95
  }
96
+ function formatDataForTerminal(data) {
97
+ if (typeof data === "object" && data !== null) {
98
+ const record = data;
99
+ if ("messages" in record) {
100
+ const formattedMessages = formatMessages(record.messages);
101
+ return JSON.stringify(
102
+ {
103
+ ...record,
104
+ messages: `
105
+ ${formattedMessages}`
106
+ },
107
+ null,
108
+ 2
109
+ );
110
+ }
111
+ return JSON.stringify(data, null, 2);
112
+ }
113
+ return typeof data === "string" ? data : JSON.stringify(data);
114
+ }
115
+
116
+ // packages/core/src/logging/mode.ts
117
+ function isDebugMode() {
118
+ return process.argv.includes("--debug-verbose") || process.argv.includes("--mcp-debug") || process.argv.some(
119
+ (arg) => arg === "--debug" || arg === "-d" || arg.startsWith("--debug=")
120
+ );
121
+ }
122
+ function isVerboseMode() {
123
+ return process.argv.includes("--verbose");
124
+ }
125
+ function isDebugVerboseMode() {
126
+ return process.argv.includes("--debug-verbose");
127
+ }
128
+
129
+ // packages/core/src/logging/terminal.ts
130
+ import { format } from "node:util";
131
+ function terminalLog(...args) {
132
+ process.stderr.write(`${format(...args)}
133
+ `);
134
+ }
135
+
136
+ // packages/core/src/logging/transports.ts
137
+ import { appendFileSync, existsSync, mkdirSync } from "fs";
138
+ import { homedir } from "os";
139
+ import { join } from "path";
140
+ var STARTUP_TIMESTAMP = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
141
+ var REQUEST_START_TIME = Date.now();
142
+ var KODE_DIR = join(homedir(), ".kode");
143
+ function getProjectDir(cwd) {
144
+ return cwd.replace(/[^a-zA-Z0-9]/g, "-");
145
+ }
146
+ var DEBUG_PATHS = {
147
+ base: () => join(KODE_DIR, getProjectDir(process.cwd()), "debug"),
148
+ detailed: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-detailed.log`),
149
+ flow: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-flow.log`),
150
+ api: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-api.log`),
151
+ state: () => join(DEBUG_PATHS.base(), `${STARTUP_TIMESTAMP}-state.log`)
152
+ };
153
+ function ensureDebugDir() {
154
+ const debugDir = DEBUG_PATHS.base();
155
+ if (!existsSync(debugDir)) {
156
+ mkdirSync(debugDir, { recursive: true });
157
+ }
158
+ }
159
+ function writeToFile(filePath, entry) {
160
+ if (!isDebugMode()) return;
161
+ try {
162
+ ensureDebugDir();
163
+ const logLine = JSON.stringify(
164
+ {
165
+ ...entry,
166
+ sessionId: SESSION_ID,
167
+ pid: process.pid,
168
+ uptime: Date.now() - REQUEST_START_TIME
169
+ },
170
+ null,
171
+ 2
172
+ ) + ",\n";
173
+ appendFileSync(filePath, logLine);
174
+ } catch {
175
+ }
176
+ }
177
+
178
+ // packages/core/src/logging/logger.ts
179
+ var currentRequest = null;
130
180
  function shouldShowInTerminal(level) {
131
181
  if (!isDebugMode()) return false;
132
- if (isDebugVerboseMode()) {
133
- return DEBUG_VERBOSE_TERMINAL_LOG_LEVELS.has(level);
134
- }
182
+ if (isDebugVerboseMode()) return DEBUG_VERBOSE_TERMINAL_LOG_LEVELS.has(level);
135
183
  return TERMINAL_LOG_LEVELS.has(level);
136
184
  }
137
185
  function logToTerminal(entry) {
@@ -139,70 +187,50 @@ function logToTerminal(entry) {
139
187
  const { level, phase, data, requestId, elapsed } = entry;
140
188
  const timestamp = (/* @__PURE__ */ new Date()).toISOString().slice(11, 23);
141
189
  let prefix = "";
142
- let color = chalk.gray;
190
+ let color = chalk2.gray;
143
191
  switch (level) {
144
192
  case "FLOW" /* FLOW */:
145
193
  prefix = "\u{1F504}";
146
- color = chalk.cyan;
194
+ color = chalk2.cyan;
147
195
  break;
148
196
  case "API" /* API */:
149
197
  prefix = "\u{1F310}";
150
- color = chalk.yellow;
198
+ color = chalk2.yellow;
151
199
  break;
152
200
  case "STATE" /* STATE */:
153
201
  prefix = "\u{1F4CA}";
154
- color = chalk.blue;
202
+ color = chalk2.blue;
155
203
  break;
156
204
  case "ERROR" /* ERROR */:
157
205
  prefix = "\u274C";
158
- color = chalk.red;
206
+ color = chalk2.red;
159
207
  break;
160
208
  case "WARN" /* WARN */:
161
209
  prefix = "\u26A0\uFE0F";
162
- color = chalk.yellow;
210
+ color = chalk2.yellow;
163
211
  break;
164
212
  case "INFO" /* INFO */:
165
213
  prefix = "\u2139\uFE0F";
166
- color = chalk.green;
214
+ color = chalk2.green;
167
215
  break;
168
216
  case "TRACE" /* TRACE */:
169
217
  prefix = "\u{1F4C8}";
170
- color = chalk.magenta;
218
+ color = chalk2.magenta;
171
219
  break;
172
220
  default:
173
221
  prefix = "\u{1F50D}";
174
- color = chalk.gray;
175
- }
176
- const reqId = requestId ? chalk.dim(`[${requestId}]`) : "";
177
- const elapsedStr = elapsed !== void 0 ? chalk.dim(`+${elapsed}ms`) : "";
178
- let dataStr = "";
179
- if (typeof data === "object" && data !== null) {
180
- if (data.messages) {
181
- const formattedMessages = formatMessages(data.messages);
182
- dataStr = JSON.stringify(
183
- {
184
- ...data,
185
- messages: `
186
- ${formattedMessages}`
187
- },
188
- null,
189
- 2
190
- );
191
- } else {
192
- dataStr = JSON.stringify(data, null, 2);
193
- }
194
- } else {
195
- dataStr = typeof data === "string" ? data : JSON.stringify(data);
222
+ color = chalk2.gray;
196
223
  }
224
+ const reqId = requestId ? chalk2.dim(`[${requestId}]`) : "";
225
+ const elapsedStr = elapsed !== void 0 ? chalk2.dim(`+${elapsed}ms`) : "";
226
+ const dataStr = formatDataForTerminal(data);
197
227
  terminalLog(
198
228
  `${color(`[${timestamp}]`)} ${prefix} ${color(phase)} ${reqId} ${dataStr} ${elapsedStr}`
199
229
  );
200
230
  }
201
231
  function debugLog(level, phase, data, requestId) {
202
232
  if (!isDebugMode()) return;
203
- if (!shouldLogWithDedupe(level, phase, data)) {
204
- return;
205
- }
233
+ if (!shouldLogWithDedupe(level, phase, data)) return;
206
234
  const entry = {
207
235
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
208
236
  level,
@@ -247,11 +275,255 @@ function markPhase(phase, data) {
247
275
  data
248
276
  });
249
277
  }
278
+ function initDebugLogger() {
279
+ if (!isDebugMode()) return;
280
+ debug.info("DEBUG_LOGGER_INIT", {
281
+ startupTimestamp: STARTUP_TIMESTAMP,
282
+ sessionId: SESSION_ID,
283
+ debugPaths: {
284
+ detailed: DEBUG_PATHS.detailed(),
285
+ flow: DEBUG_PATHS.flow(),
286
+ api: DEBUG_PATHS.api(),
287
+ state: DEBUG_PATHS.state()
288
+ }
289
+ });
290
+ const terminalLevels = isDebugVerboseMode() ? Array.from(DEBUG_VERBOSE_TERMINAL_LOG_LEVELS).join(", ") : Array.from(TERMINAL_LOG_LEVELS).join(", ");
291
+ terminalLog(
292
+ chalk2.dim(`[DEBUG] Terminal output filtered to: ${terminalLevels}`)
293
+ );
294
+ terminalLog(
295
+ chalk2.dim(`[DEBUG] Complete logs saved to: ${DEBUG_PATHS.base()}`)
296
+ );
297
+ if (!isDebugVerboseMode()) {
298
+ terminalLog(
299
+ chalk2.dim(
300
+ `[DEBUG] Use --debug-verbose for detailed system logs (FLOW, API, STATE)`
301
+ )
302
+ );
303
+ }
304
+ }
305
+
306
+ // packages/core/src/logging/diagnosis.ts
307
+ import chalk3 from "chalk";
308
+ function diagnoseError(error, context) {
309
+ const errorMessage = error instanceof Error ? error.message : String(error);
310
+ const errorStack = error instanceof Error ? error.stack : void 0;
311
+ if (errorMessage.includes("aborted") || errorMessage.includes("AbortController")) {
312
+ return {
313
+ errorType: "REQUEST_ABORTED",
314
+ category: "SYSTEM",
315
+ severity: "MEDIUM",
316
+ description: "Request was aborted, often due to user cancellation or timeout",
317
+ suggestions: [
318
+ "\u68C0\u67E5\u662F\u5426\u6309\u4E0B\u4E86 ESC \u952E\u53D6\u6D88\u8BF7\u6C42",
319
+ "\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u662F\u5426\u7A33\u5B9A",
320
+ "\u9A8C\u8BC1 AbortController \u72B6\u6001: isActive \u548C signal.aborted \u5E94\u8BE5\u4E00\u81F4",
321
+ "\u67E5\u770B\u662F\u5426\u6709\u91CD\u590D\u7684\u8BF7\u6C42\u5BFC\u81F4\u51B2\u7A81"
322
+ ],
323
+ debugSteps: [
324
+ "\u4F7F\u7528 --debug-verbose \u6A21\u5F0F\u67E5\u770B\u8BE6\u7EC6\u7684\u8BF7\u6C42\u6D41\u7A0B",
325
+ "\u68C0\u67E5 debug \u65E5\u5FD7\u4E2D\u7684 BINARY_FEEDBACK_* \u4E8B\u4EF6",
326
+ "\u9A8C\u8BC1 REQUEST_START \u548C REQUEST_END \u65E5\u5FD7\u914D\u5BF9",
327
+ "\u67E5\u770B QUERY_ABORTED \u4E8B\u4EF6\u7684\u89E6\u53D1\u539F\u56E0"
328
+ ]
329
+ };
330
+ }
331
+ if (errorMessage.includes("api-key") || errorMessage.includes("authentication") || errorMessage.includes("401")) {
332
+ return {
333
+ errorType: "API_AUTHENTICATION",
334
+ category: "API",
335
+ severity: "HIGH",
336
+ description: "API authentication failed - invalid or missing API key",
337
+ suggestions: [
338
+ "\u8FD0\u884C /login \u91CD\u65B0\u8BBE\u7F6E API \u5BC6\u94A5",
339
+ "\u68C0\u67E5 ~/.kode/ \u914D\u7F6E\u6587\u4EF6\u4E2D\u7684 API \u5BC6\u94A5",
340
+ "\u9A8C\u8BC1 API \u5BC6\u94A5\u662F\u5426\u5DF2\u8FC7\u671F\u6216\u88AB\u64A4\u9500",
341
+ "\u786E\u8BA4\u4F7F\u7528\u7684 provider \u8BBE\u7F6E\u6B63\u786E (anthropic/opendev/bigdream)"
342
+ ],
343
+ debugSteps: [
344
+ "\u68C0\u67E5 CONFIG_LOAD \u65E5\u5FD7\u4E2D\u7684 provider \u548C API \u5BC6\u94A5\u72B6\u6001",
345
+ "\u8FD0\u884C kode doctor \u68C0\u67E5\u7CFB\u7EDF\u5065\u5EB7\u72B6\u6001",
346
+ "\u67E5\u770B API_ERROR \u65E5\u5FD7\u4E86\u89E3\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F",
347
+ "\u4F7F\u7528 kode config \u547D\u4EE4\u67E5\u770B\u5F53\u524D\u914D\u7F6E"
348
+ ]
349
+ };
350
+ }
351
+ if (errorMessage.includes("ECONNREFUSED") || errorMessage.includes("ENOTFOUND") || errorMessage.includes("timeout")) {
352
+ return {
353
+ errorType: "NETWORK_CONNECTION",
354
+ category: "NETWORK",
355
+ severity: "HIGH",
356
+ description: "Network connection failed - unable to reach API endpoint",
357
+ suggestions: [
358
+ "\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u662F\u5426\u6B63\u5E38",
359
+ "\u786E\u8BA4\u9632\u706B\u5899\u6CA1\u6709\u963B\u6B62\u76F8\u5173\u7AEF\u53E3",
360
+ "\u68C0\u67E5 proxy \u8BBE\u7F6E\u662F\u5426\u6B63\u786E",
361
+ "\u5C1D\u8BD5\u5207\u6362\u5230\u4E0D\u540C\u7684\u7F51\u7EDC\u73AF\u5883",
362
+ "\u9A8C\u8BC1 baseURL \u914D\u7F6E\u662F\u5426\u6B63\u786E"
363
+ ],
364
+ debugSteps: [
365
+ "\u68C0\u67E5 API_REQUEST_START \u548C\u76F8\u5173\u7F51\u7EDC\u65E5\u5FD7",
366
+ "\u67E5\u770B LLM_REQUEST_ERROR \u4E2D\u7684\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F",
367
+ "\u4F7F\u7528 ping \u6216 curl \u6D4B\u8BD5 API \u7AEF\u70B9\u8FDE\u901A\u6027",
368
+ "\u68C0\u67E5\u4F01\u4E1A\u7F51\u7EDC\u662F\u5426\u9700\u8981\u4EE3\u7406\u8BBE\u7F6E"
369
+ ]
370
+ };
371
+ }
372
+ if (errorMessage.includes("permission") || errorMessage.includes("EACCES") || errorMessage.includes("denied")) {
373
+ return {
374
+ errorType: "PERMISSION_DENIED",
375
+ category: "PERMISSION",
376
+ severity: "MEDIUM",
377
+ description: "Permission denied - insufficient access rights",
378
+ suggestions: [
379
+ "\u68C0\u67E5\u6587\u4EF6\u548C\u76EE\u5F55\u7684\u8BFB\u5199\u6743\u9650",
380
+ "\u786E\u8BA4\u5F53\u524D\u7528\u6237\u6709\u8DB3\u591F\u7684\u7CFB\u7EDF\u6743\u9650",
381
+ "\u67E5\u770B\u662F\u5426\u9700\u8981\u7BA1\u7406\u5458\u6743\u9650\u8FD0\u884C",
382
+ "\u68C0\u67E5\u5DE5\u5177\u6743\u9650\u8BBE\u7F6E\u662F\u5426\u6B63\u786E\u914D\u7F6E"
383
+ ],
384
+ debugSteps: [
385
+ "\u67E5\u770B PERMISSION_* \u65E5\u5FD7\u4E86\u89E3\u6743\u9650\u68C0\u67E5\u8FC7\u7A0B",
386
+ "\u68C0\u67E5\u6587\u4EF6\u7CFB\u7EDF\u6743\u9650: ls -la",
387
+ "\u9A8C\u8BC1\u5DE5\u5177\u5BA1\u6279\u72B6\u6001",
388
+ "\u67E5\u770B TOOL_* \u76F8\u5173\u7684\u8C03\u8BD5\u65E5\u5FD7"
389
+ ]
390
+ };
391
+ }
392
+ if (errorMessage.includes("substring is not a function") || errorMessage.includes("content")) {
393
+ return {
394
+ errorType: "RESPONSE_FORMAT",
395
+ category: "API",
396
+ severity: "MEDIUM",
397
+ description: "LLM response format mismatch between different providers",
398
+ suggestions: [
399
+ "\u68C0\u67E5\u5F53\u524D\u4F7F\u7528\u7684 provider \u662F\u5426\u4E0E\u671F\u671B\u4E00\u81F4",
400
+ "\u9A8C\u8BC1\u54CD\u5E94\u683C\u5F0F\u5904\u7406\u903B\u8F91",
401
+ "\u786E\u8BA4\u4E0D\u540C provider \u7684\u54CD\u5E94\u683C\u5F0F\u5DEE\u5F02",
402
+ "\u68C0\u67E5\u662F\u5426\u9700\u8981\u66F4\u65B0\u54CD\u5E94\u89E3\u6790\u4EE3\u7801"
403
+ ],
404
+ debugSteps: [
405
+ "\u67E5\u770B LLM_CALL_DEBUG \u4E2D\u7684\u54CD\u5E94\u683C\u5F0F",
406
+ "\u68C0\u67E5 provider \u914D\u7F6E\u548C\u5B9E\u9645\u4F7F\u7528\u7684 API",
407
+ "\u5BF9\u6BD4 Anthropic \u548C OpenAI \u54CD\u5E94\u683C\u5F0F\u5DEE\u5F02",
408
+ "\u9A8C\u8BC1 logLLMInteraction \u51FD\u6570\u7684\u683C\u5F0F\u5904\u7406"
409
+ ]
410
+ };
411
+ }
412
+ if (errorMessage.includes("too long") || errorMessage.includes("context") || errorMessage.includes("token")) {
413
+ return {
414
+ errorType: "CONTEXT_OVERFLOW",
415
+ category: "SYSTEM",
416
+ severity: "MEDIUM",
417
+ description: "Context window exceeded - conversation too long",
418
+ suggestions: [
419
+ "\u8FD0\u884C /compact \u624B\u52A8\u538B\u7F29\u5BF9\u8BDD\u5386\u53F2",
420
+ "\u68C0\u67E5\u81EA\u52A8\u538B\u7F29\u8BBE\u7F6E\u662F\u5426\u6B63\u786E\u914D\u7F6E",
421
+ "\u51CF\u5C11\u5355\u6B21\u8F93\u5165\u7684\u5185\u5BB9\u957F\u5EA6",
422
+ "\u6E05\u7406\u4E0D\u5FC5\u8981\u7684\u4E0A\u4E0B\u6587\u4FE1\u606F"
423
+ ],
424
+ debugSteps: [
425
+ "\u67E5\u770B AUTO_COMPACT_* \u65E5\u5FD7\u68C0\u67E5\u538B\u7F29\u89E6\u53D1",
426
+ "\u68C0\u67E5 token \u4F7F\u7528\u91CF\u548C\u9608\u503C",
427
+ "\u67E5\u770B CONTEXT_COMPRESSION \u76F8\u5173\u65E5\u5FD7",
428
+ "\u9A8C\u8BC1\u6A21\u578B\u7684\u6700\u5927 token \u9650\u5236"
429
+ ]
430
+ };
431
+ }
432
+ if (errorMessage.includes("config") || errorMessage.includes("undefined") && context?.configRelated) {
433
+ return {
434
+ errorType: "CONFIGURATION",
435
+ category: "CONFIG",
436
+ severity: "MEDIUM",
437
+ description: "Configuration error - missing or invalid settings",
438
+ suggestions: [
439
+ "\u8FD0\u884C kode config \u68C0\u67E5\u914D\u7F6E\u8BBE\u7F6E",
440
+ "\u5220\u9664\u635F\u574F\u7684\u914D\u7F6E\u6587\u4EF6\u91CD\u65B0\u521D\u59CB\u5316",
441
+ "\u68C0\u67E5 JSON \u914D\u7F6E\u6587\u4EF6\u8BED\u6CD5\u662F\u5426\u6B63\u786E",
442
+ "\u9A8C\u8BC1\u73AF\u5883\u53D8\u91CF\u8BBE\u7F6E"
443
+ ],
444
+ debugSteps: [
445
+ "\u67E5\u770B CONFIG_LOAD \u548C CONFIG_SAVE \u65E5\u5FD7",
446
+ "\u68C0\u67E5\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84\u548C\u6743\u9650",
447
+ "\u9A8C\u8BC1 JSON \u683C\u5F0F: cat ~/.kode/config.json | jq",
448
+ "\u67E5\u770B\u914D\u7F6E\u7F13\u5B58\u76F8\u5173\u7684\u8C03\u8BD5\u4FE1\u606F"
449
+ ]
450
+ };
451
+ }
452
+ return {
453
+ errorType: "UNKNOWN",
454
+ category: "SYSTEM",
455
+ severity: "MEDIUM",
456
+ description: `Unexpected error: ${errorMessage}`,
457
+ suggestions: [
458
+ "\u91CD\u65B0\u542F\u52A8\u5E94\u7528\u7A0B\u5E8F",
459
+ "\u68C0\u67E5\u7CFB\u7EDF\u8D44\u6E90\u662F\u5426\u5145\u8DB3",
460
+ "\u67E5\u770B\u5B8C\u6574\u7684\u9519\u8BEF\u65E5\u5FD7\u83B7\u53D6\u66F4\u591A\u4FE1\u606F",
461
+ "\u5982\u679C\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u62A5\u544A\u6B64\u9519\u8BEF"
462
+ ],
463
+ debugSteps: [
464
+ "\u4F7F\u7528 --debug-verbose \u83B7\u53D6\u8BE6\u7EC6\u65E5\u5FD7",
465
+ "\u68C0\u67E5 error.log \u4E2D\u7684\u5B8C\u6574\u9519\u8BEF\u4FE1\u606F",
466
+ "\u67E5\u770B\u7CFB\u7EDF\u8D44\u6E90\u4F7F\u7528\u60C5\u51B5",
467
+ "\u6536\u96C6\u91CD\u73B0\u6B65\u9AA4\u548C\u73AF\u5883\u4FE1\u606F"
468
+ ],
469
+ relatedLogs: errorStack ? [errorStack] : void 0
470
+ };
471
+ }
472
+ function logErrorWithDiagnosis(error, context, requestId) {
473
+ if (!isDebugMode()) return;
474
+ const diagnosis = diagnoseError(error, context);
475
+ const errorMessage = error instanceof Error ? error.message : String(error);
476
+ debug.error(
477
+ "ERROR_OCCURRED",
478
+ {
479
+ error: errorMessage,
480
+ errorType: diagnosis.errorType,
481
+ category: diagnosis.category,
482
+ severity: diagnosis.severity,
483
+ context
484
+ },
485
+ requestId
486
+ );
487
+ terminalLog("\n" + chalk3.red("\u{1F6A8} ERROR DIAGNOSIS"));
488
+ terminalLog(chalk3.gray("\u2501".repeat(60)));
489
+ terminalLog(chalk3.red(`\u274C ${diagnosis.errorType}`));
490
+ terminalLog(
491
+ chalk3.dim(
492
+ `Category: ${diagnosis.category} | Severity: ${diagnosis.severity}`
493
+ )
494
+ );
495
+ terminalLog(`
496
+ ${diagnosis.description}`);
497
+ terminalLog(chalk3.yellow("\n\u{1F4A1} Recovery Suggestions:"));
498
+ diagnosis.suggestions.forEach((suggestion, index) => {
499
+ terminalLog(` ${index + 1}. ${suggestion}`);
500
+ });
501
+ terminalLog(chalk3.cyan("\n\u{1F50D} Debug Steps:"));
502
+ diagnosis.debugSteps.forEach((step, index) => {
503
+ terminalLog(` ${index + 1}. ${step}`);
504
+ });
505
+ if (diagnosis.relatedLogs && diagnosis.relatedLogs.length > 0) {
506
+ terminalLog(chalk3.magenta("\n\u{1F4CB} Related Information:"));
507
+ diagnosis.relatedLogs.forEach((log) => {
508
+ const truncatedLog = log.length > 200 ? log.substring(0, 200) + "..." : log;
509
+ terminalLog(chalk3.dim(` ${truncatedLog}`));
510
+ });
511
+ }
512
+ const debugPath = DEBUG_PATHS.base();
513
+ terminalLog(chalk3.gray(`
514
+ \u{1F4C1} Complete logs: ${debugPath}`));
515
+ terminalLog(chalk3.gray("\u2501".repeat(60)));
516
+ }
517
+
518
+ // packages/core/src/logging/apiError.ts
519
+ import { appendFileSync as appendFileSync2, existsSync as existsSync2, mkdirSync as mkdirSync2 } from "fs";
520
+ import { join as join2 } from "path";
521
+ import chalk4 from "chalk";
250
522
  function logAPIError(context) {
251
- const errorDir = join(KODE_DIR, "logs", "error", "api");
252
- if (!existsSync(errorDir)) {
523
+ const errorDir = join2(KODE_DIR, "logs", "error", "api");
524
+ if (!existsSync2(errorDir)) {
253
525
  try {
254
- mkdirSync(errorDir, { recursive: true });
526
+ mkdirSync2(errorDir, { recursive: true });
255
527
  } catch (err) {
256
528
  terminalLog("Failed to create error log directory:", err);
257
529
  return;
@@ -260,7 +532,7 @@ function logAPIError(context) {
260
532
  const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
261
533
  const sanitizedModel = context.model.replace(/[^a-zA-Z0-9-_]/g, "_");
262
534
  const filename = `${sanitizedModel}_${timestamp}.log`;
263
- const filepath = join(errorDir, filename);
535
+ const filepath = join2(errorDir, filename);
264
536
  const fullLogContent = {
265
537
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
266
538
  sessionId: SESSION_ID,
@@ -279,8 +551,8 @@ function logAPIError(context) {
279
551
  }
280
552
  };
281
553
  try {
282
- appendFileSync(filepath, JSON.stringify(fullLogContent, null, 2) + "\n");
283
- appendFileSync(filepath, "=".repeat(80) + "\n\n");
554
+ appendFileSync2(filepath, JSON.stringify(fullLogContent, null, 2) + "\n");
555
+ appendFileSync2(filepath, "=".repeat(80) + "\n\n");
284
556
  } catch (err) {
285
557
  terminalLog("Failed to write API error log:", err);
286
558
  }
@@ -295,11 +567,11 @@ function logAPIError(context) {
295
567
  }
296
568
  if (isVerboseMode() || isDebugVerboseMode()) {
297
569
  terminalLog();
298
- terminalLog(chalk.red("\u2501".repeat(60)));
299
- terminalLog(chalk.red.bold("\u26A0\uFE0F API Error"));
300
- terminalLog(chalk.red("\u2501".repeat(60)));
301
- terminalLog(chalk.white(" Model: ") + chalk.yellow(context.model));
302
- terminalLog(chalk.white(" Status: ") + chalk.red(context.status));
570
+ terminalLog(chalk4.red("\u2501".repeat(60)));
571
+ terminalLog(chalk4.red.bold("\u26A0\uFE0F API Error"));
572
+ terminalLog(chalk4.red("\u2501".repeat(60)));
573
+ terminalLog(chalk4.white(" Model: ") + chalk4.yellow(context.model));
574
+ terminalLog(chalk4.white(" Status: ") + chalk4.red(context.status));
303
575
  let errorMessage = "Unknown error";
304
576
  if (typeof context.error === "string") {
305
577
  errorMessage = context.error;
@@ -308,27 +580,36 @@ function logAPIError(context) {
308
580
  } else if (context.error?.error?.message) {
309
581
  errorMessage = context.error.error.message;
310
582
  }
311
- terminalLog(chalk.white(" Error: ") + chalk.red(errorMessage));
583
+ terminalLog(chalk4.white(" Error: ") + chalk4.red(errorMessage));
312
584
  if (context.response) {
313
585
  terminalLog();
314
- terminalLog(chalk.gray(" Response:"));
586
+ terminalLog(chalk4.gray(" Response:"));
315
587
  const responseStr = typeof context.response === "string" ? context.response : JSON.stringify(context.response, null, 2);
316
588
  responseStr.split("\n").forEach((line) => {
317
- terminalLog(chalk.gray(" " + line));
589
+ terminalLog(chalk4.gray(" " + line));
318
590
  });
319
591
  }
320
592
  terminalLog();
321
- terminalLog(chalk.dim(` \u{1F4C1} Full log: ${filepath}`));
322
- terminalLog(chalk.red("\u2501".repeat(60)));
593
+ terminalLog(chalk4.dim(` \u{1F4C1} Full log: ${filepath}`));
594
+ terminalLog(chalk4.red("\u2501".repeat(60)));
323
595
  terminalLog();
324
596
  }
325
597
  }
598
+
599
+ // packages/core/src/logging/llm.ts
600
+ import chalk5 from "chalk";
601
+ var ROLE_COLORS = {
602
+ green: chalk5.green,
603
+ blue: chalk5.blue,
604
+ yellow: chalk5.yellow,
605
+ gray: chalk5.gray
606
+ };
326
607
  function logLLMInteraction(context) {
327
608
  if (!isDebugMode()) return;
328
609
  const duration = context.timing.end - context.timing.start;
329
- terminalLog("\n" + chalk.blue("\u{1F9E0} LLM CALL DEBUG"));
330
- terminalLog(chalk.gray("\u2501".repeat(60)));
331
- terminalLog(chalk.yellow("\u{1F4CA} Context Overview:"));
610
+ terminalLog("\n" + chalk5.blue("\u{1F9E0} LLM CALL DEBUG"));
611
+ terminalLog(chalk5.gray("\u2501".repeat(60)));
612
+ terminalLog(chalk5.yellow("\u{1F4CA} Context Overview:"));
332
613
  terminalLog(` Messages Count: ${context.messages.length}`);
333
614
  terminalLog(` System Prompt Length: ${context.systemPrompt.length} chars`);
334
615
  terminalLog(` Duration: ${duration.toFixed(0)}ms`);
@@ -338,7 +619,7 @@ function logLLMInteraction(context) {
338
619
  );
339
620
  }
340
621
  const apiLabel = context.apiFormat ? ` (${context.apiFormat.toUpperCase()})` : "";
341
- terminalLog(chalk.cyan(`
622
+ terminalLog(chalk5.cyan(`
342
623
  \u{1F4AC} Real API Messages${apiLabel} (last 10):`));
343
624
  const recentMessages = context.messages.slice(-10);
344
625
  recentMessages.forEach((msg, index) => {
@@ -378,12 +659,13 @@ function logLLMInteraction(context) {
378
659
  }
379
660
  if (isReminder) {
380
661
  terminalLog(
381
- ` [${globalIndex}] ${chalk.magenta("\u{1F514} REMINDER")}: ${chalk.dim(content)}`
662
+ ` [${globalIndex}] ${chalk5.magenta("\u{1F514} REMINDER")}: ${chalk5.dim(content)}`
382
663
  );
383
664
  } else {
384
665
  const roleIcon = msg.role === "user" ? "\u{1F464}" : msg.role === "assistant" ? "\u{1F916}" : msg.role === "system" ? "\u2699\uFE0F" : "\u{1F4C4}";
666
+ const roleLabel = String(msg.role ?? "").toUpperCase();
385
667
  terminalLog(
386
- ` [${globalIndex}] ${chalk[roleColor](roleIcon + " " + msg.role.toUpperCase())}: ${content}`
668
+ ` [${globalIndex}] ${ROLE_COLORS[roleColor](roleIcon + " " + roleLabel)}: ${content}`
387
669
  );
388
670
  }
389
671
  if (msg.role === "assistant" && Array.isArray(msg.content)) {
@@ -392,7 +674,7 @@ function logLLMInteraction(context) {
392
674
  );
393
675
  if (toolCalls2.length > 0) {
394
676
  terminalLog(
395
- chalk.cyan(
677
+ chalk5.cyan(
396
678
  ` \u{1F527} \u2192 Tool calls (${toolCalls2.length}): ${toolCalls2.map((t) => t.name).join(", ")}`
397
679
  )
398
680
  );
@@ -401,14 +683,14 @@ function logLLMInteraction(context) {
401
683
  const maxLength = 200;
402
684
  const displayInput = inputStr.length > maxLength ? inputStr.substring(0, maxLength) + "..." : inputStr;
403
685
  terminalLog(
404
- chalk.dim(` [${idx}] ${tool.name}: ${displayInput}`)
686
+ chalk5.dim(` [${idx}] ${tool.name}: ${displayInput}`)
405
687
  );
406
688
  });
407
689
  }
408
690
  }
409
691
  if (msg.tool_calls && msg.tool_calls.length > 0) {
410
692
  terminalLog(
411
- chalk.cyan(
693
+ chalk5.cyan(
412
694
  ` \u{1F527} \u2192 Tool calls (${msg.tool_calls.length}): ${msg.tool_calls.map((t) => t.function.name).join(", ")}`
413
695
  )
414
696
  );
@@ -417,12 +699,12 @@ function logLLMInteraction(context) {
417
699
  const maxLength = 200;
418
700
  const displayInput = inputStr.length > maxLength ? inputStr.substring(0, maxLength) + "..." : inputStr;
419
701
  terminalLog(
420
- chalk.dim(` [${idx}] ${tool.function.name}: ${displayInput}`)
702
+ chalk5.dim(` [${idx}] ${tool.function.name}: ${displayInput}`)
421
703
  );
422
704
  });
423
705
  }
424
706
  });
425
- terminalLog(chalk.magenta("\n\u{1F916} LLM Response:"));
707
+ terminalLog(chalk5.magenta("\n\u{1F916} LLM Response:"));
426
708
  let responseContent = "";
427
709
  let toolCalls = [];
428
710
  if (Array.isArray(context.response.content)) {
@@ -461,7 +743,7 @@ function logLLMInteraction(context) {
461
743
  (t) => t.name || t.function?.name || "unknown"
462
744
  );
463
745
  terminalLog(
464
- chalk.cyan(
746
+ chalk5.cyan(
465
747
  ` \u{1F527} Tool Calls (${toolCalls.length}): ${toolNames.join(", ")}`
466
748
  )
467
749
  );
@@ -471,17 +753,17 @@ function logLLMInteraction(context) {
471
753
  const inputStr = typeof toolInput === "string" ? toolInput : JSON.stringify(toolInput);
472
754
  const maxToolInputLength = 300;
473
755
  const displayInput = inputStr.length > maxToolInputLength ? inputStr.substring(0, maxToolInputLength) + "..." : inputStr;
474
- terminalLog(chalk.dim(` [${index}] ${toolName}: ${displayInput}`));
756
+ terminalLog(chalk5.dim(` [${index}] ${toolName}: ${displayInput}`));
475
757
  });
476
758
  }
477
759
  terminalLog(
478
760
  ` Stop Reason: ${context.response.stop_reason || context.response.finish_reason || "unknown"}`
479
761
  );
480
- terminalLog(chalk.gray("\u2501".repeat(60)));
762
+ terminalLog(chalk5.gray("\u2501".repeat(60)));
481
763
  }
482
764
  function logSystemPromptConstruction(construction) {
483
765
  if (!isDebugMode()) return;
484
- terminalLog("\n" + chalk.yellow("\u{1F4DD} SYSTEM PROMPT CONSTRUCTION"));
766
+ terminalLog("\n" + chalk5.yellow("\u{1F4DD} SYSTEM PROMPT CONSTRUCTION"));
485
767
  terminalLog(` Base Prompt: ${construction.basePrompt.length} chars`);
486
768
  if (construction.kodeContext) {
487
769
  terminalLog(` + Kode Context: ${construction.kodeContext.length} chars`);
@@ -491,7 +773,7 @@ function logSystemPromptConstruction(construction) {
491
773
  ` + Dynamic Reminders: ${construction.reminders.length} items`
492
774
  );
493
775
  construction.reminders.forEach((reminder, index) => {
494
- terminalLog(chalk.dim(` [${index}] ${reminder.substring(0, 80)}...`));
776
+ terminalLog(chalk5.dim(` [${index}] ${reminder.substring(0, 80)}...`));
495
777
  });
496
778
  }
497
779
  terminalLog(` = Final Length: ${construction.finalPrompt.length} chars`);
@@ -500,295 +782,59 @@ function logUserFriendly(type, data, requestId) {
500
782
  if (!isDebugMode()) return;
501
783
  const timestamp = (/* @__PURE__ */ new Date()).toLocaleTimeString();
502
784
  let message = "";
503
- let color = chalk.gray;
785
+ let color = chalk5.gray;
504
786
  let icon = "\u2022";
505
787
  switch (type) {
506
788
  case "SESSION_START":
507
789
  icon = "\u{1F680}";
508
- color = chalk.green;
790
+ color = chalk5.green;
509
791
  message = `Session started with ${data.model || "default model"}`;
510
792
  break;
511
793
  case "QUERY_START":
512
794
  icon = "\u{1F4AD}";
513
- color = chalk.blue;
795
+ color = chalk5.blue;
514
796
  message = `Processing query: "${data.query?.substring(0, 50)}${data.query?.length > 50 ? "..." : ""}"`;
515
797
  break;
516
798
  case "QUERY_PROGRESS":
517
799
  icon = "\u23F3";
518
- color = chalk.yellow;
800
+ color = chalk5.yellow;
519
801
  message = `${data.phase} (${data.elapsed}ms)`;
520
802
  break;
521
803
  case "QUERY_COMPLETE":
522
804
  icon = "\u2705";
523
- color = chalk.green;
805
+ color = chalk5.green;
524
806
  message = `Query completed in ${data.duration}ms - Cost: $${data.cost} - ${data.tokens} tokens`;
525
807
  break;
526
808
  case "TOOL_EXECUTION":
527
809
  icon = "\u{1F527}";
528
- color = chalk.cyan;
810
+ color = chalk5.cyan;
529
811
  message = `${data.toolName}: ${data.action} ${data.target ? "\u2192 " + data.target : ""}`;
530
812
  break;
531
813
  case "ERROR_OCCURRED":
532
814
  icon = "\u274C";
533
- color = chalk.red;
815
+ color = chalk5.red;
534
816
  message = `${data.error} ${data.context ? "(" + data.context + ")" : ""}`;
535
817
  break;
536
818
  case "PERFORMANCE_SUMMARY":
537
819
  icon = "\u{1F4CA}";
538
- color = chalk.magenta;
820
+ color = chalk5.magenta;
539
821
  message = `Session: ${data.queries} queries, $${data.totalCost}, ${data.avgResponseTime}ms avg`;
540
822
  break;
541
823
  default:
542
824
  message = JSON.stringify(data);
543
825
  }
544
- const reqId = requestId ? chalk.dim(`[${requestId.slice(0, 8)}]`) : "";
826
+ const reqId = requestId ? chalk5.dim(`[${requestId.slice(0, 8)}]`) : "";
545
827
  terminalLog(`${color(`[${timestamp}]`)} ${icon} ${color(message)} ${reqId}`);
546
828
  }
547
- function initDebugLogger() {
548
- if (!isDebugMode()) return;
549
- debug.info("DEBUG_LOGGER_INIT", {
550
- startupTimestamp: STARTUP_TIMESTAMP,
551
- sessionId: SESSION_ID,
552
- debugPaths: {
553
- detailed: DEBUG_PATHS.detailed(),
554
- flow: DEBUG_PATHS.flow(),
555
- api: DEBUG_PATHS.api(),
556
- state: DEBUG_PATHS.state()
557
- }
558
- });
559
- const terminalLevels = isDebugVerboseMode() ? Array.from(DEBUG_VERBOSE_TERMINAL_LOG_LEVELS).join(", ") : Array.from(TERMINAL_LOG_LEVELS).join(", ");
560
- terminalLog(
561
- chalk.dim(`[DEBUG] Terminal output filtered to: ${terminalLevels}`)
562
- );
563
- terminalLog(
564
- chalk.dim(`[DEBUG] Complete logs saved to: ${DEBUG_PATHS.base()}`)
565
- );
566
- if (!isDebugVerboseMode()) {
567
- terminalLog(
568
- chalk.dim(
569
- `[DEBUG] Use --debug-verbose for detailed system logs (FLOW, API, STATE)`
570
- )
571
- );
572
- }
573
- }
574
- function diagnoseError(error, context) {
575
- const errorMessage = error instanceof Error ? error.message : String(error);
576
- const errorStack = error instanceof Error ? error.stack : void 0;
577
- if (errorMessage.includes("aborted") || errorMessage.includes("AbortController")) {
578
- return {
579
- errorType: "REQUEST_ABORTED",
580
- category: "SYSTEM",
581
- severity: "MEDIUM",
582
- description: "Request was aborted, often due to user cancellation or timeout",
583
- suggestions: [
584
- "\u68C0\u67E5\u662F\u5426\u6309\u4E0B\u4E86 ESC \u952E\u53D6\u6D88\u8BF7\u6C42",
585
- "\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u662F\u5426\u7A33\u5B9A",
586
- "\u9A8C\u8BC1 AbortController \u72B6\u6001: isActive \u548C signal.aborted \u5E94\u8BE5\u4E00\u81F4",
587
- "\u67E5\u770B\u662F\u5426\u6709\u91CD\u590D\u7684\u8BF7\u6C42\u5BFC\u81F4\u51B2\u7A81"
588
- ],
589
- debugSteps: [
590
- "\u4F7F\u7528 --debug-verbose \u6A21\u5F0F\u67E5\u770B\u8BE6\u7EC6\u7684\u8BF7\u6C42\u6D41\u7A0B",
591
- "\u68C0\u67E5 debug \u65E5\u5FD7\u4E2D\u7684 BINARY_FEEDBACK_* \u4E8B\u4EF6",
592
- "\u9A8C\u8BC1 REQUEST_START \u548C REQUEST_END \u65E5\u5FD7\u914D\u5BF9",
593
- "\u67E5\u770B QUERY_ABORTED \u4E8B\u4EF6\u7684\u89E6\u53D1\u539F\u56E0"
594
- ]
595
- };
596
- }
597
- if (errorMessage.includes("api-key") || errorMessage.includes("authentication") || errorMessage.includes("401")) {
598
- return {
599
- errorType: "API_AUTHENTICATION",
600
- category: "API",
601
- severity: "HIGH",
602
- description: "API authentication failed - invalid or missing API key",
603
- suggestions: [
604
- "\u8FD0\u884C /login \u91CD\u65B0\u8BBE\u7F6E API \u5BC6\u94A5",
605
- "\u68C0\u67E5 ~/.kode/ \u914D\u7F6E\u6587\u4EF6\u4E2D\u7684 API \u5BC6\u94A5",
606
- "\u9A8C\u8BC1 API \u5BC6\u94A5\u662F\u5426\u5DF2\u8FC7\u671F\u6216\u88AB\u64A4\u9500",
607
- "\u786E\u8BA4\u4F7F\u7528\u7684 provider \u8BBE\u7F6E\u6B63\u786E (anthropic/opendev/bigdream)"
608
- ],
609
- debugSteps: [
610
- "\u68C0\u67E5 CONFIG_LOAD \u65E5\u5FD7\u4E2D\u7684 provider \u548C API \u5BC6\u94A5\u72B6\u6001",
611
- "\u8FD0\u884C kode doctor \u68C0\u67E5\u7CFB\u7EDF\u5065\u5EB7\u72B6\u6001",
612
- "\u67E5\u770B API_ERROR \u65E5\u5FD7\u4E86\u89E3\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F",
613
- "\u4F7F\u7528 kode config \u547D\u4EE4\u67E5\u770B\u5F53\u524D\u914D\u7F6E"
614
- ]
615
- };
616
- }
617
- if (errorMessage.includes("ECONNREFUSED") || errorMessage.includes("ENOTFOUND") || errorMessage.includes("timeout")) {
618
- return {
619
- errorType: "NETWORK_CONNECTION",
620
- category: "NETWORK",
621
- severity: "HIGH",
622
- description: "Network connection failed - unable to reach API endpoint",
623
- suggestions: [
624
- "\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5\u662F\u5426\u6B63\u5E38",
625
- "\u786E\u8BA4\u9632\u706B\u5899\u6CA1\u6709\u963B\u6B62\u76F8\u5173\u7AEF\u53E3",
626
- "\u68C0\u67E5 proxy \u8BBE\u7F6E\u662F\u5426\u6B63\u786E",
627
- "\u5C1D\u8BD5\u5207\u6362\u5230\u4E0D\u540C\u7684\u7F51\u7EDC\u73AF\u5883",
628
- "\u9A8C\u8BC1 baseURL \u914D\u7F6E\u662F\u5426\u6B63\u786E"
629
- ],
630
- debugSteps: [
631
- "\u68C0\u67E5 API_REQUEST_START \u548C\u76F8\u5173\u7F51\u7EDC\u65E5\u5FD7",
632
- "\u67E5\u770B LLM_REQUEST_ERROR \u4E2D\u7684\u8BE6\u7EC6\u9519\u8BEF\u4FE1\u606F",
633
- "\u4F7F\u7528 ping \u6216 curl \u6D4B\u8BD5 API \u7AEF\u70B9\u8FDE\u901A\u6027",
634
- "\u68C0\u67E5\u4F01\u4E1A\u7F51\u7EDC\u662F\u5426\u9700\u8981\u4EE3\u7406\u8BBE\u7F6E"
635
- ]
636
- };
637
- }
638
- if (errorMessage.includes("permission") || errorMessage.includes("EACCES") || errorMessage.includes("denied")) {
639
- return {
640
- errorType: "PERMISSION_DENIED",
641
- category: "PERMISSION",
642
- severity: "MEDIUM",
643
- description: "Permission denied - insufficient access rights",
644
- suggestions: [
645
- "\u68C0\u67E5\u6587\u4EF6\u548C\u76EE\u5F55\u7684\u8BFB\u5199\u6743\u9650",
646
- "\u786E\u8BA4\u5F53\u524D\u7528\u6237\u6709\u8DB3\u591F\u7684\u7CFB\u7EDF\u6743\u9650",
647
- "\u67E5\u770B\u662F\u5426\u9700\u8981\u7BA1\u7406\u5458\u6743\u9650\u8FD0\u884C",
648
- "\u68C0\u67E5\u5DE5\u5177\u6743\u9650\u8BBE\u7F6E\u662F\u5426\u6B63\u786E\u914D\u7F6E"
649
- ],
650
- debugSteps: [
651
- "\u67E5\u770B PERMISSION_* \u65E5\u5FD7\u4E86\u89E3\u6743\u9650\u68C0\u67E5\u8FC7\u7A0B",
652
- "\u68C0\u67E5\u6587\u4EF6\u7CFB\u7EDF\u6743\u9650: ls -la",
653
- "\u9A8C\u8BC1\u5DE5\u5177\u5BA1\u6279\u72B6\u6001",
654
- "\u67E5\u770B TOOL_* \u76F8\u5173\u7684\u8C03\u8BD5\u65E5\u5FD7"
655
- ]
656
- };
657
- }
658
- if (errorMessage.includes("substring is not a function") || errorMessage.includes("content")) {
659
- return {
660
- errorType: "RESPONSE_FORMAT",
661
- category: "API",
662
- severity: "MEDIUM",
663
- description: "LLM response format mismatch between different providers",
664
- suggestions: [
665
- "\u68C0\u67E5\u5F53\u524D\u4F7F\u7528\u7684 provider \u662F\u5426\u4E0E\u671F\u671B\u4E00\u81F4",
666
- "\u9A8C\u8BC1\u54CD\u5E94\u683C\u5F0F\u5904\u7406\u903B\u8F91",
667
- "\u786E\u8BA4\u4E0D\u540C provider \u7684\u54CD\u5E94\u683C\u5F0F\u5DEE\u5F02",
668
- "\u68C0\u67E5\u662F\u5426\u9700\u8981\u66F4\u65B0\u54CD\u5E94\u89E3\u6790\u4EE3\u7801"
669
- ],
670
- debugSteps: [
671
- "\u67E5\u770B LLM_CALL_DEBUG \u4E2D\u7684\u54CD\u5E94\u683C\u5F0F",
672
- "\u68C0\u67E5 provider \u914D\u7F6E\u548C\u5B9E\u9645\u4F7F\u7528\u7684 API",
673
- "\u5BF9\u6BD4 Anthropic \u548C OpenAI \u54CD\u5E94\u683C\u5F0F\u5DEE\u5F02",
674
- "\u9A8C\u8BC1 logLLMInteraction \u51FD\u6570\u7684\u683C\u5F0F\u5904\u7406"
675
- ]
676
- };
677
- }
678
- if (errorMessage.includes("too long") || errorMessage.includes("context") || errorMessage.includes("token")) {
679
- return {
680
- errorType: "CONTEXT_OVERFLOW",
681
- category: "SYSTEM",
682
- severity: "MEDIUM",
683
- description: "Context window exceeded - conversation too long",
684
- suggestions: [
685
- "\u8FD0\u884C /compact \u624B\u52A8\u538B\u7F29\u5BF9\u8BDD\u5386\u53F2",
686
- "\u68C0\u67E5\u81EA\u52A8\u538B\u7F29\u8BBE\u7F6E\u662F\u5426\u6B63\u786E\u914D\u7F6E",
687
- "\u51CF\u5C11\u5355\u6B21\u8F93\u5165\u7684\u5185\u5BB9\u957F\u5EA6",
688
- "\u6E05\u7406\u4E0D\u5FC5\u8981\u7684\u4E0A\u4E0B\u6587\u4FE1\u606F"
689
- ],
690
- debugSteps: [
691
- "\u67E5\u770B AUTO_COMPACT_* \u65E5\u5FD7\u68C0\u67E5\u538B\u7F29\u89E6\u53D1",
692
- "\u68C0\u67E5 token \u4F7F\u7528\u91CF\u548C\u9608\u503C",
693
- "\u67E5\u770B CONTEXT_COMPRESSION \u76F8\u5173\u65E5\u5FD7",
694
- "\u9A8C\u8BC1\u6A21\u578B\u7684\u6700\u5927 token \u9650\u5236"
695
- ]
696
- };
697
- }
698
- if (errorMessage.includes("config") || errorMessage.includes("undefined") && context?.configRelated) {
699
- return {
700
- errorType: "CONFIGURATION",
701
- category: "CONFIG",
702
- severity: "MEDIUM",
703
- description: "Configuration error - missing or invalid settings",
704
- suggestions: [
705
- "\u8FD0\u884C kode config \u68C0\u67E5\u914D\u7F6E\u8BBE\u7F6E",
706
- "\u5220\u9664\u635F\u574F\u7684\u914D\u7F6E\u6587\u4EF6\u91CD\u65B0\u521D\u59CB\u5316",
707
- "\u68C0\u67E5 JSON \u914D\u7F6E\u6587\u4EF6\u8BED\u6CD5\u662F\u5426\u6B63\u786E",
708
- "\u9A8C\u8BC1\u73AF\u5883\u53D8\u91CF\u8BBE\u7F6E"
709
- ],
710
- debugSteps: [
711
- "\u67E5\u770B CONFIG_LOAD \u548C CONFIG_SAVE \u65E5\u5FD7",
712
- "\u68C0\u67E5\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84\u548C\u6743\u9650",
713
- "\u9A8C\u8BC1 JSON \u683C\u5F0F: cat ~/.kode/config.json | jq",
714
- "\u67E5\u770B\u914D\u7F6E\u7F13\u5B58\u76F8\u5173\u7684\u8C03\u8BD5\u4FE1\u606F"
715
- ]
716
- };
717
- }
718
- return {
719
- errorType: "UNKNOWN",
720
- category: "SYSTEM",
721
- severity: "MEDIUM",
722
- description: `Unexpected error: ${errorMessage}`,
723
- suggestions: [
724
- "\u91CD\u65B0\u542F\u52A8\u5E94\u7528\u7A0B\u5E8F",
725
- "\u68C0\u67E5\u7CFB\u7EDF\u8D44\u6E90\u662F\u5426\u5145\u8DB3",
726
- "\u67E5\u770B\u5B8C\u6574\u7684\u9519\u8BEF\u65E5\u5FD7\u83B7\u53D6\u66F4\u591A\u4FE1\u606F",
727
- "\u5982\u679C\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u62A5\u544A\u6B64\u9519\u8BEF"
728
- ],
729
- debugSteps: [
730
- "\u4F7F\u7528 --debug-verbose \u83B7\u53D6\u8BE6\u7EC6\u65E5\u5FD7",
731
- "\u68C0\u67E5 error.log \u4E2D\u7684\u5B8C\u6574\u9519\u8BEF\u4FE1\u606F",
732
- "\u67E5\u770B\u7CFB\u7EDF\u8D44\u6E90\u4F7F\u7528\u60C5\u51B5",
733
- "\u6536\u96C6\u91CD\u73B0\u6B65\u9AA4\u548C\u73AF\u5883\u4FE1\u606F"
734
- ],
735
- relatedLogs: errorStack ? [errorStack] : void 0
736
- };
737
- }
738
- function logErrorWithDiagnosis(error, context, requestId) {
739
- if (!isDebugMode()) return;
740
- const diagnosis = diagnoseError(error, context);
741
- const errorMessage = error instanceof Error ? error.message : String(error);
742
- debug.error(
743
- "ERROR_OCCURRED",
744
- {
745
- error: errorMessage,
746
- errorType: diagnosis.errorType,
747
- category: diagnosis.category,
748
- severity: diagnosis.severity,
749
- context
750
- },
751
- requestId
752
- );
753
- terminalLog("\n" + chalk.red("\u{1F6A8} ERROR DIAGNOSIS"));
754
- terminalLog(chalk.gray("\u2501".repeat(60)));
755
- terminalLog(chalk.red(`\u274C ${diagnosis.errorType}`));
756
- terminalLog(
757
- chalk.dim(
758
- `Category: ${diagnosis.category} | Severity: ${diagnosis.severity}`
759
- )
760
- );
761
- terminalLog(`
762
- ${diagnosis.description}`);
763
- terminalLog(chalk.yellow("\n\u{1F4A1} Recovery Suggestions:"));
764
- diagnosis.suggestions.forEach((suggestion, index) => {
765
- terminalLog(` ${index + 1}. ${suggestion}`);
766
- });
767
- terminalLog(chalk.cyan("\n\u{1F50D} Debug Steps:"));
768
- diagnosis.debugSteps.forEach((step, index) => {
769
- terminalLog(` ${index + 1}. ${step}`);
770
- });
771
- if (diagnosis.relatedLogs && diagnosis.relatedLogs.length > 0) {
772
- terminalLog(chalk.magenta("\n\u{1F4CB} Related Information:"));
773
- diagnosis.relatedLogs.forEach((log, index) => {
774
- const truncatedLog = log.length > 200 ? log.substring(0, 200) + "..." : log;
775
- terminalLog(chalk.dim(` ${truncatedLog}`));
776
- });
777
- }
778
- const debugPath = DEBUG_PATHS.base();
779
- terminalLog(chalk.gray(`
780
- \u{1F4C1} Complete logs: ${debugPath}`));
781
- terminalLog(chalk.gray("\u2501".repeat(60)));
782
- }
783
829
 
784
830
  export {
785
831
  debug,
786
832
  getCurrentRequest,
787
833
  markPhase,
834
+ initDebugLogger,
788
835
  logAPIError,
789
836
  logLLMInteraction,
790
837
  logSystemPromptConstruction,
791
838
  logUserFriendly,
792
- initDebugLogger,
793
839
  logErrorWithDiagnosis
794
840
  };