@within-7/minto 0.3.6 → 0.3.10

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 (238) hide show
  1. package/{cli.js → cli.cjs} +25 -23
  2. package/dist/commands/agents/AgentsCommand.js +459 -655
  3. package/dist/commands/agents/AgentsCommand.js.map +2 -2
  4. package/dist/commands/agents/types.js +1 -0
  5. package/dist/commands/agents/types.js.map +2 -2
  6. package/dist/commands/agents/utils/fileOperations.js +96 -36
  7. package/dist/commands/agents/utils/fileOperations.js.map +3 -3
  8. package/dist/commands/agents/utils/index.js +3 -1
  9. package/dist/commands/agents/utils/index.js.map +2 -2
  10. package/dist/commands/context.js +54 -23
  11. package/dist/commands/context.js.map +2 -2
  12. package/dist/commands/export.js +673 -93
  13. package/dist/commands/export.js.map +2 -2
  14. package/dist/commands/language.js +110 -0
  15. package/dist/commands/language.js.map +7 -0
  16. package/dist/commands/mcp-interactive.js +419 -217
  17. package/dist/commands/mcp-interactive.js.map +2 -2
  18. package/dist/commands/model.js +415 -66
  19. package/dist/commands/model.js.map +2 -2
  20. package/dist/commands/new.js +56 -0
  21. package/dist/commands/new.js.map +7 -0
  22. package/dist/commands/permissions.js +75 -49
  23. package/dist/commands/permissions.js.map +2 -2
  24. package/dist/commands/plugin.js +882 -185
  25. package/dist/commands/plugin.js.map +3 -3
  26. package/dist/commands/resume.js +251 -16
  27. package/dist/commands/resume.js.map +2 -2
  28. package/dist/commands/sandbox.js +168 -70
  29. package/dist/commands/sandbox.js.map +2 -2
  30. package/dist/commands/sessions.js +224 -0
  31. package/dist/commands/sessions.js.map +7 -0
  32. package/dist/commands/setup.js +596 -109
  33. package/dist/commands/setup.js.map +2 -2
  34. package/dist/commands/stats.js +292 -0
  35. package/dist/commands/stats.js.map +7 -0
  36. package/dist/commands/status.js +75 -7
  37. package/dist/commands/status.js.map +2 -2
  38. package/dist/commands/undo.js +154 -180
  39. package/dist/commands/undo.js.map +2 -2
  40. package/dist/commands.js +6 -0
  41. package/dist/commands.js.map +2 -2
  42. package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js +3 -2
  43. package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js.map +2 -2
  44. package/dist/components/Config.js +9 -8
  45. package/dist/components/Config.js.map +2 -2
  46. package/dist/components/HeaderBar.js +2 -1
  47. package/dist/components/HeaderBar.js.map +2 -2
  48. package/dist/components/Help.js +166 -32
  49. package/dist/components/Help.js.map +2 -2
  50. package/dist/components/HotkeyHelpPanel.js +46 -44
  51. package/dist/components/HotkeyHelpPanel.js.map +2 -2
  52. package/dist/components/InfoPanel/InfoPanel.js +123 -0
  53. package/dist/components/InfoPanel/InfoPanel.js.map +7 -0
  54. package/dist/components/InfoPanel/index.js +5 -0
  55. package/dist/components/InfoPanel/index.js.map +7 -0
  56. package/dist/components/InfoPanel/types.js +1 -0
  57. package/dist/components/InfoPanel/types.js.map +7 -0
  58. package/dist/components/Logo.js +5 -2
  59. package/dist/components/Logo.js.map +2 -2
  60. package/dist/components/MCPServerApprovalDialog.js +6 -5
  61. package/dist/components/MCPServerApprovalDialog.js.map +2 -2
  62. package/dist/components/MCPServerMultiselectDialog.js +5 -4
  63. package/dist/components/MCPServerMultiselectDialog.js.map +2 -2
  64. package/dist/components/MessageSelector.js +4 -3
  65. package/dist/components/MessageSelector.js.map +2 -2
  66. package/dist/components/ModelConfig.js +13 -12
  67. package/dist/components/ModelConfig.js.map +2 -2
  68. package/dist/components/ModelListManager.js +4 -3
  69. package/dist/components/ModelListManager.js.map +2 -2
  70. package/dist/components/ModelSelector/BrandTextInput.js +43 -0
  71. package/dist/components/ModelSelector/BrandTextInput.js.map +7 -0
  72. package/dist/components/ModelSelector/ModelSelector.js +419 -501
  73. package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
  74. package/dist/components/ModelSelector/WizardContainer.js +45 -0
  75. package/dist/components/ModelSelector/WizardContainer.js.map +7 -0
  76. package/dist/components/ModelSelector/index.js +1 -3
  77. package/dist/components/ModelSelector/index.js.map +2 -2
  78. package/dist/components/PromptInput.js +77 -44
  79. package/dist/components/PromptInput.js.map +2 -2
  80. package/dist/components/SensitiveFileWarning.js +12 -8
  81. package/dist/components/SensitiveFileWarning.js.map +2 -2
  82. package/dist/components/SimpleSelector/SimpleSelector.js +154 -0
  83. package/dist/components/SimpleSelector/SimpleSelector.js.map +7 -0
  84. package/dist/components/SimpleSelector/index.js +5 -0
  85. package/dist/components/SimpleSelector/index.js.map +7 -0
  86. package/dist/components/SimpleSelector/types.js +1 -0
  87. package/dist/components/SimpleSelector/types.js.map +7 -0
  88. package/dist/components/StatusOverlayContent.js +21 -0
  89. package/dist/components/StatusOverlayContent.js.map +7 -0
  90. package/dist/components/TabbedListView/ScrollableList.js +117 -0
  91. package/dist/components/TabbedListView/ScrollableList.js.map +7 -0
  92. package/dist/components/TabbedListView/SearchInput.js +23 -0
  93. package/dist/components/TabbedListView/SearchInput.js.map +7 -0
  94. package/dist/components/TabbedListView/TabBar.js +20 -0
  95. package/dist/components/TabbedListView/TabBar.js.map +7 -0
  96. package/dist/components/TabbedListView/TabbedListView.js +246 -0
  97. package/dist/components/TabbedListView/TabbedListView.js.map +7 -0
  98. package/dist/components/TabbedListView/index.js +11 -0
  99. package/dist/components/TabbedListView/index.js.map +7 -0
  100. package/dist/components/TabbedListView/types.js +1 -0
  101. package/dist/components/TabbedListView/types.js.map +7 -0
  102. package/dist/components/TodoChangeBlock.js +6 -5
  103. package/dist/components/TodoChangeBlock.js.map +3 -3
  104. package/dist/components/TodoPanel.js +6 -3
  105. package/dist/components/TodoPanel.js.map +3 -3
  106. package/dist/components/TrustDialog.js +6 -5
  107. package/dist/components/TrustDialog.js.map +2 -2
  108. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +2 -1
  109. package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js.map +2 -2
  110. package/dist/constants/macros.js +1 -1
  111. package/dist/constants/macros.js.map +1 -1
  112. package/dist/constants/product.js +2 -2
  113. package/dist/constants/product.js.map +1 -1
  114. package/dist/constants/prompts.js +17 -0
  115. package/dist/constants/prompts.js.map +2 -2
  116. package/dist/constants/toolInputExamples.js +5 -1
  117. package/dist/constants/toolInputExamples.js.map +2 -2
  118. package/dist/core/backupHook.js +29 -0
  119. package/dist/core/backupHook.js.map +7 -0
  120. package/dist/core/config/defaults.js +8 -2
  121. package/dist/core/config/defaults.js.map +2 -2
  122. package/dist/core/config/schema.js +14 -2
  123. package/dist/core/config/schema.js.map +2 -2
  124. package/dist/core/costTracker.js +0 -16
  125. package/dist/core/costTracker.js.map +2 -2
  126. package/dist/core/tokenStatsManager.js +5 -0
  127. package/dist/core/tokenStatsManager.js.map +2 -2
  128. package/dist/cost-tracker.js +0 -16
  129. package/dist/cost-tracker.js.map +2 -2
  130. package/dist/entrypoints/bootstrap.js +56 -0
  131. package/dist/entrypoints/bootstrap.js.map +7 -0
  132. package/dist/entrypoints/cli.js +164 -23
  133. package/dist/entrypoints/cli.js.map +3 -3
  134. package/dist/history.js +75 -15
  135. package/dist/history.js.map +2 -2
  136. package/dist/i18n/index.js +2 -2
  137. package/dist/i18n/index.js.map +2 -2
  138. package/dist/i18n/locales/en.js +582 -1
  139. package/dist/i18n/locales/en.js.map +2 -2
  140. package/dist/i18n/locales/zh-CN.js +582 -1
  141. package/dist/i18n/locales/zh-CN.js.map +2 -2
  142. package/dist/i18n/types.js.map +1 -1
  143. package/dist/index.js +1 -1
  144. package/dist/index.js.map +2 -2
  145. package/dist/messages.js +11 -0
  146. package/dist/messages.js.map +2 -2
  147. package/dist/permissions.js.map +2 -2
  148. package/dist/query.js +9 -0
  149. package/dist/query.js.map +2 -2
  150. package/dist/screens/REPL.js +45 -7
  151. package/dist/screens/REPL.js.map +2 -2
  152. package/dist/services/customCommands.js +44 -16
  153. package/dist/services/customCommands.js.map +2 -2
  154. package/dist/services/plugins/lspServers.js +1 -1
  155. package/dist/services/plugins/lspServers.js.map +2 -2
  156. package/dist/services/plugins/pluginRuntime.js +2 -1
  157. package/dist/services/plugins/pluginRuntime.js.map +2 -2
  158. package/dist/services/plugins/pluginValidation.js +10 -3
  159. package/dist/services/plugins/pluginValidation.js.map +2 -2
  160. package/dist/services/plugins/skillMarketplace.js +16 -8
  161. package/dist/services/plugins/skillMarketplace.js.map +2 -2
  162. package/dist/services/systemReminder.js +17 -6
  163. package/dist/services/systemReminder.js.map +2 -2
  164. package/dist/tools/FileEditTool/FileEditTool.js +7 -0
  165. package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
  166. package/dist/tools/FileWriteTool/FileWriteTool.js +7 -0
  167. package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
  168. package/dist/tools/MultiEditTool/MultiEditTool.js +7 -0
  169. package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
  170. package/dist/tools/NotebookEditTool/NotebookEditTool.js +2 -0
  171. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
  172. package/dist/tools/TaskTool/TaskTool.js +179 -1
  173. package/dist/tools/TaskTool/TaskTool.js.map +2 -2
  174. package/dist/tools/TodoWriteTool/prompt.js +21 -0
  175. package/dist/tools/TodoWriteTool/prompt.js.map +2 -2
  176. package/dist/tools/URLFetcherTool/prompt.js +14 -9
  177. package/dist/tools/URLFetcherTool/prompt.js.map +2 -2
  178. package/dist/tools/WebSearchTool/prompt.js +12 -6
  179. package/dist/tools/WebSearchTool/prompt.js.map +2 -2
  180. package/dist/types/PermissionMode.js +30 -1
  181. package/dist/types/PermissionMode.js.map +2 -2
  182. package/dist/types/plugin.js +2 -4
  183. package/dist/types/plugin.js.map +2 -2
  184. package/dist/utils/agentHookExecutor.js +103 -0
  185. package/dist/utils/agentHookExecutor.js.map +7 -0
  186. package/dist/utils/agentLoader.js +272 -32
  187. package/dist/utils/agentLoader.js.map +2 -2
  188. package/dist/utils/agentMemory.js +134 -0
  189. package/dist/utils/agentMemory.js.map +7 -0
  190. package/dist/utils/claudeCodeSync.js +439 -0
  191. package/dist/utils/claudeCodeSync.js.map +7 -0
  192. package/dist/utils/config.js +52 -24
  193. package/dist/utils/config.js.map +2 -2
  194. package/dist/utils/configPaths.js +199 -0
  195. package/dist/utils/configPaths.js.map +7 -0
  196. package/dist/utils/execFileNoThrow.js +2 -1
  197. package/dist/utils/execFileNoThrow.js.map +2 -2
  198. package/dist/utils/historyManager.js +234 -0
  199. package/dist/utils/historyManager.js.map +7 -0
  200. package/dist/utils/marketplaceManager.js +80 -43
  201. package/dist/utils/marketplaceManager.js.map +2 -2
  202. package/dist/utils/messages.js +13 -8
  203. package/dist/utils/messages.js.map +2 -2
  204. package/dist/utils/migration/index.js +37 -0
  205. package/dist/utils/migration/index.js.map +7 -0
  206. package/dist/utils/migration/migrateHistory.js +273 -0
  207. package/dist/utils/migration/migrateHistory.js.map +7 -0
  208. package/dist/utils/migration/migrateTodos.js +323 -0
  209. package/dist/utils/migration/migrateTodos.js.map +7 -0
  210. package/dist/utils/pasteCache.js +309 -0
  211. package/dist/utils/pasteCache.js.map +7 -0
  212. package/dist/utils/pluginInstaller.js +34 -24
  213. package/dist/utils/pluginInstaller.js.map +2 -2
  214. package/dist/utils/pluginLoader.js +54 -28
  215. package/dist/utils/pluginLoader.js.map +2 -2
  216. package/dist/utils/repoFetcher.js +110 -0
  217. package/dist/utils/repoFetcher.js.map +7 -0
  218. package/dist/utils/sessionIndex.js +192 -0
  219. package/dist/utils/sessionIndex.js.map +7 -0
  220. package/dist/utils/sessionTracker.js +170 -0
  221. package/dist/utils/sessionTracker.js.map +7 -0
  222. package/dist/utils/skillLoader.js +103 -5
  223. package/dist/utils/skillLoader.js.map +2 -2
  224. package/dist/utils/stats.js +417 -0
  225. package/dist/utils/stats.js.map +7 -0
  226. package/dist/utils/stringSubstitution.js +106 -0
  227. package/dist/utils/stringSubstitution.js.map +7 -0
  228. package/dist/utils/teamConfig.js +156 -14
  229. package/dist/utils/teamConfig.js.map +2 -2
  230. package/dist/utils/terminal.js +1 -1
  231. package/dist/utils/terminal.js.map +2 -2
  232. package/dist/utils/todoStorage.js +51 -19
  233. package/dist/utils/todoStorage.js.map +2 -2
  234. package/dist/utils/tooling/safeRender.js.map +2 -2
  235. package/dist/version.js +2 -2
  236. package/dist/version.js.map +1 -1
  237. package/package.json +71 -28
  238. package/scripts/{postinstall.js → postinstall.cjs} +1 -1
@@ -1,33 +1,14 @@
1
1
  #!/usr/bin/env -S node --no-warnings=ExperimentalWarning --enable-source-maps
2
- process.env.DEV = "false";
3
- import { EventEmitter } from "events";
4
- EventEmitter.defaultMaxListeners = 20;
5
- import { fileURLToPath } from "node:url";
6
- import { dirname, join } from "node:path";
7
- import { existsSync } from "node:fs";
8
2
  import { initSentry } from "../services/sentry.js";
9
3
  import { PRODUCT_COMMAND, PRODUCT_NAME } from "../constants/product.js";
10
4
  import { initGlobalErrorHandlers } from "../utils/globalErrorHandler.js";
11
5
  initSentry();
12
6
  initGlobalErrorHandlers();
13
- try {
14
- if (!process.env.YOGA_WASM_PATH) {
15
- const __filename = fileURLToPath(import.meta.url);
16
- const __dirname = dirname(__filename);
17
- const devCandidate = join(__dirname, "../../yoga.wasm");
18
- const distCandidate = join(__dirname, "./yoga.wasm");
19
- const resolved = existsSync(distCandidate) ? distCandidate : existsSync(devCandidate) ? devCandidate : void 0;
20
- if (resolved) {
21
- process.env.YOGA_WASM_PATH = resolved;
22
- }
23
- }
24
- } catch {
25
- }
26
7
  import * as dontcare from "@anthropic-ai/sdk/shims/node";
27
8
  Object.keys(dontcare);
28
9
  import React from "react";
29
10
  import { ReadStream } from "tty";
30
- import { openSync } from "fs";
11
+ import { existsSync, openSync } from "fs";
31
12
  import { validateRawModeSupport, requireRawModeOrExit } from "../utils/ptyCompat.js";
32
13
  import { addToHistory } from "../history.js";
33
14
  import { getContext, setContext, removeContext } from "../context.js";
@@ -80,12 +61,24 @@ import {
80
61
  ensureConfigScope
81
62
  } from "../services/mcpClient.js";
82
63
  import { handleMcprcServerApprovals } from "../services/mcpServerApproval.js";
64
+ import {
65
+ fetchTeamConfig,
66
+ loadTeamConfigFromFile,
67
+ applyTeamConfig,
68
+ addMarketplaces,
69
+ installPlugins,
70
+ installRemoteAgents,
71
+ installInlineAgents,
72
+ installTeamHooks
73
+ } from "../utils/teamConfig.js";
83
74
  import { cursorShow } from "ansi-escapes";
84
75
  import {
85
76
  getLatestVersion,
86
77
  assertMinVersion,
87
78
  getUpdateCommandSuggestions
88
79
  } from "../utils/autoUpdater.js";
80
+ import { ensureConfigDirs } from "../utils/configPaths.js";
81
+ import { runStartupMigration } from "../utils/migration/index.js";
89
82
  import {
90
83
  initI18n,
91
84
  setLanguage,
@@ -101,6 +94,11 @@ import { ConfigParseError } from "../utils/errors.js";
101
94
  import { grantReadPermissionForOriginalDir } from "../utils/permissions/filesystem.js";
102
95
  import { MACRO } from "../constants/macros.js";
103
96
  import { SEMANTIC_COLORS } from "../constants/colors.js";
97
+ import {
98
+ needsSync as needsCCSync,
99
+ syncFromClaudeCode,
100
+ hasClaudeCodeInstallation
101
+ } from "../utils/claudeCodeSync.js";
104
102
  function completeOnboarding() {
105
103
  const config = getGlobalConfig();
106
104
  saveGlobalConfig({
@@ -233,6 +231,33 @@ async function setup(cwd2, safeMode) {
233
231
  const projectConfig = getCurrentProjectConfig();
234
232
  if (projectConfig.lastCost !== void 0 && projectConfig.lastDuration !== void 0) {
235
233
  }
234
+ try {
235
+ const cfg = getGlobalConfig();
236
+ if (hasClaudeCodeInstallation() && needsCCSync()) {
237
+ const shouldSync = cfg.autoSyncClaudeCode === true || cfg.autoSyncClaudeCode === void 0;
238
+ if (shouldSync) {
239
+ const result = await syncFromClaudeCode();
240
+ const changed = result.installed.length + result.updated.length;
241
+ const mpRegistered = result.marketplaces.registered.length;
242
+ if (changed > 0 || mpRegistered > 0) {
243
+ const parts = [];
244
+ if (changed > 0) {
245
+ parts.push(
246
+ `${changed} plugin(s) (${result.installed.length} new, ${result.updated.length} updated)`
247
+ );
248
+ }
249
+ if (mpRegistered > 0) {
250
+ parts.push(`${mpRegistered} marketplace(s)`);
251
+ }
252
+ console.log(`Synced from Claude Code: ${parts.join(", ")}`);
253
+ }
254
+ if (cfg.autoSyncClaudeCode === void 0) {
255
+ saveGlobalConfig({ ...getGlobalConfig(), autoSyncClaudeCode: true });
256
+ }
257
+ }
258
+ }
259
+ } catch {
260
+ }
236
261
  }
237
262
  if (process.env.NODE_ENV !== "test") {
238
263
  process.on("uncaughtException", (error) => {
@@ -270,6 +295,14 @@ if (process.env.NODE_ENV !== "test") {
270
295
  });
271
296
  }
272
297
  async function main() {
298
+ const configDirsResult = ensureConfigDirs();
299
+ if (configDirsResult.errors.length > 0) {
300
+ for (const err of configDirsResult.errors) {
301
+ console.warn(`\u26A0\uFE0F Config directory warning: ${err.path} - ${err.error}`);
302
+ }
303
+ }
304
+ runStartupMigration().catch(() => {
305
+ });
273
306
  const globalConfig = getGlobalConfig();
274
307
  const configLang = globalConfig.language;
275
308
  if (configLang && isLanguageSupported(configLang)) {
@@ -573,6 +606,114 @@ ${commandList}`
573
606
  );
574
607
  process.exit(0);
575
608
  });
609
+ program.command("setup").description("Initialize Minto with team configuration from a URL or file").requiredOption(
610
+ "--from <source>",
611
+ "URL or file path to the team configuration JSON"
612
+ ).option(
613
+ "--strategy <strategy>",
614
+ "Merge strategy: merge, replace, or skip-existing",
615
+ "merge"
616
+ ).option("--no-plugins", "Skip installing plugins, agents, and hooks").action(
617
+ async (options) => {
618
+ const {
619
+ from: source,
620
+ strategy,
621
+ plugins: shouldInstallPlugins
622
+ } = options;
623
+ try {
624
+ console.log(`Loading configuration from ${source}...`);
625
+ const teamConfig = source.startsWith("http://") || source.startsWith("https://") ? await fetchTeamConfig(source) : loadTeamConfigFromFile(source);
626
+ console.log("Applying configuration...");
627
+ const result = applyTeamConfig(teamConfig, strategy);
628
+ let marketplacesAdded = 0;
629
+ if (shouldInstallPlugins && teamConfig.plugins?.marketplaces) {
630
+ console.log(
631
+ `Adding ${teamConfig.plugins.marketplaces.length} marketplace(s)...`
632
+ );
633
+ const marketplaceResult = await addMarketplaces(
634
+ teamConfig.plugins.marketplaces
635
+ );
636
+ marketplacesAdded = marketplaceResult.added;
637
+ }
638
+ let pluginsInstalled = 0;
639
+ if (shouldInstallPlugins && teamConfig.plugins?.install) {
640
+ console.log(
641
+ `Installing ${teamConfig.plugins.install.length} plugin(s)...`
642
+ );
643
+ const pluginResult = await installPlugins(
644
+ teamConfig.plugins.install
645
+ );
646
+ pluginsInstalled = pluginResult.installed;
647
+ }
648
+ let agentsInstalled = 0;
649
+ if (shouldInstallPlugins && teamConfig.agents) {
650
+ const remoteCount = teamConfig.agents.remoteAgents?.length || 0;
651
+ const inlineCount = teamConfig.agents.inlineAgents?.length || 0;
652
+ const totalAgents = remoteCount + inlineCount;
653
+ if (totalAgents > 0) {
654
+ console.log(`Installing ${totalAgents} agent(s)...`);
655
+ if (teamConfig.agents.remoteAgents) {
656
+ const remoteResult = await installRemoteAgents(
657
+ teamConfig.agents.remoteAgents
658
+ );
659
+ agentsInstalled += remoteResult.installed;
660
+ }
661
+ if (teamConfig.agents.inlineAgents) {
662
+ const inlineResult = await installInlineAgents(
663
+ teamConfig.agents.inlineAgents
664
+ );
665
+ agentsInstalled += inlineResult.installed;
666
+ }
667
+ }
668
+ }
669
+ let hooksInstalled = false;
670
+ if (shouldInstallPlugins && teamConfig.hooks) {
671
+ console.log("Installing hooks...");
672
+ const hookResult = await installTeamHooks(teamConfig.hooks);
673
+ hooksInstalled = hookResult.installed;
674
+ }
675
+ console.log("\n\u2713 Configuration applied successfully!\n");
676
+ if (result.modelsAdded > 0) {
677
+ console.log(` \u2022 Added ${result.modelsAdded} model profile(s)`);
678
+ }
679
+ if (result.mcpServersAdded > 0) {
680
+ console.log(` \u2022 Added ${result.mcpServersAdded} MCP server(s)`);
681
+ }
682
+ if (result.settingsUpdated.length > 0) {
683
+ console.log(
684
+ ` \u2022 Updated ${result.settingsUpdated.length} setting(s): ${result.settingsUpdated.join(", ")}`
685
+ );
686
+ }
687
+ if (marketplacesAdded > 0) {
688
+ console.log(` \u2022 Added ${marketplacesAdded} marketplace(s)`);
689
+ }
690
+ if (pluginsInstalled > 0) {
691
+ console.log(` \u2022 Installed ${pluginsInstalled} plugin(s)`);
692
+ }
693
+ if (agentsInstalled > 0) {
694
+ console.log(` \u2022 Installed ${agentsInstalled} agent(s)`);
695
+ }
696
+ if (hooksInstalled) {
697
+ console.log(" \u2022 Installed hooks configuration");
698
+ }
699
+ if (teamConfig.postInstallInstructions) {
700
+ console.log("\n\u{1F4CB} Next Steps:");
701
+ console.log(teamConfig.postInstallInstructions);
702
+ }
703
+ console.log(
704
+ `
705
+ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
706
+ );
707
+ process.exit(0);
708
+ } catch (error) {
709
+ console.error(
710
+ "\u2717 Setup failed:",
711
+ error instanceof Error ? error.message : String(error)
712
+ );
713
+ process.exit(1);
714
+ }
715
+ }
716
+ );
576
717
  const allowedTools = program.command("approved-tools").description("Manage approved tools");
577
718
  allowedTools.command("list").description("List all approved tools").action(async () => {
578
719
  const result = handleListApprovedTools(getCwd());
@@ -835,7 +976,7 @@ ${commandList}`
835
976
  const scope = ensureConfigScope(options.scope);
836
977
  const platform = process.platform;
837
978
  const { existsSync: existsSync2, readFileSync } = await import("fs");
838
- const { join: join2 } = await import("path");
979
+ const { join } = await import("path");
839
980
  const { exec } = await import("child_process");
840
981
  const isWSL = platform === "linux" && existsSync2("/proc/version") && readFileSync("/proc/version", "utf-8").toLowerCase().includes("microsoft");
841
982
  if (platform !== "darwin" && platform !== "win32" && !isWSL) {
@@ -846,12 +987,12 @@ ${commandList}`
846
987
  }
847
988
  let configPath;
848
989
  if (platform === "darwin") {
849
- configPath = join2(
990
+ configPath = join(
850
991
  process.env.HOME || "~",
851
992
  "Library/Application Support/Claude/claude_desktop_config.json"
852
993
  );
853
994
  } else if (platform === "win32") {
854
- configPath = join2(
995
+ configPath = join(
855
996
  process.env.APPDATA || "",
856
997
  "Claude/claude_desktop_config.json"
857
998
  );