@shareai-lab/kode 1.1.23 → 2.0.1

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 (726) hide show
  1. package/README.md +25 -404
  2. package/cli-acp.js +82 -0
  3. package/cli.js +89 -79
  4. package/dist/REPL-CW7AYLVL.js +42 -0
  5. package/dist/acp-VEPJ74LT.js +1357 -0
  6. package/dist/acp-VEPJ74LT.js.map +7 -0
  7. package/dist/agentsValidate-7LH4HTNR.js +373 -0
  8. package/dist/agentsValidate-7LH4HTNR.js.map +7 -0
  9. package/dist/ask-3NHFFUQG.js +125 -0
  10. package/dist/ask-3NHFFUQG.js.map +7 -0
  11. package/dist/autoUpdater-ITPIHCOI.js +17 -0
  12. package/dist/chunk-3IN27HA5.js +128 -0
  13. package/dist/chunk-3IN27HA5.js.map +7 -0
  14. package/dist/chunk-3RUXVV4S.js +23 -0
  15. package/dist/chunk-3RUXVV4S.js.map +7 -0
  16. package/dist/chunk-4FX3IVPT.js +164 -0
  17. package/dist/chunk-4FX3IVPT.js.map +7 -0
  18. package/dist/chunk-4RTX4AG4.js +249 -0
  19. package/dist/chunk-4RTX4AG4.js.map +7 -0
  20. package/dist/chunk-5PDP7R6N.js +515 -0
  21. package/dist/chunk-5PDP7R6N.js.map +7 -0
  22. package/dist/chunk-73WGVYLQ.js +735 -0
  23. package/dist/chunk-73WGVYLQ.js.map +7 -0
  24. package/dist/{services/systemReminder.js → chunk-7M2YN6TU.js} +221 -59
  25. package/dist/chunk-7M2YN6TU.js.map +7 -0
  26. package/dist/{utils/theme.js → chunk-7U7L4NMD.js} +28 -6
  27. package/dist/chunk-7U7L4NMD.js.map +7 -0
  28. package/dist/chunk-ABLVTESJ.js +19 -0
  29. package/dist/chunk-ABLVTESJ.js.map +7 -0
  30. package/dist/chunk-AFFSCMYS.js +191 -0
  31. package/dist/chunk-AFFSCMYS.js.map +7 -0
  32. package/dist/chunk-ARZSBOAO.js +1256 -0
  33. package/dist/chunk-ARZSBOAO.js.map +7 -0
  34. package/dist/chunk-CIG63V4E.js +72 -0
  35. package/dist/chunk-CIG63V4E.js.map +7 -0
  36. package/dist/chunk-CM3EGTG6.js +1609 -0
  37. package/dist/chunk-CM3EGTG6.js.map +7 -0
  38. package/dist/{services/openai.js → chunk-DZE5YA7L.js} +168 -234
  39. package/dist/chunk-DZE5YA7L.js.map +7 -0
  40. package/dist/chunk-E6YNABER.js +24 -0
  41. package/dist/chunk-E6YNABER.js.map +7 -0
  42. package/dist/{cost-tracker.js → chunk-EZXMVTDU.js} +51 -32
  43. package/dist/chunk-EZXMVTDU.js.map +7 -0
  44. package/dist/chunk-F2SJXUDI.js +148 -0
  45. package/dist/chunk-F2SJXUDI.js.map +7 -0
  46. package/dist/chunk-FC5ZCKBI.js +30167 -0
  47. package/dist/chunk-FC5ZCKBI.js.map +7 -0
  48. package/dist/chunk-HCBELH4J.js +145 -0
  49. package/dist/chunk-HCBELH4J.js.map +7 -0
  50. package/dist/chunk-HN4E4UUQ.js +96 -0
  51. package/dist/chunk-HN4E4UUQ.js.map +7 -0
  52. package/dist/{utils/model.js → chunk-IZVMU4S2.js} +194 -227
  53. package/dist/chunk-IZVMU4S2.js.map +7 -0
  54. package/dist/chunk-JC6NCUG5.js +11 -0
  55. package/dist/chunk-K2CWOTI2.js +196 -0
  56. package/dist/chunk-K2CWOTI2.js.map +7 -0
  57. package/dist/chunk-KAA5BGMQ.js +12 -0
  58. package/dist/chunk-KAA5BGMQ.js.map +7 -0
  59. package/dist/{utils/config.js → chunk-LC4TVOCZ.js} +351 -171
  60. package/dist/chunk-LC4TVOCZ.js.map +7 -0
  61. package/dist/chunk-MIW7N2MY.js +2613 -0
  62. package/dist/chunk-MIW7N2MY.js.map +7 -0
  63. package/dist/chunk-MWRSY4X6.js +240 -0
  64. package/dist/chunk-MWRSY4X6.js.map +7 -0
  65. package/dist/chunk-ND3XWFO6.js +34 -0
  66. package/dist/chunk-ND3XWFO6.js.map +7 -0
  67. package/dist/chunk-NPFOMITO.js +21 -0
  68. package/dist/chunk-NPFOMITO.js.map +7 -0
  69. package/dist/chunk-QVLYOPO5.js +1097 -0
  70. package/dist/chunk-QVLYOPO5.js.map +7 -0
  71. package/dist/chunk-RZWOUA25.js +490 -0
  72. package/dist/chunk-RZWOUA25.js.map +7 -0
  73. package/dist/chunk-S3J2TLV6.js +16 -0
  74. package/dist/chunk-S3J2TLV6.js.map +7 -0
  75. package/dist/chunk-S6HRABTA.js +95 -0
  76. package/dist/chunk-S6HRABTA.js.map +7 -0
  77. package/dist/{utils/debugLogger.js → chunk-STSX7GIX.js} +107 -204
  78. package/dist/chunk-STSX7GIX.js.map +7 -0
  79. package/dist/chunk-UHYRLID6.js +472 -0
  80. package/dist/chunk-UHYRLID6.js.map +7 -0
  81. package/dist/chunk-UKHTVRJM.js +47 -0
  82. package/dist/chunk-UKHTVRJM.js.map +7 -0
  83. package/dist/chunk-UYXEDKOZ.js +24 -0
  84. package/dist/chunk-UYXEDKOZ.js.map +7 -0
  85. package/dist/chunk-W7GRKO7Q.js +766 -0
  86. package/dist/chunk-W7GRKO7Q.js.map +7 -0
  87. package/dist/chunk-WVHORZQ5.js +17 -0
  88. package/dist/chunk-WVHORZQ5.js.map +7 -0
  89. package/dist/chunk-WWUWDNWW.js +49 -0
  90. package/dist/chunk-WWUWDNWW.js.map +7 -0
  91. package/dist/chunk-YC6LJCDE.js +511 -0
  92. package/dist/chunk-YC6LJCDE.js.map +7 -0
  93. package/dist/chunk-YXYYDIMI.js +2931 -0
  94. package/dist/chunk-YXYYDIMI.js.map +7 -0
  95. package/dist/chunk-ZVDRDPII.js +138 -0
  96. package/dist/chunk-ZVDRDPII.js.map +7 -0
  97. package/dist/cli-DOPVY2CW.js +3917 -0
  98. package/dist/cli-DOPVY2CW.js.map +7 -0
  99. package/dist/commands-2BF2CJ3A.js +46 -0
  100. package/dist/config-RUSD6G5Y.js +81 -0
  101. package/dist/context-6FXPETYH.js +30 -0
  102. package/dist/costTracker-6SL26FDB.js +19 -0
  103. package/dist/customCommands-TOIJFZAL.js +25 -0
  104. package/dist/customCommands-TOIJFZAL.js.map +7 -0
  105. package/dist/env-XGKBLU3D.js +22 -0
  106. package/dist/env-XGKBLU3D.js.map +7 -0
  107. package/dist/index.js +34 -5
  108. package/dist/index.js.map +4 -4
  109. package/dist/kodeAgentSessionId-X6XWQW7B.js +13 -0
  110. package/dist/kodeAgentSessionId-X6XWQW7B.js.map +7 -0
  111. package/dist/kodeAgentSessionLoad-MITZADPB.js +18 -0
  112. package/dist/kodeAgentSessionLoad-MITZADPB.js.map +7 -0
  113. package/dist/kodeAgentSessionResume-GVRWB4WO.js +16 -0
  114. package/dist/kodeAgentSessionResume-GVRWB4WO.js.map +7 -0
  115. package/dist/kodeAgentStreamJson-NXFN7TXH.js +13 -0
  116. package/dist/kodeAgentStreamJson-NXFN7TXH.js.map +7 -0
  117. package/dist/kodeAgentStreamJsonSession-UGEZJJEB.js +131 -0
  118. package/dist/kodeAgentStreamJsonSession-UGEZJJEB.js.map +7 -0
  119. package/dist/kodeAgentStructuredStdio-HGWJT7CU.js +10 -0
  120. package/dist/kodeAgentStructuredStdio-HGWJT7CU.js.map +7 -0
  121. package/dist/kodeHooks-QWM36A3D.js +36 -0
  122. package/dist/kodeHooks-QWM36A3D.js.map +7 -0
  123. package/dist/llm-ZUQC4WYM.js +3118 -0
  124. package/dist/llm-ZUQC4WYM.js.map +7 -0
  125. package/dist/llmLazy-54QQHA54.js +15 -0
  126. package/dist/llmLazy-54QQHA54.js.map +7 -0
  127. package/dist/loader-FYHJQES5.js +28 -0
  128. package/dist/loader-FYHJQES5.js.map +7 -0
  129. package/dist/mcp-J332IKT3.js +49 -0
  130. package/dist/mcp-J332IKT3.js.map +7 -0
  131. package/dist/{services/mentionProcessor.js → mentionProcessor-EE3XFHCJ.js} +61 -50
  132. package/dist/mentionProcessor-EE3XFHCJ.js.map +7 -0
  133. package/dist/messages-EOYQKPGM.js +63 -0
  134. package/dist/messages-EOYQKPGM.js.map +7 -0
  135. package/dist/model-FV3JDJKH.js +30 -0
  136. package/dist/model-FV3JDJKH.js.map +7 -0
  137. package/dist/openai-RRCWW33N.js +29 -0
  138. package/dist/openai-RRCWW33N.js.map +7 -0
  139. package/dist/outputStyles-62Q3VH2J.js +28 -0
  140. package/dist/outputStyles-62Q3VH2J.js.map +7 -0
  141. package/dist/package.json +1 -1
  142. package/dist/pluginRuntime-6ETCZ2LL.js +218 -0
  143. package/dist/pluginRuntime-6ETCZ2LL.js.map +7 -0
  144. package/dist/pluginValidation-I4YKUWGS.js +17 -0
  145. package/dist/pluginValidation-I4YKUWGS.js.map +7 -0
  146. package/dist/prompts-ZLEKDD77.js +48 -0
  147. package/dist/prompts-ZLEKDD77.js.map +7 -0
  148. package/dist/query-VFRJPBGD.js +50 -0
  149. package/dist/query-VFRJPBGD.js.map +7 -0
  150. package/dist/responsesStreaming-AW344PQO.js +10 -0
  151. package/dist/responsesStreaming-AW344PQO.js.map +7 -0
  152. package/dist/ripgrep-3NTIKQYW.js +17 -0
  153. package/dist/ripgrep-3NTIKQYW.js.map +7 -0
  154. package/dist/skillMarketplace-3RXQBVOL.js +37 -0
  155. package/dist/skillMarketplace-3RXQBVOL.js.map +7 -0
  156. package/dist/state-P5G6CO5V.js +16 -0
  157. package/dist/state-P5G6CO5V.js.map +7 -0
  158. package/dist/theme-3LWP3BG7.js +14 -0
  159. package/dist/theme-3LWP3BG7.js.map +7 -0
  160. package/dist/toolPermissionContext-65L65VEZ.js +17 -0
  161. package/dist/toolPermissionContext-65L65VEZ.js.map +7 -0
  162. package/dist/toolPermissionSettings-3ROBVTUK.js +18 -0
  163. package/dist/toolPermissionSettings-3ROBVTUK.js.map +7 -0
  164. package/dist/tools-RO7HSSE5.js +47 -0
  165. package/dist/tools-RO7HSSE5.js.map +7 -0
  166. package/dist/userInput-JSBJRFSK.js +311 -0
  167. package/dist/userInput-JSBJRFSK.js.map +7 -0
  168. package/dist/uuid-QN2CNKKN.js +9 -0
  169. package/dist/uuid-QN2CNKKN.js.map +7 -0
  170. package/package.json +43 -15
  171. package/scripts/binary-utils.cjs +62 -0
  172. package/scripts/cli-acp-wrapper.cjs +82 -0
  173. package/scripts/cli-wrapper.cjs +105 -0
  174. package/scripts/postinstall.js +135 -9
  175. package/LICENSE +0 -201
  176. package/README.zh-CN.md +0 -326
  177. package/dist/ProjectOnboarding.js +0 -99
  178. package/dist/ProjectOnboarding.js.map +0 -7
  179. package/dist/Tool.js +0 -1
  180. package/dist/commands/agents.js +0 -2087
  181. package/dist/commands/agents.js.map +0 -7
  182. package/dist/commands/approvedTools.js +0 -36
  183. package/dist/commands/approvedTools.js.map +0 -7
  184. package/dist/commands/bug.js +0 -21
  185. package/dist/commands/bug.js.map +0 -7
  186. package/dist/commands/clear.js +0 -37
  187. package/dist/commands/clear.js.map +0 -7
  188. package/dist/commands/compact.js +0 -104
  189. package/dist/commands/compact.js.map +0 -7
  190. package/dist/commands/config.js +0 -20
  191. package/dist/commands/config.js.map +0 -7
  192. package/dist/commands/cost.js +0 -19
  193. package/dist/commands/cost.js.map +0 -7
  194. package/dist/commands/ctx_viz.js +0 -152
  195. package/dist/commands/ctx_viz.js.map +0 -7
  196. package/dist/commands/doctor.js +0 -25
  197. package/dist/commands/doctor.js.map +0 -7
  198. package/dist/commands/help.js +0 -20
  199. package/dist/commands/help.js.map +0 -7
  200. package/dist/commands/init.js +0 -38
  201. package/dist/commands/init.js.map +0 -7
  202. package/dist/commands/listen.js +0 -37
  203. package/dist/commands/listen.js.map +0 -7
  204. package/dist/commands/login.js +0 -37
  205. package/dist/commands/login.js.map +0 -7
  206. package/dist/commands/logout.js +0 -33
  207. package/dist/commands/logout.js.map +0 -7
  208. package/dist/commands/mcp.js +0 -34
  209. package/dist/commands/mcp.js.map +0 -7
  210. package/dist/commands/model.js +0 -41
  211. package/dist/commands/model.js.map +0 -7
  212. package/dist/commands/modelstatus.js +0 -21
  213. package/dist/commands/modelstatus.js.map +0 -7
  214. package/dist/commands/onboarding.js +0 -36
  215. package/dist/commands/onboarding.js.map +0 -7
  216. package/dist/commands/pr_comments.js +0 -61
  217. package/dist/commands/pr_comments.js.map +0 -7
  218. package/dist/commands/refreshCommands.js +0 -37
  219. package/dist/commands/refreshCommands.js.map +0 -7
  220. package/dist/commands/release-notes.js +0 -30
  221. package/dist/commands/release-notes.js.map +0 -7
  222. package/dist/commands/resume.js +0 -35
  223. package/dist/commands/resume.js.map +0 -7
  224. package/dist/commands/review.js +0 -51
  225. package/dist/commands/review.js.map +0 -7
  226. package/dist/commands/terminalSetup.js +0 -163
  227. package/dist/commands/terminalSetup.js.map +0 -7
  228. package/dist/commands.js +0 -84
  229. package/dist/commands.js.map +0 -7
  230. package/dist/components/ApproveApiKey.js +0 -74
  231. package/dist/components/ApproveApiKey.js.map +0 -7
  232. package/dist/components/AsciiLogo.js +0 -12
  233. package/dist/components/AsciiLogo.js.map +0 -7
  234. package/dist/components/AutoUpdater.js +0 -74
  235. package/dist/components/AutoUpdater.js.map +0 -7
  236. package/dist/components/Bug.js +0 -147
  237. package/dist/components/Bug.js.map +0 -7
  238. package/dist/components/Config.js +0 -166
  239. package/dist/components/Config.js.map +0 -7
  240. package/dist/components/ConsoleOAuthFlow.js +0 -188
  241. package/dist/components/ConsoleOAuthFlow.js.map +0 -7
  242. package/dist/components/Cost.js +0 -13
  243. package/dist/components/Cost.js.map +0 -7
  244. package/dist/components/CostThresholdDialog.js +0 -38
  245. package/dist/components/CostThresholdDialog.js.map +0 -7
  246. package/dist/components/CustomSelect/option-map.js +0 -32
  247. package/dist/components/CustomSelect/option-map.js.map +0 -7
  248. package/dist/components/CustomSelect/select-option.js +0 -34
  249. package/dist/components/CustomSelect/select-option.js.map +0 -7
  250. package/dist/components/CustomSelect/select.js +0 -64
  251. package/dist/components/CustomSelect/select.js.map +0 -7
  252. package/dist/components/CustomSelect/theme.js +0 -1
  253. package/dist/components/CustomSelect/use-select-state.js +0 -220
  254. package/dist/components/CustomSelect/use-select-state.js.map +0 -7
  255. package/dist/components/CustomSelect/use-select.js +0 -21
  256. package/dist/components/CustomSelect/use-select.js.map +0 -7
  257. package/dist/components/FallbackToolUseRejectedMessage.js +0 -11
  258. package/dist/components/FallbackToolUseRejectedMessage.js.map +0 -7
  259. package/dist/components/FileEditToolUpdatedMessage.js +0 -31
  260. package/dist/components/FileEditToolUpdatedMessage.js.map +0 -7
  261. package/dist/components/Help.js +0 -41
  262. package/dist/components/Help.js.map +0 -7
  263. package/dist/components/HighlightedCode.js +0 -30
  264. package/dist/components/HighlightedCode.js.map +0 -7
  265. package/dist/components/InvalidConfigDialog.js +0 -83
  266. package/dist/components/InvalidConfigDialog.js.map +0 -7
  267. package/dist/components/Link.js +0 -18
  268. package/dist/components/Link.js.map +0 -7
  269. package/dist/components/LogSelector.js +0 -50
  270. package/dist/components/LogSelector.js.map +0 -7
  271. package/dist/components/Logo.js +0 -94
  272. package/dist/components/Logo.js.map +0 -7
  273. package/dist/components/MCPServerApprovalDialog.js +0 -79
  274. package/dist/components/MCPServerApprovalDialog.js.map +0 -7
  275. package/dist/components/MCPServerDialogCopy.js +0 -11
  276. package/dist/components/MCPServerDialogCopy.js.map +0 -7
  277. package/dist/components/MCPServerMultiselectDialog.js +0 -80
  278. package/dist/components/MCPServerMultiselectDialog.js.map +0 -7
  279. package/dist/components/Message.js +0 -146
  280. package/dist/components/Message.js.map +0 -7
  281. package/dist/components/MessageResponse.js +0 -9
  282. package/dist/components/MessageResponse.js.map +0 -7
  283. package/dist/components/MessageSelector.js +0 -133
  284. package/dist/components/MessageSelector.js.map +0 -7
  285. package/dist/components/ModeIndicator.js +0 -38
  286. package/dist/components/ModeIndicator.js.map +0 -7
  287. package/dist/components/ModelConfig.js +0 -208
  288. package/dist/components/ModelConfig.js.map +0 -7
  289. package/dist/components/ModelListManager.js +0 -140
  290. package/dist/components/ModelListManager.js.map +0 -7
  291. package/dist/components/ModelSelector.js +0 -1985
  292. package/dist/components/ModelSelector.js.map +0 -7
  293. package/dist/components/ModelStatusDisplay.js +0 -87
  294. package/dist/components/ModelStatusDisplay.js.map +0 -7
  295. package/dist/components/Onboarding.js +0 -153
  296. package/dist/components/Onboarding.js.map +0 -7
  297. package/dist/components/PressEnterToContinue.js +0 -10
  298. package/dist/components/PressEnterToContinue.js.map +0 -7
  299. package/dist/components/PromptInput.js +0 -501
  300. package/dist/components/PromptInput.js.map +0 -7
  301. package/dist/components/SentryErrorBoundary.js +0 -27
  302. package/dist/components/SentryErrorBoundary.js.map +0 -7
  303. package/dist/components/Spinner.js +0 -101
  304. package/dist/components/Spinner.js.map +0 -7
  305. package/dist/components/StickerRequestForm.js +0 -7
  306. package/dist/components/StickerRequestForm.js.map +0 -7
  307. package/dist/components/StructuredDiff.js +0 -148
  308. package/dist/components/StructuredDiff.js.map +0 -7
  309. package/dist/components/TextInput.js +0 -100
  310. package/dist/components/TextInput.js.map +0 -7
  311. package/dist/components/TodoItem.js +0 -35
  312. package/dist/components/TodoItem.js.map +0 -7
  313. package/dist/components/TokenWarning.js +0 -19
  314. package/dist/components/TokenWarning.js.map +0 -7
  315. package/dist/components/ToolUseLoader.js +0 -24
  316. package/dist/components/ToolUseLoader.js.map +0 -7
  317. package/dist/components/TrustDialog.js +0 -76
  318. package/dist/components/TrustDialog.js.map +0 -7
  319. package/dist/components/binary-feedback/BinaryFeedback.js +0 -50
  320. package/dist/components/binary-feedback/BinaryFeedback.js.map +0 -7
  321. package/dist/components/binary-feedback/BinaryFeedbackOption.js +0 -94
  322. package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +0 -7
  323. package/dist/components/binary-feedback/BinaryFeedbackView.js +0 -139
  324. package/dist/components/binary-feedback/BinaryFeedbackView.js.map +0 -7
  325. package/dist/components/binary-feedback/utils.js +0 -161
  326. package/dist/components/binary-feedback/utils.js.map +0 -7
  327. package/dist/components/messages/AssistantBashOutputMessage.js +0 -23
  328. package/dist/components/messages/AssistantBashOutputMessage.js.map +0 -7
  329. package/dist/components/messages/AssistantLocalCommandOutputMessage.js +0 -36
  330. package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +0 -7
  331. package/dist/components/messages/AssistantRedactedThinkingMessage.js +0 -12
  332. package/dist/components/messages/AssistantRedactedThinkingMessage.js.map +0 -7
  333. package/dist/components/messages/AssistantTextMessage.js +0 -78
  334. package/dist/components/messages/AssistantTextMessage.js.map +0 -7
  335. package/dist/components/messages/AssistantThinkingMessage.js +0 -27
  336. package/dist/components/messages/AssistantThinkingMessage.js.map +0 -7
  337. package/dist/components/messages/AssistantToolUseMessage.js +0 -91
  338. package/dist/components/messages/AssistantToolUseMessage.js.map +0 -7
  339. package/dist/components/messages/TaskProgressMessage.js +0 -11
  340. package/dist/components/messages/TaskProgressMessage.js.map +0 -7
  341. package/dist/components/messages/TaskToolMessage.js +0 -39
  342. package/dist/components/messages/TaskToolMessage.js.map +0 -7
  343. package/dist/components/messages/UserBashInputMessage.js +0 -18
  344. package/dist/components/messages/UserBashInputMessage.js.map +0 -7
  345. package/dist/components/messages/UserCommandMessage.js +0 -20
  346. package/dist/components/messages/UserCommandMessage.js.map +0 -7
  347. package/dist/components/messages/UserKodingInputMessage.js +0 -18
  348. package/dist/components/messages/UserKodingInputMessage.js.map +0 -7
  349. package/dist/components/messages/UserPromptMessage.js +0 -20
  350. package/dist/components/messages/UserPromptMessage.js.map +0 -7
  351. package/dist/components/messages/UserTextMessage.js +0 -25
  352. package/dist/components/messages/UserTextMessage.js.map +0 -7
  353. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +0 -10
  354. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js.map +0 -7
  355. package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js +0 -15
  356. package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js.map +0 -7
  357. package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +0 -25
  358. package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js.map +0 -7
  359. package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +0 -47
  360. package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js.map +0 -7
  361. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +0 -23
  362. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +0 -7
  363. package/dist/components/messages/UserToolResultMessage/utils.js +0 -42
  364. package/dist/components/messages/UserToolResultMessage/utils.js.map +0 -7
  365. package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js +0 -112
  366. package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js.map +0 -7
  367. package/dist/components/permissions/FallbackPermissionRequest.js +0 -131
  368. package/dist/components/permissions/FallbackPermissionRequest.js.map +0 -7
  369. package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +0 -159
  370. package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js.map +0 -7
  371. package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +0 -58
  372. package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +0 -7
  373. package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +0 -153
  374. package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js.map +0 -7
  375. package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +0 -70
  376. package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +0 -7
  377. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +0 -212
  378. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +0 -7
  379. package/dist/components/permissions/PermissionRequest.js +0 -70
  380. package/dist/components/permissions/PermissionRequest.js.map +0 -7
  381. package/dist/components/permissions/PermissionRequestTitle.js +0 -52
  382. package/dist/components/permissions/PermissionRequestTitle.js.map +0 -7
  383. package/dist/components/permissions/hooks.js +0 -28
  384. package/dist/components/permissions/hooks.js.map +0 -7
  385. package/dist/components/permissions/toolUseOptions.js +0 -46
  386. package/dist/components/permissions/toolUseOptions.js.map +0 -7
  387. package/dist/components/permissions/utils.js +0 -21
  388. package/dist/components/permissions/utils.js.map +0 -7
  389. package/dist/constants/betas.js +0 -11
  390. package/dist/constants/betas.js.map +0 -7
  391. package/dist/constants/claude-asterisk-ascii-art.js +0 -242
  392. package/dist/constants/claude-asterisk-ascii-art.js.map +0 -7
  393. package/dist/constants/figures.js +0 -6
  394. package/dist/constants/figures.js.map +0 -7
  395. package/dist/constants/keys.js +0 -7
  396. package/dist/constants/keys.js.map +0 -7
  397. package/dist/constants/macros.js +0 -13
  398. package/dist/constants/macros.js.map +0 -7
  399. package/dist/constants/modelCapabilities.js +0 -154
  400. package/dist/constants/modelCapabilities.js.map +0 -7
  401. package/dist/constants/models.js +0 -1029
  402. package/dist/constants/models.js.map +0 -7
  403. package/dist/constants/oauth.js +0 -18
  404. package/dist/constants/oauth.js.map +0 -7
  405. package/dist/constants/product.js +0 -26
  406. package/dist/constants/product.js.map +0 -7
  407. package/dist/constants/prompts.js +0 -168
  408. package/dist/constants/prompts.js.map +0 -7
  409. package/dist/constants/releaseNotes.js +0 -9
  410. package/dist/constants/releaseNotes.js.map +0 -7
  411. package/dist/context/PermissionContext.js +0 -111
  412. package/dist/context/PermissionContext.js.map +0 -7
  413. package/dist/context.js +0 -259
  414. package/dist/context.js.map +0 -7
  415. package/dist/cost-tracker.js.map +0 -7
  416. package/dist/entrypoints/cli.js +0 -1122
  417. package/dist/entrypoints/cli.js.map +0 -7
  418. package/dist/entrypoints/mcp.js +0 -150
  419. package/dist/entrypoints/mcp.js.map +0 -7
  420. package/dist/history.js +0 -25
  421. package/dist/history.js.map +0 -7
  422. package/dist/hooks/useApiKeyVerification.js +0 -12
  423. package/dist/hooks/useApiKeyVerification.js.map +0 -7
  424. package/dist/hooks/useArrowKeyHistory.js +0 -50
  425. package/dist/hooks/useArrowKeyHistory.js.map +0 -7
  426. package/dist/hooks/useCanUseTool.js +0 -112
  427. package/dist/hooks/useCanUseTool.js.map +0 -7
  428. package/dist/hooks/useCancelRequest.js +0 -30
  429. package/dist/hooks/useCancelRequest.js.map +0 -7
  430. package/dist/hooks/useDoublePress.js +0 -31
  431. package/dist/hooks/useDoublePress.js.map +0 -7
  432. package/dist/hooks/useExitOnCtrlCD.js +0 -26
  433. package/dist/hooks/useExitOnCtrlCD.js.map +0 -7
  434. package/dist/hooks/useInterval.js +0 -18
  435. package/dist/hooks/useInterval.js.map +0 -7
  436. package/dist/hooks/useLogMessages.js +0 -14
  437. package/dist/hooks/useLogMessages.js.map +0 -7
  438. package/dist/hooks/useLogStartupTime.js +0 -15
  439. package/dist/hooks/useLogStartupTime.js.map +0 -7
  440. package/dist/hooks/useNotifyAfterTimeout.js +0 -42
  441. package/dist/hooks/useNotifyAfterTimeout.js.map +0 -7
  442. package/dist/hooks/usePermissionRequestLogging.js +0 -28
  443. package/dist/hooks/usePermissionRequestLogging.js.map +0 -7
  444. package/dist/hooks/useTerminalSize.js +0 -38
  445. package/dist/hooks/useTerminalSize.js.map +0 -7
  446. package/dist/hooks/useTextInput.js +0 -250
  447. package/dist/hooks/useTextInput.js.map +0 -7
  448. package/dist/hooks/useUnifiedCompletion.js +0 -929
  449. package/dist/hooks/useUnifiedCompletion.js.map +0 -7
  450. package/dist/messages.js +0 -33
  451. package/dist/messages.js.map +0 -7
  452. package/dist/permissions.js +0 -194
  453. package/dist/permissions.js.map +0 -7
  454. package/dist/query.js +0 -492
  455. package/dist/query.js.map +0 -7
  456. package/dist/screens/ConfigureNpmPrefix.js +0 -128
  457. package/dist/screens/ConfigureNpmPrefix.js.map +0 -7
  458. package/dist/screens/Doctor.js +0 -143
  459. package/dist/screens/Doctor.js.map +0 -7
  460. package/dist/screens/LogList.js +0 -55
  461. package/dist/screens/LogList.js.map +0 -7
  462. package/dist/screens/REPL.js +0 -596
  463. package/dist/screens/REPL.js.map +0 -7
  464. package/dist/screens/ResumeConversation.js +0 -56
  465. package/dist/screens/ResumeConversation.js.map +0 -7
  466. package/dist/services/adapters/base.js +0 -29
  467. package/dist/services/adapters/base.js.map +0 -7
  468. package/dist/services/adapters/chatCompletions.js +0 -69
  469. package/dist/services/adapters/chatCompletions.js.map +0 -7
  470. package/dist/services/adapters/responsesAPI.js +0 -126
  471. package/dist/services/adapters/responsesAPI.js.map +0 -7
  472. package/dist/services/browserMocks.js +0 -48
  473. package/dist/services/browserMocks.js.map +0 -7
  474. package/dist/services/claude.js +0 -1605
  475. package/dist/services/claude.js.map +0 -7
  476. package/dist/services/customCommands.js +0 -359
  477. package/dist/services/customCommands.js.map +0 -7
  478. package/dist/services/fileFreshness.js +0 -280
  479. package/dist/services/fileFreshness.js.map +0 -7
  480. package/dist/services/gpt5ConnectionTest.js +0 -248
  481. package/dist/services/gpt5ConnectionTest.js.map +0 -7
  482. package/dist/services/mcpClient.js +0 -435
  483. package/dist/services/mcpClient.js.map +0 -7
  484. package/dist/services/mcpServerApproval.js +0 -55
  485. package/dist/services/mcpServerApproval.js.map +0 -7
  486. package/dist/services/mentionProcessor.js.map +0 -7
  487. package/dist/services/modelAdapterFactory.js +0 -47
  488. package/dist/services/modelAdapterFactory.js.map +0 -7
  489. package/dist/services/notifier.js +0 -35
  490. package/dist/services/notifier.js.map +0 -7
  491. package/dist/services/oauth.js +0 -259
  492. package/dist/services/oauth.js.map +0 -7
  493. package/dist/services/openai.js.map +0 -7
  494. package/dist/services/responseStateManager.js +0 -68
  495. package/dist/services/responseStateManager.js.map +0 -7
  496. package/dist/services/sentry.js +0 -9
  497. package/dist/services/sentry.js.map +0 -7
  498. package/dist/services/statsig.js +0 -112
  499. package/dist/services/statsig.js.map +0 -7
  500. package/dist/services/statsigStorage.js +0 -75
  501. package/dist/services/statsigStorage.js.map +0 -7
  502. package/dist/services/systemReminder.js.map +0 -7
  503. package/dist/services/vcr.js +0 -133
  504. package/dist/services/vcr.js.map +0 -7
  505. package/dist/tools/ArchitectTool/ArchitectTool.js +0 -119
  506. package/dist/tools/ArchitectTool/ArchitectTool.js.map +0 -7
  507. package/dist/tools/ArchitectTool/prompt.js +0 -18
  508. package/dist/tools/ArchitectTool/prompt.js.map +0 -7
  509. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +0 -423
  510. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +0 -7
  511. package/dist/tools/BashTool/BashTool.js +0 -188
  512. package/dist/tools/BashTool/BashTool.js.map +0 -7
  513. package/dist/tools/BashTool/BashToolResultMessage.js +0 -21
  514. package/dist/tools/BashTool/BashToolResultMessage.js.map +0 -7
  515. package/dist/tools/BashTool/OutputLine.js +0 -30
  516. package/dist/tools/BashTool/OutputLine.js.map +0 -7
  517. package/dist/tools/BashTool/prompt.js +0 -179
  518. package/dist/tools/BashTool/prompt.js.map +0 -7
  519. package/dist/tools/BashTool/utils.js +0 -51
  520. package/dist/tools/BashTool/utils.js.map +0 -7
  521. package/dist/tools/FileEditTool/FileEditTool.js +0 -228
  522. package/dist/tools/FileEditTool/FileEditTool.js.map +0 -7
  523. package/dist/tools/FileEditTool/prompt.js +0 -54
  524. package/dist/tools/FileEditTool/prompt.js.map +0 -7
  525. package/dist/tools/FileEditTool/utils.js +0 -42
  526. package/dist/tools/FileEditTool/utils.js.map +0 -7
  527. package/dist/tools/FileReadTool/FileReadTool.js +0 -272
  528. package/dist/tools/FileReadTool/FileReadTool.js.map +0 -7
  529. package/dist/tools/FileReadTool/prompt.js +0 -10
  530. package/dist/tools/FileReadTool/prompt.js.map +0 -7
  531. package/dist/tools/FileWriteTool/FileWriteTool.js +0 -204
  532. package/dist/tools/FileWriteTool/FileWriteTool.js.map +0 -7
  533. package/dist/tools/FileWriteTool/prompt.js +0 -14
  534. package/dist/tools/FileWriteTool/prompt.js.map +0 -7
  535. package/dist/tools/GlobTool/GlobTool.js +0 -88
  536. package/dist/tools/GlobTool/GlobTool.js.map +0 -7
  537. package/dist/tools/GlobTool/prompt.js +0 -12
  538. package/dist/tools/GlobTool/prompt.js.map +0 -7
  539. package/dist/tools/GrepTool/GrepTool.js +0 -107
  540. package/dist/tools/GrepTool/GrepTool.js.map +0 -7
  541. package/dist/tools/GrepTool/prompt.js +0 -15
  542. package/dist/tools/GrepTool/prompt.js.map +0 -7
  543. package/dist/tools/MCPTool/MCPTool.js +0 -90
  544. package/dist/tools/MCPTool/MCPTool.js.map +0 -7
  545. package/dist/tools/MCPTool/prompt.js +0 -7
  546. package/dist/tools/MCPTool/prompt.js.map +0 -7
  547. package/dist/tools/MemoryReadTool/MemoryReadTool.js +0 -103
  548. package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +0 -7
  549. package/dist/tools/MemoryReadTool/prompt.js +0 -7
  550. package/dist/tools/MemoryReadTool/prompt.js.map +0 -7
  551. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +0 -77
  552. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +0 -7
  553. package/dist/tools/MemoryWriteTool/prompt.js +0 -7
  554. package/dist/tools/MemoryWriteTool/prompt.js.map +0 -7
  555. package/dist/tools/MultiEditTool/MultiEditTool.js +0 -293
  556. package/dist/tools/MultiEditTool/MultiEditTool.js.map +0 -7
  557. package/dist/tools/MultiEditTool/prompt.js +0 -48
  558. package/dist/tools/MultiEditTool/prompt.js.map +0 -7
  559. package/dist/tools/NotebookEditTool/NotebookEditTool.js +0 -238
  560. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +0 -7
  561. package/dist/tools/NotebookEditTool/prompt.js +0 -7
  562. package/dist/tools/NotebookEditTool/prompt.js.map +0 -7
  563. package/dist/tools/NotebookReadTool/NotebookReadTool.js +0 -212
  564. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +0 -7
  565. package/dist/tools/NotebookReadTool/prompt.js +0 -7
  566. package/dist/tools/NotebookReadTool/prompt.js.map +0 -7
  567. package/dist/tools/StickerRequestTool/StickerRequestTool.js +0 -86
  568. package/dist/tools/StickerRequestTool/StickerRequestTool.js.map +0 -7
  569. package/dist/tools/StickerRequestTool/prompt.js +0 -23
  570. package/dist/tools/StickerRequestTool/prompt.js.map +0 -7
  571. package/dist/tools/TaskTool/TaskTool.js +0 -351
  572. package/dist/tools/TaskTool/TaskTool.js.map +0 -7
  573. package/dist/tools/TaskTool/constants.js +0 -5
  574. package/dist/tools/TaskTool/constants.js.map +0 -7
  575. package/dist/tools/TaskTool/prompt.js +0 -82
  576. package/dist/tools/TaskTool/prompt.js.map +0 -7
  577. package/dist/tools/ThinkTool/ThinkTool.js +0 -48
  578. package/dist/tools/ThinkTool/ThinkTool.js.map +0 -7
  579. package/dist/tools/ThinkTool/prompt.js +0 -16
  580. package/dist/tools/ThinkTool/prompt.js.map +0 -7
  581. package/dist/tools/TodoWriteTool/TodoWriteTool.js +0 -216
  582. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +0 -7
  583. package/dist/tools/TodoWriteTool/prompt.js +0 -66
  584. package/dist/tools/TodoWriteTool/prompt.js.map +0 -7
  585. package/dist/tools/URLFetcherTool/URLFetcherTool.js +0 -137
  586. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +0 -7
  587. package/dist/tools/URLFetcherTool/cache.js +0 -45
  588. package/dist/tools/URLFetcherTool/cache.js.map +0 -7
  589. package/dist/tools/URLFetcherTool/htmlToMarkdown.js +0 -42
  590. package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +0 -7
  591. package/dist/tools/URLFetcherTool/prompt.js +0 -22
  592. package/dist/tools/URLFetcherTool/prompt.js.map +0 -7
  593. package/dist/tools/WebSearchTool/WebSearchTool.js +0 -86
  594. package/dist/tools/WebSearchTool/WebSearchTool.js.map +0 -7
  595. package/dist/tools/WebSearchTool/prompt.js +0 -17
  596. package/dist/tools/WebSearchTool/prompt.js.map +0 -7
  597. package/dist/tools/WebSearchTool/searchProviders.js +0 -48
  598. package/dist/tools/WebSearchTool/searchProviders.js.map +0 -7
  599. package/dist/tools/lsTool/lsTool.js +0 -201
  600. package/dist/tools/lsTool/lsTool.js.map +0 -7
  601. package/dist/tools/lsTool/prompt.js +0 -5
  602. package/dist/tools/lsTool/prompt.js.map +0 -7
  603. package/dist/tools.js +0 -64
  604. package/dist/tools.js.map +0 -7
  605. package/dist/types/PermissionMode.js +0 -82
  606. package/dist/types/PermissionMode.js.map +0 -7
  607. package/dist/types/RequestContext.js +0 -47
  608. package/dist/types/RequestContext.js.map +0 -7
  609. package/dist/types/common.d.js +0 -1
  610. package/dist/types/conversation.js +0 -1
  611. package/dist/types/logs.js +0 -1
  612. package/dist/types/modelCapabilities.js +0 -1
  613. package/dist/types/notebook.js +0 -1
  614. package/dist/utils/Cursor.js +0 -313
  615. package/dist/utils/Cursor.js.map +0 -7
  616. package/dist/utils/PersistentShell.js +0 -382
  617. package/dist/utils/PersistentShell.js.map +0 -7
  618. package/dist/utils/advancedFuzzyMatcher.js +0 -206
  619. package/dist/utils/advancedFuzzyMatcher.js.map +0 -7
  620. package/dist/utils/agentLoader.js +0 -199
  621. package/dist/utils/agentLoader.js.map +0 -7
  622. package/dist/utils/agentStorage.js +0 -59
  623. package/dist/utils/agentStorage.js.map +0 -7
  624. package/dist/utils/array.js +0 -7
  625. package/dist/utils/array.js.map +0 -7
  626. package/dist/utils/ask.js +0 -77
  627. package/dist/utils/ask.js.map +0 -7
  628. package/dist/utils/auth.js +0 -11
  629. package/dist/utils/auth.js.map +0 -7
  630. package/dist/utils/autoCompactCore.js +0 -149
  631. package/dist/utils/autoCompactCore.js.map +0 -7
  632. package/dist/utils/autoUpdater.js +0 -360
  633. package/dist/utils/autoUpdater.js.map +0 -7
  634. package/dist/utils/betas.js +0 -21
  635. package/dist/utils/betas.js.map +0 -7
  636. package/dist/utils/browser.js +0 -15
  637. package/dist/utils/browser.js.map +0 -7
  638. package/dist/utils/cleanup.js +0 -54
  639. package/dist/utils/cleanup.js.map +0 -7
  640. package/dist/utils/commands.js +0 -207
  641. package/dist/utils/commands.js.map +0 -7
  642. package/dist/utils/commonUnixCommands.js +0 -687
  643. package/dist/utils/commonUnixCommands.js.map +0 -7
  644. package/dist/utils/config.js.map +0 -7
  645. package/dist/utils/conversationRecovery.js +0 -35
  646. package/dist/utils/conversationRecovery.js.map +0 -7
  647. package/dist/utils/debugLogger.js.map +0 -7
  648. package/dist/utils/diff.js +0 -32
  649. package/dist/utils/diff.js.map +0 -7
  650. package/dist/utils/env.js +0 -44
  651. package/dist/utils/env.js.map +0 -7
  652. package/dist/utils/errors.js +0 -23
  653. package/dist/utils/errors.js.map +0 -7
  654. package/dist/utils/exampleCommands.js +0 -80
  655. package/dist/utils/exampleCommands.js.map +0 -7
  656. package/dist/utils/execFileNoThrow.js +0 -44
  657. package/dist/utils/execFileNoThrow.js.map +0 -7
  658. package/dist/utils/expertChatStorage.js +0 -78
  659. package/dist/utils/expertChatStorage.js.map +0 -7
  660. package/dist/utils/file.js +0 -282
  661. package/dist/utils/file.js.map +0 -7
  662. package/dist/utils/fileRecoveryCore.js +0 -41
  663. package/dist/utils/fileRecoveryCore.js.map +0 -7
  664. package/dist/utils/format.js +0 -41
  665. package/dist/utils/format.js.map +0 -7
  666. package/dist/utils/fuzzyMatcher.js +0 -252
  667. package/dist/utils/fuzzyMatcher.js.map +0 -7
  668. package/dist/utils/generators.js +0 -46
  669. package/dist/utils/generators.js.map +0 -7
  670. package/dist/utils/git.js +0 -83
  671. package/dist/utils/git.js.map +0 -7
  672. package/dist/utils/globalLogger.js +0 -54
  673. package/dist/utils/globalLogger.js.map +0 -7
  674. package/dist/utils/http.js +0 -7
  675. package/dist/utils/http.js.map +0 -7
  676. package/dist/utils/imagePaste.js +0 -29
  677. package/dist/utils/imagePaste.js.map +0 -7
  678. package/dist/utils/json.js +0 -16
  679. package/dist/utils/json.js.map +0 -7
  680. package/dist/utils/log.js +0 -298
  681. package/dist/utils/log.js.map +0 -7
  682. package/dist/utils/markdown.js +0 -187
  683. package/dist/utils/markdown.js.map +0 -7
  684. package/dist/utils/messageContextManager.js +0 -195
  685. package/dist/utils/messageContextManager.js.map +0 -7
  686. package/dist/utils/messages.js +0 -633
  687. package/dist/utils/messages.js.map +0 -7
  688. package/dist/utils/model.js.map +0 -7
  689. package/dist/utils/permissions/filesystem.js +0 -80
  690. package/dist/utils/permissions/filesystem.js.map +0 -7
  691. package/dist/utils/responseState.js +0 -20
  692. package/dist/utils/responseState.js.map +0 -7
  693. package/dist/utils/ripgrep.js +0 -131
  694. package/dist/utils/ripgrep.js.map +0 -7
  695. package/dist/utils/secureFile.js +0 -483
  696. package/dist/utils/secureFile.js.map +0 -7
  697. package/dist/utils/sessionState.js +0 -31
  698. package/dist/utils/sessionState.js.map +0 -7
  699. package/dist/utils/state.js +0 -24
  700. package/dist/utils/state.js.map +0 -7
  701. package/dist/utils/style.js +0 -31
  702. package/dist/utils/style.js.map +0 -7
  703. package/dist/utils/terminal.js +0 -43
  704. package/dist/utils/terminal.js.map +0 -7
  705. package/dist/utils/theme.js.map +0 -7
  706. package/dist/utils/thinking.js +0 -103
  707. package/dist/utils/thinking.js.map +0 -7
  708. package/dist/utils/todoStorage.js +0 -291
  709. package/dist/utils/todoStorage.js.map +0 -7
  710. package/dist/utils/tokens.js +0 -30
  711. package/dist/utils/tokens.js.map +0 -7
  712. package/dist/utils/toolExecutionController.js +0 -109
  713. package/dist/utils/toolExecutionController.js.map +0 -7
  714. package/dist/utils/unaryLogging.js +0 -14
  715. package/dist/utils/unaryLogging.js.map +0 -7
  716. package/dist/utils/user.js +0 -40
  717. package/dist/utils/user.js.map +0 -7
  718. package/dist/utils/validate.js +0 -132
  719. package/dist/utils/validate.js.map +0 -7
  720. /package/dist/{Tool.js.map → REPL-CW7AYLVL.js.map} +0 -0
  721. /package/dist/{components/CustomSelect/theme.js.map → autoUpdater-ITPIHCOI.js.map} +0 -0
  722. /package/dist/{types/common.d.js.map → chunk-JC6NCUG5.js.map} +0 -0
  723. /package/dist/{types/conversation.js.map → commands-2BF2CJ3A.js.map} +0 -0
  724. /package/dist/{types/logs.js.map → config-RUSD6G5Y.js.map} +0 -0
  725. /package/dist/{types/modelCapabilities.js.map → context-6FXPETYH.js.map} +0 -0
  726. /package/dist/{types/notebook.js.map → costTracker-6SL26FDB.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/acp/jsonrpc.ts", "../src/acp/stdioTransport.ts", "../src/acp/stdoutGuard.ts", "../src/acp/kodeAcpAgent.ts", "../src/acp/protocol.ts", "../src/entrypoints/acp.ts"],
4
+ "sourcesContent": ["import { format } from 'node:util'\n\nexport type JsonRpcId = string | number | null\n\nexport type JsonRpcRequest = {\n jsonrpc: '2.0'\n id: string | number\n method: string\n params?: unknown\n}\n\nexport type JsonRpcNotification = {\n jsonrpc: '2.0'\n method: string\n params?: unknown\n}\n\nexport type JsonRpcResponse = {\n jsonrpc: '2.0'\n id: JsonRpcId\n result?: unknown\n error?: { code: number; message: string; data?: unknown }\n}\n\ntype JsonRpcIncoming = JsonRpcRequest | JsonRpcNotification | JsonRpcResponse\n\nexport class JsonRpcError extends Error {\n readonly code: number\n readonly data?: unknown\n\n constructor(code: number, message: string, data?: unknown) {\n super(message)\n this.code = code\n this.data = data\n }\n}\n\nexport type JsonRpcHandler = (params: unknown) => Promise<unknown> | unknown\n\nconst JSONRPC_VERSION = '2.0'\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction safeStringify(value: unknown): string {\n try {\n return JSON.stringify(value)\n } catch {\n return format(value)\n }\n}\n\nfunction makeErrorResponse(\n id: JsonRpcId,\n code: number,\n message: string,\n data?: unknown,\n): JsonRpcResponse {\n return {\n jsonrpc: JSONRPC_VERSION,\n id,\n error: data === undefined ? { code, message } : { code, message, data },\n }\n}\n\nfunction normalizeId(id: unknown): JsonRpcId {\n return typeof id === 'string' || typeof id === 'number' ? id : null\n}\n\nexport class JsonRpcPeer {\n private readonly handlers = new Map<string, JsonRpcHandler>()\n private readonly pending = new Map<\n string | number,\n {\n resolve: (value: unknown) => void\n reject: (err: unknown) => void\n abort?: AbortSignal\n timeoutId?: NodeJS.Timeout\n }\n >()\n private nextId = 1\n private sendLine: ((line: string) => void) | null = null\n\n setSend(send: (line: string) => void): void {\n this.sendLine = send\n }\n\n registerMethod(method: string, handler: JsonRpcHandler): void {\n this.handlers.set(method, handler)\n }\n\n async handleIncoming(payload: unknown): Promise<void> {\n if (Array.isArray(payload)) {\n const responses: JsonRpcResponse[] = []\n for (const item of payload) {\n const r = await this.handleIncomingOne(item)\n if (r) responses.push(r)\n }\n if (responses.length > 0) {\n this.sendRaw(responses)\n }\n return\n }\n\n const response = await this.handleIncomingOne(payload)\n if (response) this.sendRaw(response)\n }\n\n private async handleIncomingOne(payload: unknown): Promise<JsonRpcResponse | null> {\n if (!isObject(payload)) {\n return makeErrorResponse(null, -32600, 'Invalid Request')\n }\n\n const jsonrpc = payload.jsonrpc\n if (jsonrpc !== JSONRPC_VERSION) {\n return makeErrorResponse(normalizeId(payload.id), -32600, 'Invalid Request')\n }\n\n const hasMethod = typeof payload.method === 'string' && payload.method.length > 0\n const hasId = typeof payload.id === 'string' || typeof payload.id === 'number'\n\n if (!hasMethod && hasId && ('result' in payload || 'error' in payload)) {\n this.handleResponse(payload as unknown as JsonRpcResponse)\n return null\n }\n\n if (!hasMethod) {\n return makeErrorResponse(normalizeId(payload.id), -32600, 'Invalid Request')\n }\n\n const method = String(payload.method)\n const params = 'params' in payload ? (payload as any).params : undefined\n const id = hasId ? (payload.id as string | number) : null\n\n const handler = this.handlers.get(method)\n if (!handler) {\n if (id === null) return null\n return makeErrorResponse(id, -32601, `Method not found: ${method}`)\n }\n\n if (id === null) {\n try {\n await handler(params)\n } catch {\n }\n return null\n }\n\n try {\n const result = await handler(params)\n return { jsonrpc: JSONRPC_VERSION, id, result: result ?? null }\n } catch (err) {\n if (err instanceof JsonRpcError) {\n return makeErrorResponse(id, err.code, err.message, err.data)\n }\n const message = err instanceof Error ? err.message : safeStringify(err)\n return makeErrorResponse(id, -32603, message)\n }\n }\n\n private handleResponse(msg: JsonRpcResponse): void {\n const id = normalizeId(msg.id)\n if (id === null) return\n const pending = this.pending.get(id)\n if (!pending) return\n this.pending.delete(id)\n\n if (pending.timeoutId) clearTimeout(pending.timeoutId)\n\n if (msg && typeof msg === 'object' && 'error' in msg && (msg as any).error) {\n const e = (msg as any).error\n const code = typeof e.code === 'number' ? e.code : -32603\n const message = typeof e.message === 'string' ? e.message : 'Unknown error'\n pending.reject(new JsonRpcError(code, message, e.data))\n return\n }\n\n pending.resolve((msg as any).result)\n }\n\n sendNotification(method: string, params?: unknown): void {\n this.sendRaw({ jsonrpc: JSONRPC_VERSION, method, ...(params !== undefined ? { params } : {}) })\n }\n\n sendRequest<T = unknown>(args: {\n method: string\n params?: unknown\n signal?: AbortSignal\n timeoutMs?: number\n }): Promise<T> {\n const id = this.nextId++\n const timeoutMs = args.timeoutMs\n\n const p = new Promise<T>((resolve, reject) => {\n const entry: {\n resolve: (value: unknown) => void\n reject: (err: unknown) => void\n abort?: AbortSignal\n timeoutId?: NodeJS.Timeout\n } = { resolve, reject, abort: args.signal }\n\n if (timeoutMs && Number.isFinite(timeoutMs) && timeoutMs > 0) {\n entry.timeoutId = setTimeout(() => {\n this.pending.delete(id)\n reject(new JsonRpcError(-32000, `Request timed out: ${args.method}`))\n }, timeoutMs)\n }\n\n if (args.signal) {\n const onAbort = () => {\n this.pending.delete(id)\n if (entry.timeoutId) clearTimeout(entry.timeoutId)\n reject(new JsonRpcError(-32000, `Request aborted: ${args.method}`))\n }\n if (args.signal.aborted) {\n onAbort()\n return\n }\n args.signal.addEventListener('abort', onAbort, { once: true })\n }\n\n this.pending.set(id, entry)\n })\n\n this.sendRaw({\n jsonrpc: JSONRPC_VERSION,\n id,\n method: args.method,\n ...(args.params !== undefined ? { params: args.params } : {}),\n })\n\n return p\n }\n\n private sendRaw(obj: unknown): void {\n const send = this.sendLine\n if (!send) {\n throw new Error('JsonRpcPeer send() not configured')\n }\n const line = JSON.stringify(obj)\n send(line)\n }\n}\n\n", "import readline from 'node:readline'\n\nimport { JsonRpcPeer } from './jsonrpc'\n\ntype TransportOptions = {\n writeLine: (line: string) => void\n}\n\nexport class StdioTransport {\n private rl: readline.Interface | null = null\n private readonly pending = new Set<Promise<void>>()\n\n constructor(\n private readonly peer: JsonRpcPeer,\n private readonly opts: TransportOptions,\n ) {}\n\n start(): void {\n if (this.rl) return\n\n this.peer.setSend(this.opts.writeLine)\n\n this.rl = readline.createInterface({\n input: process.stdin,\n crlfDelay: Infinity,\n })\n\n this.rl.on('line', line => {\n const trimmed = line.trim()\n if (!trimmed) return\n\n try {\n const payload = JSON.parse(trimmed)\n const p = this.peer.handleIncoming(payload).catch(() => {\n })\n this.pending.add(p)\n void p.finally(() => this.pending.delete(p))\n } catch (err) {\n this.opts.writeLine(\n JSON.stringify({\n jsonrpc: '2.0',\n id: null,\n error: { code: -32700, message: 'Parse error' },\n }),\n )\n }\n })\n\n this.rl.on('close', () => {\n void (async () => {\n const pending = Array.from(this.pending)\n if (pending.length > 0) {\n await Promise.allSettled(pending)\n }\n process.exit(0)\n })()\n })\n }\n\n stop(): void {\n this.rl?.close()\n this.rl = null\n }\n}\n", "import { format } from 'node:util'\n\ntype WriteFn = typeof process.stdout.write\n\ntype GuardHandle = {\n writeAcpLine: (line: string) => void\n restore: () => void\n originalStdoutWrite: WriteFn\n}\n\nfunction writeTo(\n write: WriteFn,\n chunk: unknown,\n encoding?: BufferEncoding,\n cb?: (err?: Error | null) => void,\n): boolean {\n if (typeof encoding === 'function') {\n return write(chunk as any, undefined as any, encoding as any)\n }\n return write(chunk as any, encoding as any, cb as any)\n}\n\nexport function installStdoutGuard(): GuardHandle {\n const originalStdoutWrite = process.stdout.write.bind(process.stdout)\n const originalStderrWrite = process.stderr.write.bind(process.stderr)\n\n const originalConsoleLog = console.log.bind(console)\n const originalConsoleInfo = console.info.bind(console)\n const originalConsoleDebug = console.debug.bind(console)\n const originalConsoleWarn = console.warn.bind(console)\n const originalConsoleError = console.error.bind(console)\n\n const writeAcpLine = (line: string) => {\n writeTo(originalStdoutWrite, `${line}\\n`)\n }\n\n const writeLogToStderr = (...args: unknown[]) => {\n writeTo(originalStderrWrite, `${format(...args)}\\n`)\n }\n\n console.log = writeLogToStderr as any\n console.info = writeLogToStderr as any\n console.debug = writeLogToStderr as any\n console.warn = writeLogToStderr as any\n console.error = writeLogToStderr as any\n\n process.stdout.write = ((chunk: any, encoding?: any, cb?: any) => {\n return writeTo(originalStderrWrite, chunk, encoding, cb)\n }) as any\n\n const restore = () => {\n process.stdout.write = originalStdoutWrite as any\n console.log = originalConsoleLog as any\n console.info = originalConsoleInfo as any\n console.debug = originalConsoleDebug as any\n console.warn = originalConsoleWarn as any\n console.error = originalConsoleError as any\n }\n\n return { writeAcpLine, restore, originalStdoutWrite }\n}\n\n", "import { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'node:fs'\nimport { dirname, isAbsolute, join, resolve } from 'node:path'\n\nimport { nanoid } from 'nanoid'\n\nimport { JsonRpcError, JsonRpcPeer } from './jsonrpc'\nimport * as Protocol from './protocol'\n\nimport { MACRO } from '@constants/macros'\nimport { PRODUCT_COMMAND } from '@constants/product'\nimport { getContext } from '@context'\nimport { getCommands, type Command } from '@commands'\nimport { getTools } from '@tools'\nimport type { Tool, ToolUseContext } from '@tool'\nimport { query, type Message, type UserMessage, type AssistantMessage } from '@query'\nimport { hasPermissionsToUseTool } from '@permissions'\nimport { createAssistantMessage, createUserMessage } from '@utils/messages'\nimport { getSystemPrompt } from '@constants/prompts'\nimport { logError } from '@utils/log'\nimport { setCwd, setOriginalCwd } from '@utils/state'\nimport { grantReadPermissionForOriginalDir } from '@utils/permissions/filesystem'\nimport { getKodeBaseDir } from '@utils/config/env'\nimport { Client } from '@modelcontextprotocol/sdk/client/index.js'\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js'\nimport { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js'\nimport { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'\nimport {\n loadToolPermissionContextFromDisk,\n persistToolPermissionUpdateToDisk,\n} from '@utils/permissions/toolPermissionSettings'\nimport { applyToolPermissionContextUpdates } from '@kode-types/toolPermissionContext'\nimport type { ToolPermissionContext } from '@kode-types/toolPermissionContext'\nimport type { CanUseToolFn } from '@kode-types/canUseTool'\nimport type { WrappedClient } from '@services/mcpClient'\nimport { getClients } from '@services/mcpClient'\n\ntype SessionState = {\n sessionId: string\n cwd: string\n mcpServers: Protocol.McpServer[]\n mcpClients: WrappedClient[]\n\n commands: Command[]\n tools: Tool[]\n\n systemPrompt: string[]\n context: Record<string, string>\n\n messages: Message[]\n toolPermissionContext: ToolPermissionContext\n readFileTimestamps: Record<string, number>\n responseState: ToolUseContext['responseState']\n\n currentModeId: Protocol.SessionModeId\n activeAbortController: AbortController | null\n\n toolCalls: Map<\n string,\n {\n title: string\n kind: Protocol.ToolKind\n status: Protocol.ToolCallStatus\n rawInput?: Protocol.JsonObject\n fileSnapshot?: {\n path: string\n content: string\n }\n }\n >\n}\n\nfunction asJsonObject(value: unknown): Protocol.JsonObject | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined\n try {\n JSON.stringify(value)\n return value as Protocol.JsonObject\n } catch {\n return undefined\n }\n}\n\nfunction toolKindForName(toolName: string): Protocol.ToolKind {\n switch (toolName) {\n case 'Read':\n return 'read'\n case 'Write':\n case 'Edit':\n case 'MultiEdit':\n case 'NotebookEdit':\n return 'edit'\n case 'Grep':\n case 'Glob':\n return 'search'\n case 'Bash':\n case 'TaskOutput':\n case 'KillShell':\n return 'execute'\n case 'SwitchModel':\n return 'switch_mode'\n default:\n return 'other'\n }\n}\n\nfunction titleForToolCall(toolName: string, input: Record<string, unknown>): string {\n if (toolName === 'Read' && typeof input.file_path === 'string') {\n return `Read ${input.file_path}`\n }\n if ((toolName === 'Write' || toolName === 'Edit' || toolName === 'MultiEdit') && typeof input.file_path === 'string') {\n return `${toolName} ${input.file_path}`\n }\n if (toolName === 'Bash' && typeof input.command === 'string') {\n const cmd = input.command.trim().replace(/\\s+/g, ' ')\n const clipped = cmd.length > 120 ? `${cmd.slice(0, 117)}...` : cmd\n return `Run ${clipped}`\n }\n return toolName\n}\n\nfunction blocksToText(blocks: Protocol.ContentBlock[]): string {\n const parts: string[] = []\n\n for (const block of blocks) {\n if (!block || typeof block !== 'object') continue\n\n switch ((block as any).type) {\n case 'text': {\n const text = typeof (block as any).text === 'string' ? (block as any).text : ''\n if (text) parts.push(text)\n break\n }\n case 'resource': {\n const resource = (block as any).resource || {}\n const uri = typeof resource.uri === 'string' ? resource.uri : ''\n const mimeType =\n typeof resource.mimeType === 'string' && resource.mimeType ? resource.mimeType : 'text/plain'\n if (typeof resource.text === 'string') {\n parts.push(\n [\n '',\n `@resource ${uri} (${mimeType})`,\n '```',\n resource.text,\n '```',\n ].join('\\n'),\n )\n } else if (typeof resource.blob === 'string') {\n parts.push(\n [\n '',\n `@resource ${uri} (${mimeType}) [base64]`,\n resource.blob,\n ].join('\\n'),\n )\n } else if (uri) {\n parts.push(`@resource ${uri} (${mimeType})`)\n }\n break\n }\n case 'resource_link': {\n const uri = typeof (block as any).uri === 'string' ? (block as any).uri : ''\n const name = typeof (block as any).name === 'string' ? (block as any).name : ''\n const title = typeof (block as any).title === 'string' ? (block as any).title : ''\n const description =\n typeof (block as any).description === 'string' ? (block as any).description : ''\n\n parts.push(\n [\n '',\n `@resource_link ${name || uri}`,\n ...(title ? [title] : []),\n ...(description ? [description] : []),\n ...(uri ? [uri] : []),\n ].join('\\n'),\n )\n break\n }\n case 'image':\n case 'audio': {\n break\n }\n default:\n break\n }\n }\n\n return parts.join('\\n').trim()\n}\n\nfunction extractAssistantText(msg: AssistantMessage): string {\n const blocks: any[] = Array.isArray((msg as any)?.message?.content) ? ((msg as any).message.content as any[]) : []\n const texts: string[] = []\n for (const b of blocks) {\n if (!b || typeof b !== 'object') continue\n if (b.type === 'text' && typeof b.text === 'string') texts.push(b.text)\n if (b.type === 'thinking' && typeof (b as any).thinking === 'string') texts.push((b as any).thinking)\n }\n return texts.join('').trim()\n}\n\nfunction extractToolUses(msg: AssistantMessage): Array<{ id: string; name: string; input: Record<string, unknown> }> {\n const blocks: any[] = Array.isArray((msg as any)?.message?.content) ? ((msg as any).message.content as any[]) : []\n const out: Array<{ id: string; name: string; input: Record<string, unknown> }> = []\n for (const b of blocks) {\n if (!b || typeof b !== 'object') continue\n if (b.type !== 'tool_use') continue\n const id = typeof b.id === 'string' ? b.id : ''\n const name = typeof b.name === 'string' ? b.name : ''\n const input = b.input && typeof b.input === 'object' && !Array.isArray(b.input) ? (b.input as Record<string, unknown>) : {}\n if (id && name) out.push({ id, name, input })\n }\n return out\n}\n\nfunction extractToolResults(msg: UserMessage): Array<{ toolUseId: string; isError: boolean; content: string }> {\n const content = (msg as any)?.message?.content\n const blocks: any[] = Array.isArray(content) ? content : []\n const out: Array<{ toolUseId: string; isError: boolean; content: string }> = []\n\n for (const b of blocks) {\n if (!b || typeof b !== 'object') continue\n if (b.type !== 'tool_result') continue\n const toolUseId = typeof b.tool_use_id === 'string' ? b.tool_use_id : ''\n const isError = Boolean(b.is_error)\n const raw = b.content\n const text =\n typeof raw === 'string'\n ? raw\n : Array.isArray(raw)\n ? raw\n .filter(x => x && typeof x === 'object' && (x as any).type === 'text')\n .map(x => String((x as any).text ?? ''))\n .join('')\n : ''\n if (toolUseId) out.push({ toolUseId, isError, content: text })\n }\n\n return out\n}\n\nconst ACP_SESSION_STORE_VERSION = 1\nconst MAX_DIFF_FILE_BYTES = 512_000\nconst MAX_DIFF_TEXT_CHARS = 400_000\n\ntype PersistedAcpSession = {\n version: number\n sessionId: string\n cwd: string\n mcpServers: Protocol.McpServer[]\n messages: Message[]\n toolPermissionContext: ToolPermissionContext\n readFileTimestamps: Record<string, number>\n responseState: ToolUseContext['responseState']\n currentModeId: Protocol.SessionModeId\n}\n\nfunction getProjectDirSlug(cwd: string): string {\n return cwd.replace(/[^a-zA-Z0-9]/g, '-')\n}\n\nfunction sanitizeSessionId(sessionId: string): string {\n return sessionId.replace(/[^a-zA-Z0-9_-]/g, '_')\n}\n\nfunction getAcpSessionDir(cwd: string): string {\n return join(getKodeBaseDir(), getProjectDirSlug(cwd), 'acp-sessions')\n}\n\nfunction getAcpSessionFilePath(cwd: string, sessionId: string): string {\n return join(getAcpSessionDir(cwd), `${sanitizeSessionId(sessionId)}.json`)\n}\n\nfunction readTextFileForDiff(filePath: string): string | null {\n try {\n const stats = statSync(filePath)\n if (!stats.isFile()) return null\n if (stats.size > MAX_DIFF_FILE_BYTES) return null\n return readFileSync(filePath, 'utf8')\n } catch {\n return null\n }\n}\n\nfunction truncateDiffText(text: string): string {\n if (text.length <= MAX_DIFF_TEXT_CHARS) return text\n return `${text.slice(0, MAX_DIFF_TEXT_CHARS)}\\n\\n[truncated ${text.length - MAX_DIFF_TEXT_CHARS} chars]`\n}\n\nfunction persistAcpSessionToDisk(session: SessionState): void {\n try {\n const dir = getAcpSessionDir(session.cwd)\n mkdirSync(dir, { recursive: true })\n\n const payload: PersistedAcpSession = {\n version: ACP_SESSION_STORE_VERSION,\n sessionId: session.sessionId,\n cwd: session.cwd,\n mcpServers: session.mcpServers,\n messages: session.messages,\n toolPermissionContext: session.toolPermissionContext,\n readFileTimestamps: session.readFileTimestamps,\n responseState: session.responseState,\n currentModeId: session.currentModeId,\n }\n\n const path = getAcpSessionFilePath(session.cwd, session.sessionId)\n writeFileSync(path, JSON.stringify(payload, null, 2), 'utf8')\n } catch (e) {\n logError(e)\n }\n}\n\nfunction loadAcpSessionFromDisk(cwd: string, sessionId: string): PersistedAcpSession | null {\n try {\n const path = getAcpSessionFilePath(cwd, sessionId)\n if (!existsSync(path)) return null\n const raw = readFileSync(path, 'utf8')\n const parsed = JSON.parse(raw) as PersistedAcpSession\n if (!parsed || typeof parsed !== 'object') return null\n if (parsed.sessionId !== sessionId) return null\n if (typeof parsed.cwd !== 'string' || parsed.cwd !== cwd) return null\n if (!Array.isArray(parsed.messages)) return null\n return parsed\n } catch {\n return null\n }\n}\n\nasync function connectAcpMcpServers(mcpServers: Protocol.McpServer[]): Promise<WrappedClient[]> {\n if (!Array.isArray(mcpServers) || mcpServers.length === 0) return []\n\n const rawTimeout = process.env.MCP_CONNECTION_TIMEOUT_MS\n const parsedTimeout = rawTimeout ? Number.parseInt(rawTimeout, 10) : NaN\n const timeoutMs = Number.isFinite(parsedTimeout) ? parsedTimeout : 30_000\n\n const results: WrappedClient[] = []\n\n type Candidate = { kind: 'stdio' | 'http' | 'sse'; transport: unknown }\n\n const connectWithTimeout = async (client: Client, transport: unknown, name: string): Promise<void> => {\n const connectPromise = client.connect(transport as any)\n if (timeoutMs > 0) {\n const timeoutPromise = new Promise<never>((_, reject) => {\n const timeoutId = setTimeout(() => {\n reject(new Error(`Connection to MCP server \"${name}\" timed out after ${timeoutMs}ms`))\n }, timeoutMs)\n connectPromise.then(\n () => clearTimeout(timeoutId),\n () => clearTimeout(timeoutId),\n )\n })\n await Promise.race([connectPromise, timeoutPromise])\n } else {\n await connectPromise\n }\n }\n\n for (const server of mcpServers) {\n const serverType = typeof (server as any)?.type === 'string' ? String((server as any).type) : 'stdio'\n\n const name = typeof (server as any)?.name === 'string' ? String((server as any).name) : ''\n if (!name) {\n results.push({ name: '<invalid>', type: 'failed' })\n continue\n }\n\n const candidates: Candidate[] = []\n\n\t if (serverType === 'http' || serverType === 'sse') {\n\t const url = typeof (server as any)?.url === 'string' ? String((server as any).url) : ''\n\t if (!url) {\n\t results.push({ name, type: 'failed' })\n\t continue\n\t }\n\t\n\t let parsedUrl: URL\n\t try {\n\t parsedUrl = new URL(url)\n\t } catch (e) {\n\t logError(e)\n\t results.push({ name, type: 'failed' })\n\t continue\n\t }\n\n\t const headerList = Array.isArray((server as any)?.headers) ? ((server as any).headers as unknown[]) : []\n\t const headers: Record<string, string> = {}\n\t for (const h of headerList) {\n\t if (!h || typeof h !== 'object') continue\n const k = typeof (h as any).name === 'string' ? String((h as any).name) : ''\n const val = typeof (h as any).value === 'string' ? String((h as any).value) : ''\n if (k) headers[k] = val\n }\n\n\t const requestInit = Object.keys(headers).length > 0 ? { requestInit: { headers } } : {}\n\n\t if (serverType === 'http') {\n\t candidates.push(\n\t { kind: 'http', transport: new StreamableHTTPClientTransport(parsedUrl, requestInit as any) },\n\t { kind: 'sse', transport: new SSEClientTransport(parsedUrl, requestInit as any) },\n\t )\n\t } else {\n\t candidates.push(\n\t { kind: 'sse', transport: new SSEClientTransport(parsedUrl, requestInit as any) },\n\t { kind: 'http', transport: new StreamableHTTPClientTransport(parsedUrl, requestInit as any) },\n\t )\n\t }\n\t } else {\n const command = typeof (server as any)?.command === 'string' ? String((server as any).command) : ''\n const args = Array.isArray((server as any)?.args) ? ((server as any).args as unknown[]).map(a => String(a)) : []\n const envList = Array.isArray((server as any)?.env) ? ((server as any).env as unknown[]) : []\n\n if (!command) {\n results.push({ name, type: 'failed' })\n continue\n }\n\n const envFromParams: Record<string, string> = {}\n for (const v of envList) {\n if (!v || typeof v !== 'object') continue\n const k = typeof (v as any).name === 'string' ? String((v as any).name) : ''\n const val = typeof (v as any).value === 'string' ? String((v as any).value) : ''\n if (k) envFromParams[k] = val\n }\n\n candidates.push({\n kind: 'stdio',\n transport: new StdioClientTransport({\n command,\n args,\n env: { ...process.env, ...envFromParams } as Record<string, string>,\n stderr: 'pipe',\n }),\n })\n }\n\n let lastError: unknown\n for (const candidate of candidates) {\n const client = new Client(\n { name: PRODUCT_COMMAND, version: MACRO.VERSION || '0.0.0' },\n { capabilities: {} },\n )\n\n try {\n await connectWithTimeout(client, candidate.transport, name)\n\n let capabilities: Record<string, unknown> | null = null\n try {\n capabilities = client.getServerCapabilities() as any\n } catch {\n capabilities = null\n }\n\n results.push({ name, client, capabilities, type: 'connected' as const })\n lastError = null\n break\n } catch (e) {\n lastError = e\n try {\n await client.close()\n } catch {}\n }\n }\n\n if (lastError) {\n logError(lastError)\n results.push({ name, type: 'failed' as const })\n }\n }\n\n return results\n}\n\nfunction mergeMcpClients(base: WrappedClient[], extra: WrappedClient[]): WrappedClient[] {\n const map = new Map<string, WrappedClient>()\n for (const c of base) map.set(c.name, c)\n for (const c of extra) map.set(c.name, c)\n return Array.from(map.values())\n}\n\nexport class KodeAcpAgent {\n private clientCapabilities: Protocol.ClientCapabilities = {}\n private sessions = new Map<string, SessionState>()\n\n constructor(private readonly peer: JsonRpcPeer) {\n this.registerMethods()\n }\n\n private registerMethods(): void {\n this.peer.registerMethod('initialize', this.handleInitialize.bind(this))\n this.peer.registerMethod('authenticate', this.handleAuthenticate.bind(this))\n this.peer.registerMethod('session/new', this.handleSessionNew.bind(this))\n this.peer.registerMethod('session/load', this.handleSessionLoad.bind(this))\n this.peer.registerMethod('session/prompt', this.handleSessionPrompt.bind(this))\n this.peer.registerMethod('session/set_mode', this.handleSessionSetMode.bind(this))\n this.peer.registerMethod('session/cancel', this.handleSessionCancel.bind(this))\n }\n\n private async handleInitialize(params: unknown): Promise<Protocol.InitializeResponse> {\n const p = (params ?? {}) as Partial<Protocol.InitializeParams>\n const protocolVersion = typeof p.protocolVersion === 'number' ? p.protocolVersion : Protocol.ACP_PROTOCOL_VERSION\n\n this.clientCapabilities =\n p.clientCapabilities && typeof p.clientCapabilities === 'object' ? (p.clientCapabilities as Protocol.ClientCapabilities) : {}\n\n return {\n protocolVersion: Protocol.ACP_PROTOCOL_VERSION,\n agentCapabilities: {\n loadSession: true,\n promptCapabilities: {\n image: false,\n audio: false,\n embeddedContext: true,\n embeddedContent: true,\n },\n mcpCapabilities: {\n http: true,\n sse: true,\n },\n },\n agentInfo: {\n name: 'kode',\n title: 'Kode',\n version: MACRO.VERSION || '0.0.0',\n },\n authMethods: [],\n }\n }\n\n private async handleAuthenticate(_params: unknown): Promise<Protocol.AuthenticateResponse> {\n return {}\n }\n\n private async handleSessionNew(params: unknown): Promise<Protocol.NewSessionResponse> {\n const p = (params ?? {}) as Partial<Protocol.NewSessionParams>\n const cwd = typeof p.cwd === 'string' ? p.cwd : ''\n if (!cwd) {\n throw new JsonRpcError(-32602, 'Missing required param: cwd')\n }\n if (!isAbsolute(cwd)) {\n throw new JsonRpcError(-32602, `cwd must be an absolute path: ${cwd}`)\n }\n\n setOriginalCwd(cwd)\n await setCwd(cwd)\n grantReadPermissionForOriginalDir()\n\n const mcpServers = Array.isArray(p.mcpServers) ? (p.mcpServers as Protocol.McpServer[]) : []\n\n const [commands, tools, ctx, systemPrompt, configuredMcpClients] = await Promise.all([\n getCommands(),\n getTools(),\n getContext(),\n getSystemPrompt({ disableSlashCommands: false }),\n getClients().catch(() => [] as WrappedClient[]),\n ])\n const acpMcpClients = await connectAcpMcpServers(mcpServers)\n const mcpClients = mergeMcpClients(configuredMcpClients, acpMcpClients)\n\n const toolPermissionContext = loadToolPermissionContextFromDisk({\n projectDir: cwd,\n includeKodeProjectConfig: true,\n isBypassPermissionsModeAvailable: true,\n })\n\n const sessionId = `sess_${nanoid()}`\n\n const session: SessionState = {\n sessionId,\n cwd,\n mcpServers,\n mcpClients,\n commands,\n tools,\n systemPrompt,\n context: ctx,\n messages: [],\n toolPermissionContext,\n readFileTimestamps: {},\n responseState: {},\n currentModeId: toolPermissionContext.mode ?? 'default',\n activeAbortController: null,\n toolCalls: new Map(),\n }\n\n this.sessions.set(sessionId, session)\n\n this.sendAvailableCommands(session)\n this.sendCurrentMode(session)\n persistAcpSessionToDisk(session)\n\n return {\n sessionId,\n modes: this.getModeState(session),\n }\n }\n\n private async handleSessionLoad(params: unknown): Promise<Protocol.LoadSessionResponse> {\n const p = (params ?? {}) as Partial<Protocol.LoadSessionParams>\n const sessionId = typeof p.sessionId === 'string' ? p.sessionId : ''\n const cwd = typeof p.cwd === 'string' ? p.cwd : ''\n if (!sessionId) throw new JsonRpcError(-32602, 'Missing required param: sessionId')\n if (!cwd) throw new JsonRpcError(-32602, 'Missing required param: cwd')\n if (!isAbsolute(cwd)) {\n throw new JsonRpcError(-32602, `cwd must be an absolute path: ${cwd}`)\n }\n\n setOriginalCwd(cwd)\n await setCwd(cwd)\n grantReadPermissionForOriginalDir()\n\n const persisted = loadAcpSessionFromDisk(cwd, sessionId)\n if (!persisted) {\n throw new JsonRpcError(-32602, `Session not found: ${sessionId}`)\n }\n\n const mcpServers = Array.isArray(p.mcpServers) ? (p.mcpServers as Protocol.McpServer[]) : []\n\n const [commands, tools, ctx, systemPrompt, configuredMcpClients] = await Promise.all([\n getCommands(),\n getTools(),\n getContext(),\n getSystemPrompt({ disableSlashCommands: false }),\n getClients().catch(() => [] as WrappedClient[]),\n ])\n\n const acpMcpClients = await connectAcpMcpServers(mcpServers)\n const mcpClients = mergeMcpClients(configuredMcpClients, acpMcpClients)\n\n const toolPermissionContext = loadToolPermissionContextFromDisk({\n projectDir: cwd,\n includeKodeProjectConfig: true,\n isBypassPermissionsModeAvailable: true,\n })\n\n const currentModeId =\n typeof persisted.currentModeId === 'string' && persisted.currentModeId\n ? persisted.currentModeId\n : toolPermissionContext.mode ?? 'default'\n toolPermissionContext.mode = currentModeId as any\n\n const session: SessionState = {\n sessionId,\n cwd,\n mcpServers,\n mcpClients,\n commands,\n tools,\n systemPrompt,\n context: ctx,\n messages: Array.isArray(persisted.messages) ? persisted.messages : [],\n toolPermissionContext,\n readFileTimestamps:\n persisted.readFileTimestamps && typeof persisted.readFileTimestamps === 'object'\n ? (persisted.readFileTimestamps as Record<string, number>)\n : {},\n responseState:\n persisted.responseState && typeof persisted.responseState === 'object'\n ? (persisted.responseState as ToolUseContext['responseState'])\n : {},\n currentModeId,\n activeAbortController: null,\n toolCalls: new Map(),\n }\n\n this.sessions.set(sessionId, session)\n this.sendAvailableCommands(session)\n this.sendCurrentMode(session)\n this.replayConversation(session)\n\n return { modes: this.getModeState(session) }\n }\n\n private async handleSessionSetMode(params: unknown): Promise<Protocol.SetSessionModeResponse> {\n const p = (params ?? {}) as Partial<Protocol.SetSessionModeParams>\n const sessionId = typeof p.sessionId === 'string' ? p.sessionId : ''\n const modeId = typeof p.modeId === 'string' ? p.modeId : ''\n\n const session = this.sessions.get(sessionId)\n if (!session) throw new JsonRpcError(-32602, `Session not found: ${sessionId}`)\n\n const allowed = new Set(this.getModeState(session).availableModes.map(m => m.id))\n if (!allowed.has(modeId)) {\n throw new JsonRpcError(-32602, `Unknown modeId: ${modeId}`)\n }\n\n session.currentModeId = modeId\n session.toolPermissionContext.mode = modeId as any\n this.sendCurrentMode(session)\n persistAcpSessionToDisk(session)\n\n return {}\n }\n\n private async handleSessionCancel(params: unknown): Promise<void> {\n const p = (params ?? {}) as Partial<Protocol.SessionCancelParams>\n const sessionId = typeof p.sessionId === 'string' ? p.sessionId : ''\n const session = this.sessions.get(sessionId)\n if (!session) return\n session.activeAbortController?.abort()\n }\n\n private async handleSessionPrompt(params: unknown): Promise<Protocol.PromptResponse> {\n const p = (params ?? {}) as any\n const sessionId = typeof p.sessionId === 'string' ? p.sessionId : ''\n const blocks: Protocol.ContentBlock[] = Array.isArray(p.prompt)\n ? (p.prompt as Protocol.ContentBlock[])\n : Array.isArray(p.content)\n ? (p.content as Protocol.ContentBlock[])\n : []\n\n const session = this.sessions.get(sessionId)\n if (!session) throw new JsonRpcError(-32602, `Session not found: ${sessionId}`)\n\n if (session.activeAbortController) {\n throw new JsonRpcError(-32000, `Session already has an active prompt: ${sessionId}`)\n }\n\n setOriginalCwd(session.cwd)\n await setCwd(session.cwd)\n grantReadPermissionForOriginalDir()\n\n const promptText = blocksToText(blocks)\n const userMsg = createUserMessage(promptText)\n\n const baseMessages: Message[] = [...session.messages, userMsg]\n session.messages.push(userMsg)\n\n if (process.env.KODE_ACP_ECHO === '1') {\n await this.handleKodeMessage(session, createAssistantMessage(promptText))\n persistAcpSessionToDisk(session)\n return { stopReason: 'end_turn' }\n }\n\n const abortController = new AbortController()\n session.activeAbortController = abortController\n\n const canUseTool = this.createAcpCanUseTool(session)\n\n const options = {\n commands: session.commands,\n tools: session.tools,\n verbose: false,\n safeMode: false,\n forkNumber: 0,\n messageLogName: session.sessionId,\n maxThinkingTokens: 0,\n persistSession: false,\n toolPermissionContext: session.toolPermissionContext,\n mcpClients: session.mcpClients,\n shouldAvoidPermissionPrompts: false,\n }\n\n let stopReason: Protocol.StopReason = 'end_turn'\n try {\n for await (const m of query(baseMessages, session.systemPrompt, session.context, canUseTool, {\n options,\n abortController,\n messageId: undefined,\n readFileTimestamps: session.readFileTimestamps,\n setToolJSX: () => {},\n agentId: 'main',\n responseState: session.responseState,\n })) {\n if (abortController.signal.aborted) {\n stopReason = 'cancelled'\n }\n await this.handleKodeMessage(session, m)\n }\n if (abortController.signal.aborted) stopReason = 'cancelled'\n } catch (err) {\n if (abortController.signal.aborted) {\n stopReason = 'cancelled'\n } else {\n logError(err)\n const msg = err instanceof Error ? err.message : String(err)\n this.sendAgentMessage(session.sessionId, msg)\n stopReason = 'end_turn'\n }\n } finally {\n session.activeAbortController = null\n persistAcpSessionToDisk(session)\n }\n\n return { stopReason }\n }\n\n private async handleKodeMessage(session: SessionState, m: Message): Promise<void> {\n if (!m || typeof m !== 'object') return\n\n if (m.type === 'assistant') {\n session.messages.push(m)\n\n const blocks: any[] = Array.isArray((m as any).message?.content) ? ((m as any).message.content as any[]) : []\n for (const b of blocks) {\n if (!b || typeof b !== 'object') continue\n if (b.type === 'text' && typeof b.text === 'string') {\n this.sendAgentMessage(session.sessionId, b.text)\n } else if (b.type === 'thinking' && typeof (b as any).thinking === 'string') {\n this.sendAgentThought(session.sessionId, (b as any).thinking)\n } else if (b.type === 'tool_use') {\n const toolUseId = typeof b.id === 'string' ? b.id : ''\n const toolName = typeof b.name === 'string' ? b.name : ''\n const input = b.input && typeof b.input === 'object' && !Array.isArray(b.input) ? (b.input as Record<string, unknown>) : {}\n if (!toolUseId || !toolName) continue\n const kind = toolKindForName(toolName)\n const title = titleForToolCall(toolName, input)\n session.toolCalls.set(toolUseId, {\n title,\n kind,\n status: 'pending',\n rawInput: asJsonObject(input),\n })\n this.peer.sendNotification('session/update', {\n sessionId: session.sessionId,\n update: {\n sessionUpdate: 'tool_call',\n toolCallId: toolUseId,\n title,\n kind,\n status: 'pending',\n rawInput: asJsonObject(input),\n } satisfies Protocol.ToolCall,\n } satisfies Protocol.SessionUpdateNotification)\n }\n }\n return\n }\n\n if (m.type === 'progress') {\n const toolCallId = m.toolUseID\n const existing = session.toolCalls.get(toolCallId)\n const title = existing?.title ?? 'Tool'\n const kind = existing?.kind ?? 'other'\n\n if (!existing || existing.status === 'pending') {\n session.toolCalls.set(toolCallId, {\n title,\n kind,\n status: 'in_progress',\n rawInput: existing?.rawInput,\n })\n this.sendToolCallUpdate(session.sessionId, {\n toolCallId,\n status: 'in_progress',\n })\n }\n\n const text = extractAssistantText(m.content)\n if (text) {\n this.sendToolCallUpdate(session.sessionId, {\n toolCallId,\n content: [\n {\n type: 'content',\n content: { type: 'text', text },\n },\n ],\n })\n }\n return\n }\n\n if (m.type === 'user') {\n const toolResults = extractToolResults(m)\n if (toolResults.length === 0) {\n session.messages.push(m)\n return\n }\n\n for (const tr of toolResults) {\n const existing = session.toolCalls.get(tr.toolUseId)\n const title = existing?.title ?? 'Tool'\n const kind = existing?.kind ?? 'other'\n\n if (!existing || existing.status === 'pending') {\n session.toolCalls.set(tr.toolUseId, {\n title,\n kind,\n status: 'in_progress',\n rawInput: existing?.rawInput,\n })\n this.sendToolCallUpdate(session.sessionId, {\n toolCallId: tr.toolUseId,\n status: 'in_progress',\n })\n }\n\n const status: Protocol.ToolCallStatus = tr.isError ? 'failed' : 'completed'\n session.toolCalls.set(tr.toolUseId, {\n title,\n kind,\n status,\n rawInput: existing?.rawInput,\n })\n\n const rawOutput = asJsonObject((m as any).toolUseResult?.data)\n\n const content: Protocol.ToolCallContent[] = []\n const diffContent = status === 'completed' ? this.buildDiffContentForToolResult(session, tr.toolUseId, rawOutput) : null\n if (diffContent) content.push(diffContent)\n if (tr.content) {\n content.push({ type: 'content', content: { type: 'text', text: tr.content } })\n }\n\n this.sendToolCallUpdate(session.sessionId, {\n toolCallId: tr.toolUseId,\n status,\n ...(content.length > 0 ? { content } : {}),\n ...(rawOutput ? { rawOutput } : {}),\n })\n }\n\n session.messages.push(m)\n return\n }\n }\n\n private createAcpCanUseTool(session: SessionState): CanUseToolFn {\n const timeoutMs = (() => {\n const raw = process.env.KODE_ACP_PERMISSION_TIMEOUT_MS\n const parsed = raw ? Number(raw) : NaN\n return Number.isFinite(parsed) && parsed > 0 ? parsed : 30_000\n })()\n\n return async (tool, input, toolUseContext, assistantMessage) => {\n const toolUseId =\n typeof toolUseContext?.toolUseId === 'string' && toolUseContext.toolUseId\n ? toolUseContext.toolUseId\n : `call_${nanoid()}`\n\n const base = await hasPermissionsToUseTool(tool, input, toolUseContext, assistantMessage)\n if (base.result === true) {\n this.captureFileSnapshotForTool(session, toolUseId, tool.name, input)\n return base\n }\n\n const denied = base as Extract<typeof base, { result: false }>\n if (denied.shouldPromptUser === false) {\n return { result: false as const, message: denied.message }\n }\n\n const title = titleForToolCall(tool.name, input as any)\n const kind = toolKindForName(tool.name)\n\n if (!session.toolCalls.has(toolUseId)) {\n session.toolCalls.set(toolUseId, { title, kind, status: 'pending', rawInput: asJsonObject(input) })\n this.peer.sendNotification('session/update', {\n sessionId: session.sessionId,\n update: {\n sessionUpdate: 'tool_call',\n toolCallId: toolUseId,\n title,\n kind,\n status: 'pending',\n rawInput: asJsonObject(input),\n } satisfies Protocol.ToolCall,\n } satisfies Protocol.SessionUpdateNotification)\n }\n\n const options: Protocol.PermissionOption[] = [\n { optionId: 'allow_once', name: 'Allow once', kind: 'allow_once' },\n { optionId: 'reject_once', name: 'Reject', kind: 'reject_once' },\n ]\n if (Array.isArray((denied as any).suggestions) && (denied as any).suggestions.length > 0) {\n options.splice(1, 0, {\n optionId: 'allow_always',\n name: 'Allow always (remember)',\n kind: 'allow_always',\n })\n }\n\n try {\n const response = await this.peer.sendRequest<Protocol.RequestPermissionResponse>({\n method: 'session/request_permission',\n params: {\n sessionId: session.sessionId,\n toolCall: {\n toolCallId: toolUseId,\n title,\n kind,\n status: 'pending',\n content: [\n {\n type: 'content',\n content: { type: 'text', text: denied.message },\n },\n ],\n rawInput: asJsonObject(input),\n },\n options,\n } satisfies Protocol.RequestPermissionParams,\n signal: toolUseContext.abortController.signal,\n timeoutMs,\n })\n\n const outcome = response?.outcome\n if (!outcome || outcome.outcome === 'cancelled') {\n toolUseContext.abortController.abort()\n return { result: false as const, message: denied.message, shouldPromptUser: false }\n }\n\n if (outcome.outcome === 'selected' && outcome.optionId === 'allow_once') {\n this.captureFileSnapshotForTool(session, toolUseId, tool.name, input)\n return { result: true as const }\n }\n\n if (outcome.outcome === 'selected' && outcome.optionId === 'allow_always') {\n const suggestions = Array.isArray((denied as any).suggestions) ? ((denied as any).suggestions as any[]) : []\n if (suggestions.length > 0) {\n const next = applyToolPermissionContextUpdates(session.toolPermissionContext, suggestions as any)\n session.toolPermissionContext = next\n if (toolUseContext?.options) toolUseContext.options.toolPermissionContext = next\n for (const update of suggestions) {\n try {\n persistToolPermissionUpdateToDisk({ update, projectDir: session.cwd })\n } catch (e) {\n logError(e)\n }\n }\n }\n this.captureFileSnapshotForTool(session, toolUseId, tool.name, input)\n return { result: true as const }\n }\n\n return { result: false as const, message: denied.message }\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e)\n return { result: false as const, message: `Permission prompt failed: ${msg}`, shouldPromptUser: false }\n }\n }\n }\n\n private captureFileSnapshotForTool(\n session: SessionState,\n toolUseId: string,\n toolName: string,\n input: unknown,\n ): void {\n if (toolName !== 'Write' && toolName !== 'MultiEdit') return\n\n const filePath = input && typeof input === 'object' ? String((input as any).file_path ?? '') : ''\n if (!filePath) return\n\n const absPath = isAbsolute(filePath) ? filePath : resolve(session.cwd, filePath)\n\n const oldContent = existsSync(absPath) ? readTextFileForDiff(absPath) : ''\n if (oldContent === null) return\n\n const existing = session.toolCalls.get(toolUseId)\n if (existing) {\n existing.fileSnapshot = { path: absPath, content: oldContent }\n session.toolCalls.set(toolUseId, existing)\n return\n }\n\n session.toolCalls.set(toolUseId, {\n title: toolName,\n kind: toolKindForName(toolName),\n status: 'pending',\n rawInput: asJsonObject(input),\n fileSnapshot: { path: absPath, content: oldContent },\n })\n }\n\n private buildDiffContentForToolResult(\n session: SessionState,\n toolUseId: string,\n rawOutput: Protocol.JsonObject | undefined,\n ): Protocol.ToolCallContent | null {\n const existing = session.toolCalls.get(toolUseId)\n if (!existing || existing.kind !== 'edit') return null\n\n const inputFilePath =\n typeof existing.rawInput?.file_path === 'string'\n ? existing.rawInput.file_path\n : rawOutput && typeof (rawOutput as any).filePath === 'string'\n ? String((rawOutput as any).filePath)\n : ''\n\n if (!inputFilePath) return null\n\n const absPath = isAbsolute(inputFilePath) ? inputFilePath : resolve(session.cwd, inputFilePath)\n\n const oldText =\n rawOutput && typeof (rawOutput as any).originalFile === 'string'\n ? String((rawOutput as any).originalFile)\n : existing.fileSnapshot && existing.fileSnapshot.path === absPath\n ? existing.fileSnapshot.content\n : undefined\n\n if (oldText === undefined) return null\n\n const newTextFromDisk = readTextFileForDiff(absPath)\n const newTextFromOutput = rawOutput && typeof (rawOutput as any).content === 'string' ? String((rawOutput as any).content) : null\n const newText = newTextFromDisk ?? newTextFromOutput\n if (newText === null) return null\n\n return {\n type: 'diff',\n path: absPath,\n oldText: truncateDiffText(oldText),\n newText: truncateDiffText(newText),\n }\n }\n\n private replayConversation(session: SessionState): void {\n session.toolCalls.clear()\n\n for (const m of session.messages) {\n if (!m || typeof m !== 'object') continue\n\n if (m.type === 'assistant') {\n const blocks: any[] = Array.isArray((m as any).message?.content) ? ((m as any).message.content as any[]) : []\n for (const b of blocks) {\n if (!b || typeof b !== 'object') continue\n if (b.type === 'text' && typeof b.text === 'string') {\n this.sendAgentMessage(session.sessionId, b.text)\n } else if (b.type === 'thinking' && typeof (b as any).thinking === 'string') {\n this.sendAgentThought(session.sessionId, (b as any).thinking)\n } else if (b.type === 'tool_use') {\n const toolUseId = typeof b.id === 'string' ? b.id : ''\n const toolName = typeof b.name === 'string' ? b.name : ''\n const input = b.input && typeof b.input === 'object' && !Array.isArray(b.input) ? (b.input as Record<string, unknown>) : {}\n if (!toolUseId || !toolName) continue\n\n if (!session.toolCalls.has(toolUseId)) {\n const kind = toolKindForName(toolName)\n const title = titleForToolCall(toolName, input)\n session.toolCalls.set(toolUseId, {\n title,\n kind,\n status: 'pending',\n rawInput: asJsonObject(input),\n })\n this.peer.sendNotification('session/update', {\n sessionId: session.sessionId,\n update: {\n sessionUpdate: 'tool_call',\n toolCallId: toolUseId,\n title,\n kind,\n status: 'pending',\n rawInput: asJsonObject(input),\n } satisfies Protocol.ToolCall,\n } satisfies Protocol.SessionUpdateNotification)\n }\n }\n }\n continue\n }\n\n if (m.type === 'user') {\n const content = (m as any)?.message?.content\n if (typeof content === 'string' && content.trim()) {\n this.sendUserMessage(session.sessionId, content)\n }\n\n const toolResults = extractToolResults(m)\n if (toolResults.length === 0) continue\n\n for (const tr of toolResults) {\n const existing = session.toolCalls.get(tr.toolUseId)\n const title = existing?.title ?? 'Tool'\n const kind = existing?.kind ?? 'other'\n\n if (!existing) {\n session.toolCalls.set(tr.toolUseId, { title, kind, status: 'pending' })\n this.peer.sendNotification('session/update', {\n sessionId: session.sessionId,\n update: {\n sessionUpdate: 'tool_call',\n toolCallId: tr.toolUseId,\n title,\n kind,\n status: 'pending',\n } satisfies Protocol.ToolCall,\n } satisfies Protocol.SessionUpdateNotification)\n }\n\n const status: Protocol.ToolCallStatus = tr.isError ? 'failed' : 'completed'\n const contentBlocks: Protocol.ToolCallContent[] = []\n if (tr.content) {\n contentBlocks.push({ type: 'content', content: { type: 'text', text: tr.content } })\n }\n\n const rawOutput = asJsonObject((m as any).toolUseResult?.data)\n\n this.sendToolCallUpdate(session.sessionId, {\n toolCallId: tr.toolUseId,\n status,\n ...(contentBlocks.length > 0 ? { content: contentBlocks } : {}),\n ...(rawOutput ? { rawOutput } : {}),\n })\n\n session.toolCalls.set(tr.toolUseId, {\n title,\n kind,\n status,\n rawInput: existing?.rawInput,\n })\n }\n }\n }\n }\n\n private getModeState(session: SessionState): Protocol.SessionModeState {\n const availableModes: Protocol.SessionMode[] = [\n { id: 'default', name: 'Default', description: 'Normal permissions (prompt when needed)' },\n { id: 'acceptEdits', name: 'Accept Edits', description: 'Auto-approve safe file edits' },\n { id: 'plan', name: 'Plan', description: 'Read-only planning mode' },\n { id: 'dontAsk', name: \"Don't Ask\", description: 'Auto-deny permission prompts' },\n { id: 'bypassPermissions', name: 'Bypass', description: 'Bypass permission prompts (dangerous)' },\n ]\n\n const currentModeId = availableModes.some(m => m.id === session.currentModeId) ? session.currentModeId : 'default'\n return { currentModeId, availableModes }\n }\n\n private sendAvailableCommands(session: SessionState): void {\n const availableCommands: Protocol.AvailableCommand[] = session.commands\n .filter(c => !c.isHidden)\n .map(c => ({\n name: c.userFacingName(),\n description: c.description,\n ...(c.argumentHint ? { input: { hint: c.argumentHint } } : {}),\n }))\n\n this.peer.sendNotification('session/update', {\n sessionId: session.sessionId,\n update: {\n sessionUpdate: 'available_commands_update',\n availableCommands,\n } satisfies Protocol.AvailableCommandsUpdate,\n } satisfies Protocol.SessionUpdateNotification)\n }\n\n private sendCurrentMode(session: SessionState): void {\n this.peer.sendNotification('session/update', {\n sessionId: session.sessionId,\n update: {\n sessionUpdate: 'current_mode_update',\n currentModeId: session.currentModeId,\n } satisfies Protocol.CurrentModeUpdate,\n } satisfies Protocol.SessionUpdateNotification)\n }\n\n private sendUserMessage(sessionId: string, text: string): void {\n if (!text) return\n this.peer.sendNotification('session/update', {\n sessionId,\n update: {\n sessionUpdate: 'user_message_chunk',\n content: { type: 'text', text },\n } satisfies Protocol.UserMessageChunk,\n } satisfies Protocol.SessionUpdateNotification)\n }\n\n private sendAgentMessage(sessionId: string, text: string): void {\n if (!text) return\n this.peer.sendNotification('session/update', {\n sessionId,\n update: {\n sessionUpdate: 'agent_message_chunk',\n content: { type: 'text', text },\n } satisfies Protocol.AgentMessageChunk,\n } satisfies Protocol.SessionUpdateNotification)\n }\n\n private sendAgentThought(sessionId: string, text: string): void {\n if (!text) return\n this.peer.sendNotification('session/update', {\n sessionId,\n update: {\n sessionUpdate: 'agent_thought_chunk',\n content: { type: 'text', text },\n } satisfies Protocol.AgentThoughtChunk,\n } satisfies Protocol.SessionUpdateNotification)\n }\n\n private sendToolCallUpdate(sessionId: string, update: Omit<Protocol.ToolCallUpdate, 'sessionUpdate'>): void {\n this.peer.sendNotification('session/update', {\n sessionId,\n update: {\n sessionUpdate: 'tool_call_update',\n ...update,\n } satisfies Protocol.ToolCallUpdate,\n } satisfies Protocol.SessionUpdateNotification)\n }\n}\n", "export const ACP_PROTOCOL_VERSION = 1\n\nexport type JsonObject = Record<string, unknown>\n\nexport type Implementation = {\n name: string\n title?: string | null\n version: string\n _meta?: JsonObject | null\n}\n\nexport type FileSystemCapability = {\n readTextFile?: boolean\n writeTextFile?: boolean\n _meta?: JsonObject | null\n}\n\nexport type ClientCapabilities = {\n fs?: FileSystemCapability\n terminal?: boolean\n _meta?: JsonObject | null\n}\n\nexport type PromptCapabilities = {\n audio?: boolean\n image?: boolean\n embeddedContext?: boolean\n embeddedContent?: boolean\n _meta?: JsonObject | null\n}\n\nexport type McpCapabilities = {\n http?: boolean\n sse?: boolean\n _meta?: JsonObject | null\n}\n\nexport type AgentCapabilities = {\n loadSession?: boolean\n promptCapabilities?: PromptCapabilities\n mcpCapabilities?: McpCapabilities\n sessionCapabilities?: JsonObject\n _meta?: JsonObject | null\n}\n\nexport type AuthMethod = {\n id: string\n name: string\n description?: string | null\n _meta?: JsonObject | null\n}\n\nexport type InitializeParams = {\n protocolVersion: number\n clientCapabilities?: ClientCapabilities\n clientInfo?: Implementation | null\n _meta?: JsonObject | null\n}\n\nexport type InitializeResponse = {\n protocolVersion: number\n agentCapabilities: AgentCapabilities\n agentInfo?: Implementation | null\n authMethods?: AuthMethod[]\n _meta?: JsonObject | null\n}\n\nexport type AuthenticateParams = {\n methodId: string\n _meta?: JsonObject | null\n}\n\nexport type AuthenticateResponse = JsonObject\n\nexport type EnvVariable = {\n name: string\n value: string\n _meta?: JsonObject | null\n}\n\nexport type HttpHeader = {\n name: string\n value: string\n _meta?: JsonObject | null\n}\n\nexport type McpServerStdio = {\n type?: 'stdio'\n name: string\n command: string\n args: string[]\n env: EnvVariable[]\n _meta?: JsonObject | null\n}\n\nexport type McpServerHttp = {\n type: 'http'\n name: string\n url: string\n headers: HttpHeader[]\n _meta?: JsonObject | null\n}\n\nexport type McpServerSse = {\n type: 'sse'\n name: string\n url: string\n headers: HttpHeader[]\n _meta?: JsonObject | null\n}\n\nexport type McpServer = McpServerStdio | McpServerHttp | McpServerSse\n\nexport type SessionModeId = string\n\nexport type SessionMode = {\n id: SessionModeId\n name: string\n description?: string | null\n _meta?: JsonObject | null\n}\n\nexport type SessionModeState = {\n currentModeId: SessionModeId\n availableModes: SessionMode[]\n _meta?: JsonObject | null\n}\n\nexport type NewSessionParams = {\n cwd: string\n mcpServers: McpServer[]\n _meta?: JsonObject | null\n}\n\nexport type NewSessionResponse = {\n sessionId: string\n modes?: SessionModeState | null\n _meta?: JsonObject | null\n}\n\nexport type LoadSessionParams = {\n sessionId: string\n cwd: string\n mcpServers: McpServer[]\n _meta?: JsonObject | null\n}\n\nexport type LoadSessionResponse = {\n modes?: SessionModeState | null\n _meta?: JsonObject | null\n}\n\nexport type StopReason =\n | 'end_turn'\n | 'max_tokens'\n | 'max_turn_requests'\n | 'refusal'\n | 'cancelled'\n\nexport type PromptResponse = {\n stopReason: StopReason\n _meta?: JsonObject | null\n}\n\nexport type SessionCancelParams = {\n sessionId: string\n _meta?: JsonObject | null\n}\n\nexport type SetSessionModeParams = {\n sessionId: string\n modeId: SessionModeId\n _meta?: JsonObject | null\n}\n\nexport type SetSessionModeResponse = JsonObject\n\nexport type TextContent = {\n type: 'text'\n text: string\n annotations?: JsonObject | null\n _meta?: JsonObject | null\n}\n\nexport type ImageContent = {\n type: 'image'\n data?: string\n mimeType?: string\n url?: string\n annotations?: JsonObject | null\n _meta?: JsonObject | null\n}\n\nexport type AudioContent = {\n type: 'audio'\n data: string\n mimeType: string\n annotations?: JsonObject | null\n _meta?: JsonObject | null\n}\n\nexport type EmbeddedResource = {\n uri: string\n mimeType?: string | null\n text?: string\n blob?: string\n _meta?: JsonObject | null\n}\n\nexport type EmbeddedResourceContent = {\n type: 'resource'\n resource: EmbeddedResource\n annotations?: JsonObject | null\n _meta?: JsonObject | null\n}\n\nexport type ResourceLinkContent = {\n type: 'resource_link'\n uri: string\n name: string\n title?: string | null\n description?: string | null\n mimeType?: string | null\n size?: number | null\n annotations?: JsonObject | null\n _meta?: JsonObject | null\n}\n\nexport type ContentBlock =\n | TextContent\n | ImageContent\n | AudioContent\n | EmbeddedResourceContent\n | ResourceLinkContent\n\nexport type PromptParams = {\n sessionId: string\n prompt: ContentBlock[]\n _meta?: JsonObject | null\n}\n\nexport type SessionUpdateKind =\n | 'user_message_chunk'\n | 'agent_message_chunk'\n | 'agent_thought_chunk'\n | 'tool_call'\n | 'tool_call_update'\n | 'plan'\n | 'available_commands_update'\n | 'current_mode_update'\n\nexport type PlanEntryPriority = 'high' | 'medium' | 'low'\n\nexport type PlanEntryStatus = 'pending' | 'in_progress' | 'completed'\n\nexport type PlanEntry = {\n content: string\n priority: PlanEntryPriority\n status: PlanEntryStatus\n _meta?: JsonObject | null\n}\n\nexport type PlanUpdate = {\n sessionUpdate: 'plan'\n entries: PlanEntry[]\n _meta?: JsonObject | null\n}\n\nexport type ToolKind =\n | 'read'\n | 'edit'\n | 'delete'\n | 'move'\n | 'search'\n | 'execute'\n | 'think'\n | 'fetch'\n | 'switch_mode'\n | 'other'\n\nexport type ToolCallStatus = 'pending' | 'in_progress' | 'completed' | 'failed'\n\nexport type ToolCallLocation = {\n path: string\n line?: number | null\n _meta?: JsonObject | null\n}\n\nexport type ToolCallContent =\n | { type: 'content'; content: ContentBlock; _meta?: JsonObject | null }\n | {\n type: 'diff'\n path: string\n newText: string\n oldText?: string | null\n _meta?: JsonObject | null\n }\n | { type: 'terminal'; terminalId: string; _meta?: JsonObject | null }\n\nexport type ToolCall = {\n sessionUpdate: 'tool_call'\n toolCallId: string\n title: string\n kind?: ToolKind\n status?: ToolCallStatus\n content?: ToolCallContent[]\n locations?: ToolCallLocation[]\n rawInput?: JsonObject\n rawOutput?: JsonObject\n _meta?: JsonObject | null\n}\n\nexport type ToolCallUpdate = {\n sessionUpdate: 'tool_call_update'\n toolCallId: string\n title?: string | null\n kind?: ToolKind | null\n status?: ToolCallStatus | null\n content?: ToolCallContent[] | null\n locations?: ToolCallLocation[] | null\n rawInput?: JsonObject\n rawOutput?: JsonObject\n _meta?: JsonObject | null\n}\n\nexport type ToolCallUpdatePermissionRequest = Omit<ToolCallUpdate, 'sessionUpdate'>\n\nexport type PermissionOptionKind =\n | 'allow_once'\n | 'allow_always'\n | 'reject_once'\n | 'reject_always'\n\nexport type PermissionOption = {\n optionId: string\n name: string\n kind: PermissionOptionKind\n _meta?: JsonObject | null\n}\n\nexport type OutcomeCancelled = { outcome: 'cancelled'; _meta?: JsonObject | null }\nexport type OutcomeSelected = {\n outcome: 'selected'\n optionId: string\n _meta?: JsonObject | null\n}\nexport type RequestPermissionOutcome = OutcomeCancelled | OutcomeSelected\n\nexport type RequestPermissionParams = {\n sessionId: string\n toolCall: ToolCallUpdatePermissionRequest\n options: PermissionOption[]\n _meta?: JsonObject | null\n}\n\nexport type RequestPermissionResponse = {\n outcome: RequestPermissionOutcome\n _meta?: JsonObject | null\n}\n\nexport type AvailableCommandInput = { hint: string; _meta?: JsonObject | null }\nexport type AvailableCommand = {\n name: string\n description: string\n input?: AvailableCommandInput | null\n _meta?: JsonObject | null\n}\n\nexport type AvailableCommandsUpdate = {\n sessionUpdate: 'available_commands_update'\n availableCommands: AvailableCommand[]\n _meta?: JsonObject | null\n}\n\nexport type CurrentModeUpdate = {\n sessionUpdate: 'current_mode_update'\n currentModeId: SessionModeId\n _meta?: JsonObject | null\n}\n\nexport type UserMessageChunk = {\n sessionUpdate: 'user_message_chunk'\n content: ContentBlock\n _meta?: JsonObject | null\n}\n\nexport type AgentMessageChunk = {\n sessionUpdate: 'agent_message_chunk'\n content: ContentBlock\n _meta?: JsonObject | null\n}\n\nexport type AgentThoughtChunk = {\n sessionUpdate: 'agent_thought_chunk'\n content: ContentBlock\n _meta?: JsonObject | null\n}\n\nexport type SessionUpdate =\n | UserMessageChunk\n | AgentMessageChunk\n | AgentThoughtChunk\n | ToolCall\n | ToolCallUpdate\n | PlanUpdate\n | AvailableCommandsUpdate\n | CurrentModeUpdate\n\nexport type SessionUpdateNotification = {\n sessionId: string\n update: SessionUpdate\n _meta?: JsonObject | null\n}\n", "#!/usr/bin/env bun\nimport '@utils/config/sanitizeAnthropicEnv'\nimport { initSentry } from '@services/sentry'\nimport { ensurePackagedRuntimeEnv } from './cli/bootstrapEnv'\nimport { initDebugLogger } from '@utils/log/debugLogger'\nimport { enableConfigs } from '@utils/config'\nimport { logError } from '@utils/log'\n\nimport { JsonRpcPeer } from '../acp/jsonrpc'\nimport { StdioTransport } from '../acp/stdioTransport'\nimport { installStdoutGuard } from '../acp/stdoutGuard'\nimport { KodeAcpAgent } from '../acp/kodeAcpAgent'\n\ninitSentry()\nensurePackagedRuntimeEnv()\n\nconst { writeAcpLine } = installStdoutGuard()\n\ninitDebugLogger()\ntry {\n enableConfigs()\n} catch (e) {\n logError(e)\n}\n\nconst peer = new JsonRpcPeer()\nnew KodeAcpAgent(peer)\n\nconst transport = new StdioTransport(peer, { writeLine: writeAcpLine })\ntransport.start()\n\n"],
5
+ "mappings": "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",
6
+ "names": ["resolve", "peer", "format", "writeAcpLine", "transport", "peer"]
7
+ }
@@ -0,0 +1,373 @@
1
+ import { createRequire as __kodeCreateRequire } from "node:module";
2
+ const require = __kodeCreateRequire(import.meta.url);
3
+ import {
4
+ getModelManager
5
+ } from "./chunk-IZVMU4S2.js";
6
+ import "./chunk-LC4TVOCZ.js";
7
+ import "./chunk-UYXEDKOZ.js";
8
+ import "./chunk-STSX7GIX.js";
9
+ import "./chunk-YXYYDIMI.js";
10
+ import "./chunk-F2SJXUDI.js";
11
+ import "./chunk-JC6NCUG5.js";
12
+
13
+ // src/entrypoints/cli/agentsValidate.ts
14
+ import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
15
+ import { homedir } from "node:os";
16
+ import { basename, dirname, join, resolve } from "node:path";
17
+ import matter from "gray-matter";
18
+ import yaml from "js-yaml";
19
+ var VALID_PERMISSION_MODES = /* @__PURE__ */ new Set([
20
+ "default",
21
+ "acceptEdits",
22
+ "plan",
23
+ "bypassPermissions",
24
+ "dontAsk",
25
+ "delegate"
26
+ ]);
27
+ var SUBAGENT_HARD_BLOCKED_TOOLS = /* @__PURE__ */ new Set([
28
+ "Task",
29
+ "TaskOutput",
30
+ "KillShell",
31
+ "EnterPlanMode",
32
+ "ExitPlanMode",
33
+ "AskUserQuestion"
34
+ ]);
35
+ function normalizeString(value) {
36
+ if (typeof value !== "string") return null;
37
+ const trimmed = value.trim();
38
+ return trimmed ? trimmed : null;
39
+ }
40
+ function getClaudePolicyBaseDir() {
41
+ switch (process.platform) {
42
+ case "darwin":
43
+ return "/Library/Application Support/ClaudeCode";
44
+ case "win32":
45
+ return existsSync("C:\\Program Files\\ClaudeCode") ? "C:\\Program Files\\ClaudeCode" : "C:\\ProgramData\\ClaudeCode";
46
+ default:
47
+ return "/etc/claude-code";
48
+ }
49
+ }
50
+ function normalizeOverride(value) {
51
+ const normalized = normalizeString(value);
52
+ return normalized ? resolve(normalized) : null;
53
+ }
54
+ function getUserConfigRoots() {
55
+ const claudeOverride = normalizeOverride(process.env.CLAUDE_CONFIG_DIR);
56
+ const kodeOverride = normalizeOverride(process.env.KODE_CONFIG_DIR);
57
+ const hasAnyOverride = Boolean(claudeOverride || kodeOverride);
58
+ if (hasAnyOverride) {
59
+ return Array.from(new Set([claudeOverride, kodeOverride].filter(Boolean)));
60
+ }
61
+ return [join(homedir(), ".claude"), join(homedir(), ".kode")];
62
+ }
63
+ function findProjectAgentDirs(cwd) {
64
+ const result = [];
65
+ const home = resolve(homedir());
66
+ let current = resolve(cwd);
67
+ while (current !== home) {
68
+ const claudeDir = join(current, ".claude", "agents");
69
+ if (existsSync(claudeDir)) result.push(claudeDir);
70
+ const kodeDir = join(current, ".kode", "agents");
71
+ if (existsSync(kodeDir)) result.push(kodeDir);
72
+ const parent = dirname(current);
73
+ if (parent === current) break;
74
+ current = parent;
75
+ }
76
+ return result;
77
+ }
78
+ function listMarkdownFilesRecursively(rootDir) {
79
+ const files = [];
80
+ const visitedDirs = /* @__PURE__ */ new Set();
81
+ const walk = (dirPath) => {
82
+ let dirStat;
83
+ try {
84
+ dirStat = statSync(dirPath);
85
+ } catch {
86
+ return;
87
+ }
88
+ if (!dirStat.isDirectory()) return;
89
+ const dirKey = `${dirStat.dev}:${dirStat.ino}`;
90
+ if (visitedDirs.has(dirKey)) return;
91
+ visitedDirs.add(dirKey);
92
+ let entries;
93
+ try {
94
+ entries = readdirSync(dirPath, { withFileTypes: true });
95
+ } catch {
96
+ return;
97
+ }
98
+ for (const entry of entries) {
99
+ const name = String(entry.name ?? "");
100
+ const fullPath = join(dirPath, name);
101
+ if (entry.isDirectory()) {
102
+ walk(fullPath);
103
+ continue;
104
+ }
105
+ if (entry.isFile()) {
106
+ if (name.toLowerCase().endsWith(".md")) files.push(fullPath);
107
+ continue;
108
+ }
109
+ if (entry.isSymbolicLink()) {
110
+ try {
111
+ const st = statSync(fullPath);
112
+ if (st.isDirectory()) {
113
+ walk(fullPath);
114
+ } else if (st.isFile() && name.toLowerCase().endsWith(".md")) {
115
+ files.push(fullPath);
116
+ }
117
+ } catch {
118
+ continue;
119
+ }
120
+ }
121
+ }
122
+ };
123
+ if (!existsSync(rootDir)) return [];
124
+ walk(rootDir);
125
+ return files;
126
+ }
127
+ function readMarkdownFile(filePath) {
128
+ try {
129
+ const raw = readFileSync(filePath, "utf8");
130
+ const yamlSchema = yaml.JSON_SCHEMA;
131
+ const parsed = matter(raw, {
132
+ engines: {
133
+ yaml: {
134
+ parse: (input) => yaml.load(input, yamlSchema ? { schema: yamlSchema } : void 0) ?? {}
135
+ }
136
+ }
137
+ });
138
+ return { frontmatter: parsed.data ?? {}, content: String(parsed.content ?? "") };
139
+ } catch (err) {
140
+ return { error: err instanceof Error ? err.message : String(err) };
141
+ }
142
+ }
143
+ function splitCliList(values) {
144
+ if (values.length === 0) return [];
145
+ const out = [];
146
+ for (const value of values) {
147
+ if (!value) continue;
148
+ let current = "";
149
+ let inParens = false;
150
+ for (const ch of value) {
151
+ switch (ch) {
152
+ case "(":
153
+ inParens = true;
154
+ current += ch;
155
+ break;
156
+ case ")":
157
+ inParens = false;
158
+ current += ch;
159
+ break;
160
+ case ",":
161
+ case " ": {
162
+ if (inParens) {
163
+ current += ch;
164
+ break;
165
+ }
166
+ const trimmed2 = current.trim();
167
+ if (trimmed2) out.push(trimmed2);
168
+ current = "";
169
+ break;
170
+ }
171
+ default:
172
+ current += ch;
173
+ }
174
+ }
175
+ const trimmed = current.trim();
176
+ if (trimmed) out.push(trimmed);
177
+ }
178
+ return out;
179
+ }
180
+ function normalizeToolList(value) {
181
+ if (value === void 0 || value === null) return null;
182
+ if (!value) return [];
183
+ let raw = [];
184
+ if (typeof value === "string") raw = [value];
185
+ else if (Array.isArray(value))
186
+ raw = value.filter((v) => typeof v === "string");
187
+ if (raw.length === 0) return [];
188
+ const parsed = splitCliList(raw);
189
+ if (parsed.includes("*")) return ["*"];
190
+ return parsed;
191
+ }
192
+ function z2A(value) {
193
+ const normalized = normalizeToolList(value);
194
+ if (normalized === null) return value === void 0 ? void 0 : [];
195
+ if (normalized.includes("*")) return void 0;
196
+ return normalized;
197
+ }
198
+ function toolNameFromSpec(spec) {
199
+ const trimmed = spec.trim();
200
+ if (!trimmed) return trimmed;
201
+ const match = trimmed.match(/^([^(]+)\(([^)]+)\)$/);
202
+ if (!match) return trimmed;
203
+ const toolName = match[1]?.trim();
204
+ return toolName || trimmed;
205
+ }
206
+ function mapClaudeModelToKode(model) {
207
+ if (model === "inherit") return "inherit";
208
+ if (model === "opus") return "main";
209
+ if (model === "sonnet") return "task";
210
+ if (model === "haiku") return "quick";
211
+ return model;
212
+ }
213
+ function validateOneAgentFile(args) {
214
+ const issues = [];
215
+ const read = readMarkdownFile(args.filePath);
216
+ if ("error" in read) {
217
+ issues.push({ level: "error", message: `Failed to parse file: ${read.error}` });
218
+ return { filePath: args.filePath, agentType: null, issues };
219
+ }
220
+ const fm = read.frontmatter ?? {};
221
+ const agentType = normalizeString(fm.name);
222
+ const description = normalizeString(fm.description);
223
+ if (!agentType) {
224
+ issues.push({ level: "error", message: `Missing required frontmatter field 'name'` });
225
+ }
226
+ if (!description) {
227
+ issues.push({ level: "error", message: `Missing required frontmatter field 'description'` });
228
+ }
229
+ const toolsList = z2A(fm.tools);
230
+ const tools = toolsList === void 0 ? "*" : toolsList;
231
+ if (Array.isArray(tools) && tools.length === 0) {
232
+ issues.push({ level: "warning", message: `No tools selected (tools: [])` });
233
+ }
234
+ const disallowedRaw = fm.disallowedTools ?? fm["disallowed-tools"] ?? fm["disallowed_tools"];
235
+ const disallowed = disallowedRaw !== void 0 ? z2A(disallowedRaw) : void 0;
236
+ if (disallowedRaw !== void 0 && disallowed === void 0) {
237
+ issues.push({
238
+ level: "warning",
239
+ message: `disallowedTools contains '*' and will be ignored (compatibility behavior)`
240
+ });
241
+ }
242
+ if (Array.isArray(tools)) {
243
+ for (const spec of tools) {
244
+ const toolName = toolNameFromSpec(spec);
245
+ if (SUBAGENT_HARD_BLOCKED_TOOLS.has(toolName)) {
246
+ issues.push({
247
+ level: "warning",
248
+ message: `Tool '${toolName}' is not available to subagents and will be ignored`
249
+ });
250
+ }
251
+ if (args.knownToolNames && toolName && !args.knownToolNames.has(toolName)) {
252
+ issues.push({
253
+ level: "warning",
254
+ message: `Unknown tool '${toolName}' (from '${spec}')`
255
+ });
256
+ }
257
+ }
258
+ }
259
+ const permissionMode = normalizeString(fm.permissionMode);
260
+ if (permissionMode && !VALID_PERMISSION_MODES.has(permissionMode)) {
261
+ issues.push({
262
+ level: "error",
263
+ message: `Invalid permissionMode '${permissionMode}' (expected: ${Array.from(VALID_PERMISSION_MODES).join(", ")})`
264
+ });
265
+ }
266
+ const forkContextValue = fm.forkContext;
267
+ if (forkContextValue !== void 0 && forkContextValue !== "true" && forkContextValue !== "false") {
268
+ issues.push({
269
+ level: "error",
270
+ message: `Invalid forkContext value '${String(forkContextValue)}' (must be the string 'true' or 'false')`
271
+ });
272
+ }
273
+ const forkContext = forkContextValue === "true";
274
+ let modelRaw = fm.model;
275
+ if (typeof modelRaw !== "string" && typeof fm.model_name === "string") {
276
+ modelRaw = fm.model_name;
277
+ }
278
+ const model = typeof modelRaw === "string" ? modelRaw.trim() : void 0;
279
+ if (forkContext && model && model !== "inherit") {
280
+ issues.push({
281
+ level: "warning",
282
+ message: `forkContext is true, so model will be forced to 'inherit' (compatibility behavior)`
283
+ });
284
+ }
285
+ const normalizedModel = model && model.length > 0 ? mapClaudeModelToKode(model) : void 0;
286
+ if (normalizedModel && normalizedModel !== "inherit") {
287
+ const manager = getModelManager();
288
+ const resolved = manager.resolveModelWithInfo(normalizedModel);
289
+ if (!resolved.success || !resolved.profile) {
290
+ issues.push({
291
+ level: "error",
292
+ message: resolved.error ?? `Model '${String(normalizedModel)}' could not be resolved`
293
+ });
294
+ }
295
+ }
296
+ const filename = basename(args.filePath, ".md");
297
+ if (agentType && filename !== agentType) {
298
+ issues.push({
299
+ level: "warning",
300
+ message: `Filename '${filename}.md' does not match agent name '${agentType}'`
301
+ });
302
+ }
303
+ return {
304
+ filePath: args.filePath,
305
+ agentType: agentType ?? null,
306
+ issues,
307
+ ...model ? { model } : {},
308
+ ...normalizedModel ? { normalizedModel } : {}
309
+ };
310
+ }
311
+ function defaultValidationPaths(cwd) {
312
+ const out = [];
313
+ const policyDir = join(getClaudePolicyBaseDir(), ".claude", "agents");
314
+ if (existsSync(policyDir)) out.push(policyDir);
315
+ for (const root of getUserConfigRoots()) {
316
+ const dirPath = join(root, "agents");
317
+ if (existsSync(dirPath)) out.push(dirPath);
318
+ }
319
+ for (const dirPath of findProjectAgentDirs(cwd)) {
320
+ if (existsSync(dirPath)) out.push(dirPath);
321
+ }
322
+ return out;
323
+ }
324
+ async function validateAgentTemplates(args) {
325
+ const inputPaths = args.paths.length > 0 ? args.paths : defaultValidationPaths(args.cwd);
326
+ const markdownFiles = /* @__PURE__ */ new Set();
327
+ for (const inputPath of inputPaths) {
328
+ const resolved = resolve(args.cwd, inputPath);
329
+ if (!existsSync(resolved)) continue;
330
+ let st;
331
+ try {
332
+ st = statSync(resolved);
333
+ } catch {
334
+ continue;
335
+ }
336
+ if (st.isFile()) {
337
+ if (resolved.toLowerCase().endsWith(".md")) markdownFiles.add(resolved);
338
+ continue;
339
+ }
340
+ if (st.isDirectory()) {
341
+ for (const f of listMarkdownFilesRecursively(resolved)) markdownFiles.add(f);
342
+ }
343
+ }
344
+ let knownToolNames;
345
+ if (args.checkTools) {
346
+ try {
347
+ const { getTools } = await import("./tools-RO7HSSE5.js");
348
+ const { getCurrentProjectConfig } = await import("./config-RUSD6G5Y.js");
349
+ const allTools = await getTools(getCurrentProjectConfig().enableArchitectTool);
350
+ knownToolNames = new Set(allTools.map((t) => t.name));
351
+ } catch {
352
+ knownToolNames = void 0;
353
+ }
354
+ }
355
+ const results = Array.from(markdownFiles).sort((a, b) => a.localeCompare(b)).map(
356
+ (filePath) => validateOneAgentFile({
357
+ filePath,
358
+ knownToolNames
359
+ })
360
+ );
361
+ const errorCount = results.reduce(
362
+ (sum, r) => sum + r.issues.filter((i) => i.level === "error").length,
363
+ 0
364
+ );
365
+ const warningCount = results.reduce(
366
+ (sum, r) => sum + r.issues.filter((i) => i.level === "warning").length,
367
+ 0
368
+ );
369
+ return { ok: errorCount === 0, errorCount, warningCount, results };
370
+ }
371
+ export {
372
+ validateAgentTemplates
373
+ };