@shareai-lab/kode 1.2.0 → 2.0.2

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 (725) hide show
  1. package/README.md +25 -388
  2. package/cli-acp.js +82 -0
  3. package/cli.js +89 -79
  4. package/dist/REPL-GIU4ZIXM.js +42 -0
  5. package/dist/acp-H3VJ77YG.js +1357 -0
  6. package/dist/acp-H3VJ77YG.js.map +7 -0
  7. package/dist/agentsValidate-XP3CFN6F.js +373 -0
  8. package/dist/agentsValidate-XP3CFN6F.js.map +7 -0
  9. package/dist/ask-3G5H5KD5.js +125 -0
  10. package/dist/ask-3G5H5KD5.js.map +7 -0
  11. package/dist/autoUpdater-DNRMJWFQ.js +17 -0
  12. package/dist/chunk-2KWKUXLT.js +490 -0
  13. package/dist/chunk-2KWKUXLT.js.map +7 -0
  14. package/dist/chunk-2PMO2FS2.js +1097 -0
  15. package/dist/chunk-2PMO2FS2.js.map +7 -0
  16. package/dist/chunk-3RUXVV4S.js +23 -0
  17. package/dist/chunk-3RUXVV4S.js.map +7 -0
  18. package/dist/chunk-3TXNP6HH.js +240 -0
  19. package/dist/chunk-3TXNP6HH.js.map +7 -0
  20. package/dist/chunk-4GAIJGRH.js +472 -0
  21. package/dist/chunk-4GAIJGRH.js.map +7 -0
  22. package/dist/chunk-4RTX4AG4.js +249 -0
  23. package/dist/chunk-4RTX4AG4.js.map +7 -0
  24. package/dist/chunk-54DNHKOD.js +511 -0
  25. package/dist/chunk-54DNHKOD.js.map +7 -0
  26. package/dist/chunk-67PY5IX6.js +34 -0
  27. package/dist/chunk-67PY5IX6.js.map +7 -0
  28. package/dist/chunk-6DRDLOLP.js +2613 -0
  29. package/dist/chunk-6DRDLOLP.js.map +7 -0
  30. package/dist/chunk-7CQVZNQV.js +1609 -0
  31. package/dist/chunk-7CQVZNQV.js.map +7 -0
  32. package/dist/chunk-ABLVTESJ.js +19 -0
  33. package/dist/chunk-ABLVTESJ.js.map +7 -0
  34. package/dist/{utils/config.js → chunk-AIMIPK4B.js} +351 -171
  35. package/dist/chunk-AIMIPK4B.js.map +7 -0
  36. package/dist/{utils/autoUpdater.js → chunk-BHGTA6JQ.js} +38 -21
  37. package/dist/chunk-BHGTA6JQ.js.map +7 -0
  38. package/dist/chunk-CIG63V4E.js +72 -0
  39. package/dist/chunk-CIG63V4E.js.map +7 -0
  40. package/dist/chunk-E6YNABER.js +24 -0
  41. package/dist/chunk-E6YNABER.js.map +7 -0
  42. package/dist/chunk-EH34V7CY.js +191 -0
  43. package/dist/chunk-EH34V7CY.js.map +7 -0
  44. package/dist/{cost-tracker.js → chunk-EZXMVTDU.js} +51 -32
  45. package/dist/chunk-EZXMVTDU.js.map +7 -0
  46. package/dist/chunk-FH5CHM6L.js +148 -0
  47. package/dist/chunk-FH5CHM6L.js.map +7 -0
  48. package/dist/chunk-G6I7XROM.js +138 -0
  49. package/dist/chunk-G6I7XROM.js.map +7 -0
  50. package/dist/chunk-HN4E4UUQ.js +96 -0
  51. package/dist/chunk-HN4E4UUQ.js.map +7 -0
  52. package/dist/chunk-HSPVVDIW.js +30198 -0
  53. package/dist/chunk-HSPVVDIW.js.map +7 -0
  54. package/dist/{services/systemReminder.js → chunk-IE2CG2TV.js} +221 -59
  55. package/dist/chunk-IE2CG2TV.js.map +7 -0
  56. package/dist/chunk-JC6NCUG5.js +11 -0
  57. package/dist/chunk-K2MI4TPB.js +1256 -0
  58. package/dist/chunk-K2MI4TPB.js.map +7 -0
  59. package/dist/chunk-KAA5BGMQ.js +12 -0
  60. package/dist/chunk-KAA5BGMQ.js.map +7 -0
  61. package/dist/chunk-MN77D2F7.js +2931 -0
  62. package/dist/chunk-MN77D2F7.js.map +7 -0
  63. package/dist/chunk-NPFOMITO.js +21 -0
  64. package/dist/chunk-NPFOMITO.js.map +7 -0
  65. package/dist/chunk-NQLEUHMS.js +196 -0
  66. package/dist/chunk-NQLEUHMS.js.map +7 -0
  67. package/dist/chunk-OIFQB3S4.js +515 -0
  68. package/dist/chunk-OIFQB3S4.js.map +7 -0
  69. package/dist/chunk-OWTG2W3A.js +164 -0
  70. package/dist/chunk-OWTG2W3A.js.map +7 -0
  71. package/dist/chunk-OZNRLY3E.js +735 -0
  72. package/dist/chunk-OZNRLY3E.js.map +7 -0
  73. package/dist/{utils/debugLogger.js → chunk-QYFKRZQC.js} +107 -204
  74. package/dist/chunk-QYFKRZQC.js.map +7 -0
  75. package/dist/chunk-S3J2TLV6.js +16 -0
  76. package/dist/chunk-S3J2TLV6.js.map +7 -0
  77. package/dist/chunk-S6HRABTA.js +95 -0
  78. package/dist/chunk-S6HRABTA.js.map +7 -0
  79. package/dist/{utils/theme.js → chunk-SDGKPKDK.js} +28 -6
  80. package/dist/chunk-SDGKPKDK.js.map +7 -0
  81. package/dist/chunk-SRZZFAS7.js +766 -0
  82. package/dist/chunk-SRZZFAS7.js.map +7 -0
  83. package/dist/chunk-UKHTVRJM.js +47 -0
  84. package/dist/chunk-UKHTVRJM.js.map +7 -0
  85. package/dist/chunk-UYXEDKOZ.js +24 -0
  86. package/dist/chunk-UYXEDKOZ.js.map +7 -0
  87. package/dist/chunk-VBXVYQYY.js +145 -0
  88. package/dist/chunk-VBXVYQYY.js.map +7 -0
  89. package/dist/chunk-WVHORZQ5.js +17 -0
  90. package/dist/chunk-WVHORZQ5.js.map +7 -0
  91. package/dist/chunk-WWUWDNWW.js +49 -0
  92. package/dist/chunk-WWUWDNWW.js.map +7 -0
  93. package/dist/{utils/model.js → chunk-Z33T5YN5.js} +194 -227
  94. package/dist/chunk-Z33T5YN5.js.map +7 -0
  95. package/dist/{services/openai.js → chunk-ZQU3TXLC.js} +168 -234
  96. package/dist/chunk-ZQU3TXLC.js.map +7 -0
  97. package/dist/cli-SRV2INSL.js +3917 -0
  98. package/dist/cli-SRV2INSL.js.map +7 -0
  99. package/dist/commands-TWH6PGVG.js +46 -0
  100. package/dist/config-6ZMBCL23.js +81 -0
  101. package/dist/context-JQIOOI4W.js +30 -0
  102. package/dist/costTracker-6SL26FDB.js +19 -0
  103. package/dist/customCommands-DNEJS3ZU.js +25 -0
  104. package/dist/customCommands-DNEJS3ZU.js.map +7 -0
  105. package/dist/env-OFAXZ3XG.js +22 -0
  106. package/dist/env-OFAXZ3XG.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-6N27AC5K.js +18 -0
  112. package/dist/kodeAgentSessionLoad-6N27AC5K.js.map +7 -0
  113. package/dist/kodeAgentSessionResume-HUSAEO24.js +16 -0
  114. package/dist/kodeAgentSessionResume-HUSAEO24.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-GRWG3SPE.js +131 -0
  118. package/dist/kodeAgentStreamJsonSession-GRWG3SPE.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-TDMXFWSO.js +36 -0
  122. package/dist/kodeHooks-TDMXFWSO.js.map +7 -0
  123. package/dist/llm-XVXWYOHK.js +3118 -0
  124. package/dist/llm-XVXWYOHK.js.map +7 -0
  125. package/dist/llmLazy-7TD5N7XP.js +15 -0
  126. package/dist/llmLazy-7TD5N7XP.js.map +7 -0
  127. package/dist/loader-AUXIJTY6.js +28 -0
  128. package/dist/loader-AUXIJTY6.js.map +7 -0
  129. package/dist/mcp-BXJ3K7NZ.js +49 -0
  130. package/dist/mcp-BXJ3K7NZ.js.map +7 -0
  131. package/dist/{services/mentionProcessor.js → mentionProcessor-YD7YXYGF.js} +61 -50
  132. package/dist/mentionProcessor-YD7YXYGF.js.map +7 -0
  133. package/dist/messages-OFUJSPRV.js +63 -0
  134. package/dist/messages-OFUJSPRV.js.map +7 -0
  135. package/dist/model-KPYCXWBK.js +30 -0
  136. package/dist/model-KPYCXWBK.js.map +7 -0
  137. package/dist/openai-5G5D5Q4B.js +29 -0
  138. package/dist/openai-5G5D5Q4B.js.map +7 -0
  139. package/dist/outputStyles-HLDXFQK3.js +28 -0
  140. package/dist/outputStyles-HLDXFQK3.js.map +7 -0
  141. package/dist/package.json +1 -1
  142. package/dist/pluginRuntime-FPTKK6NY.js +218 -0
  143. package/dist/pluginRuntime-FPTKK6NY.js.map +7 -0
  144. package/dist/pluginValidation-DSFXZ4GF.js +17 -0
  145. package/dist/pluginValidation-DSFXZ4GF.js.map +7 -0
  146. package/dist/prompts-LWLAJRS2.js +48 -0
  147. package/dist/prompts-LWLAJRS2.js.map +7 -0
  148. package/dist/query-HVPWL27C.js +50 -0
  149. package/dist/query-HVPWL27C.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-YOPCY2GO.js +17 -0
  153. package/dist/ripgrep-YOPCY2GO.js.map +7 -0
  154. package/dist/skillMarketplace-PSNKDINM.js +37 -0
  155. package/dist/skillMarketplace-PSNKDINM.js.map +7 -0
  156. package/dist/state-KNRWP3FO.js +16 -0
  157. package/dist/state-KNRWP3FO.js.map +7 -0
  158. package/dist/theme-7S2QN2FO.js +14 -0
  159. package/dist/theme-7S2QN2FO.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-GPOBH4IV.js +18 -0
  163. package/dist/toolPermissionSettings-GPOBH4IV.js.map +7 -0
  164. package/dist/tools-FZU2FZBD.js +47 -0
  165. package/dist/tools-FZU2FZBD.js.map +7 -0
  166. package/dist/userInput-VHNBN2MW.js +311 -0
  167. package/dist/userInput-VHNBN2MW.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 -14
  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 -312
  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 -32
  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 -488
  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 -1034
  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 -1107
  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 -22
  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 -593
  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 -308
  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.map +0 -7
  633. package/dist/utils/betas.js +0 -21
  634. package/dist/utils/betas.js.map +0 -7
  635. package/dist/utils/browser.js +0 -15
  636. package/dist/utils/browser.js.map +0 -7
  637. package/dist/utils/cleanup.js +0 -54
  638. package/dist/utils/cleanup.js.map +0 -7
  639. package/dist/utils/commands.js +0 -207
  640. package/dist/utils/commands.js.map +0 -7
  641. package/dist/utils/commonUnixCommands.js +0 -687
  642. package/dist/utils/commonUnixCommands.js.map +0 -7
  643. package/dist/utils/config.js.map +0 -7
  644. package/dist/utils/conversationRecovery.js +0 -35
  645. package/dist/utils/conversationRecovery.js.map +0 -7
  646. package/dist/utils/debugLogger.js.map +0 -7
  647. package/dist/utils/diff.js +0 -32
  648. package/dist/utils/diff.js.map +0 -7
  649. package/dist/utils/env.js +0 -44
  650. package/dist/utils/env.js.map +0 -7
  651. package/dist/utils/errors.js +0 -23
  652. package/dist/utils/errors.js.map +0 -7
  653. package/dist/utils/exampleCommands.js +0 -80
  654. package/dist/utils/exampleCommands.js.map +0 -7
  655. package/dist/utils/execFileNoThrow.js +0 -44
  656. package/dist/utils/execFileNoThrow.js.map +0 -7
  657. package/dist/utils/expertChatStorage.js +0 -78
  658. package/dist/utils/expertChatStorage.js.map +0 -7
  659. package/dist/utils/file.js +0 -282
  660. package/dist/utils/file.js.map +0 -7
  661. package/dist/utils/fileRecoveryCore.js +0 -41
  662. package/dist/utils/fileRecoveryCore.js.map +0 -7
  663. package/dist/utils/format.js +0 -41
  664. package/dist/utils/format.js.map +0 -7
  665. package/dist/utils/fuzzyMatcher.js +0 -252
  666. package/dist/utils/fuzzyMatcher.js.map +0 -7
  667. package/dist/utils/generators.js +0 -46
  668. package/dist/utils/generators.js.map +0 -7
  669. package/dist/utils/git.js +0 -83
  670. package/dist/utils/git.js.map +0 -7
  671. package/dist/utils/globalLogger.js +0 -54
  672. package/dist/utils/globalLogger.js.map +0 -7
  673. package/dist/utils/http.js +0 -7
  674. package/dist/utils/http.js.map +0 -7
  675. package/dist/utils/imagePaste.js +0 -29
  676. package/dist/utils/imagePaste.js.map +0 -7
  677. package/dist/utils/json.js +0 -16
  678. package/dist/utils/json.js.map +0 -7
  679. package/dist/utils/log.js +0 -298
  680. package/dist/utils/log.js.map +0 -7
  681. package/dist/utils/markdown.js +0 -187
  682. package/dist/utils/markdown.js.map +0 -7
  683. package/dist/utils/messageContextManager.js +0 -195
  684. package/dist/utils/messageContextManager.js.map +0 -7
  685. package/dist/utils/messages.js +0 -633
  686. package/dist/utils/messages.js.map +0 -7
  687. package/dist/utils/model.js.map +0 -7
  688. package/dist/utils/permissions/filesystem.js +0 -80
  689. package/dist/utils/permissions/filesystem.js.map +0 -7
  690. package/dist/utils/responseState.js +0 -20
  691. package/dist/utils/responseState.js.map +0 -7
  692. package/dist/utils/ripgrep.js +0 -131
  693. package/dist/utils/ripgrep.js.map +0 -7
  694. package/dist/utils/secureFile.js +0 -483
  695. package/dist/utils/secureFile.js.map +0 -7
  696. package/dist/utils/sessionState.js +0 -31
  697. package/dist/utils/sessionState.js.map +0 -7
  698. package/dist/utils/state.js +0 -24
  699. package/dist/utils/state.js.map +0 -7
  700. package/dist/utils/style.js +0 -31
  701. package/dist/utils/style.js.map +0 -7
  702. package/dist/utils/terminal.js +0 -43
  703. package/dist/utils/terminal.js.map +0 -7
  704. package/dist/utils/theme.js.map +0 -7
  705. package/dist/utils/thinking.js +0 -103
  706. package/dist/utils/thinking.js.map +0 -7
  707. package/dist/utils/todoStorage.js +0 -291
  708. package/dist/utils/todoStorage.js.map +0 -7
  709. package/dist/utils/tokens.js +0 -30
  710. package/dist/utils/tokens.js.map +0 -7
  711. package/dist/utils/toolExecutionController.js +0 -109
  712. package/dist/utils/toolExecutionController.js.map +0 -7
  713. package/dist/utils/unaryLogging.js +0 -14
  714. package/dist/utils/unaryLogging.js.map +0 -7
  715. package/dist/utils/user.js +0 -40
  716. package/dist/utils/user.js.map +0 -7
  717. package/dist/utils/validate.js +0 -132
  718. package/dist/utils/validate.js.map +0 -7
  719. /package/dist/{Tool.js.map → REPL-GIU4ZIXM.js.map} +0 -0
  720. /package/dist/{components/CustomSelect/theme.js.map → autoUpdater-DNRMJWFQ.js.map} +0 -0
  721. /package/dist/{types/common.d.js.map → chunk-JC6NCUG5.js.map} +0 -0
  722. /package/dist/{types/conversation.js.map → commands-TWH6PGVG.js.map} +0 -0
  723. /package/dist/{types/logs.js.map → config-6ZMBCL23.js.map} +0 -0
  724. /package/dist/{types/modelCapabilities.js.map → context-JQIOOI4W.js.map} +0 -0
  725. /package/dist/{types/notebook.js.map → costTracker-6SL26FDB.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/commands/agents.tsx"],
4
- "sourcesContent": ["import React, { useState, useEffect, useMemo, useCallback, useReducer, Fragment } from 'react'\nimport { Box, Text, useInput } from 'ink'\nimport InkTextInput from 'ink-text-input'\nimport { getActiveAgents, clearAgentCache } from '../utils/agentLoader'\nimport { AgentConfig } from '../utils/agentLoader'\nimport { writeFileSync, unlinkSync, mkdirSync, existsSync, readFileSync, renameSync } from 'fs'\nimport { join } from 'path'\nimport * as path from 'path'\nimport { homedir } from 'os'\nimport * as os from 'os'\nimport { getCwd } from '../utils/state'\nimport { getTheme } from '../utils/theme'\nimport matter from 'gray-matter'\nimport { exec, spawn } from 'child_process'\nimport { promisify } from 'util'\nimport { watch, FSWatcher } from 'fs'\nimport { getMCPTools } from '../services/mcpClient'\nimport { getModelManager } from '../utils/model'\nimport { randomUUID } from 'crypto'\n\nconst execAsync = promisify(exec)\n\n// Core constants aligned with Claude Code architecture\nconst AGENT_LOCATIONS = {\n USER: \"user\",\n PROJECT: \"project\", \n BUILT_IN: \"built-in\",\n ALL: \"all\"\n} as const\n\nconst UI_ICONS = {\n pointer: \"\u276F\",\n checkboxOn: \"\u2611\",\n checkboxOff: \"\u2610\", \n warning: \"\u26A0\",\n separator: \"\u2500\",\n loading: \"\u25D0\u25D1\u25D2\u25D3\"\n} as const\n\nconst FOLDER_CONFIG = {\n FOLDER_NAME: \".claude\",\n AGENTS_DIR: \"agents\"\n} as const\n\n// Tool categories for sophisticated selection\nconst TOOL_CATEGORIES = {\n read: ['Read', 'Glob', 'Grep', 'LS'],\n edit: ['Edit', 'MultiEdit', 'Write', 'NotebookEdit'],\n execution: ['Bash', 'BashOutput', 'KillBash'],\n web: ['WebFetch', 'WebSearch'],\n other: ['TodoWrite', 'ExitPlanMode', 'Task']\n} as const\n\ntype AgentLocation = typeof AGENT_LOCATIONS[keyof typeof AGENT_LOCATIONS]\n\n// Models will be listed dynamically from ModelManager\n\n// Comprehensive mode state for complete UI flow\ntype ModeState = {\n mode: 'list-agents' | 'create-location' | 'create-method' | 'create-generate' | 'create-type' | \n 'create-description' | 'create-tools' | 'create-model' | 'create-color' | 'create-prompt' | 'create-confirm' |\n 'agent-menu' | 'view-agent' | 'edit-agent' | 'edit-tools' | 'edit-model' | 'edit-color' | 'delete-confirm'\n location?: AgentLocation\n selectedAgent?: AgentConfig\n previousMode?: ModeState\n [key: string]: any\n}\n\n// State for agent creation flow\ntype CreateState = {\n location: AgentLocation | null\n agentType: string\n method: 'generate' | 'manual' | null\n generationPrompt: string\n whenToUse: string\n selectedTools: string[]\n selectedModel: string | null // null for inherit, or model profile modelName\n selectedColor: string | null\n systemPrompt: string\n isGenerating: boolean\n wasGenerated: boolean\n isAIGenerated: boolean\n error: string | null\n warnings: string[]\n // Cursor positions for text inputs\n agentTypeCursor: number\n whenToUseCursor: number\n promptCursor: number\n generationPromptCursor: number\n}\n\ntype Tool = {\n name: string\n description?: string | (() => Promise<string>)\n}\n\n// Map a stored model identifier to a display name via ModelManager\nfunction getDisplayModelName(modelId?: string | null): string {\n // null/undefined means inherit from parent (task model)\n if (!modelId) return 'Inherit'\n \n try {\n const profiles = getModelManager().getActiveModelProfiles()\n const profile = profiles.find((p: any) => p.modelName === modelId || p.name === modelId)\n return profile ? profile.name : `Custom (${modelId})`\n } catch (error) {\n console.warn('Failed to get model profiles:', error)\n return modelId ? `Custom (${modelId})` : 'Inherit'\n }\n}\n\n// AI Generation response type\ntype GeneratedAgent = {\n identifier: string\n whenToUse: string\n systemPrompt: string\n}\n\n// AI generation function (use main pointer model)\nasync function generateAgentWithClaude(prompt: string): Promise<GeneratedAgent> {\n // Import Claude service dynamically to avoid circular dependencies\n const { queryModel } = await import('../services/claude')\n \n const systemPrompt = `You are an expert at creating AI agent configurations. Based on the user's description, generate a specialized agent configuration.\n\nReturn your response as a JSON object with exactly these fields:\n- identifier: A short, kebab-case identifier for the agent (e.g., \"code-reviewer\", \"security-auditor\")\n- whenToUse: A clear description of when this agent should be used (50-200 words)\n- systemPrompt: A comprehensive system prompt that defines the agent's role, capabilities, and behavior (200-500 words)\n\nMake the agent highly specialized and effective for the described use case.`\n\n try {\n const messages = [\n {\n type: 'user',\n uuid: randomUUID(),\n message: { role: 'user', content: prompt },\n },\n ] as any\n const response = await queryModel('main', messages, [systemPrompt])\n\n // Get the text content from the response - handle both string and object responses\n let responseText = ''\n if (typeof response.message?.content === 'string') {\n responseText = response.message.content\n } else if (Array.isArray(response.message?.content)) {\n const textContent = response.message.content.find((c: any) => c.type === 'text')\n responseText = textContent?.text || ''\n } else if (response.message?.content?.[0]?.text) {\n responseText = response.message.content[0].text\n }\n \n if (!responseText) {\n throw new Error('No text content in Claude response')\n }\n \n // \u5B89\u5168\u9650\u5236\n const MAX_JSON_SIZE = 100_000 // 100KB\n const MAX_FIELD_LENGTH = 10_000\n \n if (responseText.length > MAX_JSON_SIZE) {\n throw new Error('Response too large')\n }\n \n // \u5B89\u5168\u7684JSON\u63D0\u53D6\u548C\u89E3\u6790\n let parsed: any\n try {\n // \u9996\u5148\u5C1D\u8BD5\u76F4\u63A5\u89E3\u6790\u6574\u4E2A\u54CD\u5E94\n parsed = JSON.parse(responseText.trim())\n } catch {\n // \u5982\u679C\u5931\u8D25\uFF0C\u63D0\u53D6\u7B2C\u4E00\u4E2AJSON\u5BF9\u8C61\uFF0C\u9650\u5236\u641C\u7D22\u8303\u56F4\n const startIdx = responseText.indexOf('{')\n const endIdx = responseText.lastIndexOf('}')\n \n if (startIdx === -1 || endIdx === -1 || startIdx >= endIdx) {\n throw new Error('No valid JSON found in Claude response')\n }\n \n const jsonStr = responseText.substring(startIdx, endIdx + 1)\n if (jsonStr.length > MAX_JSON_SIZE) {\n throw new Error('JSON content too large')\n }\n \n try {\n parsed = JSON.parse(jsonStr)\n } catch (parseError) {\n throw new Error(`Invalid JSON format: ${parseError instanceof Error ? parseError.message : 'Unknown error'}`)\n }\n }\n \n // \u6DF1\u5EA6\u9A8C\u8BC1\u548C\u5B89\u5168\u6E05\u7406\n const identifier = String(parsed.identifier || '').slice(0, 100).trim()\n const whenToUse = String(parsed.whenToUse || '').slice(0, MAX_FIELD_LENGTH).trim()\n const agentSystemPrompt = String(parsed.systemPrompt || '').slice(0, MAX_FIELD_LENGTH).trim()\n \n // \u9A8C\u8BC1\u5FC5\u586B\u5B57\u6BB5\n if (!identifier || !whenToUse || !agentSystemPrompt) {\n throw new Error('Invalid response structure: missing required fields (identifier, whenToUse, systemPrompt)')\n }\n \n // \u6E05\u7406\u5371\u9669\u5B57\u7B26\uFF08\u63A7\u5236\u5B57\u7B26\u548C\u975E\u6253\u5370\u5B57\u7B26\uFF09\n const sanitize = (str: string) => str.replace(/[\\x00-\\x1F\\x7F-\\x9F]/g, '')\n \n // \u9A8C\u8BC1identifier\u683C\u5F0F\uFF08\u53EA\u5141\u8BB8\u5B57\u6BCD\u3001\u6570\u5B57\u3001\u8FDE\u5B57\u7B26\uFF09\n const cleanIdentifier = sanitize(identifier)\n if (!/^[a-zA-Z0-9-]+$/.test(cleanIdentifier)) {\n throw new Error('Invalid identifier format: only letters, numbers, and hyphens allowed')\n }\n \n return {\n identifier: cleanIdentifier,\n whenToUse: sanitize(whenToUse),\n systemPrompt: sanitize(agentSystemPrompt)\n }\n } catch (error) {\n console.error('AI generation failed:', error)\n // Fallback to a reasonable default based on the prompt\n const fallbackId = prompt.toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, '')\n .replace(/\\s+/g, '-')\n .slice(0, 30)\n \n return {\n identifier: fallbackId || 'custom-agent',\n whenToUse: `Use this agent when you need assistance with: ${prompt}`,\n systemPrompt: `You are a specialized assistant focused on helping with ${prompt}. Provide expert-level assistance in this domain.`\n }\n }\n}\n\n// Comprehensive validation system\nfunction validateAgentType(agentType: string, existingAgents: AgentConfig[] = []): { \n isValid: boolean\n errors: string[]\n warnings: string[]\n} {\n const errors: string[] = []\n const warnings: string[] = []\n \n if (!agentType) {\n errors.push(\"Agent type is required\")\n return { isValid: false, errors, warnings }\n }\n \n if (!/^[a-zA-Z]/.test(agentType)) {\n errors.push(\"Agent type must start with a letter\")\n }\n \n if (!/^[a-zA-Z0-9-]+$/.test(agentType)) {\n errors.push(\"Agent type can only contain letters, numbers, and hyphens\")\n }\n \n if (agentType.length < 3) {\n errors.push(\"Agent type must be at least 3 characters long\")\n }\n \n if (agentType.length > 50) {\n errors.push(\"Agent type must be less than 50 characters\")\n }\n \n // Check for reserved names\n const reserved = ['help', 'exit', 'quit', 'agents', 'task']\n if (reserved.includes(agentType.toLowerCase())) {\n errors.push(\"This name is reserved\")\n }\n \n // Check for duplicates\n const duplicate = existingAgents.find(a => a.agentType === agentType)\n if (duplicate) {\n errors.push(`An agent with this name already exists in ${duplicate.location}`)\n }\n \n // Warnings\n if (agentType.includes('--')) {\n warnings.push(\"Consider avoiding consecutive hyphens\")\n }\n \n return {\n isValid: errors.length === 0,\n errors,\n warnings\n }\n}\n\nfunction validateAgentConfig(config: Partial<CreateState>, existingAgents: AgentConfig[] = []): {\n isValid: boolean\n errors: string[]\n warnings: string[]\n} {\n const errors: string[] = []\n const warnings: string[] = []\n \n // Validate agent type\n if (config.agentType) {\n const typeValidation = validateAgentType(config.agentType, existingAgents)\n errors.push(...typeValidation.errors)\n warnings.push(...typeValidation.warnings)\n }\n \n // Validate description\n if (!config.whenToUse) {\n errors.push(\"Description is required\")\n } else if (config.whenToUse.length < 10) {\n warnings.push(\"Description should be more descriptive (at least 10 characters)\")\n }\n \n // Validate system prompt\n if (!config.systemPrompt) {\n errors.push(\"System prompt is required\")\n } else if (config.systemPrompt.length < 20) {\n warnings.push(\"System prompt might be too short for effective agent behavior\")\n }\n \n // Validate tools\n if (!config.selectedTools || config.selectedTools.length === 0) {\n warnings.push(\"No tools selected - agent will have limited capabilities\")\n }\n \n return {\n isValid: errors.length === 0,\n errors,\n warnings\n }\n}\n\n// File system operations with Claude Code alignment\nfunction getAgentDirectory(location: AgentLocation): string {\n if (location === AGENT_LOCATIONS.BUILT_IN || location === AGENT_LOCATIONS.ALL) {\n throw new Error(`Cannot get directory path for ${location} agents`)\n }\n \n if (location === AGENT_LOCATIONS.USER) {\n return join(homedir(), FOLDER_CONFIG.FOLDER_NAME, FOLDER_CONFIG.AGENTS_DIR)\n } else {\n return join(getCwd(), FOLDER_CONFIG.FOLDER_NAME, FOLDER_CONFIG.AGENTS_DIR)\n }\n}\n\nfunction getAgentFilePath(agent: AgentConfig): string {\n if (agent.location === 'built-in') {\n throw new Error('Cannot get file path for built-in agents')\n }\n const dir = getAgentDirectory(agent.location as AgentLocation)\n return join(dir, `${agent.agentType}.md`)\n}\n\nfunction ensureDirectoryExists(location: AgentLocation): string {\n const dir = getAgentDirectory(location)\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n return dir\n}\n\n// Generate agent file content\nfunction generateAgentFileContent(\n agentType: string,\n description: string,\n tools: string[] | '*',\n systemPrompt: string,\n model?: string,\n color?: string\n): string {\n // Use YAML multi-line string for description to avoid escaping issues\n const descriptionLines = description.split('\\n')\n const formattedDescription = descriptionLines.length > 1 \n ? `|\\n ${descriptionLines.join('\\n ')}`\n : JSON.stringify(description)\n \n const lines = [\n '---',\n `name: ${agentType}`,\n `description: ${formattedDescription}`\n ]\n \n if (tools) {\n if (tools === '*') {\n lines.push(`tools: \"*\"`)\n } else if (Array.isArray(tools) && tools.length > 0) {\n lines.push(`tools: [${tools.map(t => `\"${t}\"`).join(', ')}]`)\n }\n }\n \n if (model) {\n lines.push(`model: ${model}`)\n }\n \n if (color) {\n lines.push(`color: ${color}`)\n }\n \n lines.push('---', '', systemPrompt)\n return lines.join('\\n')\n}\n\n// Save agent to file\nasync function saveAgent(\n location: AgentLocation,\n agentType: string,\n description: string,\n tools: string[],\n systemPrompt: string,\n model?: string,\n color?: string,\n throwIfExists: boolean = true\n): Promise<void> {\n if (location === AGENT_LOCATIONS.BUILT_IN) {\n throw new Error('Cannot save built-in agents')\n }\n \n ensureDirectoryExists(location)\n \n const filePath = join(getAgentDirectory(location), `${agentType}.md`)\n const tempFile = `${filePath}.tmp.${Date.now()}.${Math.random().toString(36).substr(2, 9)}`\n \n // Ensure tools is properly typed for file saving\n const toolsForFile: string[] | '*' = Array.isArray(tools) && tools.length === 1 && tools[0] === '*' ? '*' : tools\n const content = generateAgentFileContent(agentType, description, toolsForFile, systemPrompt, model, color)\n \n try {\n // \u5148\u5199\u5165\u4E34\u65F6\u6587\u4EF6\uFF0C\u4F7F\u7528 'wx' \u786E\u4FDD\u4E0D\u8986\u76D6\u73B0\u6709\u6587\u4EF6\n writeFileSync(tempFile, content, { encoding: 'utf-8', flag: 'wx' })\n \n // \u68C0\u67E5\u76EE\u6807\u6587\u4EF6\u662F\u5426\u5B58\u5728\uFF08\u539F\u5B50\u6027\u68C0\u67E5\uFF09\n if (throwIfExists && existsSync(filePath)) {\n // \u6E05\u7406\u4E34\u65F6\u6587\u4EF6\n try { unlinkSync(tempFile) } catch {}\n throw new Error(`Agent file already exists: ${filePath}`)\n }\n \n // \u539F\u5B50\u6027\u91CD\u547D\u540D\uFF08\u5728\u5927\u591A\u6570\u6587\u4EF6\u7CFB\u7EDF\u4E0A\uFF0Crename\u662F\u539F\u5B50\u64CD\u4F5C\uFF09\n renameSync(tempFile, filePath)\n \n } catch (error) {\n // \u786E\u4FDD\u6E05\u7406\u4E34\u65F6\u6587\u4EF6\n try { \n if (existsSync(tempFile)) {\n unlinkSync(tempFile) \n }\n } catch (cleanupError) {\n console.warn('Failed to cleanup temp file:', cleanupError)\n }\n throw error\n }\n}\n\n// Delete agent file\nasync function deleteAgent(agent: AgentConfig): Promise<void> {\n if (agent.location === 'built-in') {\n throw new Error('Cannot delete built-in agents')\n }\n \n const filePath = getAgentFilePath(agent)\n unlinkSync(filePath)\n}\n\n// Open file in system editor - \u5B89\u5168\u7248\u672C\uFF0C\u9632\u6B62\u547D\u4EE4\u6CE8\u5165\nasync function openInEditor(filePath: string): Promise<void> {\n // \u5B89\u5168\u9A8C\u8BC1\uFF1A\u786E\u4FDD\u8DEF\u5F84\u5728\u5141\u8BB8\u7684\u76EE\u5F55\u5185\n const resolvedPath = path.resolve(filePath)\n const projectDir = process.cwd()\n const homeDir = os.homedir()\n \n const isSub = (base: string, target: string) => {\n const path = require('path')\n const rel = path.relative(path.resolve(base), path.resolve(target))\n if (!rel || rel === '') return true\n if (rel.startsWith('..')) return false\n if (path.isAbsolute(rel)) return false\n return true\n }\n\n if (!isSub(projectDir, resolvedPath) && !isSub(homeDir, resolvedPath)) {\n throw new Error('Access denied: File path outside allowed directories')\n }\n \n // \u9A8C\u8BC1\u6587\u4EF6\u6269\u5C55\u540D\n if (!resolvedPath.endsWith('.md')) {\n throw new Error('Invalid file type: Only .md files are allowed')\n }\n \n return new Promise((resolve, reject) => {\n const platform = process.platform\n let command: string\n let args: string[]\n \n // \u4F7F\u7528spawn\u800C\u4E0D\u662Fexec\uFF0C\u907F\u514Dshell\u6CE8\u5165\n switch (platform) {\n case 'darwin': // macOS\n command = 'open'\n args = [resolvedPath]\n break\n case 'win32': // Windows\n command = 'cmd'\n args = ['/c', 'start', '', resolvedPath]\n break\n default: // Linux and others\n command = 'xdg-open'\n args = [resolvedPath]\n break\n }\n \n // \u4F7F\u7528spawn\u66FF\u4EE3exec\uFF0C\u907F\u514Dshell\u89E3\u91CA\n const child = spawn(command, args, { \n detached: true, \n stdio: 'ignore',\n // \u786E\u4FDD\u6CA1\u6709shell\u89E3\u91CA\n shell: false \n })\n \n child.unref() // \u5141\u8BB8\u7236\u8FDB\u7A0B\u9000\u51FA\n \n child.on('error', (error) => {\n reject(new Error(`Failed to open editor: ${error.message}`))\n })\n \n child.on('exit', (code) => {\n if (code === 0) {\n resolve()\n } else {\n reject(new Error(`Editor exited with code ${code}`))\n }\n })\n })\n}\n\n// Update existing agent\nasync function updateAgent(\n agent: AgentConfig,\n description: string,\n tools: string[] | '*',\n systemPrompt: string,\n color?: string,\n model?: string\n): Promise<void> {\n if (agent.location === 'built-in') {\n throw new Error('Cannot update built-in agents')\n }\n \n const toolsForFile = tools.length === 1 && tools[0] === '*' ? '*' : tools\n const content = generateAgentFileContent(agent.agentType, description, toolsForFile, systemPrompt, model, color)\n const filePath = getAgentFilePath(agent)\n \n writeFileSync(filePath, content, { encoding: 'utf-8', flag: 'w' })\n}\n\n// Enhanced UI Components with Claude Code alignment\n\ninterface HeaderProps {\n title: string\n subtitle?: string\n step?: number\n totalSteps?: number\n children?: React.ReactNode\n}\n\nfunction Header({ title, subtitle, step, totalSteps, children }: HeaderProps) {\n const theme = getTheme()\n return (\n <Box flexDirection=\"column\">\n <Text bold color={theme.primary}>{title}</Text>\n {subtitle && (\n <Text color={theme.secondary}>\n {step && totalSteps ? `Step ${step}/${totalSteps}: ` : ''}{subtitle}\n </Text>\n )}\n {children}\n </Box>\n )\n}\n\ninterface InstructionBarProps {\n instructions?: string\n}\n\nfunction InstructionBar({ instructions = \"Press \u2191\u2193 to navigate \u00B7 Enter to select \u00B7 Esc to go back\" }: InstructionBarProps) {\n const theme = getTheme()\n return (\n <Box marginTop={2}>\n <Box borderStyle=\"round\" borderColor={theme.secondary} paddingX={1}>\n <Text color={theme.secondary}>{instructions}</Text>\n </Box>\n </Box>\n )\n}\n\ninterface SelectListProps {\n options: Array<{ label: string; value: string }>\n selectedIndex: number\n onChange: (value: string) => void\n onCancel?: () => void\n numbered?: boolean\n}\n\nfunction SelectList({ options, selectedIndex, onChange, onCancel, numbered = true }: SelectListProps) {\n const theme = getTheme()\n \n useInput((input, key) => {\n if (key.escape && onCancel) {\n onCancel()\n } else if (key.return) {\n onChange(options[selectedIndex].value)\n }\n })\n\n return (\n <Box flexDirection=\"column\">\n {options.map((option, idx) => (\n <Box key={option.value}>\n <Text color={idx === selectedIndex ? theme.primary : undefined}>\n {idx === selectedIndex ? `${UI_ICONS.pointer} ` : \" \"}\n {numbered ? `${idx + 1}. ` : ''}{option.label}\n </Text>\n </Box>\n ))}\n </Box>\n )\n}\n\n\n// Multiline text input component with better UX\ninterface MultilineTextInputProps {\n value: string\n onChange: (value: string) => void\n placeholder?: string\n onSubmit?: () => void\n focus?: boolean\n rows?: number\n error?: string | null\n}\n\nfunction MultilineTextInput({\n value,\n onChange,\n placeholder = '',\n onSubmit,\n focus = true,\n rows = 5,\n error\n}: MultilineTextInputProps) {\n const theme = getTheme()\n const [internalValue, setInternalValue] = useState(value)\n const [cursorBlink, setCursorBlink] = useState(true)\n \n // Sync with external value changes\n useEffect(() => {\n setInternalValue(value)\n }, [value])\n \n // Cursor blink animation\n useEffect(() => {\n if (!focus) return\n const timer = setInterval(() => {\n setCursorBlink(prev => !prev)\n }, 500)\n return () => clearInterval(timer)\n }, [focus])\n \n // Calculate display metrics\n const lines = internalValue.split('\\n')\n const lineCount = lines.length\n const charCount = internalValue.length\n const isEmpty = !internalValue.trim()\n const hasContent = !isEmpty\n \n // Format lines for display with word wrapping\n const formatLines = (text: string): string[] => {\n if (!text && placeholder) {\n return [placeholder]\n }\n const maxWidth = 70 // Maximum characters per line\n const result: string[] = []\n const textLines = text.split('\\n')\n \n textLines.forEach(line => {\n if (line.length <= maxWidth) {\n result.push(line)\n } else {\n // Word wrap long lines\n let remaining = line\n while (remaining.length > 0) {\n result.push(remaining.slice(0, maxWidth))\n remaining = remaining.slice(maxWidth)\n }\n }\n })\n \n return result.length > 0 ? result : ['']\n }\n \n const displayLines = formatLines(internalValue)\n const visibleLines = displayLines.slice(Math.max(0, displayLines.length - rows))\n \n // Handle submit\n const handleSubmit = () => {\n if (internalValue.trim() && onSubmit) {\n onSubmit()\n }\n }\n \n return (\n <Box flexDirection=\"column\" width=\"100%\">\n {/* Modern card-style input container */}\n <Box flexDirection=\"column\">\n {/* Input area */}\n <Box \n borderStyle=\"round\"\n borderColor={focus ? theme.primary : 'gray'}\n paddingX={2}\n paddingY={1}\n minHeight={rows + 2}\n >\n <Box flexDirection=\"column\">\n {/* Use ink-text-input for better input handling */}\n <InkTextInput\n value={internalValue}\n onChange={(val) => {\n setInternalValue(val)\n onChange(val)\n }}\n onSubmit={handleSubmit}\n focus={focus}\n placeholder={placeholder}\n />\n \n {/* Show cursor indicator when focused */}\n {focus && cursorBlink && hasContent && (\n <Text color={theme.primary}>_</Text>\n )}\n </Box>\n </Box>\n \n {/* Status bar */}\n <Box marginTop={1} flexDirection=\"row\" justifyContent=\"space-between\">\n <Box>\n {hasContent ? (\n <Text color={theme.success}>\n \u2713 {charCount} chars \u2022 {lineCount} line{lineCount !== 1 ? 's' : ''}\n </Text>\n ) : (\n <Text dimColor>\u25CB Type to begin...</Text>\n )}\n </Box>\n <Box>\n {error ? (\n <Text color={theme.error}>\u26A0 {error}</Text>\n ) : (\n <Text dimColor>\n {hasContent ? 'Ready' : 'Waiting'}\n </Text>\n )}\n </Box>\n </Box>\n </Box>\n \n {/* Instructions */}\n <Box marginTop={1}>\n <Text dimColor>\n Press Enter to submit \u00B7 Shift+Enter for new line\n </Text>\n </Box>\n </Box>\n )\n}\n\n// Loading spinner component\ninterface LoadingSpinnerProps {\n text?: string\n}\n\nfunction LoadingSpinner({ text }: LoadingSpinnerProps) {\n const theme = getTheme()\n const [frame, setFrame] = useState(0)\n \n useEffect(() => {\n const interval = setInterval(() => {\n setFrame(prev => (prev + 1) % UI_ICONS.loading.length)\n }, 100)\n return () => clearInterval(interval)\n }, [])\n \n return (\n <Box>\n <Text color={theme.primary}>{UI_ICONS.loading[frame]}</Text>\n {text && <Text color={theme.secondary}> {text}</Text>}\n </Box>\n )\n}\n\n// Complete agents UI with comprehensive state management\ninterface AgentsUIProps {\n onExit: (message?: string) => void\n}\n\nfunction AgentsUI({ onExit }: AgentsUIProps) {\n const theme = getTheme()\n \n // Core state management\n const [modeState, setModeState] = useState<ModeState>({\n mode: \"list-agents\",\n location: \"all\" as AgentLocation\n })\n \n const [agents, setAgents] = useState<AgentConfig[]>([])\n const [changes, setChanges] = useState<string[]>([])\n const [refreshKey, setRefreshKey] = useState(0)\n const [loading, setLoading] = useState(true)\n const [tools, setTools] = useState<Tool[]>([])\n \n // Creation state using reducer for complex flow management\n const [createState, setCreateState] = useReducer(\n (state: CreateState, action: any) => {\n switch (action.type) {\n case 'RESET':\n return {\n location: null,\n agentType: '',\n method: null,\n generationPrompt: '',\n whenToUse: '',\n selectedTools: [],\n selectedModel: null,\n selectedColor: null,\n systemPrompt: '',\n isGenerating: false,\n wasGenerated: false,\n isAIGenerated: false,\n error: null,\n warnings: [],\n agentTypeCursor: 0,\n whenToUseCursor: 0,\n promptCursor: 0,\n generationPromptCursor: 0\n }\n case 'SET_LOCATION':\n return { ...state, location: action.value }\n case 'SET_METHOD':\n return { ...state, method: action.value }\n case 'SET_AGENT_TYPE':\n return { ...state, agentType: action.value, error: null }\n case 'SET_GENERATION_PROMPT':\n return { ...state, generationPrompt: action.value }\n case 'SET_WHEN_TO_USE':\n return { ...state, whenToUse: action.value, error: null }\n case 'SET_SELECTED_TOOLS':\n return { ...state, selectedTools: action.value }\n case 'SET_SELECTED_MODEL':\n return { ...state, selectedModel: action.value }\n case 'SET_SELECTED_COLOR':\n return { ...state, selectedColor: action.value }\n case 'SET_SYSTEM_PROMPT':\n return { ...state, systemPrompt: action.value }\n case 'SET_IS_GENERATING':\n return { ...state, isGenerating: action.value }\n case 'SET_WAS_GENERATED':\n return { ...state, wasGenerated: action.value }\n case 'SET_IS_AI_GENERATED':\n return { ...state, isAIGenerated: action.value }\n case 'SET_ERROR':\n return { ...state, error: action.value }\n case 'SET_WARNINGS':\n return { ...state, warnings: action.value }\n case 'SET_CURSOR':\n return { ...state, [action.field]: action.value }\n default:\n return state\n }\n },\n {\n location: null,\n agentType: '',\n method: null,\n generationPrompt: '',\n whenToUse: '',\n selectedTools: [],\n selectedModel: null,\n selectedColor: null,\n systemPrompt: '',\n isGenerating: false,\n wasGenerated: false,\n isAIGenerated: false,\n error: null,\n warnings: [],\n agentTypeCursor: 0,\n whenToUseCursor: 0,\n promptCursor: 0,\n generationPromptCursor: 0\n }\n )\n \n // Load agents and tools dynamically\n const loadAgents = useCallback(async () => {\n setLoading(true)\n clearAgentCache()\n \n // \u521B\u5EFA\u53D6\u6D88\u4EE4\u724C\u4EE5\u9632\u6B62\u7ADE\u6001\u6761\u4EF6\n const abortController = new AbortController()\n const loadingId = Date.now() // \u7528\u4E8E\u6807\u8BC6\u8FD9\u6B21\u52A0\u8F7D\n \n try {\n const result = await getActiveAgents()\n \n // \u68C0\u67E5\u662F\u5426\u4ECD\u7136\u662F\u5F53\u524D\u7684\u52A0\u8F7D\u8BF7\u6C42\n if (abortController.signal.aborted) {\n return // \u7EC4\u4EF6\u5DF2\u5378\u8F7D\u6216\u65B0\u7684\u52A0\u8F7D\u5DF2\u5F00\u59CB\n }\n \n setAgents(result)\n \n // Update selectedAgent if there's one currently selected (for live reload)\n if (modeState.selectedAgent) {\n const freshSelectedAgent = result.find(a => a.agentType === modeState.selectedAgent!.agentType)\n if (freshSelectedAgent) {\n setModeState(prev => ({ ...prev, selectedAgent: freshSelectedAgent }))\n }\n }\n \n // Load available tools dynamically from tool registry\n const availableTools: Tool[] = []\n \n // Core built-in tools\n let coreTools = [\n { name: 'Read', description: 'Read files from filesystem' },\n { name: 'Write', description: 'Write files to filesystem' },\n { name: 'Edit', description: 'Edit existing files' },\n { name: 'MultiEdit', description: 'Make multiple edits to files' },\n { name: 'NotebookEdit', description: 'Edit Jupyter notebooks' },\n { name: 'Bash', description: 'Execute bash commands' },\n { name: 'Glob', description: 'Find files matching patterns' },\n { name: 'Grep', description: 'Search file contents' },\n { name: 'LS', description: 'List directory contents' },\n { name: 'WebFetch', description: 'Fetch web content' },\n { name: 'WebSearch', description: 'Search the web' },\n { name: 'TodoWrite', description: 'Manage task lists' }\n ]\n // Hide agent orchestration/self-control tools for subagent configs\n coreTools = coreTools.filter(t => t.name !== 'Task' && t.name !== 'ExitPlanMode')\n \n availableTools.push(...coreTools)\n \n // Try to load MCP tools dynamically\n try {\n const mcpTools = await getMCPTools()\n if (Array.isArray(mcpTools) && mcpTools.length > 0) {\n availableTools.push(...mcpTools)\n }\n } catch (error) {\n console.warn('Failed to load MCP tools:', error)\n }\n \n if (!abortController.signal.aborted) {\n setTools(availableTools)\n }\n } catch (error) {\n if (!abortController.signal.aborted) {\n console.error('Failed to load agents:', error)\n }\n } finally {\n if (!abortController.signal.aborted) {\n setLoading(false)\n }\n }\n \n // \u8FD4\u56DE\u53D6\u6D88\u51FD\u6570\u4F9BuseEffect\u4F7F\u7528\n return () => abortController.abort()\n }, [])\n \n // Remove mock MCP loader; real MCP tools are loaded via getMCPTools()\n\n useEffect(() => {\n let cleanup: (() => void) | undefined\n \n const load = async () => {\n cleanup = await loadAgents()\n }\n \n load()\n \n return () => {\n if (cleanup) {\n cleanup()\n }\n }\n }, [refreshKey, loadAgents])\n \n // Local file watcher removed; rely on global watcher started in CLI.\n \n // Global keyboard handling: ESC \u9010\u7EA7\u8FD4\u56DE\n useInput((input, key) => {\n if (!key.escape) return\n\n const changesSummary = changes.length > 0 ?\n `Agent changes:\\n${changes.join('\\n')}` : undefined\n\n const current = modeState.mode\n\n if (current === 'list-agents') {\n onExit(changesSummary)\n return\n }\n\n // Hierarchical back navigation\n switch (current) {\n case 'create-location':\n setModeState({ mode: 'list-agents', location: 'all' as AgentLocation })\n break\n case 'create-method':\n setModeState({ mode: 'create-location', location: modeState.location })\n break\n case 'create-generate':\n setModeState({ mode: 'create-location', location: modeState.location })\n break\n case 'create-type':\n setModeState({ mode: 'create-generate', location: modeState.location })\n break\n case 'create-prompt':\n setModeState({ mode: 'create-type', location: modeState.location })\n break\n case 'create-description':\n setModeState({ mode: 'create-prompt', location: modeState.location })\n break\n case 'create-tools':\n setModeState({ mode: 'create-description', location: modeState.location })\n break\n case 'create-model':\n setModeState({ mode: 'create-tools', location: modeState.location })\n break\n case 'create-color':\n setModeState({ mode: 'create-model', location: modeState.location })\n break\n case 'create-confirm':\n setModeState({ mode: 'create-color', location: modeState.location })\n break\n case 'agent-menu':\n setModeState({ mode: 'list-agents', location: 'all' as AgentLocation })\n break\n case 'view-agent':\n setModeState({ mode: 'agent-menu', selectedAgent: modeState.selectedAgent })\n break\n case 'edit-agent':\n setModeState({ mode: 'agent-menu', selectedAgent: modeState.selectedAgent })\n break\n case 'edit-tools':\n case 'edit-model':\n case 'edit-color':\n setModeState({ mode: 'edit-agent', selectedAgent: modeState.selectedAgent })\n break\n case 'delete-confirm':\n setModeState({ mode: 'agent-menu', selectedAgent: modeState.selectedAgent })\n break\n default:\n setModeState({ mode: 'list-agents', location: 'all' as AgentLocation })\n break\n }\n })\n \n // Event handlers\n const handleAgentSelect = useCallback((agent: AgentConfig) => {\n setModeState({ \n mode: \"agent-menu\", \n location: modeState.location,\n selectedAgent: agent\n })\n }, [modeState])\n\n const handleCreateNew = useCallback(() => {\n console.log('=== STARTING AGENT CREATION FLOW ===')\n console.log('Current mode state:', modeState)\n setCreateState({ type: 'RESET' })\n console.log('Reset create state')\n setModeState({ mode: \"create-location\" })\n console.log('Set mode to create-location')\n console.log('=== CREATE NEW HANDLER COMPLETED ===')\n }, [modeState])\n\n const handleAgentCreated = useCallback((message: string) => {\n setChanges(prev => [...prev, message])\n setRefreshKey(prev => prev + 1)\n setModeState({ mode: \"list-agents\", location: \"all\" as AgentLocation })\n }, [])\n \n const handleAgentDeleted = useCallback((message: string) => {\n setChanges(prev => [...prev, message])\n setRefreshKey(prev => prev + 1)\n setModeState({ mode: \"list-agents\", location: \"all\" as AgentLocation })\n }, [])\n \n if (loading) {\n return (\n <Box flexDirection=\"column\">\n <Header title=\"Agents\">\n <Box marginTop={1}>\n <LoadingSpinner text=\"Loading agents...\" />\n </Box>\n </Header>\n <InstructionBar />\n </Box>\n )\n }\n\n // Render based on current mode\n switch (modeState.mode) {\n case \"list-agents\":\n return (\n <AgentListView\n location={modeState.location || \"all\"}\n agents={agents}\n allAgents={agents}\n onBack={() => onExit()}\n onSelect={handleAgentSelect}\n onCreateNew={handleCreateNew}\n changes={changes}\n />\n )\n\n case \"create-location\":\n return (\n <LocationSelect\n createState={createState}\n setCreateState={setCreateState}\n setModeState={setModeState}\n />\n )\n \n case \"create-method\":\n return (\n <MethodSelect\n createState={createState}\n setCreateState={setCreateState}\n setModeState={setModeState}\n />\n )\n \n case \"create-generate\":\n return (\n <GenerateStep\n createState={createState}\n setCreateState={setCreateState}\n setModeState={setModeState}\n existingAgents={agents}\n />\n )\n \n case \"create-type\":\n return (\n <TypeStep\n createState={createState}\n setCreateState={setCreateState}\n setModeState={setModeState}\n existingAgents={agents}\n />\n )\n \n case \"create-description\":\n return (\n <DescriptionStep\n createState={createState}\n setCreateState={setCreateState}\n setModeState={setModeState}\n />\n )\n \n case \"create-tools\":\n return (\n <ToolsStep\n createState={createState}\n setCreateState={setCreateState}\n setModeState={setModeState}\n tools={tools}\n />\n )\n \n case \"create-model\":\n return (\n <ModelStep\n createState={createState}\n setCreateState={setCreateState}\n setModeState={setModeState}\n />\n )\n \n case \"create-color\":\n return (\n <ColorStep\n createState={createState}\n setCreateState={setCreateState}\n setModeState={setModeState}\n />\n )\n \n case \"create-prompt\":\n return (\n <PromptStep\n createState={createState}\n setCreateState={setCreateState}\n setModeState={setModeState}\n />\n )\n \n case \"create-confirm\":\n return (\n <ConfirmStep\n createState={createState}\n setCreateState={setCreateState}\n setModeState={setModeState}\n tools={tools}\n onAgentCreated={handleAgentCreated}\n />\n )\n \n case \"agent-menu\":\n return (\n <AgentMenu\n agent={modeState.selectedAgent!}\n setModeState={setModeState}\n />\n )\n \n case \"view-agent\":\n return (\n <ViewAgent\n agent={modeState.selectedAgent!}\n tools={tools}\n setModeState={setModeState}\n />\n )\n \n case \"edit-agent\":\n return (\n <EditMenu\n agent={modeState.selectedAgent!}\n setModeState={setModeState}\n />\n )\n \n case \"edit-tools\":\n return (\n <EditToolsStep\n agent={modeState.selectedAgent!}\n tools={tools}\n setModeState={setModeState}\n onAgentUpdated={(message, updated) => {\n setChanges(prev => [...prev, message])\n setRefreshKey(prev => prev + 1)\n setModeState({ mode: \"agent-menu\", selectedAgent: updated })\n }}\n />\n )\n \n case \"edit-model\":\n return (\n <EditModelStep\n agent={modeState.selectedAgent!}\n setModeState={setModeState}\n onAgentUpdated={(message, updated) => {\n setChanges(prev => [...prev, message])\n setRefreshKey(prev => prev + 1)\n setModeState({ mode: \"agent-menu\", selectedAgent: updated })\n }}\n />\n )\n \n case \"edit-color\":\n return (\n <EditColorStep\n agent={modeState.selectedAgent!}\n setModeState={setModeState}\n onAgentUpdated={(message, updated) => {\n setChanges(prev => [...prev, message])\n setRefreshKey(prev => prev + 1)\n setModeState({ mode: \"agent-menu\", selectedAgent: updated })\n }}\n />\n )\n \n case \"delete-confirm\":\n return (\n <DeleteConfirm\n agent={modeState.selectedAgent!}\n setModeState={setModeState}\n onAgentDeleted={handleAgentDeleted}\n />\n )\n \n default:\n return (\n <Box flexDirection=\"column\">\n <Header title=\"Agents\">\n <Text>Mode: {modeState.mode} (Not implemented yet)</Text>\n <Box marginTop={1}>\n <Text>Press Esc to go back</Text>\n </Box>\n </Header>\n <InstructionBar instructions=\"Esc to go back\" />\n </Box>\n )\n }\n}\n\ninterface AgentListProps {\n location: AgentLocation\n agents: AgentConfig[]\n allAgents: AgentConfig[]\n onBack: () => void\n onSelect: (agent: AgentConfig) => void\n onCreateNew?: () => void\n changes: string[]\n}\n\nfunction AgentListView({ \n location, \n agents, \n allAgents, \n onBack, \n onSelect, \n onCreateNew, \n changes \n}: AgentListProps) {\n const theme = getTheme()\n const allAgentsList = allAgents || agents\n const customAgents = allAgentsList.filter(a => a.location !== \"built-in\")\n const builtInAgents = allAgentsList.filter(a => a.location === \"built-in\")\n\n const [selectedAgent, setSelectedAgent] = useState<AgentConfig | null>(null)\n const [onCreateOption, setOnCreateOption] = useState(true)\n const [currentLocation, setCurrentLocation] = useState<AgentLocation>(location)\n const [inLocationTabs, setInLocationTabs] = useState(false)\n const [selectedLocationTab, setSelectedLocationTab] = useState(0)\n \n const locationTabs = [\n { label: \"All\", value: \"all\" as AgentLocation },\n { label: \"Personal\", value: \"user\" as AgentLocation },\n { label: \"Project\", value: \"project\" as AgentLocation }\n ]\n\n const activeMap = useMemo(() => {\n const map = new Map<string, AgentConfig>()\n agents.forEach(a => map.set(a.agentType, a))\n return map\n }, [agents])\n\n const checkOverride = (agent: AgentConfig) => {\n const active = activeMap.get(agent.agentType)\n const isOverridden = !!(active && active.location !== agent.location)\n return {\n isOverridden,\n overriddenBy: isOverridden ? active.location : null\n }\n }\n\n const renderCreateOption = () => (\n <Box flexDirection=\"row\" gap={1}>\n <Text color={onCreateOption ? theme.primary : undefined}>\n {onCreateOption ? `${UI_ICONS.pointer} ` : \" \"}\n </Text>\n <Text bold color={onCreateOption ? theme.primary : undefined}>\n \u2728 Create new agent\n </Text>\n </Box>\n )\n\n const renderAgent = (agent: AgentConfig, isBuiltIn = false) => {\n const isSelected = !isBuiltIn && !onCreateOption && \n selectedAgent?.agentType === agent.agentType &&\n selectedAgent?.location === agent.location\n const { isOverridden, overriddenBy } = checkOverride(agent)\n const dimmed = isBuiltIn || isOverridden\n const color = !isBuiltIn && isSelected ? theme.primary : undefined\n \n // Extract model from agent metadata\n const agentModel = (agent as any).model || null\n const modelDisplay = getDisplayModelName(agentModel)\n\n return (\n <Box key={`${agent.agentType}-${agent.location}`} flexDirection=\"row\" alignItems=\"center\">\n <Box flexDirection=\"row\" alignItems=\"center\" minWidth={3}>\n <Text dimColor={dimmed && !isSelected} color={color}>\n {isBuiltIn ? \"\" : isSelected ? `${UI_ICONS.pointer} ` : \" \"}\n </Text>\n </Box>\n <Box flexDirection=\"row\" alignItems=\"center\" flexGrow={1}>\n <Text dimColor={dimmed && !isSelected} color={color}>\n {agent.agentType}\n </Text>\n <Text dimColor={true} color={dimmed ? undefined : 'gray'}>\n {\" \u00B7 \"}{modelDisplay}\n </Text>\n </Box>\n {overriddenBy && (\n <Box marginLeft={1}>\n <Text dimColor={!isSelected} color={isSelected ? 'yellow' : 'gray'}>\n {UI_ICONS.warning} overridden by {overriddenBy}\n </Text>\n </Box>\n )}\n </Box>\n )\n }\n\n const displayAgents = useMemo(() => {\n if (currentLocation === \"all\") {\n return [\n ...customAgents.filter(a => a.location === \"user\"),\n ...customAgents.filter(a => a.location === \"project\")\n ]\n } else if (currentLocation === \"user\" || currentLocation === \"project\") {\n return customAgents.filter(a => a.location === currentLocation)\n }\n return customAgents\n }, [customAgents, currentLocation])\n \n // \u66F4\u65B0\u5F53\u524D\u9009\u4E2D\u7684\u6807\u7B7E\u7D22\u5F15\n useEffect(() => {\n const tabIndex = locationTabs.findIndex(tab => tab.value === currentLocation)\n if (tabIndex !== -1) {\n setSelectedLocationTab(tabIndex)\n }\n }, [currentLocation, locationTabs])\n \n // \u786E\u4FDD\u5F53\u6709agents\u65F6\uFF0C\u521D\u59CB\u5316\u9009\u62E9\u72B6\u6001\n useEffect(() => {\n if (displayAgents.length > 0 && !selectedAgent && !onCreateOption) {\n setOnCreateOption(true) // \u9ED8\u8BA4\u9009\u62E9\u521B\u5EFA\u9009\u9879\n }\n }, [displayAgents.length, selectedAgent, onCreateOption])\n\n useInput((input, key) => {\n if (key.escape) {\n if (inLocationTabs) {\n setInLocationTabs(false)\n return\n }\n onBack()\n return\n }\n\n if (key.return) {\n if (inLocationTabs) {\n setCurrentLocation(locationTabs[selectedLocationTab].value)\n setInLocationTabs(false)\n return\n }\n if (onCreateOption && onCreateNew) {\n onCreateNew()\n } else if (selectedAgent) {\n onSelect(selectedAgent)\n }\n return\n }\n \n // Tab\u952E\u8FDB\u5165/\u9000\u51FA\u6807\u7B7E\u5BFC\u822A\n if (key.tab) {\n setInLocationTabs(!inLocationTabs)\n return\n }\n \n // \u5728\u6807\u7B7E\u5BFC\u822A\u6A21\u5F0F\n if (inLocationTabs) {\n if (key.leftArrow) {\n setSelectedLocationTab(prev => prev > 0 ? prev - 1 : locationTabs.length - 1)\n } else if (key.rightArrow) {\n setSelectedLocationTab(prev => prev < locationTabs.length - 1 ? prev + 1 : 0)\n }\n return\n }\n \n // \u952E\u76D8\u5BFC\u822A - \u8FD9\u662F\u5173\u952E\u7F3A\u5931\u7684\u529F\u80FD\n if (key.upArrow || key.downArrow) {\n const allNavigableItems = []\n \n // \u6DFB\u52A0\u521B\u5EFA\u9009\u9879\n if (onCreateNew) {\n allNavigableItems.push({ type: 'create', agent: null })\n }\n \n // \u6DFB\u52A0\u53EF\u5BFC\u822A\u7684agents\n displayAgents.forEach(agent => {\n const { isOverridden } = checkOverride(agent)\n if (!isOverridden) { // \u53EA\u663E\u793A\u672A\u88AB\u8986\u76D6\u7684agents\n allNavigableItems.push({ type: 'agent', agent })\n }\n })\n \n if (allNavigableItems.length === 0) return\n \n if (key.upArrow) {\n if (onCreateOption) {\n // \u4ECE\u521B\u5EFA\u9009\u9879\u5411\u4E0A\u5230\u6700\u540E\u4E00\u4E2Aagent\n const lastAgent = allNavigableItems[allNavigableItems.length - 1]\n if (lastAgent.type === 'agent') {\n setSelectedAgent(lastAgent.agent)\n setOnCreateOption(false)\n }\n } else if (selectedAgent) {\n const currentIndex = allNavigableItems.findIndex(\n item => item.type === 'agent' && \n item.agent?.agentType === selectedAgent.agentType &&\n item.agent?.location === selectedAgent.location\n )\n if (currentIndex > 0) {\n const prevItem = allNavigableItems[currentIndex - 1]\n if (prevItem.type === 'create') {\n setOnCreateOption(true)\n setSelectedAgent(null)\n } else {\n setSelectedAgent(prevItem.agent)\n }\n } else {\n // \u5230\u8FBE\u9876\u90E8\uFF0C\u56DE\u5230\u521B\u5EFA\u9009\u9879\n if (onCreateNew) {\n setOnCreateOption(true)\n setSelectedAgent(null)\n }\n }\n }\n } else if (key.downArrow) {\n if (onCreateOption) {\n // \u4ECE\u521B\u5EFA\u9009\u9879\u5411\u4E0B\u5230\u7B2C\u4E00\u4E2Aagent\n const firstAgent = allNavigableItems.find(item => item.type === 'agent')\n if (firstAgent) {\n setSelectedAgent(firstAgent.agent)\n setOnCreateOption(false)\n }\n } else if (selectedAgent) {\n const currentIndex = allNavigableItems.findIndex(\n item => item.type === 'agent' && \n item.agent?.agentType === selectedAgent.agentType &&\n item.agent?.location === selectedAgent.location\n )\n if (currentIndex < allNavigableItems.length - 1) {\n const nextItem = allNavigableItems[currentIndex + 1]\n if (nextItem.type === 'agent') {\n setSelectedAgent(nextItem.agent)\n }\n } else {\n // \u5230\u8FBE\u5E95\u90E8\uFF0C\u56DE\u5230\u521B\u5EFA\u9009\u9879\n if (onCreateNew) {\n setOnCreateOption(true)\n setSelectedAgent(null)\n }\n }\n }\n }\n }\n })\n\n // \u7279\u6B8A\u7684\u952E\u76D8\u8F93\u5165\u5904\u7406\u7EC4\u4EF6\u7528\u4E8E\u7A7A\u72B6\u6001\n const EmptyStateInput = () => {\n useInput((input, key) => {\n if (key.escape) {\n onBack()\n return\n }\n if (key.return && onCreateNew) {\n onCreateNew()\n return\n }\n })\n return null\n }\n\n if (!agents.length || (currentLocation !== \"built-in\" && !customAgents.length)) {\n return (\n <Box flexDirection=\"column\">\n <EmptyStateInput />\n <Header title=\"\uD83E\uDD16 Agents\" subtitle=\"\">\n {onCreateNew && (\n <Box marginY={1}>\n {renderCreateOption()}\n </Box>\n )}\n <Box marginTop={1} flexDirection=\"column\">\n <Box marginBottom={1}>\n <Text bold color={theme.primary}>\uD83D\uDCAD What are agents?</Text>\n </Box>\n <Text>Specialized AI assistants that Claude can delegate to for specific tasks.</Text>\n <Text>Each agent has its own context, prompt, and tools.</Text>\n \n <Box marginTop={1} marginBottom={1}>\n <Text bold color={theme.primary}>\uD83D\uDCA1 Popular agent ideas:</Text>\n </Box>\n <Box paddingLeft={2} flexDirection=\"column\">\n <Text>\u2022 \uD83D\uDD0D Code Reviewer - Reviews PRs for best practices</Text>\n <Text>\u2022 \uD83D\uDD12 Security Auditor - Finds vulnerabilities</Text>\n <Text>\u2022 \u26A1 Performance Optimizer - Improves code speed</Text>\n <Text>\u2022 \uD83E\uDDD1\u200D\uD83D\uDCBC Tech Lead - Makes architecture decisions</Text>\n <Text>\u2022 \uD83C\uDFA8 UX Expert - Improves user experience</Text>\n </Box>\n </Box>\n\n {currentLocation !== \"built-in\" && builtInAgents.length > 0 && (\n <>\n <Box marginTop={1}><Text>{UI_ICONS.separator.repeat(40)}</Text></Box>\n <Box flexDirection=\"column\" marginBottom={1} paddingLeft={2}>\n <Text bold color={theme.secondary}>Built-in (always available):</Text>\n {builtInAgents.map(a => renderAgent(a, true))}\n </Box>\n </>\n )}\n </Header>\n <InstructionBar instructions=\"Press Enter to create new agent \u00B7 Esc to go back\" />\n </Box>\n )\n }\n\n return (\n <Box flexDirection=\"column\">\n <Header title=\"\uD83E\uDD16 Agents\" subtitle=\"\">\n {changes.length > 0 && (\n <Box marginTop={1}>\n <Text dimColor>{changes[changes.length - 1]}</Text>\n </Box>\n )}\n\n {/* Fancy location tabs */}\n <Box marginTop={1} flexDirection=\"column\">\n <Box flexDirection=\"row\" gap={2}>\n {locationTabs.map((tab, idx) => {\n const isActive = currentLocation === tab.value\n const isSelected = inLocationTabs && idx === selectedLocationTab\n return (\n <Box key={tab.value} flexDirection=\"row\">\n <Text \n color={isSelected || isActive ? theme.primary : undefined}\n bold={isActive}\n dimColor={!isActive && !isSelected}\n >\n {isSelected ? '\u25B6 ' : isActive ? '\u25C9 ' : '\u25CB '}\n {tab.label}\n </Text>\n {idx < locationTabs.length - 1 && <Text dimColor> | </Text>}\n </Box>\n )\n })}\n </Box>\n <Box marginTop={0}>\n <Text dimColor>\n {currentLocation === 'all' ? 'Showing all agents' : \n currentLocation === 'user' ? 'Personal agents (~/.claude/agents)' : \n 'Project agents (.claude/agents)'}\n </Text>\n </Box>\n </Box>\n\n <Box flexDirection=\"column\" marginTop={1}>\n {onCreateNew && (\n <Box marginBottom={1}>\n {renderCreateOption()}\n </Box>\n )}\n\n {currentLocation === \"all\" ? (\n <>\n {customAgents.filter(a => a.location === \"user\").length > 0 && (\n <>\n <Text bold color={theme.secondary}>Personal:</Text>\n {customAgents.filter(a => a.location === \"user\").map(a => renderAgent(a))}\n </>\n )}\n \n {customAgents.filter(a => a.location === \"project\").length > 0 && (\n <>\n <Box marginTop={customAgents.filter(a => a.location === \"user\").length > 0 ? 1 : 0}>\n <Text bold color={theme.secondary}>Project:</Text>\n </Box>\n {customAgents.filter(a => a.location === \"project\").map(a => renderAgent(a))}\n </>\n )}\n \n {builtInAgents.length > 0 && (\n <>\n <Box marginTop={customAgents.length > 0 ? 1 : 0}>\n <Text>{UI_ICONS.separator.repeat(40)}</Text>\n </Box>\n <Box flexDirection=\"column\">\n <Text bold color={theme.secondary}>Built-in:</Text>\n {builtInAgents.map(a => renderAgent(a, true))}\n </Box>\n </>\n )}\n </>\n ) : (\n <>\n {displayAgents.map(a => renderAgent(a))}\n {currentLocation !== \"built-in\" && builtInAgents.length > 0 && (\n <>\n <Box marginTop={1}><Text>{UI_ICONS.separator.repeat(40)}</Text></Box>\n <Box flexDirection=\"column\">\n <Text bold color={theme.secondary}>Built-in:</Text>\n {builtInAgents.map(a => renderAgent(a, true))}\n </Box>\n </>\n )}\n </>\n )}\n </Box>\n </Header>\n <InstructionBar \n instructions={inLocationTabs ? \n \"\u2190\u2192 Switch tabs \u2022 Enter Select \u2022 Tab Exit tabs\" :\n \"\u2191\u2193 Navigate \u2022 Tab Location \u2022 Enter Select\"\n }\n />\n </Box>\n )\n}\n\n// Common interface for creation step props\ninterface StepProps {\n createState: CreateState\n setCreateState: React.Dispatch<any>\n setModeState: (state: ModeState) => void\n}\n\n// Step 3: AI Generation\ninterface GenerateStepProps extends StepProps {\n existingAgents: AgentConfig[]\n}\n\nfunction GenerateStep({ createState, setCreateState, setModeState, existingAgents }: GenerateStepProps) {\n const handleSubmit = async () => {\n if (createState.generationPrompt.trim()) {\n setCreateState({ type: 'SET_IS_GENERATING', value: true })\n setCreateState({ type: 'SET_ERROR', value: null })\n \n try {\n const generated = await generateAgentWithClaude(createState.generationPrompt)\n \n // Validate the generated identifier doesn't conflict\n const validation = validateAgentType(generated.identifier, existingAgents)\n let finalIdentifier = generated.identifier\n \n if (!validation.isValid) {\n // Add a suffix to make it unique\n let counter = 1\n while (true) {\n const testId = `${generated.identifier}-${counter}`\n const testValidation = validateAgentType(testId, existingAgents)\n if (testValidation.isValid) {\n finalIdentifier = testId\n break\n }\n counter++\n if (counter > 10) {\n finalIdentifier = `custom-agent-${Date.now()}`\n break\n }\n }\n }\n \n setCreateState({ type: 'SET_AGENT_TYPE', value: finalIdentifier })\n setCreateState({ type: 'SET_WHEN_TO_USE', value: generated.whenToUse })\n setCreateState({ type: 'SET_SYSTEM_PROMPT', value: generated.systemPrompt })\n setCreateState({ type: 'SET_WAS_GENERATED', value: true })\n setCreateState({ type: 'SET_IS_GENERATING', value: false })\n setModeState({ mode: 'create-tools', location: createState.location })\n } catch (error) {\n console.error('Generation failed:', error)\n setCreateState({ type: 'SET_ERROR', value: 'Failed to generate agent. Please try again or use manual configuration.' })\n setCreateState({ type: 'SET_IS_GENERATING', value: false })\n }\n }\n }\n \n return (\n <Box flexDirection=\"column\">\n <Header title=\"\u2728 New Agent\" subtitle=\"What should it do?\" step={2} totalSteps={8}>\n <Box marginTop={1}>\n {createState.isGenerating ? (\n <Box flexDirection=\"column\">\n <Text dimColor>{createState.generationPrompt}</Text>\n <Box marginTop={1}>\n <LoadingSpinner text=\"Generating agent configuration...\" />\n </Box>\n </Box>\n ) : (\n <MultilineTextInput\n value={createState.generationPrompt}\n onChange={(value) => setCreateState({ type: 'SET_GENERATION_PROMPT', value })}\n placeholder=\"An expert that reviews pull requests for best practices, security issues, and suggests improvements...\"\n onSubmit={handleSubmit}\n error={createState.error}\n rows={3}\n />\n )}\n </Box>\n </Header>\n <InstructionBar />\n </Box>\n )\n}\n\n// Step 4: Manual type input (for manual method)\ninterface TypeStepProps extends StepProps {\n existingAgents: AgentConfig[]\n}\n\nfunction TypeStep({ createState, setCreateState, setModeState, existingAgents }: TypeStepProps) {\n const handleSubmit = () => {\n const validation = validateAgentType(createState.agentType, existingAgents)\n if (validation.isValid) {\n setModeState({ mode: 'create-prompt', location: createState.location })\n } else {\n setCreateState({ type: 'SET_ERROR', value: validation.errors[0] })\n }\n }\n \n return (\n <Box flexDirection=\"column\">\n <Header title=\"Create new agent\" subtitle=\"Enter agent identifier\" step={3} totalSteps={8}>\n <Box marginTop={1}>\n <InkTextInput\n value={createState.agentType}\n onChange={(value) => setCreateState({ type: 'SET_AGENT_TYPE', value })}\n placeholder=\"e.g. code-reviewer, tech-lead\"\n onSubmit={handleSubmit}\n />\n {createState.error && (\n <Box marginTop={1}>\n <Text color=\"red\">\u26A0 {createState.error}</Text>\n </Box>\n )}\n </Box>\n </Header>\n <InstructionBar />\n </Box>\n )\n}\n\n// Step 5: Description input\nfunction DescriptionStep({ createState, setCreateState, setModeState }: StepProps) {\n const handleSubmit = () => {\n if (createState.whenToUse.trim()) {\n setModeState({ mode: 'create-tools', location: createState.location })\n }\n }\n \n return (\n <Box flexDirection=\"column\">\n <Header title=\"Create new agent\" subtitle=\"Describe when to use this agent\" step={5} totalSteps={8}>\n <Box marginTop={1}>\n <MultilineTextInput\n value={createState.whenToUse}\n onChange={(value) => setCreateState({ type: 'SET_WHEN_TO_USE', value })}\n placeholder=\"Use this agent when you need to review code for best practices, security issues...\"\n onSubmit={handleSubmit}\n error={createState.error}\n rows={4}\n />\n </Box>\n </Header>\n <InstructionBar />\n </Box>\n )\n}\n\n// Step 6: Tools selection\ninterface ToolsStepProps extends StepProps {\n tools: Tool[]\n}\n\nfunction ToolsStep({ createState, setCreateState, setModeState, tools }: ToolsStepProps) {\n const [selectedIndex, setSelectedIndex] = useState(0)\n // Default to all tools selected initially\n const initialSelection = createState.selectedTools.length > 0 ? \n new Set(createState.selectedTools) : \n new Set(tools.map(t => t.name)) // Select all tools by default\n const [selectedTools, setSelectedTools] = useState<Set<string>>(initialSelection)\n const [showAdvanced, setShowAdvanced] = useState(false)\n const [selectedCategory, setSelectedCategory] = useState<keyof typeof TOOL_CATEGORIES | 'mcp' | 'all'>('all')\n \n // Categorize tools\n const categorizedTools = useMemo(() => {\n const categories: Record<string, Tool[]> = {\n read: [],\n edit: [],\n execution: [],\n web: [],\n mcp: [],\n other: []\n }\n \n tools.forEach(tool => {\n let categorized = false\n \n // Check MCP tools first\n if (tool.name.startsWith('mcp__')) {\n categories.mcp.push(tool)\n categorized = true\n } else {\n // Check built-in categories\n for (const [category, toolNames] of Object.entries(TOOL_CATEGORIES)) {\n if (Array.isArray(toolNames) && toolNames.includes(tool.name)) {\n categories[category as keyof typeof categories]?.push(tool)\n categorized = true\n break\n }\n }\n }\n \n if (!categorized) {\n categories.other.push(tool)\n }\n })\n \n return categories\n }, [tools])\n \n const displayTools = useMemo(() => {\n if (selectedCategory === 'all') {\n return tools\n }\n return categorizedTools[selectedCategory] || []\n }, [selectedCategory, tools, categorizedTools])\n \n const allSelected = selectedTools.size === tools.length && tools.length > 0\n const categoryOptions = [\n { id: 'all', label: `All (${tools.length})` },\n { id: 'read', label: `Read (${categorizedTools.read.length})` },\n { id: 'edit', label: `Edit (${categorizedTools.edit.length})` },\n { id: 'execution', label: `Execution (${categorizedTools.execution.length})` },\n { id: 'web', label: `Web (${categorizedTools.web.length})` },\n { id: 'mcp', label: `MCP (${categorizedTools.mcp.length})` },\n { id: 'other', label: `Other (${categorizedTools.other.length})` }\n ].filter(cat => cat.id === 'all' || categorizedTools[cat.id]?.length > 0)\n \n // Calculate category selections\n const readSelected = categorizedTools.read.every(tool => selectedTools.has(tool.name))\n const editSelected = categorizedTools.edit.every(tool => selectedTools.has(tool.name))\n const execSelected = categorizedTools.execution.every(tool => selectedTools.has(tool.name))\n const webSelected = categorizedTools.web.every(tool => selectedTools.has(tool.name))\n \n const options: Array<{\n id: string\n label: string\n isContinue?: boolean\n isAll?: boolean\n isTool?: boolean\n isCategory?: boolean\n isAdvancedToggle?: boolean\n isSeparator?: boolean\n }> = [\n { id: 'continue', label: 'Save', isContinue: true },\n { id: 'separator1', label: '\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500', isSeparator: true },\n { id: 'all', label: `${allSelected ? UI_ICONS.checkboxOn : UI_ICONS.checkboxOff} All tools`, isAll: true },\n { id: 'read', label: `${readSelected ? UI_ICONS.checkboxOn : UI_ICONS.checkboxOff} Read-only tools`, isCategory: true },\n { id: 'edit', label: `${editSelected ? UI_ICONS.checkboxOn : UI_ICONS.checkboxOff} Edit tools`, isCategory: true },\n { id: 'execution', label: `${execSelected ? UI_ICONS.checkboxOn : UI_ICONS.checkboxOff} Execution tools`, isCategory: true },\n { id: 'separator2', label: '\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500', isSeparator: true },\n { id: 'advanced', label: `[ ${showAdvanced ? 'Hide' : 'Show'} advanced options ]`, isAdvancedToggle: true },\n ...(showAdvanced ? displayTools.map(tool => ({\n id: tool.name,\n label: `${selectedTools.has(tool.name) ? UI_ICONS.checkboxOn : UI_ICONS.checkboxOff} ${tool.name}`,\n isTool: true\n })) : [])\n ]\n \n const handleSelect = () => {\n const option = options[selectedIndex] as any // Type assertion for union type\n if (!option) return\n if (option.isSeparator) return\n \n if (option.isContinue) {\n const result = allSelected ? ['*'] : Array.from(selectedTools)\n setCreateState({ type: 'SET_SELECTED_TOOLS', value: result })\n setModeState({ mode: 'create-model', location: createState.location })\n } else if (option.isAdvancedToggle) {\n setShowAdvanced(!showAdvanced)\n } else if (option.isAll) {\n if (allSelected) {\n setSelectedTools(new Set())\n } else {\n setSelectedTools(new Set(tools.map(t => t.name)))\n }\n } else if (option.isCategory) {\n const categoryName = option.id as keyof typeof categorizedTools\n const categoryTools = categorizedTools[categoryName] || []\n const newSelected = new Set(selectedTools)\n \n const categorySelected = categoryTools.every(tool => selectedTools.has(tool.name))\n if (categorySelected) {\n // Unselect all tools in this category\n categoryTools.forEach(tool => newSelected.delete(tool.name))\n } else {\n // Select all tools in this category\n categoryTools.forEach(tool => newSelected.add(tool.name))\n }\n setSelectedTools(newSelected)\n } else if (option.isTool) {\n const newSelected = new Set(selectedTools)\n if (newSelected.has(option.id)) {\n newSelected.delete(option.id)\n } else {\n newSelected.add(option.id)\n }\n setSelectedTools(newSelected)\n }\n }\n \n useInput((input, key) => {\n if (key.return) {\n handleSelect()\n } else if (key.upArrow) {\n setSelectedIndex(prev => {\n let newIndex = prev > 0 ? prev - 1 : options.length - 1\n // Skip separators when going up\n while (options[newIndex] && (options[newIndex] as any).isSeparator) {\n newIndex = newIndex > 0 ? newIndex - 1 : options.length - 1\n }\n return newIndex\n })\n } else if (key.downArrow) {\n setSelectedIndex(prev => {\n let newIndex = prev < options.length - 1 ? prev + 1 : 0\n // Skip separators when going down\n while (options[newIndex] && (options[newIndex] as any).isSeparator) {\n newIndex = newIndex < options.length - 1 ? newIndex + 1 : 0\n }\n return newIndex\n })\n }\n })\n \n return (\n <Box flexDirection=\"column\">\n <Header title=\"\uD83D\uDD27 Tool Permissions\" subtitle=\"\" step={3} totalSteps={5}>\n <Box flexDirection=\"column\" marginTop={1}>\n {options.map((option, idx) => {\n const isSelected = idx === selectedIndex\n const isContinue = option.isContinue\n const isAdvancedToggle = option.isAdvancedToggle\n const isSeparator = option.isSeparator\n \n return (\n <Box key={option.id}>\n <Text \n color={isSelected && !isSeparator ? 'cyan' : isSeparator ? 'gray' : undefined}\n bold={isContinue}\n dimColor={isSeparator}\n >\n {isSeparator ? \n option.label : \n `${isSelected ? `${UI_ICONS.pointer} ` : ' '}${isContinue || isAdvancedToggle ? `${option.label}` : option.label}`\n }\n </Text>\n {option.isTool && isSelected && tools.find(t => t.name === option.id)?.description && (\n <Box marginLeft={4}>\n <Text dimColor>{tools.find(t => t.name === option.id)?.description}</Text>\n </Box>\n )}\n </Box>\n )\n })}\n \n <Box marginTop={1}>\n <Text dimColor>\n {allSelected ? \n 'All tools selected' : \n `${selectedTools.size} of ${tools.length} tools selected`}\n </Text>\n {selectedCategory !== 'all' && (\n <Text dimColor>Filtering: {selectedCategory} tools</Text>\n )}\n </Box>\n </Box>\n </Header>\n <InstructionBar instructions=\"\u2191\u2193 Navigate \u2022 Enter Toggle \u2022 Esc Back\" />\n </Box>\n )\n}\n\n// Step 6: Model selection (clean design like /models)\nfunction ModelStep({ createState, setCreateState, setModeState }: StepProps) {\n const theme = getTheme()\n const manager = getModelManager()\n const profiles = manager.getActiveModelProfiles()\n \n // Group models by provider\n const groupedModels = profiles.reduce((acc: any, profile: any) => {\n const provider = profile.provider || 'Default'\n if (!acc[provider]) acc[provider] = []\n acc[provider].push(profile)\n return acc\n }, {})\n \n // Flatten with inherit option\n const modelOptions = [\n { id: null, name: '\u25C8 Inherit from parent', provider: 'System', modelName: 'default' },\n ...Object.entries(groupedModels).flatMap(([provider, models]: any) => \n models.map((p: any) => ({\n id: p.modelName,\n name: p.name,\n provider: provider,\n modelName: p.modelName\n }))\n )\n ]\n\n const [selectedIndex, setSelectedIndex] = useState(() => {\n const idx = modelOptions.findIndex(m => m.id === createState.selectedModel)\n return idx >= 0 ? idx : 0\n })\n\n const handleSelect = (modelId: string | null) => {\n setCreateState({ type: 'SET_SELECTED_MODEL', value: modelId })\n setModeState({ mode: 'create-color', location: createState.location })\n }\n\n useInput((input, key) => {\n if (key.return) {\n handleSelect(modelOptions[selectedIndex].id)\n } else if (key.upArrow) {\n setSelectedIndex(prev => (prev > 0 ? prev - 1 : modelOptions.length - 1))\n } else if (key.downArrow) {\n setSelectedIndex(prev => (prev < modelOptions.length - 1 ? prev + 1 : 0))\n }\n })\n\n return (\n <Box flexDirection=\"column\">\n <Header title=\"\uD83E\uDD16 Select Model\" subtitle=\"\" step={4} totalSteps={5}>\n <Box marginTop={1} flexDirection=\"column\">\n {modelOptions.map((model, index) => {\n const isSelected = index === selectedIndex\n const isInherit = model.id === null\n \n return (\n <Box key={model.id || 'inherit'} marginBottom={0}>\n <Box flexDirection=\"row\" gap={1}>\n <Text color={isSelected ? theme.primary : undefined}>\n {isSelected ? UI_ICONS.pointer : ' '}\n </Text>\n <Box flexDirection=\"column\" flexGrow={1}>\n <Box flexDirection=\"row\" gap={1}>\n <Text \n bold={isInherit}\n color={isSelected ? theme.primary : undefined}\n >\n {model.name}\n </Text>\n {!isInherit && (\n <Text dimColor>\n {model.provider} \u2022 {model.modelName}\n </Text>\n )}\n </Box>\n </Box>\n </Box>\n </Box>\n )\n })}\n </Box>\n </Header>\n <InstructionBar instructions=\"\u2191\u2193 Navigate \u2022 Enter Select\" />\n </Box>\n )\n}\n\n// Step 7: Color selection (using hex colors for display)\nfunction ColorStep({ createState, setCreateState, setModeState }: StepProps) {\n const theme = getTheme()\n const [selectedIndex, setSelectedIndex] = useState(0)\n \n // Color options without red/green due to display issues\n const colors = [\n { label: 'Default', value: null, displayColor: null },\n { label: 'Yellow', value: 'yellow', displayColor: 'yellow' },\n { label: 'Blue', value: 'blue', displayColor: 'blue' },\n { label: 'Magenta', value: 'magenta', displayColor: 'magenta' },\n { label: 'Cyan', value: 'cyan', displayColor: 'cyan' },\n { label: 'Gray', value: 'gray', displayColor: 'gray' },\n { label: 'White', value: 'white', displayColor: 'white' }\n ]\n \n const handleSelect = (value: string | null) => {\n setCreateState({ type: 'SET_SELECTED_COLOR', value: value })\n setModeState({ mode: 'create-confirm', location: createState.location })\n }\n \n useInput((input, key) => {\n if (key.return) {\n handleSelect(colors[selectedIndex].value)\n } else if (key.upArrow) {\n setSelectedIndex(prev => prev > 0 ? prev - 1 : colors.length - 1)\n } else if (key.downArrow) {\n setSelectedIndex(prev => prev < colors.length - 1 ? prev + 1 : 0)\n }\n })\n \n return (\n <Box flexDirection=\"column\">\n <Header title=\"\uD83C\uDFA8 Color Theme\" subtitle=\"\" step={5} totalSteps={5}>\n <Box marginTop={1} flexDirection=\"column\">\n <Box marginBottom={1}>\n <Text dimColor>Choose how your agent appears in the list:</Text>\n </Box>\n {colors.map((color, idx) => {\n const isSelected = idx === selectedIndex\n return (\n <Box key={idx} flexDirection=\"row\">\n <Text color={isSelected ? theme.primary : undefined}>\n {isSelected ? '\u276F ' : ' '}\n </Text>\n <Box minWidth={12}>\n <Text bold={isSelected} color={color.displayColor || undefined}>\n {color.label}\n </Text>\n </Box>\n </Box>\n )\n })}\n <Box marginTop={1} paddingLeft={2}>\n <Text>Preview: </Text>\n <Text bold color={colors[selectedIndex].displayColor || undefined}>\n {createState.agentType || 'your-agent'}\n </Text>\n </Box>\n </Box>\n </Header>\n <InstructionBar instructions=\"\u2191\u2193 Navigate \u2022 Enter Select\" />\n </Box>\n )\n}\n\n// Step 8: System prompt\nfunction PromptStep({ createState, setCreateState, setModeState }: StepProps) {\n const handleSubmit = () => {\n if (createState.systemPrompt.trim()) {\n setModeState({ mode: 'create-description', location: createState.location })\n }\n }\n \n return (\n <Box flexDirection=\"column\">\n <Header title=\"Create new agent\" subtitle=\"System prompt\" step={4} totalSteps={8}>\n <Box marginTop={1}>\n <MultilineTextInput\n value={createState.systemPrompt}\n onChange={(value) => setCreateState({ type: 'SET_SYSTEM_PROMPT', value })}\n placeholder=\"You are a helpful assistant that specializes in...\"\n onSubmit={handleSubmit}\n error={createState.error}\n rows={5}\n />\n </Box>\n </Header>\n <InstructionBar />\n </Box>\n )\n}\n\n// Step 9: Confirmation\ninterface ConfirmStepProps extends StepProps {\n tools: Tool[]\n onAgentCreated: (message: string) => void\n}\n\nfunction ConfirmStep({ createState, setCreateState, setModeState, tools, onAgentCreated }: ConfirmStepProps) {\n const [isCreating, setIsCreating] = useState(false)\n const theme = getTheme()\n \n const handleConfirm = async () => {\n setIsCreating(true)\n try {\n await saveAgent(\n createState.location!,\n createState.agentType,\n createState.whenToUse,\n createState.selectedTools,\n createState.systemPrompt,\n createState.selectedModel,\n createState.selectedColor || undefined\n )\n onAgentCreated(`Created agent: ${createState.agentType}`)\n } catch (error) {\n setCreateState({ type: 'SET_ERROR', value: (error as Error).message })\n setIsCreating(false)\n }\n }\n \n const validation = validateAgentConfig(createState)\n const toolNames = createState.selectedTools.includes('*') ? \n 'All tools' : \n createState.selectedTools.length > 0 ? \n createState.selectedTools.join(', ') : \n 'No tools'\n \n const handleEditInEditor = async () => {\n const filePath = createState.location === 'project' \n ? path.join(process.cwd(), '.claude', 'agents', `${createState.agentType}.md`)\n : path.join(os.homedir(), '.claude', 'agents', `${createState.agentType}.md`)\n \n try {\n // First, save the agent file\n await saveAgent(\n createState.location!,\n createState.agentType,\n createState.whenToUse,\n createState.selectedTools,\n createState.systemPrompt,\n createState.selectedModel,\n createState.selectedColor || undefined\n )\n \n // Then open it in editor\n const command = process.platform === 'win32' ? 'start' : \n process.platform === 'darwin' ? 'open' : 'xdg-open'\n await execAsync(`${command} \"${filePath}\"`)\n onAgentCreated(`Created agent: ${createState.agentType}`)\n } catch (error) {\n setCreateState({ type: 'SET_ERROR', value: (error as Error).message })\n }\n }\n\n useInput((input, key) => {\n if (isCreating) return\n \n if ((key.return || input === 's') && !isCreating) {\n handleConfirm()\n } else if (input === 'e') {\n handleEditInEditor()\n } else if (key.escape) {\n setModeState({ mode: \"create-color\", location: createState.location! })\n }\n })\n \n return (\n <Box flexDirection=\"column\">\n <Header title=\"\u2705 Review & Create\" subtitle=\"\">\n <Box flexDirection=\"column\" marginTop={1}>\n <Box marginBottom={1}>\n <Text bold color={theme.primary}>\uD83D\uDCCB Configuration</Text>\n </Box>\n \n <Box flexDirection=\"column\" gap={0}>\n <Text>\u2022 <Text bold>Agent ID:</Text> {createState.agentType}</Text>\n <Text>\u2022 <Text bold>Location:</Text> {createState.location === 'project' ? 'Project' : 'Personal'}</Text>\n <Text>\u2022 <Text bold>Tools:</Text> {toolNames.length > 50 ? toolNames.slice(0, 50) + '...' : toolNames}</Text>\n <Text>\u2022 <Text bold>Model:</Text> {getDisplayModelName(createState.selectedModel)}</Text>\n {createState.selectedColor && (\n <Text>\u2022 <Text bold>Color:</Text> <Text color={createState.selectedColor}>{createState.selectedColor}</Text></Text>\n )}\n </Box>\n \n <Box marginTop={1} marginBottom={1}>\n <Text bold color={theme.primary}>\uD83D\uDCDD Purpose</Text>\n </Box>\n <Box paddingLeft={1}>\n <Text>{createState.whenToUse}</Text>\n </Box>\n \n {validation.warnings.length > 0 && (\n <Box marginTop={1}>\n <Text><Text bold>Warnings:</Text></Text>\n {validation.warnings.map((warning, idx) => (\n <Fragment key={idx}>\n <Text color={theme.warning}> \u2022 {warning}</Text>\n </Fragment>\n ))}\n </Box>\n )}\n \n {createState.error && (\n <Box marginTop={1}>\n <Text color={theme.error}>\u2717 {createState.error}</Text>\n </Box>\n )}\n \n <Box marginTop={2}>\n {isCreating ? (\n <LoadingSpinner text=\"Creating agent...\" />\n ) : null}\n </Box>\n </Box>\n </Header>\n <InstructionBar instructions=\"Enter Save \u2022 E Edit \u2022 Esc Back\" />\n </Box>\n )\n}\n\n// Step 1: Location selection\ninterface LocationSelectProps {\n createState: CreateState\n setCreateState: React.Dispatch<any>\n setModeState: (state: ModeState) => void\n}\n\nfunction LocationSelect({ createState, setCreateState, setModeState }: LocationSelectProps) {\n const theme = getTheme()\n const [selectedIndex, setSelectedIndex] = useState(0)\n \n const options = [\n { label: \"\uD83D\uDCC1 Project\", value: \"project\", desc: \".claude/agents/\" },\n { label: \"\uD83C\uDFE0 Personal\", value: \"user\", desc: \"~/.claude/agents/\" }\n ]\n\n const handleChange = (value: string) => {\n setCreateState({ type: 'SET_LOCATION', value: value as AgentLocation })\n setCreateState({ type: 'SET_METHOD', value: 'generate' }) // Always use generate method\n setModeState({ mode: \"create-generate\", location: value as AgentLocation })\n }\n\n const handleCancel = () => {\n setModeState({ mode: \"list-agents\", location: \"all\" as AgentLocation })\n }\n\n useInput((input, key) => {\n if (key.escape) {\n handleCancel()\n } else if (key.return) {\n handleChange(options[selectedIndex].value)\n } else if (key.upArrow) {\n setSelectedIndex(prev => prev > 0 ? prev - 1 : options.length - 1)\n } else if (key.downArrow) {\n setSelectedIndex(prev => prev < options.length - 1 ? prev + 1 : 0)\n }\n })\n\n return (\n <Box flexDirection=\"column\">\n <Header title=\"\uD83D\uDCE6 Save Location\" subtitle=\"\" step={1} totalSteps={5}>\n <Box marginTop={1} flexDirection=\"column\">\n {options.map((opt, idx) => (\n <Box key={opt.value} flexDirection=\"column\" marginBottom={1}>\n <Text color={idx === selectedIndex ? theme.primary : undefined}>\n {idx === selectedIndex ? '\u276F ' : ' '}{opt.label}\n </Text>\n <Box marginLeft={3}>\n <Text dimColor>{opt.desc}</Text>\n </Box>\n </Box>\n ))}\n </Box>\n </Header>\n <InstructionBar instructions=\"\u2191\u2193 Navigate \u2022 Enter Select\" />\n </Box>\n )\n}\n\n// Step 2: Method selection\ninterface MethodSelectProps {\n createState: CreateState\n setCreateState: React.Dispatch<any>\n setModeState: (state: ModeState) => void\n}\n\nfunction MethodSelect({ createState, setCreateState, setModeState }: MethodSelectProps) {\n const [selectedIndex, setSelectedIndex] = useState(0)\n \n const options = [\n { label: \"Generate with Claude (recommended)\", value: \"generate\" },\n { label: \"Manual configuration\", value: \"manual\" }\n ]\n\n const handleChange = (value: string) => {\n setCreateState({ type: 'SET_METHOD', value: value as 'generate' | 'manual' })\n if (value === \"generate\") {\n setCreateState({ type: 'SET_IS_AI_GENERATED', value: true })\n setModeState({ mode: \"create-generate\", location: createState.location })\n } else {\n setCreateState({ type: 'SET_IS_AI_GENERATED', value: false })\n setModeState({ mode: \"create-type\", location: createState.location })\n }\n }\n\n const handleCancel = () => {\n setModeState({ mode: \"create-location\" })\n }\n\n useInput((input, key) => {\n if (key.escape) {\n handleCancel()\n } else if (key.return) {\n handleChange(options[selectedIndex].value)\n } else if (key.upArrow) {\n setSelectedIndex(prev => prev > 0 ? prev - 1 : options.length - 1)\n } else if (key.downArrow) {\n setSelectedIndex(prev => prev < options.length - 1 ? prev + 1 : 0)\n }\n })\n\n return (\n <Box flexDirection=\"column\">\n <Header title=\"Create new agent\" subtitle=\"Creation method\" step={2} totalSteps={9}>\n <Box marginTop={1}>\n <SelectList \n options={options}\n selectedIndex={selectedIndex}\n onChange={handleChange}\n onCancel={handleCancel}\n />\n </Box>\n </Header>\n <InstructionBar />\n </Box>\n )\n}\n\n// Agent menu for agent operations\ninterface AgentMenuProps {\n agent: AgentConfig\n setModeState: (state: ModeState) => void\n}\n\nfunction AgentMenu({ agent, setModeState }: AgentMenuProps) {\n const [selectedIndex, setSelectedIndex] = useState(0)\n \n const options = [\n { label: \"View details\", value: \"view\" },\n { label: \"Edit agent\", value: \"edit\", disabled: agent.location === 'built-in' },\n { label: \"Delete agent\", value: \"delete\", disabled: agent.location === 'built-in' }\n ]\n \n const availableOptions = options.filter(opt => !opt.disabled)\n \n const handleSelect = (value: string) => {\n switch (value) {\n case \"view\":\n setModeState({ mode: \"view-agent\", selectedAgent: agent })\n break\n case \"edit\":\n setModeState({ mode: \"edit-agent\", selectedAgent: agent })\n break\n case \"delete\":\n setModeState({ mode: \"delete-confirm\", selectedAgent: agent })\n break\n }\n }\n \n useInput((input, key) => {\n if (key.return) {\n handleSelect(availableOptions[selectedIndex].value)\n } else if (key.upArrow) {\n setSelectedIndex(prev => prev > 0 ? prev - 1 : availableOptions.length - 1)\n } else if (key.downArrow) {\n setSelectedIndex(prev => prev < availableOptions.length - 1 ? prev + 1 : 0)\n }\n })\n \n return (\n <Box flexDirection=\"column\">\n <Header title={`Agent: ${agent.agentType}`} subtitle={`${agent.location}`}>\n <Box marginTop={1}>\n <SelectList \n options={availableOptions}\n selectedIndex={selectedIndex}\n onChange={handleSelect}\n numbered={false}\n />\n </Box>\n </Header>\n <InstructionBar />\n </Box>\n )\n}\n\n// Edit menu for agent editing options\ninterface EditMenuProps {\n agent: AgentConfig\n setModeState: (state: ModeState) => void\n}\n\nfunction EditMenu({ agent, setModeState }: EditMenuProps) {\n const [selectedIndex, setSelectedIndex] = useState(0)\n const [isOpening, setIsOpening] = useState(false)\n const theme = getTheme()\n \n const options = [\n { label: \"Open in editor\", value: \"open-editor\" },\n { label: \"Edit tools\", value: \"edit-tools\" },\n { label: \"Edit model\", value: \"edit-model\" },\n { label: \"Edit color\", value: \"edit-color\" }\n ]\n \n const handleSelect = async (value: string) => {\n switch (value) {\n case \"open-editor\":\n setIsOpening(true)\n try {\n const filePath = getAgentFilePath(agent)\n await openInEditor(filePath)\n setModeState({ mode: \"agent-menu\", selectedAgent: agent })\n } catch (error) {\n console.error('Failed to open editor:', error)\n // TODO: Show error to user\n } finally {\n setIsOpening(false)\n }\n break\n case \"edit-tools\":\n setModeState({ mode: \"edit-tools\", selectedAgent: agent })\n break\n case \"edit-model\":\n setModeState({ mode: \"edit-model\", selectedAgent: agent })\n break\n case \"edit-color\":\n setModeState({ mode: \"edit-color\", selectedAgent: agent })\n break\n }\n }\n \n const handleBack = () => {\n setModeState({ mode: \"agent-menu\", selectedAgent: agent })\n }\n \n useInput((input, key) => {\n if (key.escape) {\n handleBack()\n } else if (key.return && !isOpening) {\n handleSelect(options[selectedIndex].value)\n } else if (key.upArrow) {\n setSelectedIndex(prev => prev > 0 ? prev - 1 : options.length - 1)\n } else if (key.downArrow) {\n setSelectedIndex(prev => prev < options.length - 1 ? prev + 1 : 0)\n }\n })\n \n if (isOpening) {\n return (\n <Box flexDirection=\"column\">\n <Header title={`Edit agent: ${agent.agentType}`} subtitle=\"Opening in editor...\">\n <Box marginTop={1}>\n <LoadingSpinner text=\"Opening file in editor...\" />\n </Box>\n </Header>\n <InstructionBar />\n </Box>\n )\n }\n \n return (\n <Box flexDirection=\"column\">\n <Header title={`Edit agent: ${agent.agentType}`} subtitle={`Location: ${agent.location}`}>\n <Box marginTop={1}>\n <SelectList \n options={options}\n selectedIndex={selectedIndex}\n onChange={handleSelect}\n numbered={false}\n />\n </Box>\n </Header>\n <InstructionBar instructions=\"\u2191\u2193 navigate \u00B7 Enter select \u00B7 Esc back\" />\n </Box>\n )\n}\n\n// Edit tools step\ninterface EditToolsStepProps {\n agent: AgentConfig\n tools: Tool[]\n setModeState: (state: ModeState) => void\n onAgentUpdated: (message: string, updated: AgentConfig) => void\n}\n\nfunction EditToolsStep({ agent, tools, setModeState, onAgentUpdated }: EditToolsStepProps) {\n const [selectedIndex, setSelectedIndex] = useState(0)\n \n // Initialize selected tools based on agent.tools\n const initialTools = Array.isArray(agent.tools) ? agent.tools : \n agent.tools === '*' ? tools.map(t => t.name) : []\n const [selectedTools, setSelectedTools] = useState<Set<string>>(new Set(initialTools))\n const [showAdvanced, setShowAdvanced] = useState(false)\n const [isUpdating, setIsUpdating] = useState(false)\n \n // Categorize tools\n const categorizedTools = useMemo(() => {\n const categories: Record<string, Tool[]> = {\n read: [],\n edit: [],\n execution: [],\n web: [],\n other: []\n }\n \n tools.forEach(tool => {\n let categorized = false\n \n // Check built-in categories\n for (const [category, toolNames] of Object.entries(TOOL_CATEGORIES)) {\n if (Array.isArray(toolNames) && toolNames.includes(tool.name)) {\n categories[category as keyof typeof categories]?.push(tool)\n categorized = true\n break\n }\n }\n \n if (!categorized) {\n categories.other.push(tool)\n }\n })\n \n return categories\n }, [tools])\n \n const allSelected = selectedTools.size === tools.length && tools.length > 0\n const readSelected = categorizedTools.read.every(tool => selectedTools.has(tool.name)) && categorizedTools.read.length > 0\n const editSelected = categorizedTools.edit.every(tool => selectedTools.has(tool.name)) && categorizedTools.edit.length > 0\n const execSelected = categorizedTools.execution.every(tool => selectedTools.has(tool.name)) && categorizedTools.execution.length > 0\n \n const options = [\n { id: 'continue', label: 'Save', isContinue: true },\n { id: 'separator1', label: '\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500', isSeparator: true },\n { id: 'all', label: `${allSelected ? UI_ICONS.checkboxOn : UI_ICONS.checkboxOff} All tools`, isAll: true },\n { id: 'read', label: `${readSelected ? UI_ICONS.checkboxOn : UI_ICONS.checkboxOff} Read-only tools`, isCategory: true },\n { id: 'edit', label: `${editSelected ? UI_ICONS.checkboxOn : UI_ICONS.checkboxOff} Edit tools`, isCategory: true },\n { id: 'execution', label: `${execSelected ? UI_ICONS.checkboxOn : UI_ICONS.checkboxOff} Execution tools`, isCategory: true },\n { id: 'separator2', label: '\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500', isSeparator: true },\n { id: 'advanced', label: `[ ${showAdvanced ? 'Hide' : 'Show'} advanced options ]`, isAdvancedToggle: true },\n ...(showAdvanced ? tools.map(tool => ({\n id: tool.name,\n label: `${selectedTools.has(tool.name) ? UI_ICONS.checkboxOn : UI_ICONS.checkboxOff} ${tool.name}`,\n isTool: true\n })) : [])\n ]\n \n const handleSave = async () => {\n setIsUpdating(true)\n try {\n // Type-safe tools conversion for updateAgent\n const toolsArray: string[] | '*' = allSelected ? '*' : Array.from(selectedTools)\n await updateAgent(agent, agent.whenToUse, toolsArray, agent.systemPrompt, agent.color, (agent as any).model)\n \n // Clear cache and reload fresh agent data from file system\n clearAgentCache()\n const freshAgents = await getActiveAgents()\n const updatedAgent = freshAgents.find(a => a.agentType === agent.agentType)\n \n if (updatedAgent) {\n onAgentUpdated(`Updated tools for agent: ${agent.agentType}`, updatedAgent)\n setModeState({ mode: \"edit-agent\", selectedAgent: updatedAgent })\n } else {\n console.error('Failed to find updated agent after save')\n // Fallback to manual update\n const fallbackAgent: AgentConfig = {\n ...agent,\n tools: toolsArray.length === 1 && toolsArray[0] === '*' ? '*' : toolsArray,\n }\n onAgentUpdated(`Updated tools for agent: ${agent.agentType}`, fallbackAgent)\n setModeState({ mode: \"edit-agent\", selectedAgent: fallbackAgent })\n }\n } catch (error) {\n console.error('Failed to update agent tools:', error)\n // TODO: Show error to user\n } finally {\n setIsUpdating(false)\n }\n }\n \n const handleSelect = () => {\n const option = options[selectedIndex] as any // Type assertion for union type\n if (!option) return\n if (option.isSeparator) return\n \n if (option.isContinue) {\n handleSave()\n } else if (option.isAdvancedToggle) {\n setShowAdvanced(!showAdvanced)\n } else if (option.isAll) {\n if (allSelected) {\n setSelectedTools(new Set())\n } else {\n setSelectedTools(new Set(tools.map(t => t.name)))\n }\n } else if (option.isCategory) {\n const categoryName = option.id as keyof typeof categorizedTools\n const categoryTools = categorizedTools[categoryName] || []\n const newSelected = new Set(selectedTools)\n \n const categorySelected = categoryTools.every(tool => selectedTools.has(tool.name))\n if (categorySelected) {\n categoryTools.forEach(tool => newSelected.delete(tool.name))\n } else {\n categoryTools.forEach(tool => newSelected.add(tool.name))\n }\n setSelectedTools(newSelected)\n } else if (option.isTool) {\n const newSelected = new Set(selectedTools)\n if (newSelected.has(option.id)) {\n newSelected.delete(option.id)\n } else {\n newSelected.add(option.id)\n }\n setSelectedTools(newSelected)\n }\n }\n \n useInput((input, key) => {\n if (key.escape) {\n setModeState({ mode: \"edit-agent\", selectedAgent: agent })\n } else if (key.return && !isUpdating) {\n handleSelect()\n } else if (key.upArrow) {\n setSelectedIndex(prev => {\n let newIndex = prev > 0 ? prev - 1 : options.length - 1\n // Skip separators when going up\n while (options[newIndex] && (options[newIndex] as any).isSeparator) {\n newIndex = newIndex > 0 ? newIndex - 1 : options.length - 1\n }\n return newIndex\n })\n } else if (key.downArrow) {\n setSelectedIndex(prev => {\n let newIndex = prev < options.length - 1 ? prev + 1 : 0\n // Skip separators when going down\n while (options[newIndex] && (options[newIndex] as any).isSeparator) {\n newIndex = newIndex < options.length - 1 ? newIndex + 1 : 0\n }\n return newIndex\n })\n }\n })\n \n if (isUpdating) {\n return (\n <Box flexDirection=\"column\">\n <Header title={`Edit agent: ${agent.agentType}`}>\n <Box marginTop={1}>\n <LoadingSpinner text=\"Updating agent tools...\" />\n </Box>\n </Header>\n <InstructionBar />\n </Box>\n )\n }\n \n return (\n <Box flexDirection=\"column\">\n <Header title={`Edit agent: ${agent.agentType}`}>\n <Box flexDirection=\"column\" marginTop={1}>\n {options.map((option, idx) => {\n const isSelected = idx === selectedIndex\n const isContinue = 'isContinue' in option && option.isContinue\n const isAdvancedToggle = (option as any).isAdvancedToggle\n const isSeparator = (option as any).isSeparator\n \n return (\n <Box key={option.id}>\n <Text \n color={isSelected && !isSeparator ? 'cyan' : isSeparator ? 'gray' : undefined}\n bold={isContinue}\n dimColor={isSeparator}\n >\n {isSeparator ? \n option.label : \n `${isSelected ? `${UI_ICONS.pointer} ` : ' '}${isContinue || isAdvancedToggle ? option.label : option.label}`\n }\n </Text>\n {(option as any).isTool && isSelected && tools.find(t => t.name === option.id)?.description && (\n <Box marginLeft={4}>\n <Text dimColor>{tools.find(t => t.name === option.id)?.description}</Text>\n </Box>\n )}\n </Box>\n )\n })}\n \n <Box marginTop={1}>\n <Text dimColor>\n {allSelected ? \n 'All tools selected' : \n `${selectedTools.size} of ${tools.length} tools selected`}\n </Text>\n </Box>\n </Box>\n </Header>\n <InstructionBar instructions=\"Enter toggle selection \u00B7 \u2191\u2193 navigate \u00B7 Esc back\" />\n </Box>\n )\n}\n\n// Edit model step\ninterface EditModelStepProps {\n agent: AgentConfig\n setModeState: (state: ModeState) => void\n onAgentUpdated: (message: string, updated: AgentConfig) => void\n}\n\nfunction EditModelStep({ agent, setModeState, onAgentUpdated }: EditModelStepProps) {\n const manager = getModelManager()\n const profiles = manager.getActiveModelProfiles()\n const currentModel = (agent as any).model || null\n \n // Build model options array\n const modelOptions = [\n { id: null, name: 'Inherit from parent', description: 'Use the model from task configuration' },\n ...profiles.map((p: any) => ({ id: p.modelName, name: p.name, description: `${p.provider || 'provider'} \u00B7 ${p.modelName}` }))\n ]\n\n // Find the index of current model\n const defaultIndex = modelOptions.findIndex(m => m.id === currentModel)\n const [selectedIndex, setSelectedIndex] = useState(defaultIndex >= 0 ? defaultIndex : 0)\n const [isUpdating, setIsUpdating] = useState(false)\n\n const handleSave = async (modelId: string | null) => {\n setIsUpdating(true)\n try {\n const modelValue = modelId === null ? undefined : modelId\n await updateAgent(agent, agent.whenToUse, agent.tools, agent.systemPrompt, agent.color, modelValue)\n \n // Clear cache and reload fresh agent data from file system\n clearAgentCache()\n const freshAgents = await getActiveAgents()\n const updatedAgent = freshAgents.find(a => a.agentType === agent.agentType)\n \n if (updatedAgent) {\n onAgentUpdated(`Updated model for agent: ${agent.agentType}`, updatedAgent)\n setModeState({ mode: 'edit-agent', selectedAgent: updatedAgent })\n } else {\n console.error('Failed to find updated agent after save')\n // Fallback to manual update\n const fallbackAgent: AgentConfig = { ...agent }\n if (modelValue) {\n (fallbackAgent as any).model = modelValue\n } else {\n delete (fallbackAgent as any).model\n }\n onAgentUpdated(`Updated model for agent: ${agent.agentType}`, fallbackAgent)\n setModeState({ mode: 'edit-agent', selectedAgent: fallbackAgent })\n }\n } catch (error) {\n console.error('Failed to update agent model:', error)\n } finally {\n setIsUpdating(false)\n }\n }\n\n useInput((input, key) => {\n if (key.escape) {\n setModeState({ mode: 'edit-agent', selectedAgent: agent })\n } else if (key.return && !isUpdating) {\n handleSave(modelOptions[selectedIndex].id)\n } else if (key.upArrow) {\n setSelectedIndex(prev => (prev > 0 ? prev - 1 : modelOptions.length - 1))\n } else if (key.downArrow) {\n setSelectedIndex(prev => (prev < modelOptions.length - 1 ? prev + 1 : 0))\n }\n })\n\n if (isUpdating) {\n return (\n <Box flexDirection=\"column\">\n <Header title={`Edit agent: ${agent.agentType}`}>\n <Box marginTop={1}>\n <LoadingSpinner text=\"Updating agent model...\" />\n </Box>\n </Header>\n <InstructionBar />\n </Box>\n )\n }\n\n return (\n <Box flexDirection=\"column\">\n <Header title={`Edit agent: ${agent.agentType}`} subtitle=\"Model determines the agent's reasoning capabilities and speed.\">\n <Box marginTop={2}>\n <SelectList\n options={modelOptions.map((m, i) => ({ label: `${i + 1}. ${m.name}${m.description ? `\\n${m.description}` : ''}`, value: m.id }))}\n selectedIndex={selectedIndex}\n onChange={(val) => handleSave(val)}\n numbered={false}\n />\n </Box>\n </Header>\n <InstructionBar instructions=\"\u2191\u2193 navigate \u00B7 Enter select \u00B7 Esc back\" />\n </Box>\n )\n}\n\n// Edit color step\ninterface EditColorStepProps {\n agent: AgentConfig\n setModeState: (state: ModeState) => void\n onAgentUpdated: (message: string, updated: AgentConfig) => void\n}\n\nfunction EditColorStep({ agent, setModeState, onAgentUpdated }: EditColorStepProps) {\n const currentColor = agent.color || null\n \n // Define color options (removed red/green due to display issues)\n const colors = [\n { label: 'Automatic color', value: null },\n { label: 'Yellow', value: 'yellow' },\n { label: 'Blue', value: 'blue' },\n { label: 'Magenta', value: 'magenta' },\n { label: 'Cyan', value: 'cyan' },\n { label: 'Gray', value: 'gray' },\n { label: 'White', value: 'white' }\n ]\n \n // Find current color index\n const defaultIndex = colors.findIndex(color => color.value === currentColor)\n const [selectedIndex, setSelectedIndex] = useState(defaultIndex >= 0 ? defaultIndex : 0)\n const [isUpdating, setIsUpdating] = useState(false)\n \n const handleSave = async (color: string | null) => {\n setIsUpdating(true)\n try {\n const colorValue = color === null ? undefined : color\n await updateAgent(agent, agent.whenToUse, agent.tools, agent.systemPrompt, colorValue, (agent as any).model)\n \n // Clear cache and reload fresh agent data from file system\n clearAgentCache()\n const freshAgents = await getActiveAgents()\n const updatedAgent = freshAgents.find(a => a.agentType === agent.agentType)\n \n if (updatedAgent) {\n onAgentUpdated(`Updated color for agent: ${agent.agentType}`, updatedAgent)\n setModeState({ mode: \"edit-agent\", selectedAgent: updatedAgent })\n } else {\n console.error('Failed to find updated agent after save')\n // Fallback to manual update\n const fallbackAgent: AgentConfig = { ...agent, ...(colorValue ? { color: colorValue } : { color: undefined }) }\n onAgentUpdated(`Updated color for agent: ${agent.agentType}`, fallbackAgent)\n setModeState({ mode: \"edit-agent\", selectedAgent: fallbackAgent })\n }\n } catch (error) {\n console.error('Failed to update agent color:', error)\n // TODO: Show error to user\n } finally {\n setIsUpdating(false)\n }\n }\n \n useInput((input, key) => {\n if (key.escape) {\n setModeState({ mode: \"edit-agent\", selectedAgent: agent })\n } else if (key.return && !isUpdating) {\n handleSave(colors[selectedIndex].value)\n } else if (key.upArrow) {\n setSelectedIndex(prev => prev > 0 ? prev - 1 : colors.length - 1)\n } else if (key.downArrow) {\n setSelectedIndex(prev => prev < colors.length - 1 ? prev + 1 : 0)\n }\n })\n \n if (isUpdating) {\n return (\n <Box flexDirection=\"column\">\n <Header title={`Edit agent: ${agent.agentType}`}>\n <Box marginTop={1}>\n <LoadingSpinner text=\"Updating agent color...\" />\n </Box>\n </Header>\n <InstructionBar />\n </Box>\n )\n }\n \n const selectedColor = colors[selectedIndex]\n const previewColor = selectedColor.value || undefined\n \n return (\n <Box flexDirection=\"column\">\n <Header title={`Edit agent: ${agent.agentType}`} subtitle=\"Choose background color\">\n <Box flexDirection=\"column\" marginTop={1}>\n {colors.map((color, index) => {\n const isSelected = index === selectedIndex\n const isCurrent = color.value === currentColor\n \n return (\n <Box key={color.value || 'automatic'}>\n <Text color={isSelected ? 'cyan' : undefined}>\n {isSelected ? '\u276F ' : ' '}\n </Text>\n <Text color={color.value || undefined}>\u25CF</Text>\n <Text>\n {' '}{color.label}\n {isCurrent && (\n <Text color=\"green\"> \u2714</Text>\n )}\n </Text>\n </Box>\n )\n })}\n \n <Box marginTop={2}>\n <Text>Preview: </Text>\n <Text color={previewColor}>{agent.agentType}</Text>\n </Box>\n </Box>\n </Header>\n <InstructionBar instructions=\"\u2191\u2193 navigate \u00B7 Enter select \u00B7 Esc back\" />\n </Box>\n )\n}\n\n// View agent details\ninterface ViewAgentProps {\n agent: AgentConfig\n tools: Tool[]\n setModeState: (state: ModeState) => void\n}\n\nfunction ViewAgent({ agent, tools, setModeState }: ViewAgentProps) {\n const theme = getTheme()\n const agentTools = Array.isArray(agent.tools) ? agent.tools : []\n const hasAllTools = agent.tools === \"*\" || agentTools.includes(\"*\")\n const locationPath = agent.location === 'user'\n ? `~/.claude/agents/${agent.agentType}.md`\n : agent.location === 'project'\n ? `.claude/agents/${agent.agentType}.md`\n : '(built-in)'\n const displayModel = getDisplayModelName((agent as any).model || null)\n \n const allowedTools = useMemo(() => {\n if (hasAllTools) return tools\n \n return tools.filter(tool => \n agentTools.some(allowedTool => {\n if (allowedTool.includes(\"*\")) {\n const prefix = allowedTool.replace(\"*\", \"\")\n return tool.name.startsWith(prefix)\n }\n return tool.name === allowedTool\n })\n )\n }, [tools, agentTools, hasAllTools])\n \n return (\n <Box flexDirection=\"column\">\n <Header title={`Agent: ${agent.agentType}`} subtitle=\"Details\">\n <Box flexDirection=\"column\" marginTop={1}>\n <Text><Text bold>Type:</Text> {agent.agentType}</Text>\n <Text><Text bold>Location:</Text> {agent.location} {locationPath !== '(built-in)' ? `\u00B7 ${locationPath}` : ''}</Text>\n <Text><Text bold>Description:</Text> {agent.whenToUse}</Text>\n <Text><Text bold>Model:</Text> {displayModel}</Text>\n <Text><Text bold>Color:</Text> {agent.color || 'auto'}</Text>\n \n <Box marginTop={1}>\n <Text bold>Tools:</Text>\n </Box>\n {hasAllTools ? (\n <Text color={theme.secondary}>All tools ({tools.length} available)</Text>\n ) : (\n <Box flexDirection=\"column\" paddingLeft={2}>\n {allowedTools.map(tool => (\n <Fragment key={tool.name}>\n <Text color={theme.secondary}>\u2022 {tool.name}</Text>\n </Fragment>\n ))}\n </Box>\n )}\n \n <Box marginTop={1}>\n <Text bold>System Prompt:</Text>\n </Box>\n <Box paddingLeft={2}>\n <Text>{agent.systemPrompt}</Text>\n </Box>\n </Box>\n </Header>\n <InstructionBar />\n </Box>\n )\n}\n\n// Edit agent component\ninterface EditAgentProps {\n agent: AgentConfig\n tools: Tool[]\n setModeState: (state: ModeState) => void\n onAgentUpdated: (message: string) => void\n}\n\nfunction EditAgent({ agent, tools, setModeState, onAgentUpdated }: EditAgentProps) {\n const theme = getTheme()\n const [currentStep, setCurrentStep] = useState<'description' | 'tools' | 'prompt' | 'confirm'>('description')\n const [isUpdating, setIsUpdating] = useState(false)\n \n // \u7F16\u8F91\u72B6\u6001\n const [editedDescription, setEditedDescription] = useState(agent.whenToUse)\n const [editedTools, setEditedTools] = useState<string[]>(\n Array.isArray(agent.tools) ? agent.tools : agent.tools === '*' ? ['*'] : []\n )\n const [editedPrompt, setEditedPrompt] = useState(agent.systemPrompt)\n const [error, setError] = useState<string | null>(null)\n \n const handleSave = async () => {\n setIsUpdating(true)\n try {\n await updateAgent(agent, editedDescription, editedTools, editedPrompt, agent.color)\n clearAgentCache()\n onAgentUpdated(`Updated agent: ${agent.agentType}`)\n } catch (error) {\n setError((error as Error).message)\n setIsUpdating(false)\n }\n }\n \n const renderStepContent = () => {\n switch (currentStep) {\n case 'description':\n return (\n <Box flexDirection=\"column\">\n <Text bold>Edit Description:</Text>\n <Box marginTop={1}>\n <MultilineTextInput\n value={editedDescription}\n onChange={setEditedDescription}\n placeholder=\"Describe when to use this agent...\"\n onSubmit={() => setCurrentStep('tools')}\n error={error}\n rows={4}\n />\n </Box>\n </Box>\n )\n \n case 'tools':\n return (\n <Box flexDirection=\"column\">\n <Text bold>Edit Tools:</Text>\n <Box marginTop={1}>\n <ToolsStep\n createState={{\n selectedTools: editedTools,\n } as CreateState}\n setCreateState={(action) => {\n if (action.type === 'SET_SELECTED_TOOLS') {\n setEditedTools(action.value)\n setCurrentStep('prompt')\n }\n }}\n setModeState={() => {}}\n tools={tools}\n />\n </Box>\n </Box>\n )\n \n case 'prompt':\n return (\n <Box flexDirection=\"column\">\n <Text bold>Edit System Prompt:</Text>\n <Box marginTop={1}>\n <MultilineTextInput\n value={editedPrompt}\n onChange={setEditedPrompt}\n placeholder=\"System prompt for the agent...\"\n onSubmit={() => setCurrentStep('confirm')}\n error={error}\n rows={5}\n />\n </Box>\n </Box>\n )\n \n case 'confirm':\n const validation = validateAgentConfig({\n agentType: agent.agentType,\n whenToUse: editedDescription,\n systemPrompt: editedPrompt,\n selectedTools: editedTools\n })\n \n return (\n <Box flexDirection=\"column\">\n <Text bold>Confirm Changes:</Text>\n <Box flexDirection=\"column\" marginTop={1}>\n <Text><Text bold>Agent:</Text> {agent.agentType}</Text>\n <Text><Text bold>Description:</Text> {editedDescription}</Text>\n <Text><Text bold>Tools:</Text> {editedTools.includes('*') ? 'All tools' : editedTools.join(', ')}</Text>\n <Text><Text bold>System Prompt:</Text> {editedPrompt.slice(0, 100)}{editedPrompt.length > 100 ? '...' : ''}</Text>\n \n {validation.warnings.length > 0 && (\n <Box marginTop={1}>\n {validation.warnings.map((warning, idx) => (\n <Fragment key={idx}>\n <Text color={theme.warning}>\u26A0 {warning}</Text>\n </Fragment>\n ))}\n </Box>\n )}\n \n {error && (\n <Box marginTop={1}>\n <Text color={theme.error}>\u2717 {error}</Text>\n </Box>\n )}\n \n <Box marginTop={2}>\n {isUpdating ? (\n <LoadingSpinner text=\"Updating agent...\" />\n ) : (\n <Text>Press Enter to save changes</Text>\n )}\n </Box>\n </Box>\n </Box>\n )\n }\n }\n \n useInput((input, key) => {\n if (key.escape) {\n if (currentStep === 'description') {\n setModeState({ mode: \"agent-menu\", selectedAgent: agent })\n } else {\n // \u8FD4\u56DE\u4E0A\u4E00\u6B65\n const steps: Array<typeof currentStep> = ['description', 'tools', 'prompt', 'confirm']\n const currentIndex = steps.indexOf(currentStep)\n if (currentIndex > 0) {\n setCurrentStep(steps[currentIndex - 1])\n }\n }\n return\n }\n \n if (key.return && currentStep === 'confirm' && !isUpdating) {\n handleSave()\n }\n })\n \n return (\n <Box flexDirection=\"column\">\n <Header title={`Edit Agent: ${agent.agentType}`} subtitle={`Step ${['description', 'tools', 'prompt', 'confirm'].indexOf(currentStep) + 1}/4`}>\n <Box marginTop={1}>\n {renderStepContent()}\n </Box>\n </Header>\n <InstructionBar \n instructions={currentStep === 'confirm' ? \n \"Press Enter to save \u00B7 Esc to go back\" :\n \"Enter to continue \u00B7 Esc to go back\"\n }\n />\n </Box>\n )\n}\n\n// Delete confirmation\ninterface DeleteConfirmProps {\n agent: AgentConfig\n setModeState: (state: ModeState) => void\n onAgentDeleted: (message: string) => void\n}\n\nfunction DeleteConfirm({ agent, setModeState, onAgentDeleted }: DeleteConfirmProps) {\n const [isDeleting, setIsDeleting] = useState(false)\n const [selected, setSelected] = useState(false) // false = No, true = Yes\n \n const handleConfirm = async () => {\n if (selected) {\n setIsDeleting(true)\n try {\n await deleteAgent(agent)\n clearAgentCache()\n onAgentDeleted(`Deleted agent: ${agent.agentType}`)\n } catch (error) {\n console.error('Failed to delete agent:', error)\n setIsDeleting(false)\n // TODO: Show error to user\n }\n } else {\n setModeState({ mode: \"agent-menu\", selectedAgent: agent })\n }\n }\n \n useInput((input, key) => {\n if (key.return) {\n handleConfirm()\n } else if (key.leftArrow || key.rightArrow || key.tab) {\n setSelected(!selected)\n }\n })\n \n if (isDeleting) {\n return (\n <Box flexDirection=\"column\">\n <Header title=\"Delete agent\" subtitle=\"Deleting...\">\n <Box marginTop={1}>\n <LoadingSpinner text=\"Deleting agent...\" />\n </Box>\n </Header>\n <InstructionBar />\n </Box>\n )\n }\n \n return (\n <Box flexDirection=\"column\">\n <Header title=\"Delete agent\" subtitle={`Delete \"${agent.agentType}\"?`}>\n <Box marginTop={1}>\n <Text>This action cannot be undone. The agent file will be permanently deleted.</Text>\n <Box marginTop={2} gap={3}>\n <Text color={!selected ? 'cyan' : undefined}>\n {!selected ? `${UI_ICONS.pointer} ` : ' '}No\n </Text>\n <Text color={selected ? 'red' : undefined}>\n {selected ? `${UI_ICONS.pointer} ` : ' '}Yes, delete\n </Text>\n </Box>\n </Box>\n </Header>\n <InstructionBar />\n </Box>\n )\n}\n\nexport default {\n name: 'agents',\n description: 'Manage agent configurations',\n type: 'local-jsx' as const,\n isEnabled: true,\n isHidden: false,\n \n async call(onExit: (message?: string) => void) {\n return <AgentsUI onExit={onExit} />\n },\n \n userFacingName() {\n return 'agents'\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["path", "error"]
7
- }
@@ -1,36 +0,0 @@
1
- import {
2
- getCurrentProjectConfig as getCurrentProjectConfigDefault,
3
- saveCurrentProjectConfig as saveCurrentProjectConfigDefault
4
- } from "../utils/config.js";
5
- const defaultConfigHandler = {
6
- getCurrentProjectConfig: getCurrentProjectConfigDefault,
7
- saveCurrentProjectConfig: saveCurrentProjectConfigDefault
8
- };
9
- function handleListApprovedTools(cwd, projectConfigHandler = defaultConfigHandler) {
10
- const projectConfig = projectConfigHandler.getCurrentProjectConfig();
11
- return `Allowed tools for ${cwd}:
12
- ${projectConfig.allowedTools.join("\n")}`;
13
- }
14
- function handleRemoveApprovedTool(tool, projectConfigHandler = defaultConfigHandler) {
15
- const projectConfig = projectConfigHandler.getCurrentProjectConfig();
16
- const originalToolCount = projectConfig.allowedTools.length;
17
- const updatedAllowedTools = projectConfig.allowedTools.filter((t) => t !== tool);
18
- if (originalToolCount !== updatedAllowedTools.length) {
19
- projectConfig.allowedTools = updatedAllowedTools;
20
- projectConfigHandler.saveCurrentProjectConfig(projectConfig);
21
- return {
22
- success: true,
23
- message: `Removed ${tool} from the list of approved tools`
24
- };
25
- } else {
26
- return {
27
- success: false,
28
- message: `${tool} was not in the list of approved tools`
29
- };
30
- }
31
- }
32
- export {
33
- handleListApprovedTools,
34
- handleRemoveApprovedTool
35
- };
36
- //# sourceMappingURL=approvedTools.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/commands/approvedTools.ts"],
4
- "sourcesContent": ["import {\n ProjectConfig,\n getCurrentProjectConfig as getCurrentProjectConfigDefault,\n saveCurrentProjectConfig as saveCurrentProjectConfigDefault,\n} from '../utils/config.js'\n\nexport type ProjectConfigHandler = {\n getCurrentProjectConfig: () => ProjectConfig\n saveCurrentProjectConfig: (config: ProjectConfig) => void\n}\n\n// Default config handler using the real implementation\nconst defaultConfigHandler: ProjectConfigHandler = {\n getCurrentProjectConfig: getCurrentProjectConfigDefault,\n saveCurrentProjectConfig: saveCurrentProjectConfigDefault,\n}\n\n/**\n * Handler for the 'approved-tools list' command\n */\nexport function handleListApprovedTools(\n cwd: string,\n projectConfigHandler: ProjectConfigHandler = defaultConfigHandler,\n): string {\n const projectConfig = projectConfigHandler.getCurrentProjectConfig()\n return `Allowed tools for ${cwd}:\\n${projectConfig.allowedTools.join('\\n')}`\n}\n\n/**\n * Handler for the 'approved-tools remove' command\n */\nexport function handleRemoveApprovedTool(\n tool: string,\n projectConfigHandler: ProjectConfigHandler = defaultConfigHandler,\n): { success: boolean; message: string } {\n const projectConfig = projectConfigHandler.getCurrentProjectConfig()\n const originalToolCount = projectConfig.allowedTools.length\n const updatedAllowedTools = projectConfig.allowedTools.filter(t => t !== tool)\n\n if (originalToolCount !== updatedAllowedTools.length) {\n projectConfig.allowedTools = updatedAllowedTools\n projectConfigHandler.saveCurrentProjectConfig(projectConfig)\n return {\n success: true,\n message: `Removed ${tool} from the list of approved tools`,\n }\n } else {\n return {\n success: false,\n message: `${tool} was not in the list of approved tools`,\n }\n }\n}\n"],
5
- "mappings": "AAAA;AAAA,EAEE,2BAA2B;AAAA,EAC3B,4BAA4B;AAAA,OACvB;AAQP,MAAM,uBAA6C;AAAA,EACjD,yBAAyB;AAAA,EACzB,0BAA0B;AAC5B;AAKO,SAAS,wBACd,KACA,uBAA6C,sBACrC;AACR,QAAM,gBAAgB,qBAAqB,wBAAwB;AACnE,SAAO,qBAAqB,GAAG;AAAA,EAAM,cAAc,aAAa,KAAK,IAAI,CAAC;AAC5E;AAKO,SAAS,yBACd,MACA,uBAA6C,sBACN;AACvC,QAAM,gBAAgB,qBAAqB,wBAAwB;AACnE,QAAM,oBAAoB,cAAc,aAAa;AACrD,QAAM,sBAAsB,cAAc,aAAa,OAAO,OAAK,MAAM,IAAI;AAE7E,MAAI,sBAAsB,oBAAoB,QAAQ;AACpD,kBAAc,eAAe;AAC7B,yBAAqB,yBAAyB,aAAa;AAC3D,WAAO;AAAA,MACL,SAAS;AAAA,MACT,SAAS,WAAW,IAAI;AAAA,IAC1B;AAAA,EACF,OAAO;AACL,WAAO;AAAA,MACL,SAAS;AAAA,MACT,SAAS,GAAG,IAAI;AAAA,IAClB;AAAA,EACF;AACF;",
6
- "names": []
7
- }
@@ -1,21 +0,0 @@
1
- import { Bug } from "../components/Bug.js";
2
- import * as React from "react";
3
- import { PRODUCT_NAME } from "../constants/product.js";
4
- const bug = {
5
- type: "local-jsx",
6
- name: "bug",
7
- description: `Submit feedback about ${PRODUCT_NAME}`,
8
- isEnabled: true,
9
- isHidden: false,
10
- async call(onDone) {
11
- return /* @__PURE__ */ React.createElement(Bug, { onDone });
12
- },
13
- userFacingName() {
14
- return "bug";
15
- }
16
- };
17
- var bug_default = bug;
18
- export {
19
- bug_default as default
20
- };
21
- //# sourceMappingURL=bug.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/commands/bug.tsx"],
4
- "sourcesContent": ["import { Command } from '../commands'\nimport { Bug } from '../components/Bug'\nimport * as React from 'react'\nimport { PRODUCT_NAME } from '../constants/product'\n\nconst bug = {\n type: 'local-jsx',\n name: 'bug',\n description: `Submit feedback about ${PRODUCT_NAME}`,\n isEnabled: true,\n isHidden: false,\n async call(onDone) {\n return <Bug onDone={onDone} />\n },\n userFacingName() {\n return 'bug'\n },\n} satisfies Command\n\nexport default bug\n"],
5
- "mappings": "AACA,SAAS,WAAW;AACpB,YAAY,WAAW;AACvB,SAAS,oBAAoB;AAE7B,MAAM,MAAM;AAAA,EACV,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa,yBAAyB,YAAY;AAAA,EAClD,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM,KAAK,QAAQ;AACjB,WAAO,oCAAC,OAAI,QAAgB;AAAA,EAC9B;AAAA,EACA,iBAAiB;AACf,WAAO;AAAA,EACT;AACF;AAEA,IAAO,cAAQ;",
6
- "names": []
7
- }
@@ -1,37 +0,0 @@
1
- import { getMessagesSetter } from "../messages.js";
2
- import { getContext } from "../context.js";
3
- import { getCodeStyle } from "../utils/style.js";
4
- import { clearTerminal } from "../utils/terminal.js";
5
- import { getOriginalCwd, setCwd } from "../utils/state.js";
6
- import { resetReminderSession } from "../services/systemReminder.js";
7
- import { resetFileFreshnessSession } from "../services/fileFreshness.js";
8
- async function clearConversation(context) {
9
- await clearTerminal();
10
- getMessagesSetter()([]);
11
- context.setForkConvoWithMessagesOnTheNextRender([]);
12
- getContext.cache.clear?.();
13
- getCodeStyle.cache.clear?.();
14
- await setCwd(getOriginalCwd());
15
- resetReminderSession();
16
- resetFileFreshnessSession();
17
- }
18
- const clear = {
19
- type: "local",
20
- name: "clear",
21
- description: "Clear conversation history and free up context",
22
- isEnabled: true,
23
- isHidden: false,
24
- async call(_, context) {
25
- clearConversation(context);
26
- return "";
27
- },
28
- userFacingName() {
29
- return "clear";
30
- }
31
- };
32
- var clear_default = clear;
33
- export {
34
- clearConversation,
35
- clear_default as default
36
- };
37
- //# sourceMappingURL=clear.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/commands/clear.ts"],
4
- "sourcesContent": ["import { Command } from '../commands'\nimport { getMessagesSetter } from '../messages'\nimport { getContext } from '../context'\nimport { getCodeStyle } from '../utils/style'\nimport { clearTerminal } from '../utils/terminal'\nimport { getOriginalCwd, setCwd } from '../utils/state'\nimport { Message } from '../query'\nimport { resetReminderSession } from '../services/systemReminder'\nimport { resetFileFreshnessSession } from '../services/fileFreshness'\n\nexport async function clearConversation(context: {\n setForkConvoWithMessagesOnTheNextRender: (\n forkConvoWithMessages: Message[],\n ) => void\n}) {\n await clearTerminal()\n getMessagesSetter()([])\n context.setForkConvoWithMessagesOnTheNextRender([])\n getContext.cache.clear?.()\n getCodeStyle.cache.clear?.()\n await setCwd(getOriginalCwd())\n\n // Reset reminder and file freshness sessions to clean up state\n resetReminderSession()\n resetFileFreshnessSession()\n}\n\nconst clear = {\n type: 'local',\n name: 'clear',\n description: 'Clear conversation history and free up context',\n isEnabled: true,\n isHidden: false,\n async call(_, context) {\n clearConversation(context)\n return ''\n },\n userFacingName() {\n return 'clear'\n },\n} satisfies Command\n\nexport default clear\n"],
5
- "mappings": "AACA,SAAS,yBAAyB;AAClC,SAAS,kBAAkB;AAC3B,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB,cAAc;AAEvC,SAAS,4BAA4B;AACrC,SAAS,iCAAiC;AAE1C,eAAsB,kBAAkB,SAIrC;AACD,QAAM,cAAc;AACpB,oBAAkB,EAAE,CAAC,CAAC;AACtB,UAAQ,wCAAwC,CAAC,CAAC;AAClD,aAAW,MAAM,QAAQ;AACzB,eAAa,MAAM,QAAQ;AAC3B,QAAM,OAAO,eAAe,CAAC;AAG7B,uBAAqB;AACrB,4BAA0B;AAC5B;AAEA,MAAM,QAAQ;AAAA,EACZ,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM,KAAK,GAAG,SAAS;AACrB,sBAAkB,OAAO;AACzB,WAAO;AAAA,EACT;AAAA,EACA,iBAAiB;AACf,WAAO;AAAA,EACT;AACF;AAEA,IAAO,gBAAQ;",
6
- "names": []
7
- }