@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/hooks/useUnifiedCompletion.ts"],
4
- "sourcesContent": ["import { useState, useCallback, useEffect, useRef } from 'react'\nimport { useInput } from 'ink'\nimport { existsSync, statSync, readdirSync } from 'fs'\nimport { join, dirname, basename, resolve } from 'path'\nimport { getCwd } from '../utils/state'\nimport { getCommand } from '../commands'\nimport { getActiveAgents } from '../utils/agentLoader'\nimport { getModelManager } from '../utils/model'\nimport { glob } from 'glob'\nimport { matchCommands } from '../utils/fuzzyMatcher'\nimport { \n getCommonSystemCommands, \n getCommandPriority,\n getEssentialCommands,\n getMinimalFallbackCommands \n} from '../utils/commonUnixCommands'\nimport type { Command } from '../commands'\n\n// Unified suggestion type for all completion types\nexport interface UnifiedSuggestion {\n value: string\n displayValue: string\n type: 'command' | 'agent' | 'file' | 'ask'\n icon?: string\n score: number\n metadata?: any\n // Clean type system for smart matching\n isSmartMatch?: boolean // Instead of magic string checking\n originalContext?: 'mention' | 'file' | 'command' // Track source context\n}\n\ninterface CompletionContext {\n type: 'command' | 'agent' | 'file' | null\n prefix: string\n startPos: number\n endPos: number\n}\n\n// Terminal behavior state for preview and cycling\ninterface TerminalState {\n originalWord: string\n wordContext: { start: number; end: number } | null\n isPreviewMode: boolean\n}\n\ninterface Props {\n input: string\n cursorOffset: number\n onInputChange: (value: string) => void\n setCursorOffset: (offset: number) => void\n commands: Command[]\n onSubmit?: (value: string, isSubmittingSlashCommand?: boolean) => void\n}\n\n/**\n * Unified completion system - Linus approved\n * One hook to rule them all, no bullshit, no complexity\n */\n// Unified completion state - single source of truth\ninterface CompletionState {\n suggestions: UnifiedSuggestion[]\n selectedIndex: number\n isActive: boolean\n context: CompletionContext | null\n preview: {\n isActive: boolean\n originalInput: string\n wordRange: [number, number]\n } | null\n emptyDirMessage: string\n suppressUntil: number // timestamp for suppression\n}\n\nconst INITIAL_STATE: CompletionState = {\n suggestions: [],\n selectedIndex: 0,\n isActive: false,\n context: null,\n preview: null,\n emptyDirMessage: '',\n suppressUntil: 0\n}\n\nexport function useUnifiedCompletion({\n input,\n cursorOffset,\n onInputChange,\n setCursorOffset,\n commands,\n onSubmit,\n}: Props) {\n // Single state for entire completion system - Linus approved\n const [state, setState] = useState<CompletionState>(INITIAL_STATE)\n\n // State update helpers - clean and simple\n const updateState = useCallback((updates: Partial<CompletionState>) => {\n setState(prev => ({ ...prev, ...updates }))\n }, [])\n\n const resetCompletion = useCallback(() => {\n setState(prev => ({\n ...prev,\n suggestions: [],\n selectedIndex: 0,\n isActive: false,\n context: null,\n preview: null,\n emptyDirMessage: ''\n }))\n }, [])\n\n const activateCompletion = useCallback((suggestions: UnifiedSuggestion[], context: CompletionContext) => {\n setState(prev => ({\n ...prev,\n suggestions: suggestions, // Keep the order from generateSuggestions (already sorted with weights)\n selectedIndex: 0,\n isActive: true,\n context,\n preview: null\n }))\n }, [])\n\n // Direct state access - no legacy wrappers needed\n const { suggestions, selectedIndex, isActive, emptyDirMessage } = state\n\n // Find common prefix among suggestions (terminal behavior)\n const findCommonPrefix = useCallback((suggestions: UnifiedSuggestion[]): string => {\n if (suggestions.length === 0) return ''\n if (suggestions.length === 1) return suggestions[0].value\n \n let prefix = suggestions[0].value\n \n for (let i = 1; i < suggestions.length; i++) {\n const str = suggestions[i].value\n let j = 0\n while (j < prefix.length && j < str.length && prefix[j] === str[j]) {\n j++\n }\n prefix = prefix.slice(0, j)\n \n if (prefix.length === 0) return ''\n }\n \n return prefix\n }, [])\n\n // Clean word detection - Linus approved simplicity\n const getWordAtCursor = useCallback((): CompletionContext | null => {\n if (!input) return null\n \n // IMPORTANT: Only match the word/prefix BEFORE the cursor\n // Don't include text after cursor to avoid confusion\n let start = cursorOffset\n \n // Move start backwards to find word beginning\n // Stop at whitespace or special boundaries\n while (start > 0) {\n const char = input[start - 1]\n // Stop at whitespace\n if (/\\s/.test(char)) break\n \n // For @mentions, include @ and stop\n if (char === '@' && start < cursorOffset) {\n start--\n break\n }\n \n // For paths, be smarter about / handling\n if (char === '/') {\n // Look ahead to see what we've collected so far\n const collectedSoFar = input.slice(start, cursorOffset)\n \n // If we already have a path component, this / is part of the path\n if (collectedSoFar.includes('/') || collectedSoFar.includes('.')) {\n start--\n continue\n }\n \n // Check if this is part of a path pattern like ./ or ../ or ~/\n if (start > 1) {\n const prevChar = input[start - 2]\n if (prevChar === '.' || prevChar === '~') {\n // It's part of ./ or ../ or ~/ - keep going\n start--\n continue\n }\n }\n \n // Check if this is a standalone / at the beginning (command)\n if (start === 1 || (start > 1 && /\\s/.test(input[start - 2]))) {\n start--\n break // It's a command slash\n }\n \n // Otherwise treat as path separator\n start--\n continue\n }\n \n // Special handling for dots in paths\n if (char === '.' && start > 0) {\n // Check if this might be start of ./ or ../\n const nextChar = start < input.length ? input[start] : ''\n if (nextChar === '/' || nextChar === '.') {\n start--\n continue // Part of a path pattern\n }\n }\n \n start--\n }\n \n // The word is from start to cursor position (not beyond)\n const word = input.slice(start, cursorOffset)\n if (!word) return null\n \n // Priority-based type detection - no special cases needed\n if (word.startsWith('/')) {\n const beforeWord = input.slice(0, start).trim()\n const isCommand = beforeWord === '' && !word.includes('/', 1)\n return {\n type: isCommand ? 'command' : 'file',\n prefix: isCommand ? word.slice(1) : word,\n startPos: start,\n endPos: cursorOffset // Use cursor position as end\n }\n }\n \n if (word.startsWith('@')) {\n const content = word.slice(1) // Remove @\n \n // Check if this looks like an email (contains @ in the middle)\n if (word.includes('@', 1)) {\n // This looks like an email, treat as regular text\n return null\n }\n \n // Trigger completion for @mentions (agents, ask-models, files)\n return {\n type: 'agent', // This will trigger mixed agent+file completion\n prefix: content,\n startPos: start,\n endPos: cursorOffset // Use cursor position as end\n }\n }\n \n // Everything else defaults to file completion\n return {\n type: 'file', \n prefix: word,\n startPos: start,\n endPos: cursorOffset // Use cursor position as end\n }\n }, [input, cursorOffset])\n\n // System commands cache - populated dynamically from $PATH\n const [systemCommands, setSystemCommands] = useState<string[]>([])\n const [isLoadingCommands, setIsLoadingCommands] = useState(false)\n \n // Dynamic command classification based on intrinsic features\n const classifyCommand = useCallback((cmd: string): 'core' | 'common' | 'dev' | 'system' => {\n const lowerCmd = cmd.toLowerCase()\n let score = 0\n \n // === FEATURE 1: Name Length & Complexity ===\n // Short, simple names are usually core commands\n if (cmd.length <= 4) score += 40\n else if (cmd.length <= 6) score += 20\n else if (cmd.length <= 8) score += 10\n else if (cmd.length > 15) score -= 30 // Very long names are specialized\n \n // === FEATURE 2: Character Patterns ===\n // Simple alphabetic names are more likely core\n if (/^[a-z]+$/.test(lowerCmd)) score += 30\n \n // Mixed case, numbers, dots suggest specialized tools\n if (/[A-Z]/.test(cmd)) score -= 15\n if (/\\d/.test(cmd)) score -= 20\n if (cmd.includes('.')) score -= 25\n if (cmd.includes('-')) score -= 10\n if (cmd.includes('_')) score -= 15\n \n // === FEATURE 3: Linguistic Patterns ===\n // Single, common English words\n const commonWords = ['list', 'copy', 'move', 'find', 'print', 'show', 'edit', 'view']\n if (commonWords.some(word => lowerCmd.includes(word.slice(0, 3)))) score += 25\n \n // Domain-specific prefixes/suffixes\n const devPrefixes = ['git', 'npm', 'node', 'py', 'docker', 'kubectl']\n if (devPrefixes.some(prefix => lowerCmd.startsWith(prefix))) score += 15\n \n // System/daemon indicators \n const systemIndicators = ['daemon', 'helper', 'responder', 'service', 'd$', 'ctl$']\n if (systemIndicators.some(indicator => \n indicator.endsWith('$') ? lowerCmd.endsWith(indicator.slice(0, -1)) : lowerCmd.includes(indicator)\n )) score -= 40\n \n // === FEATURE 4: File Extension Indicators ===\n // Commands with extensions are usually scripts/specialized tools\n if (/\\.(pl|py|sh|rb|js)$/.test(lowerCmd)) score -= 35\n \n // === FEATURE 5: Path Location Heuristics ===\n // Note: We don't have path info here, but can infer from name patterns\n // Commands that look like they belong in /usr/local/bin or specialized dirs\n const buildToolPatterns = ['bindep', 'render', 'mako', 'webpack', 'babel', 'eslint']\n if (buildToolPatterns.some(pattern => lowerCmd.includes(pattern))) score -= 25\n \n // === FEATURE 6: Vowel/Consonant Patterns ===\n // Unix commands often have abbreviated names with few vowels\n const vowelRatio = (lowerCmd.match(/[aeiou]/g) || []).length / lowerCmd.length\n if (vowelRatio < 0.2) score += 15 // Very few vowels (like 'ls', 'cp', 'mv')\n if (vowelRatio > 0.5) score -= 10 // Too many vowels (usually full words)\n \n // === CLASSIFICATION BASED ON SCORE ===\n if (score >= 50) return 'core' // 50+: Core unix commands\n if (score >= 20) return 'common' // 20-49: Common dev tools \n if (score >= -10) return 'dev' // -10-19: Specialized dev tools\n return 'system' // <-10: System/edge commands\n }, [])\n\n // Load system commands from PATH (like real terminal)\n const loadSystemCommands = useCallback(async () => {\n if (systemCommands.length > 0 || isLoadingCommands) return // Already loaded or loading\n \n setIsLoadingCommands(true)\n try {\n const { readdirSync, statSync } = await import('fs')\n const pathDirs = (process.env.PATH || '').split(':').filter(Boolean)\n const commandSet = new Set<string>()\n \n // Get essential commands from utils\n const essentialCommands = getEssentialCommands()\n \n // Add essential commands first\n essentialCommands.forEach(cmd => commandSet.add(cmd))\n \n // Scan PATH directories for executables\n for (const dir of pathDirs) {\n try {\n if (readdirSync && statSync) {\n const entries = readdirSync(dir)\n for (const entry of entries) {\n try {\n const fullPath = `${dir}/${entry}`\n const stats = statSync(fullPath)\n // Check if it's executable (rough check)\n if (stats.isFile() && (stats.mode & 0o111) !== 0) {\n commandSet.add(entry)\n }\n } catch {\n // Skip files we can't stat\n }\n }\n }\n } catch {\n // Skip directories we can't read\n }\n }\n \n const commands = Array.from(commandSet).sort()\n setSystemCommands(commands)\n } catch (error) {\n console.warn('Failed to load system commands, using fallback:', error)\n // Use minimal fallback commands from utils if system scan fails\n setSystemCommands(getMinimalFallbackCommands())\n } finally {\n setIsLoadingCommands(false)\n }\n }, [systemCommands.length, isLoadingCommands])\n \n // Load commands on first use\n useEffect(() => {\n loadSystemCommands()\n }, [loadSystemCommands])\n\n // Generate command suggestions (slash commands)\n const generateCommandSuggestions = useCallback((prefix: string): UnifiedSuggestion[] => {\n const filteredCommands = commands.filter(cmd => !cmd.isHidden)\n \n if (!prefix) {\n // Show all commands when prefix is empty (for single /)\n return filteredCommands.map(cmd => ({\n value: cmd.userFacingName(),\n displayValue: `/${cmd.userFacingName()}`,\n type: 'command' as const,\n score: 100,\n }))\n }\n \n return filteredCommands\n .filter(cmd => {\n const names = [cmd.userFacingName(), ...(cmd.aliases || [])]\n return names.some(name => name.toLowerCase().startsWith(prefix.toLowerCase()))\n })\n .map(cmd => ({\n value: cmd.userFacingName(),\n displayValue: `/${cmd.userFacingName()}`,\n type: 'command' as const,\n score: 100 - prefix.length + (cmd.userFacingName().startsWith(prefix) ? 10 : 0),\n }))\n }, [commands])\n\n // Clean Unix command scoring using fuzzy matcher\n const calculateUnixCommandScore = useCallback((cmd: string, prefix: string): number => {\n const result = matchCommands([cmd], prefix)\n return result.length > 0 ? result[0].score : 0\n }, [])\n\n // Clean Unix command suggestions using fuzzy matcher with common commands boost\n const generateUnixCommandSuggestions = useCallback((prefix: string): UnifiedSuggestion[] => {\n if (!prefix) return []\n \n // Loading state\n if (isLoadingCommands) {\n return [{\n value: 'loading...',\n displayValue: `\u23F3 Loading system commands...`,\n type: 'file' as const,\n score: 0,\n metadata: { isLoading: true }\n }]\n }\n \n // IMPORTANT: Only use commands that exist on the system (intersection)\n const commonCommands = getCommonSystemCommands(systemCommands)\n \n // Deduplicate commands (in case of any duplicates)\n const uniqueCommands = Array.from(new Set(commonCommands))\n \n // Use fuzzy matcher ONLY on the unique intersection\n const matches = matchCommands(uniqueCommands, prefix)\n \n // Boost common commands\n const boostedMatches = matches.map(match => {\n const priority = getCommandPriority(match.command)\n return {\n ...match,\n score: match.score + priority * 0.5 // Add priority boost\n }\n }).sort((a, b) => b.score - a.score)\n \n // Limit results intelligently\n let results = boostedMatches.slice(0, 8)\n \n // If we have very high scores (900+), show fewer\n const perfectMatches = boostedMatches.filter(m => m.score >= 900)\n if (perfectMatches.length > 0 && perfectMatches.length <= 3) {\n results = perfectMatches\n }\n // If we have good scores (100+), prefer them\n else if (boostedMatches.length > 8) {\n const goodMatches = boostedMatches.filter(m => m.score >= 100)\n if (goodMatches.length <= 5) {\n results = goodMatches\n }\n }\n \n return results.map(item => ({\n value: item.command,\n displayValue: `$ ${item.command}`,\n type: 'command' as const,\n score: item.score,\n metadata: { isUnixCommand: true }\n }))\n }, [systemCommands, isLoadingCommands])\n\n // Agent suggestions cache\n const [agentSuggestions, setAgentSuggestions] = useState<UnifiedSuggestion[]>([])\n \n // Model suggestions cache\n const [modelSuggestions, setModelSuggestions] = useState<UnifiedSuggestion[]>([])\n \n // Load model suggestions\n useEffect(() => {\n try {\n const modelManager = getModelManager()\n const allModels = modelManager.getAllAvailableModelNames()\n \n const suggestions = allModels.map(modelId => {\n // Professional and clear description for expert model consultation\n return {\n value: `ask-${modelId}`,\n displayValue: `\uD83E\uDD9C ask-${modelId} :: Consult ${modelId} for expert opinion and specialized analysis`,\n type: 'ask' as const,\n score: 90, // Higher than agents - put ask-models on top\n metadata: { modelId },\n }\n })\n \n setModelSuggestions(suggestions)\n } catch (error) {\n console.warn('[useUnifiedCompletion] Failed to load models:', error)\n // No fallback - rely on dynamic loading only\n setModelSuggestions([])\n }\n }, [])\n \n // Load agent suggestions on mount\n useEffect(() => {\n getActiveAgents().then(agents => {\n // agents is an array of AgentConfig, not an object\n const suggestions = agents.map(config => {\n // \uD83E\uDDE0 \u667A\u80FD\u63CF\u8FF0\u7B97\u6CD5 - \u9002\u5E94\u6027\u957F\u5EA6\u63A7\u5236\n let shortDesc = config.whenToUse\n \n // \u79FB\u9664\u5E38\u89C1\u7684\u5197\u4F59\u524D\u7F00\uFF0C\u4F46\u4FDD\u7559\u6838\u5FC3\u5185\u5BB9\n const prefixPatterns = [\n /^Use this agent when you need (assistance with: )?/i,\n /^Use PROACTIVELY (when|to) /i,\n /^Specialized in /i,\n /^Implementation specialist for /i,\n /^Design validation specialist\\.? Use PROACTIVELY to /i,\n /^Task validation specialist\\.? Use PROACTIVELY to /i,\n /^Requirements validation specialist\\.? Use PROACTIVELY to /i\n ]\n \n for (const pattern of prefixPatterns) {\n shortDesc = shortDesc.replace(pattern, '')\n }\n \n // \uD83C\uDFAF \u7CBE\u51C6\u65AD\u53E5\u7B97\u6CD5\uFF1A\u4E2D\u82F1\u6587\u53E5\u53F7\u611F\u53F9\u53F7\u4F18\u5148 \u2192 \u9017\u53F7 \u2192 \u7701\u7565\n const findSmartBreak = (text: string, maxLength: number) => {\n if (text.length <= maxLength) return text\n \n // \u7B2C\u4E00\u4F18\u5148\u7EA7\uFF1A\u4E2D\u82F1\u6587\u53E5\u53F7\u3001\u611F\u53F9\u53F7\n const sentenceEndings = /[.!\u3002\uFF01]/\n const firstSentenceMatch = text.search(sentenceEndings)\n if (firstSentenceMatch !== -1) {\n const firstSentence = text.slice(0, firstSentenceMatch).trim()\n if (firstSentence.length >= 5) {\n return firstSentence\n }\n }\n \n // \u5982\u679C\u7B2C\u4E00\u53E5\u8FC7\u957F\uFF0C\u627E\u9017\u53F7\u65AD\u53E5\n if (text.length > maxLength) {\n const commaEndings = /[,\uFF0C]/\n const commas = []\n let match\n const regex = new RegExp(commaEndings, 'g')\n while ((match = regex.exec(text)) !== null) {\n commas.push(match.index)\n }\n \n // \u627E\u6700\u540E\u4E00\u4E2A\u5728maxLength\u5185\u7684\u9017\u53F7\n for (let i = commas.length - 1; i >= 0; i--) {\n const commaPos = commas[i]\n if (commaPos < maxLength) {\n const clause = text.slice(0, commaPos).trim()\n if (clause.length >= 5) {\n return clause\n }\n }\n }\n }\n \n // \u6700\u540E\u9009\u62E9\uFF1A\u76F4\u63A5\u7701\u7565\n return text.slice(0, maxLength) + '...'\n }\n \n shortDesc = findSmartBreak(shortDesc.trim(), 80) // \u589E\u52A0\u523080\u5B57\u7B26\u9650\u5236\n \n // \u5982\u679C\u5904\u7406\u540E\u4E3A\u7A7A\u6216\u592A\u77ED\uFF0C\u4F7F\u7528\u539F\u59CB\u63CF\u8FF0\n if (!shortDesc || shortDesc.length < 5) {\n shortDesc = findSmartBreak(config.whenToUse, 80)\n }\n \n return {\n value: `run-agent-${config.agentType}`,\n displayValue: `\uD83D\uDC64 run-agent-${config.agentType} :: ${shortDesc}`, // \u4EBA\u7C7B\u56FE\u6807 + run-agent\u524D\u7F00 + \u7B80\u6D01\u63CF\u8FF0\n type: 'agent' as const,\n score: 85, // Lower than ask-models\n metadata: config,\n }\n })\n // Agents loaded successfully\n setAgentSuggestions(suggestions)\n }).catch((error) => {\n console.warn('[useUnifiedCompletion] Failed to load agents:', error)\n // No fallback - rely on dynamic loading only\n setAgentSuggestions([])\n })\n }, [])\n\n // Generate agent and model suggestions using fuzzy matching\n const generateMentionSuggestions = useCallback((prefix: string): UnifiedSuggestion[] => {\n // Combine agent and model suggestions\n const allSuggestions = [...agentSuggestions, ...modelSuggestions]\n \n if (!prefix) {\n // Show all suggestions when prefix is empty (for single @)\n return allSuggestions.sort((a, b) => {\n // Ask models first (higher score), then agents\n if (a.type === 'ask' && b.type === 'agent') return -1\n if (a.type === 'agent' && b.type === 'ask') return 1\n return b.score - a.score\n })\n }\n \n // Use fuzzy matching for intelligent completion\n const candidates = allSuggestions.map(s => s.value)\n const matches = matchCommands(candidates, prefix)\n \n // Create result mapping with fuzzy scores\n const fuzzyResults = matches\n .map(match => {\n const suggestion = allSuggestions.find(s => s.value === match.command)!\n return {\n ...suggestion,\n score: match.score // Use fuzzy match score instead of simple scoring\n }\n })\n .sort((a, b) => {\n // Ask models first (for equal scores), then agents\n if (a.type === 'ask' && b.type === 'agent') return -1\n if (a.type === 'agent' && b.type === 'ask') return 1\n return b.score - a.score\n })\n \n return fuzzyResults\n }, [agentSuggestions, modelSuggestions])\n\n // Unix-style path completion - preserves user input semantics\n const generateFileSuggestions = useCallback((prefix: string, isAtReference: boolean = false): UnifiedSuggestion[] => {\n try {\n const cwd = getCwd()\n \n // Parse user input preserving original format\n const userPath = prefix || '.'\n const isAbsolutePath = userPath.startsWith('/')\n const isHomePath = userPath.startsWith('~')\n \n // Resolve search directory - but keep user's path format for output\n let searchPath: string\n if (isHomePath) {\n searchPath = userPath.replace('~', process.env.HOME || '')\n } else if (isAbsolutePath) {\n searchPath = userPath\n } else {\n searchPath = resolve(cwd, userPath)\n }\n \n // Determine search directory and filename filter\n // If path ends with '/', treat it as directory navigation\n const endsWithSlash = userPath.endsWith('/')\n const searchStat = existsSync(searchPath) ? statSync(searchPath) : null\n \n let searchDir: string\n let nameFilter: string\n \n if (endsWithSlash || searchStat?.isDirectory()) {\n // User is navigating into a directory or path ends with /\n searchDir = searchPath\n nameFilter = ''\n } else {\n // User might be typing a partial filename\n searchDir = dirname(searchPath)\n nameFilter = basename(searchPath)\n }\n \n if (!existsSync(searchDir)) return []\n \n // Get directory entries with filter\n const showHidden = nameFilter.startsWith('.') || userPath.includes('/.')\n const entries = readdirSync(searchDir)\n .filter(entry => {\n // Filter hidden files unless user explicitly wants them\n if (!showHidden && entry.startsWith('.')) return false\n // Filter by name if there's a filter\n if (nameFilter && !entry.toLowerCase().startsWith(nameFilter.toLowerCase())) return false\n return true\n })\n .sort((a, b) => {\n // Sort directories first, then files\n const aPath = join(searchDir, a)\n const bPath = join(searchDir, b)\n const aIsDir = statSync(aPath).isDirectory()\n const bIsDir = statSync(bPath).isDirectory()\n \n if (aIsDir && !bIsDir) return -1\n if (!aIsDir && bIsDir) return 1\n \n // Within same type, sort alphabetically\n return a.toLowerCase().localeCompare(b.toLowerCase())\n })\n .slice(0, 25) // Show more entries for better visibility\n \n return entries.map(entry => {\n const entryPath = join(searchDir, entry)\n const isDir = statSync(entryPath).isDirectory()\n const icon = isDir ? '\uD83D\uDCC1' : '\uD83D\uDCC4'\n \n // Unix-style path building - preserve user's original path format\n let value: string\n \n if (userPath.includes('/')) {\n // User typed path with separators - maintain structure\n if (endsWithSlash) {\n // User explicitly ended with / - they're inside the directory\n value = userPath + entry + (isDir ? '/' : '')\n } else if (searchStat?.isDirectory()) {\n // Path is a directory but doesn't end with / - add separator\n value = userPath + '/' + entry + (isDir ? '/' : '')\n } else {\n // User is completing a filename - replace basename\n const userDir = userPath.includes('/') ? userPath.substring(0, userPath.lastIndexOf('/')) : ''\n value = userDir ? userDir + '/' + entry + (isDir ? '/' : '') : entry + (isDir ? '/' : '')\n }\n } else {\n // User typed simple name - check if it's an existing directory\n if (searchStat?.isDirectory()) {\n // Existing directory - navigate into it\n value = userPath + '/' + entry + (isDir ? '/' : '')\n } else {\n // Simple completion at current level\n value = entry + (isDir ? '/' : '')\n }\n }\n \n return {\n value,\n displayValue: `${icon} ${entry}${isDir ? '/' : ''}`,\n type: 'file' as const,\n score: isDir ? 80 : 70,\n }\n })\n } catch {\n return []\n }\n }, [])\n\n // Unified smart matching - single algorithm with different weights\n const calculateMatchScore = useCallback((suggestion: UnifiedSuggestion, prefix: string): number => {\n const lowerPrefix = prefix.toLowerCase()\n const value = suggestion.value.toLowerCase()\n const displayValue = suggestion.displayValue.toLowerCase()\n \n let matchFound = false\n let score = 0\n \n // Check for actual matches first\n if (value.startsWith(lowerPrefix)) {\n matchFound = true\n score = 100 // Highest priority\n } else if (value.includes(lowerPrefix)) {\n matchFound = true\n score = 95 \n } else if (displayValue.includes(lowerPrefix)) {\n matchFound = true\n score = 90\n } else {\n // Word boundary matching for compound names like \"general\" -> \"run-agent-general-purpose\"\n const words = value.split(/[-_]/)\n if (words.some(word => word.startsWith(lowerPrefix))) {\n matchFound = true\n score = 93\n } else {\n // Acronym matching (last resort)\n const acronym = words.map(word => word[0]).join('')\n if (acronym.startsWith(lowerPrefix)) {\n matchFound = true\n score = 88\n }\n }\n }\n \n // Only return score if we found a match\n if (!matchFound) return 0\n \n // Type preferences (small bonus)\n if (suggestion.type === 'ask') score += 2\n if (suggestion.type === 'agent') score += 1\n \n return score\n }, [])\n\n // Generate smart mention suggestions without data pollution\n const generateSmartMentionSuggestions = useCallback((prefix: string, sourceContext: 'file' | 'agent' = 'file'): UnifiedSuggestion[] => {\n if (!prefix || prefix.length < 2) return []\n \n const allSuggestions = [...agentSuggestions, ...modelSuggestions]\n \n return allSuggestions\n .map(suggestion => {\n const matchScore = calculateMatchScore(suggestion, prefix)\n if (matchScore === 0) return null\n \n // Clean transformation without data pollution\n return {\n ...suggestion,\n score: matchScore,\n isSmartMatch: true,\n originalContext: sourceContext,\n // Only modify display for clarity, keep value clean\n displayValue: `\uD83C\uDFAF ${suggestion.displayValue}`\n }\n })\n .filter(Boolean)\n .sort((a, b) => b.score - a.score)\n .slice(0, 5)\n }, [agentSuggestions, modelSuggestions, calculateMatchScore])\n\n // Generate all suggestions based on context\n const generateSuggestions = useCallback((context: CompletionContext): UnifiedSuggestion[] => {\n switch (context.type) {\n case 'command':\n return generateCommandSuggestions(context.prefix)\n case 'agent': {\n // @ reference: combine mentions and files with clean priority\n const mentionSuggestions = generateMentionSuggestions(context.prefix)\n const fileSuggestions = generateFileSuggestions(context.prefix, true) // isAtReference=true\n \n // Apply weights for @ context (agents/models should be prioritized but files visible)\n const weightedSuggestions = [\n ...mentionSuggestions.map(s => ({\n ...s,\n // In @ context, agents/models get high priority\n weightedScore: s.score + 150\n })),\n ...fileSuggestions.map(s => ({\n ...s,\n // Files get lower priority but still visible\n weightedScore: s.score + 10 // Small boost to ensure visibility\n }))\n ]\n \n // Sort by weighted score - no artificial limits\n return weightedSuggestions\n .sort((a, b) => b.weightedScore - a.weightedScore)\n .map(({ weightedScore, ...suggestion }) => suggestion)\n // No limit or very generous limit (e.g., 30 items)\n }\n case 'file': {\n // For normal input, try to match everything intelligently\n const fileSuggestions = generateFileSuggestions(context.prefix, false)\n const unixSuggestions = generateUnixCommandSuggestions(context.prefix)\n \n // IMPORTANT: Also try to match agents and models WITHOUT requiring @\n // This enables smart matching for inputs like \"gp5\", \"daoqi\", etc.\n const mentionMatches = generateMentionSuggestions(context.prefix)\n .map(s => ({\n ...s,\n isSmartMatch: true,\n // Show that @ will be added when selected\n displayValue: `\\u2192 ${s.displayValue}` // Arrow to indicate it will transform\n }))\n \n // Apply source-based priority weights with special handling for exact matches\n // Priority order: Exact Unix > Unix commands > agents/models > files\n const weightedSuggestions = [\n ...unixSuggestions.map(s => ({\n ...s,\n // Unix commands get boost, but exact matches get huge boost\n sourceWeight: s.score >= 10000 ? 5000 : 200, // Exact match gets massive boost\n weightedScore: s.score >= 10000 ? s.score + 5000 : s.score + 200\n })),\n ...mentionMatches.map(s => ({\n ...s,\n // Agents/models get medium priority boost (but less to avoid overriding exact Unix)\n sourceWeight: 50,\n weightedScore: s.score + 50\n })),\n ...fileSuggestions.map(s => ({\n ...s,\n // Files get no boost (baseline)\n sourceWeight: 0,\n weightedScore: s.score\n }))\n ]\n \n // Sort by weighted score and deduplicate\n const seen = new Set<string>()\n const deduplicatedResults = weightedSuggestions\n .sort((a, b) => b.weightedScore - a.weightedScore)\n .filter(item => {\n // Filter out duplicates based on value\n if (seen.has(item.value)) return false\n seen.add(item.value)\n return true\n })\n .map(({ weightedScore, sourceWeight, ...suggestion }) => suggestion) // Remove weight fields\n // No limit - show all relevant matches\n \n return deduplicatedResults\n }\n default:\n return []\n }\n }, [generateCommandSuggestions, generateMentionSuggestions, generateFileSuggestions, generateUnixCommandSuggestions, generateSmartMentionSuggestions])\n\n\n // Complete with a suggestion - \u652F\u6301\u4E07\u80FD@\u5F15\u7528 + slash\u547D\u4EE4\u81EA\u52A8\u6267\u884C\n const completeWith = useCallback((suggestion: UnifiedSuggestion, context: CompletionContext) => {\n let completion: string\n \n if (context.type === 'command') {\n completion = `/${suggestion.value} `\n } else if (context.type === 'agent') {\n // \uD83D\uDE80 \u4E07\u80FD@\u5F15\u7528\uFF1A\u6839\u636E\u5EFA\u8BAE\u7C7B\u578B\u51B3\u5B9A\u8865\u5168\u683C\u5F0F\n if (suggestion.type === 'agent') {\n completion = `@${suggestion.value} ` // \u4EE3\u7406\u8865\u5168\n } else if (suggestion.type === 'ask') {\n completion = `@${suggestion.value} ` // Ask\u6A21\u578B\u8865\u5168\n } else {\n // File reference in @mention context - no space for directories to allow expansion\n const isDirectory = suggestion.value.endsWith('/')\n completion = `@${suggestion.value}${isDirectory ? '' : ' '}` // \u6587\u4EF6\u5939\u4E0D\u52A0\u7A7A\u683C\uFF0C\u6587\u4EF6\u52A0\u7A7A\u683C\n }\n } else {\n // Regular file completion OR smart mention matching\n if (suggestion.isSmartMatch) {\n // Smart mention - add @ prefix and space\n completion = `@${suggestion.value} `\n } else {\n // Regular file completion - no space for directories to allow expansion\n const isDirectory = suggestion.value.endsWith('/')\n completion = suggestion.value + (isDirectory ? '' : ' ')\n }\n }\n \n // Special handling for absolute paths in file completion\n // When completing an absolute path, we should replace the entire current word/path\n let actualEndPos: number\n \n if (context.type === 'file' && suggestion.value.startsWith('/') && !suggestion.isSmartMatch) {\n // For absolute paths, find the end of the current path/word\n let end = context.startPos\n while (end < input.length && input[end] !== ' ' && input[end] !== '\\n') {\n end++\n }\n actualEndPos = end\n } else {\n // Original logic for other cases\n const currentWord = input.slice(context.startPos)\n const nextSpaceIndex = currentWord.indexOf(' ')\n actualEndPos = nextSpaceIndex === -1 ? input.length : context.startPos + nextSpaceIndex\n }\n \n const newInput = input.slice(0, context.startPos) + completion + input.slice(actualEndPos)\n onInputChange(newInput)\n setCursorOffset(context.startPos + completion.length)\n \n // Don't auto-execute slash commands - let user press Enter to submit\n // This gives users a chance to add arguments or modify the command\n \n // Completion applied\n }, [input, onInputChange, setCursorOffset, onSubmit, commands])\n\n // Partial complete to common prefix\n const partialComplete = useCallback((prefix: string, context: CompletionContext) => {\n const completion = context.type === 'command' ? `/${prefix}` :\n context.type === 'agent' ? `@${prefix}` :\n prefix\n \n const newInput = input.slice(0, context.startPos) + completion + input.slice(context.endPos)\n onInputChange(newInput)\n setCursorOffset(context.startPos + completion.length)\n }, [input, onInputChange, setCursorOffset])\n\n\n // Handle Tab key - simplified and unified\n useInput((input_str, key) => {\n if (!key.tab) return false\n if (key.shift) return false\n \n const context = getWordAtCursor()\n if (!context) return false\n \n // If menu is already showing, cycle through suggestions\n if (state.isActive && state.suggestions.length > 0) {\n const nextIndex = (state.selectedIndex + 1) % state.suggestions.length\n const nextSuggestion = state.suggestions[nextIndex]\n \n if (state.context) {\n // Calculate proper word boundaries\n const currentWord = input.slice(state.context.startPos)\n const wordEnd = currentWord.search(/\\s/)\n const actualEndPos = wordEnd === -1 \n ? input.length \n : state.context.startPos + wordEnd\n \n // Apply appropriate prefix based on context type and suggestion type\n let preview: string\n if (state.context.type === 'command') {\n preview = `/${nextSuggestion.value}`\n } else if (state.context.type === 'agent') {\n // For @mentions, always add @ prefix\n preview = `@${nextSuggestion.value}`\n } else if (nextSuggestion.isSmartMatch) {\n // Smart match from normal input - add @ prefix\n preview = `@${nextSuggestion.value}`\n } else {\n preview = nextSuggestion.value\n }\n \n // Apply preview\n const newInput = input.slice(0, state.context.startPos) + \n preview + \n input.slice(actualEndPos)\n \n onInputChange(newInput)\n setCursorOffset(state.context.startPos + preview.length)\n \n // Update state\n updateState({\n selectedIndex: nextIndex,\n preview: {\n isActive: true,\n originalInput: input,\n wordRange: [state.context.startPos, state.context.startPos + preview.length]\n }\n })\n }\n return true\n }\n \n // Generate new suggestions\n const currentSuggestions = generateSuggestions(context)\n \n if (currentSuggestions.length === 0) {\n return false // Let Tab pass through\n } else if (currentSuggestions.length === 1) {\n // Single match: complete immediately\n completeWith(currentSuggestions[0], context)\n return true\n } else {\n // Show menu and apply first suggestion\n activateCompletion(currentSuggestions, context)\n \n // Immediately apply first suggestion as preview\n const firstSuggestion = currentSuggestions[0]\n const currentWord = input.slice(context.startPos)\n const wordEnd = currentWord.search(/\\s/)\n const actualEndPos = wordEnd === -1 \n ? input.length \n : context.startPos + wordEnd\n \n let preview: string\n if (context.type === 'command') {\n preview = `/${firstSuggestion.value}`\n } else if (context.type === 'agent') {\n preview = `@${firstSuggestion.value}`\n } else if (firstSuggestion.isSmartMatch) {\n // Smart match from normal input - add @ prefix\n preview = `@${firstSuggestion.value}`\n } else {\n preview = firstSuggestion.value\n }\n \n const newInput = input.slice(0, context.startPos) + \n preview + \n input.slice(actualEndPos)\n \n onInputChange(newInput)\n setCursorOffset(context.startPos + preview.length)\n \n updateState({\n preview: {\n isActive: true,\n originalInput: input,\n wordRange: [context.startPos, context.startPos + preview.length]\n }\n })\n \n return true\n }\n })\n\n // Handle navigation keys - simplified and unified \n useInput((inputChar, key) => {\n // Enter key - confirm selection and end completion (always add space)\n if (key.return && state.isActive && state.suggestions.length > 0) {\n const selectedSuggestion = state.suggestions[state.selectedIndex]\n if (selectedSuggestion && state.context) {\n // For Enter key, always add space even for directories to indicate completion end\n let completion: string\n \n if (state.context.type === 'command') {\n completion = `/${selectedSuggestion.value} `\n } else if (state.context.type === 'agent') {\n if (selectedSuggestion.type === 'agent') {\n completion = `@${selectedSuggestion.value} `\n } else if (selectedSuggestion.type === 'ask') {\n completion = `@${selectedSuggestion.value} `\n } else {\n // File reference in @mention context - always add space on Enter\n completion = `@${selectedSuggestion.value} `\n }\n } else if (selectedSuggestion.isSmartMatch) {\n // Smart match from normal input - add @ prefix\n completion = `@${selectedSuggestion.value} `\n } else {\n // Regular file completion - always add space on Enter\n completion = selectedSuggestion.value + ' '\n }\n \n // Apply completion with forced space\n const currentWord = input.slice(state.context.startPos)\n const nextSpaceIndex = currentWord.indexOf(' ')\n const actualEndPos = nextSpaceIndex === -1 ? input.length : state.context.startPos + nextSpaceIndex\n \n const newInput = input.slice(0, state.context.startPos) + completion + input.slice(actualEndPos)\n onInputChange(newInput)\n setCursorOffset(state.context.startPos + completion.length)\n }\n resetCompletion()\n return true\n }\n \n if (!state.isActive || state.suggestions.length === 0) return false\n \n // Arrow key navigation with preview\n const handleNavigation = (newIndex: number) => {\n const preview = state.suggestions[newIndex].value\n \n if (state.preview?.isActive && state.context) {\n const newInput = input.slice(0, state.context.startPos) + \n preview + \n input.slice(state.preview.wordRange[1])\n \n onInputChange(newInput)\n setCursorOffset(state.context.startPos + preview.length)\n \n updateState({\n selectedIndex: newIndex,\n preview: {\n ...state.preview,\n wordRange: [state.context.startPos, state.context.startPos + preview.length]\n }\n })\n } else {\n updateState({ selectedIndex: newIndex })\n }\n }\n \n if (key.downArrow) {\n const nextIndex = (state.selectedIndex + 1) % state.suggestions.length\n handleNavigation(nextIndex)\n return true\n }\n \n if (key.upArrow) {\n const nextIndex = state.selectedIndex === 0 \n ? state.suggestions.length - 1 \n : state.selectedIndex - 1\n handleNavigation(nextIndex)\n return true\n }\n \n // Space key - complete and potentially continue for directories\n if (inputChar === ' ' && state.isActive && state.suggestions.length > 0) {\n const selectedSuggestion = state.suggestions[state.selectedIndex]\n const isDirectory = selectedSuggestion.value.endsWith('/')\n \n if (!state.context) return false\n \n // Apply completion if needed\n const currentWordAtContext = input.slice(state.context.startPos, \n state.context.startPos + selectedSuggestion.value.length)\n \n if (currentWordAtContext !== selectedSuggestion.value) {\n completeWith(selectedSuggestion, state.context)\n }\n \n resetCompletion()\n \n if (isDirectory) {\n // Continue completion for directories\n setTimeout(() => {\n const newContext = {\n ...state.context,\n prefix: selectedSuggestion.value,\n endPos: state.context.startPos + selectedSuggestion.value.length\n }\n \n const newSuggestions = generateSuggestions(newContext)\n \n if (newSuggestions.length > 0) {\n activateCompletion(newSuggestions, newContext)\n } else {\n updateState({\n emptyDirMessage: `Directory is empty: ${selectedSuggestion.value}`\n })\n setTimeout(() => updateState({ emptyDirMessage: '' }), 3000)\n }\n }, 50)\n }\n \n return true\n }\n \n // Right arrow key - same as space but different semantics\n if (key.rightArrow) {\n const selectedSuggestion = state.suggestions[state.selectedIndex]\n const isDirectory = selectedSuggestion.value.endsWith('/')\n \n if (!state.context) return false\n \n // Apply completion\n const currentWordAtContext = input.slice(state.context.startPos, \n state.context.startPos + selectedSuggestion.value.length)\n \n if (currentWordAtContext !== selectedSuggestion.value) {\n completeWith(selectedSuggestion, state.context)\n }\n \n resetCompletion()\n \n if (isDirectory) {\n // Continue for directories\n setTimeout(() => {\n const newContext = {\n ...state.context,\n prefix: selectedSuggestion.value,\n endPos: state.context.startPos + selectedSuggestion.value.length\n }\n \n const newSuggestions = generateSuggestions(newContext)\n \n if (newSuggestions.length > 0) {\n activateCompletion(newSuggestions, newContext)\n } else {\n updateState({\n emptyDirMessage: `Directory is empty: ${selectedSuggestion.value}`\n })\n setTimeout(() => updateState({ emptyDirMessage: '' }), 3000)\n }\n }, 50)\n }\n \n return true\n }\n \n if (key.escape) {\n // Restore original text if in preview mode\n if (state.preview?.isActive && state.context) {\n onInputChange(state.preview.originalInput)\n setCursorOffset(state.context.startPos + state.context.prefix.length)\n }\n \n resetCompletion()\n return true\n }\n \n return false\n })\n\n // Handle delete/backspace keys - unified state management\n useInput((input_str, key) => {\n if (key.backspace || key.delete) {\n if (state.isActive) {\n resetCompletion()\n // Smart suppression based on input complexity\n const suppressionTime = input.length > 10 ? 200 : 100\n updateState({ \n suppressUntil: Date.now() + suppressionTime\n })\n return true\n }\n }\n return false\n })\n\n // Input tracking with ref to avoid infinite loops\n const lastInputRef = useRef('')\n \n // Smart auto-triggering with cycle prevention\n useEffect(() => {\n // Prevent infinite loops by using ref\n if (lastInputRef.current === input) return\n \n const inputLengthChange = Math.abs(input.length - lastInputRef.current.length)\n const isHistoryNavigation = (\n inputLengthChange > 10 || // Large content change\n (inputLengthChange > 5 && !input.includes(lastInputRef.current.slice(-5))) // Different content\n ) && input !== lastInputRef.current\n \n // Update ref (no state update)\n lastInputRef.current = input\n \n // Skip if in preview mode or suppressed\n if (state.preview?.isActive || Date.now() < state.suppressUntil) {\n return\n }\n \n // Clear suggestions on history navigation\n if (isHistoryNavigation && state.isActive) {\n resetCompletion()\n return\n }\n \n const context = getWordAtCursor()\n \n if (context && shouldAutoTrigger(context)) {\n const newSuggestions = generateSuggestions(context)\n \n if (newSuggestions.length === 0) {\n resetCompletion()\n } else if (newSuggestions.length === 1 && shouldAutoHideSingleMatch(newSuggestions[0], context)) {\n resetCompletion() // Perfect match - hide\n } else {\n activateCompletion(newSuggestions, context)\n }\n } else if (state.context) {\n // Check if context changed significantly\n const contextChanged = !context ||\n state.context.type !== context.type ||\n state.context.startPos !== context.startPos ||\n !context.prefix.startsWith(state.context.prefix)\n \n if (contextChanged) {\n resetCompletion()\n }\n }\n }, [input, cursorOffset])\n\n // Smart triggering - only when it makes sense\n const shouldAutoTrigger = useCallback((context: CompletionContext): boolean => {\n switch (context.type) {\n case 'command':\n // Trigger immediately for slash commands\n return true\n case 'agent':\n // Trigger immediately for agent references\n return true \n case 'file':\n // Be selective about file completion - avoid noise\n const prefix = context.prefix\n \n // Always trigger for clear path patterns\n if (prefix.startsWith('./') || prefix.startsWith('../') || \n prefix.startsWith('/') || prefix.startsWith('~') || \n prefix.includes('/')) {\n return true\n }\n \n // Trigger for single dot followed by something (like .g for .gitignore)\n if (prefix.startsWith('.') && prefix.length >= 2) {\n return true\n }\n \n // Skip very short prefixes that are likely code\n return false\n default:\n return false\n }\n }, [])\n\n // Helper function to determine if single suggestion should be auto-hidden\n const shouldAutoHideSingleMatch = useCallback((suggestion: UnifiedSuggestion, context: CompletionContext): boolean => {\n // Extract the actual typed input from context\n const currentInput = input.slice(context.startPos, context.endPos)\n // Check if should auto-hide single match\n \n // For files: more intelligent matching\n if (context.type === 'file') {\n // Special case: if suggestion is a directory (ends with /), don't auto-hide \n // because user might want to continue navigating into it\n if (suggestion.value.endsWith('/')) {\n // Directory suggestion, keeping visible\n return false \n }\n \n // Check exact match\n if (currentInput === suggestion.value) {\n // Exact match, hiding\n return true\n }\n \n // Check if current input is a complete file path and suggestion is just the filename\n // e.g., currentInput: \"src/tools/ThinkTool/ThinkTool.tsx\", suggestion: \"ThinkTool.tsx\"\n if (currentInput.endsWith('/' + suggestion.value) || currentInput.endsWith(suggestion.value)) {\n // Path ends with suggestion, hiding\n return true\n }\n \n return false\n }\n \n // For commands: check if /prefix exactly matches /command\n if (context.type === 'command') {\n const fullCommand = `/${suggestion.value}`\n const matches = currentInput === fullCommand\n // Check command match\n return matches\n }\n \n // For agents: check if @prefix exactly matches @agent-name\n if (context.type === 'agent') {\n const fullAgent = `@${suggestion.value}`\n const matches = currentInput === fullAgent\n // Check agent match\n return matches\n }\n \n return false\n }, [input])\n\n return {\n suggestions,\n selectedIndex,\n isActive,\n emptyDirMessage,\n }\n}"],
5
- "mappings": "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",
6
- "names": ["suggestions", "readdirSync", "statSync", "commands"]
7
- }
package/dist/messages.js DELETED
@@ -1,33 +0,0 @@
1
- let getMessages = () => [];
2
- let setMessages = () => {
3
- };
4
- function setMessagesGetter(getter) {
5
- getMessages = getter;
6
- }
7
- function getMessagesGetter() {
8
- return getMessages;
9
- }
10
- function setMessagesSetter(setter) {
11
- setMessages = setter;
12
- }
13
- function getMessagesSetter() {
14
- return setMessages;
15
- }
16
- let onModelConfigChange = null;
17
- function setModelConfigChangeHandler(handler) {
18
- onModelConfigChange = handler;
19
- }
20
- function triggerModelConfigChange() {
21
- if (onModelConfigChange) {
22
- onModelConfigChange();
23
- }
24
- }
25
- export {
26
- getMessagesGetter,
27
- getMessagesSetter,
28
- setMessagesGetter,
29
- setMessagesSetter,
30
- setModelConfigChangeHandler,
31
- triggerModelConfigChange
32
- };
33
- //# sourceMappingURL=messages.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/messages.ts"],
4
- "sourcesContent": ["import React from 'react'\nimport type { Message } from './query'\n\nlet getMessages: () => Message[] = () => []\nlet setMessages: React.Dispatch<React.SetStateAction<Message[]>> = () => {}\n\nexport function setMessagesGetter(getter: () => Message[]) {\n getMessages = getter\n}\n\nexport function getMessagesGetter(): () => Message[] {\n return getMessages\n}\n\nexport function setMessagesSetter(\n setter: React.Dispatch<React.SetStateAction<Message[]>>,\n) {\n setMessages = setter\n}\n\nexport function getMessagesSetter(): React.Dispatch<\n React.SetStateAction<Message[]>\n> {\n return setMessages\n}\n\n// Global UI refresh mechanism for model configuration changes\nlet onModelConfigChange: (() => void) | null = null\n\nexport function setModelConfigChangeHandler(handler: () => void) {\n onModelConfigChange = handler\n}\n\nexport function triggerModelConfigChange() {\n if (onModelConfigChange) {\n onModelConfigChange()\n }\n}\n"],
5
- "mappings": "AAGA,IAAI,cAA+B,MAAM,CAAC;AAC1C,IAAI,cAA+D,MAAM;AAAC;AAEnE,SAAS,kBAAkB,QAAyB;AACzD,gBAAc;AAChB;AAEO,SAAS,oBAAqC;AACnD,SAAO;AACT;AAEO,SAAS,kBACd,QACA;AACA,gBAAc;AAChB;AAEO,SAAS,oBAEd;AACA,SAAO;AACT;AAGA,IAAI,sBAA2C;AAExC,SAAS,4BAA4B,SAAqB;AAC/D,wBAAsB;AACxB;AAEO,SAAS,2BAA2B;AACzC,MAAI,qBAAqB;AACvB,wBAAoB;AAAA,EACtB;AACF;",
6
- "names": []
7
- }
@@ -1,194 +0,0 @@
1
- import { BashTool, inputSchema } from "./tools/BashTool/BashTool.js";
2
- import { FileEditTool } from "./tools/FileEditTool/FileEditTool.js";
3
- import { FileWriteTool } from "./tools/FileWriteTool/FileWriteTool.js";
4
- import { NotebookEditTool } from "./tools/NotebookEditTool/NotebookEditTool.js";
5
- import { getCommandSubcommandPrefix, splitCommand } from "./utils/commands.js";
6
- import {
7
- getCurrentProjectConfig,
8
- saveCurrentProjectConfig
9
- } from "./utils/config.js";
10
- import { AbortError } from "./utils/errors.js";
11
- import { logError } from "./utils/log.js";
12
- import { grantWritePermissionForOriginalDir } from "./utils/permissions/filesystem.js";
13
- import { getCwd } from "./utils/state.js";
14
- import { PRODUCT_NAME } from "./constants/product.js";
15
- const SAFE_COMMANDS = /* @__PURE__ */ new Set([
16
- "git status",
17
- "git diff",
18
- "git log",
19
- "git branch",
20
- "pwd",
21
- "tree",
22
- "date",
23
- "which"
24
- ]);
25
- const bashToolCommandHasExactMatchPermission = (tool, command, allowedTools) => {
26
- if (SAFE_COMMANDS.has(command)) {
27
- return true;
28
- }
29
- if (allowedTools.includes(getPermissionKey(tool, { command }, null))) {
30
- return true;
31
- }
32
- if (allowedTools.includes(getPermissionKey(tool, { command }, command))) {
33
- return true;
34
- }
35
- return false;
36
- };
37
- const bashToolCommandHasPermission = (tool, command, prefix, allowedTools) => {
38
- if (bashToolCommandHasExactMatchPermission(tool, command, allowedTools)) {
39
- return true;
40
- }
41
- return allowedTools.includes(getPermissionKey(tool, { command }, prefix));
42
- };
43
- const bashToolHasPermission = async (tool, command, context, allowedTools, getCommandSubcommandPrefixFn = getCommandSubcommandPrefix) => {
44
- if (bashToolCommandHasExactMatchPermission(tool, command, allowedTools)) {
45
- return { result: true };
46
- }
47
- const subCommands = splitCommand(command).filter((_) => {
48
- if (_ === `cd ${getCwd()}`) {
49
- return false;
50
- }
51
- return true;
52
- });
53
- const commandSubcommandPrefix = await getCommandSubcommandPrefixFn(
54
- command,
55
- context.abortController.signal
56
- );
57
- if (context.abortController.signal.aborted) {
58
- throw new AbortError();
59
- }
60
- if (commandSubcommandPrefix === null) {
61
- return {
62
- result: false,
63
- message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`
64
- };
65
- }
66
- if (commandSubcommandPrefix.commandInjectionDetected) {
67
- if (bashToolCommandHasExactMatchPermission(tool, command, allowedTools)) {
68
- return { result: true };
69
- } else {
70
- return {
71
- result: false,
72
- message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`
73
- };
74
- }
75
- }
76
- if (subCommands.length < 2) {
77
- if (bashToolCommandHasPermission(
78
- tool,
79
- command,
80
- commandSubcommandPrefix.commandPrefix,
81
- allowedTools
82
- )) {
83
- return { result: true };
84
- } else {
85
- return {
86
- result: false,
87
- message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`
88
- };
89
- }
90
- }
91
- if (subCommands.every((subCommand) => {
92
- const prefixResult = commandSubcommandPrefix.subcommandPrefixes.get(subCommand);
93
- if (prefixResult === void 0 || prefixResult.commandInjectionDetected) {
94
- return false;
95
- }
96
- const hasPermission = bashToolCommandHasPermission(
97
- tool,
98
- subCommand,
99
- prefixResult ? prefixResult.commandPrefix : null,
100
- allowedTools
101
- );
102
- return hasPermission;
103
- })) {
104
- return { result: true };
105
- }
106
- return {
107
- result: false,
108
- message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`
109
- };
110
- };
111
- const hasPermissionsToUseTool = async (tool, input, context, _assistantMessage) => {
112
- if (!context.options.safeMode) {
113
- return { result: true };
114
- }
115
- if (context.abortController.signal.aborted) {
116
- throw new AbortError();
117
- }
118
- try {
119
- if (!tool.needsPermissions(input)) {
120
- return { result: true };
121
- }
122
- } catch (e) {
123
- logError(`Error checking permissions: ${e}`);
124
- return { result: false, message: "Error checking permissions" };
125
- }
126
- const projectConfig = getCurrentProjectConfig();
127
- const allowedTools = projectConfig.allowedTools ?? [];
128
- if (tool === BashTool && allowedTools.includes(BashTool.name)) {
129
- return { result: true };
130
- }
131
- switch (tool) {
132
- // For bash tool, check each sub-command's permissions separately
133
- case BashTool: {
134
- const { command } = inputSchema.parse(input);
135
- return await bashToolHasPermission(tool, command, context, allowedTools);
136
- }
137
- // For file editing tools, check session-only permissions
138
- case FileEditTool:
139
- case FileWriteTool:
140
- case NotebookEditTool: {
141
- if (!tool.needsPermissions(input)) {
142
- return { result: true };
143
- }
144
- return {
145
- result: false,
146
- message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`
147
- };
148
- }
149
- // For other tools, check persistent permissions
150
- default: {
151
- const permissionKey = getPermissionKey(tool, input, null);
152
- if (allowedTools.includes(permissionKey)) {
153
- return { result: true };
154
- }
155
- return {
156
- result: false,
157
- message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`
158
- };
159
- }
160
- }
161
- };
162
- async function savePermission(tool, input, prefix) {
163
- const key = getPermissionKey(tool, input, prefix);
164
- if (tool === FileEditTool || tool === FileWriteTool || tool === NotebookEditTool) {
165
- grantWritePermissionForOriginalDir();
166
- return;
167
- }
168
- const projectConfig = getCurrentProjectConfig();
169
- if (projectConfig.allowedTools.includes(key)) {
170
- return;
171
- }
172
- projectConfig.allowedTools.push(key);
173
- projectConfig.allowedTools.sort();
174
- saveCurrentProjectConfig(projectConfig);
175
- }
176
- function getPermissionKey(tool, input, prefix) {
177
- switch (tool) {
178
- case BashTool:
179
- if (prefix) {
180
- return `${BashTool.name}(${prefix}:*)`;
181
- }
182
- return `${BashTool.name}(${BashTool.renderToolUseMessage(input)})`;
183
- default:
184
- return tool.name;
185
- }
186
- }
187
- export {
188
- bashToolCommandHasExactMatchPermission,
189
- bashToolCommandHasPermission,
190
- bashToolHasPermission,
191
- hasPermissionsToUseTool,
192
- savePermission
193
- };
194
- //# sourceMappingURL=permissions.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/permissions.ts"],
4
- "sourcesContent": ["import type { CanUseToolFn } from './hooks/useCanUseTool'\nimport { Tool, ToolUseContext } from './Tool'\nimport { BashTool, inputSchema } from './tools/BashTool/BashTool'\nimport { FileEditTool } from './tools/FileEditTool/FileEditTool'\nimport { FileWriteTool } from './tools/FileWriteTool/FileWriteTool'\nimport { NotebookEditTool } from './tools/NotebookEditTool/NotebookEditTool'\nimport { getCommandSubcommandPrefix, splitCommand } from './utils/commands'\nimport {\n getCurrentProjectConfig,\n saveCurrentProjectConfig,\n} from './utils/config.js'\nimport { AbortError } from './utils/errors'\nimport { logError } from './utils/log'\nimport { grantWritePermissionForOriginalDir } from './utils/permissions/filesystem'\nimport { getCwd } from './utils/state'\nimport { PRODUCT_NAME } from './constants/product'\n\n// Commands that are known to be safe for execution\nconst SAFE_COMMANDS = new Set([\n 'git status',\n 'git diff',\n 'git log',\n 'git branch',\n 'pwd',\n 'tree',\n 'date',\n 'which',\n])\n\nexport const bashToolCommandHasExactMatchPermission = (\n tool: Tool,\n command: string,\n allowedTools: string[],\n): boolean => {\n if (SAFE_COMMANDS.has(command)) {\n return true\n }\n // Check exact match first\n if (allowedTools.includes(getPermissionKey(tool, { command }, null))) {\n return true\n }\n // Check if command is an exact match with an approved prefix\n if (allowedTools.includes(getPermissionKey(tool, { command }, command))) {\n return true\n }\n return false\n}\n\nexport const bashToolCommandHasPermission = (\n tool: Tool,\n command: string,\n prefix: string | null,\n allowedTools: string[],\n): boolean => {\n // Check exact match first\n if (bashToolCommandHasExactMatchPermission(tool, command, allowedTools)) {\n return true\n }\n return allowedTools.includes(getPermissionKey(tool, { command }, prefix))\n}\n\nexport const bashToolHasPermission = async (\n tool: Tool,\n command: string,\n context: ToolUseContext,\n allowedTools: string[],\n getCommandSubcommandPrefixFn = getCommandSubcommandPrefix,\n): Promise<PermissionResult> => {\n if (bashToolCommandHasExactMatchPermission(tool, command, allowedTools)) {\n // This is an exact match for a command that is allowed, so we can skip the prefix check\n return { result: true }\n }\n\n const subCommands = splitCommand(command).filter(_ => {\n // Denim likes to add this, we strip it out so we don't need to prompt the user each time\n if (_ === `cd ${getCwd()}`) {\n return false\n }\n return true\n })\n const commandSubcommandPrefix = await getCommandSubcommandPrefixFn(\n command,\n context.abortController.signal,\n )\n if (context.abortController.signal.aborted) {\n throw new AbortError()\n }\n\n if (commandSubcommandPrefix === null) {\n // Fail closed and ask for user approval if the command prefix query failed (e.g. due to network error)\n // This is NOT the same as `fullCommandPrefix.commandPrefix === null`, which means no prefix was detected\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n\n if (commandSubcommandPrefix.commandInjectionDetected) {\n // Only allow exact matches for potential command injections\n if (bashToolCommandHasExactMatchPermission(tool, command, allowedTools)) {\n return { result: true }\n } else {\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n }\n\n // If there is only one command, no need to process subCommands\n if (subCommands.length < 2) {\n if (\n bashToolCommandHasPermission(\n tool,\n command,\n commandSubcommandPrefix.commandPrefix,\n allowedTools,\n )\n ) {\n return { result: true }\n } else {\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n }\n if (\n subCommands.every(subCommand => {\n const prefixResult =\n commandSubcommandPrefix.subcommandPrefixes.get(subCommand)\n if (prefixResult === undefined || prefixResult.commandInjectionDetected) {\n // If prefix result is missing or command injection is detected, always ask for permission\n return false\n }\n const hasPermission = bashToolCommandHasPermission(\n tool,\n subCommand,\n prefixResult ? prefixResult.commandPrefix : null,\n allowedTools,\n )\n return hasPermission\n })\n ) {\n return { result: true }\n }\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n}\n\ntype PermissionResult = { result: true } | { result: false; message: string }\n\nexport const hasPermissionsToUseTool: CanUseToolFn = async (\n tool,\n input,\n context,\n _assistantMessage,\n): Promise<PermissionResult> => {\n // If safe mode is not enabled, allow all tools (permissive by default)\n if (!context.options.safeMode) {\n return { result: true }\n }\n\n if (context.abortController.signal.aborted) {\n throw new AbortError()\n }\n\n // Check if the tool needs permissions\n try {\n if (!tool.needsPermissions(input as never)) {\n return { result: true }\n }\n } catch (e) {\n logError(`Error checking permissions: ${e}`)\n return { result: false, message: 'Error checking permissions' }\n }\n\n const projectConfig = getCurrentProjectConfig()\n const allowedTools = projectConfig.allowedTools ?? []\n // Special case for BashTool to allow blanket commands without exposing them in the UI\n if (tool === BashTool && allowedTools.includes(BashTool.name)) {\n return { result: true }\n }\n\n // TODO: Move this into tool definitions (done for read tools!)\n switch (tool) {\n // For bash tool, check each sub-command's permissions separately\n case BashTool: {\n // The types have already been validated by the tool,\n // so we can safely parse the input (as opposed to safeParse).\n const { command } = inputSchema.parse(input)\n return await bashToolHasPermission(tool, command, context, allowedTools)\n }\n // For file editing tools, check session-only permissions\n case FileEditTool:\n case FileWriteTool:\n case NotebookEditTool: {\n // The types have already been validated by the tool,\n // so we can safely pass this in\n if (!tool.needsPermissions(input)) {\n return { result: true }\n }\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n // For other tools, check persistent permissions\n default: {\n const permissionKey = getPermissionKey(tool, input, null)\n if (allowedTools.includes(permissionKey)) {\n return { result: true }\n }\n\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n }\n}\n\nexport async function savePermission(\n tool: Tool,\n input: { [k: string]: unknown },\n prefix: string | null,\n): Promise<void> {\n const key = getPermissionKey(tool, input, prefix)\n\n // For file editing tools, store write permissions only in memory\n if (\n tool === FileEditTool ||\n tool === FileWriteTool ||\n tool === NotebookEditTool\n ) {\n grantWritePermissionForOriginalDir()\n return\n }\n\n // For other tools, store permissions on disk\n const projectConfig = getCurrentProjectConfig()\n if (projectConfig.allowedTools.includes(key)) {\n return\n }\n\n projectConfig.allowedTools.push(key)\n projectConfig.allowedTools.sort()\n\n saveCurrentProjectConfig(projectConfig)\n}\n\nfunction getPermissionKey(\n tool: Tool,\n input: { [k: string]: unknown },\n prefix: string | null,\n): string {\n switch (tool) {\n case BashTool:\n if (prefix) {\n return `${BashTool.name}(${prefix}:*)`\n }\n return `${BashTool.name}(${BashTool.renderToolUseMessage(input as never)})`\n default:\n return tool.name\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }