@within-7/minto 0.1.7 → 0.3.0

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 (601) hide show
  1. package/cli.js +155 -37
  2. package/dist/Tool.js +38 -0
  3. package/dist/Tool.js.map +3 -3
  4. package/dist/commands/agents/AgentsCommand.js +73 -49
  5. package/dist/commands/agents/AgentsCommand.js.map +2 -2
  6. package/dist/commands/agents/constants.js +1 -1
  7. package/dist/commands/agents/constants.js.map +1 -1
  8. package/dist/commands/agents/index.js +1 -1
  9. package/dist/commands/bug.js +74 -7
  10. package/dist/commands/bug.js.map +3 -3
  11. package/dist/commands/clear.js +3 -0
  12. package/dist/commands/clear.js.map +2 -2
  13. package/dist/commands/compact.js +37 -0
  14. package/dist/commands/compact.js.map +2 -2
  15. package/dist/commands/context.js +85 -0
  16. package/dist/commands/context.js.map +7 -0
  17. package/dist/commands/ctx_viz.js +18 -10
  18. package/dist/commands/ctx_viz.js.map +2 -2
  19. package/dist/commands/doctor.js +158 -12
  20. package/dist/commands/doctor.js.map +2 -2
  21. package/dist/commands/export.js +157 -0
  22. package/dist/commands/export.js.map +7 -0
  23. package/dist/commands/mcp-interactive.js +28 -18
  24. package/dist/commands/mcp-interactive.js.map +2 -2
  25. package/dist/commands/model.js +9 -7
  26. package/dist/commands/model.js.map +2 -2
  27. package/dist/commands/permissions.js +87 -0
  28. package/dist/commands/permissions.js.map +7 -0
  29. package/dist/commands/plugin/AddMarketplaceForm.js +3 -2
  30. package/dist/commands/plugin/AddMarketplaceForm.js.map +2 -2
  31. package/dist/commands/plugin/ConfirmDialog.js +2 -1
  32. package/dist/commands/plugin/ConfirmDialog.js.map +2 -2
  33. package/dist/commands/plugin/ErrorView.js +2 -1
  34. package/dist/commands/plugin/ErrorView.js.map +2 -2
  35. package/dist/commands/plugin/InstalledPluginsByMarketplace.js +5 -4
  36. package/dist/commands/plugin/InstalledPluginsByMarketplace.js.map +2 -2
  37. package/dist/commands/plugin/InstalledPluginsManager.js +5 -4
  38. package/dist/commands/plugin/InstalledPluginsManager.js.map +2 -2
  39. package/dist/commands/plugin/MainMenu.js +2 -1
  40. package/dist/commands/plugin/MainMenu.js.map +2 -2
  41. package/dist/commands/plugin/MarketplaceManager.js +5 -4
  42. package/dist/commands/plugin/MarketplaceManager.js.map +2 -2
  43. package/dist/commands/plugin/MarketplaceSelector.js +4 -3
  44. package/dist/commands/plugin/MarketplaceSelector.js.map +2 -2
  45. package/dist/commands/plugin/PlaceholderScreen.js +3 -2
  46. package/dist/commands/plugin/PlaceholderScreen.js.map +2 -2
  47. package/dist/commands/plugin/PluginBrowser.js +6 -5
  48. package/dist/commands/plugin/PluginBrowser.js.map +2 -2
  49. package/dist/commands/plugin/PluginDetailsInstall.js +5 -4
  50. package/dist/commands/plugin/PluginDetailsInstall.js.map +2 -2
  51. package/dist/commands/plugin/PluginDetailsManage.js +4 -3
  52. package/dist/commands/plugin/PluginDetailsManage.js.map +2 -2
  53. package/dist/commands/plugin.js +16 -15
  54. package/dist/commands/plugin.js.map +2 -2
  55. package/dist/commands/quit.js +3 -1
  56. package/dist/commands/quit.js.map +2 -2
  57. package/dist/commands/sandbox.js +105 -0
  58. package/dist/commands/sandbox.js.map +7 -0
  59. package/dist/commands/setup.js +2 -1
  60. package/dist/commands/setup.js.map +2 -2
  61. package/dist/commands/status.js +59 -0
  62. package/dist/commands/status.js.map +7 -0
  63. package/dist/commands/tasks.js +108 -0
  64. package/dist/commands/tasks.js.map +7 -0
  65. package/dist/commands/todos.js +123 -0
  66. package/dist/commands/todos.js.map +7 -0
  67. package/dist/commands/undo.js +245 -0
  68. package/dist/commands/undo.js.map +7 -0
  69. package/dist/commands.js +22 -2
  70. package/dist/commands.js.map +2 -2
  71. package/dist/components/AgentThinkingBlock.js +10 -18
  72. package/dist/components/AgentThinkingBlock.js.map +2 -2
  73. package/dist/components/AsciiLogo.js +7 -8
  74. package/dist/components/AsciiLogo.js.map +2 -2
  75. package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js +3 -2
  76. package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js.map +2 -2
  77. package/dist/components/AskUserQuestionDialog/QuestionView.js +2 -1
  78. package/dist/components/AskUserQuestionDialog/QuestionView.js.map +2 -2
  79. package/dist/components/BackgroundTasksPanel.js +78 -29
  80. package/dist/components/BackgroundTasksPanel.js.map +2 -2
  81. package/dist/components/BashStreamingProgress.js +24 -0
  82. package/dist/components/BashStreamingProgress.js.map +7 -0
  83. package/dist/components/CollapsibleHint.js +15 -0
  84. package/dist/components/CollapsibleHint.js.map +7 -0
  85. package/dist/components/Config.js +3 -2
  86. package/dist/components/Config.js.map +2 -2
  87. package/dist/components/ConsoleOAuthFlow.js +2 -1
  88. package/dist/components/ConsoleOAuthFlow.js.map +2 -2
  89. package/dist/components/Cost.js +2 -1
  90. package/dist/components/Cost.js.map +2 -2
  91. package/dist/components/FileEditToolUpdatedMessage.js +1 -1
  92. package/dist/components/FileEditToolUpdatedMessage.js.map +2 -2
  93. package/dist/components/HeaderBar.js +13 -8
  94. package/dist/components/HeaderBar.js.map +2 -2
  95. package/dist/components/HistorySearchOverlay.js +4 -3
  96. package/dist/components/HistorySearchOverlay.js.map +2 -2
  97. package/dist/components/HotkeyHelpPanel.js +134 -0
  98. package/dist/components/HotkeyHelpPanel.js.map +7 -0
  99. package/dist/components/InvalidConfigDialog.js +2 -1
  100. package/dist/components/InvalidConfigDialog.js.map +2 -2
  101. package/dist/components/Logo.js +24 -68
  102. package/dist/components/Logo.js.map +2 -2
  103. package/dist/components/MCPServerApprovalDialog.js +2 -1
  104. package/dist/components/MCPServerApprovalDialog.js.map +2 -2
  105. package/dist/components/MCPServerDialogCopy.js +2 -1
  106. package/dist/components/MCPServerDialogCopy.js.map +2 -2
  107. package/dist/components/MCPServerMultiselectDialog.js +2 -1
  108. package/dist/components/MCPServerMultiselectDialog.js.map +2 -2
  109. package/dist/components/Message.js +23 -7
  110. package/dist/components/Message.js.map +3 -3
  111. package/dist/components/MessageSelector.js +4 -3
  112. package/dist/components/MessageSelector.js.map +2 -2
  113. package/dist/components/ModeIndicator.js +2 -1
  114. package/dist/components/ModeIndicator.js.map +2 -2
  115. package/dist/components/ModelConfig.js +20 -6
  116. package/dist/components/ModelConfig.js.map +2 -2
  117. package/dist/components/ModelListManager.js +7 -6
  118. package/dist/components/ModelListManager.js.map +2 -2
  119. package/dist/components/ModelSelector/ModelSelector.js +27 -14
  120. package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
  121. package/dist/components/Onboarding.js +22 -16
  122. package/dist/components/Onboarding.js.map +2 -2
  123. package/dist/components/OperationSummary.js +130 -0
  124. package/dist/components/OperationSummary.js.map +7 -0
  125. package/dist/components/ProgressBar.js +74 -0
  126. package/dist/components/ProgressBar.js.map +7 -0
  127. package/dist/components/PromptInput.js +210 -87
  128. package/dist/components/PromptInput.js.map +2 -2
  129. package/dist/components/RequestStatusIndicator.js +194 -0
  130. package/dist/components/RequestStatusIndicator.js.map +7 -0
  131. package/dist/components/SensitiveFileWarning.js +31 -0
  132. package/dist/components/SensitiveFileWarning.js.map +7 -0
  133. package/dist/components/Spinner.js +141 -27
  134. package/dist/components/Spinner.js.map +2 -2
  135. package/dist/components/SpinnerSymbol.js +21 -27
  136. package/dist/components/SpinnerSymbol.js.map +2 -2
  137. package/dist/components/StreamingBashOutput.js +9 -8
  138. package/dist/components/StreamingBashOutput.js.map +2 -2
  139. package/dist/components/StructuredDiff.js +6 -8
  140. package/dist/components/StructuredDiff.js.map +2 -2
  141. package/dist/components/SubagentBlock.js +5 -3
  142. package/dist/components/SubagentBlock.js.map +2 -2
  143. package/dist/components/SubagentProgress.js +17 -15
  144. package/dist/components/SubagentProgress.js.map +2 -2
  145. package/dist/components/TaskCard.js +30 -24
  146. package/dist/components/TaskCard.js.map +2 -2
  147. package/dist/components/TextInput.js +9 -1
  148. package/dist/components/TextInput.js.map +2 -2
  149. package/dist/components/TodoChangeBlock.js +1 -1
  150. package/dist/components/TodoChangeBlock.js.map +2 -2
  151. package/dist/components/TodoPanel.js +140 -31
  152. package/dist/components/TodoPanel.js.map +3 -3
  153. package/dist/components/TokenCounter.js +74 -0
  154. package/dist/components/TokenCounter.js.map +7 -0
  155. package/dist/components/TokenWarning.js +2 -1
  156. package/dist/components/TokenWarning.js.map +2 -2
  157. package/dist/components/ToolUseLoader.js +2 -2
  158. package/dist/components/ToolUseLoader.js.map +2 -2
  159. package/dist/components/TreeConnector.js +26 -0
  160. package/dist/components/TreeConnector.js.map +7 -0
  161. package/dist/components/TrustDialog.js +2 -1
  162. package/dist/components/TrustDialog.js.map +2 -2
  163. package/dist/components/TurnCompletionIndicator.js +18 -0
  164. package/dist/components/TurnCompletionIndicator.js.map +7 -0
  165. package/dist/components/binary-feedback/BinaryFeedbackView.js +2 -1
  166. package/dist/components/binary-feedback/BinaryFeedbackView.js.map +2 -2
  167. package/dist/components/messages/AssistantTextMessage.js +20 -9
  168. package/dist/components/messages/AssistantTextMessage.js.map +2 -2
  169. package/dist/components/messages/AssistantThinkingMessage.js +18 -3
  170. package/dist/components/messages/AssistantThinkingMessage.js.map +2 -2
  171. package/dist/components/messages/AssistantToolUseMessage.js +17 -10
  172. package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
  173. package/dist/components/messages/GroupRenderer.js +54 -0
  174. package/dist/components/messages/GroupRenderer.js.map +7 -0
  175. package/dist/components/messages/NestedTasksPreview.js +24 -0
  176. package/dist/components/messages/NestedTasksPreview.js.map +7 -0
  177. package/dist/components/messages/ParallelTasksGroupView.js +93 -0
  178. package/dist/components/messages/ParallelTasksGroupView.js.map +7 -0
  179. package/dist/components/messages/TaskInModuleView.js +218 -0
  180. package/dist/components/messages/TaskInModuleView.js.map +7 -0
  181. package/dist/components/messages/TaskOutputContent.js +56 -0
  182. package/dist/components/messages/TaskOutputContent.js.map +7 -0
  183. package/dist/components/messages/UserPromptMessage.js +2 -2
  184. package/dist/components/messages/UserPromptMessage.js.map +2 -2
  185. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +2 -3
  186. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +2 -2
  187. package/dist/components/permissions/FallbackPermissionRequest.js +4 -4
  188. package/dist/components/permissions/FallbackPermissionRequest.js.map +2 -2
  189. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +4 -4
  190. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +2 -2
  191. package/dist/constants/colors.js +120 -54
  192. package/dist/constants/colors.js.map +2 -2
  193. package/dist/constants/formatRules.js +102 -0
  194. package/dist/constants/formatRules.js.map +7 -0
  195. package/dist/constants/prompts.js +12 -34
  196. package/dist/constants/prompts.js.map +2 -2
  197. package/dist/constants/symbols.js +64 -6
  198. package/dist/constants/symbols.js.map +2 -2
  199. package/dist/constants/timing.js +5 -0
  200. package/dist/constants/timing.js.map +2 -2
  201. package/dist/constants/toolInputExamples.js +84 -0
  202. package/dist/constants/toolInputExamples.js.map +7 -0
  203. package/dist/core/backupManager.js +321 -0
  204. package/dist/core/backupManager.js.map +7 -0
  205. package/dist/core/config/defaults.js +84 -0
  206. package/dist/core/config/defaults.js.map +7 -0
  207. package/dist/core/config/index.js +111 -0
  208. package/dist/core/config/index.js.map +7 -0
  209. package/dist/core/config/loader.js +221 -0
  210. package/dist/core/config/loader.js.map +7 -0
  211. package/dist/core/config/migrations.js +128 -0
  212. package/dist/core/config/migrations.js.map +7 -0
  213. package/dist/core/config/schema.js +178 -0
  214. package/dist/core/config/schema.js.map +7 -0
  215. package/dist/core/costTracker.js +129 -0
  216. package/dist/core/costTracker.js.map +7 -0
  217. package/dist/core/gitAutoCommit.js +287 -0
  218. package/dist/core/gitAutoCommit.js.map +7 -0
  219. package/dist/core/index.js +8 -0
  220. package/dist/core/index.js.map +7 -0
  221. package/dist/core/operationTracker.js +212 -0
  222. package/dist/core/operationTracker.js.map +7 -0
  223. package/dist/core/permissions/auditLog.js +204 -0
  224. package/dist/core/permissions/auditLog.js.map +7 -0
  225. package/dist/core/permissions/engine/index.js +3 -0
  226. package/dist/core/permissions/engine/index.js.map +7 -0
  227. package/dist/core/permissions/engine/permissionEngine.js +106 -0
  228. package/dist/core/permissions/engine/permissionEngine.js.map +7 -0
  229. package/dist/core/permissions/engine/types.js +1 -0
  230. package/dist/core/permissions/engine/types.js.map +7 -0
  231. package/dist/core/permissions/index.js +84 -0
  232. package/dist/core/permissions/index.js.map +7 -0
  233. package/dist/core/permissions/ruleEngine.js +259 -0
  234. package/dist/core/permissions/ruleEngine.js.map +7 -0
  235. package/dist/core/permissions/rules/allowedToolsRule.js +62 -0
  236. package/dist/core/permissions/rules/allowedToolsRule.js.map +7 -0
  237. package/dist/core/permissions/rules/autoEscalationRule.js +296 -0
  238. package/dist/core/permissions/rules/autoEscalationRule.js.map +7 -0
  239. package/dist/core/permissions/rules/index.js +46 -0
  240. package/dist/core/permissions/rules/index.js.map +7 -0
  241. package/dist/core/permissions/rules/planModeRule.js +55 -0
  242. package/dist/core/permissions/rules/planModeRule.js.map +7 -0
  243. package/dist/core/permissions/rules/projectBoundaryRule.js +173 -0
  244. package/dist/core/permissions/rules/projectBoundaryRule.js.map +7 -0
  245. package/dist/core/permissions/rules/safeModeRule.js +65 -0
  246. package/dist/core/permissions/rules/safeModeRule.js.map +7 -0
  247. package/dist/core/permissions/rules/sensitivePathsRule.js +345 -0
  248. package/dist/core/permissions/rules/sensitivePathsRule.js.map +7 -0
  249. package/dist/core/permissions/types.js +127 -0
  250. package/dist/core/permissions/types.js.map +7 -0
  251. package/dist/core/tokenStats.js +9 -0
  252. package/dist/core/tokenStats.js.map +7 -0
  253. package/dist/core/tokenStatsManager.js +331 -0
  254. package/dist/core/tokenStatsManager.js.map +7 -0
  255. package/dist/core/tools/executor.js +143 -0
  256. package/dist/core/tools/executor.js.map +7 -0
  257. package/dist/core/tools/index.js +15 -0
  258. package/dist/core/tools/index.js.map +7 -0
  259. package/dist/core/tools/registry.js +183 -0
  260. package/dist/core/tools/registry.js.map +7 -0
  261. package/dist/core/tools/types.js +1 -0
  262. package/dist/core/tools/types.js.map +7 -0
  263. package/dist/cost-tracker.js +23 -15
  264. package/dist/cost-tracker.js.map +2 -2
  265. package/dist/entrypoints/cli.js +158 -130
  266. package/dist/entrypoints/cli.js.map +2 -2
  267. package/dist/entrypoints/mcp.js +12 -4
  268. package/dist/entrypoints/mcp.js.map +2 -2
  269. package/dist/history.js +14 -3
  270. package/dist/history.js.map +2 -2
  271. package/dist/hooks/useAgentTokenStats.js +72 -0
  272. package/dist/hooks/useAgentTokenStats.js.map +7 -0
  273. package/dist/hooks/useAgentTranscripts.js +140 -0
  274. package/dist/hooks/useAgentTranscripts.js.map +7 -0
  275. package/dist/hooks/useAnimationSync.js +53 -0
  276. package/dist/hooks/useAnimationSync.js.map +7 -0
  277. package/dist/hooks/useArrowKeyHistory.js +4 -2
  278. package/dist/hooks/useArrowKeyHistory.js.map +2 -2
  279. package/dist/hooks/useCanUseTool.js +3 -1
  280. package/dist/hooks/useCanUseTool.js.map +2 -2
  281. package/dist/hooks/useExitOnCtrlCD.js +9 -5
  282. package/dist/hooks/useExitOnCtrlCD.js.map +2 -2
  283. package/dist/hooks/useHookStatus.js +40 -0
  284. package/dist/hooks/useHookStatus.js.map +7 -0
  285. package/dist/hooks/useLogMessages.js +29 -2
  286. package/dist/hooks/useLogMessages.js.map +2 -2
  287. package/dist/hooks/useMessageGroups.js +43 -0
  288. package/dist/hooks/useMessageGroups.js.map +7 -0
  289. package/dist/hooks/useTerminalSize.js +62 -6
  290. package/dist/hooks/useTerminalSize.js.map +2 -2
  291. package/dist/hooks/useUnifiedCompletion.js +69 -0
  292. package/dist/hooks/useUnifiedCompletion.js.map +2 -2
  293. package/dist/i18n/index.js +109 -0
  294. package/dist/i18n/index.js.map +7 -0
  295. package/dist/i18n/locales/en.js +348 -0
  296. package/dist/i18n/locales/en.js.map +7 -0
  297. package/dist/i18n/locales/index.js +7 -0
  298. package/dist/i18n/locales/index.js.map +7 -0
  299. package/dist/i18n/locales/zh-CN.js +348 -0
  300. package/dist/i18n/locales/zh-CN.js.map +7 -0
  301. package/dist/i18n/types.js +8 -0
  302. package/dist/i18n/types.js.map +7 -0
  303. package/dist/permissions.js +28 -1
  304. package/dist/permissions.js.map +2 -2
  305. package/dist/query.js +253 -21
  306. package/dist/query.js.map +3 -3
  307. package/dist/screens/REPL.js +523 -194
  308. package/dist/screens/REPL.js.map +3 -3
  309. package/dist/services/adapters/chatCompletions.js +3 -1
  310. package/dist/services/adapters/chatCompletions.js.map +2 -2
  311. package/dist/services/adapters/messageNormalizer.js +354 -0
  312. package/dist/services/adapters/messageNormalizer.js.map +7 -0
  313. package/dist/services/adapters/responsesAPI.js +6 -3
  314. package/dist/services/adapters/responsesAPI.js.map +2 -2
  315. package/dist/services/checkpointManager.js +386 -0
  316. package/dist/services/checkpointManager.js.map +7 -0
  317. package/dist/services/claude.js +192 -14
  318. package/dist/services/claude.js.map +3 -3
  319. package/dist/services/compressionService.js +50 -1
  320. package/dist/services/compressionService.js.map +2 -2
  321. package/dist/services/contextMonitor.js +162 -0
  322. package/dist/services/contextMonitor.js.map +7 -0
  323. package/dist/services/customCommands.js +60 -41
  324. package/dist/services/customCommands.js.map +2 -2
  325. package/dist/services/hookExecutor.js +173 -1
  326. package/dist/services/hookExecutor.js.map +2 -2
  327. package/dist/services/intelligentCompactor.js +281 -0
  328. package/dist/services/intelligentCompactor.js.map +7 -0
  329. package/dist/services/lspConfig.js +109 -0
  330. package/dist/services/lspConfig.js.map +7 -0
  331. package/dist/services/mcpClient.js +338 -43
  332. package/dist/services/mcpClient.js.map +2 -2
  333. package/dist/services/modelOrchestrator.js +310 -0
  334. package/dist/services/modelOrchestrator.js.map +7 -0
  335. package/dist/services/openai.js +8 -1
  336. package/dist/services/openai.js.map +2 -2
  337. package/dist/services/outputStyles.js +138 -0
  338. package/dist/services/outputStyles.js.map +7 -0
  339. package/dist/services/plugins/index.js +5 -0
  340. package/dist/services/plugins/index.js.map +7 -0
  341. package/dist/services/plugins/lspServers.js +188 -0
  342. package/dist/services/plugins/lspServers.js.map +7 -0
  343. package/dist/services/plugins/pluginRuntime.js +229 -0
  344. package/dist/services/plugins/pluginRuntime.js.map +7 -0
  345. package/dist/services/plugins/pluginValidation.js +219 -0
  346. package/dist/services/plugins/pluginValidation.js.map +7 -0
  347. package/dist/services/plugins/skillMarketplace.js +556 -0
  348. package/dist/services/plugins/skillMarketplace.js.map +7 -0
  349. package/dist/services/responseStateManager.js +37 -3
  350. package/dist/services/responseStateManager.js.map +2 -2
  351. package/dist/services/sandbox/filesystemBoundary.js +341 -0
  352. package/dist/services/sandbox/filesystemBoundary.js.map +7 -0
  353. package/dist/services/sandbox/index.js +14 -0
  354. package/dist/services/sandbox/index.js.map +7 -0
  355. package/dist/services/sandbox/networkProxy.js +293 -0
  356. package/dist/services/sandbox/networkProxy.js.map +7 -0
  357. package/dist/services/sandbox/sandboxController.js +574 -0
  358. package/dist/services/sandbox/sandboxController.js.map +7 -0
  359. package/dist/services/sandbox/types.js +50 -0
  360. package/dist/services/sandbox/types.js.map +7 -0
  361. package/dist/services/sessionMemory.js +266 -0
  362. package/dist/services/sessionMemory.js.map +7 -0
  363. package/dist/services/taskRouter.js +324 -0
  364. package/dist/services/taskRouter.js.map +7 -0
  365. package/dist/tools/ArchitectTool/ArchitectTool.js +7 -1
  366. package/dist/tools/ArchitectTool/ArchitectTool.js.map +2 -2
  367. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +6 -2
  368. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
  369. package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js +2 -1
  370. package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js.map +2 -2
  371. package/dist/tools/BaseTool.js +72 -0
  372. package/dist/tools/BaseTool.js.map +7 -0
  373. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js +3 -0
  374. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js.map +2 -2
  375. package/dist/tools/BashTool/BashTool.js +79 -3
  376. package/dist/tools/BashTool/BashTool.js.map +2 -2
  377. package/dist/tools/BashTool/BashToolResultMessage.js +3 -0
  378. package/dist/tools/BashTool/BashToolResultMessage.js.map +2 -2
  379. package/dist/tools/BashTool/OutputLine.js +54 -0
  380. package/dist/tools/BashTool/OutputLine.js.map +2 -2
  381. package/dist/tools/BashTool/prompt.js +336 -3
  382. package/dist/tools/BashTool/prompt.js.map +2 -2
  383. package/dist/tools/FileEditTool/FileEditTool.js +29 -4
  384. package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
  385. package/dist/tools/FileEditTool/prompt.js +6 -3
  386. package/dist/tools/FileEditTool/prompt.js.map +2 -2
  387. package/dist/tools/FileWriteTool/FileWriteTool.js +5 -5
  388. package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
  389. package/dist/tools/FileWriteTool/prompt.js +4 -2
  390. package/dist/tools/FileWriteTool/prompt.js.map +2 -2
  391. package/dist/tools/GlobTool/GlobTool.js +4 -2
  392. package/dist/tools/GlobTool/GlobTool.js.map +2 -2
  393. package/dist/tools/GrepTool/GrepTool.js +36 -7
  394. package/dist/tools/GrepTool/GrepTool.js.map +2 -2
  395. package/dist/tools/KillShellTool/KillShellToolResultMessage.js +3 -0
  396. package/dist/tools/KillShellTool/KillShellToolResultMessage.js.map +2 -2
  397. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js +109 -0
  398. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +7 -0
  399. package/dist/tools/ListMcpResourcesTool/prompt.js +19 -0
  400. package/dist/tools/ListMcpResourcesTool/prompt.js.map +7 -0
  401. package/dist/tools/LspTool/LspTool.js +664 -0
  402. package/dist/tools/LspTool/LspTool.js.map +7 -0
  403. package/dist/tools/LspTool/prompt.js +27 -0
  404. package/dist/tools/LspTool/prompt.js.map +7 -0
  405. package/dist/tools/MCPTool/MCPTool.js +9 -1
  406. package/dist/tools/MCPTool/MCPTool.js.map +2 -2
  407. package/dist/tools/MemoryReadTool/MemoryReadTool.js +19 -6
  408. package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +2 -2
  409. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +6 -6
  410. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +2 -2
  411. package/dist/tools/MultiEditTool/MultiEditTool.js +19 -2
  412. package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
  413. package/dist/tools/MultiEditTool/prompt.js +5 -3
  414. package/dist/tools/MultiEditTool/prompt.js.map +2 -2
  415. package/dist/tools/NotebookEditTool/NotebookEditTool.js +7 -2
  416. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
  417. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +2 -2
  418. package/dist/tools/PlanModeTool/EnterPlanModeTool.js +75 -0
  419. package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +7 -0
  420. package/dist/tools/PlanModeTool/ExitPlanModeTool.js +109 -0
  421. package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +7 -0
  422. package/dist/tools/PlanModeTool/prompt.js +94 -0
  423. package/dist/tools/PlanModeTool/prompt.js.map +7 -0
  424. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js +130 -0
  425. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js.map +7 -0
  426. package/dist/tools/ReadMcpResourceTool/prompt.js +17 -0
  427. package/dist/tools/ReadMcpResourceTool/prompt.js.map +7 -0
  428. package/dist/tools/SkillTool/SkillTool.js +10 -4
  429. package/dist/tools/SkillTool/SkillTool.js.map +2 -2
  430. package/dist/tools/SkillTool/prompt.js +1 -1
  431. package/dist/tools/SkillTool/prompt.js.map +1 -1
  432. package/dist/tools/SlashCommandTool/SlashCommandTool.js +260 -0
  433. package/dist/tools/SlashCommandTool/SlashCommandTool.js.map +7 -0
  434. package/dist/tools/SlashCommandTool/prompt.js +35 -0
  435. package/dist/tools/SlashCommandTool/prompt.js.map +7 -0
  436. package/dist/tools/TaskOutputTool/TaskOutputTool.js +190 -0
  437. package/dist/tools/TaskOutputTool/TaskOutputTool.js.map +7 -0
  438. package/dist/tools/TaskOutputTool/prompt.js +15 -0
  439. package/dist/tools/TaskOutputTool/prompt.js.map +7 -0
  440. package/dist/tools/TaskTool/TaskTool.js +310 -104
  441. package/dist/tools/TaskTool/TaskTool.js.map +2 -2
  442. package/dist/tools/TaskTool/prompt.js.map +2 -2
  443. package/dist/tools/TodoWriteTool/TodoWriteTool.js +42 -77
  444. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +2 -2
  445. package/dist/tools/URLFetcherTool/URLFetcherTool.js +4 -1
  446. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
  447. package/dist/tools/URLFetcherTool/cache.js +55 -8
  448. package/dist/tools/URLFetcherTool/cache.js.map +2 -2
  449. package/dist/tools.js +31 -2
  450. package/dist/tools.js.map +2 -2
  451. package/dist/types/hooks.js +4 -0
  452. package/dist/types/hooks.js.map +2 -2
  453. package/dist/types/marketplace.js.map +2 -2
  454. package/dist/types/messageGroup.js +36 -0
  455. package/dist/types/messageGroup.js.map +7 -0
  456. package/dist/types/plugin.js.map +2 -2
  457. package/dist/types/thinking.js +1 -0
  458. package/dist/types/thinking.js.map +7 -0
  459. package/dist/utils/BackgroundShellManager.js +136 -39
  460. package/dist/utils/BackgroundShellManager.js.map +2 -2
  461. package/dist/utils/CircuitBreaker.js +242 -0
  462. package/dist/utils/CircuitBreaker.js.map +7 -0
  463. package/dist/utils/MessageBatchBuffer.js +102 -0
  464. package/dist/utils/MessageBatchBuffer.js.map +7 -0
  465. package/dist/utils/PersistentShell.js +151 -1
  466. package/dist/utils/PersistentShell.js.map +2 -2
  467. package/dist/utils/agentLoader.js +1 -23
  468. package/dist/utils/agentLoader.js.map +2 -2
  469. package/dist/utils/agentTranscripts.js +641 -0
  470. package/dist/utils/agentTranscripts.js.map +7 -0
  471. package/dist/utils/animationManager.js +213 -0
  472. package/dist/utils/animationManager.js.map +7 -0
  473. package/dist/utils/animationSync.js +110 -0
  474. package/dist/utils/animationSync.js.map +7 -0
  475. package/dist/utils/ask.js +2 -0
  476. package/dist/utils/ask.js.map +2 -2
  477. package/dist/utils/asyncFile.js +215 -0
  478. package/dist/utils/asyncFile.js.map +7 -0
  479. package/dist/utils/backgroundAgentManager.js +231 -0
  480. package/dist/utils/backgroundAgentManager.js.map +7 -0
  481. package/dist/utils/config.js +108 -10
  482. package/dist/utils/config.js.map +2 -2
  483. package/dist/utils/conversationRecovery.js +19 -0
  484. package/dist/utils/conversationRecovery.js.map +2 -2
  485. package/dist/utils/credentials/CredentialStore.js +1 -0
  486. package/dist/utils/credentials/CredentialStore.js.map +7 -0
  487. package/dist/utils/credentials/EncryptedFileStore.js +157 -0
  488. package/dist/utils/credentials/EncryptedFileStore.js.map +7 -0
  489. package/dist/utils/credentials/index.js +37 -0
  490. package/dist/utils/credentials/index.js.map +7 -0
  491. package/dist/utils/credentials/migration.js +82 -0
  492. package/dist/utils/credentials/migration.js.map +7 -0
  493. package/dist/utils/exit.js +73 -0
  494. package/dist/utils/exit.js.map +7 -0
  495. package/dist/utils/format.js +73 -5
  496. package/dist/utils/format.js.map +2 -2
  497. package/dist/utils/generators.js +76 -6
  498. package/dist/utils/generators.js.map +2 -2
  499. package/dist/utils/globalErrorHandler.js +149 -0
  500. package/dist/utils/globalErrorHandler.js.map +7 -0
  501. package/dist/utils/groupHandlers/index.js +8 -0
  502. package/dist/utils/groupHandlers/index.js.map +7 -0
  503. package/dist/utils/groupHandlers/parallelTasksHandler.js +140 -0
  504. package/dist/utils/groupHandlers/parallelTasksHandler.js.map +7 -0
  505. package/dist/utils/groupHandlers/taskHandler.js +104 -0
  506. package/dist/utils/groupHandlers/taskHandler.js.map +7 -0
  507. package/dist/utils/groupHandlers/types.js +1 -0
  508. package/dist/utils/groupHandlers/types.js.map +7 -0
  509. package/dist/utils/logRotation.js +224 -0
  510. package/dist/utils/logRotation.js.map +7 -0
  511. package/dist/utils/markdown.js +13 -1
  512. package/dist/utils/markdown.js.map +2 -2
  513. package/dist/utils/marketplaceManager.js +3 -5
  514. package/dist/utils/marketplaceManager.js.map +2 -2
  515. package/dist/utils/memSafety.js +264 -0
  516. package/dist/utils/memSafety.js.map +7 -0
  517. package/dist/utils/messageGroupManager.js +274 -0
  518. package/dist/utils/messageGroupManager.js.map +7 -0
  519. package/dist/utils/messages.js +13 -4
  520. package/dist/utils/messages.js.map +2 -2
  521. package/dist/utils/model.js +119 -15
  522. package/dist/utils/model.js.map +3 -3
  523. package/dist/utils/permissions/filesystem.js +162 -6
  524. package/dist/utils/permissions/filesystem.js.map +2 -2
  525. package/dist/utils/plan/planMode.js +143 -0
  526. package/dist/utils/plan/planMode.js.map +7 -0
  527. package/dist/utils/pluginLoader.js +17 -21
  528. package/dist/utils/pluginLoader.js.map +2 -2
  529. package/dist/utils/ripgrep.js +55 -2
  530. package/dist/utils/ripgrep.js.map +2 -2
  531. package/dist/utils/safePath.js +132 -0
  532. package/dist/utils/safePath.js.map +7 -0
  533. package/dist/utils/sanitizeInput.js +32 -0
  534. package/dist/utils/sanitizeInput.js.map +7 -0
  535. package/dist/utils/secureKeyStorage.js +312 -0
  536. package/dist/utils/secureKeyStorage.js.map +7 -0
  537. package/dist/utils/sensitiveFiles.js +125 -0
  538. package/dist/utils/sensitiveFiles.js.map +7 -0
  539. package/dist/utils/session/sessionPlugins.js +67 -0
  540. package/dist/utils/session/sessionPlugins.js.map +7 -0
  541. package/dist/utils/taskDisplayUtils.js +257 -0
  542. package/dist/utils/taskDisplayUtils.js.map +7 -0
  543. package/dist/utils/teamConfig.js +2 -1
  544. package/dist/utils/teamConfig.js.map +2 -2
  545. package/dist/utils/theme.js +6 -6
  546. package/dist/utils/theme.js.map +1 -1
  547. package/dist/utils/todoStorage.js +92 -2
  548. package/dist/utils/todoStorage.js.map +2 -2
  549. package/dist/utils/toolRiskClassification.js +207 -0
  550. package/dist/utils/toolRiskClassification.js.map +7 -0
  551. package/dist/utils/toolTimeout.js +136 -0
  552. package/dist/utils/toolTimeout.js.map +7 -0
  553. package/dist/utils/tooling/safeRender.js +116 -0
  554. package/dist/utils/tooling/safeRender.js.map +7 -0
  555. package/dist/utils/userFriendlyError.js +346 -0
  556. package/dist/utils/userFriendlyError.js.map +7 -0
  557. package/dist/utils/vendor/ripgrep/arm64-darwin/rg +0 -0
  558. package/dist/version.js +2 -2
  559. package/dist/version.js.map +1 -1
  560. package/package.json +17 -5
  561. package/scripts/postinstall.js +128 -38
  562. package/dist/commands/agents.js +0 -2086
  563. package/dist/commands/agents.js.map +0 -7
  564. package/dist/commands/build.js +0 -74
  565. package/dist/commands/build.js.map +0 -7
  566. package/dist/commands/compression.js +0 -57
  567. package/dist/commands/compression.js.map +0 -7
  568. package/dist/commands/listen.js +0 -37
  569. package/dist/commands/listen.js.map +0 -7
  570. package/dist/commands/login.js +0 -37
  571. package/dist/commands/login.js.map +0 -7
  572. package/dist/commands/logout.js +0 -33
  573. package/dist/commands/logout.js.map +0 -7
  574. package/dist/commands/mcp.js +0 -40
  575. package/dist/commands/mcp.js.map +0 -7
  576. package/dist/commands/mcp_refresh.js +0 -40
  577. package/dist/commands/mcp_refresh.js.map +0 -7
  578. package/dist/commands/modelstatus.js +0 -21
  579. package/dist/commands/modelstatus.js.map +0 -7
  580. package/dist/commands/onboarding.js +0 -36
  581. package/dist/commands/onboarding.js.map +0 -7
  582. package/dist/commands/plugin-interactive.js +0 -446
  583. package/dist/commands/plugin-interactive.js.map +0 -7
  584. package/dist/commands/pr_comments.js +0 -61
  585. package/dist/commands/pr_comments.js.map +0 -7
  586. package/dist/commands/release-notes.js +0 -30
  587. package/dist/commands/release-notes.js.map +0 -7
  588. package/dist/commands/review.js +0 -51
  589. package/dist/commands/review.js.map +0 -7
  590. package/dist/components/Bug.js +0 -147
  591. package/dist/components/Bug.js.map +0 -7
  592. package/dist/components/ModelSelector.js +0 -2062
  593. package/dist/components/ModelSelector.js.map +0 -7
  594. package/dist/components/ModelStatusDisplay.js +0 -87
  595. package/dist/components/ModelStatusDisplay.js.map +0 -7
  596. package/dist/entrypoints/cli-wrapper.js +0 -61
  597. package/dist/entrypoints/cli-wrapper.js.map +0 -7
  598. package/dist/hooks/useCancelRequest.js +0 -28
  599. package/dist/hooks/useCancelRequest.js.map +0 -7
  600. package/dist/screens/Doctor.js +0 -22
  601. package/dist/screens/Doctor.js.map +0 -7
@@ -0,0 +1,556 @@
1
+ import { existsSync, readFileSync, mkdirSync, writeFileSync, rmSync } from "fs";
2
+ import { join, resolve, isAbsolute } from "path";
3
+ import { homedir } from "os";
4
+ import { z } from "zod";
5
+ import { execFileNoThrow } from "../../utils/execFileNoThrow.js";
6
+ import { getCwd } from "../../utils/state.js";
7
+ const PluginEntrySchema = z.object({
8
+ name: z.string().min(1),
9
+ description: z.string().optional(),
10
+ source: z.string().optional().default("./"),
11
+ strict: z.boolean().optional(),
12
+ skills: z.union([z.string(), z.array(z.string())]).optional(),
13
+ commands: z.union([z.string(), z.array(z.string())]).optional(),
14
+ agents: z.union([z.string(), z.array(z.string())]).optional(),
15
+ hooks: z.union([z.string(), z.array(z.string())]).optional(),
16
+ mcpServers: z.union([z.string(), z.array(z.string())]).optional()
17
+ });
18
+ const MarketplaceManifestSchema = z.object({
19
+ $schema: z.string().optional(),
20
+ name: z.string().min(1),
21
+ description: z.string().optional(),
22
+ owner: z.object({
23
+ name: z.string().optional(),
24
+ email: z.string().email().optional()
25
+ }).optional(),
26
+ metadata: z.record(z.unknown()).optional(),
27
+ plugins: z.array(PluginEntrySchema)
28
+ });
29
+ var MarketplaceErrorCode = /* @__PURE__ */ ((MarketplaceErrorCode2) => {
30
+ MarketplaceErrorCode2["MANIFEST_INVALID"] = "MANIFEST_INVALID";
31
+ MarketplaceErrorCode2["MANIFEST_NOT_FOUND"] = "MANIFEST_NOT_FOUND";
32
+ MarketplaceErrorCode2["NETWORK_ERROR"] = "NETWORK_ERROR";
33
+ MarketplaceErrorCode2["GIT_ERROR"] = "GIT_ERROR";
34
+ MarketplaceErrorCode2["NPM_ERROR"] = "NPM_ERROR";
35
+ MarketplaceErrorCode2["ALREADY_REGISTERED"] = "ALREADY_REGISTERED";
36
+ MarketplaceErrorCode2["NOT_REGISTERED"] = "NOT_REGISTERED";
37
+ MarketplaceErrorCode2["PLUGIN_NOT_FOUND"] = "PLUGIN_NOT_FOUND";
38
+ MarketplaceErrorCode2["INSTALLATION_FAILED"] = "INSTALLATION_FAILED";
39
+ return MarketplaceErrorCode2;
40
+ })(MarketplaceErrorCode || {});
41
+ class SkillMarketplaceError extends Error {
42
+ constructor(message, code, marketplaceName, details) {
43
+ super(message);
44
+ this.code = code;
45
+ this.marketplaceName = marketplaceName;
46
+ this.details = details;
47
+ this.name = "SkillMarketplaceError";
48
+ }
49
+ }
50
+ function getMarketplaceDir() {
51
+ const home = homedir();
52
+ const dir = join(home, ".minto", "marketplaces");
53
+ if (!existsSync(dir)) {
54
+ mkdirSync(dir, { recursive: true });
55
+ }
56
+ return dir;
57
+ }
58
+ function getInstalledPluginsDir(scope) {
59
+ const base = scope === "user" ? join(homedir(), ".minto", "plugins") : join(getCwd(), ".minto", "plugins");
60
+ if (!existsSync(base)) {
61
+ mkdirSync(base, { recursive: true });
62
+ }
63
+ return base;
64
+ }
65
+ function getRegistryPath() {
66
+ return join(getMarketplaceDir(), "registry.json");
67
+ }
68
+ function getInstalledSkillsPath() {
69
+ return join(getMarketplaceDir(), "installed-skills.json");
70
+ }
71
+ function loadRegistry() {
72
+ const registryPath = getRegistryPath();
73
+ if (!existsSync(registryPath)) {
74
+ return [];
75
+ }
76
+ try {
77
+ const content = readFileSync(registryPath, "utf-8");
78
+ return JSON.parse(content);
79
+ } catch {
80
+ return [];
81
+ }
82
+ }
83
+ function saveRegistry(marketplaces) {
84
+ const registryPath = getRegistryPath();
85
+ writeFileSync(registryPath, JSON.stringify(marketplaces, null, 2), "utf-8");
86
+ }
87
+ function loadInstalledSkills() {
88
+ const path = getInstalledSkillsPath();
89
+ if (!existsSync(path)) {
90
+ return [];
91
+ }
92
+ try {
93
+ const content = readFileSync(path, "utf-8");
94
+ return JSON.parse(content);
95
+ } catch {
96
+ return [];
97
+ }
98
+ }
99
+ function saveInstalledSkills(skills) {
100
+ const path = getInstalledSkillsPath();
101
+ writeFileSync(path, JSON.stringify(skills, null, 2), "utf-8");
102
+ }
103
+ function parseMarketplaceSource(input) {
104
+ if (/^[\w-]+\/[\w-]+$/.test(input)) {
105
+ return { source: "github", repo: input };
106
+ }
107
+ if (input.includes("github.com")) {
108
+ const match = input.match(/github\.com[/:]([\w-]+\/[\w-]+)/);
109
+ if (match) {
110
+ return { source: "github", repo: match[1] };
111
+ }
112
+ }
113
+ if (input.startsWith("@") || input.startsWith("npm:") && !input.includes("/")) {
114
+ const pkg = input.replace(/^npm:/, "");
115
+ return { source: "npm", package: pkg };
116
+ }
117
+ if (input.startsWith("git://") || input.startsWith("http") && input.endsWith(".git")) {
118
+ return { source: "git", url: input };
119
+ }
120
+ if (input.startsWith("http://") || input.startsWith("https://")) {
121
+ return { source: "url", url: input };
122
+ }
123
+ if (input.startsWith("./") || input.startsWith("../")) {
124
+ return { source: "file", path: input };
125
+ }
126
+ if (input.startsWith("/") || input.startsWith("~")) {
127
+ return { source: "directory", path: input };
128
+ }
129
+ return { source: "directory", path: input };
130
+ }
131
+ async function fetchGitHubMarketplace(repo, ref, path) {
132
+ const url = `https://github.com/${repo}.git`;
133
+ const tempDir = await cloneGitRepo(url, ref);
134
+ try {
135
+ const manifestPath = path ? join(tempDir, path, ".minto-plugin", "marketplace.json") : join(tempDir, ".minto-plugin", "marketplace.json");
136
+ return loadManifestFromPath(manifestPath);
137
+ } finally {
138
+ try {
139
+ rmSync(tempDir, { recursive: true, force: true });
140
+ } catch {
141
+ }
142
+ }
143
+ }
144
+ async function fetchGitMarketplace(url, ref, path) {
145
+ const tempDir = await cloneGitRepo(url, ref);
146
+ try {
147
+ const manifestPath = path ? join(tempDir, path, ".minto-plugin", "marketplace.json") : join(tempDir, ".minto-plugin", "marketplace.json");
148
+ return loadManifestFromPath(manifestPath);
149
+ } finally {
150
+ try {
151
+ rmSync(tempDir, { recursive: true, force: true });
152
+ } catch {
153
+ }
154
+ }
155
+ }
156
+ async function fetchUrlMarketplace(url, headers) {
157
+ try {
158
+ const response = await fetch(url, { headers });
159
+ if (!response.ok) {
160
+ throw new SkillMarketplaceError(
161
+ `HTTP ${response.status}: ${response.statusText}`,
162
+ "NETWORK_ERROR" /* NETWORK_ERROR */
163
+ );
164
+ }
165
+ const data = await response.json();
166
+ const parsed = MarketplaceManifestSchema.safeParse(data);
167
+ if (!parsed.success) {
168
+ throw new SkillMarketplaceError(
169
+ `Invalid manifest: ${parsed.error.message}`,
170
+ "MANIFEST_INVALID" /* MANIFEST_INVALID */
171
+ );
172
+ }
173
+ return parsed.data;
174
+ } catch (error) {
175
+ if (error instanceof SkillMarketplaceError) throw error;
176
+ throw new SkillMarketplaceError(
177
+ `Failed to fetch manifest from URL: ${error instanceof Error ? error.message : String(error)}`,
178
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
179
+ void 0,
180
+ error
181
+ );
182
+ }
183
+ }
184
+ async function fetchNpmMarketplace(packageName, version) {
185
+ const tempDir = join(getMarketplaceDir(), "temp", Date.now().toString());
186
+ mkdirSync(tempDir, { recursive: true });
187
+ try {
188
+ const pkgSpec = version ? `${packageName}@${version}` : packageName;
189
+ const result = await execFileNoThrow("npm", [
190
+ "pack",
191
+ pkgSpec,
192
+ "--pack-destination",
193
+ tempDir
194
+ ]);
195
+ if (result.code !== 0) {
196
+ throw new SkillMarketplaceError(
197
+ `NPM pack failed: ${result.stderr || result.stdout}`,
198
+ "NPM_ERROR" /* NPM_ERROR */
199
+ );
200
+ }
201
+ const tarballName = result.stdout.trim().split("\n").pop() || "";
202
+ const tarballPath = join(tempDir, tarballName);
203
+ const extractResult = await execFileNoThrow("tar", [
204
+ "-xzf",
205
+ tarballPath,
206
+ "-C",
207
+ tempDir
208
+ ]);
209
+ if (extractResult.code !== 0) {
210
+ throw new SkillMarketplaceError(
211
+ `Failed to extract NPM package: ${extractResult.stderr}`,
212
+ "NPM_ERROR" /* NPM_ERROR */
213
+ );
214
+ }
215
+ const manifestPath = join(
216
+ tempDir,
217
+ "package",
218
+ ".minto-plugin",
219
+ "marketplace.json"
220
+ );
221
+ return loadManifestFromPath(manifestPath);
222
+ } finally {
223
+ try {
224
+ rmSync(tempDir, { recursive: true, force: true });
225
+ } catch {
226
+ }
227
+ }
228
+ }
229
+ function fetchFileMarketplace(filePath) {
230
+ const resolvedPath = isAbsolute(filePath) ? filePath : resolve(getCwd(), filePath);
231
+ return loadManifestFromPath(resolvedPath);
232
+ }
233
+ function fetchDirectoryMarketplace(dirPath) {
234
+ let resolvedPath = dirPath;
235
+ if (dirPath.startsWith("~")) {
236
+ resolvedPath = join(homedir(), dirPath.slice(1));
237
+ } else if (!isAbsolute(dirPath)) {
238
+ resolvedPath = resolve(getCwd(), dirPath);
239
+ }
240
+ const manifestPath = join(resolvedPath, ".minto-plugin", "marketplace.json");
241
+ return loadManifestFromPath(manifestPath);
242
+ }
243
+ function loadManifestFromPath(manifestPath) {
244
+ if (!existsSync(manifestPath)) {
245
+ throw new SkillMarketplaceError(
246
+ `Marketplace manifest not found at ${manifestPath}`,
247
+ "MANIFEST_NOT_FOUND" /* MANIFEST_NOT_FOUND */
248
+ );
249
+ }
250
+ try {
251
+ const content = readFileSync(manifestPath, "utf-8");
252
+ const data = JSON.parse(content);
253
+ const parsed = MarketplaceManifestSchema.safeParse(data);
254
+ if (!parsed.success) {
255
+ throw new SkillMarketplaceError(
256
+ `Invalid manifest: ${parsed.error.message}`,
257
+ "MANIFEST_INVALID" /* MANIFEST_INVALID */
258
+ );
259
+ }
260
+ return parsed.data;
261
+ } catch (error) {
262
+ if (error instanceof SkillMarketplaceError) throw error;
263
+ throw new SkillMarketplaceError(
264
+ `Failed to load manifest: ${error instanceof Error ? error.message : String(error)}`,
265
+ "MANIFEST_INVALID" /* MANIFEST_INVALID */,
266
+ void 0,
267
+ error
268
+ );
269
+ }
270
+ }
271
+ async function cloneGitRepo(url, ref) {
272
+ const tempDir = join(getMarketplaceDir(), "temp", Date.now().toString());
273
+ mkdirSync(tempDir, { recursive: true });
274
+ try {
275
+ const args = ["clone", "--depth", "1"];
276
+ if (ref) {
277
+ args.push("--branch", ref);
278
+ }
279
+ args.push(url, tempDir);
280
+ const result = await execFileNoThrow("git", args);
281
+ if (result.code !== 0) {
282
+ throw new SkillMarketplaceError(
283
+ `Git clone failed: ${result.stderr || result.stdout}`,
284
+ "GIT_ERROR" /* GIT_ERROR */
285
+ );
286
+ }
287
+ return tempDir;
288
+ } catch (error) {
289
+ try {
290
+ rmSync(tempDir, { recursive: true, force: true });
291
+ } catch {
292
+ }
293
+ if (error instanceof SkillMarketplaceError) throw error;
294
+ throw new SkillMarketplaceError(
295
+ `Git clone failed: ${error instanceof Error ? error.message : String(error)}`,
296
+ "GIT_ERROR" /* GIT_ERROR */,
297
+ void 0,
298
+ error
299
+ );
300
+ }
301
+ }
302
+ async function fetchMarketplaceManifest(source) {
303
+ switch (source.source) {
304
+ case "github":
305
+ return fetchGitHubMarketplace(source.repo, source.ref, source.path);
306
+ case "git":
307
+ return fetchGitMarketplace(source.url, source.ref, source.path);
308
+ case "url":
309
+ return fetchUrlMarketplace(source.url, source.headers);
310
+ case "npm":
311
+ return fetchNpmMarketplace(source.package, source.version);
312
+ case "file":
313
+ return fetchFileMarketplace(source.path);
314
+ case "directory":
315
+ return fetchDirectoryMarketplace(source.path);
316
+ default:
317
+ throw new SkillMarketplaceError(
318
+ `Unknown source type: ${source.source}`,
319
+ "MANIFEST_INVALID" /* MANIFEST_INVALID */
320
+ );
321
+ }
322
+ }
323
+ async function addMarketplace(input) {
324
+ const source = typeof input === "string" ? parseMarketplaceSource(input) : input;
325
+ const manifest = await fetchMarketplaceManifest(source);
326
+ const registry = loadRegistry();
327
+ if (registry.some((m) => m.name === manifest.name)) {
328
+ throw new SkillMarketplaceError(
329
+ `Marketplace "${manifest.name}" is already registered`,
330
+ "ALREADY_REGISTERED" /* ALREADY_REGISTERED */,
331
+ manifest.name
332
+ );
333
+ }
334
+ const registered = {
335
+ name: manifest.name,
336
+ source,
337
+ manifest,
338
+ lastUpdated: /* @__PURE__ */ new Date(),
339
+ enabled: true
340
+ };
341
+ registry.push(registered);
342
+ saveRegistry(registry);
343
+ return registered;
344
+ }
345
+ function removeMarketplace(name) {
346
+ const registry = loadRegistry();
347
+ const filtered = registry.filter((m) => m.name !== name);
348
+ if (filtered.length === registry.length) {
349
+ throw new SkillMarketplaceError(
350
+ `Marketplace "${name}" is not registered`,
351
+ "NOT_REGISTERED" /* NOT_REGISTERED */,
352
+ name
353
+ );
354
+ }
355
+ saveRegistry(filtered);
356
+ }
357
+ async function updateMarketplace(name) {
358
+ const registry = loadRegistry();
359
+ const marketplace = registry.find((m) => m.name === name);
360
+ if (!marketplace) {
361
+ throw new SkillMarketplaceError(
362
+ `Marketplace "${name}" is not registered`,
363
+ "NOT_REGISTERED" /* NOT_REGISTERED */,
364
+ name
365
+ );
366
+ }
367
+ const manifest = await fetchMarketplaceManifest(marketplace.source);
368
+ marketplace.manifest = manifest;
369
+ marketplace.lastUpdated = /* @__PURE__ */ new Date();
370
+ saveRegistry(registry);
371
+ return marketplace;
372
+ }
373
+ function listMarketplaces() {
374
+ return loadRegistry();
375
+ }
376
+ function getMarketplace(name) {
377
+ return loadRegistry().find((m) => m.name === name);
378
+ }
379
+ function findPlugin(pluginName, marketplaceName) {
380
+ const registry = loadRegistry();
381
+ if (marketplaceName) {
382
+ const marketplace = registry.find((m) => m.name === marketplaceName);
383
+ if (!marketplace) return void 0;
384
+ const plugin = marketplace.manifest.plugins.find((p) => p.name === pluginName);
385
+ if (!plugin) return void 0;
386
+ return { marketplace, plugin };
387
+ }
388
+ for (const marketplace of registry) {
389
+ if (!marketplace.enabled) continue;
390
+ const plugin = marketplace.manifest.plugins.find((p) => p.name === pluginName);
391
+ if (plugin) {
392
+ return { marketplace, plugin };
393
+ }
394
+ }
395
+ return void 0;
396
+ }
397
+ async function installPlugin(pluginName, options = {}) {
398
+ const {
399
+ marketplace: marketplaceName,
400
+ scope = "user",
401
+ force = false
402
+ } = options;
403
+ const found = findPlugin(pluginName, marketplaceName);
404
+ if (!found) {
405
+ throw new SkillMarketplaceError(
406
+ marketplaceName ? `Plugin "${pluginName}" not found in marketplace "${marketplaceName}"` : `Plugin "${pluginName}" not found in any marketplace`,
407
+ "PLUGIN_NOT_FOUND" /* PLUGIN_NOT_FOUND */
408
+ );
409
+ }
410
+ const { marketplace, plugin } = found;
411
+ const installDir = join(getInstalledPluginsDir(scope), plugin.name);
412
+ if (existsSync(installDir) && !force) {
413
+ throw new SkillMarketplaceError(
414
+ `Plugin "${pluginName}" is already installed. Use --force to reinstall.`,
415
+ "ALREADY_REGISTERED" /* ALREADY_REGISTERED */,
416
+ pluginName
417
+ );
418
+ }
419
+ if (existsSync(installDir) && force) {
420
+ rmSync(installDir, { recursive: true, force: true });
421
+ }
422
+ mkdirSync(installDir, { recursive: true });
423
+ try {
424
+ const installed = loadInstalledSkills();
425
+ const record = {
426
+ plugin: plugin.name,
427
+ marketplace: marketplace.name,
428
+ scope,
429
+ isEnabled: true,
430
+ installedAt: (/* @__PURE__ */ new Date()).toISOString(),
431
+ pluginRoot: installDir,
432
+ skills: typeof plugin.skills === "string" ? [plugin.skills] : plugin.skills || [],
433
+ commands: typeof plugin.commands === "string" ? [plugin.commands] : plugin.commands || [],
434
+ sourceMarketplacePath: marketplace.source.source === "directory" ? marketplace.source.path : marketplace.name
435
+ };
436
+ const filtered = installed.filter(
437
+ (i) => !(i.plugin === plugin.name && i.scope === scope)
438
+ );
439
+ filtered.push(record);
440
+ saveInstalledSkills(filtered);
441
+ return installDir;
442
+ } catch (error) {
443
+ try {
444
+ rmSync(installDir, { recursive: true, force: true });
445
+ } catch {
446
+ }
447
+ throw new SkillMarketplaceError(
448
+ `Failed to install plugin: ${error instanceof Error ? error.message : String(error)}`,
449
+ "INSTALLATION_FAILED" /* INSTALLATION_FAILED */,
450
+ pluginName,
451
+ error
452
+ );
453
+ }
454
+ }
455
+ function uninstallPlugin(pluginName, scope = "user") {
456
+ const installed = loadInstalledSkills();
457
+ const record = installed.find(
458
+ (i) => i.plugin === pluginName && i.scope === scope
459
+ );
460
+ if (!record) {
461
+ throw new SkillMarketplaceError(
462
+ `Plugin "${pluginName}" is not installed in ${scope} scope`,
463
+ "PLUGIN_NOT_FOUND" /* PLUGIN_NOT_FOUND */,
464
+ pluginName
465
+ );
466
+ }
467
+ if (record.pluginRoot && existsSync(record.pluginRoot)) {
468
+ rmSync(record.pluginRoot, { recursive: true, force: true });
469
+ }
470
+ const filtered = installed.filter(
471
+ (i) => !(i.plugin === pluginName && i.scope === scope)
472
+ );
473
+ saveInstalledSkills(filtered);
474
+ }
475
+ function enablePlugin(pluginName, scope = "user") {
476
+ const installed = loadInstalledSkills();
477
+ const record = installed.find(
478
+ (i) => i.plugin === pluginName && i.scope === scope
479
+ );
480
+ if (!record) {
481
+ throw new SkillMarketplaceError(
482
+ `Plugin "${pluginName}" is not installed in ${scope} scope`,
483
+ "PLUGIN_NOT_FOUND" /* PLUGIN_NOT_FOUND */,
484
+ pluginName
485
+ );
486
+ }
487
+ record.isEnabled = true;
488
+ saveInstalledSkills(installed);
489
+ }
490
+ function disablePlugin(pluginName, scope = "user") {
491
+ const installed = loadInstalledSkills();
492
+ const record = installed.find(
493
+ (i) => i.plugin === pluginName && i.scope === scope
494
+ );
495
+ if (!record) {
496
+ throw new SkillMarketplaceError(
497
+ `Plugin "${pluginName}" is not installed in ${scope} scope`,
498
+ "PLUGIN_NOT_FOUND" /* PLUGIN_NOT_FOUND */,
499
+ pluginName
500
+ );
501
+ }
502
+ record.isEnabled = false;
503
+ saveInstalledSkills(installed);
504
+ }
505
+ function listInstalledPlugins(scope) {
506
+ const installed = loadInstalledSkills();
507
+ if (scope) {
508
+ return installed.filter((i) => i.scope === scope);
509
+ }
510
+ return installed;
511
+ }
512
+ function validateMarketplaceManifest(data) {
513
+ const result = MarketplaceManifestSchema.safeParse(data);
514
+ if (result.success) {
515
+ return { success: true, data: result.data };
516
+ }
517
+ return { success: false, error: result.error.message };
518
+ }
519
+ function validatePluginPath(path) {
520
+ const errors = [];
521
+ const resolvedPath = isAbsolute(path) ? path : resolve(getCwd(), path);
522
+ if (!existsSync(resolvedPath)) {
523
+ errors.push(`Path does not exist: ${resolvedPath}`);
524
+ return { isValid: false, errors };
525
+ }
526
+ const mintoManifest = join(resolvedPath, ".minto-plugin", "plugin.json");
527
+ const rootManifest = join(resolvedPath, "plugin.json");
528
+ if (!existsSync(mintoManifest) && !existsSync(rootManifest)) {
529
+ errors.push(
530
+ "No plugin manifest found. Expected .minto-plugin/plugin.json or plugin.json"
531
+ );
532
+ }
533
+ return { isValid: errors.length === 0, errors };
534
+ }
535
+ export {
536
+ MarketplaceErrorCode,
537
+ MarketplaceManifestSchema,
538
+ SkillMarketplaceError,
539
+ addMarketplace,
540
+ disablePlugin,
541
+ enablePlugin,
542
+ fetchMarketplaceManifest,
543
+ findPlugin,
544
+ getMarketplace,
545
+ installPlugin,
546
+ listInstalledPlugins,
547
+ listMarketplaces,
548
+ loadInstalledSkills,
549
+ parseMarketplaceSource,
550
+ removeMarketplace,
551
+ uninstallPlugin,
552
+ updateMarketplace,
553
+ validateMarketplaceManifest,
554
+ validatePluginPath
555
+ };
556
+ //# sourceMappingURL=skillMarketplace.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/services/plugins/skillMarketplace.ts"],
4
+ "sourcesContent": ["/**\n * Skill Marketplace Service\n *\n * Implements Claude Code CLI compatible marketplace functionality\n * for plugin/skill discovery and installation.\n *\n * Supports all Claude Code CLI source types:\n * - github: owner/repo format\n * - git: generic git URL\n * - url: HTTP/HTTPS URL to marketplace JSON\n * - npm: npm package name\n * - file: local file path\n * - directory: local directory path\n */\n\nimport { existsSync, readFileSync, mkdirSync, writeFileSync, rmSync } from 'fs'\nimport { join, resolve, isAbsolute } from 'path'\nimport { homedir } from 'os'\nimport { z } from 'zod'\nimport { execFileNoThrow } from '@utils/execFileNoThrow'\nimport { getCwd } from '@utils/state'\nimport type {\n SessionPlugin,\n PluginScope,\n InstalledSkillPlugin,\n} from '@minto-types/plugin'\n\n/**\n * Marketplace source types (Claude Code CLI compatible)\n */\nexport type MarketplaceSource =\n | { source: 'github'; repo: string; ref?: string; path?: string }\n | { source: 'git'; url: string; ref?: string; path?: string }\n | { source: 'url'; url: string; headers?: Record<string, string> }\n | { source: 'npm'; package: string; version?: string }\n | { source: 'file'; path: string }\n | { source: 'directory'; path: string }\n\n/**\n * Plugin entry schema in a marketplace manifest\n */\nconst PluginEntrySchema = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n source: z.string().optional().default('./'),\n strict: z.boolean().optional(),\n skills: z.union([z.string(), z.array(z.string())]).optional(),\n commands: z.union([z.string(), z.array(z.string())]).optional(),\n agents: z.union([z.string(), z.array(z.string())]).optional(),\n hooks: z.union([z.string(), z.array(z.string())]).optional(),\n mcpServers: z.union([z.string(), z.array(z.string())]).optional(),\n})\n\n/**\n * Plugin entry type (inferred from schema)\n */\nexport type PluginEntry = z.infer<typeof PluginEntrySchema>\n\n/**\n * Marketplace manifest schema (Claude Code CLI compatible)\n */\nexport const MarketplaceManifestSchema = z.object({\n $schema: z.string().optional(),\n name: z.string().min(1),\n description: z.string().optional(),\n owner: z\n .object({\n name: z.string().optional(),\n email: z.string().email().optional(),\n })\n .optional(),\n metadata: z.record(z.unknown()).optional(),\n plugins: z.array(PluginEntrySchema),\n})\n\nexport type MarketplaceManifest = z.infer<typeof MarketplaceManifestSchema>\n\n/**\n * Registered marketplace in user config\n */\nexport interface RegisteredMarketplace {\n name: string\n source: MarketplaceSource\n manifest: MarketplaceManifest\n lastUpdated: Date\n enabled: boolean\n}\n\n/**\n * Marketplace error codes\n */\nexport enum MarketplaceErrorCode {\n MANIFEST_INVALID = 'MANIFEST_INVALID',\n MANIFEST_NOT_FOUND = 'MANIFEST_NOT_FOUND',\n NETWORK_ERROR = 'NETWORK_ERROR',\n GIT_ERROR = 'GIT_ERROR',\n NPM_ERROR = 'NPM_ERROR',\n ALREADY_REGISTERED = 'ALREADY_REGISTERED',\n NOT_REGISTERED = 'NOT_REGISTERED',\n PLUGIN_NOT_FOUND = 'PLUGIN_NOT_FOUND',\n INSTALLATION_FAILED = 'INSTALLATION_FAILED',\n}\n\n/**\n * Marketplace error class\n */\nexport class SkillMarketplaceError extends Error {\n constructor(\n message: string,\n public code: MarketplaceErrorCode,\n public marketplaceName?: string,\n public details?: unknown,\n ) {\n super(message)\n this.name = 'SkillMarketplaceError'\n }\n}\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 installed plugins storage directory based on scope\n */\nfunction getInstalledPluginsDir(scope: PluginScope): string {\n const base =\n scope === 'user'\n ? join(homedir(), '.minto', 'plugins')\n : join(getCwd(), '.minto', 'plugins')\n\n if (!existsSync(base)) {\n mkdirSync(base, { recursive: true })\n }\n\n return base\n}\n\n/**\n * Get registry file path\n */\nfunction getRegistryPath(): string {\n return join(getMarketplaceDir(), 'registry.json')\n}\n\n/**\n * Get installed skills registry path\n */\nfunction getInstalledSkillsPath(): string {\n return join(getMarketplaceDir(), 'installed-skills.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 {\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 * Load installed skills registry\n */\nexport function loadInstalledSkills(): InstalledSkillPlugin[] {\n const path = getInstalledSkillsPath()\n\n if (!existsSync(path)) {\n return []\n }\n\n try {\n const content = readFileSync(path, 'utf-8')\n return JSON.parse(content)\n } catch {\n return []\n }\n}\n\n/**\n * Save installed skills registry\n */\nfunction saveInstalledSkills(skills: InstalledSkillPlugin[]): void {\n const path = getInstalledSkillsPath()\n writeFileSync(path, JSON.stringify(skills, null, 2), 'utf-8')\n}\n\n/**\n * Parse marketplace source from string\n */\nexport function parseMarketplaceSource(input: string): MarketplaceSource {\n // GitHub shorthand: owner/repo\n if (/^[\\w-]+\\/[\\w-]+$/.test(input)) {\n return { source: '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 { source: 'github', repo: match[1] }\n }\n }\n\n // NPM package (starts with @ or contains no slashes and not a URL)\n if (\n input.startsWith('@') ||\n (input.startsWith('npm:') && !input.includes('/'))\n ) {\n const pkg = input.replace(/^npm:/, '')\n return { source: 'npm', package: pkg }\n }\n\n // Git URL (http/https with .git or git://)\n if (\n input.startsWith('git://') ||\n (input.startsWith('http') && input.endsWith('.git'))\n ) {\n return { source: 'git', url: input }\n }\n\n // HTTP/HTTPS URL\n if (input.startsWith('http://') || input.startsWith('https://')) {\n return { source: 'url', url: input }\n }\n\n // File path (starts with .)\n if (input.startsWith('./') || input.startsWith('../')) {\n return { source: 'file', path: input }\n }\n\n // Directory (absolute path or relative)\n if (input.startsWith('/') || input.startsWith('~')) {\n return { source: 'directory', path: input }\n }\n\n // Default to directory\n return { source: 'directory', path: input }\n}\n\n/**\n * Fetch marketplace manifest from GitHub\n */\nasync function fetchGitHubMarketplace(\n repo: string,\n ref?: string,\n path?: string,\n): Promise<MarketplaceManifest> {\n const url = `https://github.com/${repo}.git`\n const tempDir = await cloneGitRepo(url, ref)\n\n try {\n const manifestPath = path\n ? join(tempDir, path, '.minto-plugin', 'marketplace.json')\n : join(tempDir, '.minto-plugin', 'marketplace.json')\n\n return loadManifestFromPath(manifestPath)\n } finally {\n // Clean up temp directory\n try {\n rmSync(tempDir, { recursive: true, force: true })\n } catch {\n // Ignore cleanup errors\n }\n }\n}\n\n/**\n * Fetch marketplace manifest from git URL\n */\nasync function fetchGitMarketplace(\n url: string,\n ref?: string,\n path?: string,\n): Promise<MarketplaceManifest> {\n const tempDir = await cloneGitRepo(url, ref)\n\n try {\n const manifestPath = path\n ? join(tempDir, path, '.minto-plugin', 'marketplace.json')\n : join(tempDir, '.minto-plugin', 'marketplace.json')\n\n return loadManifestFromPath(manifestPath)\n } finally {\n try {\n rmSync(tempDir, { recursive: true, force: true })\n } catch {\n // Ignore cleanup errors\n }\n }\n}\n\n/**\n * Fetch marketplace manifest from URL\n */\nasync function fetchUrlMarketplace(\n url: string,\n headers?: Record<string, string>,\n): Promise<MarketplaceManifest> {\n try {\n const response = await fetch(url, { headers })\n\n if (!response.ok) {\n throw new SkillMarketplaceError(\n `HTTP ${response.status}: ${response.statusText}`,\n MarketplaceErrorCode.NETWORK_ERROR,\n )\n }\n\n const data = await response.json()\n const parsed = MarketplaceManifestSchema.safeParse(data)\n\n if (!parsed.success) {\n throw new SkillMarketplaceError(\n `Invalid manifest: ${parsed.error.message}`,\n MarketplaceErrorCode.MANIFEST_INVALID,\n )\n }\n\n return parsed.data\n } catch (error) {\n if (error instanceof SkillMarketplaceError) throw error\n\n throw new SkillMarketplaceError(\n `Failed to fetch manifest from URL: ${error instanceof Error ? error.message : String(error)}`,\n MarketplaceErrorCode.NETWORK_ERROR,\n undefined,\n error,\n )\n }\n}\n\n/**\n * Fetch marketplace manifest from NPM\n */\nasync function fetchNpmMarketplace(\n packageName: string,\n version?: string,\n): Promise<MarketplaceManifest> {\n const tempDir = join(getMarketplaceDir(), 'temp', Date.now().toString())\n mkdirSync(tempDir, { recursive: true })\n\n try {\n const pkgSpec = version ? `${packageName}@${version}` : packageName\n const result = await execFileNoThrow('npm', [\n 'pack',\n pkgSpec,\n '--pack-destination',\n tempDir,\n ])\n\n if (result.code !== 0) {\n throw new SkillMarketplaceError(\n `NPM pack failed: ${result.stderr || result.stdout}`,\n MarketplaceErrorCode.NPM_ERROR,\n )\n }\n\n // Extract the tarball\n const tarballName = result.stdout.trim().split('\\n').pop() || ''\n const tarballPath = join(tempDir, tarballName)\n\n const extractResult = await execFileNoThrow('tar', [\n '-xzf',\n tarballPath,\n '-C',\n tempDir,\n ])\n if (extractResult.code !== 0) {\n throw new SkillMarketplaceError(\n `Failed to extract NPM package: ${extractResult.stderr}`,\n MarketplaceErrorCode.NPM_ERROR,\n )\n }\n\n // Look for marketplace manifest in package\n const manifestPath = join(\n tempDir,\n 'package',\n '.minto-plugin',\n 'marketplace.json',\n )\n return loadManifestFromPath(manifestPath)\n } finally {\n try {\n rmSync(tempDir, { recursive: true, force: true })\n } catch {\n // Ignore cleanup errors\n }\n }\n}\n\n/**\n * Load marketplace manifest from local file\n */\nfunction fetchFileMarketplace(filePath: string): MarketplaceManifest {\n const resolvedPath = isAbsolute(filePath)\n ? filePath\n : resolve(getCwd(), filePath)\n\n return loadManifestFromPath(resolvedPath)\n}\n\n/**\n * Load marketplace manifest from local directory\n */\nfunction fetchDirectoryMarketplace(dirPath: string): MarketplaceManifest {\n let resolvedPath = dirPath\n\n // Handle ~ expansion\n if (dirPath.startsWith('~')) {\n resolvedPath = join(homedir(), dirPath.slice(1))\n } else if (!isAbsolute(dirPath)) {\n resolvedPath = resolve(getCwd(), dirPath)\n }\n\n const manifestPath = join(resolvedPath, '.minto-plugin', 'marketplace.json')\n return loadManifestFromPath(manifestPath)\n}\n\n/**\n * Load manifest from file path\n */\nfunction loadManifestFromPath(manifestPath: string): MarketplaceManifest {\n if (!existsSync(manifestPath)) {\n throw new SkillMarketplaceError(\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 const parsed = MarketplaceManifestSchema.safeParse(data)\n\n if (!parsed.success) {\n throw new SkillMarketplaceError(\n `Invalid manifest: ${parsed.error.message}`,\n MarketplaceErrorCode.MANIFEST_INVALID,\n )\n }\n\n return parsed.data\n } catch (error) {\n if (error instanceof SkillMarketplaceError) throw error\n\n throw new SkillMarketplaceError(\n `Failed to load manifest: ${error instanceof Error ? error.message : String(error)}`,\n MarketplaceErrorCode.MANIFEST_INVALID,\n undefined,\n error,\n )\n }\n}\n\n/**\n * Clone git repository\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 const args = ['clone', '--depth', '1']\n\n if (ref) {\n args.push('--branch', ref)\n }\n\n args.push(url, tempDir)\n\n const result = await execFileNoThrow('git', args)\n\n if (result.code !== 0) {\n throw new SkillMarketplaceError(\n `Git clone failed: ${result.stderr || result.stdout}`,\n MarketplaceErrorCode.GIT_ERROR,\n )\n }\n\n return tempDir\n } catch (error) {\n try {\n rmSync(tempDir, { recursive: true, force: true })\n } catch {\n // Ignore cleanup errors\n }\n\n if (error instanceof SkillMarketplaceError) throw error\n\n throw new SkillMarketplaceError(\n `Git clone failed: ${error instanceof Error ? error.message : String(error)}`,\n MarketplaceErrorCode.GIT_ERROR,\n undefined,\n error,\n )\n }\n}\n\n/**\n * Fetch marketplace manifest based on source type\n */\nexport async function fetchMarketplaceManifest(\n source: MarketplaceSource,\n): Promise<MarketplaceManifest> {\n switch (source.source) {\n case 'github':\n return fetchGitHubMarketplace(source.repo, source.ref, source.path)\n case 'git':\n return fetchGitMarketplace(source.url, source.ref, source.path)\n case 'url':\n return fetchUrlMarketplace(source.url, source.headers)\n case 'npm':\n return fetchNpmMarketplace(source.package, source.version)\n case 'file':\n return fetchFileMarketplace(source.path)\n case 'directory':\n return fetchDirectoryMarketplace(source.path)\n default:\n throw new SkillMarketplaceError(\n `Unknown source type: ${(source as any).source}`,\n MarketplaceErrorCode.MANIFEST_INVALID,\n )\n }\n}\n\n/**\n * Add/register a marketplace\n */\nexport async function addMarketplace(\n input: string | MarketplaceSource,\n): Promise<RegisteredMarketplace> {\n const source =\n typeof input === 'string' ? parseMarketplaceSource(input) : input\n\n const manifest = await fetchMarketplaceManifest(source)\n\n // Check if already registered\n const registry = loadRegistry()\n if (registry.some(m => m.name === manifest.name)) {\n throw new SkillMarketplaceError(\n `Marketplace \"${manifest.name}\" is already registered`,\n MarketplaceErrorCode.ALREADY_REGISTERED,\n manifest.name,\n )\n }\n\n const registered: RegisteredMarketplace = {\n name: manifest.name,\n source,\n manifest,\n lastUpdated: new Date(),\n enabled: true,\n }\n\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 SkillMarketplaceError(\n `Marketplace \"${name}\" is not registered`,\n MarketplaceErrorCode.NOT_REGISTERED,\n name,\n )\n }\n\n saveRegistry(filtered)\n}\n\n/**\n * Update marketplace manifest\n */\nexport async function updateMarketplace(\n name: string,\n): Promise<RegisteredMarketplace> {\n const registry = loadRegistry()\n const marketplace = registry.find(m => m.name === name)\n\n if (!marketplace) {\n throw new SkillMarketplaceError(\n `Marketplace \"${name}\" is not registered`,\n MarketplaceErrorCode.NOT_REGISTERED,\n name,\n )\n }\n\n const manifest = await fetchMarketplaceManifest(marketplace.source)\n\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(\n name: string,\n): RegisteredMarketplace | undefined {\n return loadRegistry().find(m => m.name === name)\n}\n\n/**\n * Find plugin in marketplaces\n */\nexport function findPlugin(\n pluginName: string,\n marketplaceName?: string,\n): { marketplace: RegisteredMarketplace; plugin: PluginEntry } | undefined {\n const registry = loadRegistry()\n\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 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 * Install plugin from marketplace\n */\nexport async function installPlugin(\n pluginName: string,\n options: {\n marketplace?: string\n scope?: PluginScope\n force?: boolean\n } = {},\n): Promise<string> {\n const {\n marketplace: marketplaceName,\n scope = 'user',\n force = false,\n } = options\n\n const found = findPlugin(pluginName, marketplaceName)\n\n if (!found) {\n throw new SkillMarketplaceError(\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 const installDir = join(getInstalledPluginsDir(scope), plugin.name)\n\n // Check if already installed\n if (existsSync(installDir) && !force) {\n throw new SkillMarketplaceError(\n `Plugin \"${pluginName}\" is already installed. Use --force to reinstall.`,\n MarketplaceErrorCode.ALREADY_REGISTERED,\n pluginName,\n )\n }\n\n // Remove existing if force\n if (existsSync(installDir) && force) {\n rmSync(installDir, { recursive: true, force: true })\n }\n\n // Create installation directory\n mkdirSync(installDir, { recursive: true })\n\n try {\n // Install based on marketplace source type and plugin source\n // For now, we'll use the marketplace manager's implementation\n // This will be enhanced in future iterations\n\n // Record installation\n const installed = loadInstalledSkills()\n const record: InstalledSkillPlugin = {\n plugin: plugin.name,\n marketplace: marketplace.name,\n scope,\n isEnabled: true,\n installedAt: new Date().toISOString(),\n pluginRoot: installDir,\n skills:\n typeof plugin.skills === 'string'\n ? [plugin.skills]\n : plugin.skills || [],\n commands:\n typeof plugin.commands === 'string'\n ? [plugin.commands]\n : plugin.commands || [],\n sourceMarketplacePath:\n marketplace.source.source === 'directory'\n ? (marketplace.source as { source: 'directory'; path: string }).path\n : marketplace.name,\n }\n\n // Remove existing record if present\n const filtered = installed.filter(\n i => !(i.plugin === plugin.name && i.scope === scope),\n )\n filtered.push(record)\n saveInstalledSkills(filtered)\n\n return installDir\n } catch (error) {\n // Clean up on failure\n try {\n rmSync(installDir, { recursive: true, force: true })\n } catch {\n // Ignore cleanup errors\n }\n\n throw new SkillMarketplaceError(\n `Failed to install plugin: ${error instanceof Error ? error.message : String(error)}`,\n MarketplaceErrorCode.INSTALLATION_FAILED,\n pluginName,\n error,\n )\n }\n}\n\n/**\n * Uninstall plugin\n */\nexport function uninstallPlugin(\n pluginName: string,\n scope: PluginScope = 'user',\n): void {\n const installed = loadInstalledSkills()\n const record = installed.find(\n i => i.plugin === pluginName && i.scope === scope,\n )\n\n if (!record) {\n throw new SkillMarketplaceError(\n `Plugin \"${pluginName}\" is not installed in ${scope} scope`,\n MarketplaceErrorCode.PLUGIN_NOT_FOUND,\n pluginName,\n )\n }\n\n // Remove plugin directory\n if (record.pluginRoot && existsSync(record.pluginRoot)) {\n rmSync(record.pluginRoot, { recursive: true, force: true })\n }\n\n // Update registry\n const filtered = installed.filter(\n i => !(i.plugin === pluginName && i.scope === scope),\n )\n saveInstalledSkills(filtered)\n}\n\n/**\n * Enable plugin\n */\nexport function enablePlugin(\n pluginName: string,\n scope: PluginScope = 'user',\n): void {\n const installed = loadInstalledSkills()\n const record = installed.find(\n i => i.plugin === pluginName && i.scope === scope,\n )\n\n if (!record) {\n throw new SkillMarketplaceError(\n `Plugin \"${pluginName}\" is not installed in ${scope} scope`,\n MarketplaceErrorCode.PLUGIN_NOT_FOUND,\n pluginName,\n )\n }\n\n record.isEnabled = true\n saveInstalledSkills(installed)\n}\n\n/**\n * Disable plugin\n */\nexport function disablePlugin(\n pluginName: string,\n scope: PluginScope = 'user',\n): void {\n const installed = loadInstalledSkills()\n const record = installed.find(\n i => i.plugin === pluginName && i.scope === scope,\n )\n\n if (!record) {\n throw new SkillMarketplaceError(\n `Plugin \"${pluginName}\" is not installed in ${scope} scope`,\n MarketplaceErrorCode.PLUGIN_NOT_FOUND,\n pluginName,\n )\n }\n\n record.isEnabled = false\n saveInstalledSkills(installed)\n}\n\n/**\n * List installed plugins\n */\nexport function listInstalledPlugins(\n scope?: PluginScope,\n): InstalledSkillPlugin[] {\n const installed = loadInstalledSkills()\n\n if (scope) {\n return installed.filter(i => i.scope === scope)\n }\n\n return installed\n}\n\n/**\n * Validate marketplace manifest\n */\nexport function validateMarketplaceManifest(data: unknown): {\n success: boolean\n data?: MarketplaceManifest\n error?: string\n} {\n const result = MarketplaceManifestSchema.safeParse(data)\n\n if (result.success) {\n return { success: true, data: result.data }\n }\n\n return { success: false, error: result.error.message }\n}\n\n/**\n * Validate plugin path (used for local validation)\n */\nexport function validatePluginPath(path: string): {\n isValid: boolean\n errors: string[]\n} {\n const errors: string[] = []\n\n const resolvedPath = isAbsolute(path) ? path : resolve(getCwd(), path)\n\n if (!existsSync(resolvedPath)) {\n errors.push(`Path does not exist: ${resolvedPath}`)\n return { isValid: false, errors }\n }\n\n // Check for plugin manifest\n const mintoManifest = join(resolvedPath, '.minto-plugin', 'plugin.json')\n const rootManifest = join(resolvedPath, 'plugin.json')\n\n if (!existsSync(mintoManifest) && !existsSync(rootManifest)) {\n errors.push(\n 'No plugin manifest found. Expected .minto-plugin/plugin.json or plugin.json',\n )\n }\n\n return { isValid: errors.length === 0, errors }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["MarketplaceErrorCode"]
7
+ }