@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,491 @@
1
+ import {
2
+ existsSync,
3
+ readFileSync,
4
+ writeFileSync,
5
+ mkdirSync,
6
+ rmSync,
7
+ cpSync,
8
+ symlinkSync
9
+ } from "fs";
10
+ import { join, resolve } from "path";
11
+ import { homedir } from "os";
12
+ import { EventEmitter } from "events";
13
+ import { execFileNoThrow } from "./execFileNoThrow.js";
14
+ import { getCwd } from "./state.js";
15
+ import {
16
+ PluginManifestSchema,
17
+ PluginError,
18
+ PluginErrorCode
19
+ } from "../types/plugin.js";
20
+ import { findPlugin } from "./marketplaceManager.js";
21
+ var InstallPhase = /* @__PURE__ */ ((InstallPhase2) => {
22
+ InstallPhase2["VALIDATING_SOURCE"] = "validating_source";
23
+ InstallPhase2["CLONING"] = "cloning";
24
+ InstallPhase2["COPYING"] = "copying";
25
+ InstallPhase2["VALIDATING_MANIFEST"] = "validating_manifest";
26
+ InstallPhase2["CHECKING_DEPENDENCIES"] = "checking_dependencies";
27
+ InstallPhase2["INSTALLING"] = "installing";
28
+ InstallPhase2["REGISTERING"] = "registering";
29
+ InstallPhase2["CLEANUP"] = "cleanup";
30
+ InstallPhase2["COMPLETE"] = "complete";
31
+ return InstallPhase2;
32
+ })(InstallPhase || {});
33
+ class PluginInstaller extends EventEmitter {
34
+ tempDirs = [];
35
+ /**
36
+ * Emit progress event
37
+ */
38
+ emitProgress(phase, message, percentage, pluginName) {
39
+ this.emit("progress", {
40
+ phase,
41
+ message,
42
+ percentage,
43
+ pluginName
44
+ });
45
+ }
46
+ /**
47
+ * Get plugin installation directory
48
+ */
49
+ getInstallDir(pluginName, options) {
50
+ if (options?.targetDir) {
51
+ return resolve(options.targetDir);
52
+ }
53
+ const baseDir = options?.global ? homedir() : getCwd();
54
+ return join(baseDir, ".minto", "plugins", pluginName);
55
+ }
56
+ /**
57
+ * Get plugin registry path
58
+ */
59
+ getRegistryPath(global) {
60
+ const baseDir = global ? homedir() : getCwd();
61
+ return join(baseDir, ".minto", "plugins", "registry.json");
62
+ }
63
+ /**
64
+ * Load plugin registry
65
+ */
66
+ loadRegistry(global) {
67
+ const registryPath = this.getRegistryPath(global);
68
+ if (!existsSync(registryPath)) {
69
+ return [];
70
+ }
71
+ try {
72
+ const content = readFileSync(registryPath, "utf-8");
73
+ return JSON.parse(content);
74
+ } catch (error) {
75
+ console.error("Error loading plugin registry:", error);
76
+ return [];
77
+ }
78
+ }
79
+ /**
80
+ * Save plugin registry
81
+ */
82
+ saveRegistry(entries, global) {
83
+ const registryPath = this.getRegistryPath(global);
84
+ const registryDir = join(registryPath, "..");
85
+ if (!existsSync(registryDir)) {
86
+ mkdirSync(registryDir, { recursive: true });
87
+ }
88
+ writeFileSync(registryPath, JSON.stringify(entries, null, 2), "utf-8");
89
+ }
90
+ /**
91
+ * Register plugin in registry
92
+ */
93
+ registerPlugin(manifest, source, location, global) {
94
+ const registry = this.loadRegistry(global);
95
+ const filtered = registry.filter((e) => e.name !== manifest.name);
96
+ filtered.push({
97
+ name: manifest.name,
98
+ version: manifest.version,
99
+ source,
100
+ installedAt: (/* @__PURE__ */ new Date()).toISOString(),
101
+ location
102
+ });
103
+ this.saveRegistry(filtered, global);
104
+ }
105
+ /**
106
+ * Unregister plugin from registry
107
+ */
108
+ unregisterPlugin(pluginName, global) {
109
+ const registry = this.loadRegistry(global);
110
+ const filtered = registry.filter((e) => e.name !== pluginName);
111
+ this.saveRegistry(filtered, global);
112
+ }
113
+ /**
114
+ * Clone git repository to temporary directory
115
+ */
116
+ async cloneGitRepo(url, ref) {
117
+ const tempDir = join(
118
+ homedir(),
119
+ ".minto",
120
+ "temp",
121
+ "plugins",
122
+ Date.now().toString()
123
+ );
124
+ this.tempDirs.push(tempDir);
125
+ mkdirSync(tempDir, { recursive: true });
126
+ try {
127
+ const args = ["clone", "--depth", "1"];
128
+ if (ref) {
129
+ args.push("--branch", ref);
130
+ }
131
+ args.push(url, tempDir);
132
+ this.emitProgress(
133
+ "cloning" /* CLONING */,
134
+ `Cloning repository: ${url}`,
135
+ 20
136
+ );
137
+ const result = await execFileNoThrow("git", args);
138
+ if (result.code !== 0) {
139
+ throw new Error(`Git clone failed: ${result.stderr || result.stdout}`);
140
+ }
141
+ return tempDir;
142
+ } catch (error) {
143
+ throw new PluginError(
144
+ `Failed to clone repository: ${error instanceof Error ? error.message : String(error)}`,
145
+ PluginErrorCode.PERMISSION_DENIED,
146
+ void 0,
147
+ error
148
+ );
149
+ }
150
+ }
151
+ /**
152
+ * Validate plugin manifest exists and is valid
153
+ */
154
+ validateManifest(pluginPath) {
155
+ const manifestPath = join(pluginPath, "plugin.json");
156
+ if (!existsSync(manifestPath)) {
157
+ throw new PluginError(
158
+ `Plugin manifest (plugin.json) not found in ${pluginPath}`,
159
+ PluginErrorCode.MANIFEST_NOT_FOUND
160
+ );
161
+ }
162
+ try {
163
+ const content = readFileSync(manifestPath, "utf-8");
164
+ const data = JSON.parse(content);
165
+ return PluginManifestSchema.parse(data);
166
+ } catch (error) {
167
+ throw new PluginError(
168
+ `Invalid plugin manifest: ${error instanceof Error ? error.message : String(error)}`,
169
+ PluginErrorCode.MANIFEST_INVALID,
170
+ void 0,
171
+ error
172
+ );
173
+ }
174
+ }
175
+ /**
176
+ * Check if plugin is already installed
177
+ */
178
+ isPluginInstalled(pluginName, global) {
179
+ const registry = this.loadRegistry(global);
180
+ return registry.some((e) => e.name === pluginName);
181
+ }
182
+ /**
183
+ * Validate plugin components exist
184
+ */
185
+ validateComponents(pluginPath, manifest, strict) {
186
+ const missing = [];
187
+ for (const agentPath of manifest.agents || []) {
188
+ const fullPath = join(pluginPath, agentPath);
189
+ if (!existsSync(fullPath)) {
190
+ missing.push(`Agent: ${agentPath}`);
191
+ }
192
+ }
193
+ for (const commandPath of manifest.commands || []) {
194
+ const fullPath = join(pluginPath, commandPath);
195
+ if (!existsSync(fullPath)) {
196
+ missing.push(`Command: ${commandPath}`);
197
+ }
198
+ }
199
+ for (const skillPath of manifest.skills || []) {
200
+ const fullPath = join(pluginPath, skillPath);
201
+ if (!existsSync(fullPath)) {
202
+ missing.push(`Skill: ${skillPath}`);
203
+ }
204
+ }
205
+ if (missing.length > 0 && strict) {
206
+ throw new PluginError(
207
+ `Missing plugin components:
208
+ ${missing.join("\n")}`,
209
+ PluginErrorCode.COMPONENT_NOT_FOUND,
210
+ manifest.name
211
+ );
212
+ } else if (missing.length > 0) {
213
+ console.warn(`Warning: Missing plugin components:
214
+ ${missing.join("\n")}`);
215
+ }
216
+ }
217
+ /**
218
+ * Check disk space availability
219
+ */
220
+ checkDiskSpace(targetDir) {
221
+ try {
222
+ const parentDir = join(targetDir, "..");
223
+ if (!existsSync(parentDir)) {
224
+ mkdirSync(parentDir, { recursive: true });
225
+ }
226
+ } catch (error) {
227
+ throw new PluginError(
228
+ `Insufficient permissions or disk space: ${error instanceof Error ? error.message : String(error)}`,
229
+ PluginErrorCode.PERMISSION_DENIED,
230
+ void 0,
231
+ error
232
+ );
233
+ }
234
+ }
235
+ /**
236
+ * Install plugin from source directory to target directory
237
+ */
238
+ installToTarget(sourceDir, targetDir, options) {
239
+ this.emitProgress(
240
+ "installing" /* INSTALLING */,
241
+ `Installing to ${targetDir}`,
242
+ 60
243
+ );
244
+ if (existsSync(targetDir)) {
245
+ if (options?.force) {
246
+ rmSync(targetDir, { recursive: true, force: true });
247
+ } else {
248
+ throw new PluginError(
249
+ `Plugin directory already exists: ${targetDir}. Use --force to overwrite.`,
250
+ PluginErrorCode.ALREADY_INSTALLED
251
+ );
252
+ }
253
+ }
254
+ const parentDir = join(targetDir, "..");
255
+ if (!existsSync(parentDir)) {
256
+ mkdirSync(parentDir, { recursive: true });
257
+ }
258
+ if (options?.dev) {
259
+ symlinkSync(sourceDir, targetDir, "dir");
260
+ } else {
261
+ cpSync(sourceDir, targetDir, { recursive: true });
262
+ }
263
+ }
264
+ /**
265
+ * Cleanup temporary directories
266
+ */
267
+ cleanup() {
268
+ for (const tempDir of this.tempDirs) {
269
+ try {
270
+ if (existsSync(tempDir)) {
271
+ rmSync(tempDir, { recursive: true, force: true });
272
+ }
273
+ } catch (error) {
274
+ console.error(`Error cleaning up temp directory ${tempDir}:`, error);
275
+ }
276
+ }
277
+ this.tempDirs = [];
278
+ }
279
+ /**
280
+ * Install plugin from any source
281
+ */
282
+ async installPlugin(source, options) {
283
+ let sourceDir;
284
+ let manifest;
285
+ try {
286
+ this.emitProgress(
287
+ "validating_source" /* VALIDATING_SOURCE */,
288
+ "Validating plugin source",
289
+ 0
290
+ );
291
+ switch (source.type) {
292
+ case "git":
293
+ sourceDir = await this.cloneGitRepo(source.repo, source.ref);
294
+ break;
295
+ case "local":
296
+ sourceDir = resolve(source.path);
297
+ if (!existsSync(sourceDir)) {
298
+ throw new PluginError(
299
+ `Local plugin path does not exist: ${sourceDir}`,
300
+ PluginErrorCode.MANIFEST_NOT_FOUND
301
+ );
302
+ }
303
+ break;
304
+ case "npm":
305
+ throw new PluginError(
306
+ "NPM package installation not yet supported",
307
+ PluginErrorCode.MANIFEST_NOT_FOUND
308
+ );
309
+ case "marketplace":
310
+ const found = findPlugin(source.name, source.marketplace);
311
+ if (!found) {
312
+ throw new PluginError(
313
+ source.marketplace ? `Plugin "${source.name}" not found in marketplace "${source.marketplace}"` : `Plugin "${source.name}" not found in any marketplace`,
314
+ PluginErrorCode.MANIFEST_NOT_FOUND
315
+ );
316
+ }
317
+ const { plugin } = found;
318
+ if (typeof plugin.source === "string") {
319
+ throw new PluginError(
320
+ "Relative path plugins not yet supported",
321
+ PluginErrorCode.MANIFEST_NOT_FOUND
322
+ );
323
+ } else if (plugin.source.source === "github") {
324
+ sourceDir = await this.cloneGitRepo(
325
+ `https://github.com/${plugin.source.repo}.git`,
326
+ plugin.source.ref
327
+ );
328
+ } else if (plugin.source.source === "url") {
329
+ sourceDir = await this.cloneGitRepo(
330
+ plugin.source.url,
331
+ plugin.source.ref
332
+ );
333
+ } else {
334
+ throw new PluginError(
335
+ "Unsupported marketplace plugin source type",
336
+ PluginErrorCode.MANIFEST_NOT_FOUND
337
+ );
338
+ }
339
+ break;
340
+ default:
341
+ throw new PluginError(
342
+ "Unknown plugin source type",
343
+ PluginErrorCode.MANIFEST_NOT_FOUND
344
+ );
345
+ }
346
+ this.emitProgress(
347
+ "validating_manifest" /* VALIDATING_MANIFEST */,
348
+ "Validating plugin manifest",
349
+ 30
350
+ );
351
+ manifest = this.validateManifest(sourceDir);
352
+ const global = options?.global ?? false;
353
+ if (this.isPluginInstalled(manifest.name, global) && !options?.force) {
354
+ throw new PluginError(
355
+ `Plugin "${manifest.name}" is already installed. Use --force to overwrite.`,
356
+ PluginErrorCode.ALREADY_INSTALLED,
357
+ manifest.name
358
+ );
359
+ }
360
+ this.emitProgress(
361
+ "validating_manifest" /* VALIDATING_MANIFEST */,
362
+ "Validating plugin components",
363
+ 40
364
+ );
365
+ const strict = options?.validation === "strict";
366
+ this.validateComponents(sourceDir, manifest, strict);
367
+ this.emitProgress(
368
+ "checking_dependencies" /* CHECKING_DEPENDENCIES */,
369
+ "Checking dependencies",
370
+ 50
371
+ );
372
+ const targetDir = this.getInstallDir(manifest.name, options);
373
+ this.checkDiskSpace(targetDir);
374
+ this.installToTarget(sourceDir, targetDir, options);
375
+ this.emitProgress(
376
+ "registering" /* REGISTERING */,
377
+ "Registering plugin",
378
+ 80
379
+ );
380
+ this.registerPlugin(manifest, source, targetDir, global);
381
+ this.emitProgress(
382
+ "complete" /* COMPLETE */,
383
+ `Successfully installed ${manifest.name}`,
384
+ 100,
385
+ manifest.name
386
+ );
387
+ return targetDir;
388
+ } catch (error) {
389
+ this.emitProgress(
390
+ "cleanup" /* CLEANUP */,
391
+ "Installation failed, cleaning up",
392
+ 0
393
+ );
394
+ throw error;
395
+ } finally {
396
+ this.cleanup();
397
+ }
398
+ }
399
+ /**
400
+ * Uninstall a plugin by name
401
+ */
402
+ async uninstallPlugin(pluginName, options) {
403
+ const global = options?.global ?? false;
404
+ const registry = this.loadRegistry(global);
405
+ const entry = registry.find((e) => e.name === pluginName);
406
+ if (!entry) {
407
+ throw new PluginError(
408
+ `Plugin "${pluginName}" is not installed`,
409
+ PluginErrorCode.NOT_INSTALLED,
410
+ pluginName
411
+ );
412
+ }
413
+ if (existsSync(entry.location)) {
414
+ try {
415
+ rmSync(entry.location, { recursive: true, force: true });
416
+ } catch (error) {
417
+ throw new PluginError(
418
+ `Failed to remove plugin directory: ${error instanceof Error ? error.message : String(error)}`,
419
+ PluginErrorCode.PERMISSION_DENIED,
420
+ pluginName,
421
+ error
422
+ );
423
+ }
424
+ }
425
+ this.unregisterPlugin(pluginName, global);
426
+ }
427
+ /**
428
+ * Update a plugin (re-install from source)
429
+ */
430
+ async updatePlugin(pluginName, options) {
431
+ const global = options?.global ?? false;
432
+ const registry = this.loadRegistry(global);
433
+ const entry = registry.find((e) => e.name === pluginName);
434
+ if (!entry) {
435
+ throw new PluginError(
436
+ `Plugin "${pluginName}" is not installed`,
437
+ PluginErrorCode.NOT_INSTALLED,
438
+ pluginName
439
+ );
440
+ }
441
+ await this.uninstallPlugin(pluginName, { global });
442
+ await this.installPlugin(entry.source, { global, force: true });
443
+ }
444
+ }
445
+ async function installPlugin(source, options) {
446
+ const installer = new PluginInstaller();
447
+ if (!options?.silent) {
448
+ installer.on("progress", (progress) => {
449
+ console.log(
450
+ `[${progress.percentage}%] ${progress.phase}: ${progress.message}`
451
+ );
452
+ });
453
+ }
454
+ return installer.installPlugin(source, options);
455
+ }
456
+ async function uninstallPlugin(name, options) {
457
+ const installer = new PluginInstaller();
458
+ return installer.uninstallPlugin(name, options);
459
+ }
460
+ async function updatePlugin(name, options) {
461
+ const installer = new PluginInstaller();
462
+ return installer.updatePlugin(name, options);
463
+ }
464
+ function listInstalledPlugins(global) {
465
+ const installer = new PluginInstaller();
466
+ const globalRegistry = installer["loadRegistry"](true);
467
+ const projectRegistry = installer["loadRegistry"](false);
468
+ if (global === true) {
469
+ return globalRegistry;
470
+ } else if (global === false) {
471
+ return projectRegistry;
472
+ } else {
473
+ const combined = /* @__PURE__ */ new Map();
474
+ for (const entry of globalRegistry) {
475
+ combined.set(entry.name, entry);
476
+ }
477
+ for (const entry of projectRegistry) {
478
+ combined.set(entry.name, entry);
479
+ }
480
+ return Array.from(combined.values());
481
+ }
482
+ }
483
+ export {
484
+ InstallPhase,
485
+ PluginInstaller,
486
+ installPlugin,
487
+ listInstalledPlugins,
488
+ uninstallPlugin,
489
+ updatePlugin
490
+ };
491
+ //# sourceMappingURL=pluginInstaller.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/pluginInstaller.ts"],
4
+ "sourcesContent": ["/**\n * Plugin Installer\n *\n * Comprehensive plugin installation utility with proper error handling,\n * progress tracking, and cleanup on failure.\n *\n * Supports installation from:\n * - Git repositories (GitHub shorthand, full URLs)\n * - Local directories (copy or symlink)\n * - NPM packages (future)\n * - Marketplaces (via marketplaceManager)\n */\n\nimport {\n existsSync,\n readFileSync,\n writeFileSync,\n mkdirSync,\n rmSync,\n cpSync,\n symlinkSync,\n statSync,\n readdirSync,\n} from 'fs'\nimport { join, resolve, basename } from 'path'\nimport { homedir } from 'os'\nimport { EventEmitter } from 'events'\nimport { execFileNoThrow } from './execFileNoThrow'\nimport { getCwd } from './state'\nimport {\n PluginManifest,\n PluginManifestSchema,\n PluginSource,\n PluginError,\n PluginErrorCode,\n} from '../types/plugin'\nimport { findPlugin } from './marketplaceManager'\n\n/**\n * Installation options\n */\nexport interface InstallOptions {\n /** Target directory (default: ~/.minto/plugins/<name> or ./.minto/plugins/<name>) */\n targetDir?: string\n\n /** Overwrite existing installation */\n force?: boolean\n\n /** Create symlink instead of copy (for local development) */\n dev?: boolean\n\n /** Install globally (~/minto/plugins/) vs project-level (./.minto/plugins/) */\n global?: boolean\n\n /** Silent mode (no progress events) */\n silent?: boolean\n\n /** Validation mode: strict (require all components) or loose */\n validation?: 'strict' | 'loose'\n}\n\n/**\n * Installation progress phases\n */\nexport enum InstallPhase {\n VALIDATING_SOURCE = 'validating_source',\n CLONING = 'cloning',\n COPYING = 'copying',\n VALIDATING_MANIFEST = 'validating_manifest',\n CHECKING_DEPENDENCIES = 'checking_dependencies',\n INSTALLING = 'installing',\n REGISTERING = 'registering',\n CLEANUP = 'cleanup',\n COMPLETE = 'complete',\n}\n\n/**\n * Installation progress event\n */\nexport interface InstallProgress {\n phase: InstallPhase\n message: string\n percentage: number\n pluginName?: string\n}\n\n/**\n * Plugin registry entry\n */\ninterface PluginRegistryEntry {\n name: string\n version: string\n source: PluginSource\n installedAt: string\n location: string\n}\n\n/**\n * Plugin installer with event-based progress tracking\n */\nexport class PluginInstaller extends EventEmitter {\n private tempDirs: string[] = []\n\n /**\n * Emit progress event\n */\n private emitProgress(\n phase: InstallPhase,\n message: string,\n percentage: number,\n pluginName?: string\n ): void {\n this.emit('progress', {\n phase,\n message,\n percentage,\n pluginName,\n } as InstallProgress)\n }\n\n /**\n * Get plugin installation directory\n */\n private getInstallDir(pluginName: string, options?: InstallOptions): string {\n if (options?.targetDir) {\n return resolve(options.targetDir)\n }\n\n const baseDir = options?.global ? homedir() : getCwd()\n return join(baseDir, '.minto', 'plugins', pluginName)\n }\n\n /**\n * Get plugin registry path\n */\n private getRegistryPath(global: boolean): string {\n const baseDir = global ? homedir() : getCwd()\n return join(baseDir, '.minto', 'plugins', 'registry.json')\n }\n\n /**\n * Load plugin registry\n */\n private loadRegistry(global: boolean): PluginRegistryEntry[] {\n const registryPath = this.getRegistryPath(global)\n\n if (!existsSync(registryPath)) {\n return []\n }\n\n try {\n const content = readFileSync(registryPath, 'utf-8')\n return JSON.parse(content)\n } catch (error) {\n console.error('Error loading plugin registry:', error)\n return []\n }\n }\n\n /**\n * Save plugin registry\n */\n private saveRegistry(entries: PluginRegistryEntry[], global: boolean): void {\n const registryPath = this.getRegistryPath(global)\n const registryDir = join(registryPath, '..')\n\n // Ensure directory exists\n if (!existsSync(registryDir)) {\n mkdirSync(registryDir, { recursive: true })\n }\n\n writeFileSync(registryPath, JSON.stringify(entries, null, 2), 'utf-8')\n }\n\n /**\n * Register plugin in registry\n */\n private registerPlugin(\n manifest: PluginManifest,\n source: PluginSource,\n location: string,\n global: boolean\n ): void {\n const registry = this.loadRegistry(global)\n\n // Remove existing entry if present\n const filtered = registry.filter((e) => e.name !== manifest.name)\n\n // Add new entry\n filtered.push({\n name: manifest.name,\n version: manifest.version,\n source,\n installedAt: new Date().toISOString(),\n location,\n })\n\n this.saveRegistry(filtered, global)\n }\n\n /**\n * Unregister plugin from registry\n */\n private unregisterPlugin(pluginName: string, global: boolean): void {\n const registry = this.loadRegistry(global)\n const filtered = registry.filter((e) => e.name !== pluginName)\n this.saveRegistry(filtered, global)\n }\n\n /**\n * Clone git repository to temporary directory\n */\n private async cloneGitRepo(url: string, ref?: string): Promise<string> {\n const tempDir = join(\n homedir(),\n '.minto',\n 'temp',\n 'plugins',\n Date.now().toString()\n )\n\n this.tempDirs.push(tempDir)\n mkdirSync(tempDir, { recursive: true })\n\n try {\n // Build git clone arguments\n const args = ['clone', '--depth', '1']\n\n if (ref) {\n args.push('--branch', ref)\n }\n\n args.push(url, tempDir)\n\n this.emitProgress(\n InstallPhase.CLONING,\n `Cloning repository: ${url}`,\n 20\n )\n\n // Clone repository\n const result = await execFileNoThrow('git', args)\n\n if (result.code !== 0) {\n throw new Error(`Git clone failed: ${result.stderr || result.stdout}`)\n }\n\n return tempDir\n } catch (error) {\n throw new PluginError(\n `Failed to clone repository: ${error instanceof Error ? error.message : String(error)}`,\n PluginErrorCode.PERMISSION_DENIED,\n undefined,\n error\n )\n }\n }\n\n /**\n * Validate plugin manifest exists and is valid\n */\n private validateManifest(pluginPath: string): PluginManifest {\n const manifestPath = join(pluginPath, 'plugin.json')\n\n if (!existsSync(manifestPath)) {\n throw new PluginError(\n `Plugin manifest (plugin.json) not found in ${pluginPath}`,\n PluginErrorCode.MANIFEST_NOT_FOUND\n )\n }\n\n try {\n const content = readFileSync(manifestPath, 'utf-8')\n const data = JSON.parse(content)\n\n // Validate with Zod schema\n return PluginManifestSchema.parse(data)\n } catch (error) {\n throw new PluginError(\n `Invalid plugin manifest: ${error instanceof Error ? error.message : String(error)}`,\n PluginErrorCode.MANIFEST_INVALID,\n undefined,\n error\n )\n }\n }\n\n /**\n * Check if plugin is already installed\n */\n private isPluginInstalled(pluginName: string, global: boolean): boolean {\n const registry = this.loadRegistry(global)\n return registry.some((e) => e.name === pluginName)\n }\n\n /**\n * Validate plugin components exist\n */\n private validateComponents(\n pluginPath: string,\n manifest: PluginManifest,\n strict: boolean\n ): void {\n const missing: string[] = []\n\n // Check agents\n for (const agentPath of manifest.agents || []) {\n const fullPath = join(pluginPath, agentPath)\n if (!existsSync(fullPath)) {\n missing.push(`Agent: ${agentPath}`)\n }\n }\n\n // Check commands\n for (const commandPath of manifest.commands || []) {\n const fullPath = join(pluginPath, commandPath)\n if (!existsSync(fullPath)) {\n missing.push(`Command: ${commandPath}`)\n }\n }\n\n // Check skills\n for (const skillPath of manifest.skills || []) {\n const fullPath = join(pluginPath, skillPath)\n if (!existsSync(fullPath)) {\n missing.push(`Skill: ${skillPath}`)\n }\n }\n\n if (missing.length > 0 && strict) {\n throw new PluginError(\n `Missing plugin components:\\n${missing.join('\\n')}`,\n PluginErrorCode.COMPONENT_NOT_FOUND,\n manifest.name\n )\n } else if (missing.length > 0) {\n console.warn(`Warning: Missing plugin components:\\n${missing.join('\\n')}`)\n }\n }\n\n /**\n * Check disk space availability\n */\n private checkDiskSpace(targetDir: string): void {\n try {\n // Create parent directory if it doesn't exist\n const parentDir = join(targetDir, '..')\n if (!existsSync(parentDir)) {\n mkdirSync(parentDir, { recursive: true })\n }\n } catch (error) {\n throw new PluginError(\n `Insufficient permissions or disk space: ${error instanceof Error ? error.message : String(error)}`,\n PluginErrorCode.PERMISSION_DENIED,\n undefined,\n error\n )\n }\n }\n\n /**\n * Install plugin from source directory to target directory\n */\n private installToTarget(\n sourceDir: string,\n targetDir: string,\n options?: InstallOptions\n ): void {\n this.emitProgress(\n InstallPhase.INSTALLING,\n `Installing to ${targetDir}`,\n 60\n )\n\n // Check if target exists\n if (existsSync(targetDir)) {\n if (options?.force) {\n rmSync(targetDir, { recursive: true, force: true })\n } else {\n throw new PluginError(\n `Plugin directory already exists: ${targetDir}. Use --force to overwrite.`,\n PluginErrorCode.ALREADY_INSTALLED\n )\n }\n }\n\n // Create parent directory\n const parentDir = join(targetDir, '..')\n if (!existsSync(parentDir)) {\n mkdirSync(parentDir, { recursive: true })\n }\n\n // Install: symlink for dev mode, copy otherwise\n if (options?.dev) {\n symlinkSync(sourceDir, targetDir, 'dir')\n } else {\n cpSync(sourceDir, targetDir, { recursive: true })\n }\n }\n\n /**\n * Cleanup temporary directories\n */\n private cleanup(): void {\n for (const tempDir of this.tempDirs) {\n try {\n if (existsSync(tempDir)) {\n rmSync(tempDir, { recursive: true, force: true })\n }\n } catch (error) {\n console.error(`Error cleaning up temp directory ${tempDir}:`, error)\n }\n }\n\n this.tempDirs = []\n }\n\n /**\n * Install plugin from any source\n */\n async installPlugin(\n source: PluginSource,\n options?: InstallOptions\n ): Promise<string> {\n let sourceDir: string | undefined\n let manifest: PluginManifest | undefined\n\n try {\n // Phase 1: Validate and fetch source\n this.emitProgress(\n InstallPhase.VALIDATING_SOURCE,\n 'Validating plugin source',\n 0\n )\n\n switch (source.type) {\n case 'git':\n sourceDir = await this.cloneGitRepo(source.repo, source.ref)\n break\n\n case 'local':\n sourceDir = resolve(source.path)\n if (!existsSync(sourceDir)) {\n throw new PluginError(\n `Local plugin path does not exist: ${sourceDir}`,\n PluginErrorCode.MANIFEST_NOT_FOUND\n )\n }\n break\n\n case 'npm':\n throw new PluginError(\n 'NPM package installation not yet supported',\n PluginErrorCode.MANIFEST_NOT_FOUND\n )\n\n case 'marketplace':\n // Find plugin in marketplace\n const found = findPlugin(source.name, source.marketplace)\n\n if (!found) {\n throw new PluginError(\n source.marketplace\n ? `Plugin \"${source.name}\" not found in marketplace \"${source.marketplace}\"`\n : `Plugin \"${source.name}\" not found in any marketplace`,\n PluginErrorCode.MANIFEST_NOT_FOUND\n )\n }\n\n const { plugin } = found\n\n // Recursively install from plugin's source\n if (typeof plugin.source === 'string') {\n throw new PluginError(\n 'Relative path plugins not yet supported',\n PluginErrorCode.MANIFEST_NOT_FOUND\n )\n } else if (plugin.source.source === 'github') {\n sourceDir = await this.cloneGitRepo(\n `https://github.com/${plugin.source.repo}.git`,\n plugin.source.ref\n )\n } else if (plugin.source.source === 'url') {\n sourceDir = await this.cloneGitRepo(\n plugin.source.url,\n plugin.source.ref\n )\n } else {\n throw new PluginError(\n 'Unsupported marketplace plugin source type',\n PluginErrorCode.MANIFEST_NOT_FOUND\n )\n }\n break\n\n default:\n throw new PluginError(\n 'Unknown plugin source type',\n PluginErrorCode.MANIFEST_NOT_FOUND\n )\n }\n\n // Phase 2: Validate manifest\n this.emitProgress(\n InstallPhase.VALIDATING_MANIFEST,\n 'Validating plugin manifest',\n 30\n )\n\n manifest = this.validateManifest(sourceDir)\n\n // Check if already installed\n const global = options?.global ?? false\n if (this.isPluginInstalled(manifest.name, global) && !options?.force) {\n throw new PluginError(\n `Plugin \"${manifest.name}\" is already installed. Use --force to overwrite.`,\n PluginErrorCode.ALREADY_INSTALLED,\n manifest.name\n )\n }\n\n // Phase 3: Validate components\n this.emitProgress(\n InstallPhase.VALIDATING_MANIFEST,\n 'Validating plugin components',\n 40\n )\n\n const strict = options?.validation === 'strict'\n this.validateComponents(sourceDir, manifest, strict)\n\n // Phase 4: Check dependencies (placeholder)\n this.emitProgress(\n InstallPhase.CHECKING_DEPENDENCIES,\n 'Checking dependencies',\n 50\n )\n\n // TODO: Check engine versions, dependencies, etc.\n\n // Phase 5: Determine target directory\n const targetDir = this.getInstallDir(manifest.name, options)\n\n // Check disk space and permissions\n this.checkDiskSpace(targetDir)\n\n // Phase 6: Install to target\n this.installToTarget(sourceDir, targetDir, options)\n\n // Phase 7: Register plugin\n this.emitProgress(\n InstallPhase.REGISTERING,\n 'Registering plugin',\n 80\n )\n\n this.registerPlugin(manifest, source, targetDir, global)\n\n // Phase 8: Complete\n this.emitProgress(\n InstallPhase.COMPLETE,\n `Successfully installed ${manifest.name}`,\n 100,\n manifest.name\n )\n\n return targetDir\n } catch (error) {\n // Cleanup on error\n this.emitProgress(\n InstallPhase.CLEANUP,\n 'Installation failed, cleaning up',\n 0\n )\n\n throw error\n } finally {\n // Always cleanup temp directories\n this.cleanup()\n }\n }\n\n /**\n * Uninstall a plugin by name\n */\n async uninstallPlugin(\n pluginName: string,\n options?: { global?: boolean }\n ): Promise<void> {\n const global = options?.global ?? false\n const registry = this.loadRegistry(global)\n\n // Find plugin in registry\n const entry = registry.find((e) => e.name === pluginName)\n\n if (!entry) {\n throw new PluginError(\n `Plugin \"${pluginName}\" is not installed`,\n PluginErrorCode.NOT_INSTALLED,\n pluginName\n )\n }\n\n // Remove plugin directory\n if (existsSync(entry.location)) {\n try {\n rmSync(entry.location, { recursive: true, force: true })\n } catch (error) {\n throw new PluginError(\n `Failed to remove plugin directory: ${error instanceof Error ? error.message : String(error)}`,\n PluginErrorCode.PERMISSION_DENIED,\n pluginName,\n error\n )\n }\n }\n\n // Unregister from registry\n this.unregisterPlugin(pluginName, global)\n }\n\n /**\n * Update a plugin (re-install from source)\n */\n async updatePlugin(\n pluginName: string,\n options?: { global?: boolean }\n ): Promise<void> {\n const global = options?.global ?? false\n const registry = this.loadRegistry(global)\n\n // Find plugin in registry\n const entry = registry.find((e) => e.name === pluginName)\n\n if (!entry) {\n throw new PluginError(\n `Plugin \"${pluginName}\" is not installed`,\n PluginErrorCode.NOT_INSTALLED,\n pluginName\n )\n }\n\n // Uninstall and reinstall\n await this.uninstallPlugin(pluginName, { global })\n await this.installPlugin(entry.source, { global, force: true })\n }\n}\n\n/**\n * Convenience function: Install plugin from source\n */\nexport async function installPlugin(\n source: PluginSource,\n options?: InstallOptions\n): Promise<string> {\n const installer = new PluginInstaller()\n\n // Setup progress listener if not silent\n if (!options?.silent) {\n installer.on('progress', (progress: InstallProgress) => {\n console.log(\n `[${progress.percentage}%] ${progress.phase}: ${progress.message}`\n )\n })\n }\n\n return installer.installPlugin(source, options)\n}\n\n/**\n * Convenience function: Uninstall plugin by name\n */\nexport async function uninstallPlugin(\n name: string,\n options?: { global?: boolean }\n): Promise<void> {\n const installer = new PluginInstaller()\n return installer.uninstallPlugin(name, options)\n}\n\n/**\n * Convenience function: Update plugin by name\n */\nexport async function updatePlugin(\n name: string,\n options?: { global?: boolean }\n): Promise<void> {\n const installer = new PluginInstaller()\n return installer.updatePlugin(name, options)\n}\n\n/**\n * List all installed plugins\n */\nexport function listInstalledPlugins(global?: boolean): PluginRegistryEntry[] {\n const installer = new PluginInstaller()\n const globalRegistry = installer['loadRegistry'](true)\n const projectRegistry = installer['loadRegistry'](false)\n\n if (global === true) {\n return globalRegistry\n } else if (global === false) {\n return projectRegistry\n } else {\n // Return both, with project plugins overriding global\n const combined = new Map<string, PluginRegistryEntry>()\n\n for (const entry of globalRegistry) {\n combined.set(entry.name, entry)\n }\n\n for (const entry of projectRegistry) {\n combined.set(entry.name, entry)\n }\n\n return Array.from(combined.values())\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["InstallPhase"]
7
+ }