@within-7/minto 0.4.0 → 0.4.2

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 (391) hide show
  1. package/dist/Tool.js +7 -0
  2. package/dist/Tool.js.map +2 -2
  3. package/dist/commands/agents/AgentsCommand.js +1 -1
  4. package/dist/commands/agents/AgentsCommand.js.map +2 -2
  5. package/dist/commands/agents/constants.js +2 -2
  6. package/dist/commands/agents/constants.js.map +2 -2
  7. package/dist/commands/clear.js +4 -3
  8. package/dist/commands/clear.js.map +2 -2
  9. package/dist/commands/compact.js +2 -2
  10. package/dist/commands/compact.js.map +1 -1
  11. package/dist/commands/context.js +3 -1
  12. package/dist/commands/context.js.map +2 -2
  13. package/dist/commands/login.js +128 -0
  14. package/dist/commands/login.js.map +7 -0
  15. package/dist/commands/memory.js +33 -82
  16. package/dist/commands/memory.js.map +2 -2
  17. package/dist/commands/quit.js +3 -1
  18. package/dist/commands/quit.js.map +2 -2
  19. package/dist/commands/resume.js +39 -239
  20. package/dist/commands/resume.js.map +2 -2
  21. package/dist/commands/tasks.js +1 -1
  22. package/dist/commands/tasks.js.map +2 -2
  23. package/dist/commands/terminalSetup.js +6 -2
  24. package/dist/commands/terminalSetup.js.map +2 -2
  25. package/dist/commands.js +2 -0
  26. package/dist/commands.js.map +2 -2
  27. package/dist/components/AgentDetailView.js +126 -0
  28. package/dist/components/AgentDetailView.js.map +7 -0
  29. package/dist/components/AgentThinkingBlock.js +1 -1
  30. package/dist/components/AgentThinkingBlock.js.map +2 -2
  31. package/dist/components/AgentViewBanner.js +22 -0
  32. package/dist/components/AgentViewBanner.js.map +7 -0
  33. package/dist/components/HeaderBar.js +1 -1
  34. package/dist/components/HeaderBar.js.map +2 -2
  35. package/dist/components/Help.js +8 -1
  36. package/dist/components/Help.js.map +2 -2
  37. package/dist/components/HotkeyHelpPanel.js +26 -8
  38. package/dist/components/HotkeyHelpPanel.js.map +2 -2
  39. package/dist/components/IdleNotificationBar.js +10 -0
  40. package/dist/components/IdleNotificationBar.js.map +7 -0
  41. package/dist/components/ModelSelector/ModelSelector.js +55 -20
  42. package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
  43. package/dist/components/PromptInput.js +186 -115
  44. package/dist/components/PromptInput.js.map +2 -2
  45. package/dist/components/RewindPanel.js +272 -0
  46. package/dist/components/RewindPanel.js.map +7 -0
  47. package/dist/components/Spinner.js +10 -21
  48. package/dist/components/Spinner.js.map +2 -2
  49. package/dist/components/StreamingTextPreview.js +29 -0
  50. package/dist/components/StreamingTextPreview.js.map +7 -0
  51. package/dist/components/SubagentBlock.js +3 -2
  52. package/dist/components/SubagentBlock.js.map +2 -2
  53. package/dist/components/SubagentProgress.js +4 -4
  54. package/dist/components/SubagentProgress.js.map +2 -2
  55. package/dist/components/TabbedListView/SearchInput.js +1 -1
  56. package/dist/components/TabbedListView/SearchInput.js.map +2 -2
  57. package/dist/components/TabbedListView/TabbedListView.js +87 -41
  58. package/dist/components/TabbedListView/TabbedListView.js.map +2 -2
  59. package/dist/components/TaskCard.js +4 -4
  60. package/dist/components/TaskCard.js.map +2 -2
  61. package/dist/components/TeamMemberPanel.js +107 -0
  62. package/dist/components/TeamMemberPanel.js.map +7 -0
  63. package/dist/components/ThinkingSelector.js +84 -0
  64. package/dist/components/ThinkingSelector.js.map +7 -0
  65. package/dist/components/TitledDivider.js +26 -0
  66. package/dist/components/TitledDivider.js.map +7 -0
  67. package/dist/components/TodoPanel.js +31 -30
  68. package/dist/components/TodoPanel.js.map +2 -2
  69. package/dist/components/TokenWarning.js +28 -7
  70. package/dist/components/TokenWarning.js.map +2 -2
  71. package/dist/components/messages/AssistantTextMessage.js +5 -2
  72. package/dist/components/messages/AssistantTextMessage.js.map +2 -2
  73. package/dist/components/messages/AssistantToolUseMessage.js +9 -1
  74. package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
  75. package/dist/components/messages/DefaultToolResultFallback.js +11 -0
  76. package/dist/components/messages/DefaultToolResultFallback.js.map +7 -0
  77. package/dist/components/messages/ParallelTasksGroupView.js +14 -6
  78. package/dist/components/messages/ParallelTasksGroupView.js.map +2 -2
  79. package/dist/components/messages/TaskInModuleView.js +27 -27
  80. package/dist/components/messages/TaskInModuleView.js.map +2 -2
  81. package/dist/components/messages/UserGuidanceMessage.js +26 -0
  82. package/dist/components/messages/UserGuidanceMessage.js.map +7 -0
  83. package/dist/components/messages/UserPromptMessage.js +2 -1
  84. package/dist/components/messages/UserPromptMessage.js.map +2 -2
  85. package/dist/components/messages/UserTeamNotificationMessage.js +91 -0
  86. package/dist/components/messages/UserTeamNotificationMessage.js.map +7 -0
  87. package/dist/components/messages/UserTextMessage.js +8 -0
  88. package/dist/components/messages/UserTextMessage.js.map +2 -2
  89. package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +4 -2
  90. package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js.map +2 -2
  91. package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +18 -1
  92. package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js.map +2 -2
  93. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +12 -1
  94. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +2 -2
  95. package/dist/components/permissions/PermissionRequest.js +4 -0
  96. package/dist/components/permissions/PermissionRequest.js.map +2 -2
  97. package/dist/components/permissions/PlanApprovalRequest.js +164 -0
  98. package/dist/components/permissions/PlanApprovalRequest.js.map +7 -0
  99. package/dist/constants/agentTeams.js +17 -0
  100. package/dist/constants/agentTeams.js.map +7 -0
  101. package/dist/constants/macros.js +2 -1
  102. package/dist/constants/macros.js.map +2 -2
  103. package/dist/constants/prompts/agentPrompt.js +1 -0
  104. package/dist/constants/prompts/agentPrompt.js.map +2 -2
  105. package/dist/constants/prompts/autoMemory.js +39 -0
  106. package/dist/constants/prompts/autoMemory.js.map +7 -0
  107. package/dist/constants/prompts/codeConventions.js +1 -13
  108. package/dist/constants/prompts/codeConventions.js.map +2 -2
  109. package/dist/constants/prompts/doingTasks.js +21 -2
  110. package/dist/constants/prompts/doingTasks.js.map +2 -2
  111. package/dist/constants/prompts/envInfo.js +6 -7
  112. package/dist/constants/prompts/envInfo.js.map +2 -2
  113. package/dist/constants/prompts/index.js +27 -5
  114. package/dist/constants/prompts/index.js.map +2 -2
  115. package/dist/constants/prompts/taskManagement.js +2 -43
  116. package/dist/constants/prompts/taskManagement.js.map +2 -2
  117. package/dist/constants/prompts/teamOverlays.js +50 -0
  118. package/dist/constants/prompts/teamOverlays.js.map +7 -0
  119. package/dist/constants/prompts/toneAndStyle.js +4 -29
  120. package/dist/constants/prompts/toneAndStyle.js.map +2 -2
  121. package/dist/constants/prompts/toolUsagePolicy.js +7 -22
  122. package/dist/constants/prompts/toolUsagePolicy.js.map +2 -2
  123. package/dist/constants/toolInputExamples.js +2 -2
  124. package/dist/constants/toolInputExamples.js.map +2 -2
  125. package/dist/context.js +39 -6
  126. package/dist/context.js.map +2 -2
  127. package/dist/core/backupManager.js +1 -1
  128. package/dist/core/backupManager.js.map +2 -2
  129. package/dist/core/permissions/rules/planModeRule.js +1 -1
  130. package/dist/core/permissions/rules/planModeRule.js.map +1 -1
  131. package/dist/core/permissions/rules/safeModeRule.js +1 -1
  132. package/dist/core/permissions/rules/safeModeRule.js.map +1 -1
  133. package/dist/engine/AgentEngine.js +902 -0
  134. package/dist/engine/AgentEngine.js.map +7 -0
  135. package/dist/engine/EngineRegistry.js +89 -0
  136. package/dist/engine/EngineRegistry.js.map +7 -0
  137. package/dist/engine/foregroundAdapter.js +191 -0
  138. package/dist/engine/foregroundAdapter.js.map +7 -0
  139. package/dist/engine/index.js +15 -0
  140. package/dist/engine/index.js.map +7 -0
  141. package/dist/engine/types.js +1 -0
  142. package/dist/engine/types.js.map +7 -0
  143. package/dist/entrypoints/cli.js +410 -79
  144. package/dist/entrypoints/cli.js.map +3 -3
  145. package/dist/hooks/useAgentEngine.js +129 -0
  146. package/dist/hooks/useAgentEngine.js.map +7 -0
  147. package/dist/hooks/useAgentTokenStats.js +0 -16
  148. package/dist/hooks/useAgentTokenStats.js.map +2 -2
  149. package/dist/hooks/useCanUseTool.js +47 -2
  150. package/dist/hooks/useCanUseTool.js.map +2 -2
  151. package/dist/hooks/useDeferredLoading.js +4 -1
  152. package/dist/hooks/useDeferredLoading.js.map +2 -2
  153. package/dist/hooks/useIdleNotifications.js +66 -0
  154. package/dist/hooks/useIdleNotifications.js.map +7 -0
  155. package/dist/hooks/useSessionTracking.js +9 -7
  156. package/dist/hooks/useSessionTracking.js.map +2 -2
  157. package/dist/hooks/useTeamMembers.js +51 -0
  158. package/dist/hooks/useTeamMembers.js.map +7 -0
  159. package/dist/i18n/locales/en.js +77 -12
  160. package/dist/i18n/locales/en.js.map +2 -2
  161. package/dist/i18n/locales/zh-CN.js +77 -12
  162. package/dist/i18n/locales/zh-CN.js.map +2 -2
  163. package/dist/i18n/types.js.map +1 -1
  164. package/dist/messages.js.map +2 -2
  165. package/dist/permissions.js +113 -7
  166. package/dist/permissions.js.map +2 -2
  167. package/dist/query.js +135 -37
  168. package/dist/query.js.map +2 -2
  169. package/dist/screens/REPL.js +504 -361
  170. package/dist/screens/REPL.js.map +3 -3
  171. package/dist/screens/ResumeConversation.js +199 -14
  172. package/dist/screens/ResumeConversation.js.map +2 -2
  173. package/dist/services/adapters/base.js.map +1 -1
  174. package/dist/services/agentTeams/backends/headless.js +108 -0
  175. package/dist/services/agentTeams/backends/headless.js.map +7 -0
  176. package/dist/services/agentTeams/backends/inProcess.js +102 -0
  177. package/dist/services/agentTeams/backends/inProcess.js.map +7 -0
  178. package/dist/services/agentTeams/backends/resolver.js +18 -0
  179. package/dist/services/agentTeams/backends/resolver.js.map +7 -0
  180. package/dist/services/agentTeams/backends/tmux.js +168 -0
  181. package/dist/services/agentTeams/backends/tmux.js.map +7 -0
  182. package/dist/services/agentTeams/backends/types.js +1 -0
  183. package/dist/services/agentTeams/backends/types.js.map +7 -0
  184. package/dist/services/agentTeams/heartbeat.js +88 -0
  185. package/dist/services/agentTeams/heartbeat.js.map +7 -0
  186. package/dist/services/agentTeams/index.js +42 -2
  187. package/dist/services/agentTeams/index.js.map +2 -2
  188. package/dist/services/agentTeams/injectionChannel.js +105 -0
  189. package/dist/services/agentTeams/injectionChannel.js.map +7 -0
  190. package/dist/services/agentTeams/mailbox.js +410 -30
  191. package/dist/services/agentTeams/mailbox.js.map +2 -2
  192. package/dist/services/agentTeams/messageFormatter.js +80 -0
  193. package/dist/services/agentTeams/messageFormatter.js.map +7 -0
  194. package/dist/services/agentTeams/permissionDelegation.js +71 -0
  195. package/dist/services/agentTeams/permissionDelegation.js.map +7 -0
  196. package/dist/services/agentTeams/teamEvents.js +45 -0
  197. package/dist/services/agentTeams/teamEvents.js.map +7 -0
  198. package/dist/services/agentTeams/teamManager.js +251 -34
  199. package/dist/services/agentTeams/teamManager.js.map +2 -2
  200. package/dist/services/agentTeams/teamTaskStore.js +290 -61
  201. package/dist/services/agentTeams/teamTaskStore.js.map +2 -2
  202. package/dist/services/agentTeams/teammateSpawner.js +99 -18
  203. package/dist/services/agentTeams/teammateSpawner.js.map +2 -2
  204. package/dist/services/hookExecutor.js +51 -8
  205. package/dist/services/hookExecutor.js.map +2 -2
  206. package/dist/services/llm/anthropicProvider.js +56 -59
  207. package/dist/services/llm/anthropicProvider.js.map +2 -2
  208. package/dist/services/llm/dispatch.js +24 -5
  209. package/dist/services/llm/dispatch.js.map +2 -2
  210. package/dist/services/llm/openaiProvider.js +115 -136
  211. package/dist/services/llm/openaiProvider.js.map +3 -3
  212. package/dist/services/llm/types.js +89 -15
  213. package/dist/services/llm/types.js.map +2 -2
  214. package/dist/services/mcpClient.js +80 -4
  215. package/dist/services/mcpClient.js.map +2 -2
  216. package/dist/services/mintoAuth.js +299 -0
  217. package/dist/services/mintoAuth.js.map +7 -0
  218. package/dist/services/oauth.js +3 -3
  219. package/dist/services/oauth.js.map +2 -2
  220. package/dist/services/openai.js +91 -20
  221. package/dist/services/openai.js.map +2 -2
  222. package/dist/services/plugins/pluginRuntime.js +11 -5
  223. package/dist/services/plugins/pluginRuntime.js.map +2 -2
  224. package/dist/services/plugins/pluginValidation.js +4 -2
  225. package/dist/services/plugins/pluginValidation.js.map +2 -2
  226. package/dist/services/sandbox/sandboxController.js +11 -3
  227. package/dist/services/sandbox/sandboxController.js.map +2 -2
  228. package/dist/services/sessionMemoryInjector.js +77 -0
  229. package/dist/services/sessionMemoryInjector.js.map +7 -0
  230. package/dist/services/systemReminder.js +130 -8
  231. package/dist/services/systemReminder.js.map +2 -2
  232. package/dist/services/taskStore.js +199 -8
  233. package/dist/services/taskStore.js.map +3 -3
  234. package/dist/services/topicDetector.js +169 -0
  235. package/dist/services/topicDetector.js.map +7 -0
  236. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +0 -13
  237. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
  238. package/dist/tools/BashTool/BashTool.js +51 -28
  239. package/dist/tools/BashTool/BashTool.js.map +2 -2
  240. package/dist/tools/BashTool/prompt.js +95 -118
  241. package/dist/tools/BashTool/prompt.js.map +2 -2
  242. package/dist/tools/BashTool/utils.js +39 -1
  243. package/dist/tools/BashTool/utils.js.map +2 -2
  244. package/dist/tools/EnterWorktreeTool/EnterWorktreeTool.js +121 -0
  245. package/dist/tools/EnterWorktreeTool/EnterWorktreeTool.js.map +7 -0
  246. package/dist/tools/EnterWorktreeTool/prompt.js +22 -0
  247. package/dist/tools/EnterWorktreeTool/prompt.js.map +7 -0
  248. package/dist/tools/FileEditTool/FileEditTool.js +9 -4
  249. package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
  250. package/dist/tools/FileEditTool/prompt.js +3 -7
  251. package/dist/tools/FileEditTool/prompt.js.map +2 -2
  252. package/dist/tools/FileReadTool/FileReadTool.js +125 -3
  253. package/dist/tools/FileReadTool/FileReadTool.js.map +2 -2
  254. package/dist/tools/FileReadTool/prompt.js +1 -2
  255. package/dist/tools/FileReadTool/prompt.js.map +2 -2
  256. package/dist/tools/FileWriteTool/prompt.js +3 -5
  257. package/dist/tools/FileWriteTool/prompt.js.map +2 -2
  258. package/dist/tools/GlobTool/GlobTool.js +3 -2
  259. package/dist/tools/GlobTool/GlobTool.js.map +2 -2
  260. package/dist/tools/GrepTool/GrepTool.js +16 -5
  261. package/dist/tools/GrepTool/GrepTool.js.map +2 -2
  262. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +2 -2
  263. package/dist/tools/MCPSearchTool/MCPSearchTool.js +172 -0
  264. package/dist/tools/MCPSearchTool/MCPSearchTool.js.map +7 -0
  265. package/dist/tools/MCPSearchTool/prompt.js +77 -0
  266. package/dist/tools/MCPSearchTool/prompt.js.map +7 -0
  267. package/dist/tools/MultiEditTool/prompt.js +4 -7
  268. package/dist/tools/MultiEditTool/prompt.js.map +2 -2
  269. package/dist/tools/PlanModeTool/EnterPlanModeTool.js +12 -8
  270. package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +2 -2
  271. package/dist/tools/PlanModeTool/ExitPlanModeTool.js +54 -1
  272. package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +2 -2
  273. package/dist/tools/PlanModeTool/prompt.js +23 -74
  274. package/dist/tools/PlanModeTool/prompt.js.map +2 -2
  275. package/dist/tools/SendMessageTool/SendMessageTool.js +341 -0
  276. package/dist/tools/SendMessageTool/SendMessageTool.js.map +7 -0
  277. package/dist/tools/SendMessageTool/prompt.js +44 -0
  278. package/dist/tools/SendMessageTool/prompt.js.map +7 -0
  279. package/dist/tools/TaskCreateTool/prompt.js +15 -4
  280. package/dist/tools/TaskCreateTool/prompt.js.map +2 -2
  281. package/dist/tools/TaskListTool/prompt.js +18 -3
  282. package/dist/tools/TaskListTool/prompt.js.map +2 -2
  283. package/dist/tools/TaskOutputTool/prompt.js +4 -3
  284. package/dist/tools/TaskOutputTool/prompt.js.map +2 -2
  285. package/dist/tools/TaskTool/TaskTool.js +762 -98
  286. package/dist/tools/TaskTool/TaskTool.js.map +3 -3
  287. package/dist/tools/TaskTool/constants.js +8 -2
  288. package/dist/tools/TaskTool/constants.js.map +2 -2
  289. package/dist/tools/TaskTool/prompt.js +74 -70
  290. package/dist/tools/TaskTool/prompt.js.map +2 -2
  291. package/dist/tools/TaskUpdateTool/TaskUpdateTool.js +15 -1
  292. package/dist/tools/TaskUpdateTool/TaskUpdateTool.js.map +2 -2
  293. package/dist/tools/TeamCreateTool/TeamCreateTool.js +129 -0
  294. package/dist/tools/TeamCreateTool/TeamCreateTool.js.map +7 -0
  295. package/dist/tools/TeamCreateTool/prompt.js +58 -0
  296. package/dist/tools/TeamCreateTool/prompt.js.map +7 -0
  297. package/dist/tools/TeamDeleteTool/TeamDeleteTool.js +151 -0
  298. package/dist/tools/TeamDeleteTool/TeamDeleteTool.js.map +7 -0
  299. package/dist/tools/TeamDeleteTool/prompt.js +16 -0
  300. package/dist/tools/TeamDeleteTool/prompt.js.map +7 -0
  301. package/dist/tools/URLFetcherTool/URLFetcherTool.js +106 -15
  302. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
  303. package/dist/tools/URLFetcherTool/prompt.js +3 -2
  304. package/dist/tools/URLFetcherTool/prompt.js.map +2 -2
  305. package/dist/tools/WebSearchTool/WebSearchTool.js +2 -1
  306. package/dist/tools/WebSearchTool/WebSearchTool.js.map +2 -2
  307. package/dist/tools/WebSearchTool/prompt.js +5 -4
  308. package/dist/tools/WebSearchTool/prompt.js.map +2 -2
  309. package/dist/tools.js +100 -20
  310. package/dist/tools.js.map +2 -2
  311. package/dist/types/PermissionMode.js +35 -6
  312. package/dist/types/PermissionMode.js.map +2 -2
  313. package/dist/types/hooks.js +2 -0
  314. package/dist/types/hooks.js.map +2 -2
  315. package/dist/types/plugin.js +2 -0
  316. package/dist/types/plugin.js.map +3 -3
  317. package/dist/utils/CircuitBreaker.js +15 -9
  318. package/dist/utils/CircuitBreaker.js.map +2 -2
  319. package/dist/utils/agentLoader.js +249 -112
  320. package/dist/utils/agentLoader.js.map +2 -2
  321. package/dist/utils/animationManager.js +40 -3
  322. package/dist/utils/animationManager.js.map +2 -2
  323. package/dist/utils/ask.js +7 -6
  324. package/dist/utils/ask.js.map +2 -2
  325. package/dist/utils/atomicWrite.js +23 -0
  326. package/dist/utils/atomicWrite.js.map +7 -0
  327. package/dist/utils/autoCompactCore.js +73 -56
  328. package/dist/utils/autoCompactCore.js.map +2 -2
  329. package/dist/utils/autoMemoryPaths.js +89 -0
  330. package/dist/utils/autoMemoryPaths.js.map +7 -0
  331. package/dist/utils/config.js +63 -38
  332. package/dist/utils/config.js.map +2 -2
  333. package/dist/utils/configSchema.js +13 -8
  334. package/dist/utils/configSchema.js.map +2 -2
  335. package/dist/utils/credentials/index.js +14 -0
  336. package/dist/utils/credentials/index.js.map +2 -2
  337. package/dist/utils/dualPath.js +24 -0
  338. package/dist/utils/dualPath.js.map +7 -0
  339. package/dist/utils/exit.js +66 -7
  340. package/dist/utils/exit.js.map +2 -2
  341. package/dist/utils/externalEditor.js +155 -0
  342. package/dist/utils/externalEditor.js.map +7 -0
  343. package/dist/utils/fileLock.js +67 -0
  344. package/dist/utils/fileLock.js.map +7 -0
  345. package/dist/utils/format.js +24 -14
  346. package/dist/utils/format.js.map +2 -2
  347. package/dist/utils/globalErrorHandler.js +5 -96
  348. package/dist/utils/globalErrorHandler.js.map +3 -3
  349. package/dist/utils/groupHandlers/parallelTasksHandler.js +5 -3
  350. package/dist/utils/groupHandlers/parallelTasksHandler.js.map +2 -2
  351. package/dist/utils/groupHandlers/taskHandler.js +2 -2
  352. package/dist/utils/groupHandlers/taskHandler.js.map +2 -2
  353. package/dist/utils/hookManager.js +64 -6
  354. package/dist/utils/hookManager.js.map +2 -2
  355. package/dist/utils/log.js +6 -2
  356. package/dist/utils/log.js.map +2 -2
  357. package/dist/utils/markdown.js +237 -19
  358. package/dist/utils/markdown.js.map +2 -2
  359. package/dist/utils/messageContextManager.js +18 -5
  360. package/dist/utils/messageContextManager.js.map +2 -2
  361. package/dist/utils/messageGroupManager.js +1 -1
  362. package/dist/utils/messageGroupManager.js.map +2 -2
  363. package/dist/utils/messages.js +104 -46
  364. package/dist/utils/messages.js.map +2 -2
  365. package/dist/utils/model.js +2 -2
  366. package/dist/utils/model.js.map +2 -2
  367. package/dist/utils/pasteCache.js +8 -4
  368. package/dist/utils/pasteCache.js.map +2 -2
  369. package/dist/utils/pluginLoader.js +18 -0
  370. package/dist/utils/pluginLoader.js.map +2 -2
  371. package/dist/utils/secureKeyStorage.js +36 -7
  372. package/dist/utils/secureKeyStorage.js.map +2 -2
  373. package/dist/utils/simpleMode.js +7 -0
  374. package/dist/utils/simpleMode.js.map +7 -0
  375. package/dist/utils/streamingState.js +11 -1
  376. package/dist/utils/streamingState.js.map +2 -2
  377. package/dist/utils/taskDisplayUtils.js +2 -1
  378. package/dist/utils/taskDisplayUtils.js.map +2 -2
  379. package/dist/utils/teamConfig.js +2 -2
  380. package/dist/utils/teamConfig.js.map +2 -2
  381. package/dist/utils/thinking.js +6 -2
  382. package/dist/utils/thinking.js.map +3 -3
  383. package/dist/utils/tokenProgress.js +55 -0
  384. package/dist/utils/tokenProgress.js.map +7 -0
  385. package/dist/utils/toolRiskClassification.js +26 -17
  386. package/dist/utils/toolRiskClassification.js.map +2 -2
  387. package/dist/utils/tooling/toolError.js +12 -0
  388. package/dist/utils/tooling/toolError.js.map +7 -0
  389. package/dist/version.js +2 -2
  390. package/dist/version.js.map +1 -1
  391. package/package.json +10 -8
@@ -31,15 +31,10 @@ import {
31
31
  import { cwd } from "process";
32
32
  import { dateToFilename, logError, parseLogFilename } from "../utils/log.js";
33
33
  import { initDebugLogger } from "../utils/debugLogger.js";
34
- import { Onboarding } from "../components/Onboarding.js";
35
- import { TrustDialog } from "../components/TrustDialog.js";
36
34
  import {
37
35
  checkHasTrustDialogAccepted
38
36
  } from "../utils/config.js";
39
37
  import { isDefaultSlowAndCapableModel } from "../utils/model.js";
40
- import { LogList } from "../screens/LogList.js";
41
- import { ResumeConversation } from "../screens/ResumeConversation.js";
42
- import { startMCPServer } from "./mcp.js";
43
38
  import { getCwd, setCwd, setOriginalCwd } from "../utils/state.js";
44
39
  import { omit } from "lodash-es";
45
40
  import { getBuiltInCommands, getCommands } from "../commands.js";
@@ -47,35 +42,8 @@ import { getNextAvailableLogForkNumber, loadLogList } from "../utils/log.js";
47
42
  import { loadMessagesFromLog } from "../utils/conversationRecovery.js";
48
43
  import { cleanupOldMessageFilesInBackground } from "../utils/cleanup.js";
49
44
  import { runLogRotationInBackground, shouldRotate } from "../utils/logRotation.js";
50
- import {
51
- handleListApprovedTools,
52
- handleRemoveApprovedTool
53
- } from "../commands/approvedTools.js";
54
- import {
55
- addMcpServer,
56
- getMcpServer,
57
- listMCPServers,
58
- parseEnvVars,
59
- removeMcpServer,
60
- getClients,
61
- ensureConfigScope
62
- } from "../services/mcpClient.js";
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";
74
45
  import { cursorShow } from "ansi-escapes";
75
- import {
76
- getLatestVersion,
77
- assertMinVersion
78
- } from "../utils/autoUpdater.js";
46
+ import { assertMinVersion } from "../utils/autoUpdater.js";
79
47
  import { ensureConfigDirs } from "../utils/configPaths.js";
80
48
  import { runStartupMigration } from "../utils/migration/index.js";
81
49
  import {
@@ -92,11 +60,6 @@ import { ConfigParseError } from "../utils/errors.js";
92
60
  import { grantReadPermissionForOriginalDir } from "../utils/permissions/filesystem.js";
93
61
  import { MACRO } from "../constants/macros.js";
94
62
  import { SEMANTIC_COLORS } from "../constants/colors.js";
95
- import {
96
- needsSync as needsCCSync,
97
- syncFromClaudeCode,
98
- hasClaudeCodeInstallation
99
- } from "../utils/claudeCodeSync.js";
100
63
  function completeOnboarding() {
101
64
  const config = getGlobalConfig();
102
65
  saveGlobalConfig({
@@ -133,6 +96,7 @@ async function showSetupScreens(safeMode, print, rawModeSupported) {
133
96
  }
134
97
  await clearTerminal();
135
98
  const { render } = await import("ink");
99
+ const { Onboarding } = await import("../components/Onboarding.js");
136
100
  await new Promise((resolve) => {
137
101
  render(
138
102
  /* @__PURE__ */ React.createElement(
@@ -166,6 +130,7 @@ async function showSetupScreens(safeMode, print, rawModeSupported) {
166
130
  };
167
131
  (async () => {
168
132
  const { render } = await import("ink");
133
+ const { TrustDialog } = await import("../components/TrustDialog.js");
169
134
  render(/* @__PURE__ */ React.createElement(TrustDialog, { onDone }), {
170
135
  exitOnCtrlC: false
171
136
  });
@@ -174,6 +139,7 @@ async function showSetupScreens(safeMode, print, rawModeSupported) {
174
139
  }
175
140
  }
176
141
  if (process.env.USER_TYPE === "ant") {
142
+ const { handleMcprcServerApprovals } = await import("../services/mcpServerApproval.js");
177
143
  await handleMcprcServerApprovals();
178
144
  }
179
145
  }
@@ -191,12 +157,7 @@ async function setup(cwd2, safeMode) {
191
157
  }
192
158
  await setCwd(cwd2);
193
159
  grantReadPermissionForOriginalDir();
194
- let agentLoader;
195
- try {
196
- agentLoader = await import("../utils/agentLoader.js");
197
- } catch {
198
- agentLoader = await import("../utils/agentLoader.js");
199
- }
160
+ const agentLoader = await import("../utils/agentLoader.js");
200
161
  const { startAgentWatcher, clearAgentCache } = agentLoader;
201
162
  await startAgentWatcher(() => {
202
163
  console.log("\u2705 Agent configurations hot-reloaded");
@@ -231,6 +192,11 @@ async function setup(cwd2, safeMode) {
231
192
  }
232
193
  try {
233
194
  const cfg = getGlobalConfig();
195
+ const {
196
+ hasClaudeCodeInstallation,
197
+ needsSync: needsCCSync,
198
+ syncFromClaudeCode
199
+ } = await import("../utils/claudeCodeSync.js");
234
200
  if (hasClaudeCodeInstallation() && needsCCSync()) {
235
201
  const shouldSync = cfg.autoSyncClaudeCode === true || cfg.autoSyncClaudeCode === void 0;
236
202
  if (shouldSync) {
@@ -297,6 +263,164 @@ if (process.env.NODE_ENV !== "test") {
297
263
  throw error;
298
264
  });
299
265
  }
266
+ async function runHeadlessAgent(options) {
267
+ const {
268
+ cwd: agentCwd,
269
+ teamName,
270
+ agentId,
271
+ agentName,
272
+ agentType,
273
+ prompt,
274
+ maxTurns,
275
+ model,
276
+ permissionMode,
277
+ planModeRequired,
278
+ agentColor,
279
+ parentSessionId
280
+ } = options;
281
+ await setCwd(agentCwd);
282
+ try {
283
+ enableConfigs();
284
+ } catch {
285
+ }
286
+ process.env.MINTO_TEAM_NAME = teamName;
287
+ process.env.CLAUDE_CODE_TEAM_NAME = teamName;
288
+ process.env.MINTO_AGENT_ID = agentId;
289
+ process.env.CLAUDE_CODE_AGENT_ID = agentId;
290
+ process.env.MINTO_AGENT_TYPE = agentType;
291
+ process.env.CLAUDE_CODE_AGENT_TYPE = agentType;
292
+ process.env.MINTO_AGENT_NAME = agentName;
293
+ process.env.CLAUDE_CODE_AGENT_NAME = agentName;
294
+ process.env.MINTO_HEADLESS = "1";
295
+ if (parentSessionId) process.env.MINTO_PARENT_SESSION_ID = parentSessionId;
296
+ if (agentColor) process.env.MINTO_AGENT_COLOR = agentColor;
297
+ if (planModeRequired) {
298
+ process.env.MINTO_PLAN_MODE_REQUIRED = "1";
299
+ process.env.CLAUDE_CODE_PLAN_MODE_REQUIRED = "1";
300
+ }
301
+ if (permissionMode) process.env.MINTO_AGENT_MODE = permissionMode;
302
+ const { loadTeam, getTeam } = await import("../services/agentTeams/teamManager.js");
303
+ const { markTeammateIdle } = await import("../services/agentTeams/teammateSpawner.js");
304
+ loadTeam(teamName);
305
+ const { getAgentPrompt } = await import("../constants/prompts/index.js");
306
+ const { getContext: getContext2 } = await import("../context.js");
307
+ const { getBuiltInTools: getBuiltInTools2 } = await import("../tools.js");
308
+ const { hasPermissionsToUseTool: hasPermissionsToUseTool2 } = await import("../permissions.js");
309
+ const { query } = await import("../query.js");
310
+ const { createUserMessage } = await import("../utils/messages.js");
311
+ const { getMaxThinkingTokens } = await import("../utils/thinking.js");
312
+ const { dateToFilename: dateToFilename2 } = await import("../utils/log.js");
313
+ let teamDiscovery = "";
314
+ const entry = getTeam(teamName);
315
+ if (entry) {
316
+ const otherMembers = entry.team.members.filter((m) => m.id !== agentId && m.name !== agentName).map((m) => ` - ${m.name} (${m.agentType}): ${m.status}`).join("\n");
317
+ if (otherMembers) {
318
+ teamDiscovery = `
319
+ Team members:
320
+ ${otherMembers}`;
321
+ }
322
+ }
323
+ const teamContext = `
324
+ # Agent Teammate Communication
325
+
326
+ You are agent "${agentName}" in team "${teamName}".
327
+
328
+ ## CRITICAL: Reporting Results
329
+
330
+ **You MUST use the SendMessage tool to report your results to the team lead.** Your text output is NOT visible to the team lead or any teammate. The ONLY way to deliver your findings is via SendMessage.
331
+
332
+ When you finish your task:
333
+ 1. Use SendMessage with type "message", recipient "team-lead", and your findings as content
334
+ 2. Include a brief summary in the summary field
335
+ 3. Do NOT just output text \u2014 it will be lost
336
+
337
+ ## Communication
338
+
339
+ - Use SendMessage with type \`message\` to send messages to specific teammates
340
+ - Use SendMessage with type \`broadcast\` sparingly for team-wide announcements
341
+ - Do NOT send acknowledgment messages ("Got it", "\u5DF2\u6536\u5230") \u2014 only send when you have actionable content
342
+ - ALWAYS respond in the same language as the user's original request
343
+
344
+ Team: ${teamName}
345
+ Your agent ID: ${agentId}
346
+ Your agent type: ${agentType}${teamDiscovery}
347
+ `;
348
+ const effectivePrompt = `<system-reminder>
349
+ ${teamContext}
350
+ </system-reminder>
351
+
352
+ ` + prompt;
353
+ const messages = [createUserMessage(effectivePrompt)];
354
+ const agentTools = await getBuiltInTools2(false);
355
+ const messageLogName = dateToFilename2(/* @__PURE__ */ new Date());
356
+ const agentModel = model || process.env.MINTO_AGENT_MODEL || "task";
357
+ const [taskPrompt, context, maxThinkingTokens] = await Promise.all([
358
+ getAgentPrompt(),
359
+ getContext2(),
360
+ getMaxThinkingTokens(messages)
361
+ ]);
362
+ const abortController = new AbortController();
363
+ process.on("message", (msg) => {
364
+ if (msg?.type === "abort" || msg?.type === "shutdown") {
365
+ abortController.abort();
366
+ }
367
+ });
368
+ let turnCount = 0;
369
+ try {
370
+ for await (const message of query(
371
+ messages,
372
+ taskPrompt,
373
+ context,
374
+ hasPermissionsToUseTool2,
375
+ {
376
+ abortController,
377
+ messageId: void 0,
378
+ options: {
379
+ safeMode: false,
380
+ tools: agentTools,
381
+ commands: [],
382
+ forkNumber: 0,
383
+ messageLogName,
384
+ verbose: false,
385
+ maxThinkingTokens,
386
+ model: agentModel
387
+ },
388
+ readFileTimestamps: {},
389
+ setToolJSX: () => {
390
+ }
391
+ }
392
+ )) {
393
+ messages.push(message);
394
+ if (message.type !== "assistant") continue;
395
+ if (entry) {
396
+ const unread = entry.mailbox.getUnread(agentId);
397
+ if (unread.length > 0) {
398
+ const {
399
+ formatTeamMessagesForInjection,
400
+ humanizeProtocolMessage
401
+ } = require("../services/agentTeams/messageFormatter");
402
+ const humanized = unread.map((m) => {
403
+ const friendly = humanizeProtocolMessage(m.text);
404
+ return friendly ? { ...m, summary: friendly } : m;
405
+ });
406
+ const deliveryText = formatTeamMessagesForInjection(humanized);
407
+ messages.push(createUserMessage(deliveryText));
408
+ entry.mailbox.markRead(unread.map((m) => m.id));
409
+ }
410
+ }
411
+ turnCount++;
412
+ if (maxTurns && turnCount >= maxTurns) break;
413
+ }
414
+ } catch (error) {
415
+ console.error(
416
+ `[headless-agent] ${agentId} error:`,
417
+ error instanceof Error ? error.message : error
418
+ );
419
+ }
420
+ await markTeammateIdle(teamName, agentId, agentName).catch(() => {
421
+ });
422
+ process.exit(0);
423
+ }
300
424
  async function main() {
301
425
  const configDirsResult = ensureConfigDirs();
302
426
  if (configDirsResult.errors.length > 0) {
@@ -349,7 +473,8 @@ async function main() {
349
473
  }
350
474
  };
351
475
  if (!process.stdin.isTTY && !process.env.CI && // Input hijacking breaks MCP.
352
- !process.argv.includes("mcp")) {
476
+ !process.argv.includes("mcp") && // Headless agents have piped stdin with no writer — reading would block forever.
477
+ !process.env.MINTO_HEADLESS) {
353
478
  inputPrompt = await stdin();
354
479
  if (process.platform !== "win32") {
355
480
  try {
@@ -360,6 +485,10 @@ async function main() {
360
485
  }
361
486
  }
362
487
  }
488
+ if (process.env.MINTO_HEADLESS) {
489
+ await parseArgs(inputPrompt, renderContext, false);
490
+ return;
491
+ }
363
492
  const stdinStream = renderContext?.stdin || process.stdin;
364
493
  const rawModeCheck = validateRawModeSupport(stdinStream);
365
494
  renderContext.rawModeSupported = rawModeCheck.supported;
@@ -392,7 +521,11 @@ async function parseArgs(stdinContent, renderContext, rawModeSupported) {
392
521
 
393
522
  Slash commands available during an interactive session:
394
523
  ${commandList}`
395
- ).argument("[prompt]", "Your prompt", String).option("-c, --cwd <cwd>", "The current working directory", String, cwd()).option("-d, --debug", "Enable debug mode", () => true).option(
524
+ ).argument("[prompt]", "Your prompt", String).option("--cwd <cwd>", "The current working directory", String, cwd()).option(
525
+ "-c, --continue",
526
+ "Load the most recent conversation in the current directory",
527
+ () => true
528
+ ).option("-d, --debug", "Enable debug mode", () => true).option(
396
529
  "--debug-verbose",
397
530
  "Enable verbose debug terminal output",
398
531
  () => true
@@ -406,7 +539,7 @@ ${commandList}`
406
539
  () => true
407
540
  ).option(
408
541
  "--free",
409
- "Enable Free safety mode (project directory operations auto-allowed, outside requires confirmation)",
542
+ "Enable Free safety mode (device-wide full permission, all operations auto-allowed)",
410
543
  () => true
411
544
  ).option(
412
545
  "--smart",
@@ -417,13 +550,9 @@ ${commandList}`
417
550
  "Enable Strict safety mode (all write operations need confirmation)",
418
551
  () => true
419
552
  ).option(
420
- "-n, --new",
421
- "Start a new conversation (skip auto-resume)",
422
- () => true
423
- ).option(
424
- "-r, --resume",
425
- "Select a previous conversation to resume",
426
- () => true
553
+ "-r, --resume [session]",
554
+ "Resume a specific session by ID, or show an interactive picker to choose a session",
555
+ String
427
556
  ).option(
428
557
  "-l, --lang <language>",
429
558
  "Set interface language (en, zh-CN)",
@@ -432,6 +561,50 @@ ${commandList}`
432
561
  "--plugin-dir <dir>",
433
562
  "Additional plugin directory to scan (merged with defaults)",
434
563
  String
564
+ ).option(
565
+ "--teammate-mode <mode>",
566
+ "Teammate display mode: auto, in-process, tmux",
567
+ String
568
+ ).option(
569
+ "--headless-agent",
570
+ "Run as a teammate agent process (internal use)",
571
+ () => true
572
+ ).option("--team <name>", "Team name (used with --headless-agent)", String).option(
573
+ "--agent-id <id>",
574
+ "Agent ID within team (used with --headless-agent)",
575
+ String
576
+ ).option(
577
+ "--agent-name <name>",
578
+ "Agent display name (used with --headless-agent)",
579
+ String
580
+ ).option(
581
+ "--agent-type <type>",
582
+ "Agent type/role (used with --headless-agent)",
583
+ String
584
+ ).option(
585
+ "--max-turns <n>",
586
+ "Maximum API round-trips (used with --headless-agent)",
587
+ parseInt
588
+ ).option(
589
+ "--model <name>",
590
+ "Model to use (used with --headless-agent)",
591
+ String
592
+ ).option(
593
+ "--permission-mode <mode>",
594
+ "Permission mode override (used with --headless-agent)",
595
+ String
596
+ ).option(
597
+ "--plan-mode-required",
598
+ "Force plan mode for this agent (used with --headless-agent)",
599
+ () => true
600
+ ).option(
601
+ "--agent-color <color>",
602
+ "Agent display color (used with --headless-agent)",
603
+ String
604
+ ).option(
605
+ "--parent-session-id <id>",
606
+ "Parent session ID (used with --headless-agent)",
607
+ String
435
608
  ).action(
436
609
  async (prompt, {
437
610
  cwd: cwd2,
@@ -442,11 +615,41 @@ ${commandList}`
442
615
  free,
443
616
  smart,
444
617
  strict,
445
- new: startNew,
446
- resume: selectResume,
618
+ continue: continueSession,
619
+ resume: resumeSession,
447
620
  lang,
448
- pluginDir
621
+ pluginDir,
622
+ teammateMode,
623
+ headlessAgent,
624
+ team: teamName,
625
+ agentId,
626
+ agentName,
627
+ agentType,
628
+ maxTurns,
629
+ model: cliModel,
630
+ permissionMode,
631
+ planModeRequired,
632
+ agentColor,
633
+ parentSessionId
449
634
  }) => {
635
+ if (headlessAgent) {
636
+ await runHeadlessAgent({
637
+ cwd: cwd2,
638
+ teamName,
639
+ agentId,
640
+ agentName,
641
+ agentType,
642
+ prompt: prompt || "",
643
+ maxTurns,
644
+ // CLI args override env var fallbacks (CC-compatible format)
645
+ model: cliModel || process.env.MINTO_AGENT_MODEL,
646
+ permissionMode: permissionMode || process.env.MINTO_AGENT_MODE,
647
+ planModeRequired: planModeRequired || process.env.MINTO_PLAN_MODE_REQUIRED === "1",
648
+ agentColor,
649
+ parentSessionId: parentSessionId || process.env.MINTO_PARENT_SESSION_ID
650
+ });
651
+ return;
652
+ }
450
653
  if (lang && isLanguageSupported(lang)) {
451
654
  setLanguage(lang);
452
655
  }
@@ -456,7 +659,7 @@ ${commandList}`
456
659
  }
457
660
  const envSafetyMode = process.env.MINTO_SAFETY_MODE;
458
661
  const safetyMode = envSafetyMode ? envSafetyMode : strict ? "strict" : smart ? "smart" : free ? "free" : "yolo";
459
- const safeMode = safetyMode !== "yolo";
662
+ const safeMode = safetyMode !== "yolo" && safetyMode !== "free";
460
663
  const inkPromise = import("ink");
461
664
  const replPromise = import("../screens/REPL.js");
462
665
  await showSetupScreens(safeMode, print, rawModeSupported);
@@ -495,10 +698,62 @@ ${commandList}`
495
698
  if (renderContext?.fallbackMode) {
496
699
  requireRawModeOrExit(process.stdin, true);
497
700
  }
498
- if (selectResume) {
701
+ if (resumeSession) {
702
+ if (typeof resumeSession === "string") {
703
+ const logs2 = await loadLogList(CACHE_PATHS.messages());
704
+ const matchedLog = logs2.find(
705
+ (log) => log.date === resumeSession || log.fullPath.includes(resumeSession)
706
+ );
707
+ if (!matchedLog) {
708
+ console.error(
709
+ `Session not found: ${resumeSession}
710
+ Use "minto -r" to see available sessions.`
711
+ );
712
+ process.exit(1);
713
+ }
714
+ const { deserializeMessages } = await import("../utils/conversationRecovery.js");
715
+ const { render: render2 } = await inkPromise;
716
+ const { REPL } = await replPromise;
717
+ await prepareTerminalForREPL();
718
+ render2(
719
+ /* @__PURE__ */ React.createElement(
720
+ REPL,
721
+ {
722
+ commands,
723
+ debug,
724
+ messageLogName: matchedLog.date,
725
+ initialPrompt: "",
726
+ shouldShowPromptInput: true,
727
+ verbose,
728
+ tools,
729
+ safeMode,
730
+ safetyMode,
731
+ mcpClients: [],
732
+ isDefaultModel,
733
+ initialUpdateVersion: null,
734
+ initialUpdateCommands: null,
735
+ enableArchitect: enableArchitect ?? getCurrentProjectConfig().enableArchitectTool,
736
+ fallbackMode: renderContext?.fallbackMode,
737
+ initialMessages: deserializeMessages(
738
+ matchedLog.messages,
739
+ tools
740
+ ),
741
+ initialForkNumber: getNextAvailableLogForkNumber(
742
+ matchedLog.date,
743
+ matchedLog.forkNumber ?? 1,
744
+ 0
745
+ ),
746
+ isResumedConversation: true
747
+ }
748
+ ),
749
+ renderContext
750
+ );
751
+ return;
752
+ }
499
753
  const logs = await loadLogList(CACHE_PATHS.messages());
500
754
  const context2 = {};
501
755
  const { render } = await import("ink");
756
+ const { ResumeConversation } = await import("../screens/ResumeConversation.js");
502
757
  const { unmount } = render(
503
758
  /* @__PURE__ */ React.createElement(
504
759
  ResumeConversation,
@@ -515,8 +770,54 @@ ${commandList}`
515
770
  context2.unmount = unmount;
516
771
  return;
517
772
  }
773
+ if (continueSession) {
774
+ const logs = await loadLogList(CACHE_PATHS.messages());
775
+ const projectLog = logs.find((log) => {
776
+ const firstMsg = log.messages[0];
777
+ return firstMsg?.cwd === cwd2;
778
+ });
779
+ if (projectLog) {
780
+ const { deserializeMessages } = await import("../utils/conversationRecovery.js");
781
+ const { render } = await inkPromise;
782
+ const { REPL } = await replPromise;
783
+ await prepareTerminalForREPL();
784
+ render(
785
+ /* @__PURE__ */ React.createElement(
786
+ REPL,
787
+ {
788
+ commands,
789
+ debug,
790
+ messageLogName: projectLog.date,
791
+ initialPrompt: inputPrompt || "",
792
+ shouldShowPromptInput: true,
793
+ verbose,
794
+ tools,
795
+ safeMode,
796
+ safetyMode,
797
+ mcpClients: [],
798
+ isDefaultModel,
799
+ initialUpdateVersion: null,
800
+ initialUpdateCommands: null,
801
+ enableArchitect: enableArchitect ?? getCurrentProjectConfig().enableArchitectTool,
802
+ fallbackMode: renderContext?.fallbackMode,
803
+ initialMessages: deserializeMessages(
804
+ projectLog.messages,
805
+ tools
806
+ ),
807
+ initialForkNumber: getNextAvailableLogForkNumber(
808
+ projectLog.date,
809
+ projectLog.forkNumber ?? 1,
810
+ 0
811
+ ),
812
+ isResumedConversation: true
813
+ }
814
+ ),
815
+ renderContext
816
+ );
817
+ return;
818
+ }
819
+ }
518
820
  const messageLogName = dateToFilename(/* @__PURE__ */ new Date());
519
- const shouldAutoResume = !startNew && !inputPrompt;
520
821
  {
521
822
  const { render } = await inkPromise;
522
823
  const { REPL } = await replPromise;
@@ -539,8 +840,7 @@ ${commandList}`
539
840
  initialUpdateVersion: null,
540
841
  initialUpdateCommands: null,
541
842
  enableArchitect: enableArchitect ?? getCurrentProjectConfig().enableArchitectTool,
542
- fallbackMode: renderContext?.fallbackMode,
543
- autoResume: shouldAutoResume
843
+ fallbackMode: renderContext?.fallbackMode
544
844
  }
545
845
  ),
546
846
  renderContext
@@ -552,24 +852,24 @@ ${commandList}`
552
852
  const config = program.command("config").description(
553
853
  `Manage configuration (eg. ${PRODUCT_COMMAND} config set -g theme dark)`
554
854
  );
555
- config.command("get <key>").description("Get a config value").option("-c, --cwd <cwd>", "The current working directory", String, cwd()).option("-g, --global", "Use global config").action(async (key, { cwd: cwd2, global }) => {
855
+ config.command("get <key>").description("Get a config value").option("--cwd <cwd>", "The current working directory", String, cwd()).option("-g, --global", "Use global config").action(async (key, { cwd: cwd2, global }) => {
556
856
  await setup(cwd2, false);
557
857
  console.log(getConfigForCLI(key, global ?? false));
558
858
  process.exit(0);
559
859
  });
560
- config.command("set <key> <value>").description("Set a config value").option("-c, --cwd <cwd>", "The current working directory", String, cwd()).option("-g, --global", "Use global config").action(async (key, value, { cwd: cwd2, global }) => {
860
+ config.command("set <key> <value>").description("Set a config value").option("--cwd <cwd>", "The current working directory", String, cwd()).option("-g, --global", "Use global config").action(async (key, value, { cwd: cwd2, global }) => {
561
861
  await setup(cwd2, false);
562
862
  setConfigForCLI(key, value, global ?? false);
563
863
  console.log(`Set ${key} to ${value}`);
564
864
  process.exit(0);
565
865
  });
566
- config.command("remove <key>").description("Remove a config value").option("-c, --cwd <cwd>", "The current working directory", String, cwd()).option("-g, --global", "Use global config").action(async (key, { cwd: cwd2, global }) => {
866
+ config.command("remove <key>").description("Remove a config value").option("--cwd <cwd>", "The current working directory", String, cwd()).option("-g, --global", "Use global config").action(async (key, { cwd: cwd2, global }) => {
567
867
  await setup(cwd2, false);
568
868
  deleteConfigForCLI(key, global ?? false);
569
869
  console.log(`Removed ${key}`);
570
870
  process.exit(0);
571
871
  });
572
- config.command("list").description("List all config values").option("-c, --cwd <cwd>", "The current working directory", String, cwd()).option("-g, --global", "Use global config", false).action(async ({ cwd: cwd2, global }) => {
872
+ config.command("list").description("List all config values").option("--cwd <cwd>", "The current working directory", String, cwd()).option("-g, --global", "Use global config", false).action(async ({ cwd: cwd2, global }) => {
573
873
  await setup(cwd2, false);
574
874
  console.log(
575
875
  JSON.stringify(
@@ -595,6 +895,16 @@ ${commandList}`
595
895
  plugins: shouldInstallPlugins
596
896
  } = options;
597
897
  try {
898
+ const {
899
+ fetchTeamConfig,
900
+ loadTeamConfigFromFile,
901
+ applyTeamConfig,
902
+ addMarketplaces,
903
+ installPlugins,
904
+ installRemoteAgents,
905
+ installInlineAgents,
906
+ installTeamHooks
907
+ } = await import("../utils/teamConfig.js");
598
908
  console.log(`Loading configuration from ${source}...`);
599
909
  const teamConfig = source.startsWith("http://") || source.startsWith("https://") ? await fetchTeamConfig(source) : loadTeamConfigFromFile(source);
600
910
  console.log("Applying configuration...");
@@ -688,13 +998,21 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
688
998
  }
689
999
  }
690
1000
  );
1001
+ program.command("login").description("Login and auto-configure available models").option("-u, --user <user>", "Username").option("-p, --password <password>", "Password").action(async (options) => {
1002
+ await setup(getCwd(), false);
1003
+ const { handleLoginCLI } = await import("../services/mintoAuth.js");
1004
+ await handleLoginCLI(options.user, options.password);
1005
+ process.exit(0);
1006
+ });
691
1007
  const allowedTools = program.command("approved-tools").description("Manage approved tools");
692
1008
  allowedTools.command("list").description("List all approved tools").action(async () => {
1009
+ const { handleListApprovedTools } = await import("../commands/approvedTools.js");
693
1010
  const result = handleListApprovedTools(getCwd());
694
1011
  console.log(result);
695
1012
  process.exit(0);
696
1013
  });
697
1014
  allowedTools.command("remove <tool>").description("Remove a tool from the list of approved tools").action(async (tool) => {
1015
+ const { handleRemoveApprovedTool } = await import("../commands/approvedTools.js");
698
1016
  const result = handleRemoveApprovedTool(tool);
699
1017
  console.log(result.message);
700
1018
  process.exit(result.success ? 0 : 1);
@@ -708,6 +1026,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
708
1026
  }
709
1027
  try {
710
1028
  await setup(providedCwd, false);
1029
+ const { startMCPServer } = await import("./mcp.js");
711
1030
  await startMCPServer(providedCwd);
712
1031
  } catch (error) {
713
1032
  console.error("Error: Failed to start MCP server:", error);
@@ -720,6 +1039,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
720
1039
  "project"
721
1040
  ).action(async (name, url, options) => {
722
1041
  try {
1042
+ const { addMcpServer, ensureConfigScope } = await import("../services/mcpClient.js");
723
1043
  const scope = ensureConfigScope(options.scope);
724
1044
  addMcpServer(name, { type: "sse", url }, scope);
725
1045
  console.log(
@@ -740,6 +1060,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
740
1060
  "Set environment variables (e.g. -e KEY=value)"
741
1061
  ).action(async (name, commandOrUrl, args, options) => {
742
1062
  try {
1063
+ const { addMcpServer, parseEnvVars, ensureConfigScope } = await import("../services/mcpClient.js");
743
1064
  if (!name) {
744
1065
  console.log("Interactive wizard mode: Enter the server details");
745
1066
  const { createInterface } = await import("readline");
@@ -847,6 +1168,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
847
1168
  "project"
848
1169
  ).action(async (name, options) => {
849
1170
  try {
1171
+ const { removeMcpServer, ensureConfigScope } = await import("../services/mcpClient.js");
850
1172
  const scope = ensureConfigScope(options.scope);
851
1173
  removeMcpServer(name, scope);
852
1174
  console.log(`Removed MCP server ${name} from ${scope} config`);
@@ -856,7 +1178,8 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
856
1178
  process.exit(1);
857
1179
  }
858
1180
  });
859
- mcp.command("list").description("List configured MCP servers").action(() => {
1181
+ mcp.command("list").description("List configured MCP servers").action(async () => {
1182
+ const { listMCPServers } = await import("../services/mcpClient.js");
860
1183
  const servers = listMCPServers();
861
1184
  if (Object.keys(servers).length === 0) {
862
1185
  console.log(
@@ -883,6 +1206,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
883
1206
  "project"
884
1207
  ).action(async (name, jsonStr, options) => {
885
1208
  try {
1209
+ const { addMcpServer, ensureConfigScope } = await import("../services/mcpClient.js");
886
1210
  const scope = ensureConfigScope(options.scope);
887
1211
  let serverConfig;
888
1212
  try {
@@ -919,7 +1243,8 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
919
1243
  process.exit(1);
920
1244
  }
921
1245
  });
922
- mcp.command("get <name>").description("Get details about an MCP server").action((name) => {
1246
+ mcp.command("get <name>").description("Get details about an MCP server").action(async (name) => {
1247
+ const { getMcpServer } = await import("../services/mcpClient.js");
923
1248
  const server = getMcpServer(name);
924
1249
  if (!server) {
925
1250
  console.error(`No MCP server found with name: ${name}`);
@@ -954,6 +1279,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
954
1279
  "project"
955
1280
  ).action(async (options) => {
956
1281
  try {
1282
+ const { addMcpServer, getMcpServer, ensureConfigScope } = await import("../services/mcpClient.js");
957
1283
  const scope = ensureConfigScope(options.scope);
958
1284
  const platform = process.platform;
959
1285
  const { existsSync: existsSync2, readFileSync } = await import("fs");
@@ -1163,6 +1489,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
1163
1489
  program.command("update").description("Show manual upgrade commands (no auto-install)").action(async () => {
1164
1490
  console.log(`Current version: ${MACRO.VERSION}`);
1165
1491
  console.log("Checking for updates...");
1492
+ const { getLatestVersion } = await import("../utils/autoUpdater.js");
1166
1493
  const latestVersion = await getLatestVersion();
1167
1494
  if (!latestVersion) {
1168
1495
  console.error("Failed to check for updates");
@@ -1173,8 +1500,8 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
1173
1500
  process.exit(0);
1174
1501
  }
1175
1502
  console.log(`New version available: ${latestVersion}`);
1176
- const { getUpdateCommandSuggestions: getUpdateCommandSuggestions2 } = await import("../utils/autoUpdater.js");
1177
- const cmds = await getUpdateCommandSuggestions2();
1503
+ const { getUpdateCommandSuggestions } = await import("../utils/autoUpdater.js");
1504
+ const cmds = await getUpdateCommandSuggestions();
1178
1505
  console.log("\nRun one of the following commands to update:");
1179
1506
  for (const c of cmds) console.log(` ${c}`);
1180
1507
  if (process.platform !== "win32") {
@@ -1188,11 +1515,12 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
1188
1515
  "[number]",
1189
1516
  "A number (0, 1, 2, etc.) to display a specific log",
1190
1517
  parseInt
1191
- ).option("-c, --cwd <cwd>", "The current working directory", String, cwd()).action(async (number, { cwd: cwd2 }) => {
1518
+ ).option("--cwd <cwd>", "The current working directory", String, cwd()).action(async (number, { cwd: cwd2 }) => {
1192
1519
  await setup(cwd2, false);
1193
1520
  const context2 = {};
1194
1521
  (async () => {
1195
1522
  const { render } = await import("ink");
1523
+ const { LogList } = await import("../screens/LogList.js");
1196
1524
  const { unmount } = render(
1197
1525
  /* @__PURE__ */ React.createElement(LogList, { context: context2, type: "messages", logNumber: number }),
1198
1526
  renderContextWithExitOnCtrlC
@@ -1205,9 +1533,9 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
1205
1533
  ).argument(
1206
1534
  "[identifier]",
1207
1535
  "A number (0, 1, 2, etc.) or file path to resume a specific conversation"
1208
- ).option("-c, --cwd <cwd>", "The current working directory", String, cwd()).option("-e, --enable-architect", "Enable the Architect tool", () => true).option("-v, --verbose", "Do not truncate message output", () => true).option(
1536
+ ).option("--cwd <cwd>", "The current working directory", String, cwd()).option("-e, --enable-architect", "Enable the Architect tool", () => true).option("-v, --verbose", "Do not truncate message output", () => true).option(
1209
1537
  "--free",
1210
- "Enable Free safety mode (project directory operations auto-allowed, outside requires confirmation)",
1538
+ "Enable Free safety mode (device-wide full permission, all operations auto-allowed)",
1211
1539
  () => true
1212
1540
  ).option(
1213
1541
  "--smart",
@@ -1221,9 +1549,10 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
1221
1549
  async (identifier, { cwd: cwd2, enableArchitect, free, smart, strict, verbose }) => {
1222
1550
  const envSafetyMode = process.env.MINTO_SAFETY_MODE;
1223
1551
  const safetyMode = envSafetyMode ? envSafetyMode : strict ? "strict" : smart ? "smart" : free ? "free" : "yolo";
1224
- const safeMode = safetyMode !== "yolo";
1552
+ const safeMode = safetyMode !== "yolo" && safetyMode !== "free";
1225
1553
  await setup(cwd2, safeMode);
1226
1554
  assertMinVersion();
1555
+ const { getClients } = await import("../services/mcpClient.js");
1227
1556
  const [tools, commands2, logs, mcpClients] = await Promise.all([
1228
1557
  getTools(
1229
1558
  enableArchitect ?? getCurrentProjectConfig().enableArchitectTool
@@ -1295,6 +1624,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
1295
1624
  const context2 = {};
1296
1625
  (async () => {
1297
1626
  const { render } = await import("ink");
1627
+ const { ResumeConversation } = await import("../screens/ResumeConversation.js");
1298
1628
  const { unmount } = render(
1299
1629
  /* @__PURE__ */ React.createElement(
1300
1630
  ResumeConversation,
@@ -1319,11 +1649,12 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
1319
1649
  "[number]",
1320
1650
  "A number (0, 1, 2, etc.) to display a specific log",
1321
1651
  parseInt
1322
- ).option("-c, --cwd <cwd>", "The current working directory", String, cwd()).action(async (number, { cwd: cwd2 }) => {
1652
+ ).option("--cwd <cwd>", "The current working directory", String, cwd()).action(async (number, { cwd: cwd2 }) => {
1323
1653
  await setup(cwd2, false);
1324
1654
  const context2 = {};
1325
1655
  (async () => {
1326
1656
  const { render } = await import("ink");
1657
+ const { LogList } = await import("../screens/LogList.js");
1327
1658
  const { unmount } = render(
1328
1659
  /* @__PURE__ */ React.createElement(LogList, { context: context2, type: "errors", logNumber: number }),
1329
1660
  renderContextWithExitOnCtrlC
@@ -1334,7 +1665,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
1334
1665
  const context = program.command("context").description(
1335
1666
  `Set static context (eg. ${PRODUCT_COMMAND} context add-file ./src/*.py)`
1336
1667
  );
1337
- context.command("get <key>").option("-c, --cwd <cwd>", "The current working directory", String, cwd()).description("Get a value from context").action(async (key, { cwd: cwd2 }) => {
1668
+ context.command("get <key>").option("--cwd <cwd>", "The current working directory", String, cwd()).description("Get a value from context").action(async (key, { cwd: cwd2 }) => {
1338
1669
  await setup(cwd2, false);
1339
1670
  const context2 = omit(
1340
1671
  await getContext(),
@@ -1344,13 +1675,13 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
1344
1675
  console.log(context2[key]);
1345
1676
  process.exit(0);
1346
1677
  });
1347
- context.command("set <key> <value>").description("Set a value in context").option("-c, --cwd <cwd>", "The current working directory", String, cwd()).action(async (key, value, { cwd: cwd2 }) => {
1678
+ context.command("set <key> <value>").description("Set a value in context").option("--cwd <cwd>", "The current working directory", String, cwd()).action(async (key, value, { cwd: cwd2 }) => {
1348
1679
  await setup(cwd2, false);
1349
1680
  setContext(key, value);
1350
1681
  console.log(`Set context.${key} to "${value}"`);
1351
1682
  process.exit(0);
1352
1683
  });
1353
- context.command("list").description("List all context values").option("-c, --cwd <cwd>", "The current working directory", String, cwd()).action(async ({ cwd: cwd2 }) => {
1684
+ context.command("list").description("List all context values").option("--cwd <cwd>", "The current working directory", String, cwd()).action(async ({ cwd: cwd2 }) => {
1354
1685
  await setup(cwd2, false);
1355
1686
  const context2 = omit(
1356
1687
  await getContext(),
@@ -1361,7 +1692,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
1361
1692
  console.log(JSON.stringify(context2, null, 2));
1362
1693
  process.exit(0);
1363
1694
  });
1364
- context.command("remove <key>").description("Remove a value from context").option("-c, --cwd <cwd>", "The current working directory", String, cwd()).action(async (key, { cwd: cwd2 }) => {
1695
+ context.command("remove <key>").description("Remove a value from context").option("--cwd <cwd>", "The current working directory", String, cwd()).action(async (key, { cwd: cwd2 }) => {
1365
1696
  await setup(cwd2, false);
1366
1697
  removeContext(key);
1367
1698
  console.log(`Removed context.${key}`);