@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
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/utils/protocol/kodeAgentSessionLog.ts"],
4
- "sourcesContent": ["import { execFileSync } from 'child_process'\nimport {\n appendFileSync,\n existsSync,\n mkdirSync,\n readFileSync,\n statSync,\n writeFileSync,\n} from 'fs'\nimport { randomBytes } from 'crypto'\nimport { dirname, join } from 'path'\nimport type { Message } from '@query'\nimport { MACRO } from '@constants/macros'\nimport { getCwd } from '@utils/state'\nimport { getKodeAgentSessionId } from './kodeAgentSessionId'\nimport { getKodeBaseDir } from '@utils/config/env'\nimport {\n PLAN_SLUG_ADJECTIVES,\n PLAN_SLUG_NOUNS,\n PLAN_SLUG_VERBS,\n} from '@utils/plan/planSlugWords'\n\ntype PersistTarget =\n | { kind: 'session'; sessionId: string }\n | { kind: 'agent'; agentId: string }\n\ntype JsonlEnvelopeBase = {\n cwd: string\n sessionId: string\n version: string\n gitBranch?: string\n userType: string\n isSidechain: boolean\n parentUuid: string | null\n logicalParentUuid?: string\n agentId: string\n slug: string\n uuid: string\n timestamp: string\n}\n\ntype SessionJsonlEntry =\n | (JsonlEnvelopeBase & {\n type: 'user'\n message: any\n toolUseResult?: any\n })\n | (JsonlEnvelopeBase & {\n type: 'assistant'\n message: any\n requestId?: string\n isApiErrorMessage?: boolean\n })\n | { type: 'summary'; summary: string; leafUuid: string }\n | { type: 'custom-title'; sessionId: string; customTitle: string }\n | { type: 'tag'; sessionId: string; tag: string }\n | {\n type: 'file-history-snapshot'\n messageId: string\n snapshot: {\n messageId: string\n trackedFileBackups: Record<string, unknown>\n timestamp: string\n }\n isSnapshotUpdate: boolean\n }\n\nfunction getSessionStoreBaseDir(): string {\n return getKodeBaseDir()\n}\n\nexport function sanitizeProjectNameForSessionStore(cwd: string): string {\n return cwd.replace(/[^a-zA-Z0-9]/g, '-')\n}\n\nexport function getSessionProjectsDir(): string {\n return join(getSessionStoreBaseDir(), 'projects')\n}\n\nexport function getSessionProjectDir(cwd: string): string {\n return join(getSessionProjectsDir(), sanitizeProjectNameForSessionStore(cwd))\n}\n\nexport function getSessionLogFilePath(args: {\n cwd: string\n sessionId: string\n}): string {\n return join(getSessionProjectDir(args.cwd), `${args.sessionId}.jsonl`)\n}\n\nexport function getAgentLogFilePath(args: {\n cwd: string\n agentId: string\n}): string {\n return join(getSessionProjectDir(args.cwd), `agent-${args.agentId}.jsonl`)\n}\n\nfunction safeMkdir(dir: string): void {\n if (existsSync(dir)) return\n mkdirSync(dir, { recursive: true })\n}\n\nfunction safeEnsureFile(path: string): void {\n safeMkdir(dirname(path))\n if (!existsSync(path)) writeFileSync(path, '', 'utf8')\n}\n\nfunction safeAppendJsonl(path: string, record: unknown): void {\n try {\n safeEnsureFile(path)\n appendFileSync(path, JSON.stringify(record) + '\\n', 'utf8')\n } catch {\n }\n}\n\nconst lastUuidByFile = new Map<string, string | null>()\nconst snapshotWrittenByFile = new Set<string>()\nconst slugBySessionId = new Map<string, string>()\nlet currentSessionCustomTitle: string | null = null\nlet currentSessionTag: string | null = null\n\ntype LastPersistedInfo = { uuid: string | null; slug: string | null }\n\nfunction safeReadLastPersistedInfo(filePath: string): LastPersistedInfo {\n try {\n if (!existsSync(filePath)) return { uuid: null, slug: null }\n const content = readFileSync(filePath, 'utf8')\n const lines = content.split('\\n')\n\n let lastSlug: string | null = null\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i]?.trim()\n if (!line) continue\n let parsed: any\n try {\n parsed = JSON.parse(line)\n } catch {\n continue\n }\n if (!parsed || typeof parsed !== 'object') continue\n\n if (!lastSlug && typeof parsed.slug === 'string' && parsed.slug.trim()) {\n lastSlug = parsed.slug.trim()\n }\n\n if (typeof parsed.uuid === 'string' && parsed.uuid) {\n return { uuid: parsed.uuid, slug: lastSlug }\n }\n }\n\n return { uuid: null, slug: lastSlug }\n } catch {\n return { uuid: null, slug: null }\n }\n}\n\nfunction pickIndex(length: number): number {\n return randomBytes(4).readUInt32BE(0) % length\n}\n\nfunction pickWord(words: readonly string[]): string {\n return words[pickIndex(words.length)]!\n}\n\nfunction generateSessionSlug(): string {\n const adjective = pickWord(PLAN_SLUG_ADJECTIVES)\n const verb = pickWord(PLAN_SLUG_VERBS)\n const noun = pickWord(PLAN_SLUG_NOUNS)\n return `${adjective}-${verb}-${noun}`\n}\n\nfunction getOrCreateSessionSlug(sessionId: string): string {\n const existing = slugBySessionId.get(sessionId)\n if (existing) return existing\n const slug = generateSessionSlug()\n slugBySessionId.set(sessionId, slug)\n return slug\n}\n\ntype GitBranchCacheEntry = { cwd: string; value: string | undefined }\nlet gitBranchCache: GitBranchCacheEntry | null = null\n\nfunction getGitBranchBestEffort(cwd: string): string | undefined {\n if (gitBranchCache && gitBranchCache.cwd === cwd) return gitBranchCache.value\n\n let value: string | undefined\n try {\n const stdout = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], {\n cwd,\n stdio: ['ignore', 'pipe', 'ignore'],\n timeout: 750,\n })\n const branch = stdout.toString('utf8').trim()\n value = branch || undefined\n } catch {\n value = undefined\n }\n\n gitBranchCache = { cwd, value }\n return value\n}\n\nfunction ensureFileHistorySnapshot(\n filePath: string,\n firstMessageUuid: string,\n): void {\n if (snapshotWrittenByFile.has(filePath)) return\n\n try {\n safeEnsureFile(filePath)\n const size = statSync(filePath).size\n if (size > 0) {\n snapshotWrittenByFile.add(filePath)\n return\n }\n } catch {\n }\n\n const now = new Date().toISOString()\n safeAppendJsonl(filePath, {\n type: 'file-history-snapshot',\n messageId: firstMessageUuid,\n snapshot: {\n messageId: firstMessageUuid,\n trackedFileBackups: {},\n timestamp: now,\n },\n isSnapshotUpdate: false,\n } satisfies SessionJsonlEntry)\n\n snapshotWrittenByFile.add(filePath)\n}\n\nfunction resolvePersistTarget(toolUseContext: {\n agentId?: string\n}): PersistTarget {\n const agentId = toolUseContext.agentId\n if (agentId && agentId !== 'main') return { kind: 'agent', agentId }\n return { kind: 'session', sessionId: getKodeAgentSessionId() }\n}\n\nexport function appendSessionJsonlFromMessage(args: {\n message: Message\n toolUseContext: { agentId?: string }\n}): void {\n const { message, toolUseContext } = args\n if (message.type !== 'user' && message.type !== 'assistant') return\n\n const cwd = getCwd()\n const userType = (process.env.USER_TYPE ?? 'external').trim() || 'external'\n const sessionId = getKodeAgentSessionId()\n const agentId = (toolUseContext.agentId ?? 'main').trim() || 'main'\n const isSidechain = agentId !== 'main'\n const gitBranch = getGitBranchBestEffort(cwd)\n\n const target = resolvePersistTarget(toolUseContext)\n const filePath =\n target.kind === 'agent'\n ? getAgentLogFilePath({ cwd, agentId: target.agentId })\n : getSessionLogFilePath({ cwd, sessionId: target.sessionId })\n\n if (!lastUuidByFile.has(filePath)) {\n const info = safeReadLastPersistedInfo(filePath)\n lastUuidByFile.set(filePath, info.uuid)\n if (info.slug) slugBySessionId.set(sessionId, info.slug)\n }\n const previousUuid = lastUuidByFile.get(filePath) ?? null\n\n const slug = getOrCreateSessionSlug(sessionId)\n\n if (target.kind === 'session') {\n ensureFileHistorySnapshot(filePath, message.uuid)\n }\n\n const base: JsonlEnvelopeBase = {\n parentUuid: previousUuid,\n logicalParentUuid: undefined,\n isSidechain,\n userType,\n cwd,\n sessionId,\n version: MACRO.VERSION,\n ...(gitBranch ? { gitBranch } : {}),\n agentId,\n slug,\n uuid: message.uuid,\n timestamp: new Date().toISOString(),\n }\n\n const record: SessionJsonlEntry =\n message.type === 'user'\n ? {\n ...base,\n type: 'user',\n message: message.message,\n ...(message.toolUseResult?.data !== undefined\n ? { toolUseResult: message.toolUseResult.data }\n : {}),\n }\n : {\n ...base,\n type: 'assistant',\n message: message.message,\n ...(typeof (message as any).requestId === 'string'\n ? { requestId: String((message as any).requestId) }\n : {}),\n ...(message.isApiErrorMessage ? { isApiErrorMessage: true } : {}),\n }\n\n safeAppendJsonl(filePath, record)\n lastUuidByFile.set(filePath, message.uuid)\n}\n\nexport function appendSessionSummaryRecord(args: {\n summary: string\n leafUuid: string\n sessionId?: string\n}): void {\n const sessionId = args.sessionId ?? getKodeAgentSessionId()\n const cwd = getCwd()\n safeAppendJsonl(getSessionLogFilePath({ cwd, sessionId }), {\n type: 'summary',\n summary: args.summary,\n leafUuid: args.leafUuid,\n } satisfies SessionJsonlEntry)\n}\n\nexport function appendSessionCustomTitleRecord(args: {\n sessionId: string\n customTitle: string\n}): void {\n const cwd = getCwd()\n safeAppendJsonl(getSessionLogFilePath({ cwd, sessionId: args.sessionId }), {\n type: 'custom-title',\n sessionId: args.sessionId,\n customTitle: args.customTitle,\n } satisfies SessionJsonlEntry)\n if (args.sessionId === getKodeAgentSessionId()) {\n currentSessionCustomTitle = args.customTitle\n }\n}\n\nexport function appendSessionTagRecord(args: {\n sessionId: string\n tag: string\n}): void {\n const cwd = getCwd()\n safeAppendJsonl(getSessionLogFilePath({ cwd, sessionId: args.sessionId }), {\n type: 'tag',\n sessionId: args.sessionId,\n tag: args.tag,\n } satisfies SessionJsonlEntry)\n if (args.sessionId === getKodeAgentSessionId()) {\n currentSessionTag = args.tag\n }\n}\n\nexport function getCurrentSessionCustomTitle(): string | null {\n return currentSessionCustomTitle\n}\n\nexport function getCurrentSessionTag(): string | null {\n return currentSessionTag\n}\n\nexport function resetSessionJsonlStateForTests(): void {\n lastUuidByFile.clear()\n snapshotWrittenByFile.clear()\n slugBySessionId.clear()\n gitBranchCache = null\n currentSessionCustomTitle = null\n currentSessionTag = null\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/services/plugins/pluginValidation.ts"],
4
- "sourcesContent": ["import { existsSync, lstatSync, readFileSync } from 'node:fs'\nimport { dirname, join, resolve, sep } from 'node:path'\nimport figures from 'figures'\nimport { z } from 'zod'\nimport { getCwd } from '@utils/state'\nimport { parseFrontmatter } from '@services/customCommands'\nimport { MarketplaceManifestSchema } from '@services/skillMarketplace'\n\nexport type ValidationIssue = {\n path: string\n message: string\n}\n\nexport type ValidationResult = {\n success: boolean\n fileType: 'plugin' | 'marketplace'\n filePath: string\n errors: ValidationIssue[]\n warnings: ValidationIssue[]\n}\n\nconst PluginManifestSchema = z\n .strictObject({\n name: z.string().min(1),\n version: z.string().optional(),\n description: z.string().optional(),\n author: z.unknown().optional(),\n homepage: z.string().optional(),\n repository: z.unknown().optional(),\n license: z.string().optional(),\n keywords: z.array(z.string()).optional(),\n commands: z.union([z.string(), z.array(z.string())]).optional(),\n agents: z.union([z.string(), z.array(z.string())]).optional(),\n skills: z.union([z.string(), z.array(z.string())]).optional(),\n hooks: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),\n mcpServers: z\n .union([z.string(), z.record(z.string(), z.unknown())])\n .optional(),\n })\n .passthrough()\n\nfunction resolveFromAgentCwd(input: string): string {\n const trimmed = input.trim()\n if (!trimmed) return trimmed\n if (trimmed.startsWith('~')) {\n return trimmed\n }\n if (trimmed.startsWith(sep)) return trimmed\n return resolve(getCwd(), trimmed)\n}\n\nfunction validateRelativePath(path: string): string | null {\n if (!path.startsWith('./')) return 'must start with \"./\"'\n if (path.split('/').includes('..')) return 'must not contain \"..\"'\n if (path.includes('\\\\')) return 'must use forward slashes'\n return null\n}\n\nfunction safeResolveWithin(baseDir: string, rel: string): string | null {\n const normalized = rel.replace(/\\\\/g, '/')\n if (!normalized.startsWith('./') || normalized.split('/').includes('..'))\n return null\n const abs = resolve(baseDir, normalized.split('/').join(sep))\n const base = resolve(baseDir)\n if (!abs.startsWith(base + sep) && abs !== base) return null\n return abs\n}\n\nfunction validateSkillDir(skillDir: string): ValidationIssue[] {\n const issues: ValidationIssue[] = []\n const name = skillDir.split(sep).pop() || ''\n if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name) || name.length > 64) {\n issues.push({\n path: `skills/${name}`,\n message:\n 'Invalid skill directory name (must be lowercase kebab-case, 1\u201364 chars)',\n })\n return issues\n }\n\n const skillFileCandidates = [\n join(skillDir, 'SKILL.md'),\n join(skillDir, 'skill.md'),\n ]\n const skillFile = skillFileCandidates.find(p => existsSync(p))\n if (!skillFile) {\n issues.push({\n path: `skills/${name}`,\n message: 'Missing SKILL.md (or skill.md)',\n })\n return issues\n }\n\n try {\n const raw = readFileSync(skillFile, 'utf8')\n const { frontmatter } = parseFrontmatter(raw)\n const declared =\n typeof (frontmatter as any).name === 'string'\n ? String((frontmatter as any).name).trim()\n : ''\n if (!declared) {\n issues.push({\n path: `${name}/SKILL.md`,\n message: 'Missing required frontmatter field: name',\n })\n } else if (declared !== name) {\n issues.push({\n path: `${name}/SKILL.md`,\n message: `Frontmatter name must match directory name (dir=${name}, name=${declared})`,\n })\n }\n\n const description =\n typeof (frontmatter as any).description === 'string'\n ? String((frontmatter as any).description).trim()\n : ''\n if (!description) {\n issues.push({\n path: `${name}/SKILL.md`,\n message: 'Missing required frontmatter field: description',\n })\n } else if (description.length > 1024) {\n issues.push({\n path: `${name}/SKILL.md`,\n message: 'description must be <= 1024 characters',\n })\n }\n } catch (err) {\n issues.push({\n path: `${name}/SKILL.md`,\n message: `Failed to parse SKILL.md: ${err instanceof Error ? err.message : String(err)}`,\n })\n }\n\n return issues\n}\n\nfunction validateMarketplaceJson(filePath: string): ValidationResult {\n const errors: ValidationIssue[] = []\n const warnings: ValidationIssue[] = []\n\n let raw: string\n try {\n raw = readFileSync(filePath, 'utf8')\n } catch (err) {\n return {\n success: false,\n fileType: 'marketplace',\n filePath,\n errors: [\n { path: 'file', message: `Failed to read file: ${String(err)}` },\n ],\n warnings: [],\n }\n }\n\n let json: unknown\n try {\n json = JSON.parse(raw)\n } catch (err) {\n return {\n success: false,\n fileType: 'marketplace',\n filePath,\n errors: [\n { path: 'json', message: `Invalid JSON syntax: ${String(err)}` },\n ],\n warnings: [],\n }\n }\n\n const parsed = MarketplaceManifestSchema.safeParse(json)\n if (!parsed.success) {\n errors.push(\n ...parsed.error.issues.map(i => ({\n path: i.path.join('.'),\n message: i.message,\n })),\n )\n return {\n success: false,\n fileType: 'marketplace',\n filePath,\n errors,\n warnings,\n }\n }\n\n const data = parsed.data\n const topLevelDescription =\n typeof (data as any).description === 'string'\n ? String((data as any).description).trim()\n : ''\n const metadataDescription =\n typeof (data.metadata as any)?.description === 'string'\n ? String((data.metadata as any).description).trim()\n : ''\n if (!topLevelDescription && !metadataDescription) {\n warnings.push({\n path: 'description',\n message:\n 'No marketplace description provided. Adding a description helps users understand what this marketplace offers',\n })\n }\n if (!data.plugins || data.plugins.length === 0) {\n warnings.push({\n path: 'plugins',\n message: 'Marketplace has no plugins defined',\n })\n }\n\n const pluginNames = new Set<string>()\n for (const [index, plugin] of data.plugins.entries()) {\n if (pluginNames.has(plugin.name)) {\n errors.push({\n path: `plugins[${index}].name`,\n message: `Duplicate plugin name \"${plugin.name}\"`,\n })\n }\n pluginNames.add(plugin.name)\n\n const source = plugin.source ?? './'\n const sourceErr = validateRelativePath(source)\n if (sourceErr)\n errors.push({ path: `plugins[${index}].source`, message: sourceErr })\n\n const marketplaceRoot = dirname(dirname(filePath))\n const pluginBase = safeResolveWithin(marketplaceRoot, source)\n if (!pluginBase) {\n errors.push({\n path: `plugins[${index}].source`,\n message: 'Invalid source path (must be ./..., no .., forward slashes)',\n })\n continue\n }\n if (!existsSync(pluginBase) || !lstatSync(pluginBase).isDirectory()) {\n errors.push({\n path: `plugins[${index}].source`,\n message: `Source path not found: ${source}`,\n })\n continue\n }\n\n const skillPaths = plugin.skills ?? []\n for (const [j, rel] of skillPaths.entries()) {\n const err = validateRelativePath(rel)\n if (err) {\n errors.push({ path: `plugins[${index}].skills[${j}]`, message: err })\n continue\n }\n const abs = safeResolveWithin(pluginBase, rel)\n if (!abs) {\n errors.push({\n path: `plugins[${index}].skills[${j}]`,\n message: 'Invalid path (must be ./..., no .., forward slashes)',\n })\n continue\n }\n if (!existsSync(abs) || !lstatSync(abs).isDirectory()) {\n errors.push({\n path: `plugins[${index}].skills[${j}]`,\n message: `Skill directory not found: ${rel}`,\n })\n continue\n }\n errors.push(\n ...validateSkillDir(abs).map(e => ({\n ...e,\n path: `plugins[${index}].skills[${j}]: ${e.path}`,\n })),\n )\n }\n\n const commandPaths = plugin.commands ?? []\n for (const [j, rel] of commandPaths.entries()) {\n const err = validateRelativePath(rel)\n if (err) {\n errors.push({ path: `plugins[${index}].commands[${j}]`, message: err })\n continue\n }\n const abs = safeResolveWithin(pluginBase, rel)\n if (!abs) {\n errors.push({\n path: `plugins[${index}].commands[${j}]`,\n message: 'Invalid path (must be ./..., no .., forward slashes)',\n })\n continue\n }\n if (!existsSync(abs) || !lstatSync(abs).isDirectory()) {\n errors.push({\n path: `plugins[${index}].commands[${j}]`,\n message: `Command directory not found: ${rel}`,\n })\n }\n }\n }\n\n return {\n success: errors.length === 0,\n fileType: 'marketplace',\n filePath,\n errors,\n warnings,\n }\n}\n\nfunction validatePluginJson(filePath: string): ValidationResult {\n const errors: ValidationIssue[] = []\n const warnings: ValidationIssue[] = []\n\n let raw: string\n try {\n raw = readFileSync(filePath, 'utf8')\n } catch (err) {\n return {\n success: false,\n fileType: 'plugin',\n filePath,\n errors: [\n { path: 'file', message: `Failed to read file: ${String(err)}` },\n ],\n warnings: [],\n }\n }\n\n let json: unknown\n try {\n json = JSON.parse(raw)\n } catch (err) {\n return {\n success: false,\n fileType: 'plugin',\n filePath,\n errors: [\n { path: 'json', message: `Invalid JSON syntax: ${String(err)}` },\n ],\n warnings: [],\n }\n }\n\n const parsed = PluginManifestSchema.safeParse(json)\n if (!parsed.success) {\n errors.push(\n ...parsed.error.issues.map(i => ({\n path: i.path.join('.'),\n message: i.message,\n })),\n )\n return { success: false, fileType: 'plugin', filePath, errors, warnings }\n }\n\n const data = parsed.data\n\n if (!/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/.test(data.name)) {\n errors.push({\n path: 'name',\n message: 'Must be kebab-case and start with a letter',\n })\n }\n if (\n data.version &&\n !/^(\\d+)\\.(\\d+)\\.(\\d+)(?:-[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$/.test(\n data.version,\n )\n ) {\n errors.push({\n path: 'version',\n message: 'Invalid semantic version (expected MAJOR.MINOR.PATCH)',\n })\n }\n if (data.homepage) {\n try {\n // eslint-disable-next-line no-new\n new URL(data.homepage)\n } catch {\n errors.push({ path: 'homepage', message: 'Invalid URL' })\n }\n }\n if (typeof data.repository === 'string') {\n try {\n // eslint-disable-next-line no-new\n new URL(data.repository)\n } catch {\n errors.push({ path: 'repository', message: 'Invalid URL' })\n }\n }\n if (!data.version) {\n warnings.push({\n path: 'version',\n message:\n 'No version specified. Consider adding a version following semver (e.g., \"1.0.0\")',\n })\n }\n if (!data.description) {\n warnings.push({\n path: 'description',\n message:\n 'No description provided. Adding a description helps users understand what your plugin does',\n })\n }\n if (!data.author) {\n warnings.push({\n path: 'author',\n message:\n 'No author information provided. Consider adding author details for plugin attribution',\n })\n }\n\n const pluginRoot = dirname(dirname(filePath))\n\n const validatePathList = (field: string, value: unknown) => {\n if (!value) return\n const values = Array.isArray(value) ? value : [value]\n for (const [idx, p] of values.entries()) {\n if (typeof p !== 'string') continue\n const err = validateRelativePath(p)\n if (err) errors.push({ path: `${field}[${idx}]`, message: err })\n const abs = safeResolveWithin(pluginRoot, p)\n if (!abs) {\n errors.push({\n path: `${field}[${idx}]`,\n message: 'Invalid path (must be ./..., no .., forward slashes)',\n })\n } else if (!existsSync(abs)) {\n errors.push({\n path: `${field}[${idx}]`,\n message: `Path not found: ${p}`,\n })\n }\n }\n }\n\n validatePathList('commands', data.commands)\n validatePathList('agents', data.agents)\n validatePathList('skills', data.skills)\n\n if (typeof data.hooks === 'string') validatePathList('hooks', data.hooks)\n if (typeof data.mcpServers === 'string')\n validatePathList('mcpServers', data.mcpServers)\n\n return {\n success: errors.length === 0,\n fileType: 'plugin',\n filePath,\n errors,\n warnings,\n }\n}\n\nexport function validatePluginOrMarketplacePath(\n path: string,\n): ValidationResult {\n const abs = resolveFromAgentCwd(path)\n if (!abs) {\n return {\n success: false,\n fileType: 'plugin',\n filePath: '',\n errors: [{ path: 'path', message: 'Path is required' }],\n warnings: [],\n }\n }\n if (!existsSync(abs)) {\n return {\n success: false,\n fileType: 'plugin',\n filePath: abs,\n errors: [{ path: 'file', message: `Path not found: ${abs}` }],\n warnings: [],\n }\n }\n\n const stat = lstatSync(abs)\n let filePath = abs\n if (stat.isDirectory()) {\n const marketplace = join(abs, '.kode-plugin', 'marketplace.json')\n const plugin = join(abs, '.kode-plugin', 'plugin.json')\n const legacyMarketplace = join(abs, '.claude-plugin', 'marketplace.json')\n const legacyPlugin = join(abs, '.claude-plugin', 'plugin.json')\n if (existsSync(marketplace)) filePath = marketplace\n else if (existsSync(plugin)) filePath = plugin\n else if (existsSync(legacyMarketplace)) filePath = legacyMarketplace\n else if (existsSync(legacyPlugin)) filePath = legacyPlugin\n else {\n return {\n success: false,\n fileType: 'plugin',\n filePath: abs,\n errors: [\n {\n path: 'directory',\n message:\n 'No manifest found in directory. Expected .kode-plugin/marketplace.json or .kode-plugin/plugin.json (legacy .claude-plugin/* is also supported)',\n },\n ],\n warnings: [],\n }\n }\n }\n\n if (filePath.endsWith('marketplace.json'))\n return validateMarketplaceJson(filePath)\n if (filePath.endsWith('plugin.json')) return validatePluginJson(filePath)\n\n try {\n const raw = readFileSync(filePath, 'utf8')\n const json = JSON.parse(raw)\n if (\n json &&\n typeof json === 'object' &&\n Array.isArray((json as any).plugins)\n ) {\n return validateMarketplaceJson(filePath)\n }\n } catch {}\n return validatePluginJson(filePath)\n}\n\nexport function formatValidationResult(result: ValidationResult): string {\n const lines: string[] = []\n for (const err of result.errors) {\n lines.push(` ${figures.pointer} ${err.path}: ${err.message}`)\n }\n for (const warn of result.warnings) {\n lines.push(` ${figures.pointer} ${warn.path}: ${warn.message}`)\n }\n\n lines.push('')\n\n if (result.success) {\n if (result.warnings.length > 0) {\n lines.push(`${figures.tick} Validation passed with warnings`)\n } else {\n lines.push(`${figures.tick} Validation passed`)\n }\n } else {\n lines.push(`${figures.cross} Validation failed`)\n }\n\n return lines.join('\\n')\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/utils/protocol/kodeAgentStructuredStdio.ts"],
4
- "sourcesContent": ["import { createInterface } from 'node:readline'\nimport { AbortError } from '@utils/text/errors'\n\ntype ControlRequestMessage = {\n type: 'control_request'\n request_id: string\n request: { subtype: string; [key: string]: unknown }\n}\n\ntype KeepAliveMessage = { type: 'keep_alive' }\n\ntype ControlResponseMessage = {\n type: 'control_response'\n response: {\n request_id: string\n subtype: 'success' | 'error'\n response?: unknown\n error?: string\n }\n}\n\ntype ControlCancelRequestMessage = {\n type: 'control_cancel_request'\n request_id: string\n}\n\ntype UserInputMessage = {\n type: 'user'\n uuid?: string\n parent_tool_use_id?: string | null\n message: { role: 'user'; content: unknown }\n}\n\ntype StructuredInputMessage =\n | ControlRequestMessage\n | ControlResponseMessage\n | ControlCancelRequestMessage\n | UserInputMessage\n | KeepAliveMessage\n | { type: string; [key: string]: unknown }\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction tryParseLine(line: string): StructuredInputMessage | null {\n if (!line.trim()) return null\n try {\n const parsed = JSON.parse(line) as unknown\n if (!isRecord(parsed)) return null\n if (typeof parsed.type !== 'string') return null\n return parsed as StructuredInputMessage\n } catch {\n return null\n }\n}\n\nfunction makeRequestId(): string {\n return Math.random().toString(36).slice(2, 15)\n}\n\nexport class KodeAgentStructuredStdio {\n private started = false\n private inputClosed = false\n private pendingRequests = new Map<\n string,\n {\n resolve: (msg: ControlResponseMessage['response']) => void\n reject: (err: Error) => void\n cleanup: () => void\n }\n >()\n private queuedUserMessages: UserInputMessage[] = []\n private awaitingUserWaiters: Array<{\n resolve: (msg: UserInputMessage) => void\n reject: (err: Error) => void\n }> = []\n\n constructor(\n private input: NodeJS.ReadableStream,\n private output: NodeJS.WritableStream,\n private opts: {\n onInterrupt?: () => void\n onControlRequest?: (msg: ControlRequestMessage) => Promise<unknown | void>\n } = {},\n ) {}\n\n start(): void {\n if (this.started) return\n this.started = true\n\n const rl = createInterface({ input: this.input })\n ;(async () => {\n for await (const line of rl) {\n this.handleLine(String(line))\n }\n })()\n .catch(() => {})\n .finally(() => {\n this.inputClosed = true\n rl.close()\n this.rejectAllPending(new Error('Stream closed'))\n this.rejectAllUserWaiters(new Error('Stream closed'))\n })\n }\n\n private rejectAllPending(err: Error): void {\n for (const pending of this.pendingRequests.values()) {\n pending.cleanup()\n pending.reject(err)\n }\n this.pendingRequests.clear()\n }\n\n private rejectAllUserWaiters(err: Error): void {\n for (const waiter of this.awaitingUserWaiters.splice(0)) {\n waiter.reject(err)\n }\n }\n\n private write(obj: unknown): void {\n this.output.write(JSON.stringify(obj) + '\\n')\n }\n\n private sendControlResponseSuccess(\n requestId: string,\n response?: unknown,\n ): void {\n this.write({\n type: 'control_response',\n response: {\n subtype: 'success',\n request_id: requestId,\n ...(response !== undefined ? { response } : {}),\n },\n })\n }\n\n private sendControlResponseError(requestId: string, error: string): void {\n this.write({\n type: 'control_response',\n response: {\n subtype: 'error',\n request_id: requestId,\n error,\n },\n })\n }\n\n private sendControlCancelRequest(requestId: string): void {\n this.write({\n type: 'control_cancel_request',\n request_id: requestId,\n })\n }\n\n private handleLine(line: string): void {\n const msg = tryParseLine(line)\n if (!msg) return\n\n if (msg.type === 'keep_alive') {\n return\n }\n\n if (msg.type === 'user') {\n const userMsg = msg as UserInputMessage\n const waiter = this.awaitingUserWaiters.shift()\n if (waiter) waiter.resolve(userMsg)\n else this.queuedUserMessages.push(userMsg)\n return\n }\n\n if (msg.type === 'control_response') {\n const responseMsg = msg as ControlResponseMessage\n const requestId = responseMsg.response?.request_id\n if (typeof requestId !== 'string' || !requestId) return\n const pending = this.pendingRequests.get(requestId)\n if (!pending) return\n pending.cleanup()\n this.pendingRequests.delete(requestId)\n pending.resolve(responseMsg.response)\n return\n }\n\n if (msg.type === 'control_request') {\n const requestMsg = msg as ControlRequestMessage\n const requestId = requestMsg.request_id\n const subtype = requestMsg.request?.subtype\n if (typeof requestId !== 'string' || !requestId) return\n if (typeof subtype !== 'string' || !subtype) {\n this.sendControlResponseError(\n requestId,\n 'Invalid control request (missing subtype)',\n )\n return\n }\n\n if (subtype === 'interrupt') {\n this.opts.onInterrupt?.()\n this.sendControlResponseSuccess(requestId)\n return\n }\n\n const handler = this.opts.onControlRequest\n if (handler) {\n Promise.resolve()\n .then(async () => await handler(requestMsg))\n .then(response =>\n this.sendControlResponseSuccess(requestId, response),\n )\n .catch(err =>\n this.sendControlResponseError(\n requestId,\n err instanceof Error ? err.message : String(err),\n ),\n )\n return\n }\n\n this.sendControlResponseError(\n requestId,\n `Unsupported control request subtype: ${subtype}`,\n )\n }\n }\n\n async nextUserMessage(args?: {\n signal?: AbortSignal\n timeoutMs?: number\n }): Promise<UserInputMessage> {\n if (this.queuedUserMessages.length > 0) {\n return this.queuedUserMessages.shift()!\n }\n if (this.inputClosed) {\n throw new Error('Stream closed')\n }\n\n const timeoutMs =\n typeof args?.timeoutMs === 'number' && Number.isFinite(args.timeoutMs)\n ? Math.max(0, args.timeoutMs)\n : null\n\n return await new Promise<UserInputMessage>((resolve, reject) => {\n let settled = false\n let waiter: {\n resolve: (msg: UserInputMessage) => void\n reject: (err: Error) => void\n } | null = null\n const onAbort = () => {\n cleanup()\n reject(new AbortError('User input aborted.'))\n }\n\n const onTimeout = () => {\n cleanup()\n reject(new Error('Timed out waiting for user input.'))\n }\n\n const cleanup = () => {\n if (settled) return\n settled = true\n if (args?.signal) args.signal.removeEventListener('abort', onAbort)\n if (timeoutId) clearTimeout(timeoutId)\n if (waiter) {\n const idx = this.awaitingUserWaiters.indexOf(waiter)\n if (idx >= 0) this.awaitingUserWaiters.splice(idx, 1)\n }\n }\n\n let timeoutId: NodeJS.Timeout | null = null\n if (timeoutMs !== null) timeoutId = setTimeout(onTimeout, timeoutMs)\n if (args?.signal)\n args.signal.addEventListener('abort', onAbort, { once: true })\n\n waiter = {\n resolve: msg => {\n cleanup()\n resolve(msg)\n },\n reject: err => {\n cleanup()\n reject(err)\n },\n }\n\n this.awaitingUserWaiters.push(waiter)\n })\n }\n\n async sendRequest<TResponse = unknown>(\n request: Record<string, unknown>,\n args?: { signal?: AbortSignal; timeoutMs?: number },\n ): Promise<TResponse> {\n if (this.inputClosed) {\n throw new Error('Stream closed')\n }\n if (args?.signal?.aborted) {\n throw new AbortError('Request aborted.')\n }\n\n const requestId = makeRequestId()\n this.write({ type: 'control_request', request_id: requestId, request })\n\n const timeoutMs =\n typeof args?.timeoutMs === 'number' && Number.isFinite(args.timeoutMs)\n ? Math.max(0, args.timeoutMs)\n : null\n\n return await new Promise<TResponse>((resolve, reject) => {\n const onAbort = () => {\n this.sendControlCancelRequest(requestId)\n this.pendingRequests.delete(requestId)\n cleanup()\n reject(new AbortError('Request aborted.'))\n }\n\n const onTimeout = () => {\n this.sendControlCancelRequest(requestId)\n this.pendingRequests.delete(requestId)\n cleanup()\n reject(new Error('Timed out waiting for control response.'))\n }\n\n const cleanup = () => {\n if (args?.signal) args.signal.removeEventListener('abort', onAbort)\n if (timeoutId) clearTimeout(timeoutId)\n }\n\n let timeoutId: NodeJS.Timeout | null = null\n if (timeoutMs !== null) timeoutId = setTimeout(onTimeout, timeoutMs)\n if (args?.signal)\n args.signal.addEventListener('abort', onAbort, { once: true })\n\n this.pendingRequests.set(requestId, {\n cleanup,\n resolve: response => {\n if (response.subtype === 'error') {\n reject(\n new Error(response.error || 'Unknown control response error'),\n )\n return\n }\n resolve((response.response ?? null) as TResponse)\n },\n reject,\n })\n })\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/services/ui/outputStyles.ts", "../src/utils/config/localSettings.ts"],
4
- "sourcesContent": ["import figures from 'figures'\nimport { memoize } from 'lodash-es'\nimport { existsSync, readdirSync, readFileSync, statSync } from 'fs'\nimport { basename, dirname, join, resolve } from 'path'\nimport { homedir } from 'os'\nimport matter from 'gray-matter'\nimport yaml from 'js-yaml'\nimport { getSessionPlugins } from '@utils/session/sessionPlugins'\nimport { readLocalSettings, updateLocalSettings } from '@utils/config/localSettings'\nimport { getCwd } from '@utils/state'\nimport { isSettingSourceEnabled } from '@utils/config/settingSources'\n\nexport type OutputStyleSource =\n | 'built-in'\n | 'plugin'\n | 'userSettings'\n | 'projectSettings'\n | 'policySettings'\n\nexport type OutputStyleDefinition = {\n name: string\n description: string\n prompt: string\n source: OutputStyleSource\n keepCodingInstructions?: boolean\n}\n\nexport type OutputStyleMap = Record<string, OutputStyleDefinition | null>\n\nexport const DEFAULT_OUTPUT_STYLE = 'default'\n\nfunction normalizeString(value: unknown): string | null {\n if (typeof value !== 'string') return null\n const trimmed = value.trim()\n return trimmed ? trimmed : null\n}\n\nfunction getClaudePolicyBaseDir(): string {\n switch (process.platform) {\n case 'darwin':\n return '/Library/Application Support/ClaudeCode'\n case 'win32':\n return existsSync('C:\\\\Program Files\\\\ClaudeCode')\n ? 'C:\\\\Program Files\\\\ClaudeCode'\n : 'C:\\\\ProgramData\\\\ClaudeCode'\n default:\n return '/etc/claude-code'\n }\n}\n\nfunction getUserConfigBaseDirs(): { claude: string; kode: string }[] {\n const out: { claude: string; kode: string }[] = []\n\n const hasAnyOverride =\n typeof process.env.CLAUDE_CONFIG_DIR === 'string' ||\n typeof process.env.KODE_CONFIG_DIR === 'string'\n\n const claudeBase = normalizeString(process.env.CLAUDE_CONFIG_DIR)\n const kodeBase = normalizeString(process.env.KODE_CONFIG_DIR)\n\n if (claudeBase) out.push({ claude: resolve(claudeBase), kode: resolve(claudeBase) })\n if (kodeBase) out.push({ claude: resolve(kodeBase), kode: resolve(kodeBase) })\n\n if (hasAnyOverride) {\n return dedupeConfigBases(out)\n }\n\n return dedupeConfigBases([\n { claude: join(homedir(), '.claude'), kode: join(homedir(), '.claude') },\n { claude: join(homedir(), '.kode'), kode: join(homedir(), '.kode') },\n ])\n}\n\nfunction dedupeConfigBases(\n bases: Array<{ claude: string; kode: string }>,\n): Array<{ claude: string; kode: string }> {\n const seen = new Set<string>()\n const out: Array<{ claude: string; kode: string }> = []\n for (const base of bases) {\n const key = `${base.claude}::${base.kode}`\n if (seen.has(key)) continue\n seen.add(key)\n out.push(base)\n }\n return out\n}\n\nfunction findProjectSubdirs(subdir: string, cwd: string): string[] {\n const result: string[] = []\n const home = resolve(homedir())\n let current = resolve(cwd)\n\n while (current !== home) {\n const claudeDir = join(current, '.claude', subdir)\n if (existsSync(claudeDir)) result.push(claudeDir)\n\n const kodeDir = join(current, '.kode', subdir)\n if (existsSync(kodeDir)) result.push(kodeDir)\n\n const parent = dirname(current)\n if (parent === current) break\n current = parent\n }\n\n return result\n}\n\nfunction markdownFirstLineOrHeading(content: string, fallback: string): string {\n const lines = content.split('\\n')\n for (const line of lines) {\n const trimmed = line.trim()\n if (!trimmed) continue\n const heading = trimmed.match(/^#+\\s+(.+)$/)?.[1] ?? trimmed\n return heading.length > 100 ? `${heading.substring(0, 97)}...` : heading\n }\n return fallback\n}\n\nfunction listMarkdownFilesRecursively(rootDir: string): string[] {\n const files: string[] = []\n const visitedDirs = new Set<string>()\n\n const walk = (dirPath: string) => {\n let dirStat: ReturnType<typeof statSync>\n try {\n dirStat = statSync(dirPath)\n } catch {\n return\n }\n if (!dirStat.isDirectory()) return\n\n const dirKey = `${dirStat.dev}:${dirStat.ino}`\n if (visitedDirs.has(dirKey)) return\n visitedDirs.add(dirKey)\n\n let entries: Array<{ name: string; isDirectory(): boolean; isFile(): boolean; isSymbolicLink(): boolean }>\n try {\n entries = readdirSync(dirPath, { withFileTypes: true, encoding: 'utf8' }) as any\n } catch {\n return\n }\n\n for (const entry of entries) {\n const name = String(entry.name ?? '')\n const fullPath = join(dirPath, name)\n\n if (entry.isDirectory()) {\n walk(fullPath)\n continue\n }\n\n if (entry.isFile()) {\n if (name.endsWith('.md')) files.push(fullPath)\n continue\n }\n\n if (entry.isSymbolicLink()) {\n try {\n const st = statSync(fullPath)\n if (st.isDirectory()) {\n walk(fullPath)\n } else if (st.isFile() && name.endsWith('.md')) {\n files.push(fullPath)\n }\n } catch {\n continue\n }\n }\n }\n }\n\n if (!existsSync(rootDir)) return []\n walk(rootDir)\n return files\n}\n\nfunction readMarkdownFile(filePath: string): { frontmatter: any; content: string } | null {\n try {\n const raw = readFileSync(filePath, 'utf8')\n const yamlSchema = (yaml as any).JSON_SCHEMA\n const matterOptions = {\n engines: {\n yaml: {\n parse: (input: string) =>\n yaml.load(input, yamlSchema ? { schema: yamlSchema } : undefined) ??\n {},\n },\n },\n }\n const parsed = matter(raw, matterOptions)\n return { frontmatter: (parsed.data as any) ?? {}, content: String(parsed.content ?? '') }\n } catch {\n return null\n }\n}\n\nfunction inodeKeyForPath(filePath: string): string | null {\n try {\n const st = statSync(filePath)\n if (typeof (st as any).dev === 'number' && typeof (st as any).ino === 'number') {\n return `${(st as any).dev}:${(st as any).ino}`\n }\n return null\n } catch {\n return null\n }\n}\n\nconst INSIGHTS_SECTION = `\n## Insights\nIn order to encourage learning, before and after writing code, always provide brief educational explanations about implementation choices using (with backticks):\n\"\\`${figures.star} Insight \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\\`\n[2-3 key educational points]\n\\`\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\\`\"\n\nThese insights should be included in the conversation, not in the codebase. You should generally focus on interesting insights that are specific to the codebase or the code you just wrote, rather than general programming concepts.`\n\nfunction getBuiltInOutputStyles(): OutputStyleMap {\n return {\n [DEFAULT_OUTPUT_STYLE]: null,\n Explanatory: {\n name: 'Explanatory',\n source: 'built-in',\n description: 'Claude explains its implementation choices and codebase patterns',\n keepCodingInstructions: true,\n prompt: `You are an interactive CLI tool that helps users with software engineering tasks. In addition to software engineering tasks, you should provide educational insights about the codebase along the way.\n\nYou should be clear and educational, providing helpful explanations while remaining focused on the task. Balance educational content with task completion. When providing insights, you may exceed typical length constraints, but remain focused and relevant.\n\n# Explanatory Style Active\n${INSIGHTS_SECTION}`,\n },\n Learning: {\n name: 'Learning',\n source: 'built-in',\n description:\n 'Claude pauses and asks you to write small pieces of code for hands-on practice',\n keepCodingInstructions: true,\n prompt: `You are an interactive CLI tool that helps users with software engineering tasks. In addition to software engineering tasks, you should help users learn more about the codebase through hands-on practice and educational insights.\n\nYou should be collaborative and encouraging. Balance task completion with learning by requesting user input for meaningful design decisions while handling routine implementation yourself. \n\n# Learning Style Active\n## Requesting Human Contributions\nIn order to encourage learning, ask the human to contribute 2-10 line code pieces when generating 20+ lines involving:\n- Design decisions (error handling, data structures)\n- Business logic with multiple valid approaches \n- Key algorithms or interface definitions\n\n**TodoList Integration**: If using a TodoList for the overall task, include a specific todo item like \"Request human input on [specific decision]\" when planning to request human input. This ensures proper task tracking. Note: TodoList is not required for all tasks.\n\nExample TodoList flow:\n \u2713 \"Set up component structure with placeholder for logic\"\n \u2713 \"Request human collaboration on decision logic implementation\"\n \u2713 \"Integrate contribution and complete feature\"\n\n### Request Format\n\\`\\`\\`\n${figures.bullet} **Learn by Doing**\n**Context:** [what's built and why this decision matters]\n**Your Task:** [specific function/section in file, mention file and TODO(human) but do not include line numbers]\n**Guidance:** [trade-offs and constraints to consider]\n\\`\\`\\`\n\n### Key Guidelines\n- Frame contributions as valuable design decisions, not busy work\n- You must first add a TODO(human) section into the codebase with your editing tools before making the Learn by Doing request \n- Make sure there is one and only one TODO(human) section in the code\n- Don't take any action or output anything after the Learn by Doing request. Wait for human implementation before proceeding.\n\n### Example Requests\n\n**Whole Function Example:**\n\\`\\`\\`\n${figures.bullet} **Learn by Doing**\n\n**Context:** I've set up the hint feature UI with a button that triggers the hint system. The infrastructure is ready: when clicked, it calls selectHintCell() to determine which cell to hint, then highlights that cell with a yellow background and shows possible values. The hint system needs to decide which empty cell would be most helpful to reveal to the user.\n\n**Your Task:** In sudoku.js, implement the selectHintCell(board) function. Look for TODO(human). This function should analyze the board and return {row, col} for the best cell to hint, or null if the puzzle is complete.\n\n**Guidance:** Consider multiple strategies: prioritize cells with only one possible value (naked singles), or cells that appear in rows/columns/boxes with many filled cells. You could also consider a balanced approach that helps without making it too easy. The board parameter is a 9x9 array where 0 represents empty cells.\n\\`\\`\\`\n\n**Partial Function Example:**\n\\`\\`\\`\n${figures.bullet} **Learn by Doing**\n\n**Context:** I've built a file upload component that validates files before accepting them. The main validation logic is complete, but it needs specific handling for different file type categories in the switch statement.\n\n**Your Task:** In upload.js, inside the validateFile() function's switch statement, implement the 'case \"document\":' branch. Look for TODO(human). This should validate document files (pdf, doc, docx).\n\n**Guidance:** Consider checking file size limits (maybe 10MB for documents?), validating the file extension matches the MIME type, and returning {valid: boolean, error?: string}. The file object has properties: name, size, type.\n\\`\\`\\`\n\n**Debugging Example:**\n\\`\\`\\`\n${figures.bullet} **Learn by Doing**\n\n**Context:** The user reported that number inputs aren't working correctly in the calculator. I've identified the handleInput() function as the likely source, but need to understand what values are being processed.\n\n**Your Task:** In calculator.js, inside the handleInput() function, add 2-3 console.log statements after the TODO(human) comment to help debug why number inputs fail.\n\n**Guidance:** Consider logging: the raw input value, the parsed result, and any validation state. This will help us understand where the conversion breaks.\n\\`\\`\\`\n\n### After Contributions\nShare one insight connecting their code to broader patterns or system effects. Avoid praise or repetition.\n\n## Insights\n${INSIGHTS_SECTION}`,\n },\n }\n}\n\nfunction parseKeepCodingInstructions(value: unknown): boolean | undefined {\n if (value === 'true') return true\n if (value === 'false') return false\n return undefined\n}\n\nfunction parseCustomOutputStyleFile(options: {\n filePath: string\n source: Exclude<OutputStyleSource, 'built-in' | 'plugin'>\n}): OutputStyleDefinition | null {\n const parsed = readMarkdownFile(options.filePath)\n if (!parsed) return null\n\n const base = basename(options.filePath, '.md')\n const name = normalizeString(parsed.frontmatter?.name) ?? base\n const description =\n normalizeString(parsed.frontmatter?.description) ??\n markdownFirstLineOrHeading(parsed.content, `Custom ${base} output style`)\n const keepCodingInstructions = parseKeepCodingInstructions(\n parsed.frontmatter?.['keep-coding-instructions'],\n )\n const prompt = parsed.content.trim()\n\n return {\n name,\n description,\n prompt,\n source: options.source,\n ...(keepCodingInstructions !== undefined ? { keepCodingInstructions } : {}),\n }\n}\n\nfunction parsePluginOutputStyleFile(options: {\n filePath: string\n pluginName: string\n seen: Set<string>\n}): OutputStyleDefinition | null {\n const inodeKey = inodeKeyForPath(options.filePath)\n const dedupeKey = inodeKey ? `inode:${inodeKey}` : `path:${options.filePath}`\n if (options.seen.has(dedupeKey)) return null\n options.seen.add(dedupeKey)\n\n const parsed = readMarkdownFile(options.filePath)\n if (!parsed) return null\n\n const base = basename(options.filePath, '.md')\n const styleName = normalizeString(parsed.frontmatter?.name) ?? base\n const fullName = `${options.pluginName}:${styleName}`\n const description =\n normalizeString(parsed.frontmatter?.description) ??\n markdownFirstLineOrHeading(\n parsed.content,\n `Output style from ${options.pluginName} plugin`,\n )\n const prompt = parsed.content.trim()\n\n return {\n name: fullName,\n description,\n prompt,\n source: 'plugin',\n }\n}\n\nfunction loadPluginOutputStyles(): OutputStyleDefinition[] {\n const out: OutputStyleDefinition[] = []\n const plugins = getSessionPlugins()\n for (const plugin of plugins) {\n const pluginName = plugin.name\n const seen = new Set<string>()\n for (const dir of plugin.outputStylesDirs ?? []) {\n let st: ReturnType<typeof statSync>\n try {\n st = statSync(dir)\n } catch {\n continue\n }\n if (st.isFile()) {\n if (!dir.endsWith('.md')) continue\n const style = parsePluginOutputStyleFile({\n filePath: dir,\n pluginName,\n seen,\n })\n if (style) out.push(style)\n continue\n }\n\n if (st.isDirectory()) {\n const files = listMarkdownFilesRecursively(dir)\n for (const filePath of files) {\n const style = parsePluginOutputStyleFile({\n filePath,\n pluginName,\n seen,\n })\n if (style) out.push(style)\n }\n }\n }\n }\n return out\n}\n\nfunction loadCustomOutputStyles(options: { cwd: string }): OutputStyleDefinition[] {\n const out: OutputStyleDefinition[] = []\n const seen = new Set<string>()\n\n const policyDir = join(\n getClaudePolicyBaseDir(),\n '.claude',\n 'output-styles',\n )\n for (const filePath of listMarkdownFilesRecursively(policyDir)) {\n const inodeKey = inodeKeyForPath(filePath)\n const dedupeKey = inodeKey ? `inode:${inodeKey}` : `path:${filePath}`\n if (seen.has(dedupeKey)) continue\n seen.add(dedupeKey)\n const style = parseCustomOutputStyleFile({\n filePath,\n source: 'policySettings',\n })\n if (style) out.push(style)\n }\n\n if (isSettingSourceEnabled('userSettings')) {\n const userBases = getUserConfigBaseDirs()\n for (const base of userBases) {\n for (const userBaseDir of new Set([base.claude, base.kode])) {\n const dirPath = join(userBaseDir, 'output-styles')\n for (const filePath of listMarkdownFilesRecursively(dirPath)) {\n const inodeKey = inodeKeyForPath(filePath)\n const dedupeKey = inodeKey ? `inode:${inodeKey}` : `path:${filePath}`\n if (seen.has(dedupeKey)) continue\n seen.add(dedupeKey)\n const style = parseCustomOutputStyleFile({\n filePath,\n source: 'userSettings',\n })\n if (style) out.push(style)\n }\n }\n }\n }\n\n if (isSettingSourceEnabled('projectSettings')) {\n for (const dirPath of findProjectSubdirs('output-styles', options.cwd)) {\n for (const filePath of listMarkdownFilesRecursively(dirPath)) {\n const inodeKey = inodeKeyForPath(filePath)\n const dedupeKey = inodeKey ? `inode:${inodeKey}` : `path:${filePath}`\n if (seen.has(dedupeKey)) continue\n seen.add(dedupeKey)\n const style = parseCustomOutputStyleFile({\n filePath,\n source: 'projectSettings',\n })\n if (style) out.push(style)\n }\n }\n }\n\n return out\n}\n\nexport const getAvailableOutputStyles = memoize((): OutputStyleMap => {\n const cwd = getCwd()\n const builtIn = getBuiltInOutputStyles()\n const merged: OutputStyleMap = { ...builtIn }\n\n for (const style of loadPluginOutputStyles()) {\n merged[style.name] = style\n }\n\n const custom = loadCustomOutputStyles({ cwd })\n const user = custom.filter(s => s.source === 'userSettings')\n const project = custom.filter(s => s.source === 'projectSettings')\n const policy = custom.filter(s => s.source === 'policySettings')\n\n for (const style of user) merged[style.name] = style\n for (const style of project) merged[style.name] = style\n for (const style of policy) merged[style.name] = style\n\n return merged\n})\n\nexport function clearOutputStyleCache(): void {\n ;(getAvailableOutputStyles as any).cache?.clear?.()\n}\n\nexport function getCurrentOutputStyle(): string {\n if (!isSettingSourceEnabled('localSettings')) return DEFAULT_OUTPUT_STYLE\n\n const settings = readLocalSettings()\n const candidate = normalizeString(settings.outputStyle)\n return candidate ?? DEFAULT_OUTPUT_STYLE\n}\n\nexport function setCurrentOutputStyle(styleName: string): void {\n updateLocalSettings({ outputStyle: styleName })\n}\n\nexport function resolveOutputStyleName(input: string): string | null {\n const raw = normalizeString(input)\n if (!raw) return null\n const styles = getAvailableOutputStyles()\n if (raw in styles) return raw\n const lower = raw.toLowerCase()\n for (const name of Object.keys(styles)) {\n if (name.toLowerCase() === lower) return name\n }\n return null\n}\n\nexport function getCurrentOutputStyleDefinition(): OutputStyleDefinition | null {\n const current = getCurrentOutputStyle()\n const styles = getAvailableOutputStyles()\n return styles[current] ?? null\n}\n\nexport function getOutputStyleSystemPromptAdditions(): string[] {\n const style = getCurrentOutputStyleDefinition()\n if (!style) return []\n const prompt = style.prompt.trim()\n if (!prompt) return []\n return [`\\n# Output Style: ${style.name}\\n${prompt}\\n`]\n}\n", "import { join } from 'path'\nimport { getCwd } from '@utils/state'\nimport {\n getSettingsFileCandidates,\n loadSettingsWithLegacyFallback,\n saveSettingsToPrimaryAndSyncLegacy,\n} from '@utils/config/settingsFiles'\n\nexport type LocalSettings = {\n outputStyle?: unknown\n [key: string]: unknown\n}\n\nexport function getLocalSettingsPath(options?: {\n projectDir?: string\n}): string {\n const projectDir = options?.projectDir ?? getCwd()\n return join(projectDir, '.kode', 'settings.local.json')\n}\n\nexport function readLocalSettings(options?: {\n projectDir?: string\n}): LocalSettings {\n const projectDir = options?.projectDir ?? getCwd()\n const loaded = loadSettingsWithLegacyFallback({\n destination: 'localSettings',\n projectDir,\n migrateToPrimary: true,\n })\n return (loaded.settings as LocalSettings | null) ?? {}\n}\n\nexport function updateLocalSettings(\n patch: Record<string, unknown>,\n options?: {\n projectDir?: string\n },\n): LocalSettings {\n const projectDir = options?.projectDir ?? getCwd()\n const candidates = getSettingsFileCandidates({\n destination: 'localSettings',\n projectDir,\n })\n const existing =\n (candidates\n ? loadSettingsWithLegacyFallback({\n destination: 'localSettings',\n projectDir,\n migrateToPrimary: true,\n }).settings\n : null) ?? {}\n\n const next = { ...(existing as Record<string, unknown>), ...patch }\n\n if (candidates) {\n saveSettingsToPrimaryAndSyncLegacy({\n destination: 'localSettings',\n projectDir,\n settings: next,\n syncLegacyIfExists: true,\n })\n }\n\n return next as LocalSettings\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,34 +0,0 @@
1
- import { createRequire as __kodeCreateRequire } from "node:module";
2
- const require = __kodeCreateRequire(import.meta.url);
3
-
4
- // src/services/ai/llmLazy.ts
5
- async function queryLLM(messages, systemPrompt, maxThinkingTokens, tools, signal, options) {
6
- const { queryLLM: inner } = await import("./llm-XVXWYOHK.js");
7
- return inner(
8
- messages,
9
- systemPrompt,
10
- maxThinkingTokens,
11
- tools,
12
- signal,
13
- options
14
- );
15
- }
16
- async function queryQuick(args) {
17
- const { queryQuick: inner } = await import("./llm-XVXWYOHK.js");
18
- return inner(args);
19
- }
20
- async function verifyApiKey(apiKey, baseURL, provider) {
21
- const { verifyApiKey: inner } = await import("./llm-XVXWYOHK.js");
22
- return inner(apiKey, baseURL, provider);
23
- }
24
- async function fetchAnthropicModels(apiKey, baseURL) {
25
- const { fetchAnthropicModels: inner } = await import("./llm-XVXWYOHK.js");
26
- return inner(apiKey, baseURL);
27
- }
28
-
29
- export {
30
- queryLLM,
31
- queryQuick,
32
- verifyApiKey,
33
- fetchAnthropicModels
34
- };
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/services/ai/llmLazy.ts"],
4
- "sourcesContent": ["import type { AssistantMessage, UserMessage } from '@query'\nimport type { Tool, ToolUseContext } from '@tool'\nimport type { ModelPointerType } from '@utils/config'\n\nexport async function queryLLM(\n messages: (UserMessage | AssistantMessage)[],\n systemPrompt: string[],\n maxThinkingTokens: number,\n tools: Tool[],\n signal: AbortSignal,\n options: {\n safeMode: boolean\n model: string | ModelPointerType\n prependCLISysprompt: boolean\n temperature?: number\n toolUseContext?: ToolUseContext\n __testModelManager?: any\n __testQueryLLMWithPromptCaching?: any\n },\n): Promise<AssistantMessage> {\n const { queryLLM: inner } = await import('@services/llm')\n return inner(\n messages as any,\n systemPrompt,\n maxThinkingTokens,\n tools,\n signal,\n options as any,\n )\n}\n\nexport async function queryQuick(args: {\n systemPrompt?: string[]\n userPrompt: string\n assistantPrompt?: string\n enablePromptCaching?: boolean\n signal?: AbortSignal\n}): Promise<AssistantMessage> {\n const { queryQuick: inner } = await import('@services/llm')\n return inner(args as any)\n}\n\nexport async function verifyApiKey(\n apiKey: string,\n baseURL?: string,\n provider?: string,\n): Promise<boolean> {\n const { verifyApiKey: inner } = await import('@services/llm')\n return inner(apiKey, baseURL, provider)\n}\n\nexport async function fetchAnthropicModels(\n apiKey: string,\n baseURL?: string,\n): Promise<any[]> {\n const { fetchAnthropicModels: inner } = await import('@services/llm')\n return inner(apiKey, baseURL)\n}\n"],
5
- "mappings": ";;;;AAIA,eAAsB,SACpB,UACA,cACA,mBACA,OACA,QACA,SAS2B;AAC3B,QAAM,EAAE,UAAU,MAAM,IAAI,MAAM,OAAO,mBAAe;AACxD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,WAAW,MAMH;AAC5B,QAAM,EAAE,YAAY,MAAM,IAAI,MAAM,OAAO,mBAAe;AAC1D,SAAO,MAAM,IAAW;AAC1B;AAEA,eAAsB,aACpB,QACA,SACA,UACkB;AAClB,QAAM,EAAE,cAAc,MAAM,IAAI,MAAM,OAAO,mBAAe;AAC5D,SAAO,MAAM,QAAQ,SAAS,QAAQ;AACxC;AAEA,eAAsB,qBACpB,QACA,SACgB;AAChB,QAAM,EAAE,sBAAsB,MAAM,IAAI,MAAM,OAAO,mBAAe;AACpE,SAAO,MAAM,QAAQ,OAAO;AAC9B;",
6
- "names": []
7
- }