@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,474 @@
1
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync, cpSync, symlinkSync, lstatSync } from "fs";
2
+ import { join, resolve, isAbsolute } from "path";
3
+ import { homedir } from "os";
4
+ import { execFileNoThrow } from "./execFileNoThrow.js";
5
+ import {
6
+ MarketplaceManifestSchema,
7
+ MarketplaceError,
8
+ MarketplaceErrorCode
9
+ } from "../types/marketplace.js";
10
+ import { getCwd } from "./state.js";
11
+ function getMarketplaceDir() {
12
+ const home = homedir();
13
+ const dir = join(home, ".minto", "marketplaces");
14
+ if (!existsSync(dir)) {
15
+ mkdirSync(dir, { recursive: true });
16
+ }
17
+ return dir;
18
+ }
19
+ function getRegistryPath() {
20
+ return join(getMarketplaceDir(), "registry.json");
21
+ }
22
+ function loadRegistry() {
23
+ const registryPath = getRegistryPath();
24
+ if (!existsSync(registryPath)) {
25
+ return [];
26
+ }
27
+ try {
28
+ const content = readFileSync(registryPath, "utf-8");
29
+ return JSON.parse(content);
30
+ } catch (error) {
31
+ console.error("Error loading marketplace registry:", error);
32
+ return [];
33
+ }
34
+ }
35
+ function saveRegistry(marketplaces) {
36
+ const registryPath = getRegistryPath();
37
+ writeFileSync(registryPath, JSON.stringify(marketplaces, null, 2), "utf-8");
38
+ }
39
+ async function cloneGitRepo(url, ref) {
40
+ const tempDir = join(getMarketplaceDir(), "temp", Date.now().toString());
41
+ mkdirSync(tempDir, { recursive: true });
42
+ try {
43
+ const args = ["clone", "--depth", "1"];
44
+ if (ref) {
45
+ args.push("--branch", ref);
46
+ }
47
+ args.push(url, tempDir);
48
+ const result = await execFileNoThrow("git", args);
49
+ if (result.code !== 0) {
50
+ throw new Error(`Git clone failed: ${result.stderr || result.stdout}`);
51
+ }
52
+ return tempDir;
53
+ } catch (error) {
54
+ try {
55
+ rmSync(tempDir, { recursive: true, force: true });
56
+ } catch (cleanupError) {
57
+ }
58
+ throw new MarketplaceError(
59
+ `Failed to clone repository: ${error instanceof Error ? error.message : String(error)}`,
60
+ MarketplaceErrorCode.GIT_ERROR,
61
+ void 0,
62
+ error
63
+ );
64
+ }
65
+ }
66
+ function loadManifestFromDirectory(dir) {
67
+ const manifestPath = join(dir, ".claude-plugin", "marketplace.json");
68
+ if (!existsSync(manifestPath)) {
69
+ throw new MarketplaceError(
70
+ `Marketplace manifest not found at ${manifestPath}`,
71
+ MarketplaceErrorCode.MANIFEST_NOT_FOUND
72
+ );
73
+ }
74
+ try {
75
+ const content = readFileSync(manifestPath, "utf-8");
76
+ const data = JSON.parse(content);
77
+ return MarketplaceManifestSchema.parse(data);
78
+ } catch (error) {
79
+ throw new MarketplaceError(
80
+ `Invalid marketplace manifest: ${error instanceof Error ? error.message : String(error)}`,
81
+ MarketplaceErrorCode.MANIFEST_INVALID,
82
+ void 0,
83
+ error
84
+ );
85
+ }
86
+ }
87
+ async function fetchGitHubMarketplace(repo, ref) {
88
+ const url = `https://github.com/${repo}.git`;
89
+ const tempDir = await cloneGitRepo(url, ref);
90
+ try {
91
+ return loadManifestFromDirectory(tempDir);
92
+ } finally {
93
+ try {
94
+ rmSync(tempDir, { recursive: true, force: true });
95
+ } catch (e) {
96
+ }
97
+ }
98
+ }
99
+ async function fetchUrlMarketplace(url, ref) {
100
+ const tempDir = await cloneGitRepo(url, ref);
101
+ try {
102
+ return loadManifestFromDirectory(tempDir);
103
+ } finally {
104
+ try {
105
+ rmSync(tempDir, { recursive: true, force: true });
106
+ } catch (e) {
107
+ }
108
+ }
109
+ }
110
+ function loadLocalMarketplace(path) {
111
+ const resolvedPath = path.startsWith("/") ? path : join(getCwd(), path);
112
+ return loadManifestFromDirectory(resolvedPath);
113
+ }
114
+ function parseMarketplaceSource(input) {
115
+ if (/^[\w-]+\/[\w-]+$/.test(input)) {
116
+ return { type: "github", repo: input };
117
+ }
118
+ if (input.includes("github.com")) {
119
+ const match = input.match(/github\.com[/:]([\w-]+\/[\w-]+)/);
120
+ if (match) {
121
+ return { type: "github", repo: match[1] };
122
+ }
123
+ }
124
+ if (input.startsWith("http://") || input.startsWith("https://") || input.endsWith(".git")) {
125
+ return { type: "url", url: input };
126
+ }
127
+ return { type: "local", path: input };
128
+ }
129
+ async function addMarketplace(input) {
130
+ const source = parseMarketplaceSource(input);
131
+ let manifest;
132
+ switch (source.type) {
133
+ case "github":
134
+ manifest = await fetchGitHubMarketplace(source.repo, source.ref);
135
+ break;
136
+ case "url":
137
+ manifest = await fetchUrlMarketplace(source.url, source.ref);
138
+ break;
139
+ case "local":
140
+ manifest = loadLocalMarketplace(source.path);
141
+ break;
142
+ }
143
+ const registry = loadRegistry();
144
+ if (registry.some((m) => m.name === manifest.name)) {
145
+ throw new MarketplaceError(
146
+ `Marketplace "${manifest.name}" is already registered`,
147
+ MarketplaceErrorCode.ALREADY_REGISTERED,
148
+ manifest.name
149
+ );
150
+ }
151
+ const registered = {
152
+ name: manifest.name,
153
+ source,
154
+ manifest,
155
+ lastUpdated: /* @__PURE__ */ new Date(),
156
+ enabled: true
157
+ };
158
+ registry.push(registered);
159
+ saveRegistry(registry);
160
+ return registered;
161
+ }
162
+ function removeMarketplace(name) {
163
+ const registry = loadRegistry();
164
+ const filtered = registry.filter((m) => m.name !== name);
165
+ if (filtered.length === registry.length) {
166
+ throw new MarketplaceError(
167
+ `Marketplace "${name}" is not registered`,
168
+ MarketplaceErrorCode.NOT_REGISTERED,
169
+ name
170
+ );
171
+ }
172
+ saveRegistry(filtered);
173
+ }
174
+ async function updateMarketplace(name) {
175
+ const registry = loadRegistry();
176
+ const marketplace = registry.find((m) => m.name === name);
177
+ if (!marketplace) {
178
+ throw new MarketplaceError(
179
+ `Marketplace "${name}" is not registered`,
180
+ MarketplaceErrorCode.NOT_REGISTERED,
181
+ name
182
+ );
183
+ }
184
+ let manifest;
185
+ switch (marketplace.source.type) {
186
+ case "github":
187
+ manifest = await fetchGitHubMarketplace(marketplace.source.repo, marketplace.source.ref);
188
+ break;
189
+ case "url":
190
+ manifest = await fetchUrlMarketplace(marketplace.source.url, marketplace.source.ref);
191
+ break;
192
+ case "local":
193
+ manifest = loadLocalMarketplace(marketplace.source.path);
194
+ break;
195
+ }
196
+ marketplace.manifest = manifest;
197
+ marketplace.lastUpdated = /* @__PURE__ */ new Date();
198
+ saveRegistry(registry);
199
+ return marketplace;
200
+ }
201
+ function listMarketplaces() {
202
+ return loadRegistry();
203
+ }
204
+ function getMarketplace(name) {
205
+ const registry = loadRegistry();
206
+ return registry.find((m) => m.name === name);
207
+ }
208
+ function findPlugin(pluginName, marketplaceName) {
209
+ const registry = loadRegistry();
210
+ if (marketplaceName) {
211
+ const marketplace = registry.find((m) => m.name === marketplaceName);
212
+ if (!marketplace) return void 0;
213
+ const plugin = marketplace.manifest.plugins.find((p) => p.name === pluginName);
214
+ if (!plugin) return void 0;
215
+ return { marketplace, plugin };
216
+ }
217
+ for (const marketplace of registry) {
218
+ if (!marketplace.enabled) continue;
219
+ const plugin = marketplace.manifest.plugins.find((p) => p.name === pluginName);
220
+ if (plugin) {
221
+ return { marketplace, plugin };
222
+ }
223
+ }
224
+ return void 0;
225
+ }
226
+ function loadMarketplaceSettings() {
227
+ const cwd = getCwd();
228
+ const home = homedir();
229
+ const settingsPaths = [
230
+ { path: join(cwd, ".minto", "settings.json"), label: "project .minto" },
231
+ { path: join(cwd, ".claude", "settings.json"), label: "project .claude" },
232
+ { path: join(home, ".minto", "settings.json"), label: "user .minto" },
233
+ { path: join(home, ".claude", "settings.json"), label: "user .claude" }
234
+ ];
235
+ for (const { path, label } of settingsPaths) {
236
+ if (existsSync(path)) {
237
+ try {
238
+ const content = readFileSync(path, "utf-8");
239
+ const settings = JSON.parse(content);
240
+ return settings;
241
+ } catch (error) {
242
+ console.error(`Error loading marketplace settings from ${label} (${path}):`, error);
243
+ }
244
+ }
245
+ }
246
+ return {};
247
+ }
248
+ async function autoRegisterMarketplaces() {
249
+ const settings = loadMarketplaceSettings();
250
+ if (!settings.extraKnownMarketplaces) return;
251
+ const registry = loadRegistry();
252
+ for (const [name, config] of Object.entries(settings.extraKnownMarketplaces)) {
253
+ if (registry.some((m) => m.name === name)) continue;
254
+ try {
255
+ let source;
256
+ if (config.source.source === "github" && config.source.repo) {
257
+ source = { type: "github", repo: config.source.repo, ref: config.source.ref };
258
+ } else if (config.source.source === "url" && config.source.url) {
259
+ source = { type: "url", url: config.source.url, ref: config.source.ref };
260
+ } else if (config.source.source === "local" && config.source.path) {
261
+ source = { type: "local", path: config.source.path };
262
+ } else {
263
+ continue;
264
+ }
265
+ let manifest;
266
+ switch (source.type) {
267
+ case "github":
268
+ manifest = await fetchGitHubMarketplace(source.repo, source.ref);
269
+ break;
270
+ case "url":
271
+ manifest = await fetchUrlMarketplace(source.url, source.ref);
272
+ break;
273
+ case "local":
274
+ manifest = loadLocalMarketplace(source.path);
275
+ break;
276
+ }
277
+ registry.push({
278
+ name: manifest.name,
279
+ source,
280
+ manifest,
281
+ lastUpdated: /* @__PURE__ */ new Date(),
282
+ enabled: true
283
+ });
284
+ } catch (error) {
285
+ console.error(`Error auto-registering marketplace ${name}:`, error);
286
+ }
287
+ }
288
+ saveRegistry(registry);
289
+ }
290
+ async function getMarketplaceRepoPath(marketplace) {
291
+ switch (marketplace.source.type) {
292
+ case "github": {
293
+ const url = `https://github.com/${marketplace.source.repo}.git`;
294
+ const tempDir = await cloneGitRepo(url, marketplace.source.ref);
295
+ return { path: tempDir, cleanup: true };
296
+ }
297
+ case "url": {
298
+ const tempDir = await cloneGitRepo(marketplace.source.url, marketplace.source.ref);
299
+ return { path: tempDir, cleanup: true };
300
+ }
301
+ case "local": {
302
+ const resolvedPath = isAbsolute(marketplace.source.path) ? marketplace.source.path : resolve(getCwd(), marketplace.source.path);
303
+ if (!existsSync(resolvedPath)) {
304
+ throw new MarketplaceError(
305
+ `Local marketplace path does not exist: ${resolvedPath}`,
306
+ MarketplaceErrorCode.MANIFEST_NOT_FOUND
307
+ );
308
+ }
309
+ return { path: resolvedPath, cleanup: false };
310
+ }
311
+ }
312
+ }
313
+ function copyDirectory(sourcePath, destPath) {
314
+ try {
315
+ if (!existsSync(destPath)) {
316
+ mkdirSync(destPath, { recursive: true });
317
+ }
318
+ cpSync(sourcePath, destPath, {
319
+ recursive: true,
320
+ filter: (src) => {
321
+ return !src.includes("/.git/") && !src.endsWith("/.git");
322
+ }
323
+ });
324
+ } catch (error) {
325
+ throw new MarketplaceError(
326
+ `Failed to copy directory from ${sourcePath} to ${destPath}: ${error instanceof Error ? error.message : String(error)}`,
327
+ MarketplaceErrorCode.GIT_ERROR,
328
+ void 0,
329
+ error
330
+ );
331
+ }
332
+ }
333
+ function symlinkDirectory(sourcePath, destPath) {
334
+ try {
335
+ if (existsSync(destPath)) {
336
+ try {
337
+ const stats = lstatSync(destPath);
338
+ if (stats.isSymbolicLink()) {
339
+ rmSync(destPath, { force: true });
340
+ } else {
341
+ throw new MarketplaceError(
342
+ `Destination path already exists and is not a symlink: ${destPath}`,
343
+ MarketplaceErrorCode.GIT_ERROR
344
+ );
345
+ }
346
+ } catch (error) {
347
+ throw new MarketplaceError(
348
+ `Failed to check existing path: ${error instanceof Error ? error.message : String(error)}`,
349
+ MarketplaceErrorCode.GIT_ERROR,
350
+ void 0,
351
+ error
352
+ );
353
+ }
354
+ } else {
355
+ const parentDir = join(destPath, "..");
356
+ if (!existsSync(parentDir)) {
357
+ mkdirSync(parentDir, { recursive: true });
358
+ }
359
+ }
360
+ symlinkSync(sourcePath, destPath, "dir");
361
+ } catch (error) {
362
+ throw new MarketplaceError(
363
+ `Failed to create symlink from ${sourcePath} to ${destPath}: ${error instanceof Error ? error.message : String(error)}`,
364
+ MarketplaceErrorCode.GIT_ERROR,
365
+ void 0,
366
+ error
367
+ );
368
+ }
369
+ }
370
+ async function installPluginFromMarketplace(pluginName, marketplaceName, targetDir, options) {
371
+ const found = findPlugin(pluginName, marketplaceName);
372
+ if (!found) {
373
+ throw new MarketplaceError(
374
+ marketplaceName ? `Plugin "${pluginName}" not found in marketplace "${marketplaceName}"` : `Plugin "${pluginName}" not found in any marketplace`,
375
+ MarketplaceErrorCode.PLUGIN_NOT_FOUND
376
+ );
377
+ }
378
+ const { marketplace, plugin } = found;
379
+ const installDir = targetDir || join(getCwd(), ".minto", "plugins", plugin.name);
380
+ if (!existsSync(installDir)) {
381
+ mkdirSync(installDir, { recursive: true });
382
+ }
383
+ let cleanupMarketplaceRepo = false;
384
+ let marketplaceRepoPath;
385
+ try {
386
+ if (typeof plugin.source === "string") {
387
+ const repoInfo = await getMarketplaceRepoPath(marketplace);
388
+ marketplaceRepoPath = repoInfo.path;
389
+ cleanupMarketplaceRepo = repoInfo.cleanup;
390
+ const pluginRoot = marketplace.manifest.metadata?.pluginRoot || "";
391
+ const pluginSourcePath = join(marketplaceRepoPath, pluginRoot, plugin.source);
392
+ if (!existsSync(pluginSourcePath)) {
393
+ throw new MarketplaceError(
394
+ `Plugin source path does not exist: ${pluginSourcePath} (relative path: ${plugin.source})`,
395
+ MarketplaceErrorCode.PLUGIN_NOT_FOUND
396
+ );
397
+ }
398
+ copyDirectory(pluginSourcePath, installDir);
399
+ } else if (plugin.source.source === "github") {
400
+ const url = `https://github.com/${plugin.source.repo}.git`;
401
+ const tempDir = await cloneGitRepo(url, plugin.source.ref);
402
+ try {
403
+ copyDirectory(tempDir, installDir);
404
+ } finally {
405
+ rmSync(tempDir, { recursive: true, force: true });
406
+ }
407
+ } else if (plugin.source.source === "url") {
408
+ const tempDir = await cloneGitRepo(plugin.source.url, plugin.source.ref);
409
+ try {
410
+ copyDirectory(tempDir, installDir);
411
+ } finally {
412
+ rmSync(tempDir, { recursive: true, force: true });
413
+ }
414
+ } else if (plugin.source.source === "local") {
415
+ const pluginSourcePath = isAbsolute(plugin.source.path) ? plugin.source.path : resolve(getCwd(), plugin.source.path);
416
+ if (!existsSync(pluginSourcePath)) {
417
+ throw new MarketplaceError(
418
+ `Local plugin path does not exist: ${pluginSourcePath}`,
419
+ MarketplaceErrorCode.PLUGIN_NOT_FOUND
420
+ );
421
+ }
422
+ if (options?.dev) {
423
+ symlinkDirectory(pluginSourcePath, installDir);
424
+ } else {
425
+ copyDirectory(pluginSourcePath, installDir);
426
+ }
427
+ }
428
+ const metadataPath = join(installDir, ".marketplace-meta.json");
429
+ const metadata = {
430
+ marketplace: marketplace.name,
431
+ plugin: plugin.name,
432
+ installedAt: (/* @__PURE__ */ new Date()).toISOString(),
433
+ source: plugin.source
434
+ };
435
+ writeFileSync(metadataPath, JSON.stringify(metadata, null, 2), "utf-8");
436
+ const pluginManifestPath = join(installDir, "plugin.json");
437
+ if (!existsSync(pluginManifestPath)) {
438
+ const pluginManifest = {
439
+ name: plugin.name,
440
+ displayName: plugin.displayName || plugin.name,
441
+ version: plugin.version || "1.0.0",
442
+ description: plugin.description || "",
443
+ author: plugin.author,
444
+ license: plugin.license,
445
+ homepage: plugin.homepage,
446
+ repository: plugin.repository,
447
+ keywords: plugin.keywords || [],
448
+ category: plugin.category
449
+ };
450
+ writeFileSync(pluginManifestPath, JSON.stringify(pluginManifest, null, 2), "utf-8");
451
+ }
452
+ return installDir;
453
+ } finally {
454
+ if (cleanupMarketplaceRepo && marketplaceRepoPath) {
455
+ try {
456
+ rmSync(marketplaceRepoPath, { recursive: true, force: true });
457
+ } catch (error) {
458
+ }
459
+ }
460
+ }
461
+ }
462
+ export {
463
+ addMarketplace,
464
+ autoRegisterMarketplaces,
465
+ findPlugin,
466
+ getMarketplace,
467
+ installPluginFromMarketplace,
468
+ listMarketplaces,
469
+ loadMarketplaceSettings,
470
+ parseMarketplaceSource,
471
+ removeMarketplace,
472
+ updateMarketplace
473
+ };
474
+ //# sourceMappingURL=marketplaceManager.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/utils/marketplaceManager.ts"],
4
+ "sourcesContent": ["/**\n * Marketplace Manager\n *\n * Manages plugin marketplaces including registration, updates, and plugin installation\n * from git-based marketplace sources.\n */\n\nimport { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync, cpSync, symlinkSync, lstatSync } from 'fs'\nimport { join, resolve, isAbsolute } from 'path'\nimport { homedir } from 'os'\nimport { execFileNoThrow } from './execFileNoThrow'\nimport {\n MarketplaceManifest,\n MarketplaceManifestSchema,\n MarketplaceSource,\n RegisteredMarketplace,\n MarketplaceSettings,\n MarketplaceError,\n MarketplaceErrorCode,\n MarketplacePlugin,\n} from '../types/marketplace'\nimport { getCwd } from './state'\n\n/**\n * Get marketplace storage directory\n */\nfunction getMarketplaceDir(): string {\n const home = homedir()\n const dir = join(home, '.minto', 'marketplaces')\n\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true })\n }\n\n return dir\n}\n\n/**\n * Get marketplace registry file path\n */\nfunction getRegistryPath(): string {\n return join(getMarketplaceDir(), 'registry.json')\n}\n\n/**\n * Load marketplace registry\n */\nfunction loadRegistry(): RegisteredMarketplace[] {\n const registryPath = getRegistryPath()\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 marketplace registry:', error)\n return []\n }\n}\n\n/**\n * Save marketplace registry\n */\nfunction saveRegistry(marketplaces: RegisteredMarketplace[]): void {\n const registryPath = getRegistryPath()\n writeFileSync(registryPath, JSON.stringify(marketplaces, null, 2), 'utf-8')\n}\n\n/**\n * Clone git repository to temporary location using safe execFile\n */\nasync function cloneGitRepo(url: string, ref?: string): Promise<string> {\n const tempDir = join(getMarketplaceDir(), 'temp', Date.now().toString())\n mkdirSync(tempDir, { recursive: true })\n\n try {\n // Build git clone arguments safely\n const args = ['clone', '--depth', '1']\n\n if (ref) {\n args.push('--branch', ref)\n }\n\n args.push(url, tempDir)\n\n // Clone repository using safe execFile\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 // Clean up on error\n try {\n rmSync(tempDir, { recursive: true, force: true })\n } catch (cleanupError) {\n // Ignore cleanup errors\n }\n\n throw new MarketplaceError(\n `Failed to clone repository: ${error instanceof Error ? error.message : String(error)}`,\n MarketplaceErrorCode.GIT_ERROR,\n undefined,\n error\n )\n }\n}\n\n/**\n * Load marketplace manifest from directory\n */\nfunction loadManifestFromDirectory(dir: string): MarketplaceManifest {\n const manifestPath = join(dir, '.claude-plugin', 'marketplace.json')\n\n if (!existsSync(manifestPath)) {\n throw new MarketplaceError(\n `Marketplace manifest not found at ${manifestPath}`,\n MarketplaceErrorCode.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 MarketplaceManifestSchema.parse(data)\n } catch (error) {\n throw new MarketplaceError(\n `Invalid marketplace manifest: ${error instanceof Error ? error.message : String(error)}`,\n MarketplaceErrorCode.MANIFEST_INVALID,\n undefined,\n error\n )\n }\n}\n\n/**\n * Fetch marketplace manifest from GitHub\n */\nasync function fetchGitHubMarketplace(repo: string, ref?: string): Promise<MarketplaceManifest> {\n const url = `https://github.com/${repo}.git`\n const tempDir = await cloneGitRepo(url, ref)\n\n try {\n return loadManifestFromDirectory(tempDir)\n } finally {\n // Clean up temp directory\n try {\n rmSync(tempDir, { recursive: true, force: true })\n } catch (e) {\n // Ignore cleanup errors\n }\n }\n}\n\n/**\n * Fetch marketplace manifest from git URL\n */\nasync function fetchUrlMarketplace(url: string, ref?: string): Promise<MarketplaceManifest> {\n const tempDir = await cloneGitRepo(url, ref)\n\n try {\n return loadManifestFromDirectory(tempDir)\n } finally {\n // Clean up temp directory\n try {\n rmSync(tempDir, { recursive: true, force: true })\n } catch (e) {\n // Ignore cleanup errors\n }\n }\n}\n\n/**\n * Load marketplace manifest from local path\n */\nfunction loadLocalMarketplace(path: string): MarketplaceManifest {\n const resolvedPath = path.startsWith('/') ? path : join(getCwd(), path)\n return loadManifestFromDirectory(resolvedPath)\n}\n\n/**\n * Parse marketplace source from string input\n */\nexport function parseMarketplaceSource(input: string): MarketplaceSource {\n // GitHub shorthand: owner/repo\n if (/^[\\w-]+\\/[\\w-]+$/.test(input)) {\n return { type: 'github', repo: input }\n }\n\n // GitHub URL\n if (input.includes('github.com')) {\n const match = input.match(/github\\.com[/:]([\\w-]+\\/[\\w-]+)/)\n if (match) {\n return { type: 'github', repo: match[1] }\n }\n }\n\n // Git URL\n if (input.startsWith('http://') || input.startsWith('https://') || input.endsWith('.git')) {\n return { type: 'url', url: input }\n }\n\n // Local path\n return { type: 'local', path: input }\n}\n\n/**\n * Add/register a marketplace\n */\nexport async function addMarketplace(input: string): Promise<RegisteredMarketplace> {\n const source = parseMarketplaceSource(input)\n\n // Fetch manifest based on source type\n let manifest: MarketplaceManifest\n\n switch (source.type) {\n case 'github':\n manifest = await fetchGitHubMarketplace(source.repo, source.ref)\n break\n case 'url':\n manifest = await fetchUrlMarketplace(source.url, source.ref)\n break\n case 'local':\n manifest = loadLocalMarketplace(source.path)\n break\n }\n\n // Check if already registered\n const registry = loadRegistry()\n if (registry.some(m => m.name === manifest.name)) {\n throw new MarketplaceError(\n `Marketplace \"${manifest.name}\" is already registered`,\n MarketplaceErrorCode.ALREADY_REGISTERED,\n manifest.name\n )\n }\n\n // Create registered marketplace\n const registered: RegisteredMarketplace = {\n name: manifest.name,\n source,\n manifest,\n lastUpdated: new Date(),\n enabled: true,\n }\n\n // Save to registry\n registry.push(registered)\n saveRegistry(registry)\n\n return registered\n}\n\n/**\n * Remove a marketplace\n */\nexport function removeMarketplace(name: string): void {\n const registry = loadRegistry()\n const filtered = registry.filter(m => m.name !== name)\n\n if (filtered.length === registry.length) {\n throw new MarketplaceError(\n `Marketplace \"${name}\" is not registered`,\n MarketplaceErrorCode.NOT_REGISTERED,\n name\n )\n }\n\n saveRegistry(filtered)\n}\n\n/**\n * Update a marketplace (re-fetch manifest)\n */\nexport async function updateMarketplace(name: string): Promise<RegisteredMarketplace> {\n const registry = loadRegistry()\n const marketplace = registry.find(m => m.name === name)\n\n if (!marketplace) {\n throw new MarketplaceError(\n `Marketplace \"${name}\" is not registered`,\n MarketplaceErrorCode.NOT_REGISTERED,\n name\n )\n }\n\n // Re-fetch manifest\n let manifest: MarketplaceManifest\n\n switch (marketplace.source.type) {\n case 'github':\n manifest = await fetchGitHubMarketplace(marketplace.source.repo, marketplace.source.ref)\n break\n case 'url':\n manifest = await fetchUrlMarketplace(marketplace.source.url, marketplace.source.ref)\n break\n case 'local':\n manifest = loadLocalMarketplace(marketplace.source.path)\n break\n }\n\n // Update in registry\n marketplace.manifest = manifest\n marketplace.lastUpdated = new Date()\n\n saveRegistry(registry)\n\n return marketplace\n}\n\n/**\n * List all registered marketplaces\n */\nexport function listMarketplaces(): RegisteredMarketplace[] {\n return loadRegistry()\n}\n\n/**\n * Get a specific marketplace\n */\nexport function getMarketplace(name: string): RegisteredMarketplace | undefined {\n const registry = loadRegistry()\n return registry.find(m => m.name === name)\n}\n\n/**\n * Find plugin in marketplaces\n */\nexport function findPlugin(pluginName: string, marketplaceName?: string): {\n marketplace: RegisteredMarketplace\n plugin: MarketplacePlugin\n} | undefined {\n const registry = loadRegistry()\n\n // Search in specific marketplace\n if (marketplaceName) {\n const marketplace = registry.find(m => m.name === marketplaceName)\n if (!marketplace) return undefined\n\n const plugin = marketplace.manifest.plugins.find(p => p.name === pluginName)\n if (!plugin) return undefined\n\n return { marketplace, plugin }\n }\n\n // Search in all marketplaces\n for (const marketplace of registry) {\n if (!marketplace.enabled) continue\n\n const plugin = marketplace.manifest.plugins.find(p => p.name === pluginName)\n if (plugin) {\n return { marketplace, plugin }\n }\n }\n\n return undefined\n}\n\n/**\n * Load marketplace settings with hierarchical priority\n * Priority (highest to lowest):\n * 1. Project .minto/settings.json\n * 2. Project .claude/settings.json (Claude Code compatibility)\n * 3. User ~/.minto/settings.json\n * 4. User ~/.claude/settings.json (Claude Code compatibility)\n */\nexport function loadMarketplaceSettings(): MarketplaceSettings {\n const cwd = getCwd()\n const home = homedir()\n\n // Define search paths in priority order\n const settingsPaths = [\n { path: join(cwd, '.minto', 'settings.json'), label: 'project .minto' },\n { path: join(cwd, '.claude', 'settings.json'), label: 'project .claude' },\n { path: join(home, '.minto', 'settings.json'), label: 'user .minto' },\n { path: join(home, '.claude', 'settings.json'), label: 'user .claude' },\n ]\n\n // Try loading from each path in priority order\n for (const { path, label } of settingsPaths) {\n if (existsSync(path)) {\n try {\n const content = readFileSync(path, 'utf-8')\n const settings = JSON.parse(content)\n // Optional: log which settings file was used for debugging\n // console.log(`Loaded marketplace settings from ${label}: ${path}`)\n return settings\n } catch (error) {\n console.error(`Error loading marketplace settings from ${label} (${path}):`, error)\n // Continue to next path on error\n }\n }\n }\n\n // No settings found\n return {}\n}\n\n/**\n * Auto-register marketplaces from settings\n */\nexport async function autoRegisterMarketplaces(): Promise<void> {\n const settings = loadMarketplaceSettings()\n\n if (!settings.extraKnownMarketplaces) return\n\n const registry = loadRegistry()\n\n for (const [name, config] of Object.entries(settings.extraKnownMarketplaces)) {\n // Skip if already registered\n if (registry.some(m => m.name === name)) continue\n\n try {\n let source: MarketplaceSource\n\n if (config.source.source === 'github' && config.source.repo) {\n source = { type: 'github', repo: config.source.repo, ref: config.source.ref }\n } else if (config.source.source === 'url' && config.source.url) {\n source = { type: 'url', url: config.source.url, ref: config.source.ref }\n } else if (config.source.source === 'local' && config.source.path) {\n source = { type: 'local', path: config.source.path }\n } else {\n continue\n }\n\n // Fetch and register\n let manifest: MarketplaceManifest\n\n switch (source.type) {\n case 'github':\n manifest = await fetchGitHubMarketplace(source.repo, source.ref)\n break\n case 'url':\n manifest = await fetchUrlMarketplace(source.url, source.ref)\n break\n case 'local':\n manifest = loadLocalMarketplace(source.path)\n break\n }\n\n registry.push({\n name: manifest.name,\n source,\n manifest,\n lastUpdated: new Date(),\n enabled: true,\n })\n } catch (error) {\n console.error(`Error auto-registering marketplace ${name}:`, error)\n }\n }\n\n saveRegistry(registry)\n}\n\n/**\n * Get marketplace repository directory path\n * For cloned marketplaces, returns the temp directory path\n * For local marketplaces, returns the local path\n */\nasync function getMarketplaceRepoPath(marketplace: RegisteredMarketplace): Promise<{ path: string; cleanup: boolean }> {\n switch (marketplace.source.type) {\n case 'github': {\n const url = `https://github.com/${marketplace.source.repo}.git`\n const tempDir = await cloneGitRepo(url, marketplace.source.ref)\n return { path: tempDir, cleanup: true }\n }\n case 'url': {\n const tempDir = await cloneGitRepo(marketplace.source.url, marketplace.source.ref)\n return { path: tempDir, cleanup: true }\n }\n case 'local': {\n const resolvedPath = isAbsolute(marketplace.source.path)\n ? marketplace.source.path\n : resolve(getCwd(), marketplace.source.path)\n\n if (!existsSync(resolvedPath)) {\n throw new MarketplaceError(\n `Local marketplace path does not exist: ${resolvedPath}`,\n MarketplaceErrorCode.MANIFEST_NOT_FOUND\n )\n }\n\n return { path: resolvedPath, cleanup: false }\n }\n }\n}\n\n/**\n * Copy directory contents recursively\n */\nfunction copyDirectory(sourcePath: string, destPath: string): void {\n try {\n // Create destination directory if it doesn't exist\n if (!existsSync(destPath)) {\n mkdirSync(destPath, { recursive: true })\n }\n\n // Copy recursively, excluding .git directories\n cpSync(sourcePath, destPath, {\n recursive: true,\n filter: (src) => {\n // Skip .git directories to avoid copying version control history\n return !src.includes('/.git/') && !src.endsWith('/.git')\n },\n })\n } catch (error) {\n throw new MarketplaceError(\n `Failed to copy directory from ${sourcePath} to ${destPath}: ${error instanceof Error ? error.message : String(error)}`,\n MarketplaceErrorCode.GIT_ERROR,\n undefined,\n error\n )\n }\n}\n\n/**\n * Create symlink to directory\n */\nfunction symlinkDirectory(sourcePath: string, destPath: string): void {\n try {\n // Remove destination if it exists\n if (existsSync(destPath)) {\n // Check if it's already a symlink pointing to the right place\n try {\n const stats = lstatSync(destPath)\n if (stats.isSymbolicLink()) {\n // Already a symlink, remove it\n rmSync(destPath, { force: true })\n } else {\n throw new MarketplaceError(\n `Destination path already exists and is not a symlink: ${destPath}`,\n MarketplaceErrorCode.GIT_ERROR\n )\n }\n } catch (error) {\n throw new MarketplaceError(\n `Failed to check existing path: ${error instanceof Error ? error.message : String(error)}`,\n MarketplaceErrorCode.GIT_ERROR,\n undefined,\n error\n )\n }\n } else {\n // Create parent directory\n const parentDir = join(destPath, '..')\n if (!existsSync(parentDir)) {\n mkdirSync(parentDir, { recursive: true })\n }\n }\n\n // Create symlink\n symlinkSync(sourcePath, destPath, 'dir')\n } catch (error) {\n throw new MarketplaceError(\n `Failed to create symlink from ${sourcePath} to ${destPath}: ${error instanceof Error ? error.message : String(error)}`,\n MarketplaceErrorCode.GIT_ERROR,\n undefined,\n error\n )\n }\n}\n\n/**\n * Install plugin from marketplace\n */\nexport async function installPluginFromMarketplace(\n pluginName: string,\n marketplaceName?: string,\n targetDir?: string,\n options?: { dev?: boolean }\n): Promise<string> {\n const found = findPlugin(pluginName, marketplaceName)\n\n if (!found) {\n throw new MarketplaceError(\n marketplaceName\n ? `Plugin \"${pluginName}\" not found in marketplace \"${marketplaceName}\"`\n : `Plugin \"${pluginName}\" not found in any marketplace`,\n MarketplaceErrorCode.PLUGIN_NOT_FOUND\n )\n }\n\n const { marketplace, plugin } = found\n\n // Determine installation directory\n const installDir = targetDir || join(getCwd(), '.minto', 'plugins', plugin.name)\n\n // Create installation directory\n if (!existsSync(installDir)) {\n mkdirSync(installDir, { recursive: true })\n }\n\n let cleanupMarketplaceRepo = false\n let marketplaceRepoPath: string | undefined\n\n try {\n // Install plugin based on source type\n if (typeof plugin.source === 'string') {\n // Relative path - resolve from marketplace source\n const repoInfo = await getMarketplaceRepoPath(marketplace)\n marketplaceRepoPath = repoInfo.path\n cleanupMarketplaceRepo = repoInfo.cleanup\n\n // Determine base path for relative plugin sources\n const pluginRoot = marketplace.manifest.metadata?.pluginRoot || ''\n const pluginSourcePath = join(marketplaceRepoPath, pluginRoot, plugin.source)\n\n if (!existsSync(pluginSourcePath)) {\n throw new MarketplaceError(\n `Plugin source path does not exist: ${pluginSourcePath} (relative path: ${plugin.source})`,\n MarketplaceErrorCode.PLUGIN_NOT_FOUND\n )\n }\n\n // Copy plugin files to installation directory\n copyDirectory(pluginSourcePath, installDir)\n\n } else if (plugin.source.source === 'github') {\n // GitHub repository - clone directly\n const url = `https://github.com/${plugin.source.repo}.git`\n const tempDir = await cloneGitRepo(url, plugin.source.ref)\n\n try {\n copyDirectory(tempDir, installDir)\n } finally {\n // Clean up temp directory\n rmSync(tempDir, { recursive: true, force: true })\n }\n\n } else if (plugin.source.source === 'url') {\n // Git URL - clone directly\n const tempDir = await cloneGitRepo(plugin.source.url, plugin.source.ref)\n\n try {\n copyDirectory(tempDir, installDir)\n } finally {\n // Clean up temp directory\n rmSync(tempDir, { recursive: true, force: true })\n }\n\n } else if (plugin.source.source === 'local') {\n // Local path - resolve and copy or symlink\n const pluginSourcePath = isAbsolute(plugin.source.path)\n ? plugin.source.path\n : resolve(getCwd(), plugin.source.path)\n\n if (!existsSync(pluginSourcePath)) {\n throw new MarketplaceError(\n `Local plugin path does not exist: ${pluginSourcePath}`,\n MarketplaceErrorCode.PLUGIN_NOT_FOUND\n )\n }\n\n // In dev mode, create symlink for easier development\n // In production mode, copy files for isolation\n if (options?.dev) {\n symlinkDirectory(pluginSourcePath, installDir)\n } else {\n copyDirectory(pluginSourcePath, installDir)\n }\n }\n\n // Create marketplace metadata file to track source\n const metadataPath = join(installDir, '.marketplace-meta.json')\n const metadata = {\n marketplace: marketplace.name,\n plugin: plugin.name,\n installedAt: new Date().toISOString(),\n source: plugin.source,\n }\n writeFileSync(metadataPath, JSON.stringify(metadata, null, 2), 'utf-8')\n\n // Create plugin.json if it doesn't exist (required for plugin discovery)\n const pluginManifestPath = join(installDir, 'plugin.json')\n if (!existsSync(pluginManifestPath)) {\n const pluginManifest = {\n name: plugin.name,\n displayName: plugin.displayName || plugin.name,\n version: plugin.version || '1.0.0',\n description: plugin.description || '',\n author: plugin.author,\n license: plugin.license,\n homepage: plugin.homepage,\n repository: plugin.repository,\n keywords: plugin.keywords || [],\n category: plugin.category,\n }\n writeFileSync(pluginManifestPath, JSON.stringify(pluginManifest, null, 2), 'utf-8')\n }\n\n return installDir\n\n } finally {\n // Clean up marketplace repo if it was cloned\n if (cleanupMarketplaceRepo && marketplaceRepoPath) {\n try {\n rmSync(marketplaceRepoPath, { recursive: true, force: true })\n } catch (error) {\n // Ignore cleanup errors\n }\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }