@shareai-lab/kode 2.0.2 → 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-XP3CFN6F.js → chunks/agentsValidate-PEWMYN4Q.js} +97 -69
  13. package/dist/chunks/agentsValidate-PEWMYN4Q.js.map +7 -0
  14. package/dist/{ask-3G5H5KD5.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-EH34V7CY.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-K2MI4TPB.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-4GAIJGRH.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-54DNHKOD.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-BHGTA6JQ.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-OZNRLY3E.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-2PMO2FS2.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-NQLEUHMS.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-2KWKUXLT.js → chunks/chunk-HRJ3ICQK.js} +59 -55
  79. package/dist/chunks/chunk-HRJ3ICQK.js.map +7 -0
  80. package/dist/{chunk-ZQU3TXLC.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-IE2CG2TV.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-SRZZFAS7.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-SDGKPKDK.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-G6I7XROM.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-3TXNP6HH.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-QYFKRZQC.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-6ZMBCL23.js → chunks/config-25HRTPSP.js} +48 -10
  133. package/dist/chunks/cost-tracker-Z2UZT2J5.js +28 -0
  134. package/dist/{customCommands-DNEJS3ZU.js → chunks/customCommands-TYMYZRG5.js} +11 -8
  135. package/dist/chunks/engine-MRVF6FK6.js +39 -0
  136. package/dist/{env-OFAXZ3XG.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-GRWG3SPE.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-TDMXFWSO.js → chunks/kodeHooks-RVKYRJHG.js} +11 -9
  146. package/dist/{llm-XVXWYOHK.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-YD7YXYGF.js → chunks/mentionProcessor-RJW5UPJD.js} +46 -16
  150. package/dist/chunks/mentionProcessor-RJW5UPJD.js.map +7 -0
  151. package/dist/{messages-OFUJSPRV.js → chunks/messages-EEWWLPHN.js} +2 -6
  152. package/dist/chunks/model-5TIEKQPD.js +37 -0
  153. package/dist/{openai-5G5D5Q4B.js → chunks/openai-XXK3YZG4.js} +13 -10
  154. package/dist/{outputStyles-HLDXFQK3.js → chunks/outputStyles-FAJTXN2A.js} +6 -9
  155. package/dist/chunks/permissions-HO7INPWM.js +27 -0
  156. package/dist/{pluginRuntime-FPTKK6NY.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-PSNKDINM.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-SRV2INSL.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-GIU4ZIXM.js +0 -42
  223. package/dist/acp-H3VJ77YG.js +0 -1357
  224. package/dist/acp-H3VJ77YG.js.map +0 -7
  225. package/dist/agentsValidate-XP3CFN6F.js.map +0 -7
  226. package/dist/ask-3G5H5KD5.js.map +0 -7
  227. package/dist/autoUpdater-DNRMJWFQ.js +0 -17
  228. package/dist/chunk-2KWKUXLT.js.map +0 -7
  229. package/dist/chunk-2PMO2FS2.js.map +0 -7
  230. package/dist/chunk-3TXNP6HH.js.map +0 -7
  231. package/dist/chunk-4GAIJGRH.js.map +0 -7
  232. package/dist/chunk-4RTX4AG4.js.map +0 -7
  233. package/dist/chunk-54DNHKOD.js.map +0 -7
  234. package/dist/chunk-67PY5IX6.js +0 -34
  235. package/dist/chunk-67PY5IX6.js.map +0 -7
  236. package/dist/chunk-6DRDLOLP.js +0 -2613
  237. package/dist/chunk-6DRDLOLP.js.map +0 -7
  238. package/dist/chunk-7CQVZNQV.js +0 -1609
  239. package/dist/chunk-7CQVZNQV.js.map +0 -7
  240. package/dist/chunk-ABLVTESJ.js.map +0 -7
  241. package/dist/chunk-AIMIPK4B.js +0 -835
  242. package/dist/chunk-AIMIPK4B.js.map +0 -7
  243. package/dist/chunk-BHGTA6JQ.js.map +0 -7
  244. package/dist/chunk-CIG63V4E.js +0 -72
  245. package/dist/chunk-CIG63V4E.js.map +0 -7
  246. package/dist/chunk-E6YNABER.js.map +0 -7
  247. package/dist/chunk-EH34V7CY.js.map +0 -7
  248. package/dist/chunk-EZXMVTDU.js.map +0 -7
  249. package/dist/chunk-FH5CHM6L.js +0 -148
  250. package/dist/chunk-FH5CHM6L.js.map +0 -7
  251. package/dist/chunk-G6I7XROM.js.map +0 -7
  252. package/dist/chunk-HN4E4UUQ.js.map +0 -7
  253. package/dist/chunk-HSPVVDIW.js +0 -30198
  254. package/dist/chunk-HSPVVDIW.js.map +0 -7
  255. package/dist/chunk-IE2CG2TV.js.map +0 -7
  256. package/dist/chunk-K2MI4TPB.js.map +0 -7
  257. package/dist/chunk-MN77D2F7.js +0 -2931
  258. package/dist/chunk-MN77D2F7.js.map +0 -7
  259. package/dist/chunk-NQLEUHMS.js.map +0 -7
  260. package/dist/chunk-OIFQB3S4.js +0 -515
  261. package/dist/chunk-OIFQB3S4.js.map +0 -7
  262. package/dist/chunk-OWTG2W3A.js +0 -164
  263. package/dist/chunk-OWTG2W3A.js.map +0 -7
  264. package/dist/chunk-OZNRLY3E.js.map +0 -7
  265. package/dist/chunk-QYFKRZQC.js.map +0 -7
  266. package/dist/chunk-S6HRABTA.js.map +0 -7
  267. package/dist/chunk-SDGKPKDK.js.map +0 -7
  268. package/dist/chunk-SRZZFAS7.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-VBXVYQYY.js +0 -145
  274. package/dist/chunk-VBXVYQYY.js.map +0 -7
  275. package/dist/chunk-WVHORZQ5.js +0 -17
  276. package/dist/chunk-WVHORZQ5.js.map +0 -7
  277. package/dist/chunk-WWUWDNWW.js +0 -49
  278. package/dist/chunk-WWUWDNWW.js.map +0 -7
  279. package/dist/chunk-Z33T5YN5.js +0 -654
  280. package/dist/chunk-Z33T5YN5.js.map +0 -7
  281. package/dist/chunk-ZQU3TXLC.js.map +0 -7
  282. package/dist/cli-SRV2INSL.js.map +0 -7
  283. package/dist/commands-TWH6PGVG.js +0 -46
  284. package/dist/context-JQIOOI4W.js +0 -30
  285. package/dist/costTracker-6SL26FDB.js +0 -19
  286. package/dist/kodeAgentSessionLoad-6N27AC5K.js +0 -18
  287. package/dist/kodeAgentSessionResume-HUSAEO24.js +0 -16
  288. package/dist/kodeAgentStreamJson-NXFN7TXH.js +0 -13
  289. package/dist/kodeAgentStreamJsonSession-GRWG3SPE.js.map +0 -7
  290. package/dist/kodeAgentStructuredStdio-HGWJT7CU.js +0 -10
  291. package/dist/llm-XVXWYOHK.js.map +0 -7
  292. package/dist/llmLazy-7TD5N7XP.js +0 -15
  293. package/dist/loader-AUXIJTY6.js +0 -28
  294. package/dist/mcp-BXJ3K7NZ.js +0 -49
  295. package/dist/mentionProcessor-YD7YXYGF.js.map +0 -7
  296. package/dist/model-KPYCXWBK.js +0 -30
  297. package/dist/pluginRuntime-FPTKK6NY.js.map +0 -7
  298. package/dist/pluginValidation-DSFXZ4GF.js +0 -17
  299. package/dist/prompts-LWLAJRS2.js +0 -48
  300. package/dist/query-HVPWL27C.js +0 -50
  301. package/dist/responsesStreaming-AW344PQO.js +0 -10
  302. package/dist/ripgrep-YOPCY2GO.js +0 -17
  303. package/dist/state-KNRWP3FO.js +0 -16
  304. package/dist/theme-7S2QN2FO.js +0 -14
  305. package/dist/toolPermissionSettings-GPOBH4IV.js +0 -18
  306. package/dist/tools-FZU2FZBD.js +0 -47
  307. package/dist/userInput-VHNBN2MW.js +0 -311
  308. package/dist/userInput-VHNBN2MW.js.map +0 -7
  309. package/dist/uuid-QN2CNKKN.js +0 -9
  310. /package/dist/{REPL-GIU4ZIXM.js.map → chunks/Doctor-M3J7GRTJ.js.map} +0 -0
  311. /package/dist/{autoUpdater-DNRMJWFQ.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-TWH6PGVG.js.map → chunks/agentLoader-FCRG3TFJ.js.map} +0 -0
  314. /package/dist/{config-6ZMBCL23.js.map → chunks/autoUpdater-CNESBOKO.js.map} +0 -0
  315. /package/dist/{context-JQIOOI4W.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-DNEJS3ZU.js.map → chunks/chunk-GCQCAXJZ.js.map} +0 -0
  318. /package/dist/{env-OFAXZ3XG.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-6N27AC5K.js.map → chunks/config-25HRTPSP.js.map} +0 -0
  321. /package/dist/{kodeAgentSessionResume-HUSAEO24.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-TDMXFWSO.js.map → chunks/env-TJ5NOBEB.js.map} +0 -0
  325. /package/dist/{llmLazy-7TD5N7XP.js.map → chunks/kodeAgentSessionId-VTNISJ2L.js.map} +0 -0
  326. /package/dist/{loader-AUXIJTY6.js.map → chunks/kodeAgentSessionLoad-YB2RKBGJ.js.map} +0 -0
  327. /package/dist/{mcp-BXJ3K7NZ.js.map → chunks/kodeAgentSessionResume-DZSIVKVA.js.map} +0 -0
  328. /package/dist/{messages-OFUJSPRV.js.map → chunks/kodeAgentStreamJson-X5PLS2S6.js.map} +0 -0
  329. /package/dist/{model-KPYCXWBK.js.map → chunks/kodeHooks-RVKYRJHG.js.map} +0 -0
  330. /package/dist/{openai-5G5D5Q4B.js.map → chunks/llmLazy-ZUSSE3ZA.js.map} +0 -0
  331. /package/dist/{outputStyles-HLDXFQK3.js.map → chunks/messages-EEWWLPHN.js.map} +0 -0
  332. /package/dist/{pluginValidation-DSFXZ4GF.js.map → chunks/model-5TIEKQPD.js.map} +0 -0
  333. /package/dist/{prompts-LWLAJRS2.js.map → chunks/openai-XXK3YZG4.js.map} +0 -0
  334. /package/dist/{query-HVPWL27C.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-YOPCY2GO.js.map → chunks/pluginValidation-DAM7WRTC.js.map} +0 -0
  337. /package/dist/{skillMarketplace-PSNKDINM.js.map → chunks/registry-XYJXMOA5.js.map} +0 -0
  338. /package/dist/{state-KNRWP3FO.js.map → chunks/responsesStreaming-JNGE2P3D.js.map} +0 -0
  339. /package/dist/{theme-7S2QN2FO.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-GPOBH4IV.js.map → chunks/src-OROQIWP3.js.map} +0 -0
  342. /package/dist/{tools-FZU2FZBD.js.map → chunks/theme-YBJUIMWK.js.map} +0 -0
  343. /package/dist/{uuid-QN2CNKKN.js.map → chunks/toolPermissionContext-MOCTRR7N.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../apps/cli/src/ui/components/InvalidConfigDialog.tsx", "../../apps/cli/src/bootstrapEnv.ts", "../../apps/cli/src/entrypoints/cli/cliParser/program.tsx", "../../apps/cli/src/entrypoints/cli/commands/config.ts", "../../packages/core/src/utils/cleanup.ts", "../../apps/cli/src/entrypoints/cli/setup.ts", "../../apps/cli/src/entrypoints/cli/commands/context.ts", "../../apps/cli/src/entrypoints/cli/commands/mcp/serve.ts", "../../packages/core/src/services/mcpCliUtils.ts", "../../apps/cli/src/entrypoints/cli/commands/mcp/servers/add.ts", "../../apps/cli/src/entrypoints/cli/commands/mcp/servers/addJson.ts", "../../apps/cli/src/entrypoints/cli/commands/mcp/servers/get.ts", "../../apps/cli/src/entrypoints/cli/commands/mcp/servers/list.ts", "../../apps/cli/src/entrypoints/cli/commands/mcp/servers/remove.ts", "../../apps/cli/src/entrypoints/cli/commands/mcp/importClaudeDesktop.tsx", "../../apps/cli/src/entrypoints/cli/commands/mcp/reset.ts", "../../apps/cli/src/entrypoints/cli/commands/mcp/index.ts", "../../apps/cli/src/entrypoints/cli/commands/models.ts", "../../apps/cli/src/entrypoints/cli/cliParser/commands/agents.ts", "../../apps/cli/src/commands/builtin/approvedTools.ts", "../../apps/cli/src/entrypoints/cli/cliParser/commands/approvedTools.ts", "../../apps/cli/src/entrypoints/cli/interactive/renderers.tsx", "../../apps/cli/src/entrypoints/cli/cliParser/commands/doctor.ts", "../../apps/cli/src/entrypoints/cli/cliParser/commands/logs.ts", "../../packages/core/src/utils/conversationRecovery.ts", "../../apps/cli/src/entrypoints/cli/cliParser/commands/plugins.ts", "../../apps/cli/src/entrypoints/cli/cliParser/commands/marketplace.ts", "../../apps/cli/src/entrypoints/cli/cliParser/commands/update.ts", "../../apps/cli/src/entrypoints/cli/print/runPrintMode.ts", "../../apps/cli/src/entrypoints/cli/setupScreens.tsx", "../../apps/cli/src/ui/components/TrustDialog.tsx", "../../apps/cli/src/entrypoints/cli/mcpServerApproval.tsx", "../../apps/cli/src/ui/components/MCPServerMultiselectDialog.tsx", "../../apps/cli/src/ui/components/MCPServerDialogCopy.tsx", "../../apps/cli/src/ui/components/MCPServerApprovalDialog.tsx", "../../apps/cli/src/entrypoints/cli/cliParser/rootAction/updateInfo.ts", "../../apps/cli/src/entrypoints/cli/cliParser/rootAction.ts", "../../apps/cli/src/entrypoints/cli/cliParser/index.ts", "../../apps/cli/src/app.tsx", "../../apps/cli/src/index.ts"],
4
+ "sourcesContent": ["import React from 'react'\nimport { Box, Newline, Text, useInput } from 'ink'\nimport { getTheme } from '#core/utils/theme'\nimport { Select } from './CustomSelect/select'\nimport { render } from 'ink'\nimport { writeFileSync } from 'fs'\nimport { ConfigParseError } from '#core/utils/errors'\nimport { useExitOnCtrlCD } from '#ui-ink/hooks/useExitOnCtrlCD'\ninterface InvalidConfigHandlerProps {\n error: ConfigParseError\n}\n\ninterface InvalidConfigDialogProps {\n filePath: string\n errorDescription: string\n onExit: () => void\n onReset: () => void\n}\n\n/**\n * Dialog shown when the Kode config file contains invalid JSON\n */\nfunction InvalidConfigDialog({\n filePath,\n errorDescription,\n onExit,\n onReset,\n}: InvalidConfigDialogProps): React.ReactNode {\n const theme = getTheme()\n\n // Handle escape key\n useInput((_, key) => {\n if (key.escape) {\n onExit()\n }\n })\n\n const exitState = useExitOnCtrlCD(() => process.exit(0))\n\n // Handler for Select onChange\n const handleSelect = (value: string) => {\n if (value === 'exit') {\n onExit()\n } else {\n onReset()\n }\n }\n\n return (\n <>\n <Box\n flexDirection=\"column\"\n borderColor={theme.error}\n borderStyle=\"round\"\n padding={1}\n width={70}\n gap={1}\n >\n <Text bold>Configuration Error</Text>\n\n <Box flexDirection=\"column\" gap={1}>\n <Text>\n The configuration file at <Text bold>{filePath}</Text> contains\n invalid JSON.\n </Text>\n <Text>{errorDescription}</Text>\n </Box>\n\n <Box flexDirection=\"column\">\n <Text bold>Choose an option:</Text>\n <Select\n options={[\n { label: 'Exit and fix manually', value: 'exit' },\n { label: 'Reset with default configuration', value: 'reset' },\n ]}\n onChange={handleSelect}\n />\n </Box>\n </Box>\n {exitState.pending ? (\n <Text dimColor>Press {exitState.keyName} again to exit</Text>\n ) : (\n <Newline />\n )}\n </>\n )\n}\n\nexport function showInvalidConfigDialog({\n error,\n}: InvalidConfigHandlerProps): Promise<void> {\n return new Promise(resolve => {\n render(\n <InvalidConfigDialog\n filePath={error.filePath}\n errorDescription={error.message}\n onExit={() => {\n resolve()\n process.exit(1)\n }}\n onReset={() => {\n writeFileSync(\n error.filePath,\n JSON.stringify(error.defaultConfig, null, 2),\n )\n resolve()\n process.exit(0)\n }}\n />,\n { exitOnCtrlC: false },\n )\n })\n}\n", "import { fileURLToPath } from 'node:url'\nimport { basename, dirname, join } from 'node:path'\nimport { existsSync } from 'node:fs'\n\n/**\n * Best-effort detection for packaged/native executions.\n *\n * This is intentionally kept inside the app layer (entrypoints) rather than\n * core/runtime implementations.\n */\nexport function ensurePackagedRuntimeEnv(): void {\n if (process.env.KODE_PACKAGED !== undefined) return\n\n try {\n const exec = basename(process.execPath || '').toLowerCase()\n if (\n exec &&\n exec !== 'bun' &&\n exec !== 'bun.exe' &&\n exec !== 'node' &&\n exec !== 'node.exe'\n ) {\n process.env.KODE_PACKAGED = '1'\n }\n } catch {}\n}\n\nexport function ensureYogaWasmPath(entrypointUrl: string): void {\n try {\n if (process.env.YOGA_WASM_PATH) return\n\n const entryFile = fileURLToPath(entrypointUrl)\n const entryDir = dirname(entryFile)\n const devCandidate = join(entryDir, '../../yoga.wasm')\n const distCandidate = join(entryDir, './yoga.wasm')\n const resolved = existsSync(distCandidate)\n ? distCandidate\n : existsSync(devCandidate)\n ? devCandidate\n : undefined\n if (resolved) {\n process.env.YOGA_WASM_PATH = resolved\n }\n } catch {}\n}\n", "import { cwd } from 'process'\n\nimport type { RenderOptions } from 'ink'\nimport { Command, Option } from '@commander-js/extra-typings'\n\nimport { PRODUCT_COMMAND, PRODUCT_NAME } from '#core/constants/product'\nimport { MACRO } from '#core/constants/macros'\n\nimport { registerConfigCommands } from '../commands/config'\nimport { registerContextCommands } from '../commands/context'\nimport { registerMcpCommands } from '../commands/mcp'\nimport { registerModelsCommands } from '../commands/models'\nimport { registerAgentsCommands } from './commands/agents'\nimport { registerApprovedToolsCommands } from './commands/approvedTools'\nimport { registerDoctorCommand } from './commands/doctor'\nimport { registerLogCommands } from './commands/logs'\nimport { registerPluginCommands } from './commands/plugins'\nimport { registerUpdateCommand } from './commands/update'\nimport { createRootAction } from './rootAction'\n\nexport function createCliProgram(\n stdinContent: string,\n renderContext: RenderOptions | undefined,\n): Command {\n const program = new Command()\n\n const renderContextWithExitOnCtrlC = {\n ...renderContext,\n exitOnCtrlC: true,\n }\n\n program\n .name(PRODUCT_COMMAND)\n .description(\n `${PRODUCT_NAME} - starts an interactive session by default, use -p/--print for non-interactive output`,\n )\n .argument('[prompt]', 'Your prompt', String)\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option(\n '-d, --debug [filter]',\n 'Enable debug mode with optional category filtering (e.g., \"api,hooks\" or \"!statsig,!file\")',\n )\n .option(\n '--debug-verbose',\n 'Enable verbose debug terminal output',\n () => true,\n )\n .option(\n '--verbose',\n 'Override verbose mode setting from config',\n () => true,\n )\n .option('-e, --enable-architect', 'Enable the Architect tool', () => true)\n .option(\n '-p, --print',\n 'Print response and exit (useful for pipes)',\n () => true,\n )\n .option(\n '--output-format <format>',\n 'Output format (only works with --print): \"text\" (default), \"json\", or \"stream-json\"',\n String,\n 'text',\n )\n .option(\n '--json-schema <schema>',\n 'JSON Schema for structured output validation. Example: {\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"}},\"required\":[\"name\"]}',\n String,\n )\n .option(\n '--input-format <format>',\n 'Input format (only works with --print): \"text\" (default) or \"stream-json\"',\n String,\n 'text',\n )\n .option(\n '--mcp-debug',\n '[DEPRECATED. Use --debug instead] Enable MCP debug mode (shows MCP server errors)',\n () => true,\n )\n .option(\n '--dangerously-skip-permissions',\n 'Bypass all permission checks. Recommended only for sandboxes with no internet access.',\n () => true,\n )\n .option(\n '--allow-dangerously-skip-permissions',\n 'Enable bypassing all permission checks as an option, without it being enabled by default. Recommended only for sandboxes with no internet access.',\n () => true,\n )\n .option(\n '--max-budget-usd <amount>',\n 'Maximum dollar amount to spend on API calls (only works with --print)',\n String,\n )\n .option(\n '--include-partial-messages',\n 'Include partial message chunks as they arrive (only works with --print and --output-format=stream-json)',\n () => true,\n )\n .option(\n '--replay-user-messages',\n 'Re-emit user messages from stdin back on stdout for acknowledgment (only works with --input-format=stream-json and --output-format=stream-json)',\n () => true,\n )\n .option(\n '--allowedTools, --allowed-tools <tools...>',\n 'Comma or space-separated list of tool names to allow (e.g. \"Bash(git:*) Edit\")',\n )\n .option(\n '--tools <tools...>',\n 'Specify the list of available tools from the built-in set. Use \"\" to disable all tools, \"default\" to use all tools, or specify tool names (e.g. \"Bash,Edit,Read\"). Only works with --print mode.',\n )\n .option(\n '--disallowedTools, --disallowed-tools <tools...>',\n 'Comma or space-separated list of tool names to deny (e.g. \"Bash(git:*) Edit\")',\n )\n .option(\n '--mcp-config <configs...>',\n 'Load MCP servers from JSON files or strings (space-separated)',\n )\n .option('--system-prompt <prompt>', 'System prompt to use for the session')\n .option(\n '--append-system-prompt <prompt>',\n 'Append a system prompt to the default system prompt',\n )\n .option(\n '--permission-mode <mode>',\n 'Permission mode to use for the session (choices: \"acceptEdits\", \"bypassPermissions\", \"default\", \"delegate\", \"dontAsk\", \"plan\")',\n String,\n )\n .option(\n '--permission-prompt-tool <tool>',\n 'Permission prompt tool (only works with --print, --output-format=stream-json, and --input-format=stream-json): \"stdio\"',\n String,\n )\n .option(\n '--safe',\n 'Enable strict permission checking mode (default is permissive)',\n () => true,\n )\n .option(\n '--disable-slash-commands',\n 'Disable slash commands (treat /... as plain text)',\n () => true,\n )\n .option(\n '--plugin-dir <paths...>',\n 'Load plugins from directories for this session only (repeatable)',\n (value, previous: string[] | undefined) => {\n const prev = Array.isArray(previous) ? previous : []\n const next = Array.isArray(value) ? value : [value]\n return [...prev, ...next].filter(Boolean)\n },\n [],\n )\n .option(\n '--model <model>',\n \"Model for the current session. Provide an alias for the latest model (e.g. 'sonnet' or 'opus') or a model's full name.\",\n String,\n )\n .option(\n '--agent <agent>',\n \"Agent for the current session. Overrides the 'agent' setting.\",\n String,\n )\n .option(\n '--betas <betas...>',\n 'Beta headers to include in API requests (API key users only)',\n )\n .option(\n '--fallback-model <model>',\n 'Enable automatic fallback to specified model when default model is overloaded (only works with --print)',\n String,\n )\n .option(\n '--settings <file-or-json>',\n 'Path to a settings JSON file or a JSON string to load additional settings from',\n String,\n )\n .option(\n '--add-dir <directories...>',\n 'Additional directories to allow tool access to',\n )\n .option(\n '--ide',\n 'Automatically connect to IDE on startup if exactly one valid IDE is available',\n () => true,\n )\n .addOption(\n new Option(\n '--web',\n 'Start local daemon and show a WebUI URL (interactive mode only)',\n ).hideHelp(),\n )\n .addOption(\n new Option(\n '--web-host <host>',\n 'WebUI daemon host (default: 127.0.0.1)',\n ).hideHelp(),\n )\n .addOption(\n new Option(\n '--web-port <port>',\n 'WebUI daemon port (default: 0 for random free port)',\n ).hideHelp(),\n )\n .option(\n '--strict-mcp-config',\n 'Only use MCP servers from --mcp-config, ignoring all other MCP configurations',\n () => true,\n )\n .option(\n '--agents <json>',\n `JSON object defining custom agents (e.g. '{\"reviewer\": {\"description\": \"Reviews code\", \"prompt\": \"You are a code reviewer\"}}')`,\n String,\n )\n .option(\n '--setting-sources <sources>',\n 'Comma-separated list of setting sources to load (user, project, local).',\n String,\n )\n .option(\n '-r, --resume [value]',\n 'Resume a conversation by session ID or session name (omit value to open selector)',\n )\n .option(\n '-c, --continue',\n 'Continue the most recent conversation',\n () => true,\n )\n .option(\n '--fork-session',\n 'When resuming/continuing, create a new session ID instead of reusing the original (use with --resume or --continue)',\n () => true,\n )\n .option(\n '--no-session-persistence',\n 'Disable session persistence - sessions will not be saved to disk and cannot be resumed (only works with --print)',\n )\n .option(\n '--session-id <uuid>',\n 'Use a specific session ID for the conversation (must be a valid UUID)',\n String,\n )\n .action(\n createRootAction({\n stdinContent,\n renderContext,\n renderContextWithExitOnCtrlC,\n }),\n )\n .version(MACRO.VERSION, '-v, --version')\n\n registerConfigCommands(program)\n registerModelsCommands(program)\n registerAgentsCommands(program)\n registerPluginCommands(program)\n registerApprovedToolsCommands(program)\n registerMcpCommands(program)\n registerDoctorCommand(program)\n registerUpdateCommand(program)\n registerLogCommands(program, renderContextWithExitOnCtrlC)\n registerContextCommands(program)\n\n return program\n}\n", "import { cwd } from 'process'\nimport type { Command } from '@commander-js/extra-typings'\n\nimport { PRODUCT_COMMAND } from '#core/constants/product'\nimport {\n deleteConfigForCLI,\n getConfigForCLI,\n listConfigForCLI,\n setConfigForCLI,\n} from '#config'\nimport { setup } from '../setup'\n\nexport function registerConfigCommands(program: Command): void {\n // Config\n const config = program\n .command('config')\n .description(\n `Manage configuration (eg. ${PRODUCT_COMMAND} config set -g theme dark)`,\n )\n\n config\n .command('get <key>')\n .description('Get a config value')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option('-g, --global', 'Use global config')\n .action(async (key, { cwd, global }) => {\n await setup(cwd, false)\n console.log(getConfigForCLI(key, global ?? false))\n process.exit(0)\n })\n\n config\n .command('set <key> <value>')\n .description('Set a config value')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option('-g, --global', 'Use global config')\n .action(async (key, value, { cwd, global }) => {\n await setup(cwd, false)\n setConfigForCLI(key, value, global ?? false)\n console.log(`Set ${key} to ${value}`)\n process.exit(0)\n })\n\n config\n .command('remove <key>')\n .description('Remove a config value')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option('-g, --global', 'Use global config')\n .action(async (key, { cwd, global }) => {\n await setup(cwd, false)\n deleteConfigForCLI(key, global ?? false)\n console.log(`Removed ${key}`)\n process.exit(0)\n })\n\n config\n .command('list')\n .description('List all config values')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option('-g, --global', 'Use global config', false)\n .action(async ({ cwd, global }) => {\n await setup(cwd, false)\n console.log(\n JSON.stringify(\n global ? listConfigForCLI(true) : listConfigForCLI(false),\n null,\n 2,\n ),\n )\n process.exit(0)\n })\n}\n", "import { promises as fs } from 'fs'\nimport { join } from 'path'\nimport { logError } from './log'\nimport { CACHE_PATHS } from './log'\n\nconst THIRTY_DAYS_MS = 30 * 24 * 60 * 60 * 1000\n\nexport type CleanupResult = {\n messages: number\n errors: number\n}\n\nexport function convertFileNameToDate(filename: string): Date {\n const isoStr = filename\n .split('.')[0]!\n .replace(/T(\\d{2})-(\\d{2})-(\\d{2})-(\\d{3})Z/, 'T$1:$2:$3.$4Z')\n return new Date(isoStr)\n}\n\nexport async function cleanupOldMessageFiles(): Promise<CleanupResult> {\n const messagePath = CACHE_PATHS.messages()\n const errorPath = CACHE_PATHS.errors()\n const thirtyDaysAgo = new Date(Date.now() - THIRTY_DAYS_MS)\n const deletedCounts: CleanupResult = { messages: 0, errors: 0 }\n\n for (const path of [messagePath, errorPath]) {\n try {\n const files = await fs.readdir(path)\n\n for (const file of files) {\n try {\n // Convert filename format where all ':.' were replaced with '-'\n const timestamp = convertFileNameToDate(file)\n if (timestamp < thirtyDaysAgo) {\n await fs.unlink(join(path, file))\n // Increment the appropriate counter\n if (path === messagePath) {\n deletedCounts.messages++\n } else {\n deletedCounts.errors++\n }\n }\n } catch (error: unknown) {\n // Log but continue processing other files\n logError(\n `Failed to process file ${file}: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }\n } catch (error: unknown) {\n // Ignore if directory doesn't exist\n if (\n error instanceof Error &&\n 'code' in error &&\n error.code !== 'ENOENT'\n ) {\n logError(\n `Failed to cleanup directory ${path}: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n }\n }\n\n return deletedCounts\n}\n\nexport function cleanupOldMessageFilesInBackground(): void {\n const immediate = setImmediate(cleanupOldMessageFiles)\n\n // Prevent the setImmediate from keeping the process alive\n immediate.unref()\n}\n", "import { getContext } from '#core/context'\nimport { getCurrentProjectConfig } from '#core/utils/config'\nimport { cleanupOldMessageFilesInBackground } from '#core/utils/cleanup'\nimport { grantReadPermissionForOriginalDir } from '#core/utils/permissions/filesystem'\nimport { setCwd, setOriginalCwd } from '#core/utils/state'\nimport { debug as debugLogger } from '#core/utils/debugLogger'\n\nexport async function setup(cwd: string, safeMode?: boolean): Promise<void> {\n // Set both current and original working directory if --cwd was provided\n if (cwd !== process.cwd()) {\n setOriginalCwd(cwd)\n }\n await setCwd(cwd)\n\n // Always grant read permissions for original working dir\n grantReadPermissionForOriginalDir()\n\n // Start watching agent configuration files for changes\n // Try ESM-friendly path first (compiled dist), then fall back to extensionless (dev/tsx)\n let agentLoader: any\n try {\n agentLoader = await import('#core/utils/agentLoader')\n } catch {\n agentLoader = await import('#core/utils/agentLoader')\n }\n const { startAgentWatcher } = agentLoader\n await startAgentWatcher(() => {\n // Cache is already cleared in the watcher, just log\n debugLogger.info('AGENTS_HOT_RELOADED', { ok: true })\n })\n\n // If --safe mode is enabled, prevent root/sudo usage for security\n if (safeMode) {\n // Check if running as root/sudo on Unix-like systems\n if (\n process.platform !== 'win32' &&\n typeof process.getuid === 'function' &&\n process.getuid() === 0\n ) {\n console.error(\n `--safe mode cannot be used with root/sudo privileges for security reasons`,\n )\n process.exit(1)\n }\n }\n\n if (process.env.NODE_ENV === 'test') {\n return\n }\n\n cleanupOldMessageFilesInBackground()\n getContext() // Pre-fetch all context data at once\n\n // Check for last session's cost and duration\n const projectConfig = getCurrentProjectConfig()\n if (\n projectConfig.lastCost !== undefined &&\n projectConfig.lastDuration !== undefined\n ) {\n // Clear the values after logging\n // saveCurrentProjectConfig({\n // ...projectConfig,\n // lastCost: undefined,\n // lastAPIDuration: undefined,\n // lastDuration: undefined,\n // lastSessionId: undefined,\n // })\n }\n\n // Skip interactive auto-updater permission prompts during startup\n // Users can still run the doctor command manually if desired.\n}\n", "import { cwd } from 'process'\nimport type { Command } from '@commander-js/extra-typings'\n\nimport { PRODUCT_COMMAND } from '#core/constants/product'\nimport { getContext, removeContext, setContext } from '#core/context'\nimport { setup } from '../setup'\n\nfunction omitKeys<T extends Record<string, unknown>, K extends keyof T>(\n input: T,\n ...keys: K[]\n): Omit<T, K> {\n const result: Partial<T> = { ...input }\n for (const key of keys) {\n delete result[key]\n }\n return result as Omit<T, K>\n}\n\nexport function registerContextCommands(program: Command): void {\n // legacy context (kept for backward compatibility)\n const context = program\n .command('context')\n .description(\n `Set static context (eg. ${PRODUCT_COMMAND} context add-file ./src/*.py)`,\n )\n\n context\n .command('get <key>')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .description('Get a value from context')\n .action(async (key, { cwd }) => {\n await setup(cwd, false)\n\n const context = omitKeys(\n await getContext(),\n 'codeStyle',\n 'directoryStructure',\n )\n console.log(context[key])\n process.exit(0)\n })\n\n context\n .command('set <key> <value>')\n .description('Set a value in context')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .action(async (key, value, { cwd }) => {\n await setup(cwd, false)\n\n setContext(key, value)\n console.log(`Set context.${key} to \\\"${value}\\\"`)\n process.exit(0)\n })\n\n context\n .command('list')\n .description('List all context values')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .action(async ({ cwd }) => {\n await setup(cwd, false)\n\n const context = omitKeys(\n await getContext(),\n 'codeStyle',\n 'directoryStructure',\n 'gitStatus',\n )\n console.log(JSON.stringify(context, null, 2))\n process.exit(0)\n })\n\n context\n .command('remove <key>')\n .description('Remove a value from context')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .action(async (key, { cwd }) => {\n await setup(cwd, false)\n\n removeContext(key)\n console.log(`Removed context.${key}`)\n process.exit(0)\n })\n}\n", "import { existsSync } from 'node:fs'\nimport { cwd } from 'process'\nimport type { Command } from '@commander-js/extra-typings'\n\nimport { PRODUCT_NAME } from '#core/constants/product'\nimport { startMCPServer } from '#host-mcp'\n\nimport { setup } from '../../setup'\n\nexport function registerMcpServeCommand(args: {\n program: Command\n mcp: Command\n}): void {\n args.mcp\n .command('serve')\n .description(`Start the ${PRODUCT_NAME} MCP server`)\n .action(async () => {\n const providedCwd = (args.program.opts() as { cwd?: string }).cwd ?? cwd()\n\n if (!existsSync(providedCwd)) {\n console.error(`Error: Directory ${providedCwd} does not exist`)\n process.exit(1)\n }\n\n try {\n await setup(providedCwd, false)\n await startMCPServer(providedCwd)\n } catch (error) {\n console.error('Error: Failed to start MCP server:', error)\n process.exit(1)\n }\n })\n}\n", "import { ensureConfigScope } from '#core/mcp/client'\n\nexport type McpCliTransport = 'stdio' | 'sse' | 'http'\n\nexport function looksLikeMcpUrl(value: string): boolean {\n const trimmed = value.trim()\n if (!trimmed) return false\n\n if (/^(https?|wss?):\\/\\//i.test(trimmed)) return true\n if (/^localhost(?::\\d+)?(\\/|$)/i.test(trimmed)) return true\n if (/^\\d{1,3}(?:\\.\\d{1,3}){3}(?::\\d+)?(\\/|$)/.test(trimmed)) return true\n return trimmed.endsWith('/sse') || trimmed.endsWith('/mcp')\n}\n\nexport function parseMcpHeaders(\n raw: string[] | undefined,\n): Record<string, string> | undefined {\n if (!raw || raw.length === 0) return undefined\n const headers: Record<string, string> = {}\n for (const item of raw) {\n const idx = item.indexOf(':')\n if (idx === -1) {\n throw new Error(\n `Invalid header format: \"${item}\". Expected format: \"Header-Name: value\"`,\n )\n }\n const key = item.slice(0, idx).trim()\n const value = item.slice(idx + 1).trim()\n if (!key) {\n throw new Error(`Invalid header: \"${item}\". Header name cannot be empty.`)\n }\n headers[key] = value\n }\n return headers\n}\n\nexport function normalizeMcpScopeForCli(scope: string | undefined): {\n scope: ReturnType<typeof ensureConfigScope>\n display: string\n} {\n const raw = (scope ?? 'local').trim() || 'local'\n\n // Scope mapping:\n // - local => per-project config (private to the user)\n // - user => global config (available in all projects)\n // - project => .mcp.json (shared via repo)\n if (raw === 'local')\n return { scope: ensureConfigScope('project'), display: 'local' }\n if (raw === 'user')\n return { scope: ensureConfigScope('global'), display: 'user' }\n if (raw === 'project')\n return { scope: ensureConfigScope('mcpjson'), display: 'project' }\n\n // Backwards-compatible aliases\n if (raw === 'global')\n return { scope: ensureConfigScope('global'), display: 'user' }\n if (raw === 'projectConfig' || raw === 'project-config') {\n return { scope: ensureConfigScope('project'), display: 'local' }\n }\n\n return { scope: ensureConfigScope(raw), display: raw }\n}\n\nexport function normalizeMcpTransport(transport: string | undefined): {\n transport: McpCliTransport\n explicit: boolean\n} {\n if (!transport) return { transport: 'stdio', explicit: false }\n const normalized = transport.trim()\n if (normalized === 'stdio' || normalized === 'sse' || normalized === 'http') {\n return { transport: normalized, explicit: true }\n }\n throw new Error(\n `Invalid transport type: ${transport}. Must be one of: stdio, sse, http`,\n )\n}\n", "import type { Command } from '@commander-js/extra-typings'\n\nimport { PRODUCT_COMMAND } from '#core/constants/product'\nimport { addMcpServer, parseEnvVars } from '#core/mcp/client'\nimport {\n looksLikeMcpUrl,\n normalizeMcpScopeForCli,\n normalizeMcpTransport,\n parseMcpHeaders,\n} from '#core/services/mcpCliUtils'\n\nexport function registerMcpServerAddCommands(args: {\n mcp: Command\n program: Command\n}): void {\n args.mcp\n .command('add-sse <name> <url>')\n .description('Add an SSE server')\n .option(\n '-s, --scope <scope>',\n 'Configuration scope (local, user, or project)',\n 'local',\n )\n .option(\n '-H, --header <header...>',\n 'Set headers (e.g. -H \"X-Api-Key: abc123\" -H \"X-Custom: value\")',\n )\n .action(async (name, url, options) => {\n try {\n const scopeInfo = normalizeMcpScopeForCli(options.scope)\n const headers = parseMcpHeaders(options.header)\n\n addMcpServer(\n name,\n { type: 'sse', url, ...(headers ? { headers } : {}) },\n scopeInfo.scope,\n )\n console.log(\n `Added SSE MCP server ${name} with URL: ${url} to ${scopeInfo.display} config`,\n )\n if (headers) {\n console.log(`Headers: ${JSON.stringify(headers, null, 2)}`)\n }\n process.exit(0)\n } catch (error) {\n console.error((error as Error).message)\n process.exit(1)\n }\n })\n\n args.mcp\n .command('add-http <name> <url>')\n .description('Add a Streamable HTTP MCP server')\n .option(\n '-s, --scope <scope>',\n 'Configuration scope (local, user, or project)',\n 'local',\n )\n .option(\n '-H, --header <header...>',\n 'Set headers (e.g. -H \"X-Api-Key: abc123\" -H \"X-Custom: value\")',\n )\n .action(async (name, url, options) => {\n try {\n const scopeInfo = normalizeMcpScopeForCli(options.scope)\n const headers = parseMcpHeaders(options.header)\n addMcpServer(\n name,\n { type: 'http', url, ...(headers ? { headers } : {}) },\n scopeInfo.scope,\n )\n console.log(\n `Added HTTP MCP server ${name} with URL: ${url} to ${scopeInfo.display} config`,\n )\n if (headers) {\n console.log(`Headers: ${JSON.stringify(headers, null, 2)}`)\n }\n process.exit(0)\n } catch (error) {\n console.error((error as Error).message)\n process.exit(1)\n }\n })\n\n args.mcp\n .command('add-ws <name> <url>')\n .description('Add a WebSocket MCP server')\n .option(\n '-s, --scope <scope>',\n 'Configuration scope (local, user, or project)',\n 'local',\n )\n .action(async (name, url, options) => {\n try {\n const scopeInfo = normalizeMcpScopeForCli(options.scope)\n addMcpServer(name, { type: 'ws', url }, scopeInfo.scope)\n console.log(\n `Added WebSocket MCP server ${name} with URL ${url} to ${scopeInfo.display} config`,\n )\n process.exit(0)\n } catch (error) {\n console.error((error as Error).message)\n process.exit(1)\n }\n })\n\n args.mcp\n .command('add [name] [commandOrUrl] [args...]')\n .description('Add a server (run without arguments for interactive wizard)')\n .option(\n '-s, --scope <scope>',\n 'Configuration scope (local, user, or project)',\n 'local',\n )\n .option(\n '-t, --transport <transport>',\n 'MCP transport (stdio, sse, or http)',\n )\n .option(\n '-H, --header <header...>',\n 'Set headers (e.g. -H \"X-Api-Key: abc123\" -H \"X-Custom: value\")',\n )\n .option(\n '-e, --env <env...>',\n 'Set environment variables (e.g. -e KEY=value)',\n )\n .action(async (name, commandOrUrl, args, options) => {\n try {\n if (!name) {\n console.log('Interactive wizard mode: Enter the server details')\n const { createInterface } = await import('readline')\n const rl = createInterface({\n input: process.stdin,\n output: process.stdout,\n })\n\n const question = (query: string) =>\n new Promise<string>(resolve => rl.question(query, resolve))\n\n const serverName = await question('Server name: ')\n if (!serverName) {\n console.error('Error: Server name is required')\n rl.close()\n process.exit(1)\n }\n\n const serverType = await question(\n 'Server type (stdio, http, sse, ws) [stdio]: ',\n )\n const type =\n serverType && ['stdio', 'http', 'sse', 'ws'].includes(serverType)\n ? serverType\n : 'stdio'\n\n const prompt = type === 'stdio' ? 'Command: ' : 'URL: '\n const commandOrUrlValue = await question(prompt)\n if (!commandOrUrlValue) {\n console.error(\n `Error: ${type === 'stdio' ? 'Command' : 'URL'} is required`,\n )\n rl.close()\n process.exit(1)\n }\n\n let serverArgs: string[] = []\n let serverEnv: Record<string, string> = {}\n\n if (type === 'stdio') {\n const argsStr = await question(\n 'Command arguments (space-separated): ',\n )\n serverArgs = argsStr ? argsStr.split(' ').filter(Boolean) : []\n\n const envStr = await question(\n 'Environment variables (KEY=value, comma-separated): ',\n )\n if (envStr) {\n const envPairs = envStr.split(',').filter(Boolean)\n serverEnv = parseEnvVars(envPairs.map(pair => pair))\n }\n }\n\n const scopeStr = await question(\n 'Scope (local, user, project) [local]: ',\n )\n const scope =\n scopeStr && ['local', 'user', 'project'].includes(scopeStr)\n ? scopeStr\n : 'local'\n\n rl.close()\n\n const scopeInfo = normalizeMcpScopeForCli(scope)\n\n switch (type) {\n case 'http':\n addMcpServer(\n serverName,\n { type: 'http', url: commandOrUrlValue },\n scopeInfo.scope,\n )\n console.log(\n `Added HTTP MCP server ${serverName} with URL: ${commandOrUrlValue} to ${scopeInfo.display} config`,\n )\n break\n case 'sse':\n addMcpServer(\n serverName,\n { type: 'sse', url: commandOrUrlValue },\n scopeInfo.scope,\n )\n console.log(\n `Added SSE MCP server ${serverName} with URL: ${commandOrUrlValue} to ${scopeInfo.display} config`,\n )\n break\n case 'ws':\n addMcpServer(\n serverName,\n { type: 'ws', url: commandOrUrlValue },\n scopeInfo.scope,\n )\n console.log(\n `Added WebSocket MCP server ${serverName} with URL: ${commandOrUrlValue} to ${scopeInfo.display} config`,\n )\n break\n case 'stdio':\n default:\n addMcpServer(\n serverName,\n {\n type: 'stdio',\n command: commandOrUrlValue,\n args: serverArgs,\n env: serverEnv,\n },\n scopeInfo.scope,\n )\n console.log(\n `Added stdio MCP server ${serverName} with command: ${commandOrUrlValue} ${serverArgs.join(' ')} to ${scopeInfo.display} config`,\n )\n break\n }\n\n process.exit(0)\n } else if (name && commandOrUrl) {\n const scopeInfo = normalizeMcpScopeForCli(options.scope)\n const transportInfo = normalizeMcpTransport(options.transport)\n\n if (transportInfo.transport === 'stdio') {\n if (options.header?.length) {\n throw new Error(\n '--header can only be used with --transport http or --transport sse',\n )\n }\n\n const env = parseEnvVars(options.env)\n if (!transportInfo.explicit && looksLikeMcpUrl(commandOrUrl)) {\n console.warn(\n `Warning: \"${commandOrUrl}\" looks like a URL. Default transport is stdio, so it will be treated as a command.`,\n )\n console.warn(\n `If you meant to add an HTTP MCP server, run: ${PRODUCT_COMMAND} mcp add ${name} ${commandOrUrl} --transport http`,\n )\n console.warn(\n `If you meant to add a legacy SSE MCP server, run: ${PRODUCT_COMMAND} mcp add ${name} ${commandOrUrl} --transport sse`,\n )\n }\n\n addMcpServer(\n name,\n { type: 'stdio', command: commandOrUrl, args: args || [], env },\n scopeInfo.scope,\n )\n\n console.log(\n `Added stdio MCP server ${name} with command: ${commandOrUrl} ${(args || []).join(' ')} to ${scopeInfo.display} config`,\n )\n } else {\n if (options.env?.length) {\n throw new Error('--env is only supported for stdio MCP servers')\n }\n if (args?.length) {\n throw new Error(\n 'Unexpected arguments. URL-based MCP servers do not accept command args.',\n )\n }\n\n const headers = parseMcpHeaders(options.header)\n addMcpServer(\n name,\n {\n type: transportInfo.transport,\n url: commandOrUrl,\n ...(headers ? { headers } : {}),\n },\n scopeInfo.scope,\n )\n\n const kind = transportInfo.transport.toUpperCase()\n console.log(\n `Added ${kind} MCP server ${name} with URL: ${commandOrUrl} to ${scopeInfo.display} config`,\n )\n if (headers) {\n console.log(`Headers: ${JSON.stringify(headers, null, 2)}`)\n }\n }\n } else {\n console.error(\n 'Error: Missing required arguments. Either provide no arguments for interactive mode or specify name and command/URL.',\n )\n process.exit(1)\n }\n\n process.exit(0)\n } catch (error) {\n console.error((error as Error).message)\n process.exit(1)\n }\n })\n}\n", "import type { Command } from '@commander-js/extra-typings'\n\nimport { addMcpServer, ensureConfigScope } from '#core/mcp/client'\n\nexport function registerMcpServerAddJsonCommand(args: { mcp: Command }): void {\n args.mcp\n .command('add-json <name> <json>')\n .description('Add an MCP server with a JSON string')\n .option(\n '-s, --scope <scope>',\n 'Configuration scope (project, global, or mcprc)',\n 'project',\n )\n .action(async (name, jsonStr, options) => {\n try {\n const scope = ensureConfigScope(options.scope)\n\n let serverConfig: any\n try {\n serverConfig = JSON.parse(jsonStr)\n } catch {\n console.error('Error: Invalid JSON string')\n process.exit(1)\n }\n\n if (\n !serverConfig ||\n typeof serverConfig !== 'object' ||\n !('type' in serverConfig)\n ) {\n console.error('Error: Invalid server configuration format')\n process.exit(1)\n }\n\n addMcpServer(name, serverConfig, scope)\n\n switch (serverConfig.type) {\n case 'http':\n case 'sse':\n case 'sse-ide':\n case 'ws':\n case 'ws-ide':\n console.log(\n `Added ${serverConfig.type.toUpperCase()} MCP server ${name} with URL: ${serverConfig.url} to ${scope} config`,\n )\n break\n case 'stdio':\n default:\n console.log(\n `Added stdio MCP server ${name} with command: ${serverConfig.command} ${(serverConfig.args || []).join(' ')} to ${scope} config`,\n )\n break\n }\n\n process.exit(0)\n } catch (error) {\n console.error((error as Error).message)\n process.exit(1)\n }\n })\n}\n", "import type { Command } from '@commander-js/extra-typings'\n\nimport { getProjectMcpServerDefinitions } from '#config'\nimport {\n getClients,\n getMcprcServerStatus,\n getMcpServer,\n} from '#core/mcp/client'\n\nfunction scopeDisplayForCli(scope: string): string {\n switch (scope) {\n case 'project':\n return 'local'\n case 'global':\n return 'user'\n case 'mcpjson':\n return 'project'\n case 'mcprc':\n return 'mcprc'\n default:\n return scope\n }\n}\n\nexport function registerMcpServerGetCommand(args: { mcp: Command }): void {\n args.mcp\n .command('get <name>')\n .description('Get details about an MCP server')\n .action(async (name: string) => {\n try {\n const server = getMcpServer(name)\n if (!server) {\n console.error(`No MCP server found with name: ${name}`)\n process.exit(1)\n }\n\n const projectFileServers = getProjectMcpServerDefinitions()\n const clients = await getClients()\n const client = clients.find(c => c.name === name)\n\n const status =\n client?.type === 'connected'\n ? 'connected'\n : client?.type === 'failed'\n ? 'failed'\n : projectFileServers.servers[name]\n ? (() => {\n const approval = getMcprcServerStatus(name)\n if (approval === 'pending') return 'pending'\n if (approval === 'rejected') return 'rejected'\n return 'disconnected'\n })()\n : 'disconnected'\n\n const scopeDisplay = scopeDisplayForCli(server.scope)\n\n console.log(`${name}:`)\n console.log(` Status: ${status}`)\n console.log(` Scope: ${scopeDisplay}`)\n\n const printHeaders = (headers: Record<string, string> | undefined) => {\n if (!headers || Object.keys(headers).length === 0) return\n console.log(' Headers:')\n for (const [key, value] of Object.entries(headers)) {\n console.log(` ${key}: ${value}`)\n }\n }\n\n switch (server.type) {\n case 'http':\n console.log(` Type: http`)\n console.log(` URL: ${server.url}`)\n printHeaders(server.headers)\n break\n case 'sse':\n console.log(` Type: sse`)\n console.log(` URL: ${server.url}`)\n printHeaders(server.headers)\n break\n case 'sse-ide':\n console.log(` Type: sse-ide`)\n console.log(` URL: ${server.url}`)\n console.log(` IDE: ${server.ideName}`)\n printHeaders(server.headers)\n break\n case 'ws':\n console.log(` Type: ws`)\n console.log(` URL: ${server.url}`)\n break\n case 'ws-ide':\n console.log(` Type: ws-ide`)\n console.log(` URL: ${server.url}`)\n console.log(` IDE: ${server.ideName}`)\n break\n case 'stdio':\n default:\n console.log(` Type: stdio`)\n console.log(` Command: ${server.command}`)\n console.log(` Args: ${(server.args || []).join(' ')}`)\n if (server.env) {\n console.log(' Environment:')\n for (const [key, value] of Object.entries(server.env)) {\n console.log(` ${key}=${value}`)\n }\n }\n break\n }\n process.exit(0)\n } catch (error) {\n console.error((error as Error).message)\n process.exit(1)\n }\n })\n}\n", "import type { Command } from '@commander-js/extra-typings'\n\nimport { PRODUCT_COMMAND } from '#core/constants/product'\nimport {\n getClients,\n getMcprcServerStatus,\n listMCPServers,\n} from '#core/mcp/client'\nimport { getProjectMcpServerDefinitions } from '#config'\n\nexport function registerMcpServerListCommand(args: { mcp: Command }): void {\n args.mcp\n .command('list')\n .description('List configured MCP servers')\n .action(async () => {\n try {\n const servers = listMCPServers()\n if (Object.keys(servers).length === 0) {\n console.log(\n `No MCP servers configured. Use \\`${PRODUCT_COMMAND} mcp add\\` to add a server.`,\n )\n process.exit(0)\n }\n\n const projectFileServers = getProjectMcpServerDefinitions()\n const clients = await getClients()\n const clientByName = new Map<string, (typeof clients)[number]>()\n for (const client of clients) {\n clientByName.set(client.name, client)\n }\n\n const names = Object.keys(servers).sort((a, b) => a.localeCompare(b))\n for (const name of names) {\n const server = servers[name]!\n\n const client = clientByName.get(name)\n const status =\n client?.type === 'connected'\n ? 'connected'\n : client?.type === 'failed'\n ? 'failed'\n : projectFileServers.servers[name]\n ? (() => {\n const approval = getMcprcServerStatus(name)\n if (approval === 'pending') return 'pending'\n if (approval === 'rejected') return 'rejected'\n return 'disconnected'\n })()\n : 'disconnected'\n\n const summary = (() => {\n switch (server.type) {\n case 'http':\n return `${server.url} (http)`\n case 'sse':\n return `${server.url} (sse)`\n case 'sse-ide':\n return `${server.url} (sse-ide)`\n case 'ws':\n return `${server.url} (ws)`\n case 'ws-ide':\n return `${server.url} (ws-ide)`\n case 'stdio':\n default:\n return `${server.command} ${(server.args || []).join(' ')} (stdio)`\n }\n })()\n\n console.log(`${name}: ${summary} [${status}]`)\n }\n\n process.exit(0)\n } catch (error) {\n console.error((error as Error).message)\n process.exit(1)\n }\n })\n}\n", "import type { Command } from '@commander-js/extra-typings'\n\nimport {\n getCurrentProjectConfig,\n getGlobalConfig,\n getProjectMcpServerDefinitions,\n} from '#config'\nimport { PRODUCT_COMMAND } from '#core/constants/product'\nimport { ensureConfigScope, removeMcpServer } from '#core/mcp/client'\nimport { normalizeMcpScopeForCli } from '#core/services/mcpCliUtils'\n\nexport function registerMcpServerRemoveCommand(args: { mcp: Command }): void {\n args.mcp\n .command('remove <name>')\n .description('Remove an MCP server')\n .option(\n '-s, --scope <scope>',\n 'Configuration scope (local, user, or project)',\n )\n .action(async (name: string, options: { scope?: string }) => {\n try {\n if (options.scope) {\n const scopeInfo = normalizeMcpScopeForCli(options.scope)\n removeMcpServer(name, scopeInfo.scope)\n console.log(\n `Removed MCP server ${name} from ${scopeInfo.display} config`,\n )\n process.exit(0)\n }\n\n const matches: Array<{\n scope: ReturnType<typeof ensureConfigScope>\n display: string\n }> = []\n\n const projectConfig = getCurrentProjectConfig()\n if (projectConfig.mcpServers?.[name]) {\n matches.push({\n scope: ensureConfigScope('project'),\n display: 'local',\n })\n }\n\n const globalConfig = getGlobalConfig()\n if (globalConfig.mcpServers?.[name]) {\n matches.push({ scope: ensureConfigScope('global'), display: 'user' })\n }\n\n const projectFileDefinitions = getProjectMcpServerDefinitions()\n if (projectFileDefinitions.servers[name]) {\n const source = projectFileDefinitions.sources[name]\n if (source === '.mcp.json') {\n matches.push({\n scope: ensureConfigScope('mcpjson'),\n display: 'project',\n })\n } else {\n matches.push({\n scope: ensureConfigScope('mcprc'),\n display: 'mcprc',\n })\n }\n }\n\n if (matches.length === 0) {\n throw new Error(`No MCP server found with name: ${name}`)\n }\n\n if (matches.length > 1) {\n console.error(\n `MCP server \"${name}\" exists in multiple scopes: ${matches.map(m => m.display).join(', ')}`,\n )\n console.error('Please specify which scope to remove from:')\n for (const match of matches) {\n console.error(\n ` ${PRODUCT_COMMAND} mcp remove ${name} --scope ${match.display}`,\n )\n }\n process.exit(1)\n }\n\n const match = matches[0]!\n removeMcpServer(name, match.scope)\n console.log(`Removed MCP server ${name} from ${match.display} config`)\n process.exit(0)\n } catch (error) {\n console.error((error as Error).message)\n process.exit(1)\n }\n })\n}\n", "import type { Command } from '@commander-js/extra-typings'\n\nimport type { McpServerConfig } from '#config'\nimport { addMcpServer, ensureConfigScope, getMcpServer } from '#core/mcp/client'\n\nexport function registerMcpImportClaudeDesktopCommand(args: {\n mcp: Command\n}): void {\n args.mcp\n .command('add-from-claude-desktop')\n .description(\n 'Import MCP servers from a desktop MCP host config (macOS, Windows and WSL)',\n )\n .option(\n '-s, --scope <scope>',\n 'Configuration scope (project, global, or mcprc)',\n 'project',\n )\n .action(async options => {\n try {\n const scope = ensureConfigScope(options.scope)\n const platform = process.platform\n\n const { existsSync, readFileSync } = await import('fs')\n const { join } = await import('path')\n const { exec } = await import('child_process')\n\n const isWSL =\n platform === 'linux' &&\n existsSync('/proc/version') &&\n readFileSync('/proc/version', 'utf-8')\n .toLowerCase()\n .includes('microsoft')\n\n if (platform !== 'darwin' && platform !== 'win32' && !isWSL) {\n console.error(\n 'Error: This command is only supported on macOS, Windows, and WSL',\n )\n process.exit(1)\n }\n\n let configPath: string\n if (platform === 'darwin') {\n configPath = join(\n process.env.HOME || '~',\n 'Library/Application Support/Claude/claude_desktop_config.json',\n )\n } else if (platform === 'win32') {\n configPath = join(\n process.env.APPDATA || '',\n 'Claude/claude_desktop_config.json',\n )\n } else {\n const whoamiCommand = await new Promise<string>((resolve, reject) => {\n exec(\n 'powershell.exe -Command \"whoami\"',\n (err: Error, stdout: string) => {\n if (err) reject(err)\n else resolve(stdout.trim().split('\\\\').pop() || '')\n },\n )\n })\n\n configPath = `/mnt/c/Users/${whoamiCommand}/AppData/Roaming/Claude/claude_desktop_config.json`\n }\n\n if (!existsSync(configPath)) {\n console.error(`Error: Config file not found at ${configPath}`)\n process.exit(1)\n }\n\n let config: any\n try {\n const configContent = readFileSync(configPath, 'utf-8')\n config = JSON.parse(configContent)\n } catch (err) {\n console.error(`Error reading config file: ${err}`)\n process.exit(1)\n }\n\n const mcpServers = config.mcpServers || {}\n const serverNames = Object.keys(mcpServers)\n const numServers = serverNames.length\n\n if (numServers === 0) {\n console.log('No MCP servers found in the desktop config')\n process.exit(0)\n }\n\n const ink = await import('ink')\n const reactModule = await import('react')\n const inkjsui = await import('@inkjs/ui')\n const utilsTheme = await import('#core/utils/theme')\n\n const { render } = ink\n const React = reactModule\n const { MultiSelect } = inkjsui\n const { Box, Text } = ink\n const { getTheme } = utilsTheme\n\n await new Promise<void>(resolve => {\n function ClaudeDesktopImport() {\n const { useState } = reactModule\n const [isFinished, setIsFinished] = useState(false)\n const [importResults, setImportResults] = useState(\n [] as { name: string; success: boolean }[],\n )\n const theme = getTheme()\n\n const importServers = async (selectedServers: string[]) => {\n const results: Array<{ name: string; success: boolean }> = []\n\n for (const name of selectedServers) {\n try {\n const server = mcpServers[name]\n const existingServer = getMcpServer(name)\n if (existingServer) continue\n addMcpServer(name, server as McpServerConfig, scope)\n results.push({ name, success: true })\n } catch {\n results.push({ name, success: false })\n }\n }\n\n setImportResults(results)\n setIsFinished(true)\n\n setTimeout(() => {\n resolve()\n }, 1000)\n }\n\n const handleConfirm = async (selectedServers: string[]) => {\n const existingServers = selectedServers.filter(name =>\n getMcpServer(name),\n )\n\n if (existingServers.length > 0) {\n const results: Array<{ name: string; success: boolean }> = []\n\n const newServers = selectedServers.filter(\n name => !getMcpServer(name),\n )\n for (const name of newServers) {\n try {\n const server = mcpServers[name]\n addMcpServer(name, server as McpServerConfig, scope)\n results.push({ name, success: true })\n } catch {\n results.push({ name, success: false })\n }\n }\n\n for (const name of existingServers) {\n try {\n const server = mcpServers[name]\n addMcpServer(name, server as McpServerConfig, scope)\n results.push({ name, success: true })\n } catch {\n results.push({ name, success: false })\n }\n }\n\n setImportResults(results)\n setIsFinished(true)\n\n setTimeout(() => {\n resolve()\n }, 1000)\n } else {\n await importServers(selectedServers)\n }\n }\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.kode}\n padding={1}\n width={'100%'}\n >\n <Text bold color={theme.kode}>\n Import MCP Servers from Desktop Config\n </Text>\n\n <Box marginY={1}>\n <Text>\n Found {numServers} MCP servers in the desktop config.\n </Text>\n </Box>\n\n <Text>Please select the servers you want to import:</Text>\n\n <Box marginTop={1}>\n <MultiSelect\n options={serverNames.map(name => ({\n label: name,\n value: name,\n }))}\n defaultValue={serverNames}\n onSubmit={handleConfirm}\n />\n </Box>\n </Box>\n\n <Box marginTop={0} marginLeft={3}>\n <Text dimColor>\n Space to select \u00B7 Enter to confirm \u00B7 Esc to cancel\n </Text>\n </Box>\n\n {isFinished && (\n <Box marginTop={1}>\n <Text color={theme.success}>\n Successfully imported{' '}\n {importResults.filter(r => r.success).length} MCP server\n to local config.\n </Text>\n </Box>\n )}\n </Box>\n )\n }\n\n const { unmount } = render(<ClaudeDesktopImport />)\n\n setTimeout(() => {\n unmount()\n resolve()\n }, 30_000)\n })\n\n process.exit(0)\n } catch (error) {\n console.error(`Error: ${(error as Error).message}`)\n process.exit(1)\n }\n })\n}\n", "import type { Command } from '@commander-js/extra-typings'\n\nimport { getCurrentProjectConfig, saveCurrentProjectConfig } from '#config'\nimport { PRODUCT_NAME } from '#core/constants/product'\n\nexport function registerMcpResetCommands(args: { mcp: Command }): void {\n const resetMcpChoices = () => {\n const config = getCurrentProjectConfig()\n saveCurrentProjectConfig({\n ...config,\n approvedMcprcServers: [],\n rejectedMcprcServers: [],\n })\n console.log(\n 'All project-file MCP server approvals/rejections (.mcp.json/.mcprc) have been reset.',\n )\n console.log(\n `You will be prompted for approval next time you start ${PRODUCT_NAME}.`,\n )\n process.exit(0)\n }\n\n args.mcp\n .command('reset-project-choices')\n .description(\n 'Reset approvals for project-file MCP servers (.mcp.json/.mcprc) in this project',\n )\n .action(() => {\n resetMcpChoices()\n })\n\n args.mcp\n .command('reset-mcprc-choices')\n .description(\n 'Reset approvals for project-file MCP servers (.mcp.json/.mcprc) in this project',\n )\n .action(() => {\n resetMcpChoices()\n })\n}\n", "import type { Command } from '@commander-js/extra-typings'\n\nimport { registerMcpServeCommand } from './serve'\nimport { registerMcpServerAddCommands } from './servers/add'\nimport { registerMcpServerAddJsonCommand } from './servers/addJson'\nimport { registerMcpServerGetCommand } from './servers/get'\nimport { registerMcpServerListCommand } from './servers/list'\nimport { registerMcpServerRemoveCommand } from './servers/remove'\nimport { registerMcpImportClaudeDesktopCommand } from './importClaudeDesktop'\nimport { registerMcpResetCommands } from './reset'\n\nexport function registerMcpCommands(program: Command): void {\n const mcp = program\n .command('mcp')\n .description('Configure and manage MCP servers')\n\n registerMcpServeCommand({ mcp, program })\n registerMcpServerAddCommands({ mcp, program })\n registerMcpServerRemoveCommand({ mcp })\n registerMcpServerListCommand({ mcp })\n registerMcpServerAddJsonCommand({ mcp })\n registerMcpServerGetCommand({ mcp })\n registerMcpImportClaudeDesktopCommand({ mcp })\n registerMcpResetCommands({ mcp })\n}\n", "import { readFileSync, writeFileSync } from 'node:fs'\nimport { cwd } from 'process'\nimport type { Command } from '@commander-js/extra-typings'\n\nimport {\n applyModelConfigYamlImport,\n formatModelConfigYamlForSharing,\n getGlobalConfig,\n saveGlobalConfig,\n} from '#config'\nimport { setup } from '../setup'\n\nexport function registerModelsCommands(program: Command): void {\n // Models (YAML import/export)\n\n const modelsCmd = program\n .command('models')\n .description('Import/export model profiles and pointers (YAML)')\n\n modelsCmd\n .command('export')\n .description(\n 'Export shareable model config as YAML (does not include plaintext API keys)',\n )\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option('-o, --output <path>', 'Write YAML to file instead of stdout')\n .action(async ({ cwd, output }) => {\n try {\n await setup(cwd, false)\n const yamlText = formatModelConfigYamlForSharing(getGlobalConfig())\n if (output) {\n writeFileSync(output, yamlText, 'utf-8')\n console.log(`Wrote model config YAML to ${output}`)\n } else {\n console.log(yamlText)\n }\n process.exit(0)\n } catch (error) {\n console.error((error as Error).message)\n process.exit(1)\n }\n })\n\n modelsCmd\n .command('import <file>')\n .description('Import model config YAML (merges by default)')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option('--replace', 'Replace existing model profiles instead of merging')\n .action(async (file: string, { cwd, replace }) => {\n try {\n await setup(cwd, false)\n\n const yamlText = readFileSync(file, 'utf-8')\n const { nextConfig, warnings } = applyModelConfigYamlImport(\n getGlobalConfig(),\n yamlText,\n { replace: !!replace },\n )\n saveGlobalConfig(nextConfig)\n\n // Force ModelManager reload after config change\n await import('#core/utils/model').then(({ reloadModelManager }) => {\n reloadModelManager()\n })\n\n if (warnings.length > 0) {\n console.error(warnings.join('\\n'))\n }\n console.log(`Imported model config YAML from ${file}`)\n process.exit(0)\n } catch (error) {\n console.error((error as Error).message)\n process.exit(1)\n }\n })\n\n modelsCmd\n .command('list')\n .description('List configured model profiles and pointers')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option('--json', 'Output as JSON')\n .action(async (options: any) => {\n try {\n const workingDir =\n typeof options?.cwd === 'string' ? options.cwd : cwd()\n const asJson = options?.json === true\n await setup(workingDir, false)\n const { reloadModelManager, getModelManager } =\n await import('#core/utils/model')\n reloadModelManager()\n const manager = getModelManager()\n const config = getGlobalConfig()\n\n const pointers = (['main', 'task', 'compact', 'quick'] as const).map(\n pointer => {\n const pointerId = config.modelPointers?.[pointer] ?? null\n const resolved = manager.resolveModelWithInfo(pointer)\n const profile = resolved.success ? resolved.profile : null\n return {\n pointer,\n pointerId,\n resolved: profile\n ? {\n name: profile.name,\n provider: profile.provider,\n modelName: profile.modelName,\n isActive: profile.isActive,\n }\n : null,\n error: resolved.success ? null : (resolved.error ?? null),\n }\n },\n )\n\n const profiles = (config.modelProfiles ?? []).map(p => ({\n name: p.name,\n provider: p.provider,\n modelName: p.modelName,\n baseURL: p.baseURL ?? null,\n maxTokens: p.maxTokens,\n contextLength: p.contextLength,\n reasoningEffort: p.reasoningEffort ?? null,\n isActive: p.isActive,\n createdAt: p.createdAt,\n lastUsed: typeof p.lastUsed === 'number' ? p.lastUsed : null,\n isGPT5: p.isGPT5 ?? null,\n validationStatus: p.validationStatus ?? null,\n lastValidation:\n typeof p.lastValidation === 'number' ? p.lastValidation : null,\n hasApiKey: Boolean(p.apiKey),\n }))\n\n if (asJson) {\n console.log(JSON.stringify({ pointers, profiles }, null, 2))\n process.exitCode = 0\n return\n }\n\n console.log('Model pointers:\\n')\n for (const ptr of pointers) {\n const resolvedLabel = ptr.resolved\n ? `${ptr.resolved.name} (${ptr.resolved.provider}:${ptr.resolved.modelName})`\n : '(unresolved)'\n const configured = ptr.pointerId ? ` -> ${ptr.pointerId}` : ''\n const err = ptr.error ? ` [${ptr.error}]` : ''\n console.log(` - ${ptr.pointer}${configured}: ${resolvedLabel}${err}`)\n }\n\n const active = profiles.filter(p => p.isActive)\n console.log(\n `\\nModel profiles (${active.length}/${profiles.length} active):\\n`,\n )\n for (const p of profiles.sort((a, b) => a.name.localeCompare(b.name))) {\n const status = p.isActive ? 'active' : 'inactive'\n console.log(` - ${p.name} (${status})`)\n console.log(` provider=${p.provider} modelName=${p.modelName}`)\n if (p.baseURL) console.log(` baseURL=${p.baseURL}`)\n }\n\n process.exitCode = 0\n return\n } catch (error) {\n console.error((error as Error).message)\n process.exitCode = 1\n return\n }\n })\n}\n", "import { cwd } from 'process'\nimport type { Command } from '@commander-js/extra-typings'\n\nimport { setup } from '../../setup'\n\ntype AgentsValidateOptions = {\n cwd?: string\n json?: boolean\n toolsCheck?: boolean\n}\n\nexport function registerAgentsCommands(program: Command): void {\n const agentsCmd = program\n .command('agents')\n .description('Agent utilities (validate templates, etc.)')\n\n agentsCmd\n .command('validate [paths...]')\n .description(\n 'Validate agent markdown files (defaults to user+project agent dirs)',\n )\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option('--json', 'Output as JSON')\n .option(\n '--no-tools-check',\n 'Skip validating tool names against the tool registry',\n )\n .action(\n async (paths: string[] | undefined, options: AgentsValidateOptions) => {\n try {\n const workingDir =\n typeof options?.cwd === 'string' ? options.cwd : cwd()\n await setup(workingDir, false)\n const { validateAgentTemplates } =\n await import('../../agentsValidate')\n const report = await validateAgentTemplates({\n cwd: workingDir,\n paths: Array.isArray(paths) ? paths : [],\n checkTools: options.toolsCheck !== false,\n })\n\n if (options.json) {\n console.log(JSON.stringify(report, null, 2))\n process.exitCode = report.ok ? 0 : 1\n return\n }\n\n console.log(\n `Validated ${report.results.length} agent file(s): ${report.errorCount} error(s), ${report.warningCount} warning(s)\\n`,\n )\n\n for (const r of report.results) {\n const rel = r.filePath\n const title = r.agentType ? `${r.agentType}` : '(unknown agent)'\n console.log(`${title} \u2014 ${rel}`)\n if (r.model) {\n const normalized = r.normalizedModel\n ? ` (normalized: ${r.normalizedModel})`\n : ''\n console.log(` model: ${r.model}${normalized}`)\n }\n if (r.issues.length === 0) {\n console.log(` OK`)\n } else {\n for (const issue of r.issues) {\n console.log(` - ${issue.level}: ${issue.message}`)\n }\n }\n console.log('')\n }\n\n process.exitCode = report.ok ? 0 : 1\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n process.exitCode = 1\n }\n },\n )\n}\n", "import {\n ProjectConfig,\n getCurrentProjectConfig as getCurrentProjectConfigDefault,\n saveCurrentProjectConfig as saveCurrentProjectConfigDefault,\n} from '#core/utils/config'\n\nexport type ProjectConfigHandler = {\n getCurrentProjectConfig: () => ProjectConfig\n saveCurrentProjectConfig: (config: ProjectConfig) => void\n}\n\n// Default config handler using the real implementation\nconst defaultConfigHandler: ProjectConfigHandler = {\n getCurrentProjectConfig: getCurrentProjectConfigDefault,\n saveCurrentProjectConfig: saveCurrentProjectConfigDefault,\n}\n\n/**\n * Handler for the 'approved-tools list' command\n */\nexport function handleListApprovedTools(\n cwd: string,\n projectConfigHandler: ProjectConfigHandler = defaultConfigHandler,\n): string {\n const projectConfig = projectConfigHandler.getCurrentProjectConfig()\n return `Allowed tools for ${cwd}:\\n${projectConfig.allowedTools.join('\\n')}`\n}\n\n/**\n * Handler for the 'approved-tools remove' command\n */\nexport function handleRemoveApprovedTool(\n tool: string,\n projectConfigHandler: ProjectConfigHandler = defaultConfigHandler,\n): { success: boolean; message: string } {\n const projectConfig = projectConfigHandler.getCurrentProjectConfig()\n const originalToolCount = projectConfig.allowedTools.length\n const updatedAllowedTools = projectConfig.allowedTools.filter(t => t !== tool)\n\n if (originalToolCount !== updatedAllowedTools.length) {\n projectConfig.allowedTools = updatedAllowedTools\n projectConfigHandler.saveCurrentProjectConfig(projectConfig)\n return {\n success: true,\n message: `Removed ${tool} from the list of approved tools`,\n }\n } else {\n return {\n success: false,\n message: `${tool} was not in the list of approved tools`,\n }\n }\n}\n", "import type { Command } from '@commander-js/extra-typings'\n\nimport { getCwd } from '#core/utils/state'\nimport {\n handleListApprovedTools,\n handleRemoveApprovedTool,\n} from '#cli-commands/builtin/approvedTools'\n\nexport function registerApprovedToolsCommands(program: Command): void {\n const approvedToolsCmd = program\n .command('approved-tools')\n .description('Manage approved tools')\n\n approvedToolsCmd\n .command('list')\n .description('List all approved tools')\n .action(() => {\n const result = handleListApprovedTools(getCwd())\n console.log(result)\n process.exit(0)\n })\n\n approvedToolsCmd\n .command('remove <tool>')\n .description('Remove a tool from the list of approved tools')\n .action((tool: string) => {\n const result = handleRemoveApprovedTool(tool)\n console.log(result.message)\n process.exit(result.success ? 0 : 1)\n })\n}\n", "import React from 'react'\nimport type { RenderOptions } from 'ink'\n\ntype RenderFn = (\n element: React.ReactElement,\n options?: RenderOptions,\n) => { unmount: () => void }\n\nexport async function renderRepl(\n props: any,\n renderContext: RenderOptions | undefined,\n deps?: { render?: RenderFn; REPL?: React.ComponentType<any> },\n): Promise<void> {\n const render = deps?.render ?? (await import('ink')).render\n const REPL = deps?.REPL ?? (await import('#ui-ink/screens/REPL')).REPL\n render(<REPL {...props} />, renderContext)\n}\n\nexport function renderResumeConversationSelector(\n props: any,\n renderContext: RenderOptions | undefined,\n): void {\n const context: { unmount?: () => void } = {}\n ;(async () => {\n const { render } = await import('ink')\n const { ResumeConversation } =\n await import('#ui-ink/screens/ResumeConversation')\n const { unmount } = render(\n <ResumeConversation {...props} context={context} />,\n renderContext,\n )\n context.unmount = unmount\n })()\n}\n\nexport async function renderDoctorScreen(): Promise<void> {\n await new Promise<void>(resolve => {\n ;(async () => {\n const { render } = await import('ink')\n const { Doctor } = await import('#ui-ink/screens/Doctor')\n render(<Doctor onDone={() => resolve()} doctorMode={true} />)\n })()\n })\n}\n\nexport function renderLogListScreen(\n props: { type: 'messages' | 'errors'; logNumber?: number },\n renderContext: RenderOptions | undefined,\n): void {\n const context: { unmount?: () => void } = {}\n ;(async () => {\n const { render } = await import('ink')\n const { LogList } = await import('#ui-ink/screens/LogList')\n const { unmount } = render(\n <LogList\n context={context}\n type={props.type}\n logNumber={props.logNumber}\n />,\n renderContext,\n )\n context.unmount = unmount\n })()\n}\n", "import type { Command } from '@commander-js/extra-typings'\n\nimport { PRODUCT_NAME } from '#core/constants/product'\n\nimport { renderDoctorScreen } from '../../interactive/renderers'\n\nexport function registerDoctorCommand(program: Command): void {\n program\n .command('doctor')\n .description(`Check the health of your ${PRODUCT_NAME} installation`)\n .action(async () => {\n await renderDoctorScreen()\n process.exit(0)\n })\n}\n", "import { existsSync } from 'node:fs'\nimport { cwd as processCwd } from 'process'\n\nimport type { Command } from '@commander-js/extra-typings'\nimport type { RenderOptions } from 'ink'\n\nimport { getCurrentProjectConfig } from '#config'\nimport { assertMinVersion } from '#core/utils/autoUpdater'\nimport { isDefaultSlowAndCapableModel } from '#core/utils/model'\nimport {\n dateToFilename,\n getNextAvailableLogForkNumber,\n loadLogList,\n parseLogFilename,\n logError,\n CACHE_PATHS,\n} from '#core/utils/log'\nimport { loadMessagesFromLog } from '#core/utils/conversationRecovery'\n\nimport { getClients } from '#core/mcp/client'\nimport { setup } from '../../setup'\nimport {\n renderLogListScreen,\n renderRepl,\n renderResumeConversationSelector,\n} from '../../interactive/renderers'\n\ntype CwdOption = { cwd: string }\n\nexport function registerLogCommands(\n program: Command,\n renderContextWithExitOnCtrlC: RenderOptions | undefined,\n): void {\n program\n .command('log')\n .description('Manage conversation logs.')\n .argument(\n '[number]',\n 'A number (0, 1, 2, etc.) to display a specific log',\n parseInt,\n )\n .option(\n '--cwd <cwd>',\n 'The current working directory',\n String,\n processCwd(),\n )\n .action(async (number: number | undefined, options: CwdOption) => {\n await setup(options.cwd, false)\n renderLogListScreen(\n { type: 'messages', logNumber: number },\n renderContextWithExitOnCtrlC,\n )\n })\n\n program\n .command('resume')\n .description(\n 'Resume a previous conversation. Optionally provide a session ID or session name (legacy: log index or file path).',\n )\n .argument(\n '[identifier]',\n 'A session ID or session name (legacy: log index or file path)',\n )\n .option(\n '--cwd <cwd>',\n 'The current working directory',\n String,\n processCwd(),\n )\n .option('-e, --enable-architect', 'Enable the Architect tool', () => true)\n .option('-v, --verbose', 'Do not truncate message output', () => true)\n .option(\n '--safe',\n 'Enable strict permission checking mode (default is permissive)',\n () => true,\n )\n .option(\n '--disable-slash-commands',\n 'Disable slash commands (treat /... as plain text)',\n () => true,\n )\n .action(\n async (\n identifier: string | undefined,\n options: {\n cwd?: string\n enableArchitect?: boolean\n safe?: boolean\n verbose?: boolean\n disableSlashCommands?: boolean\n },\n ) => {\n const cwd = options.cwd ?? processCwd()\n const enableArchitect = options.enableArchitect\n const safe = options.safe\n const verbose = options.verbose\n const disableSlashCommands = options.disableSlashCommands\n\n await setup(cwd, safe)\n assertMinVersion()\n\n const [{ getTools }, { getCommands }] = await Promise.all([\n import('#tools'),\n import('#cli-commands'),\n ])\n const [allTools, commands, mcpClients] = await Promise.all([\n getTools(\n enableArchitect ?? getCurrentProjectConfig().enableArchitectTool,\n ),\n getCommands(),\n getClients(),\n ])\n const tools =\n disableSlashCommands === true\n ? allTools.filter(t => t.name !== 'SlashCommand')\n : allTools\n\n if (identifier !== undefined) {\n const { loadKodeAgentSessionMessages } =\n await import('#protocol/utils/kodeAgentSessionLoad')\n const { resolveResumeSessionIdentifier } =\n await import('#protocol/utils/kodeAgentSessionResume')\n const { setKodeAgentSessionId } =\n await import('#protocol/utils/kodeAgentSessionId')\n\n const rawIdentifier = String(identifier).trim()\n const isLegacyNumber = /^-?\\\\d+$/.test(rawIdentifier)\n const isLegacyPath = !isLegacyNumber && existsSync(rawIdentifier)\n\n let messages: unknown[] | undefined\n let messageLogName: string = dateToFilename(new Date())\n let initialForkNumber: number | undefined = undefined\n\n try {\n if (isLegacyNumber || isLegacyPath) {\n const logs = await loadLogList(CACHE_PATHS.messages())\n if (isLegacyNumber) {\n const number = Math.abs(parseInt(rawIdentifier, 10))\n const log = logs[number]\n if (!log) {\n console.error('No conversation found at index', number)\n process.exit(1)\n }\n messages = await loadMessagesFromLog(log.fullPath, tools)\n messageLogName = log.date\n initialForkNumber = getNextAvailableLogForkNumber(\n log.date,\n log.forkNumber ?? 1,\n 0,\n )\n } else {\n messages = await loadMessagesFromLog(rawIdentifier, tools)\n const pathSegments = rawIdentifier.split('/')\n const filename =\n pathSegments[pathSegments.length - 1] ?? 'unknown'\n const { date, forkNumber } = parseLogFilename(filename)\n messageLogName = date\n initialForkNumber = getNextAvailableLogForkNumber(\n date,\n forkNumber ?? 1,\n 0,\n )\n }\n } else {\n const resolved = resolveResumeSessionIdentifier({\n cwd,\n identifier: rawIdentifier,\n })\n if (resolved.kind === 'ok') {\n setKodeAgentSessionId(resolved.sessionId)\n messages = loadKodeAgentSessionMessages({\n cwd,\n sessionId: resolved.sessionId,\n })\n } else if (resolved.kind === 'different_directory') {\n console.error(\n resolved.otherCwd\n ? `Error: That session belongs to a different directory: ${resolved.otherCwd}`\n : `Error: That session belongs to a different directory.`,\n )\n process.exit(1)\n } else if (resolved.kind === 'ambiguous') {\n console.error(\n `Error: Multiple sessions match \"${rawIdentifier}\": ${resolved.matchingSessionIds.join(\n ', ',\n )}`,\n )\n process.exit(1)\n } else {\n console.error(\n `No conversation found with session ID or name: ${rawIdentifier}`,\n )\n process.exit(1)\n }\n }\n\n const isDefaultModel = await isDefaultSlowAndCapableModel()\n await renderRepl(\n {\n initialPrompt: '',\n messageLogName,\n initialForkNumber,\n shouldShowPromptInput: true,\n verbose,\n commands,\n disableSlashCommands: disableSlashCommands === true,\n tools,\n safeMode: safe,\n initialMessages: messages,\n mcpClients,\n isDefaultModel,\n },\n { exitOnCtrlC: false },\n )\n } catch (error) {\n logError(`Failed to load conversation: ${String(error)}`)\n process.exit(1)\n }\n } else {\n const { listKodeAgentSessions } =\n await import('#protocol/utils/kodeAgentSessionResume')\n const sessions = listKodeAgentSessions({ cwd })\n if (sessions.length === 0) {\n console.error('No conversation found to resume')\n process.exit(1)\n }\n renderResumeConversationSelector(\n {\n cwd,\n commands,\n sessions,\n tools,\n verbose,\n safeMode: safe,\n disableSlashCommands: disableSlashCommands === true,\n mcpClients,\n initialPrompt: '',\n },\n renderContextWithExitOnCtrlC,\n )\n }\n },\n )\n\n program\n .command('error')\n .description(\n 'View error logs. Optionally provide a number (0, -1, -2, etc.) to display a specific log.',\n )\n .argument(\n '[number]',\n 'A number (0, 1, 2, etc.) to display a specific log',\n parseInt,\n )\n .option(\n '--cwd <cwd>',\n 'The current working directory',\n String,\n processCwd(),\n )\n .action(async (number: number | undefined, options: CwdOption) => {\n await setup(options.cwd, false)\n renderLogListScreen(\n { type: 'errors', logNumber: number },\n renderContextWithExitOnCtrlC,\n )\n })\n}\n", "import fs from 'fs/promises'\nimport { logError } from './log'\nimport { Tool } from '#core/tooling/Tool'\n\n/**\n * Load messages from a log file\n * @param logPath Path to the log file\n * @param tools Available tools for deserializing tool usage\n * @returns Array of deserialized messages\n */\nexport async function loadMessagesFromLog(\n logPath: string,\n tools: Tool[],\n): Promise<any[]> {\n try {\n const content = await fs.readFile(logPath, 'utf-8')\n const messages = JSON.parse(content)\n return deserializeMessages(messages, tools)\n } catch (error) {\n logError(`Failed to load messages from ${logPath}: ${error}`)\n throw new Error(`Failed to load messages from log: ${error}`)\n }\n}\n\n/**\n * Deserialize messages from a saved format, reconnecting any tool references\n * @param messages The serialized message array\n * @param tools Available tools to reconnect\n * @returns Deserialized messages with reconnected tool references\n */\nexport function deserializeMessages(messages: any[], tools: Tool[]): any[] {\n // Map of tool names to actual tool instances for reconnection\n const toolMap = new Map(tools.map(tool => [tool.name, tool]))\n\n return messages.map(message => {\n // Deep clone the message to avoid mutation issues\n const clonedMessage = JSON.parse(JSON.stringify(message))\n\n // If the message has tool calls, reconnect them to actual tool instances\n if (clonedMessage.toolCalls) {\n clonedMessage.toolCalls = clonedMessage.toolCalls.map((toolCall: any) => {\n // Reconnect tool reference if it exists\n if (toolCall.tool && typeof toolCall.tool === 'string') {\n const actualTool = toolMap.get(toolCall.tool)\n if (actualTool) {\n toolCall.tool = actualTool\n }\n }\n return toolCall\n })\n }\n\n return clonedMessage\n })\n}\n", "import { cwd } from 'process'\nimport type { Command } from '@commander-js/extra-typings'\n\nimport { getCwd, setCwd } from '#core/utils/state'\n\nimport { registerMarketplaceCommands } from './marketplace'\n\nconst PLUGIN_SCOPES = ['user', 'project', 'local'] as const\ntype PluginScope = (typeof PLUGIN_SCOPES)[number]\n\nfunction parsePluginScope(value: unknown): PluginScope | null {\n const normalized = String(value || 'user') as PluginScope\n return PLUGIN_SCOPES.includes(normalized) ? normalized : null\n}\n\ntype PluginCwdScopeOptions = {\n cwd?: string\n scope?: string\n force?: boolean\n json?: boolean\n project?: boolean\n}\n\nexport function registerPluginCommands(program: Command): void {\n const pluginCmd = program\n .command('plugin')\n .description('Manage plugins and marketplaces')\n\n const pluginMarketplaceCmd = pluginCmd\n .command('marketplace')\n .description(\n 'Manage marketplaces (.kode-plugin/marketplace.json; legacy .claude-plugin supported)',\n )\n\n registerMarketplaceCommands(pluginMarketplaceCmd)\n\n pluginCmd\n .command('install <plugin>')\n .alias('i')\n .description(\n 'Install a plugin from available marketplaces (use plugin@marketplace for specific marketplace)',\n )\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option(\n '-s, --scope <scope>',\n 'Installation scope: user, project, or local',\n 'user',\n )\n .option('--force', 'Overwrite existing installed files', () => true)\n .action(async (plugin: string, options: PluginCwdScopeOptions) => {\n try {\n const scope = parsePluginScope(options.scope)\n if (!scope) {\n console.error(\n `Invalid scope: ${String(options.scope)}. Must be one of: ${PLUGIN_SCOPES.join(', ')}`,\n )\n process.exit(1)\n }\n\n await setCwd(options.cwd ?? cwd())\n\n const { installSkillPlugin } =\n await import('#cli-services/skillMarketplace')\n const result = installSkillPlugin(plugin, {\n scope,\n force: options.force === true,\n })\n\n const skillList =\n result.installedSkills.length > 0\n ? `Skills: ${result.installedSkills.join(', ')}`\n : 'Skills: (none)'\n console.log(`Installed ${result.pluginSpec}\\n${skillList}`)\n process.exit(0)\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n })\n\n pluginCmd\n .command('uninstall <plugin>')\n .alias('remove')\n .alias('rm')\n .description('Uninstall an installed plugin')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option(\n '-s, --scope <scope>',\n `Uninstall from scope: ${PLUGIN_SCOPES.join(', ')} (default: user)`,\n 'user',\n )\n .action(async (plugin: string, options: PluginCwdScopeOptions) => {\n try {\n const scope = parsePluginScope(options.scope)\n if (!scope) {\n console.error(\n `Invalid scope: ${String(options.scope)}. Must be one of: ${PLUGIN_SCOPES.join(', ')}`,\n )\n process.exit(1)\n }\n\n await setCwd(options.cwd ?? cwd())\n\n const { uninstallSkillPlugin } =\n await import('#cli-services/skillMarketplace')\n const result = uninstallSkillPlugin(plugin, { scope })\n const skillList =\n result.removedSkills.length > 0\n ? `Skills: ${result.removedSkills.join(', ')}`\n : 'Skills: (none)'\n console.log(`Uninstalled ${result.pluginSpec}\\n${skillList}`)\n process.exit(0)\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n })\n\n pluginCmd\n .command('list')\n .description('List installed plugins')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option(\n '-s, --scope <scope>',\n `Filter by scope: ${PLUGIN_SCOPES.join(', ')} (default: user)`,\n 'user',\n )\n .option('--json', 'Output as JSON')\n .action(async (options: PluginCwdScopeOptions) => {\n try {\n const scope = parsePluginScope(options.scope)\n if (!scope) {\n console.error(\n `Invalid scope: ${String(options.scope)}. Must be one of: ${PLUGIN_SCOPES.join(', ')}`,\n )\n process.exit(1)\n }\n\n await setCwd(options.cwd ?? cwd())\n\n const { listInstalledSkillPlugins } =\n await import('#cli-services/skillMarketplace')\n const all = listInstalledSkillPlugins()\n const filteredEntries = Object.entries(all).filter(([, record]) => {\n if (!record || record.scope !== scope) return false\n if (scope === 'user') return true\n return record.projectPath === getCwd()\n })\n const filtered = Object.fromEntries(filteredEntries)\n\n if (options.json) {\n console.log(JSON.stringify(filtered, null, 2))\n process.exit(0)\n }\n\n const names = Object.keys(filtered).sort()\n if (names.length === 0) {\n console.log('No plugins installed')\n process.exit(0)\n }\n console.log(`Installed plugins (scope=${scope}):\\n`)\n for (const spec of names) {\n const record = filtered[spec]\n const enabled = record?.isEnabled === false ? 'disabled' : 'enabled'\n console.log(` - ${spec} (${enabled})`)\n }\n process.exit(0)\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n })\n\n pluginCmd\n .command('enable <plugin>')\n .description('Enable a disabled plugin')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option(\n '-s, --scope <scope>',\n `Installation scope: ${PLUGIN_SCOPES.join(', ')} (default: user)`,\n 'user',\n )\n .action(async (plugin: string, options: PluginCwdScopeOptions) => {\n try {\n const scope = parsePluginScope(options.scope)\n if (!scope) {\n console.error(\n `Invalid scope: ${String(options.scope)}. Must be one of: ${PLUGIN_SCOPES.join(', ')}`,\n )\n process.exit(1)\n }\n\n await setCwd(options.cwd ?? cwd())\n\n const { enableSkillPlugin } =\n await import('#cli-services/skillMarketplace')\n const result = enableSkillPlugin(plugin, { scope })\n console.log(`Enabled ${result.pluginSpec}`)\n process.exit(0)\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n })\n\n pluginCmd\n .command('disable <plugin>')\n .description('Disable an enabled plugin')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option(\n '-s, --scope <scope>',\n `Installation scope: ${PLUGIN_SCOPES.join(', ')} (default: user)`,\n 'user',\n )\n .action(async (plugin: string, options: PluginCwdScopeOptions) => {\n try {\n const scope = parsePluginScope(options.scope)\n if (!scope) {\n console.error(\n `Invalid scope: ${String(options.scope)}. Must be one of: ${PLUGIN_SCOPES.join(', ')}`,\n )\n process.exit(1)\n }\n\n await setCwd(options.cwd ?? cwd())\n\n const { disableSkillPlugin } =\n await import('#cli-services/skillMarketplace')\n const result = disableSkillPlugin(plugin, { scope })\n console.log(`Disabled ${result.pluginSpec}`)\n process.exit(0)\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n })\n\n pluginCmd\n .command('validate <path>')\n .description('Validate a plugin or marketplace manifest')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .action(async (path: string, options: PluginCwdScopeOptions) => {\n try {\n await setCwd(options.cwd ?? cwd())\n\n const { formatValidationResult, validatePluginOrMarketplacePath } =\n await import('#cli-services/pluginValidation')\n\n const result = validatePluginOrMarketplacePath(path)\n console.log(\n `Validating ${result.fileType} manifest: ${result.filePath}\\n`,\n )\n console.log(formatValidationResult(result))\n process.exit(result.success ? 0 : 1)\n } catch (error) {\n console.error(\n `Unexpected error during validation: ${\n error instanceof Error ? error.message : String(error)\n }`,\n )\n process.exit(2)\n }\n })\n\n const skillsCmd = program\n .command('skills')\n .description('Manage skills and skill marketplaces')\n\n const marketplaceCmd = skillsCmd\n .command('marketplace')\n .description(\n 'Manage skill marketplaces (.kode-plugin/marketplace.json; legacy .claude-plugin supported)',\n )\n\n registerMarketplaceCommands(marketplaceCmd)\n\n skillsCmd\n .command('install <plugin>')\n .description('Install a skill plugin pack (<plugin>@<marketplace>)')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option('--project', 'Install into this project (.kode/...)', () => true)\n .option('--force', 'Overwrite existing installed files', () => true)\n .action(async (plugin: string, options: PluginCwdScopeOptions) => {\n try {\n await setCwd(options.cwd ?? cwd())\n\n const { installSkillPlugin } =\n await import('#cli-services/skillMarketplace')\n const result = installSkillPlugin(plugin, {\n project: options.project === true,\n force: options.force === true,\n })\n const skillList =\n result.installedSkills.length > 0\n ? `Skills: ${result.installedSkills.join(', ')}`\n : 'Skills: (none)'\n console.log(`Installed ${plugin}\\n${skillList}`)\n process.exit(0)\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n })\n\n skillsCmd\n .command('uninstall <plugin>')\n .description('Uninstall a skill plugin pack (<plugin>@<marketplace>)')\n .option('--cwd <cwd>', 'The current working directory', String, cwd())\n .option('--project', 'Uninstall from this project (.kode/...)', () => true)\n .action(async (plugin: string, options: PluginCwdScopeOptions) => {\n try {\n await setCwd(options.cwd ?? cwd())\n\n const { uninstallSkillPlugin } =\n await import('#cli-services/skillMarketplace')\n const result = uninstallSkillPlugin(plugin, {\n project: options.project === true,\n })\n const skillList =\n result.removedSkills.length > 0\n ? `Skills: ${result.removedSkills.join(', ')}`\n : 'Skills: (none)'\n console.log(`Uninstalled ${plugin}\\n${skillList}`)\n process.exit(0)\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n })\n\n skillsCmd\n .command('list-installed')\n .description('List installed skill plugins')\n .action(async () => {\n try {\n const { listInstalledSkillPlugins } =\n await import('#cli-services/skillMarketplace')\n console.log(JSON.stringify(listInstalledSkillPlugins(), null, 2))\n process.exit(0)\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n })\n}\n", "import type { Command } from '@commander-js/extra-typings'\n\nexport function registerMarketplaceCommands(marketplaceCmd: Command): void {\n marketplaceCmd\n .command('add <source>')\n .description('Add a marketplace from a URL, path, or GitHub repo')\n .action(async (source: string) => {\n try {\n const { addMarketplace } =\n await import('#cli-services/skillMarketplace')\n console.log('Adding marketplace...')\n const { name } = await addMarketplace(source)\n console.log(`Successfully added marketplace: ${name}`)\n process.exit(0)\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n })\n\n marketplaceCmd\n .command('list')\n .description('List all configured marketplaces')\n .option('--json', 'Output as JSON')\n .action(async (options: { json?: boolean }) => {\n try {\n const { listMarketplaces } =\n await import('#cli-services/skillMarketplace')\n const marketplaces = listMarketplaces()\n\n if (options.json) {\n console.log(JSON.stringify(marketplaces, null, 2))\n process.exit(0)\n }\n\n const names = Object.keys(marketplaces).sort()\n if (names.length === 0) {\n console.log('No marketplaces configured')\n process.exit(0)\n }\n\n console.log('Configured marketplaces:\\n')\n for (const name of names) {\n const entry = marketplaces[name]\n if (!entry) continue\n console.log(` - ${name}`)\n\n const src = entry.source\n if (src.source === 'github')\n console.log(` Source: GitHub (${src.repo})`)\n else if (src.source === 'git')\n console.log(` Source: Git (${src.url})`)\n else if (src.source === 'url')\n console.log(` Source: URL (${src.url})`)\n else if (src.source === 'directory')\n console.log(` Source: Directory (${src.path})`)\n else if (src.source === 'file')\n console.log(` Source: File (${src.path})`)\n else if (src.source === 'npm')\n console.log(` Source: NPM (${src.package})`)\n\n console.log('')\n }\n\n process.exit(0)\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n })\n\n marketplaceCmd\n .command('remove <name>')\n .alias('rm')\n .description('Remove a configured marketplace')\n .action(async (name: string) => {\n try {\n const { removeMarketplace } =\n await import('#cli-services/skillMarketplace')\n removeMarketplace(name)\n console.log(`Successfully removed marketplace: ${name}`)\n process.exit(0)\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n })\n\n marketplaceCmd\n .command('update [name]')\n .description(\n 'Update marketplace(s) from their source - updates all if no name specified',\n )\n .action(async (name: string | undefined) => {\n try {\n const {\n listMarketplaces,\n refreshAllMarketplacesAsync,\n refreshMarketplaceAsync,\n } = await import('#cli-services/skillMarketplace')\n\n const trimmed = typeof name === 'string' ? name.trim() : ''\n if (trimmed) {\n console.log(`Updating marketplace: ${trimmed}...`)\n await refreshMarketplaceAsync(trimmed)\n console.log(`Successfully updated marketplace: ${trimmed}`)\n process.exit(0)\n }\n\n const marketplaces = listMarketplaces()\n const names = Object.keys(marketplaces)\n if (names.length === 0) {\n console.log('No marketplaces configured')\n process.exit(0)\n }\n\n console.log(`Updating ${names.length} marketplace(s)...`)\n await refreshAllMarketplacesAsync(message => {\n console.log(message)\n })\n console.log(`Successfully updated ${names.length} marketplace(s)`)\n process.exit(0)\n } catch (error) {\n console.error(error instanceof Error ? error.message : String(error))\n process.exit(1)\n }\n })\n}\n", "import type { Command } from '@commander-js/extra-typings'\n\nimport { PRODUCT_NAME } from '#core/constants/product'\nimport { MACRO } from '#core/constants/macros'\n\nexport function registerUpdateCommand(program: Command): void {\n program\n .command('update')\n .description('Show manual upgrade commands (no auto-install)')\n .action(async () => {\n console.log(`Current version: ${MACRO.VERSION}`)\n console.log('Checking for updates...')\n\n const { getLatestVersion, getUpdateCommandSuggestions } =\n await import('#core/utils/autoUpdater')\n const latestVersion = await getLatestVersion()\n\n if (!latestVersion) {\n console.error('Failed to check for updates')\n process.exit(1)\n }\n\n if (latestVersion === MACRO.VERSION) {\n console.log(`${PRODUCT_NAME} is up to date`)\n process.exit(0)\n }\n\n console.log(`New version available: ${latestVersion}`)\n const cmds = await getUpdateCommandSuggestions()\n console.log('\\nRun one of the following commands to update:')\n for (const c of cmds) console.log(` ${c}`)\n if (process.platform !== 'win32') {\n console.log(\n '\\nNote: you may need to prefix with \"sudo\" on macOS/Linux.',\n )\n }\n process.exit(0)\n })\n}\n", "import { addToHistory } from '#core/history'\nimport { hasPermissionsToUseTool } from '#core/permissions'\nimport { dateToFilename } from '#core/utils/log'\n\nimport type { WrappedClient } from '#core/mcp/client'\nimport type { Message } from '#core/query'\nimport type { Tool } from '#core/tooling/Tool'\n\nexport type RunPrintModeArgs = {\n prompt: string | undefined\n stdinContent: string\n inputPrompt: string\n\n cwd: string\n safe?: boolean\n verbose?: boolean\n\n outputFormat?: string\n inputFormat?: string\n jsonSchema?: string\n permissionPromptTool?: string | null\n replayUserMessages?: boolean\n\n cliTools?: unknown\n tools: Tool[]\n commands: Array<{ isHidden?: boolean; userFacingName: () => string }>\n ask: (args: unknown) => Promise<{ resultText: string }>\n\n initialMessages?: Message[]\n sessionPersistence?: boolean\n\n systemPromptOverride?: string\n appendSystemPrompt?: string\n disableSlashCommands?: boolean\n\n allowedTools?: unknown\n disallowedTools?: unknown\n addDir?: unknown\n permissionMode?: string\n dangerouslySkipPermissions?: boolean\n allowDangerouslySkipPermissions?: boolean\n\n model?: string\n mcpClients: WrappedClient[]\n}\n\nexport async function runPrintMode({\n prompt,\n stdinContent,\n inputPrompt,\n cwd,\n safe,\n verbose,\n outputFormat,\n inputFormat,\n jsonSchema,\n permissionPromptTool,\n replayUserMessages,\n cliTools,\n tools,\n commands,\n ask,\n initialMessages,\n sessionPersistence,\n systemPromptOverride,\n appendSystemPrompt,\n disableSlashCommands,\n allowedTools,\n disallowedTools,\n addDir,\n permissionMode,\n dangerouslySkipPermissions,\n allowDangerouslySkipPermissions,\n model,\n mcpClients,\n}: RunPrintModeArgs): Promise<void> {\n const normalizedOutputFormat = String(outputFormat || 'text')\n .toLowerCase()\n .trim()\n const normalizedInputFormat = String(inputFormat || 'text')\n .toLowerCase()\n .trim()\n\n if (!['text', 'stream-json'].includes(normalizedInputFormat)) {\n console.error(\n `Error: Invalid --input-format \"${inputFormat}\". Expected one of: text, stream-json`,\n )\n process.exit(1)\n }\n\n if (!['text', 'json', 'stream-json'].includes(normalizedOutputFormat)) {\n console.error(\n `Error: Invalid --output-format \"${outputFormat}\". Expected one of: text, json, stream-json`,\n )\n process.exit(1)\n }\n\n if (normalizedOutputFormat === 'stream-json' && !verbose) {\n console.error(\n 'Error: When using --print, --output-format=stream-json requires --verbose',\n )\n process.exit(1)\n }\n\n const normalizedPermissionPromptTool = permissionPromptTool\n ? String(permissionPromptTool).trim()\n : null\n\n if (normalizedPermissionPromptTool) {\n if (normalizedPermissionPromptTool !== 'stdio') {\n console.error(\n `Error: Unsupported --permission-prompt-tool \"${normalizedPermissionPromptTool}\". Only \"stdio\" is supported in Kode right now.`,\n )\n process.exit(1)\n }\n if (normalizedInputFormat !== 'stream-json') {\n console.error(\n 'Error: --permission-prompt-tool=stdio requires --input-format=stream-json',\n )\n process.exit(1)\n }\n if (normalizedOutputFormat !== 'stream-json') {\n console.error(\n 'Error: --permission-prompt-tool=stdio requires --output-format=stream-json',\n )\n process.exit(1)\n }\n }\n\n if (\n normalizedInputFormat === 'stream-json' &&\n normalizedOutputFormat !== 'stream-json'\n ) {\n console.error(\n 'Error: --input-format=stream-json requires --output-format=stream-json',\n )\n process.exit(1)\n }\n\n if (replayUserMessages) {\n if (\n normalizedInputFormat !== 'stream-json' ||\n normalizedOutputFormat !== 'stream-json'\n ) {\n console.error(\n 'Error: --replay-user-messages requires --input-format=stream-json and --output-format=stream-json',\n )\n process.exit(1)\n }\n }\n\n if (normalizedInputFormat === 'stream-json') {\n if (prompt) {\n console.error(\n 'Error: --input-format=stream-json cannot be used with a prompt argument',\n )\n process.exit(1)\n }\n if (stdinContent) {\n console.error(\n 'Error: --input-format=stream-json cannot be used with stdin prompt text',\n )\n process.exit(1)\n }\n } else {\n if (!inputPrompt) {\n console.error(\n 'Error: Input must be provided either through stdin or as a prompt argument when using --print',\n )\n process.exit(1)\n }\n }\n\n const toolsForPrint = (() => {\n if (!cliTools) return tools\n const raw = Array.isArray(cliTools) ? cliTools : [cliTools]\n const flattened = raw\n .flatMap(v => String(v ?? '').split(','))\n .map(v => v.trim())\n if (flattened.length === 0) return tools\n\n if (flattened.length === 1 && flattened[0] === '') return []\n if (flattened.length === 1 && flattened[0] === 'default') return tools\n\n const wanted = new Set(flattened.filter(v => v && v !== 'default'))\n const unknown = [...wanted].filter(\n name => !tools.some(t => t.name === name),\n )\n if (unknown.length > 0) {\n console.error(`Error: Unknown tool(s) in --tools: ${unknown.join(', ')}`)\n process.exit(1)\n }\n\n return tools.filter(t => wanted.has(t.name))\n })()\n\n if (normalizedOutputFormat === 'text') {\n addToHistory(inputPrompt)\n const { resultText: response } = await ask({\n commands,\n hasPermissionsToUseTool,\n messageLogName: dateToFilename(new Date()),\n prompt: inputPrompt,\n cwd,\n tools: toolsForPrint,\n safeMode: safe,\n initialMessages,\n persistSession: sessionPersistence !== false,\n })\n process.stdout.write(`${response}\\n`)\n process.exit(0)\n }\n\n if (\n normalizedOutputFormat !== 'json' &&\n normalizedOutputFormat !== 'stream-json'\n ) {\n console.error(\n `Error: Invalid --output-format \"${outputFormat}\". Expected one of: json, stream-json`,\n )\n process.exit(1)\n }\n\n if (\n normalizedInputFormat !== 'text' &&\n normalizedInputFormat !== 'stream-json'\n ) {\n console.error(\n `Error: Invalid --input-format \"${inputFormat}\". Expected one of: text, stream-json`,\n )\n process.exit(1)\n }\n\n const { runNonTextPrintMode } = await import('./runNonTextPrintMode')\n await runNonTextPrintMode({\n inputPrompt,\n cwd,\n safe,\n verbose,\n normalizedOutputFormat,\n normalizedInputFormat,\n normalizedPermissionPromptTool,\n replayUserMessages,\n toolsForPrint,\n commands,\n initialMessages,\n sessionPersistence,\n systemPromptOverride,\n appendSystemPrompt,\n disableSlashCommands,\n allowedTools,\n disallowedTools,\n addDir,\n permissionMode,\n dangerouslySkipPermissions,\n allowDangerouslySkipPermissions,\n jsonSchema,\n model,\n mcpClients,\n })\n}\n", "import React from 'react'\n\nimport { MACRO } from '#core/constants/macros'\nimport { Onboarding } from '#ui-ink/components/Onboarding'\nimport { TrustDialog } from '#ui-ink/components/TrustDialog'\nimport {\n checkHasTrustDialogAccepted,\n getGlobalConfig,\n saveGlobalConfig,\n} from '#core/utils/config'\nimport { clearTerminal } from '#cli-utils/terminal'\nimport { grantReadPermissionForOriginalDir } from '#core/utils/permissions/filesystem'\nimport { handleMcprcServerApprovals } from './mcpServerApproval'\n\nexport function completeOnboarding(): void {\n const config = getGlobalConfig()\n saveGlobalConfig({\n ...config,\n hasCompletedOnboarding: true,\n lastOnboardingVersion: MACRO.VERSION,\n })\n}\n\nexport async function showSetupScreens(\n safeMode?: boolean,\n print?: boolean,\n): Promise<void> {\n if (process.env.NODE_ENV === 'test') {\n return\n }\n\n const config = getGlobalConfig()\n if (!config.theme || !config.hasCompletedOnboarding) {\n await clearTerminal()\n const { render } = await import('ink')\n await new Promise<void>(resolve => {\n render(\n <Onboarding\n onDone={async () => {\n completeOnboarding()\n await clearTerminal()\n resolve()\n }}\n />,\n {\n exitOnCtrlC: false,\n },\n )\n })\n }\n\n if (!print) {\n if (safeMode) {\n if (!checkHasTrustDialogAccepted()) {\n await new Promise<void>(resolve => {\n const onDone = () => {\n grantReadPermissionForOriginalDir()\n resolve()\n }\n ;(async () => {\n const { render } = await import('ink')\n render(<TrustDialog onDone={onDone} />, {\n exitOnCtrlC: false,\n })\n })()\n })\n }\n }\n\n await handleMcprcServerApprovals()\n }\n}\n", "import React from 'react'\nimport { Box, Text, useInput } from 'ink'\nimport { getTheme } from '#core/utils/theme'\nimport { Select } from './CustomSelect/select'\nimport {\n saveCurrentProjectConfig,\n getCurrentProjectConfig,\n} from '#core/utils/config'\nimport { PRODUCT_NAME } from '#core/constants/product'\nimport { useExitOnCtrlCD } from '#ui-ink/hooks/useExitOnCtrlCD'\nimport { homedir } from 'os'\nimport { getCwd } from '#core/utils/state'\nimport Link from './Link'\n\ntype Props = {\n onDone(): void\n}\n\nexport function TrustDialog({ onDone }: Props): React.ReactNode {\n const theme = getTheme()\n React.useEffect(() => {}, [])\n\n function onChange(value: 'yes' | 'no') {\n const config = getCurrentProjectConfig()\n switch (value) {\n case 'yes': {\n const isHomeDir = homedir() === getCwd()\n\n if (!isHomeDir) {\n saveCurrentProjectConfig({\n ...config,\n hasTrustDialogAccepted: true,\n })\n }\n onDone()\n break\n }\n case 'no': {\n process.exit(1)\n break\n }\n }\n }\n\n const exitState = useExitOnCtrlCD(() => process.exit(0))\n\n useInput((_input, key) => {\n if (key.escape) {\n process.exit(0)\n return\n }\n })\n\n return (\n <>\n <Box\n flexDirection=\"column\"\n gap={1}\n padding={1}\n borderStyle=\"round\"\n borderColor={theme.warning}\n >\n <Text bold color={theme.warning}>\n Do you trust the files in this folder?\n </Text>\n <Text bold>{process.cwd()}</Text>\n\n <Box flexDirection=\"column\" gap={1}>\n <Text>\n {PRODUCT_NAME} may read files in this folder. Reading untrusted\n files may lead to {PRODUCT_NAME} to behave in an unexpected ways.\n </Text>\n <Text>\n With your permission {PRODUCT_NAME} may execute files in this\n folder. Executing untrusted code is unsafe.\n </Text>\n </Box>\n\n <Select\n options={[\n { label: 'Yes, proceed', value: 'yes' },\n { label: 'No, exit', value: 'no' },\n ]}\n onChange={value => onChange(value as 'yes' | 'no')}\n />\n </Box>\n <Box marginLeft={3}>\n <Text dimColor>\n {exitState.pending ? (\n <>Press {exitState.keyName} again to exit</>\n ) : (\n <>Enter to confirm \u00B7 Esc to exit</>\n )}\n </Text>\n </Box>\n </>\n )\n}\n", "import React from 'react'\nimport { render } from 'ink'\nimport { MCPServerMultiselectDialog } from '#ui-ink/components/MCPServerMultiselectDialog'\nimport { MCPServerApprovalDialog } from '#ui-ink/components/MCPServerApprovalDialog'\nimport { getMcprcServerStatus } from '#core/mcp/client'\nimport { getProjectMcpServerDefinitions } from '#core/utils/config'\n\nexport async function handleMcprcServerApprovals(): Promise<void> {\n const { servers } = getProjectMcpServerDefinitions()\n const pendingServers = Object.keys(servers).filter(\n serverName => getMcprcServerStatus(serverName) === 'pending',\n )\n\n if (pendingServers.length === 0) {\n return\n }\n\n await new Promise<void>(resolve => {\n const clearScreenAndResolve = () => {\n // Clear screen after dialog\n process.stdout.write('\\x1b[2J\\x1b[3J\\x1b[H', () => {\n resolve()\n })\n }\n\n if (pendingServers.length === 1 && pendingServers[0] !== undefined) {\n const result = render(\n <MCPServerApprovalDialog\n serverName={pendingServers[0]}\n onDone={() => {\n result.unmount?.()\n clearScreenAndResolve()\n }}\n />,\n { exitOnCtrlC: false },\n )\n } else {\n const result = render(\n <MCPServerMultiselectDialog\n serverNames={pendingServers}\n onDone={() => {\n result.unmount?.()\n clearScreenAndResolve()\n }}\n />,\n { exitOnCtrlC: false },\n )\n }\n })\n}\n", "import React from 'react'\nimport { Box, Text, useInput } from 'ink'\nimport { getTheme } from '#core/utils/theme'\nimport { MultiSelect } from '@inkjs/ui'\nimport {\n saveCurrentProjectConfig,\n getCurrentProjectConfig,\n} from '#core/utils/config'\nimport { partition } from 'lodash-es'\nimport { MCPServerDialogCopy } from './MCPServerDialogCopy'\nimport { useExitOnCtrlCD } from '#ui-ink/hooks/useExitOnCtrlCD'\n\ntype Props = {\n serverNames: string[]\n onDone(): void\n}\n\nexport function MCPServerMultiselectDialog({\n serverNames,\n onDone,\n}: Props): React.ReactNode {\n const theme = getTheme()\n function onSubmit(selectedServers: string[]) {\n const config = getCurrentProjectConfig()\n\n // Initialize arrays if they don't exist\n if (!config.approvedMcprcServers) {\n config.approvedMcprcServers = []\n }\n if (!config.rejectedMcprcServers) {\n config.rejectedMcprcServers = []\n }\n\n // Use partition to separate approved and rejected servers\n const [approvedServers, rejectedServers] = partition(serverNames, server =>\n selectedServers.includes(server),\n )\n\n // Add new servers directly to the respective lists\n config.approvedMcprcServers.push(...approvedServers)\n config.rejectedMcprcServers.push(...rejectedServers)\n\n saveCurrentProjectConfig(config)\n onDone()\n }\n\n const exitState = useExitOnCtrlCD(() => process.exit())\n\n useInput((_input, key) => {\n if (key.escape) {\n // On escape, treat all servers as rejected\n const config = getCurrentProjectConfig()\n if (!config.rejectedMcprcServers) {\n config.rejectedMcprcServers = []\n }\n\n for (const server of serverNames) {\n if (!config.rejectedMcprcServers.includes(server)) {\n config.rejectedMcprcServers.push(server)\n }\n }\n\n saveCurrentProjectConfig(config)\n onDone()\n return\n }\n })\n\n return (\n <>\n <Box\n flexDirection=\"column\"\n gap={1}\n padding={1}\n borderStyle=\"round\"\n borderColor={theme.warning}\n >\n <Text bold color={theme.warning}>\n New MCP Servers Detected\n </Text>\n <Text>\n This project contains an MCP config file (.mcp.json or .mcprc) with{' '}\n {serverNames.length} MCP servers that require your approval.\n </Text>\n <MCPServerDialogCopy />\n\n <Text>Please select the servers you want to enable:</Text>\n\n <MultiSelect\n options={serverNames.map(server => ({\n label: server,\n value: server,\n }))}\n defaultValue={serverNames}\n onSubmit={onSubmit}\n />\n </Box>\n <Box marginLeft={3}>\n <Text dimColor>\n {exitState.pending ? (\n <>Press {exitState.keyName} again to exit</>\n ) : (\n <>Space to select \u00B7 Enter to confirm \u00B7 Esc to reject all</>\n )}\n </Text>\n </Box>\n </>\n )\n}\n", "import React from 'react'\nimport { Text } from 'ink'\nimport Link from 'ink-link'\nimport { PRODUCT_NAME, PRODUCT_COMMAND } from '#core/constants/product'\n\nexport function MCPServerDialogCopy(): React.ReactNode {\n return (\n <>\n <Text>\n MCP servers provide additional functionality to {PRODUCT_NAME}. They may\n execute code, make network requests, or access system resources via tool\n calls. All tool calls will require your explicit approval before\n execution. For more information, see{' '}\n <Link url=\"https://github.com/shareAI-lab/kode/blob/main/docs/mcp.md\">\n MCP documentation\n </Link>\n </Text>\n\n <Text dimColor>\n Remember: You can always change these choices later by running `\n {PRODUCT_COMMAND} mcp reset-project-choices`\n </Text>\n </>\n )\n}\n", "import React from 'react'\nimport { Box, Text, useInput } from 'ink'\nimport { getTheme } from '#core/utils/theme'\nimport { Select } from './CustomSelect/select'\nimport {\n saveCurrentProjectConfig,\n getCurrentProjectConfig,\n} from '#core/utils/config'\nimport { MCPServerDialogCopy } from './MCPServerDialogCopy'\nimport { useExitOnCtrlCD } from '#ui-ink/hooks/useExitOnCtrlCD'\n\ntype Props = {\n serverName: string\n onDone(): void\n}\n\nexport function MCPServerApprovalDialog({\n serverName,\n onDone,\n}: Props): React.ReactNode {\n const theme = getTheme()\n function onChange(value: 'yes' | 'no') {\n const config = getCurrentProjectConfig()\n switch (value) {\n case 'yes': {\n if (!config.approvedMcprcServers) {\n config.approvedMcprcServers = []\n }\n if (!config.approvedMcprcServers.includes(serverName)) {\n config.approvedMcprcServers.push(serverName)\n }\n saveCurrentProjectConfig(config)\n onDone()\n break\n }\n case 'no': {\n if (!config.rejectedMcprcServers) {\n config.rejectedMcprcServers = []\n }\n if (!config.rejectedMcprcServers.includes(serverName)) {\n config.rejectedMcprcServers.push(serverName)\n }\n saveCurrentProjectConfig(config)\n onDone()\n break\n }\n }\n }\n\n const exitState = useExitOnCtrlCD(() => process.exit(0))\n\n useInput((_input, key) => {\n if (key.escape) {\n onDone()\n return\n }\n })\n\n return (\n <>\n <Box\n flexDirection=\"column\"\n gap={1}\n padding={1}\n borderStyle=\"round\"\n borderColor={theme.warning}\n >\n <Text bold color={theme.warning}>\n New MCP Server Detected\n </Text>\n <Text>\n This project contains an MCP config file (.mcp.json or .mcprc) with an\n MCP server that requires your approval:\n </Text>\n <Text bold>{serverName}</Text>\n\n <MCPServerDialogCopy />\n\n <Text>Do you want to approve this MCP server?</Text>\n\n <Select\n options={[\n { label: 'Yes, approve this server', value: 'yes' },\n { label: 'No, reject this server', value: 'no' },\n ]}\n onChange={value => onChange(value as 'yes' | 'no')}\n />\n </Box>\n <Box marginLeft={3}>\n <Text dimColor>\n {exitState.pending ? (\n <>Press {exitState.keyName} again to exit</>\n ) : (\n <>Enter to confirm \u00B7 Esc to reject</>\n )}\n </Text>\n </Box>\n </>\n )\n}\n", "type SemverModule = {\n gt?: (a: string, b: string) => boolean\n}\n\nfunction resolveSemverModule(semverMod: unknown): SemverModule {\n if (semverMod && typeof semverMod === 'object') {\n const record = semverMod as Record<string, unknown>\n const directGt = record.gt\n if (typeof directGt === 'function') {\n return { gt: directGt as (a: string, b: string) => boolean }\n }\n const def = record.default\n if (def && typeof def === 'object') {\n const defRecord = def as Record<string, unknown>\n const defGt = defRecord.gt\n if (typeof defGt === 'function') {\n return { gt: defGt as (a: string, b: string) => boolean }\n }\n }\n }\n return {}\n}\n\nexport type UpdateInfo = { version: string | null; commands: string[] | null }\n\nexport async function fetchUpdateInfo(\n currentVersion: string,\n): Promise<UpdateInfo> {\n try {\n const [{ getLatestVersion, getUpdateCommandSuggestions }, semverMod] =\n await Promise.all([import('#core/utils/autoUpdater'), import('semver')])\n\n const semver = resolveSemverModule(semverMod)\n if (!semver.gt) return { version: null, commands: null }\n\n const latest = await getLatestVersion()\n if (latest && semver.gt(latest, currentVersion)) {\n const cmds = await getUpdateCommandSuggestions()\n return { version: latest, commands: cmds }\n }\n } catch {}\n\n return { version: null, commands: null }\n}\n", "import type { RenderOptions } from 'ink'\n\nimport { runPrintMode } from '../print/runPrintMode'\nimport { setup } from '../setup'\nimport { showSetupScreens } from '../setupScreens'\nimport { clearOutputStyleCache } from '#cli-services/outputStyles'\nimport { isDefaultSlowAndCapableModel } from '#core/utils/model'\nimport { dateToFilename } from '#core/utils/log'\nimport { assertMinVersion } from '#core/utils/autoUpdater'\nimport { MACRO } from '#core/constants/macros'\nimport {\n clearAgentCache,\n setFlagAgentsFromCliJson,\n} from '#core/utils/agentLoader'\nimport {\n setEnabledSettingSourcesFromCli,\n getCurrentProjectConfig,\n} from '#config'\nimport { getClients, getClientsForCliMcpConfig } from '#core/mcp/client'\n\nimport {\n renderRepl,\n renderResumeConversationSelector,\n} from '../interactive/renderers'\n\nimport { fetchUpdateInfo } from './rootAction/updateInfo'\nimport type { Message } from '#core/query'\n\ntype RootCommandOptions = {\n cwd?: string\n debug?: unknown\n verbose?: boolean\n enableArchitect?: boolean\n print?: boolean\n outputFormat?: string\n jsonSchema?: string\n inputFormat?: string\n mcpDebug?: boolean\n dangerouslySkipPermissions?: boolean\n allowDangerouslySkipPermissions?: boolean\n maxBudgetUsd?: string\n includePartialMessages?: boolean\n replayUserMessages?: boolean\n allowedTools?: unknown\n tools?: unknown\n disallowedTools?: unknown\n mcpConfig?: unknown\n systemPrompt?: string\n appendSystemPrompt?: string\n permissionMode?: string\n permissionPromptTool?: string\n safe?: boolean\n disableSlashCommands?: boolean\n pluginDir?: unknown\n model?: string\n addDir?: unknown\n web?: boolean\n webHost?: string\n webPort?: string\n strictMcpConfig?: boolean\n agents?: string\n settingSources?: string\n resume?: unknown\n continue?: boolean\n forkSession?: boolean\n sessionId?: string\n sessionPersistence: boolean\n}\n\nexport function createRootAction(args: {\n stdinContent: string\n renderContext: RenderOptions | undefined\n renderContextWithExitOnCtrlC: RenderOptions | undefined\n}): (prompt: string | undefined, options: RootCommandOptions) => Promise<void> {\n return async (\n prompt,\n {\n cwd: maybeCwd,\n debug,\n verbose,\n enableArchitect,\n print,\n outputFormat,\n jsonSchema,\n inputFormat,\n mcpDebug,\n dangerouslySkipPermissions,\n allowDangerouslySkipPermissions,\n maxBudgetUsd,\n includePartialMessages,\n replayUserMessages,\n allowedTools,\n tools: cliTools,\n disallowedTools,\n mcpConfig,\n systemPrompt: systemPromptOverride,\n appendSystemPrompt,\n permissionMode,\n permissionPromptTool,\n safe,\n disableSlashCommands,\n pluginDir,\n model,\n addDir,\n web,\n webHost,\n webPort,\n strictMcpConfig,\n agents,\n settingSources,\n resume,\n continue: continueConversation,\n forkSession,\n sessionId,\n sessionPersistence,\n },\n ) => {\n const cwd = maybeCwd ?? process.cwd()\n\n try {\n setEnabledSettingSourcesFromCli(settingSources)\n } catch (err) {\n process.stderr.write(\n `Error processing --setting-sources: ${err instanceof Error ? err.message : String(err)}\\n`,\n )\n process.exit(1)\n }\n\n setFlagAgentsFromCliJson(agents)\n clearAgentCache()\n clearOutputStyleCache()\n\n if (web && print) {\n console.error('Error: --web and --print cannot be used together.')\n process.exit(1)\n }\n\n await setup(cwd, safe)\n\n if (web) {\n const { runWebOnlyMode } = await import('./rootAction/webOnlyMode')\n await runWebOnlyMode({ cwd, webHost, webPort })\n return\n }\n await showSetupScreens(safe, print)\n\n assertMinVersion()\n\n {\n const requested =\n Array.isArray(pluginDir) && pluginDir.length > 0 ? pluginDir : []\n const { listEnabledInstalledPluginPackRoots } =\n await import('#cli-services/skillMarketplace')\n const installed = listEnabledInstalledPluginPackRoots()\n\n const all = [...installed, ...requested].filter(Boolean)\n const deduped = Array.from(new Set(all))\n\n if (deduped.length > 0) {\n const { configureSessionPlugins } =\n await import('#cli-services/pluginRuntime')\n const { errors } = await configureSessionPlugins({\n pluginDirs: deduped,\n })\n for (const err of errors) {\n console.warn(err)\n }\n }\n }\n\n const [{ ask }, { getTools }, { getCommands }] = await Promise.all([\n import('#cli-utils/ask'),\n import('#tools'),\n import('#cli-commands'),\n ])\n const commands = await getCommands()\n\n const mcpClientsPromise =\n (Array.isArray(mcpConfig) && mcpConfig.length > 0) ||\n strictMcpConfig === true\n ? getClientsForCliMcpConfig({\n mcpConfig: Array.isArray(mcpConfig) ? mcpConfig : [],\n strictMcpConfig: strictMcpConfig === true,\n projectDir: cwd,\n })\n : getClients()\n\n const [allTools, mcpClients] = await Promise.all([\n getTools(\n enableArchitect ?? getCurrentProjectConfig().enableArchitectTool,\n ),\n mcpClientsPromise,\n ])\n const tools =\n disableSlashCommands === true\n ? allTools.filter(t => t.name !== 'SlashCommand')\n : allTools\n const inputPrompt = [prompt, args.stdinContent].filter(Boolean).join('\\n')\n\n const { loadKodeAgentSessionMessages, findMostRecentKodeAgentSessionId } =\n await import('#protocol/utils/kodeAgentSessionLoad')\n const { listKodeAgentSessions, resolveResumeSessionIdentifier } =\n await import('#protocol/utils/kodeAgentSessionResume')\n const { isUuid } = await import('#core/utils/uuid')\n const { setKodeAgentSessionId, getKodeAgentSessionId } =\n await import('#protocol/utils/kodeAgentSessionId')\n const { randomUUID } = await import('crypto')\n\n const wantsContinue = Boolean(continueConversation)\n const wantsResume = resume !== undefined\n const wantsFork = Boolean(forkSession)\n\n if (sessionId && !isUuid(String(sessionId))) {\n console.error(`Error: --session-id must be a valid UUID`)\n process.exit(1)\n }\n\n if (sessionId && (wantsContinue || wantsResume) && !wantsFork) {\n console.error(\n `Error: --session-id can only be used with --continue or --resume if --fork-session is also specified.`,\n )\n process.exit(1)\n }\n\n let initialMessages: Message[] | undefined\n let resumedFromSessionId: string | null = null\n let needsResumeSelector = false\n\n if (wantsContinue) {\n const latest = findMostRecentKodeAgentSessionId(cwd)\n if (!latest) {\n console.error('No conversation found to continue')\n process.exit(1)\n }\n initialMessages = loadKodeAgentSessionMessages({\n cwd,\n sessionId: latest,\n })\n resumedFromSessionId = latest\n } else if (wantsResume) {\n if (resume === true) {\n needsResumeSelector = true\n } else {\n const identifier = String(resume)\n const resolved = resolveResumeSessionIdentifier({ cwd, identifier })\n if (resolved.kind === 'ok') {\n initialMessages = loadKodeAgentSessionMessages({\n cwd,\n sessionId: resolved.sessionId,\n })\n resumedFromSessionId = resolved.sessionId\n } else if (resolved.kind === 'different_directory') {\n console.error(\n resolved.otherCwd\n ? `Error: That session belongs to a different directory: ${resolved.otherCwd}`\n : `Error: That session belongs to a different directory.`,\n )\n process.exit(1)\n } else if (resolved.kind === 'ambiguous') {\n console.error(\n `Error: Multiple sessions match \"${identifier}\": ${resolved.matchingSessionIds.join(\n ', ',\n )}`,\n )\n process.exit(1)\n } else {\n console.error(\n `No conversation found with session ID or name: ${identifier}`,\n )\n process.exit(1)\n }\n }\n }\n\n if (needsResumeSelector && print) {\n console.error(\n 'Error: --resume without a value requires interactive mode (no --print).',\n )\n process.exit(1)\n }\n\n if (!needsResumeSelector) {\n const effectiveSessionId = (() => {\n if (resumedFromSessionId) {\n if (wantsFork) return sessionId ? String(sessionId) : randomUUID()\n return resumedFromSessionId\n }\n if (sessionId) return String(sessionId)\n return getKodeAgentSessionId()\n })()\n\n setKodeAgentSessionId(effectiveSessionId)\n }\n\n if (print) {\n await runPrintMode({\n prompt,\n stdinContent: args.stdinContent,\n inputPrompt,\n cwd,\n safe,\n verbose,\n outputFormat,\n inputFormat,\n jsonSchema,\n permissionPromptTool,\n replayUserMessages,\n cliTools,\n tools,\n commands,\n ask,\n initialMessages,\n permissionMode,\n systemPromptOverride,\n appendSystemPrompt,\n allowedTools,\n disallowedTools,\n dangerouslySkipPermissions,\n allowDangerouslySkipPermissions,\n sessionPersistence,\n model,\n addDir,\n mcpClients,\n })\n return\n }\n\n const updateInfo = await fetchUpdateInfo(MACRO.VERSION)\n\n if (needsResumeSelector) {\n const sessions = listKodeAgentSessions({ cwd })\n if (sessions.length === 0) {\n console.error('No conversation found to resume')\n process.exit(1)\n }\n\n renderResumeConversationSelector(\n {\n cwd,\n commands,\n sessions,\n tools,\n verbose,\n safeMode: safe,\n debug: Boolean(debug),\n disableSlashCommands: disableSlashCommands === true,\n mcpClients,\n initialPrompt: inputPrompt,\n forkSession: wantsFork,\n forkSessionId: sessionId ? String(sessionId) : null,\n initialUpdateVersion: updateInfo.version,\n initialUpdateCommands: updateInfo.commands,\n },\n args.renderContextWithExitOnCtrlC,\n )\n return\n }\n\n const isDefaultModel = await isDefaultSlowAndCapableModel()\n await renderRepl(\n {\n commands,\n debug: Boolean(debug),\n disableSlashCommands: disableSlashCommands === true,\n initialPrompt: inputPrompt,\n messageLogName: dateToFilename(new Date()),\n shouldShowPromptInput: true,\n verbose,\n tools,\n safeMode: safe,\n mcpClients,\n isDefaultModel,\n initialUpdateVersion: updateInfo.version,\n initialUpdateCommands: updateInfo.commands,\n initialMessages,\n },\n args.renderContext,\n )\n }\n}\n", "import type { RenderOptions } from 'ink'\nimport type { Command } from '@commander-js/extra-typings'\n\nimport { createCliProgram } from './program'\n\nexport async function parseArgs(\n stdinContent: string,\n renderContext: RenderOptions | undefined,\n): Promise<Command> {\n const program = createCliProgram(stdinContent, renderContext)\n await program.parseAsync(process.argv)\n return program\n}\n\nexport { createCliProgram } from './program'\n", "import '#core/utils/sanitizeAnthropicEnv'\nimport { initDebugLogger } from '#core/utils/debugLogger'\nimport { logError } from '#core/utils/log'\nimport { ConfigParseError } from '#core/utils/errors'\nimport { BunShell } from '#runtime/shell'\nimport { enableConfigs, validateAndRepairAllGPT5Profiles } from '#config'\nimport { showInvalidConfigDialog } from '#ui-ink/components/InvalidConfigDialog'\nimport { ensurePackagedRuntimeEnv, ensureYogaWasmPath } from './bootstrapEnv'\nimport { parseArgs } from '#host-cli'\n\nimport { cursorShow } from 'ansi-escapes'\nimport { openSync } from 'fs'\nimport { cwd } from 'process'\nimport { ReadStream } from 'tty'\n\n// Keep a reference so bundlers don't drop this side-effect import.\nimport * as anthropicNodeShims from '@anthropic-ai/sdk/shims/node'\nObject.keys(anthropicNodeShims)\n\n// ink and REPL are imported lazily to avoid top-level awaits during module init\nimport type { RenderOptions } from 'ink'\n\nexport async function runCli(): Promise<void> {\n ensurePackagedRuntimeEnv()\n ensureYogaWasmPath(import.meta.url)\n\n // \u521D\u59CB\u5316\u8C03\u8BD5\u65E5\u5FD7\u7CFB\u7EDF\n initDebugLogger()\n\n // Validate configs are valid and enable configuration system\n try {\n enableConfigs()\n\n // \uD83D\uDD27 Validate and auto-repair GPT-5 model profiles (best-effort, non-blocking)\n // Avoid printing during interactive render; log to file on failure.\n queueMicrotask(() => {\n try {\n validateAndRepairAllGPT5Profiles()\n } catch (repairError) {\n logError(`GPT-5 configuration validation failed: ${repairError}`)\n }\n })\n } catch (error: unknown) {\n if (error instanceof ConfigParseError) {\n await showInvalidConfigDialog({ error })\n return\n }\n }\n\n // Disabled background notifier to avoid mid-screen logs during REPL\n\n let inputPrompt = ''\n let renderContext: RenderOptions | undefined = {\n exitOnCtrlC: false,\n }\n\n const wantsStreamJsonStdin =\n process.argv.some(\n (arg, idx, all) =>\n arg === '--input-format' && all[idx + 1] === 'stream-json',\n ) || process.argv.some(arg => arg.startsWith('--input-format=stream-json'))\n\n if (\n !process.stdin.isTTY &&\n !process.env.CI &&\n // Input hijacking breaks MCP.\n !process.argv.includes('mcp') &&\n !wantsStreamJsonStdin\n ) {\n inputPrompt = await stdin()\n if (process.platform !== 'win32') {\n try {\n const ttyFd = openSync('/dev/tty', 'r')\n renderContext = { ...renderContext, stdin: new ReadStream(ttyFd) }\n } catch (err) {\n logError(`Could not open /dev/tty: ${err}`)\n }\n }\n }\n await parseArgs(inputPrompt, renderContext)\n}\n\n// NOTE: stdin is currently buffered; streaming can be added if needed.\nasync function stdin() {\n if (process.stdin.isTTY) {\n return ''\n }\n\n let data = ''\n for await (const chunk of process.stdin) data += chunk\n return data\n}\n\nprocess.on('exit', () => {\n resetCursor()\n BunShell.getInstance().close()\n})\n\nlet isGracefulExitInProgress = false\nasync function gracefulExit(code = 0) {\n if (isGracefulExitInProgress) {\n process.exit(code)\n return\n }\n isGracefulExitInProgress = true\n\n try {\n const { runSessionEndHooks } = await import('#core/utils/kodeHooks')\n const { getKodeAgentSessionId } =\n await import('#protocol/utils/kodeAgentSessionId')\n const { tmpdir } = await import('os')\n const { join } = await import('path')\n\n const sessionId = getKodeAgentSessionId()\n const transcriptPath = join(\n tmpdir(),\n 'kode-hooks-transcripts',\n `${sessionId}.transcript.txt`,\n )\n\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), 5000)\n const signal = controller.signal\n const cleanup = () => clearTimeout(timer)\n\n try {\n await runSessionEndHooks({\n reason: 'exit',\n cwd: cwd(),\n transcriptPath,\n signal,\n })\n } finally {\n cleanup()\n }\n } catch {\n // best-effort only\n }\n\n try {\n resetCursor()\n } catch {}\n try {\n BunShell.getInstance().close()\n } catch {}\n process.exit(code)\n}\n\nprocess.on('SIGINT', () => void gracefulExit(0))\nprocess.on('SIGTERM', () => void gracefulExit(0))\n// Windows CTRL+BREAK\nprocess.on('SIGBREAK', () => void gracefulExit(0))\nprocess.on('unhandledRejection', err => {\n console.error('Unhandled rejection:', err)\n void gracefulExit(1)\n})\nprocess.on('uncaughtException', err => {\n console.error('Uncaught exception:', err)\n void gracefulExit(1)\n})\n\nfunction resetCursor() {\n const terminal = process.stderr.isTTY\n ? process.stderr\n : process.stdout.isTTY\n ? process.stdout\n : undefined\n terminal?.write(`\\u001B[?25h${cursorShow}`)\n}\n", "import { runCli } from './app'\n\nawait runCli()\n"],
5
+ "mappings": "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",
6
+ "names": ["cwd", "join", "join", "cwd", "cwd", "cwd", "cwd", "context", "existsSync", "cwd", "cwd", "existsSync", "args", "match", "existsSync", "readFileSync", "join", "render", "React", "MultiSelect", "Box", "Text", "getTheme", "writeFileSync", "cwd", "cwd", "writeFileSync", "cwd", "cwd", "cwd", "React", "render", "existsSync", "fs", "fs", "cwd", "existsSync", "cwd", "cwd", "cwd", "React", "React", "Box", "Text", "useInput", "React", "useInput", "Box", "Text", "React", "render", "React", "Box", "Text", "useInput", "React", "Text", "React", "Text", "useInput", "React", "Box", "Text", "React", "Box", "Text", "useInput", "useInput", "React", "Box", "Text", "render", "React", "render", "React", "debug", "cwd", "cwd", "cwd", "join"]
7
+ }
@@ -0,0 +1,10 @@
1
+ import {
2
+ getTheme
3
+ } from "./chunk-T7RB5V5J.js";
4
+ import "./chunk-LB6TCPDI.js";
5
+ import "./chunk-XR2W3MAM.js";
6
+ import "./chunk-B3MW3YGY.js";
7
+ import "./chunk-54KOYG5C.js";
8
+ export {
9
+ getTheme
10
+ };
@@ -1,13 +1,11 @@
1
- import { createRequire as __kodeCreateRequire } from "node:module";
2
- const require = __kodeCreateRequire(import.meta.url);
3
1
  import {
4
2
  applyToolPermissionContextUpdate,
5
3
  applyToolPermissionContextUpdates,
6
4
  canUserModifyToolPermissionUpdate,
7
5
  createDefaultToolPermissionContext,
8
6
  isPersistableToolPermissionDestination
9
- } from "./chunk-S6HRABTA.js";
10
- import "./chunk-JC6NCUG5.js";
7
+ } from "./chunk-CP6E5UG6.js";
8
+ import "./chunk-54KOYG5C.js";
11
9
  export {
12
10
  applyToolPermissionContextUpdate,
13
11
  applyToolPermissionContextUpdates,
@@ -0,0 +1,18 @@
1
+ import {
2
+ loadToolPermissionContextFromDisk,
3
+ persistToolPermissionUpdateToDisk
4
+ } from "./chunk-2JN5MY67.js";
5
+ import "./chunk-CP6E5UG6.js";
6
+ import "./chunk-3OEJVB5A.js";
7
+ import "./chunk-BBJFHTBC.js";
8
+ import "./chunk-QHQOBUF6.js";
9
+ import "./chunk-W5EGGA44.js";
10
+ import "./chunk-DXD76CMV.js";
11
+ import "./chunk-LB6TCPDI.js";
12
+ import "./chunk-XR2W3MAM.js";
13
+ import "./chunk-B3MW3YGY.js";
14
+ import "./chunk-54KOYG5C.js";
15
+ export {
16
+ loadToolPermissionContextFromDisk,
17
+ persistToolPermissionUpdateToDisk
18
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,7 @@
1
+ import {
2
+ isUuid
3
+ } from "./chunk-UNOY3VJ2.js";
4
+ import "./chunk-54KOYG5C.js";
5
+ export {
6
+ isUuid
7
+ };
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }