@within-7/minto 0.0.5-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (701) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1097 -0
  3. package/README.zh-CN.md +1097 -0
  4. package/cli.js +59 -0
  5. package/dist/Tool.js +1 -0
  6. package/dist/Tool.js.map +7 -0
  7. package/dist/commands/agents.js +2086 -0
  8. package/dist/commands/agents.js.map +7 -0
  9. package/dist/commands/approvedTools.js +36 -0
  10. package/dist/commands/approvedTools.js.map +7 -0
  11. package/dist/commands/bug.js +21 -0
  12. package/dist/commands/bug.js.map +7 -0
  13. package/dist/commands/build.js +74 -0
  14. package/dist/commands/build.js.map +7 -0
  15. package/dist/commands/clear.js +37 -0
  16. package/dist/commands/clear.js.map +7 -0
  17. package/dist/commands/compact.js +82 -0
  18. package/dist/commands/compact.js.map +7 -0
  19. package/dist/commands/compression.js +57 -0
  20. package/dist/commands/compression.js.map +7 -0
  21. package/dist/commands/config.js +20 -0
  22. package/dist/commands/config.js.map +7 -0
  23. package/dist/commands/cost.js +19 -0
  24. package/dist/commands/cost.js.map +7 -0
  25. package/dist/commands/ctx_viz.js +152 -0
  26. package/dist/commands/ctx_viz.js.map +7 -0
  27. package/dist/commands/doctor.js +25 -0
  28. package/dist/commands/doctor.js.map +7 -0
  29. package/dist/commands/help.js +20 -0
  30. package/dist/commands/help.js.map +7 -0
  31. package/dist/commands/init.js +38 -0
  32. package/dist/commands/init.js.map +7 -0
  33. package/dist/commands/listen.js +37 -0
  34. package/dist/commands/listen.js.map +7 -0
  35. package/dist/commands/login.js +37 -0
  36. package/dist/commands/login.js.map +7 -0
  37. package/dist/commands/logout.js +33 -0
  38. package/dist/commands/logout.js.map +7 -0
  39. package/dist/commands/mcp-interactive.js +267 -0
  40. package/dist/commands/mcp-interactive.js.map +7 -0
  41. package/dist/commands/mcp.js +40 -0
  42. package/dist/commands/mcp.js.map +7 -0
  43. package/dist/commands/mcp_refresh.js +40 -0
  44. package/dist/commands/mcp_refresh.js.map +7 -0
  45. package/dist/commands/model.js +41 -0
  46. package/dist/commands/model.js.map +7 -0
  47. package/dist/commands/modelstatus.js +21 -0
  48. package/dist/commands/modelstatus.js.map +7 -0
  49. package/dist/commands/onboarding.js +36 -0
  50. package/dist/commands/onboarding.js.map +7 -0
  51. package/dist/commands/plugin/AddMarketplaceForm.js +62 -0
  52. package/dist/commands/plugin/AddMarketplaceForm.js.map +7 -0
  53. package/dist/commands/plugin/ConfirmDialog.js +71 -0
  54. package/dist/commands/plugin/ConfirmDialog.js.map +7 -0
  55. package/dist/commands/plugin/ErrorView.js +33 -0
  56. package/dist/commands/plugin/ErrorView.js.map +7 -0
  57. package/dist/commands/plugin/InstalledPluginsByMarketplace.js +135 -0
  58. package/dist/commands/plugin/InstalledPluginsByMarketplace.js.map +7 -0
  59. package/dist/commands/plugin/InstalledPluginsManager.js +99 -0
  60. package/dist/commands/plugin/InstalledPluginsManager.js.map +7 -0
  61. package/dist/commands/plugin/LoadingView.js +14 -0
  62. package/dist/commands/plugin/LoadingView.js.map +7 -0
  63. package/dist/commands/plugin/MainMenu.js +57 -0
  64. package/dist/commands/plugin/MainMenu.js.map +7 -0
  65. package/dist/commands/plugin/MarketplaceManager.js +155 -0
  66. package/dist/commands/plugin/MarketplaceManager.js.map +7 -0
  67. package/dist/commands/plugin/MarketplaceSelector.js +119 -0
  68. package/dist/commands/plugin/MarketplaceSelector.js.map +7 -0
  69. package/dist/commands/plugin/PlaceholderScreen.js +16 -0
  70. package/dist/commands/plugin/PlaceholderScreen.js.map +7 -0
  71. package/dist/commands/plugin/PluginBrowser.js +180 -0
  72. package/dist/commands/plugin/PluginBrowser.js.map +7 -0
  73. package/dist/commands/plugin/PluginDetailsInstall.js +152 -0
  74. package/dist/commands/plugin/PluginDetailsInstall.js.map +7 -0
  75. package/dist/commands/plugin/PluginDetailsManage.js +200 -0
  76. package/dist/commands/plugin/PluginDetailsManage.js.map +7 -0
  77. package/dist/commands/plugin/components.js +16 -0
  78. package/dist/commands/plugin/components.js.map +7 -0
  79. package/dist/commands/plugin/example-usage.js +63 -0
  80. package/dist/commands/plugin/example-usage.js.map +7 -0
  81. package/dist/commands/plugin/types.js +1 -0
  82. package/dist/commands/plugin/types.js.map +7 -0
  83. package/dist/commands/plugin/utils.js +77 -0
  84. package/dist/commands/plugin/utils.js.map +7 -0
  85. package/dist/commands/plugin-interactive.js +446 -0
  86. package/dist/commands/plugin-interactive.js.map +7 -0
  87. package/dist/commands/plugin.js +523 -0
  88. package/dist/commands/plugin.js.map +7 -0
  89. package/dist/commands/pr_comments.js +61 -0
  90. package/dist/commands/pr_comments.js.map +7 -0
  91. package/dist/commands/quit.js +16 -0
  92. package/dist/commands/quit.js.map +7 -0
  93. package/dist/commands/refreshCommands.js +43 -0
  94. package/dist/commands/refreshCommands.js.map +7 -0
  95. package/dist/commands/release-notes.js +30 -0
  96. package/dist/commands/release-notes.js.map +7 -0
  97. package/dist/commands/resume.js +35 -0
  98. package/dist/commands/resume.js.map +7 -0
  99. package/dist/commands/review.js +51 -0
  100. package/dist/commands/review.js.map +7 -0
  101. package/dist/commands/terminalSetup.js +164 -0
  102. package/dist/commands/terminalSetup.js.map +7 -0
  103. package/dist/commands.js +104 -0
  104. package/dist/commands.js.map +7 -0
  105. package/dist/components/AgentResponseBlock.js +41 -0
  106. package/dist/components/AgentResponseBlock.js.map +7 -0
  107. package/dist/components/AgentThinkingBlock.js +40 -0
  108. package/dist/components/AgentThinkingBlock.js.map +7 -0
  109. package/dist/components/AsciiLogo.js +19 -0
  110. package/dist/components/AsciiLogo.js.map +7 -0
  111. package/dist/components/BackgroundTasksPanel.js +124 -0
  112. package/dist/components/BackgroundTasksPanel.js.map +7 -0
  113. package/dist/components/Bug.js +147 -0
  114. package/dist/components/Bug.js.map +7 -0
  115. package/dist/components/Config.js +166 -0
  116. package/dist/components/Config.js.map +7 -0
  117. package/dist/components/ConsoleOAuthFlow.js +178 -0
  118. package/dist/components/ConsoleOAuthFlow.js.map +7 -0
  119. package/dist/components/Cost.js +13 -0
  120. package/dist/components/Cost.js.map +7 -0
  121. package/dist/components/CostThresholdDialog.js +38 -0
  122. package/dist/components/CostThresholdDialog.js.map +7 -0
  123. package/dist/components/CustomSelect/option-map.js +32 -0
  124. package/dist/components/CustomSelect/option-map.js.map +7 -0
  125. package/dist/components/CustomSelect/select-option.js +34 -0
  126. package/dist/components/CustomSelect/select-option.js.map +7 -0
  127. package/dist/components/CustomSelect/select.js +64 -0
  128. package/dist/components/CustomSelect/select.js.map +7 -0
  129. package/dist/components/CustomSelect/theme.js +1 -0
  130. package/dist/components/CustomSelect/theme.js.map +7 -0
  131. package/dist/components/CustomSelect/use-select-state.js +220 -0
  132. package/dist/components/CustomSelect/use-select-state.js.map +7 -0
  133. package/dist/components/CustomSelect/use-select.js +21 -0
  134. package/dist/components/CustomSelect/use-select.js.map +7 -0
  135. package/dist/components/FallbackToolUseRejectedMessage.js +11 -0
  136. package/dist/components/FallbackToolUseRejectedMessage.js.map +7 -0
  137. package/dist/components/FileEditToolUpdatedMessage.js +32 -0
  138. package/dist/components/FileEditToolUpdatedMessage.js.map +7 -0
  139. package/dist/components/HeaderBar.js +57 -0
  140. package/dist/components/HeaderBar.js.map +7 -0
  141. package/dist/components/Help.js +46 -0
  142. package/dist/components/Help.js.map +7 -0
  143. package/dist/components/HighlightedCode.js +30 -0
  144. package/dist/components/HighlightedCode.js.map +7 -0
  145. package/dist/components/HistorySearchOverlay.js +48 -0
  146. package/dist/components/HistorySearchOverlay.js.map +7 -0
  147. package/dist/components/InteractionRoundBlock.js +56 -0
  148. package/dist/components/InteractionRoundBlock.js.map +7 -0
  149. package/dist/components/InvalidConfigDialog.js +83 -0
  150. package/dist/components/InvalidConfigDialog.js.map +7 -0
  151. package/dist/components/Link.js +18 -0
  152. package/dist/components/Link.js.map +7 -0
  153. package/dist/components/LogSelector.js +50 -0
  154. package/dist/components/LogSelector.js.map +7 -0
  155. package/dist/components/Logo.js +96 -0
  156. package/dist/components/Logo.js.map +7 -0
  157. package/dist/components/MCPServerApprovalDialog.js +79 -0
  158. package/dist/components/MCPServerApprovalDialog.js.map +7 -0
  159. package/dist/components/MCPServerDialogCopy.js +11 -0
  160. package/dist/components/MCPServerDialogCopy.js.map +7 -0
  161. package/dist/components/MCPServerMultiselectDialog.js +80 -0
  162. package/dist/components/MCPServerMultiselectDialog.js.map +7 -0
  163. package/dist/components/Message.js +146 -0
  164. package/dist/components/Message.js.map +7 -0
  165. package/dist/components/MessageResponse.js +9 -0
  166. package/dist/components/MessageResponse.js.map +7 -0
  167. package/dist/components/MessageSelector.js +125 -0
  168. package/dist/components/MessageSelector.js.map +7 -0
  169. package/dist/components/ModeIndicator.js +38 -0
  170. package/dist/components/ModeIndicator.js.map +7 -0
  171. package/dist/components/ModelConfig.js +208 -0
  172. package/dist/components/ModelConfig.js.map +7 -0
  173. package/dist/components/ModelListManager.js +140 -0
  174. package/dist/components/ModelListManager.js.map +7 -0
  175. package/dist/components/ModelSelector.js +2062 -0
  176. package/dist/components/ModelSelector.js.map +7 -0
  177. package/dist/components/ModelStatusDisplay.js +87 -0
  178. package/dist/components/ModelStatusDisplay.js.map +7 -0
  179. package/dist/components/Onboarding.js +153 -0
  180. package/dist/components/Onboarding.js.map +7 -0
  181. package/dist/components/PressEnterToContinue.js +10 -0
  182. package/dist/components/PressEnterToContinue.js.map +7 -0
  183. package/dist/components/ProjectOnboarding.js +99 -0
  184. package/dist/components/ProjectOnboarding.js.map +7 -0
  185. package/dist/components/PromptInput.js +755 -0
  186. package/dist/components/PromptInput.js.map +7 -0
  187. package/dist/components/QuitSummary.js +81 -0
  188. package/dist/components/QuitSummary.js.map +7 -0
  189. package/dist/components/SentryErrorBoundary.js +27 -0
  190. package/dist/components/SentryErrorBoundary.js.map +7 -0
  191. package/dist/components/Spinner.js +101 -0
  192. package/dist/components/Spinner.js.map +7 -0
  193. package/dist/components/SpinnerSymbol.js +78 -0
  194. package/dist/components/SpinnerSymbol.js.map +7 -0
  195. package/dist/components/StreamingBashOutput.js +70 -0
  196. package/dist/components/StreamingBashOutput.js.map +7 -0
  197. package/dist/components/StructuredDiff.js +148 -0
  198. package/dist/components/StructuredDiff.js.map +7 -0
  199. package/dist/components/SubagentBlock.js +157 -0
  200. package/dist/components/SubagentBlock.js.map +7 -0
  201. package/dist/components/SubagentManager.js +65 -0
  202. package/dist/components/SubagentManager.js.map +7 -0
  203. package/dist/components/SubagentProgress.js +109 -0
  204. package/dist/components/SubagentProgress.js.map +7 -0
  205. package/dist/components/SubagentStatusMarker.js +37 -0
  206. package/dist/components/SubagentStatusMarker.js.map +7 -0
  207. package/dist/components/TaskCard.js +170 -0
  208. package/dist/components/TaskCard.js.map +7 -0
  209. package/dist/components/TextInput.js +100 -0
  210. package/dist/components/TextInput.js.map +7 -0
  211. package/dist/components/TimelineRenderer.js +31 -0
  212. package/dist/components/TimelineRenderer.js.map +7 -0
  213. package/dist/components/TodoChangeBlock.js +29 -0
  214. package/dist/components/TodoChangeBlock.js.map +7 -0
  215. package/dist/components/TodoChangeLine.js +22 -0
  216. package/dist/components/TodoChangeLine.js.map +7 -0
  217. package/dist/components/TodoItem.js +35 -0
  218. package/dist/components/TodoItem.js.map +7 -0
  219. package/dist/components/TodoPanel.js +55 -0
  220. package/dist/components/TodoPanel.js.map +7 -0
  221. package/dist/components/TokenWarning.js +19 -0
  222. package/dist/components/TokenWarning.js.map +7 -0
  223. package/dist/components/ToolExecutionBlock.js +18 -0
  224. package/dist/components/ToolExecutionBlock.js.map +7 -0
  225. package/dist/components/ToolUseLoader.js +24 -0
  226. package/dist/components/ToolUseLoader.js.map +7 -0
  227. package/dist/components/TrustDialog.js +71 -0
  228. package/dist/components/TrustDialog.js.map +7 -0
  229. package/dist/components/UserQueryBlock.js +12 -0
  230. package/dist/components/UserQueryBlock.js.map +7 -0
  231. package/dist/components/binary-feedback/BinaryFeedback.js +50 -0
  232. package/dist/components/binary-feedback/BinaryFeedback.js.map +7 -0
  233. package/dist/components/binary-feedback/BinaryFeedbackOption.js +94 -0
  234. package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +7 -0
  235. package/dist/components/binary-feedback/BinaryFeedbackView.js +139 -0
  236. package/dist/components/binary-feedback/BinaryFeedbackView.js.map +7 -0
  237. package/dist/components/binary-feedback/utils.js +108 -0
  238. package/dist/components/binary-feedback/utils.js.map +7 -0
  239. package/dist/components/messages/AssistantBashOutputMessage.js +23 -0
  240. package/dist/components/messages/AssistantBashOutputMessage.js.map +7 -0
  241. package/dist/components/messages/AssistantLocalCommandOutputMessage.js +36 -0
  242. package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +7 -0
  243. package/dist/components/messages/AssistantRedactedThinkingMessage.js +12 -0
  244. package/dist/components/messages/AssistantRedactedThinkingMessage.js.map +7 -0
  245. package/dist/components/messages/AssistantTextMessage.js +78 -0
  246. package/dist/components/messages/AssistantTextMessage.js.map +7 -0
  247. package/dist/components/messages/AssistantThinkingMessage.js +27 -0
  248. package/dist/components/messages/AssistantThinkingMessage.js.map +7 -0
  249. package/dist/components/messages/AssistantToolUseMessage.js +91 -0
  250. package/dist/components/messages/AssistantToolUseMessage.js.map +7 -0
  251. package/dist/components/messages/TaskProgressMessage.js +11 -0
  252. package/dist/components/messages/TaskProgressMessage.js.map +7 -0
  253. package/dist/components/messages/TaskToolMessage.js +39 -0
  254. package/dist/components/messages/TaskToolMessage.js.map +7 -0
  255. package/dist/components/messages/UserBashInputMessage.js +18 -0
  256. package/dist/components/messages/UserBashInputMessage.js.map +7 -0
  257. package/dist/components/messages/UserCommandMessage.js +20 -0
  258. package/dist/components/messages/UserCommandMessage.js.map +7 -0
  259. package/dist/components/messages/UserKodingInputMessage.js +18 -0
  260. package/dist/components/messages/UserKodingInputMessage.js.map +7 -0
  261. package/dist/components/messages/UserPromptMessage.js +20 -0
  262. package/dist/components/messages/UserPromptMessage.js.map +7 -0
  263. package/dist/components/messages/UserTextMessage.js +25 -0
  264. package/dist/components/messages/UserTextMessage.js.map +7 -0
  265. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +10 -0
  266. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js.map +7 -0
  267. package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js +15 -0
  268. package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js.map +7 -0
  269. package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +25 -0
  270. package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js.map +7 -0
  271. package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +47 -0
  272. package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js.map +7 -0
  273. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +23 -0
  274. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +7 -0
  275. package/dist/components/messages/UserToolResultMessage/utils.js +50 -0
  276. package/dist/components/messages/UserToolResultMessage/utils.js.map +7 -0
  277. package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js +112 -0
  278. package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js.map +7 -0
  279. package/dist/components/permissions/FallbackPermissionRequest.js +131 -0
  280. package/dist/components/permissions/FallbackPermissionRequest.js.map +7 -0
  281. package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +159 -0
  282. package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js.map +7 -0
  283. package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +58 -0
  284. package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +7 -0
  285. package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +153 -0
  286. package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js.map +7 -0
  287. package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +70 -0
  288. package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +7 -0
  289. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +212 -0
  290. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +7 -0
  291. package/dist/components/permissions/PermissionRequest.js +70 -0
  292. package/dist/components/permissions/PermissionRequest.js.map +7 -0
  293. package/dist/components/permissions/PermissionRequestTitle.js +52 -0
  294. package/dist/components/permissions/PermissionRequestTitle.js.map +7 -0
  295. package/dist/components/permissions/hooks.js +23 -0
  296. package/dist/components/permissions/hooks.js.map +7 -0
  297. package/dist/components/permissions/toolUseOptions.js +46 -0
  298. package/dist/components/permissions/toolUseOptions.js.map +7 -0
  299. package/dist/components/permissions/utils.js +21 -0
  300. package/dist/components/permissions/utils.js.map +7 -0
  301. package/dist/constants/claude-asterisk-ascii-art.js +242 -0
  302. package/dist/constants/claude-asterisk-ascii-art.js.map +7 -0
  303. package/dist/constants/colors.js +126 -0
  304. package/dist/constants/colors.js.map +7 -0
  305. package/dist/constants/compressionPrompts.js +73 -0
  306. package/dist/constants/compressionPrompts.js.map +7 -0
  307. package/dist/constants/figures.js +6 -0
  308. package/dist/constants/figures.js.map +7 -0
  309. package/dist/constants/macros.js +11 -0
  310. package/dist/constants/macros.js.map +7 -0
  311. package/dist/constants/modelCapabilities.js +154 -0
  312. package/dist/constants/modelCapabilities.js.map +7 -0
  313. package/dist/constants/models.js +1034 -0
  314. package/dist/constants/models.js.map +7 -0
  315. package/dist/constants/oauth.js +18 -0
  316. package/dist/constants/oauth.js.map +7 -0
  317. package/dist/constants/product.js +26 -0
  318. package/dist/constants/product.js.map +7 -0
  319. package/dist/constants/prompts.js +168 -0
  320. package/dist/constants/prompts.js.map +7 -0
  321. package/dist/constants/releaseNotes.js +9 -0
  322. package/dist/constants/releaseNotes.js.map +7 -0
  323. package/dist/constants/symbols.js +50 -0
  324. package/dist/constants/symbols.js.map +7 -0
  325. package/dist/context/PermissionContext.js +111 -0
  326. package/dist/context/PermissionContext.js.map +7 -0
  327. package/dist/context.js +278 -0
  328. package/dist/context.js.map +7 -0
  329. package/dist/cost-tracker.js +76 -0
  330. package/dist/cost-tracker.js.map +7 -0
  331. package/dist/entrypoints/cli-wrapper.js +61 -0
  332. package/dist/entrypoints/cli-wrapper.js.map +7 -0
  333. package/dist/entrypoints/cli.js +1115 -0
  334. package/dist/entrypoints/cli.js.map +7 -0
  335. package/dist/entrypoints/mcp.js +150 -0
  336. package/dist/entrypoints/mcp.js.map +7 -0
  337. package/dist/history.js +25 -0
  338. package/dist/history.js.map +7 -0
  339. package/dist/hooks/useApiKeyVerification.js +12 -0
  340. package/dist/hooks/useApiKeyVerification.js.map +7 -0
  341. package/dist/hooks/useArrowKeyHistory.js +50 -0
  342. package/dist/hooks/useArrowKeyHistory.js.map +7 -0
  343. package/dist/hooks/useCanUseTool.js +87 -0
  344. package/dist/hooks/useCanUseTool.js.map +7 -0
  345. package/dist/hooks/useCancelRequest.js +28 -0
  346. package/dist/hooks/useCancelRequest.js.map +7 -0
  347. package/dist/hooks/useDoublePress.js +31 -0
  348. package/dist/hooks/useDoublePress.js.map +7 -0
  349. package/dist/hooks/useExitOnCtrlCD.js +26 -0
  350. package/dist/hooks/useExitOnCtrlCD.js.map +7 -0
  351. package/dist/hooks/useHistorySearch.js +62 -0
  352. package/dist/hooks/useHistorySearch.js.map +7 -0
  353. package/dist/hooks/useInterval.js +18 -0
  354. package/dist/hooks/useInterval.js.map +7 -0
  355. package/dist/hooks/useLogMessages.js +14 -0
  356. package/dist/hooks/useLogMessages.js.map +7 -0
  357. package/dist/hooks/useLogStartupTime.js +10 -0
  358. package/dist/hooks/useLogStartupTime.js.map +7 -0
  359. package/dist/hooks/useNotifyAfterTimeout.js +42 -0
  360. package/dist/hooks/useNotifyAfterTimeout.js.map +7 -0
  361. package/dist/hooks/usePermissionRequestLogging.js +23 -0
  362. package/dist/hooks/usePermissionRequestLogging.js.map +7 -0
  363. package/dist/hooks/useTerminalSize.js +38 -0
  364. package/dist/hooks/useTerminalSize.js.map +7 -0
  365. package/dist/hooks/useTextInput.js +252 -0
  366. package/dist/hooks/useTextInput.js.map +7 -0
  367. package/dist/hooks/useUnifiedCompletion.js +929 -0
  368. package/dist/hooks/useUnifiedCompletion.js.map +7 -0
  369. package/dist/index.js +5 -0
  370. package/dist/index.js.map +7 -0
  371. package/dist/messages.js +33 -0
  372. package/dist/messages.js.map +7 -0
  373. package/dist/package.json +4 -0
  374. package/dist/permissions.js +194 -0
  375. package/dist/permissions.js.map +7 -0
  376. package/dist/query.js +499 -0
  377. package/dist/query.js.map +7 -0
  378. package/dist/screens/Doctor.js +22 -0
  379. package/dist/screens/Doctor.js.map +7 -0
  380. package/dist/screens/LogList.js +55 -0
  381. package/dist/screens/LogList.js.map +7 -0
  382. package/dist/screens/REPL.js +671 -0
  383. package/dist/screens/REPL.js.map +7 -0
  384. package/dist/screens/ResumeConversation.js +56 -0
  385. package/dist/screens/ResumeConversation.js.map +7 -0
  386. package/dist/services/adapters/base.js +29 -0
  387. package/dist/services/adapters/base.js.map +7 -0
  388. package/dist/services/adapters/chatCompletions.js +69 -0
  389. package/dist/services/adapters/chatCompletions.js.map +7 -0
  390. package/dist/services/adapters/responsesAPI.js +126 -0
  391. package/dist/services/adapters/responsesAPI.js.map +7 -0
  392. package/dist/services/claude.js +1573 -0
  393. package/dist/services/claude.js.map +7 -0
  394. package/dist/services/compressionService.js +210 -0
  395. package/dist/services/compressionService.js.map +7 -0
  396. package/dist/services/customCommands.js +437 -0
  397. package/dist/services/customCommands.js.map +7 -0
  398. package/dist/services/fileFreshness.js +275 -0
  399. package/dist/services/fileFreshness.js.map +7 -0
  400. package/dist/services/gpt5ConnectionTest.js +248 -0
  401. package/dist/services/gpt5ConnectionTest.js.map +7 -0
  402. package/dist/services/hookExecutor.js +276 -0
  403. package/dist/services/hookExecutor.js.map +7 -0
  404. package/dist/services/mainAgentCompressor.js +84 -0
  405. package/dist/services/mainAgentCompressor.js.map +7 -0
  406. package/dist/services/mcpClient.js +449 -0
  407. package/dist/services/mcpClient.js.map +7 -0
  408. package/dist/services/mcpServerApproval.js +55 -0
  409. package/dist/services/mcpServerApproval.js.map +7 -0
  410. package/dist/services/mentionProcessor.js +201 -0
  411. package/dist/services/mentionProcessor.js.map +7 -0
  412. package/dist/services/modelAdapterFactory.js +47 -0
  413. package/dist/services/modelAdapterFactory.js.map +7 -0
  414. package/dist/services/notifier.js +35 -0
  415. package/dist/services/notifier.js.map +7 -0
  416. package/dist/services/oauth.js +247 -0
  417. package/dist/services/oauth.js.map +7 -0
  418. package/dist/services/openai.js +995 -0
  419. package/dist/services/openai.js.map +7 -0
  420. package/dist/services/responseStateManager.js +68 -0
  421. package/dist/services/responseStateManager.js.map +7 -0
  422. package/dist/services/sentry.js +9 -0
  423. package/dist/services/sentry.js.map +7 -0
  424. package/dist/services/subagentAbortManager.js +95 -0
  425. package/dist/services/subagentAbortManager.js.map +7 -0
  426. package/dist/services/subagentCompressor.js +146 -0
  427. package/dist/services/subagentCompressor.js.map +7 -0
  428. package/dist/services/systemReminder.js +335 -0
  429. package/dist/services/systemReminder.js.map +7 -0
  430. package/dist/services/vcr.js +133 -0
  431. package/dist/services/vcr.js.map +7 -0
  432. package/dist/tools/ArchitectTool/ArchitectTool.js +119 -0
  433. package/dist/tools/ArchitectTool/ArchitectTool.js.map +7 -0
  434. package/dist/tools/ArchitectTool/prompt.js +18 -0
  435. package/dist/tools/ArchitectTool/prompt.js.map +7 -0
  436. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +423 -0
  437. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +7 -0
  438. package/dist/tools/BashOutputTool/BashOutputTool.js +120 -0
  439. package/dist/tools/BashOutputTool/BashOutputTool.js.map +7 -0
  440. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js +11 -0
  441. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js.map +7 -0
  442. package/dist/tools/BashOutputTool/prompt.js +13 -0
  443. package/dist/tools/BashOutputTool/prompt.js.map +7 -0
  444. package/dist/tools/BashTool/BashTool.js +209 -0
  445. package/dist/tools/BashTool/BashTool.js.map +7 -0
  446. package/dist/tools/BashTool/BashToolResultMessage.js +21 -0
  447. package/dist/tools/BashTool/BashToolResultMessage.js.map +7 -0
  448. package/dist/tools/BashTool/OutputLine.js +30 -0
  449. package/dist/tools/BashTool/OutputLine.js.map +7 -0
  450. package/dist/tools/BashTool/prompt.js +180 -0
  451. package/dist/tools/BashTool/prompt.js.map +7 -0
  452. package/dist/tools/BashTool/utils.js +51 -0
  453. package/dist/tools/BashTool/utils.js.map +7 -0
  454. package/dist/tools/FileEditTool/FileEditTool.js +226 -0
  455. package/dist/tools/FileEditTool/FileEditTool.js.map +7 -0
  456. package/dist/tools/FileEditTool/prompt.js +54 -0
  457. package/dist/tools/FileEditTool/prompt.js.map +7 -0
  458. package/dist/tools/FileEditTool/utils.js +42 -0
  459. package/dist/tools/FileEditTool/utils.js.map +7 -0
  460. package/dist/tools/FileReadTool/FileReadTool.js +272 -0
  461. package/dist/tools/FileReadTool/FileReadTool.js.map +7 -0
  462. package/dist/tools/FileReadTool/prompt.js +10 -0
  463. package/dist/tools/FileReadTool/prompt.js.map +7 -0
  464. package/dist/tools/FileWriteTool/FileWriteTool.js +202 -0
  465. package/dist/tools/FileWriteTool/FileWriteTool.js.map +7 -0
  466. package/dist/tools/FileWriteTool/prompt.js +14 -0
  467. package/dist/tools/FileWriteTool/prompt.js.map +7 -0
  468. package/dist/tools/GlobTool/GlobTool.js +88 -0
  469. package/dist/tools/GlobTool/GlobTool.js.map +7 -0
  470. package/dist/tools/GlobTool/prompt.js +12 -0
  471. package/dist/tools/GlobTool/prompt.js.map +7 -0
  472. package/dist/tools/GrepTool/GrepTool.js +107 -0
  473. package/dist/tools/GrepTool/GrepTool.js.map +7 -0
  474. package/dist/tools/GrepTool/prompt.js +15 -0
  475. package/dist/tools/GrepTool/prompt.js.map +7 -0
  476. package/dist/tools/KillShellTool/KillShellTool.js +92 -0
  477. package/dist/tools/KillShellTool/KillShellTool.js.map +7 -0
  478. package/dist/tools/KillShellTool/KillShellToolResultMessage.js +11 -0
  479. package/dist/tools/KillShellTool/KillShellToolResultMessage.js.map +7 -0
  480. package/dist/tools/KillShellTool/prompt.js +12 -0
  481. package/dist/tools/KillShellTool/prompt.js.map +7 -0
  482. package/dist/tools/MCPTool/MCPTool.js +90 -0
  483. package/dist/tools/MCPTool/MCPTool.js.map +7 -0
  484. package/dist/tools/MCPTool/prompt.js +7 -0
  485. package/dist/tools/MCPTool/prompt.js.map +7 -0
  486. package/dist/tools/MemoryReadTool/MemoryReadTool.js +103 -0
  487. package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +7 -0
  488. package/dist/tools/MemoryReadTool/prompt.js +7 -0
  489. package/dist/tools/MemoryReadTool/prompt.js.map +7 -0
  490. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +77 -0
  491. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +7 -0
  492. package/dist/tools/MemoryWriteTool/prompt.js +7 -0
  493. package/dist/tools/MemoryWriteTool/prompt.js.map +7 -0
  494. package/dist/tools/MultiEditTool/MultiEditTool.js +301 -0
  495. package/dist/tools/MultiEditTool/MultiEditTool.js.map +7 -0
  496. package/dist/tools/MultiEditTool/prompt.js +48 -0
  497. package/dist/tools/MultiEditTool/prompt.js.map +7 -0
  498. package/dist/tools/NotebookEditTool/NotebookEditTool.js +238 -0
  499. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +7 -0
  500. package/dist/tools/NotebookEditTool/prompt.js +7 -0
  501. package/dist/tools/NotebookEditTool/prompt.js.map +7 -0
  502. package/dist/tools/NotebookReadTool/NotebookReadTool.js +212 -0
  503. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +7 -0
  504. package/dist/tools/NotebookReadTool/prompt.js +7 -0
  505. package/dist/tools/NotebookReadTool/prompt.js.map +7 -0
  506. package/dist/tools/SkillTool/SkillTool.js +209 -0
  507. package/dist/tools/SkillTool/SkillTool.js.map +7 -0
  508. package/dist/tools/SkillTool/prompt.js +81 -0
  509. package/dist/tools/SkillTool/prompt.js.map +7 -0
  510. package/dist/tools/TaskTool/TaskTool.js +381 -0
  511. package/dist/tools/TaskTool/TaskTool.js.map +7 -0
  512. package/dist/tools/TaskTool/constants.js +5 -0
  513. package/dist/tools/TaskTool/constants.js.map +7 -0
  514. package/dist/tools/TaskTool/prompt.js +111 -0
  515. package/dist/tools/TaskTool/prompt.js.map +7 -0
  516. package/dist/tools/ThinkTool/ThinkTool.js +40 -0
  517. package/dist/tools/ThinkTool/ThinkTool.js.map +7 -0
  518. package/dist/tools/ThinkTool/prompt.js +16 -0
  519. package/dist/tools/ThinkTool/prompt.js.map +7 -0
  520. package/dist/tools/TodoWriteTool/TodoWriteTool.js +243 -0
  521. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +7 -0
  522. package/dist/tools/TodoWriteTool/prompt.js +66 -0
  523. package/dist/tools/TodoWriteTool/prompt.js.map +7 -0
  524. package/dist/tools/URLFetcherTool/URLFetcherTool.js +137 -0
  525. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +7 -0
  526. package/dist/tools/URLFetcherTool/cache.js +45 -0
  527. package/dist/tools/URLFetcherTool/cache.js.map +7 -0
  528. package/dist/tools/URLFetcherTool/htmlToMarkdown.js +42 -0
  529. package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +7 -0
  530. package/dist/tools/URLFetcherTool/prompt.js +22 -0
  531. package/dist/tools/URLFetcherTool/prompt.js.map +7 -0
  532. package/dist/tools/WebSearchTool/WebSearchTool.js +86 -0
  533. package/dist/tools/WebSearchTool/WebSearchTool.js.map +7 -0
  534. package/dist/tools/WebSearchTool/prompt.js +17 -0
  535. package/dist/tools/WebSearchTool/prompt.js.map +7 -0
  536. package/dist/tools/WebSearchTool/searchProviders.js +48 -0
  537. package/dist/tools/WebSearchTool/searchProviders.js.map +7 -0
  538. package/dist/tools/lsTool/lsTool.js +201 -0
  539. package/dist/tools/lsTool/lsTool.js.map +7 -0
  540. package/dist/tools/lsTool/prompt.js +5 -0
  541. package/dist/tools/lsTool/prompt.js.map +7 -0
  542. package/dist/tools.js +70 -0
  543. package/dist/tools.js.map +7 -0
  544. package/dist/types/PermissionMode.js +82 -0
  545. package/dist/types/PermissionMode.js.map +7 -0
  546. package/dist/types/RequestContext.js +47 -0
  547. package/dist/types/RequestContext.js.map +7 -0
  548. package/dist/types/common.d.js +1 -0
  549. package/dist/types/common.d.js.map +7 -0
  550. package/dist/types/conversation.js +1 -0
  551. package/dist/types/conversation.js.map +7 -0
  552. package/dist/types/hooks.js +38 -0
  553. package/dist/types/hooks.js.map +7 -0
  554. package/dist/types/interactionRound.js +1 -0
  555. package/dist/types/interactionRound.js.map +7 -0
  556. package/dist/types/logs.js +1 -0
  557. package/dist/types/logs.js.map +7 -0
  558. package/dist/types/marketplace.js +101 -0
  559. package/dist/types/marketplace.js.map +7 -0
  560. package/dist/types/modelCapabilities.js +1 -0
  561. package/dist/types/modelCapabilities.js.map +7 -0
  562. package/dist/types/notebook.js +1 -0
  563. package/dist/types/notebook.js.map +7 -0
  564. package/dist/types/plugin.js +83 -0
  565. package/dist/types/plugin.js.map +7 -0
  566. package/dist/types/subagent.js +1 -0
  567. package/dist/types/subagent.js.map +7 -0
  568. package/dist/utils/BackgroundShellManager.js +215 -0
  569. package/dist/utils/BackgroundShellManager.js.map +7 -0
  570. package/dist/utils/Cursor.js +315 -0
  571. package/dist/utils/Cursor.js.map +7 -0
  572. package/dist/utils/PersistentShell.js +371 -0
  573. package/dist/utils/PersistentShell.js.map +7 -0
  574. package/dist/utils/advancedFuzzyMatcher.js +206 -0
  575. package/dist/utils/advancedFuzzyMatcher.js.map +7 -0
  576. package/dist/utils/agentLoader.js +244 -0
  577. package/dist/utils/agentLoader.js.map +7 -0
  578. package/dist/utils/agentStorage.js +59 -0
  579. package/dist/utils/agentStorage.js.map +7 -0
  580. package/dist/utils/array.js +7 -0
  581. package/dist/utils/array.js.map +7 -0
  582. package/dist/utils/ask.js +77 -0
  583. package/dist/utils/ask.js.map +7 -0
  584. package/dist/utils/auth.js +11 -0
  585. package/dist/utils/auth.js.map +7 -0
  586. package/dist/utils/autoCompactCore.js +126 -0
  587. package/dist/utils/autoCompactCore.js.map +7 -0
  588. package/dist/utils/autoUpdater.js +107 -0
  589. package/dist/utils/autoUpdater.js.map +7 -0
  590. package/dist/utils/browser.js +15 -0
  591. package/dist/utils/browser.js.map +7 -0
  592. package/dist/utils/cleanup.js +54 -0
  593. package/dist/utils/cleanup.js.map +7 -0
  594. package/dist/utils/commands.js +207 -0
  595. package/dist/utils/commands.js.map +7 -0
  596. package/dist/utils/commonUnixCommands.js +687 -0
  597. package/dist/utils/commonUnixCommands.js.map +7 -0
  598. package/dist/utils/compressionMode.js +47 -0
  599. package/dist/utils/compressionMode.js.map +7 -0
  600. package/dist/utils/config.js +651 -0
  601. package/dist/utils/config.js.map +7 -0
  602. package/dist/utils/conversationRecovery.js +35 -0
  603. package/dist/utils/conversationRecovery.js.map +7 -0
  604. package/dist/utils/debugLogger.js +889 -0
  605. package/dist/utils/debugLogger.js.map +7 -0
  606. package/dist/utils/diff.js +32 -0
  607. package/dist/utils/diff.js.map +7 -0
  608. package/dist/utils/env.js +44 -0
  609. package/dist/utils/env.js.map +7 -0
  610. package/dist/utils/errors.js +23 -0
  611. package/dist/utils/errors.js.map +7 -0
  612. package/dist/utils/execFileNoThrow.js +44 -0
  613. package/dist/utils/execFileNoThrow.js.map +7 -0
  614. package/dist/utils/expertChatStorage.js +78 -0
  615. package/dist/utils/expertChatStorage.js.map +7 -0
  616. package/dist/utils/file.js +282 -0
  617. package/dist/utils/file.js.map +7 -0
  618. package/dist/utils/fileRecoveryCore.js +41 -0
  619. package/dist/utils/fileRecoveryCore.js.map +7 -0
  620. package/dist/utils/format.js +41 -0
  621. package/dist/utils/format.js.map +7 -0
  622. package/dist/utils/fuzzyMatcher.js +252 -0
  623. package/dist/utils/fuzzyMatcher.js.map +7 -0
  624. package/dist/utils/generators.js +46 -0
  625. package/dist/utils/generators.js.map +7 -0
  626. package/dist/utils/git.js +83 -0
  627. package/dist/utils/git.js.map +7 -0
  628. package/dist/utils/hookManager.js +238 -0
  629. package/dist/utils/hookManager.js.map +7 -0
  630. package/dist/utils/http.js +7 -0
  631. package/dist/utils/http.js.map +7 -0
  632. package/dist/utils/imagePaste.js +29 -0
  633. package/dist/utils/imagePaste.js.map +7 -0
  634. package/dist/utils/json.js +16 -0
  635. package/dist/utils/json.js.map +7 -0
  636. package/dist/utils/log.js +329 -0
  637. package/dist/utils/log.js.map +7 -0
  638. package/dist/utils/markdown.js +187 -0
  639. package/dist/utils/markdown.js.map +7 -0
  640. package/dist/utils/marketplaceManager.js +474 -0
  641. package/dist/utils/marketplaceManager.js.map +7 -0
  642. package/dist/utils/messageContextManager.js +195 -0
  643. package/dist/utils/messageContextManager.js.map +7 -0
  644. package/dist/utils/messages.js +650 -0
  645. package/dist/utils/messages.js.map +7 -0
  646. package/dist/utils/model.js +677 -0
  647. package/dist/utils/model.js.map +7 -0
  648. package/dist/utils/permissions/filesystem.js +80 -0
  649. package/dist/utils/permissions/filesystem.js.map +7 -0
  650. package/dist/utils/pluginInstaller.js +491 -0
  651. package/dist/utils/pluginInstaller.js.map +7 -0
  652. package/dist/utils/pluginLoader.js +582 -0
  653. package/dist/utils/pluginLoader.js.map +7 -0
  654. package/dist/utils/pluginRegistry.js +111 -0
  655. package/dist/utils/pluginRegistry.js.map +7 -0
  656. package/dist/utils/pluginValidator.js +774 -0
  657. package/dist/utils/pluginValidator.js.map +7 -0
  658. package/dist/utils/ptyCompat.js +125 -0
  659. package/dist/utils/ptyCompat.js.map +7 -0
  660. package/dist/utils/replStateMachine.js +145 -0
  661. package/dist/utils/replStateMachine.js.map +7 -0
  662. package/dist/utils/ripgrep.js +131 -0
  663. package/dist/utils/ripgrep.js.map +7 -0
  664. package/dist/utils/roundConverter.js +262 -0
  665. package/dist/utils/roundConverter.js.map +7 -0
  666. package/dist/utils/secureFile.js +483 -0
  667. package/dist/utils/secureFile.js.map +7 -0
  668. package/dist/utils/sessionState.js +22 -0
  669. package/dist/utils/sessionState.js.map +7 -0
  670. package/dist/utils/skillLoader.js +79 -0
  671. package/dist/utils/skillLoader.js.map +7 -0
  672. package/dist/utils/state.js +24 -0
  673. package/dist/utils/state.js.map +7 -0
  674. package/dist/utils/style.js +31 -0
  675. package/dist/utils/style.js.map +7 -0
  676. package/dist/utils/terminal.js +47 -0
  677. package/dist/utils/terminal.js.map +7 -0
  678. package/dist/utils/theme.js +102 -0
  679. package/dist/utils/theme.js.map +7 -0
  680. package/dist/utils/thinking.js +59 -0
  681. package/dist/utils/thinking.js.map +7 -0
  682. package/dist/utils/todoChangeCalculator.js +64 -0
  683. package/dist/utils/todoChangeCalculator.js.map +7 -0
  684. package/dist/utils/todoStorage.js +291 -0
  685. package/dist/utils/todoStorage.js.map +7 -0
  686. package/dist/utils/tokens.js +30 -0
  687. package/dist/utils/tokens.js.map +7 -0
  688. package/dist/utils/toolExecutionController.js +109 -0
  689. package/dist/utils/toolExecutionController.js.map +7 -0
  690. package/dist/utils/unaryLogging.js +6 -0
  691. package/dist/utils/unaryLogging.js.map +7 -0
  692. package/dist/utils/user.js +40 -0
  693. package/dist/utils/user.js.map +7 -0
  694. package/dist/utils/validate.js +132 -0
  695. package/dist/utils/validate.js.map +7 -0
  696. package/dist/version.js +7 -0
  697. package/dist/version.js.map +7 -0
  698. package/dist/yoga.wasm +0 -0
  699. package/package.json +113 -0
  700. package/scripts/postinstall.js +18 -0
  701. package/yoga.wasm +0 -0
@@ -0,0 +1,201 @@
1
+ import { emitReminderEvent } from "./systemReminder.js";
2
+ import { getAvailableAgentTypes } from "../utils/agentLoader.js";
3
+ import { existsSync } from "fs";
4
+ import { resolve } from "path";
5
+ import { getCwd } from "../utils/state.js";
6
+ import { debug as debugLogger } from "../utils/debugLogger.js";
7
+ class MentionProcessorService {
8
+ // Centralized mention patterns - single source of truth
9
+ static MENTION_PATTERNS = {
10
+ runAgent: /@(run-agent-[\w\-]+)/g,
11
+ agent: /@(agent-[\w\-]+)/g,
12
+ // Legacy support
13
+ askModel: /@(ask-[\w\-]+)/g,
14
+ file: /@([a-zA-Z0-9/._-]+(?:\.[a-zA-Z0-9]+)?)/g
15
+ };
16
+ agentCache = /* @__PURE__ */ new Map();
17
+ lastAgentCheck = 0;
18
+ CACHE_TTL = 6e4;
19
+ // 1 minute cache
20
+ /**
21
+ * Process mentions in user input and emit appropriate events
22
+ * This follows the event-driven philosophy of system reminders
23
+ */
24
+ async processMentions(input) {
25
+ const result = {
26
+ agents: [],
27
+ files: [],
28
+ hasAgentMentions: false,
29
+ hasFileMentions: false
30
+ };
31
+ try {
32
+ const agentMentions = this.extractAgentMentions(input);
33
+ if (agentMentions.length > 0) {
34
+ await this.refreshAgentCache();
35
+ for (const { mention, agentType, isAskModel } of agentMentions) {
36
+ if (isAskModel || this.agentCache.has(agentType)) {
37
+ result.agents.push({
38
+ type: "agent",
39
+ mention,
40
+ resolved: agentType,
41
+ exists: true,
42
+ metadata: isAskModel ? { type: "ask-model" } : void 0
43
+ });
44
+ result.hasAgentMentions = true;
45
+ this.emitAgentMentionEvent(mention, agentType, isAskModel);
46
+ }
47
+ }
48
+ }
49
+ const fileMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.file)];
50
+ const processedAgentMentions = new Set(agentMentions.map((am) => am.mention));
51
+ for (const match of fileMatches) {
52
+ const mention = match[1];
53
+ if (mention.startsWith("run-agent-") || mention.startsWith("agent-") || mention.startsWith("ask-") || processedAgentMentions.has(mention)) {
54
+ continue;
55
+ }
56
+ const filePath = this.resolveFilePath(mention);
57
+ if (existsSync(filePath)) {
58
+ result.files.push({
59
+ type: "file",
60
+ mention,
61
+ resolved: filePath,
62
+ exists: true
63
+ });
64
+ result.hasFileMentions = true;
65
+ emitReminderEvent("file:mentioned", {
66
+ filePath,
67
+ originalMention: mention,
68
+ timestamp: Date.now()
69
+ });
70
+ }
71
+ }
72
+ return result;
73
+ } catch (error) {
74
+ console.warn("[MentionProcessor] Failed to process mentions:", {
75
+ input: input.substring(0, 100) + (input.length > 100 ? "..." : ""),
76
+ error: error instanceof Error ? error.message : error
77
+ });
78
+ return {
79
+ agents: [],
80
+ files: [],
81
+ hasAgentMentions: false,
82
+ hasFileMentions: false
83
+ };
84
+ }
85
+ }
86
+ // Removed identifyMention method as it's no longer needed with separate processing
87
+ /**
88
+ * Resolve file path relative to current working directory
89
+ */
90
+ resolveFilePath(mention) {
91
+ return resolve(getCwd(), mention);
92
+ }
93
+ /**
94
+ * Refresh the agent cache periodically
95
+ * This avoids hitting the agent loader on every mention
96
+ */
97
+ async refreshAgentCache() {
98
+ const now = Date.now();
99
+ if (now - this.lastAgentCheck < this.CACHE_TTL) {
100
+ return;
101
+ }
102
+ try {
103
+ const agents = await getAvailableAgentTypes();
104
+ const previousCacheSize = this.agentCache.size;
105
+ this.agentCache.clear();
106
+ for (const agent of agents) {
107
+ this.agentCache.set(agent.agentType, true);
108
+ }
109
+ this.lastAgentCheck = now;
110
+ if (agents.length !== previousCacheSize) {
111
+ debugLogger.info("MENTION_PROCESSOR_CACHE_REFRESHED", {
112
+ agentCount: agents.length,
113
+ previousCacheSize,
114
+ cacheAge: now - this.lastAgentCheck
115
+ });
116
+ }
117
+ } catch (error) {
118
+ console.warn("[MentionProcessor] Failed to refresh agent cache, keeping existing cache:", {
119
+ error: error instanceof Error ? error.message : error,
120
+ cacheSize: this.agentCache.size,
121
+ lastRefresh: new Date(this.lastAgentCheck).toISOString()
122
+ });
123
+ }
124
+ }
125
+ /**
126
+ * Extract agent mentions with unified pattern matching
127
+ * Consolidates run-agent, agent, and ask-model detection logic
128
+ */
129
+ extractAgentMentions(input) {
130
+ const mentions = [];
131
+ const runAgentMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.runAgent)];
132
+ for (const match of runAgentMatches) {
133
+ const mention = match[1];
134
+ const agentType = mention.replace(/^run-agent-/, "");
135
+ mentions.push({ mention, agentType, isAskModel: false });
136
+ }
137
+ const agentMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.agent)];
138
+ for (const match of agentMatches) {
139
+ const mention = match[1];
140
+ const agentType = mention.replace(/^agent-/, "");
141
+ mentions.push({ mention, agentType, isAskModel: false });
142
+ }
143
+ const askModelMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.askModel)];
144
+ for (const match of askModelMatches) {
145
+ const mention = match[1];
146
+ mentions.push({ mention, agentType: mention, isAskModel: true });
147
+ }
148
+ return mentions;
149
+ }
150
+ /**
151
+ * Emit agent mention event with proper typing
152
+ * Centralized event emission to ensure consistency
153
+ */
154
+ emitAgentMentionEvent(mention, agentType, isAskModel) {
155
+ try {
156
+ const eventData = {
157
+ originalMention: mention,
158
+ timestamp: Date.now()
159
+ };
160
+ if (isAskModel) {
161
+ emitReminderEvent("ask-model:mentioned", {
162
+ ...eventData,
163
+ modelName: mention
164
+ });
165
+ } else {
166
+ emitReminderEvent("agent:mentioned", {
167
+ ...eventData,
168
+ agentType
169
+ });
170
+ }
171
+ debugLogger.info("MENTION_PROCESSOR_EVENT_EMITTED", {
172
+ type: isAskModel ? "ask-model" : "agent",
173
+ mention,
174
+ agentType: isAskModel ? void 0 : agentType
175
+ });
176
+ } catch (error) {
177
+ debugLogger.error("MENTION_PROCESSOR_EVENT_FAILED", {
178
+ mention,
179
+ agentType,
180
+ isAskModel,
181
+ error: error instanceof Error ? error.message : error
182
+ });
183
+ }
184
+ }
185
+ /**
186
+ * Clear caches - useful for testing or reset
187
+ */
188
+ clearCache() {
189
+ this.agentCache.clear();
190
+ this.lastAgentCheck = 0;
191
+ }
192
+ }
193
+ const mentionProcessor = new MentionProcessorService();
194
+ const processMentions = (input) => mentionProcessor.processMentions(input);
195
+ const clearMentionCache = () => mentionProcessor.clearCache();
196
+ export {
197
+ clearMentionCache,
198
+ mentionProcessor,
199
+ processMentions
200
+ };
201
+ //# sourceMappingURL=mentionProcessor.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/services/mentionProcessor.ts"],
4
+ "sourcesContent": ["/**\n * Mention Processor Service\n * Handles @agent and @file mentions through the system reminder infrastructure\n * Designed to integrate naturally with the existing event-driven architecture\n */\n\nimport { emitReminderEvent } from './systemReminder'\nimport { getAvailableAgentTypes } from '@utils/agentLoader'\nimport { existsSync } from 'fs'\nimport { resolve } from 'path'\nimport { getCwd } from '@utils/state'\nimport { debug as debugLogger } from '@utils/debugLogger'\n\nexport interface MentionContext {\n type: 'agent' | 'file'\n mention: string\n resolved: string\n exists: boolean\n metadata?: any\n}\n\nexport interface ProcessedMentions {\n agents: MentionContext[]\n files: MentionContext[]\n hasAgentMentions: boolean\n hasFileMentions: boolean\n}\n\nclass MentionProcessorService {\n // Centralized mention patterns - single source of truth\n private static readonly MENTION_PATTERNS = {\n runAgent: /@(run-agent-[\\w\\-]+)/g,\n agent: /@(agent-[\\w\\-]+)/g, // Legacy support\n askModel: /@(ask-[\\w\\-]+)/g,\n file: /@([a-zA-Z0-9/._-]+(?:\\.[a-zA-Z0-9]+)?)/g\n } as const\n\n private agentCache: Map<string, boolean> = new Map()\n private lastAgentCheck: number = 0\n private CACHE_TTL = 60000 // 1 minute cache\n\n /**\n * Process mentions in user input and emit appropriate events\n * This follows the event-driven philosophy of system reminders\n */\n public async processMentions(input: string): Promise<ProcessedMentions> {\n const result: ProcessedMentions = {\n agents: [],\n files: [],\n hasAgentMentions: false,\n hasFileMentions: false,\n }\n\n try {\n\n // Process agent mentions with unified logic to eliminate code duplication\n const agentMentions = this.extractAgentMentions(input)\n if (agentMentions.length > 0) {\n await this.refreshAgentCache()\n \n for (const { mention, agentType, isAskModel } of agentMentions) {\n if (isAskModel || this.agentCache.has(agentType)) {\n result.agents.push({\n type: 'agent',\n mention,\n resolved: agentType,\n exists: true,\n metadata: isAskModel ? { type: 'ask-model' } : undefined\n })\n result.hasAgentMentions = true\n \n // Emit appropriate event based on mention type\n this.emitAgentMentionEvent(mention, agentType, isAskModel)\n }\n }\n }\n \n // No longer process @xxx format - treat as regular text (emails, etc.)\n\n // Process file mentions (exclude agent and ask-model mentions)\n const fileMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.file)]\n const processedAgentMentions = new Set(agentMentions.map(am => am.mention))\n \n for (const match of fileMatches) {\n const mention = match[1]\n \n // Skip if this is an agent or ask-model mention (already processed)\n if (mention.startsWith('run-agent-') || mention.startsWith('agent-') || mention.startsWith('ask-') || processedAgentMentions.has(mention)) {\n continue\n }\n \n // Check if it's a file\n const filePath = this.resolveFilePath(mention)\n if (existsSync(filePath)) {\n result.files.push({\n type: 'file',\n mention,\n resolved: filePath,\n exists: true,\n })\n result.hasFileMentions = true\n \n // Emit file mention event for system reminder to handle\n emitReminderEvent('file:mentioned', {\n filePath: filePath,\n originalMention: mention,\n timestamp: Date.now(),\n })\n }\n }\n\n return result\n } catch (error) {\n console.warn('[MentionProcessor] Failed to process mentions:', {\n input: input.substring(0, 100) + (input.length > 100 ? '...' : ''),\n error: error instanceof Error ? error.message : error\n })\n \n // Return empty result on error to maintain system stability\n return {\n agents: [],\n files: [],\n hasAgentMentions: false,\n hasFileMentions: false,\n }\n }\n }\n\n // Removed identifyMention method as it's no longer needed with separate processing\n\n /**\n * Resolve file path relative to current working directory\n */\n private resolveFilePath(mention: string): string {\n // Simple consistent logic: mention is always relative to current directory\n return resolve(getCwd(), mention)\n }\n\n /**\n * Refresh the agent cache periodically\n * This avoids hitting the agent loader on every mention\n */\n private async refreshAgentCache(): Promise<void> {\n const now = Date.now()\n if (now - this.lastAgentCheck < this.CACHE_TTL) {\n return // Cache is still fresh\n }\n\n try {\n const agents = await getAvailableAgentTypes()\n const previousCacheSize = this.agentCache.size\n this.agentCache.clear()\n \n for (const agent of agents) {\n // Store only the agent type without prefix for consistent lookup\n this.agentCache.set(agent.agentType, true)\n }\n \n this.lastAgentCheck = now\n \n // Log cache refresh for debugging mention resolution issues\n if (agents.length !== previousCacheSize) {\n debugLogger.info('MENTION_PROCESSOR_CACHE_REFRESHED', {\n agentCount: agents.length,\n previousCacheSize,\n cacheAge: now - this.lastAgentCheck,\n })\n }\n } catch (error) {\n console.warn('[MentionProcessor] Failed to refresh agent cache, keeping existing cache:', {\n error: error instanceof Error ? error.message : error,\n cacheSize: this.agentCache.size,\n lastRefresh: new Date(this.lastAgentCheck).toISOString()\n })\n // Keep existing cache on error to maintain functionality\n }\n }\n\n /**\n * Extract agent mentions with unified pattern matching\n * Consolidates run-agent, agent, and ask-model detection logic\n */\n private extractAgentMentions(input: string): Array<{ mention: string; agentType: string; isAskModel: boolean }> {\n const mentions: Array<{ mention: string; agentType: string; isAskModel: boolean }> = []\n \n // Process @run-agent-xxx format (preferred)\n const runAgentMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.runAgent)]\n for (const match of runAgentMatches) {\n const mention = match[1]\n const agentType = mention.replace(/^run-agent-/, '')\n mentions.push({ mention, agentType, isAskModel: false })\n }\n \n // Process @agent-xxx format (legacy)\n const agentMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.agent)]\n for (const match of agentMatches) {\n const mention = match[1]\n const agentType = mention.replace(/^agent-/, '')\n mentions.push({ mention, agentType, isAskModel: false })\n }\n \n // Process @ask-model mentions\n const askModelMatches = [...input.matchAll(MentionProcessorService.MENTION_PATTERNS.askModel)]\n for (const match of askModelMatches) {\n const mention = match[1]\n mentions.push({ mention, agentType: mention, isAskModel: true })\n }\n \n return mentions\n }\n \n /**\n * Emit agent mention event with proper typing\n * Centralized event emission to ensure consistency\n */\n private emitAgentMentionEvent(mention: string, agentType: string, isAskModel: boolean): void {\n try {\n const eventData = {\n originalMention: mention,\n timestamp: Date.now(),\n }\n\n if (isAskModel) {\n emitReminderEvent('ask-model:mentioned', {\n ...eventData,\n modelName: mention,\n })\n } else {\n emitReminderEvent('agent:mentioned', {\n ...eventData,\n agentType,\n })\n }\n \n // Debug log for mention event emission tracking\n debugLogger.info('MENTION_PROCESSOR_EVENT_EMITTED', {\n type: isAskModel ? 'ask-model' : 'agent',\n mention,\n agentType: isAskModel ? undefined : agentType,\n })\n } catch (error) {\n debugLogger.error('MENTION_PROCESSOR_EVENT_FAILED', {\n mention,\n agentType,\n isAskModel,\n error: error instanceof Error ? error.message : error,\n })\n }\n }\n\n /**\n * Clear caches - useful for testing or reset\n */\n public clearCache(): void {\n this.agentCache.clear()\n this.lastAgentCheck = 0\n }\n}\n\n// Export singleton instance\nexport const mentionProcessor = new MentionProcessorService()\n\n/**\n * Process mentions in user input\n * This is the main API for the mention processor\n */\nexport const processMentions = (input: string) => \n mentionProcessor.processMentions(input)\n\n/**\n * Clear mention processor caches\n */\nexport const clearMentionCache = () =>\n mentionProcessor.clearCache()\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,47 @@
1
+ import { ResponsesAPIAdapter } from "./adapters/responsesAPI.js";
2
+ import { ChatCompletionsAdapter } from "./adapters/chatCompletions.js";
3
+ import { getModelCapabilities } from "../constants/modelCapabilities.js";
4
+ class ModelAdapterFactory {
5
+ /**
6
+ * Create appropriate adapter based on model configuration
7
+ */
8
+ static createAdapter(modelProfile) {
9
+ const capabilities = getModelCapabilities(modelProfile.modelName);
10
+ const apiType = this.determineAPIType(modelProfile, capabilities);
11
+ switch (apiType) {
12
+ case "responses_api":
13
+ return new ResponsesAPIAdapter(capabilities, modelProfile);
14
+ case "chat_completions":
15
+ default:
16
+ return new ChatCompletionsAdapter(capabilities, modelProfile);
17
+ }
18
+ }
19
+ /**
20
+ * Determine which API should be used
21
+ */
22
+ static determineAPIType(modelProfile, capabilities) {
23
+ if (capabilities.apiArchitecture.primary !== "responses_api") {
24
+ return "chat_completions";
25
+ }
26
+ const isOfficialOpenAI = !modelProfile.baseURL || modelProfile.baseURL.includes("api.openai.com");
27
+ if (!isOfficialOpenAI) {
28
+ if (capabilities.apiArchitecture.fallback === "chat_completions") {
29
+ return "chat_completions";
30
+ }
31
+ return capabilities.apiArchitecture.primary;
32
+ }
33
+ return capabilities.apiArchitecture.primary;
34
+ }
35
+ /**
36
+ * Check if model should use Responses API
37
+ */
38
+ static shouldUseResponsesAPI(modelProfile) {
39
+ const capabilities = getModelCapabilities(modelProfile.modelName);
40
+ const apiType = this.determineAPIType(modelProfile, capabilities);
41
+ return apiType === "responses_api";
42
+ }
43
+ }
44
+ export {
45
+ ModelAdapterFactory
46
+ };
47
+ //# sourceMappingURL=modelAdapterFactory.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/services/modelAdapterFactory.ts"],
4
+ "sourcesContent": ["import { ModelAPIAdapter } from './adapters/base'\nimport { ResponsesAPIAdapter } from './adapters/responsesAPI'\nimport { ChatCompletionsAdapter } from './adapters/chatCompletions'\nimport { getModelCapabilities } from '@constants/modelCapabilities'\nimport { ModelProfile, getGlobalConfig } from '@utils/config'\nimport { ModelCapabilities } from '@minto-types/modelCapabilities'\n\nexport class ModelAdapterFactory {\n /**\n * Create appropriate adapter based on model configuration\n */\n static createAdapter(modelProfile: ModelProfile): ModelAPIAdapter {\n const capabilities = getModelCapabilities(modelProfile.modelName)\n \n // Determine which API to use\n const apiType = this.determineAPIType(modelProfile, capabilities)\n \n // Create corresponding adapter\n switch (apiType) {\n case 'responses_api':\n return new ResponsesAPIAdapter(capabilities, modelProfile)\n case 'chat_completions':\n default:\n return new ChatCompletionsAdapter(capabilities, modelProfile)\n }\n }\n \n /**\n * Determine which API should be used\n */\n private static determineAPIType(\n modelProfile: ModelProfile,\n capabilities: ModelCapabilities\n ): 'responses_api' | 'chat_completions' {\n // If model doesn't support Responses API, use Chat Completions directly\n if (capabilities.apiArchitecture.primary !== 'responses_api') {\n return 'chat_completions'\n }\n \n // Check if this is official OpenAI endpoint\n const isOfficialOpenAI = !modelProfile.baseURL || \n modelProfile.baseURL.includes('api.openai.com')\n \n // Non-official endpoints use Chat Completions (even if model supports Responses API)\n if (!isOfficialOpenAI) {\n // If there's a fallback option, use fallback\n if (capabilities.apiArchitecture.fallback === 'chat_completions') {\n return 'chat_completions'\n }\n // Otherwise use primary (might fail, but let it try)\n return capabilities.apiArchitecture.primary\n }\n \n // For now, always use Responses API for supported models when on official endpoint\n // Streaming fallback will be handled at runtime if needed\n \n // Use primary API type\n return capabilities.apiArchitecture.primary\n }\n \n /**\n * Check if model should use Responses API\n */\n static shouldUseResponsesAPI(modelProfile: ModelProfile): boolean {\n const capabilities = getModelCapabilities(modelProfile.modelName)\n const apiType = this.determineAPIType(modelProfile, capabilities)\n return apiType === 'responses_api'\n }\n}\n"],
5
+ "mappings": "AACA,SAAS,2BAA2B;AACpC,SAAS,8BAA8B;AACvC,SAAS,4BAA4B;AAI9B,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA,EAI/B,OAAO,cAAc,cAA6C;AAChE,UAAM,eAAe,qBAAqB,aAAa,SAAS;AAGhE,UAAM,UAAU,KAAK,iBAAiB,cAAc,YAAY;AAGhE,YAAQ,SAAS;AAAA,MACf,KAAK;AACH,eAAO,IAAI,oBAAoB,cAAc,YAAY;AAAA,MAC3D,KAAK;AAAA,MACL;AACE,eAAO,IAAI,uBAAuB,cAAc,YAAY;AAAA,IAChE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAe,iBACb,cACA,cACsC;AAEtC,QAAI,aAAa,gBAAgB,YAAY,iBAAiB;AAC5D,aAAO;AAAA,IACT;AAGA,UAAM,mBAAmB,CAAC,aAAa,WACrC,aAAa,QAAQ,SAAS,gBAAgB;AAGhD,QAAI,CAAC,kBAAkB;AAErB,UAAI,aAAa,gBAAgB,aAAa,oBAAoB;AAChE,eAAO;AAAA,MACT;AAEA,aAAO,aAAa,gBAAgB;AAAA,IACtC;AAMA,WAAO,aAAa,gBAAgB;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,sBAAsB,cAAqC;AAChE,UAAM,eAAe,qBAAqB,aAAa,SAAS;AAChE,UAAM,UAAU,KAAK,iBAAiB,cAAc,YAAY;AAChE,WAAO,YAAY;AAAA,EACrB;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,35 @@
1
+ import { getGlobalConfig } from "../utils/config.js";
2
+ function sendITerm2Notification({ message, title }) {
3
+ const displayString = title ? `${title}:
4
+ ${message}` : message;
5
+ try {
6
+ process.stdout.write(`\x1B]9;
7
+
8
+ ${displayString}\x07`);
9
+ } catch {
10
+ }
11
+ }
12
+ function sendTerminalBell() {
13
+ process.stdout.write("\x07");
14
+ }
15
+ async function sendNotification(notif) {
16
+ const channel = getGlobalConfig().preferredNotifChannel;
17
+ switch (channel) {
18
+ case "iterm2":
19
+ sendITerm2Notification(notif);
20
+ break;
21
+ case "terminal_bell":
22
+ sendTerminalBell();
23
+ break;
24
+ case "iterm2_with_bell":
25
+ sendITerm2Notification(notif);
26
+ sendTerminalBell();
27
+ break;
28
+ case "notifications_disabled":
29
+ break;
30
+ }
31
+ }
32
+ export {
33
+ sendNotification
34
+ };
35
+ //# sourceMappingURL=notifier.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/services/notifier.ts"],
4
+ "sourcesContent": ["import { getGlobalConfig } from '@utils/config'\n\nexport type NotificationOptions = {\n message: string\n title?: string\n}\n\nfunction sendITerm2Notification({ message, title }: NotificationOptions): void {\n const displayString = title ? `${title}:\\n${message}` : message\n try {\n process.stdout.write(`\\x1b]9;\\n\\n${displayString}\\x07`)\n } catch {\n // Ignore errors\n }\n}\n\nfunction sendTerminalBell(): void {\n process.stdout.write('\\x07')\n}\n\nexport async function sendNotification(\n notif: NotificationOptions,\n): Promise<void> {\n const channel = getGlobalConfig().preferredNotifChannel\n switch (channel) {\n case 'iterm2':\n sendITerm2Notification(notif)\n break\n case 'terminal_bell':\n sendTerminalBell()\n break\n case 'iterm2_with_bell':\n sendITerm2Notification(notif)\n sendTerminalBell()\n break\n case 'notifications_disabled':\n // Do nothing\n break\n }\n}\n"],
5
+ "mappings": "AAAA,SAAS,uBAAuB;AAOhC,SAAS,uBAAuB,EAAE,SAAS,MAAM,GAA8B;AAC7E,QAAM,gBAAgB,QAAQ,GAAG,KAAK;AAAA,EAAM,OAAO,KAAK;AACxD,MAAI;AACF,YAAQ,OAAO,MAAM;AAAA;AAAA,EAAc,aAAa,MAAM;AAAA,EACxD,QAAQ;AAAA,EAER;AACF;AAEA,SAAS,mBAAyB;AAChC,UAAQ,OAAO,MAAM,MAAM;AAC7B;AAEA,eAAsB,iBACpB,OACe;AACf,QAAM,UAAU,gBAAgB,EAAE;AAClC,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,6BAAuB,KAAK;AAC5B;AAAA,IACF,KAAK;AACH,uBAAiB;AACjB;AAAA,IACF,KAAK;AACH,6BAAuB,KAAK;AAC5B,uBAAiB;AACjB;AAAA,IACF,KAAK;AAEH;AAAA,EACJ;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,247 @@
1
+ import * as crypto from "crypto";
2
+ import * as http from "http";
3
+ import * as url from "url";
4
+ import { OAUTH_CONFIG } from "../constants/oauth.js";
5
+ import { openBrowser } from "../utils/browser.js";
6
+ import { logError } from "../utils/log.js";
7
+ import { resetAnthropicClient } from "./claude.js";
8
+ import {
9
+ getGlobalConfig,
10
+ saveGlobalConfig,
11
+ normalizeApiKeyForConfig
12
+ } from "../utils/config.js";
13
+ function base64URLEncode(buffer) {
14
+ return buffer.toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
15
+ }
16
+ function generateCodeVerifier() {
17
+ return base64URLEncode(crypto.randomBytes(32));
18
+ }
19
+ async function generateCodeChallenge(verifier) {
20
+ const encoder = new TextEncoder();
21
+ const data = encoder.encode(verifier);
22
+ const digest = await crypto.subtle.digest("SHA-256", data);
23
+ return base64URLEncode(Buffer.from(digest));
24
+ }
25
+ class OAuthService {
26
+ server = null;
27
+ codeVerifier;
28
+ expectedState = null;
29
+ pendingCodePromise = null;
30
+ constructor() {
31
+ this.codeVerifier = generateCodeVerifier();
32
+ }
33
+ generateAuthUrls(codeChallenge, state) {
34
+ function makeUrl(isManual) {
35
+ const authUrl = new URL(OAUTH_CONFIG.AUTHORIZE_URL);
36
+ authUrl.searchParams.append("client_id", OAUTH_CONFIG.CLIENT_ID);
37
+ authUrl.searchParams.append("response_type", "code");
38
+ authUrl.searchParams.append(
39
+ "redirect_uri",
40
+ isManual ? OAUTH_CONFIG.MANUAL_REDIRECT_URL : `http://localhost:${OAUTH_CONFIG.REDIRECT_PORT}/callback`
41
+ );
42
+ authUrl.searchParams.append("scope", OAUTH_CONFIG.SCOPES.join(" "));
43
+ authUrl.searchParams.append("code_challenge", codeChallenge);
44
+ authUrl.searchParams.append("code_challenge_method", "S256");
45
+ authUrl.searchParams.append("state", state);
46
+ return authUrl.toString();
47
+ }
48
+ return {
49
+ autoUrl: makeUrl(false),
50
+ manualUrl: makeUrl(true)
51
+ };
52
+ }
53
+ async startOAuthFlow(authURLHandler) {
54
+ const codeChallenge = await generateCodeChallenge(this.codeVerifier);
55
+ const state = base64URLEncode(crypto.randomBytes(32));
56
+ this.expectedState = state;
57
+ const { autoUrl, manualUrl } = this.generateAuthUrls(codeChallenge, state);
58
+ const onReady = async () => {
59
+ await authURLHandler(manualUrl);
60
+ await openBrowser(autoUrl);
61
+ };
62
+ const { authorizationCode, useManualRedirect } = await new Promise((resolve, reject) => {
63
+ this.pendingCodePromise = { resolve, reject };
64
+ this.startLocalServer(state, onReady);
65
+ });
66
+ const {
67
+ access_token: accessToken,
68
+ account,
69
+ organization
70
+ } = await this.exchangeCodeForTokens(
71
+ authorizationCode,
72
+ state,
73
+ useManualRedirect
74
+ );
75
+ if (account) {
76
+ const accountInfo = {
77
+ accountUuid: account.uuid,
78
+ emailAddress: account.email_address,
79
+ organizationUuid: organization?.uuid
80
+ };
81
+ const config = getGlobalConfig();
82
+ config.oauthAccount = accountInfo;
83
+ saveGlobalConfig(config);
84
+ }
85
+ return { accessToken };
86
+ }
87
+ startLocalServer(state, onReady) {
88
+ if (this.server) {
89
+ this.closeServer();
90
+ }
91
+ this.server = http.createServer(
92
+ (req, res) => {
93
+ const parsedUrl = url.parse(req.url || "", true);
94
+ if (parsedUrl.pathname === "/callback") {
95
+ const authorizationCode = parsedUrl.query.code;
96
+ const returnedState = parsedUrl.query.state;
97
+ if (!authorizationCode) {
98
+ res.writeHead(400);
99
+ res.end("Authorization code not found");
100
+ if (this.pendingCodePromise) {
101
+ this.pendingCodePromise.reject(
102
+ new Error("No authorization code received")
103
+ );
104
+ }
105
+ return;
106
+ }
107
+ if (returnedState !== state) {
108
+ res.writeHead(400);
109
+ res.end("Invalid state parameter");
110
+ if (this.pendingCodePromise) {
111
+ this.pendingCodePromise.reject(
112
+ new Error("Invalid state parameter")
113
+ // Possible CSRF attack
114
+ );
115
+ }
116
+ return;
117
+ }
118
+ res.writeHead(302, {
119
+ Location: OAUTH_CONFIG.SUCCESS_URL
120
+ });
121
+ res.end();
122
+ this.processCallback({
123
+ authorizationCode,
124
+ state,
125
+ useManualRedirect: false
126
+ });
127
+ } else {
128
+ res.writeHead(404);
129
+ res.end();
130
+ }
131
+ }
132
+ );
133
+ this.server.listen(OAUTH_CONFIG.REDIRECT_PORT, async () => {
134
+ onReady?.();
135
+ });
136
+ this.server.on("error", (err) => {
137
+ const portError = err;
138
+ if (portError.code === "EADDRINUSE") {
139
+ const error = new Error(
140
+ `Port ${OAUTH_CONFIG.REDIRECT_PORT} is already in use. Please ensure no other applications are using this port.`
141
+ );
142
+ logError(error);
143
+ this.closeServer();
144
+ if (this.pendingCodePromise) {
145
+ this.pendingCodePromise.reject(error);
146
+ }
147
+ return;
148
+ } else {
149
+ logError(err);
150
+ this.closeServer();
151
+ if (this.pendingCodePromise) {
152
+ this.pendingCodePromise.reject(err);
153
+ }
154
+ return;
155
+ }
156
+ });
157
+ }
158
+ async exchangeCodeForTokens(authorizationCode, state, useManualRedirect = false) {
159
+ const requestBody = {
160
+ grant_type: "authorization_code",
161
+ code: authorizationCode,
162
+ redirect_uri: useManualRedirect ? OAUTH_CONFIG.MANUAL_REDIRECT_URL : `http://localhost:${OAUTH_CONFIG.REDIRECT_PORT}/callback`,
163
+ client_id: OAUTH_CONFIG.CLIENT_ID,
164
+ code_verifier: this.codeVerifier,
165
+ state
166
+ };
167
+ const response = await fetch(OAUTH_CONFIG.TOKEN_URL, {
168
+ method: "POST",
169
+ headers: {
170
+ "Content-Type": "application/json"
171
+ },
172
+ body: JSON.stringify(requestBody)
173
+ });
174
+ if (!response.ok) {
175
+ throw new Error(`Token exchange failed: ${response.statusText}`);
176
+ }
177
+ const data = await response.json();
178
+ return data;
179
+ }
180
+ processCallback({
181
+ authorizationCode,
182
+ state,
183
+ useManualRedirect
184
+ }) {
185
+ this.closeServer();
186
+ if (state !== this.expectedState) {
187
+ if (this.pendingCodePromise) {
188
+ this.pendingCodePromise.reject(
189
+ new Error("Invalid state parameter")
190
+ // Possible CSRF attack
191
+ );
192
+ this.pendingCodePromise = null;
193
+ }
194
+ return;
195
+ }
196
+ if (this.pendingCodePromise) {
197
+ this.pendingCodePromise.resolve({ authorizationCode, useManualRedirect });
198
+ this.pendingCodePromise = null;
199
+ }
200
+ }
201
+ closeServer() {
202
+ if (this.server) {
203
+ this.server.close();
204
+ this.server = null;
205
+ }
206
+ }
207
+ }
208
+ async function createAndStoreApiKey(accessToken) {
209
+ try {
210
+ const createApiKeyResp = await fetch(OAUTH_CONFIG.API_KEY_URL, {
211
+ method: "POST",
212
+ headers: { Authorization: `Bearer ${accessToken}` }
213
+ });
214
+ let apiKeyData;
215
+ let errorText = "";
216
+ try {
217
+ apiKeyData = await createApiKeyResp.json();
218
+ } catch (_e) {
219
+ errorText = await createApiKeyResp.text();
220
+ }
221
+ if (createApiKeyResp.ok && apiKeyData && apiKeyData.raw_key) {
222
+ const apiKey = apiKeyData.raw_key;
223
+ const config = getGlobalConfig();
224
+ if (!config.customApiKeyResponses) {
225
+ config.customApiKeyResponses = { approved: [], rejected: [] };
226
+ }
227
+ if (!config.customApiKeyResponses.approved) {
228
+ config.customApiKeyResponses.approved = [];
229
+ }
230
+ const normalizedKey = normalizeApiKeyForConfig(apiKey);
231
+ if (!config.customApiKeyResponses.approved.includes(normalizedKey)) {
232
+ config.customApiKeyResponses.approved.push(normalizedKey);
233
+ }
234
+ saveGlobalConfig(config);
235
+ resetAnthropicClient();
236
+ return apiKey;
237
+ }
238
+ return null;
239
+ } catch (error) {
240
+ throw error;
241
+ }
242
+ }
243
+ export {
244
+ OAuthService,
245
+ createAndStoreApiKey
246
+ };
247
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/services/oauth.ts"],
4
+ "sourcesContent": ["import * as crypto from 'crypto'\nimport * as http from 'http'\nimport { IncomingMessage, ServerResponse } from 'http'\nimport * as url from 'url'\n\nimport { OAUTH_CONFIG } from '@constants/oauth'\nimport { openBrowser } from '@utils/browser'\nimport { logError } from '@utils/log'\nimport { resetAnthropicClient } from './claude'\nimport {\n AccountInfo,\n getGlobalConfig,\n saveGlobalConfig,\n normalizeApiKeyForConfig,\n} from '@utils/config'\n\n// Base64URL encoding function (RFC 4648)\nfunction base64URLEncode(buffer: Buffer): string {\n return buffer\n .toString('base64')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '')\n}\n\nfunction generateCodeVerifier(): string {\n return base64URLEncode(crypto.randomBytes(32))\n}\n\nasync function generateCodeChallenge(verifier: string): Promise<string> {\n const encoder = new TextEncoder()\n const data = encoder.encode(verifier)\n const digest = await crypto.subtle.digest('SHA-256', data)\n return base64URLEncode(Buffer.from(digest))\n}\n\ntype OAuthTokenExchangeResponse = {\n access_token: string\n account?: {\n uuid: string\n email_address: string\n }\n organization?: {\n uuid: string\n name: string\n }\n}\n\nexport type OAuthResult = {\n accessToken: string\n}\n\nexport class OAuthService {\n private server: http.Server | null = null\n private codeVerifier: string\n private expectedState: string | null = null\n private pendingCodePromise: {\n resolve: (result: {\n authorizationCode: string\n useManualRedirect: boolean\n }) => void\n reject: (err: Error) => void\n } | null = null\n\n constructor() {\n this.codeVerifier = generateCodeVerifier()\n }\n\n private generateAuthUrls(\n codeChallenge: string,\n state: string,\n ): { autoUrl: string; manualUrl: string } {\n function makeUrl(isManual: boolean): string {\n const authUrl = new URL(OAUTH_CONFIG.AUTHORIZE_URL)\n authUrl.searchParams.append('client_id', OAUTH_CONFIG.CLIENT_ID)\n authUrl.searchParams.append('response_type', 'code')\n authUrl.searchParams.append(\n 'redirect_uri',\n isManual\n ? OAUTH_CONFIG.MANUAL_REDIRECT_URL\n : `http://localhost:${OAUTH_CONFIG.REDIRECT_PORT}/callback`,\n )\n authUrl.searchParams.append('scope', OAUTH_CONFIG.SCOPES.join(' '))\n authUrl.searchParams.append('code_challenge', codeChallenge)\n authUrl.searchParams.append('code_challenge_method', 'S256')\n authUrl.searchParams.append('state', state)\n return authUrl.toString()\n }\n\n return {\n autoUrl: makeUrl(false),\n manualUrl: makeUrl(true),\n }\n }\n\n async startOAuthFlow(\n authURLHandler: (url: string) => Promise<void>,\n ): Promise<OAuthResult> {\n const codeChallenge = await generateCodeChallenge(this.codeVerifier)\n const state = base64URLEncode(crypto.randomBytes(32))\n this.expectedState = state\n const { autoUrl, manualUrl } = this.generateAuthUrls(codeChallenge, state)\n\n const onReady = async () => {\n await authURLHandler(manualUrl)\n await openBrowser(autoUrl)\n }\n\n const { authorizationCode, useManualRedirect } = await new Promise<{\n authorizationCode: string\n useManualRedirect: boolean\n }>((resolve, reject) => {\n this.pendingCodePromise = { resolve, reject }\n this.startLocalServer(state, onReady)\n })\n\n // Exchange code for tokens\n const {\n access_token: accessToken,\n account,\n organization,\n } = await this.exchangeCodeForTokens(\n authorizationCode,\n state,\n useManualRedirect,\n )\n\n // Store account info\n if (account) {\n const accountInfo: AccountInfo = {\n accountUuid: account.uuid,\n emailAddress: account.email_address,\n organizationUuid: organization?.uuid,\n }\n const config = getGlobalConfig()\n config.oauthAccount = accountInfo\n saveGlobalConfig(config)\n }\n\n return { accessToken }\n }\n\n private startLocalServer(state: string, onReady?: () => void): void {\n if (this.server) {\n this.closeServer()\n }\n this.server = http.createServer(\n (req: IncomingMessage, res: ServerResponse) => {\n const parsedUrl = url.parse(req.url || '', true)\n\n if (parsedUrl.pathname === '/callback') {\n const authorizationCode = parsedUrl.query.code as string\n const returnedState = parsedUrl.query.state as string\n\n if (!authorizationCode) {\n res.writeHead(400)\n res.end('Authorization code not found')\n if (this.pendingCodePromise) {\n this.pendingCodePromise.reject(\n new Error('No authorization code received'),\n )\n }\n return\n }\n\n if (returnedState !== state) {\n res.writeHead(400)\n res.end('Invalid state parameter')\n if (this.pendingCodePromise) {\n this.pendingCodePromise.reject(\n new Error('Invalid state parameter'), // Possible CSRF attack\n )\n }\n return\n }\n\n res.writeHead(302, {\n Location: OAUTH_CONFIG.SUCCESS_URL,\n })\n res.end()\n\n \n\n this.processCallback({\n authorizationCode,\n state,\n useManualRedirect: false,\n })\n } else {\n res.writeHead(404)\n res.end()\n }\n },\n )\n\n this.server.listen(OAUTH_CONFIG.REDIRECT_PORT, async () => {\n onReady?.()\n })\n\n this.server.on('error', (err: Error) => {\n const portError = err as NodeJS.ErrnoException\n if (portError.code === 'EADDRINUSE') {\n const error = new Error(\n `Port ${OAUTH_CONFIG.REDIRECT_PORT} is already in use. Please ensure no other applications are using this port.`,\n )\n logError(error)\n this.closeServer()\n if (this.pendingCodePromise) {\n this.pendingCodePromise.reject(error)\n }\n return\n } else {\n logError(err)\n this.closeServer()\n if (this.pendingCodePromise) {\n this.pendingCodePromise.reject(err)\n }\n return\n }\n })\n }\n\n private async exchangeCodeForTokens(\n authorizationCode: string,\n state: string,\n useManualRedirect: boolean = false,\n ): Promise<OAuthTokenExchangeResponse> {\n const requestBody = {\n grant_type: 'authorization_code',\n code: authorizationCode,\n redirect_uri: useManualRedirect\n ? OAUTH_CONFIG.MANUAL_REDIRECT_URL\n : `http://localhost:${OAUTH_CONFIG.REDIRECT_PORT}/callback`,\n client_id: OAUTH_CONFIG.CLIENT_ID,\n code_verifier: this.codeVerifier,\n state,\n }\n\n const response = await fetch(OAUTH_CONFIG.TOKEN_URL, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(requestBody),\n })\n\n if (!response.ok) {\n throw new Error(`Token exchange failed: ${response.statusText}`)\n }\n\n const data = await response.json()\n return data\n }\n\n processCallback({\n authorizationCode,\n state,\n useManualRedirect,\n }: {\n authorizationCode: string\n state: string\n useManualRedirect: boolean\n }): void {\n this.closeServer()\n\n if (state !== this.expectedState) {\n if (this.pendingCodePromise) {\n this.pendingCodePromise.reject(\n new Error('Invalid state parameter'), // Possible CSRF attack\n )\n this.pendingCodePromise = null\n }\n return\n }\n\n if (this.pendingCodePromise) {\n this.pendingCodePromise.resolve({ authorizationCode, useManualRedirect })\n this.pendingCodePromise = null\n }\n }\n\n private closeServer(): void {\n if (this.server) {\n this.server.close()\n this.server = null\n }\n }\n}\n\nexport async function createAndStoreApiKey(\n accessToken: string,\n): Promise<string | null> {\n try {\n // Call create_api_key endpoint\n const createApiKeyResp = await fetch(OAUTH_CONFIG.API_KEY_URL, {\n method: 'POST',\n headers: { Authorization: `Bearer ${accessToken}` },\n })\n\n let apiKeyData\n let errorText = ''\n\n try {\n apiKeyData = await createApiKeyResp.json()\n } catch (_e) {\n // If response is not valid JSON, get as text for error logging\n errorText = await createApiKeyResp.text()\n }\n\n \n\n if (createApiKeyResp.ok && apiKeyData && apiKeyData.raw_key) {\n const apiKey = apiKeyData.raw_key\n\n // Store in global config\n const config = getGlobalConfig()\n\n // Note: API key is now managed per model profile\n\n // Add to approved list\n if (!config.customApiKeyResponses) {\n config.customApiKeyResponses = { approved: [], rejected: [] }\n }\n if (!config.customApiKeyResponses.approved) {\n config.customApiKeyResponses.approved = []\n }\n\n const normalizedKey = normalizeApiKeyForConfig(apiKey)\n if (!config.customApiKeyResponses.approved.includes(normalizedKey)) {\n config.customApiKeyResponses.approved.push(normalizedKey)\n }\n\n // Save config\n saveGlobalConfig(config)\n\n // Reset the Anthropic client to force creation with new API key\n resetAnthropicClient()\n\n return apiKey\n }\n\n return null\n } catch (error) {\n \n throw error\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }