@within-7/minto 0.1.7 → 0.2.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 (481) 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 +52 -26
  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 +84 -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 +156 -0
  22. package/dist/commands/export.js.map +7 -0
  23. package/dist/commands/mcp-interactive.js +21 -12
  24. package/dist/commands/mcp-interactive.js.map +2 -2
  25. package/dist/commands/model.js +6 -5
  26. package/dist/commands/model.js.map +2 -2
  27. package/dist/commands/permissions.js +86 -0
  28. package/dist/commands/permissions.js.map +7 -0
  29. package/dist/commands/quit.js +3 -1
  30. package/dist/commands/quit.js.map +2 -2
  31. package/dist/commands/sandbox.js +104 -0
  32. package/dist/commands/sandbox.js.map +7 -0
  33. package/dist/commands/status.js +58 -0
  34. package/dist/commands/status.js.map +7 -0
  35. package/dist/commands/tasks.js +108 -0
  36. package/dist/commands/tasks.js.map +7 -0
  37. package/dist/commands/todos.js +123 -0
  38. package/dist/commands/todos.js.map +7 -0
  39. package/dist/commands.js +20 -2
  40. package/dist/commands.js.map +2 -2
  41. package/dist/components/AgentThinkingBlock.js +10 -18
  42. package/dist/components/AgentThinkingBlock.js.map +2 -2
  43. package/dist/components/BackgroundTasksPanel.js +78 -29
  44. package/dist/components/BackgroundTasksPanel.js.map +2 -2
  45. package/dist/components/BashStreamingProgress.js +24 -0
  46. package/dist/components/BashStreamingProgress.js.map +7 -0
  47. package/dist/components/CollapsibleHint.js +14 -0
  48. package/dist/components/CollapsibleHint.js.map +7 -0
  49. package/dist/components/FileEditToolUpdatedMessage.js +1 -1
  50. package/dist/components/FileEditToolUpdatedMessage.js.map +2 -2
  51. package/dist/components/HotkeyHelpPanel.js +137 -0
  52. package/dist/components/HotkeyHelpPanel.js.map +7 -0
  53. package/dist/components/Logo.js +5 -5
  54. package/dist/components/Logo.js.map +2 -2
  55. package/dist/components/Message.js +23 -7
  56. package/dist/components/Message.js.map +3 -3
  57. package/dist/components/ModelConfig.js +16 -3
  58. package/dist/components/ModelConfig.js.map +2 -2
  59. package/dist/components/ModelListManager.js +3 -3
  60. package/dist/components/ModelListManager.js.map +2 -2
  61. package/dist/components/ModelSelector/ModelSelector.js +1 -1
  62. package/dist/components/Onboarding.js +19 -14
  63. package/dist/components/Onboarding.js.map +2 -2
  64. package/dist/components/ProgressBar.js +74 -0
  65. package/dist/components/ProgressBar.js.map +7 -0
  66. package/dist/components/PromptInput.js +156 -46
  67. package/dist/components/PromptInput.js.map +2 -2
  68. package/dist/components/RequestStatusIndicator.js +194 -0
  69. package/dist/components/RequestStatusIndicator.js.map +7 -0
  70. package/dist/components/Spinner.js +92 -27
  71. package/dist/components/Spinner.js.map +2 -2
  72. package/dist/components/SpinnerSymbol.js +21 -27
  73. package/dist/components/SpinnerSymbol.js.map +2 -2
  74. package/dist/components/StreamingBashOutput.js +9 -8
  75. package/dist/components/StreamingBashOutput.js.map +2 -2
  76. package/dist/components/SubagentBlock.js +1 -1
  77. package/dist/components/SubagentBlock.js.map +1 -1
  78. package/dist/components/SubagentProgress.js +10 -11
  79. package/dist/components/SubagentProgress.js.map +2 -2
  80. package/dist/components/TaskCard.js +16 -13
  81. package/dist/components/TaskCard.js.map +2 -2
  82. package/dist/components/TodoChangeBlock.js +1 -1
  83. package/dist/components/TodoChangeBlock.js.map +2 -2
  84. package/dist/components/TodoPanel.js +120 -29
  85. package/dist/components/TodoPanel.js.map +3 -3
  86. package/dist/components/TokenCounter.js +74 -0
  87. package/dist/components/TokenCounter.js.map +7 -0
  88. package/dist/components/TokenWarning.js +2 -1
  89. package/dist/components/TokenWarning.js.map +2 -2
  90. package/dist/components/TreeConnector.js +25 -0
  91. package/dist/components/TreeConnector.js.map +7 -0
  92. package/dist/components/TurnCompletionIndicator.js +18 -0
  93. package/dist/components/TurnCompletionIndicator.js.map +7 -0
  94. package/dist/components/messages/AssistantTextMessage.js +5 -2
  95. package/dist/components/messages/AssistantTextMessage.js.map +2 -2
  96. package/dist/components/messages/AssistantThinkingMessage.js +18 -3
  97. package/dist/components/messages/AssistantThinkingMessage.js.map +2 -2
  98. package/dist/components/messages/AssistantToolUseMessage.js +11 -8
  99. package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
  100. package/dist/components/messages/GroupRenderer.js +53 -0
  101. package/dist/components/messages/GroupRenderer.js.map +7 -0
  102. package/dist/components/messages/NestedTasksPreview.js +12 -0
  103. package/dist/components/messages/NestedTasksPreview.js.map +7 -0
  104. package/dist/components/messages/ParallelTasksGroupView.js +92 -0
  105. package/dist/components/messages/ParallelTasksGroupView.js.map +7 -0
  106. package/dist/components/messages/TaskInModuleView.js +198 -0
  107. package/dist/components/messages/TaskInModuleView.js.map +7 -0
  108. package/dist/components/messages/TaskOutputContent.js +53 -0
  109. package/dist/components/messages/TaskOutputContent.js.map +7 -0
  110. package/dist/components/messages/UserPromptMessage.js +1 -1
  111. package/dist/components/messages/UserPromptMessage.js.map +2 -2
  112. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +2 -3
  113. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +2 -2
  114. package/dist/components/permissions/FallbackPermissionRequest.js +4 -4
  115. package/dist/components/permissions/FallbackPermissionRequest.js.map +2 -2
  116. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +4 -4
  117. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +2 -2
  118. package/dist/constants/colors.js +48 -0
  119. package/dist/constants/colors.js.map +2 -2
  120. package/dist/constants/formatRules.js +102 -0
  121. package/dist/constants/formatRules.js.map +7 -0
  122. package/dist/constants/prompts.js +12 -34
  123. package/dist/constants/prompts.js.map +2 -2
  124. package/dist/constants/symbols.js +64 -6
  125. package/dist/constants/symbols.js.map +2 -2
  126. package/dist/constants/timing.js +5 -0
  127. package/dist/constants/timing.js.map +2 -2
  128. package/dist/core/config/defaults.js +84 -0
  129. package/dist/core/config/defaults.js.map +7 -0
  130. package/dist/core/config/index.js +111 -0
  131. package/dist/core/config/index.js.map +7 -0
  132. package/dist/core/config/loader.js +221 -0
  133. package/dist/core/config/loader.js.map +7 -0
  134. package/dist/core/config/migrations.js +128 -0
  135. package/dist/core/config/migrations.js.map +7 -0
  136. package/dist/core/config/schema.js +178 -0
  137. package/dist/core/config/schema.js.map +7 -0
  138. package/dist/core/costTracker.js +138 -0
  139. package/dist/core/costTracker.js.map +7 -0
  140. package/dist/core/index.js +5 -0
  141. package/dist/core/index.js.map +7 -0
  142. package/dist/core/permissions/auditLog.js +204 -0
  143. package/dist/core/permissions/auditLog.js.map +7 -0
  144. package/dist/core/permissions/engine/index.js +3 -0
  145. package/dist/core/permissions/engine/index.js.map +7 -0
  146. package/dist/core/permissions/engine/permissionEngine.js +106 -0
  147. package/dist/core/permissions/engine/permissionEngine.js.map +7 -0
  148. package/dist/core/permissions/engine/types.js +1 -0
  149. package/dist/core/permissions/engine/types.js.map +7 -0
  150. package/dist/core/permissions/index.js +84 -0
  151. package/dist/core/permissions/index.js.map +7 -0
  152. package/dist/core/permissions/ruleEngine.js +259 -0
  153. package/dist/core/permissions/ruleEngine.js.map +7 -0
  154. package/dist/core/permissions/rules/allowedToolsRule.js +62 -0
  155. package/dist/core/permissions/rules/allowedToolsRule.js.map +7 -0
  156. package/dist/core/permissions/rules/autoEscalationRule.js +291 -0
  157. package/dist/core/permissions/rules/autoEscalationRule.js.map +7 -0
  158. package/dist/core/permissions/rules/index.js +46 -0
  159. package/dist/core/permissions/rules/index.js.map +7 -0
  160. package/dist/core/permissions/rules/planModeRule.js +55 -0
  161. package/dist/core/permissions/rules/planModeRule.js.map +7 -0
  162. package/dist/core/permissions/rules/projectBoundaryRule.js +168 -0
  163. package/dist/core/permissions/rules/projectBoundaryRule.js.map +7 -0
  164. package/dist/core/permissions/rules/safeModeRule.js +65 -0
  165. package/dist/core/permissions/rules/safeModeRule.js.map +7 -0
  166. package/dist/core/permissions/rules/sensitivePathsRule.js +340 -0
  167. package/dist/core/permissions/rules/sensitivePathsRule.js.map +7 -0
  168. package/dist/core/permissions/types.js +127 -0
  169. package/dist/core/permissions/types.js.map +7 -0
  170. package/dist/core/tools/executor.js +143 -0
  171. package/dist/core/tools/executor.js.map +7 -0
  172. package/dist/core/tools/index.js +15 -0
  173. package/dist/core/tools/index.js.map +7 -0
  174. package/dist/core/tools/registry.js +183 -0
  175. package/dist/core/tools/registry.js.map +7 -0
  176. package/dist/core/tools/types.js +1 -0
  177. package/dist/core/tools/types.js.map +7 -0
  178. package/dist/cost-tracker.js +23 -15
  179. package/dist/cost-tracker.js.map +2 -2
  180. package/dist/entrypoints/cli.js +43 -43
  181. package/dist/entrypoints/cli.js.map +2 -2
  182. package/dist/entrypoints/mcp.js +12 -4
  183. package/dist/entrypoints/mcp.js.map +2 -2
  184. package/dist/history.js +14 -3
  185. package/dist/history.js.map +2 -2
  186. package/dist/hooks/useAgentTranscripts.js +116 -0
  187. package/dist/hooks/useAgentTranscripts.js.map +7 -0
  188. package/dist/hooks/useAnimationSync.js +53 -0
  189. package/dist/hooks/useAnimationSync.js.map +7 -0
  190. package/dist/hooks/useArrowKeyHistory.js +4 -2
  191. package/dist/hooks/useArrowKeyHistory.js.map +2 -2
  192. package/dist/hooks/useCanUseTool.js +3 -1
  193. package/dist/hooks/useCanUseTool.js.map +2 -2
  194. package/dist/hooks/useCancelRequest.js +4 -1
  195. package/dist/hooks/useCancelRequest.js.map +2 -2
  196. package/dist/hooks/useExitOnCtrlCD.js +9 -5
  197. package/dist/hooks/useExitOnCtrlCD.js.map +2 -2
  198. package/dist/hooks/useHookStatus.js +40 -0
  199. package/dist/hooks/useHookStatus.js.map +7 -0
  200. package/dist/hooks/useLogMessages.js +17 -1
  201. package/dist/hooks/useLogMessages.js.map +2 -2
  202. package/dist/hooks/useMessageGroups.js +43 -0
  203. package/dist/hooks/useMessageGroups.js.map +7 -0
  204. package/dist/hooks/useTerminalSize.js +62 -6
  205. package/dist/hooks/useTerminalSize.js.map +2 -2
  206. package/dist/hooks/useUnifiedCompletion.js +69 -0
  207. package/dist/hooks/useUnifiedCompletion.js.map +2 -2
  208. package/dist/i18n/index.js +109 -0
  209. package/dist/i18n/index.js.map +7 -0
  210. package/dist/i18n/locales/en.js +347 -0
  211. package/dist/i18n/locales/en.js.map +7 -0
  212. package/dist/i18n/locales/index.js +7 -0
  213. package/dist/i18n/locales/index.js.map +7 -0
  214. package/dist/i18n/locales/zh-CN.js +347 -0
  215. package/dist/i18n/locales/zh-CN.js.map +7 -0
  216. package/dist/i18n/types.js +8 -0
  217. package/dist/i18n/types.js.map +7 -0
  218. package/dist/query.js +175 -17
  219. package/dist/query.js.map +3 -3
  220. package/dist/screens/REPL.js +501 -192
  221. package/dist/screens/REPL.js.map +3 -3
  222. package/dist/services/adapters/chatCompletions.js +3 -1
  223. package/dist/services/adapters/chatCompletions.js.map +2 -2
  224. package/dist/services/adapters/messageNormalizer.js +354 -0
  225. package/dist/services/adapters/messageNormalizer.js.map +7 -0
  226. package/dist/services/adapters/responsesAPI.js +6 -3
  227. package/dist/services/adapters/responsesAPI.js.map +2 -2
  228. package/dist/services/checkpointManager.js +386 -0
  229. package/dist/services/checkpointManager.js.map +7 -0
  230. package/dist/services/claude.js +138 -11
  231. package/dist/services/claude.js.map +3 -3
  232. package/dist/services/compressionService.js +50 -1
  233. package/dist/services/compressionService.js.map +2 -2
  234. package/dist/services/contextMonitor.js +162 -0
  235. package/dist/services/contextMonitor.js.map +7 -0
  236. package/dist/services/customCommands.js +60 -41
  237. package/dist/services/customCommands.js.map +2 -2
  238. package/dist/services/hookExecutor.js +173 -1
  239. package/dist/services/hookExecutor.js.map +2 -2
  240. package/dist/services/intelligentCompactor.js +281 -0
  241. package/dist/services/intelligentCompactor.js.map +7 -0
  242. package/dist/services/lspConfig.js +109 -0
  243. package/dist/services/lspConfig.js.map +7 -0
  244. package/dist/services/mcpClient.js +273 -34
  245. package/dist/services/mcpClient.js.map +2 -2
  246. package/dist/services/modelOrchestrator.js +310 -0
  247. package/dist/services/modelOrchestrator.js.map +7 -0
  248. package/dist/services/openai.js +8 -1
  249. package/dist/services/openai.js.map +2 -2
  250. package/dist/services/outputStyles.js +138 -0
  251. package/dist/services/outputStyles.js.map +7 -0
  252. package/dist/services/plugins/index.js +5 -0
  253. package/dist/services/plugins/index.js.map +7 -0
  254. package/dist/services/plugins/lspServers.js +188 -0
  255. package/dist/services/plugins/lspServers.js.map +7 -0
  256. package/dist/services/plugins/pluginRuntime.js +229 -0
  257. package/dist/services/plugins/pluginRuntime.js.map +7 -0
  258. package/dist/services/plugins/pluginValidation.js +219 -0
  259. package/dist/services/plugins/pluginValidation.js.map +7 -0
  260. package/dist/services/plugins/skillMarketplace.js +556 -0
  261. package/dist/services/plugins/skillMarketplace.js.map +7 -0
  262. package/dist/services/responseStateManager.js +37 -3
  263. package/dist/services/responseStateManager.js.map +2 -2
  264. package/dist/services/sandbox/filesystemBoundary.js +300 -0
  265. package/dist/services/sandbox/filesystemBoundary.js.map +7 -0
  266. package/dist/services/sandbox/index.js +14 -0
  267. package/dist/services/sandbox/index.js.map +7 -0
  268. package/dist/services/sandbox/networkProxy.js +293 -0
  269. package/dist/services/sandbox/networkProxy.js.map +7 -0
  270. package/dist/services/sandbox/sandboxController.js +574 -0
  271. package/dist/services/sandbox/sandboxController.js.map +7 -0
  272. package/dist/services/sandbox/types.js +50 -0
  273. package/dist/services/sandbox/types.js.map +7 -0
  274. package/dist/services/sessionMemory.js +266 -0
  275. package/dist/services/sessionMemory.js.map +7 -0
  276. package/dist/services/taskRouter.js +324 -0
  277. package/dist/services/taskRouter.js.map +7 -0
  278. package/dist/tools/ArchitectTool/ArchitectTool.js +7 -1
  279. package/dist/tools/ArchitectTool/ArchitectTool.js.map +2 -2
  280. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +3 -0
  281. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
  282. package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js.map +2 -2
  283. package/dist/tools/BaseTool.js +72 -0
  284. package/dist/tools/BaseTool.js.map +7 -0
  285. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js +3 -0
  286. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js.map +2 -2
  287. package/dist/tools/BashTool/BashTool.js +60 -3
  288. package/dist/tools/BashTool/BashTool.js.map +2 -2
  289. package/dist/tools/BashTool/BashToolResultMessage.js +3 -0
  290. package/dist/tools/BashTool/BashToolResultMessage.js.map +2 -2
  291. package/dist/tools/BashTool/OutputLine.js +54 -0
  292. package/dist/tools/BashTool/OutputLine.js.map +2 -2
  293. package/dist/tools/BashTool/prompt.js +192 -3
  294. package/dist/tools/BashTool/prompt.js.map +2 -2
  295. package/dist/tools/FileEditTool/FileEditTool.js +29 -4
  296. package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
  297. package/dist/tools/FileWriteTool/FileWriteTool.js +5 -5
  298. package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
  299. package/dist/tools/GlobTool/GlobTool.js +4 -2
  300. package/dist/tools/GlobTool/GlobTool.js.map +2 -2
  301. package/dist/tools/GrepTool/GrepTool.js +36 -7
  302. package/dist/tools/GrepTool/GrepTool.js.map +2 -2
  303. package/dist/tools/KillShellTool/KillShellToolResultMessage.js +3 -0
  304. package/dist/tools/KillShellTool/KillShellToolResultMessage.js.map +2 -2
  305. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js +109 -0
  306. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +7 -0
  307. package/dist/tools/ListMcpResourcesTool/prompt.js +19 -0
  308. package/dist/tools/ListMcpResourcesTool/prompt.js.map +7 -0
  309. package/dist/tools/LspTool/LspTool.js +664 -0
  310. package/dist/tools/LspTool/LspTool.js.map +7 -0
  311. package/dist/tools/LspTool/prompt.js +27 -0
  312. package/dist/tools/LspTool/prompt.js.map +7 -0
  313. package/dist/tools/MCPTool/MCPTool.js +9 -1
  314. package/dist/tools/MCPTool/MCPTool.js.map +2 -2
  315. package/dist/tools/MemoryReadTool/MemoryReadTool.js +19 -6
  316. package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +2 -2
  317. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +6 -6
  318. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +2 -2
  319. package/dist/tools/MultiEditTool/MultiEditTool.js +19 -2
  320. package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
  321. package/dist/tools/NotebookEditTool/NotebookEditTool.js +5 -1
  322. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
  323. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +2 -2
  324. package/dist/tools/PlanModeTool/EnterPlanModeTool.js +74 -0
  325. package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +7 -0
  326. package/dist/tools/PlanModeTool/ExitPlanModeTool.js +108 -0
  327. package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +7 -0
  328. package/dist/tools/PlanModeTool/prompt.js +94 -0
  329. package/dist/tools/PlanModeTool/prompt.js.map +7 -0
  330. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js +130 -0
  331. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js.map +7 -0
  332. package/dist/tools/ReadMcpResourceTool/prompt.js +17 -0
  333. package/dist/tools/ReadMcpResourceTool/prompt.js.map +7 -0
  334. package/dist/tools/SkillTool/SkillTool.js +6 -1
  335. package/dist/tools/SkillTool/SkillTool.js.map +2 -2
  336. package/dist/tools/SlashCommandTool/SlashCommandTool.js +260 -0
  337. package/dist/tools/SlashCommandTool/SlashCommandTool.js.map +7 -0
  338. package/dist/tools/SlashCommandTool/prompt.js +35 -0
  339. package/dist/tools/SlashCommandTool/prompt.js.map +7 -0
  340. package/dist/tools/TaskOutputTool/TaskOutputTool.js +189 -0
  341. package/dist/tools/TaskOutputTool/TaskOutputTool.js.map +7 -0
  342. package/dist/tools/TaskOutputTool/prompt.js +15 -0
  343. package/dist/tools/TaskOutputTool/prompt.js.map +7 -0
  344. package/dist/tools/TaskTool/TaskTool.js +302 -104
  345. package/dist/tools/TaskTool/TaskTool.js.map +2 -2
  346. package/dist/tools/TaskTool/prompt.js.map +2 -2
  347. package/dist/tools/TodoWriteTool/TodoWriteTool.js +42 -77
  348. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +2 -2
  349. package/dist/tools/URLFetcherTool/URLFetcherTool.js +4 -1
  350. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
  351. package/dist/tools/URLFetcherTool/cache.js +55 -8
  352. package/dist/tools/URLFetcherTool/cache.js.map +2 -2
  353. package/dist/tools.js +31 -2
  354. package/dist/tools.js.map +2 -2
  355. package/dist/types/hooks.js +4 -0
  356. package/dist/types/hooks.js.map +2 -2
  357. package/dist/types/marketplace.js.map +2 -2
  358. package/dist/types/messageGroup.js +36 -0
  359. package/dist/types/messageGroup.js.map +7 -0
  360. package/dist/types/plugin.js.map +2 -2
  361. package/dist/types/thinking.js +1 -0
  362. package/dist/types/thinking.js.map +7 -0
  363. package/dist/utils/BackgroundShellManager.js +136 -39
  364. package/dist/utils/BackgroundShellManager.js.map +2 -2
  365. package/dist/utils/MessageBatchBuffer.js +102 -0
  366. package/dist/utils/MessageBatchBuffer.js.map +7 -0
  367. package/dist/utils/PersistentShell.js +151 -1
  368. package/dist/utils/PersistentShell.js.map +2 -2
  369. package/dist/utils/agentLoader.js +1 -23
  370. package/dist/utils/agentLoader.js.map +2 -2
  371. package/dist/utils/agentTranscripts.js +641 -0
  372. package/dist/utils/agentTranscripts.js.map +7 -0
  373. package/dist/utils/animationManager.js +213 -0
  374. package/dist/utils/animationManager.js.map +7 -0
  375. package/dist/utils/animationSync.js +110 -0
  376. package/dist/utils/animationSync.js.map +7 -0
  377. package/dist/utils/asyncFile.js +215 -0
  378. package/dist/utils/asyncFile.js.map +7 -0
  379. package/dist/utils/backgroundAgentManager.js +231 -0
  380. package/dist/utils/backgroundAgentManager.js.map +7 -0
  381. package/dist/utils/config.js +63 -7
  382. package/dist/utils/config.js.map +2 -2
  383. package/dist/utils/conversationRecovery.js +19 -0
  384. package/dist/utils/conversationRecovery.js.map +2 -2
  385. package/dist/utils/exit.js +73 -0
  386. package/dist/utils/exit.js.map +7 -0
  387. package/dist/utils/format.js +73 -5
  388. package/dist/utils/format.js.map +2 -2
  389. package/dist/utils/generators.js +76 -6
  390. package/dist/utils/generators.js.map +2 -2
  391. package/dist/utils/globalErrorHandler.js +149 -0
  392. package/dist/utils/globalErrorHandler.js.map +7 -0
  393. package/dist/utils/groupHandlers/index.js +8 -0
  394. package/dist/utils/groupHandlers/index.js.map +7 -0
  395. package/dist/utils/groupHandlers/parallelTasksHandler.js +140 -0
  396. package/dist/utils/groupHandlers/parallelTasksHandler.js.map +7 -0
  397. package/dist/utils/groupHandlers/taskHandler.js +104 -0
  398. package/dist/utils/groupHandlers/taskHandler.js.map +7 -0
  399. package/dist/utils/groupHandlers/types.js +1 -0
  400. package/dist/utils/groupHandlers/types.js.map +7 -0
  401. package/dist/utils/logRotation.js +224 -0
  402. package/dist/utils/logRotation.js.map +7 -0
  403. package/dist/utils/marketplaceManager.js +3 -5
  404. package/dist/utils/marketplaceManager.js.map +2 -2
  405. package/dist/utils/memSafety.js +264 -0
  406. package/dist/utils/memSafety.js.map +7 -0
  407. package/dist/utils/messageGroupManager.js +274 -0
  408. package/dist/utils/messageGroupManager.js.map +7 -0
  409. package/dist/utils/messages.js +13 -4
  410. package/dist/utils/messages.js.map +2 -2
  411. package/dist/utils/model.js +119 -15
  412. package/dist/utils/model.js.map +3 -3
  413. package/dist/utils/permissions/filesystem.js +157 -5
  414. package/dist/utils/permissions/filesystem.js.map +2 -2
  415. package/dist/utils/plan/planMode.js +143 -0
  416. package/dist/utils/plan/planMode.js.map +7 -0
  417. package/dist/utils/pluginLoader.js +17 -21
  418. package/dist/utils/pluginLoader.js.map +2 -2
  419. package/dist/utils/ripgrep.js +55 -2
  420. package/dist/utils/ripgrep.js.map +2 -2
  421. package/dist/utils/sanitizeInput.js +32 -0
  422. package/dist/utils/sanitizeInput.js.map +7 -0
  423. package/dist/utils/secureKeyStorage.js +312 -0
  424. package/dist/utils/secureKeyStorage.js.map +7 -0
  425. package/dist/utils/session/sessionPlugins.js +67 -0
  426. package/dist/utils/session/sessionPlugins.js.map +7 -0
  427. package/dist/utils/taskDisplayUtils.js +257 -0
  428. package/dist/utils/taskDisplayUtils.js.map +7 -0
  429. package/dist/utils/teamConfig.js +2 -1
  430. package/dist/utils/teamConfig.js.map +2 -2
  431. package/dist/utils/todoStorage.js +92 -2
  432. package/dist/utils/todoStorage.js.map +2 -2
  433. package/dist/utils/toolTimeout.js +136 -0
  434. package/dist/utils/toolTimeout.js.map +7 -0
  435. package/dist/utils/tooling/safeRender.js +115 -0
  436. package/dist/utils/tooling/safeRender.js.map +7 -0
  437. package/dist/utils/userFriendlyError.js +346 -0
  438. package/dist/utils/userFriendlyError.js.map +7 -0
  439. package/dist/utils/vendor/ripgrep/arm64-darwin/rg +0 -0
  440. package/dist/version.js +2 -2
  441. package/dist/version.js.map +1 -1
  442. package/package.json +14 -4
  443. package/scripts/postinstall.js +128 -38
  444. package/dist/commands/agents.js +0 -2086
  445. package/dist/commands/agents.js.map +0 -7
  446. package/dist/commands/build.js +0 -74
  447. package/dist/commands/build.js.map +0 -7
  448. package/dist/commands/compression.js +0 -57
  449. package/dist/commands/compression.js.map +0 -7
  450. package/dist/commands/listen.js +0 -37
  451. package/dist/commands/listen.js.map +0 -7
  452. package/dist/commands/login.js +0 -37
  453. package/dist/commands/login.js.map +0 -7
  454. package/dist/commands/logout.js +0 -33
  455. package/dist/commands/logout.js.map +0 -7
  456. package/dist/commands/mcp.js +0 -40
  457. package/dist/commands/mcp.js.map +0 -7
  458. package/dist/commands/mcp_refresh.js +0 -40
  459. package/dist/commands/mcp_refresh.js.map +0 -7
  460. package/dist/commands/modelstatus.js +0 -21
  461. package/dist/commands/modelstatus.js.map +0 -7
  462. package/dist/commands/onboarding.js +0 -36
  463. package/dist/commands/onboarding.js.map +0 -7
  464. package/dist/commands/plugin-interactive.js +0 -446
  465. package/dist/commands/plugin-interactive.js.map +0 -7
  466. package/dist/commands/pr_comments.js +0 -61
  467. package/dist/commands/pr_comments.js.map +0 -7
  468. package/dist/commands/release-notes.js +0 -30
  469. package/dist/commands/release-notes.js.map +0 -7
  470. package/dist/commands/review.js +0 -51
  471. package/dist/commands/review.js.map +0 -7
  472. package/dist/components/Bug.js +0 -147
  473. package/dist/components/Bug.js.map +0 -7
  474. package/dist/components/ModelSelector.js +0 -2062
  475. package/dist/components/ModelSelector.js.map +0 -7
  476. package/dist/components/ModelStatusDisplay.js +0 -87
  477. package/dist/components/ModelStatusDisplay.js.map +0 -7
  478. package/dist/entrypoints/cli-wrapper.js +0 -61
  479. package/dist/entrypoints/cli-wrapper.js.map +0 -7
  480. package/dist/screens/Doctor.js +0 -22
  481. package/dist/screens/Doctor.js.map +0 -7
@@ -1,446 +0,0 @@
1
- import React, { useState } from "react";
2
- import { Box, Text, useInput } from "ink";
3
- import { Select } from "../components/CustomSelect/select.js";
4
- import { getTheme } from "../utils/theme.js";
5
- import {
6
- loadAllPlugins,
7
- togglePluginEnabled
8
- } from "../utils/pluginLoader.js";
9
- import {
10
- listMarketplaces,
11
- addMarketplace,
12
- removeMarketplace,
13
- installPluginFromMarketplace
14
- } from "../utils/marketplaceManager.js";
15
- import { SimpleSpinner } from "../components/Spinner.js";
16
- import { rmSync } from "fs";
17
- import InkTextInput from "ink-text-input";
18
- const MainMenu = ({ onNavigate, onExit }) => {
19
- const theme = getTheme();
20
- const options = [
21
- { label: "\u{1F4E6} Browse and install plugins", value: "browse" },
22
- { label: "\u2699\uFE0F Manage installed plugins", value: "manage" },
23
- { label: "\u2795 Add marketplace", value: "add-marketplace" },
24
- { label: "\u{1F3EA} Manage marketplaces", value: "marketplaces" }
25
- ];
26
- useInput((input, key) => {
27
- if (key.escape) onExit();
28
- });
29
- return /* @__PURE__ */ React.createElement(
30
- Box,
31
- {
32
- flexDirection: "column",
33
- borderStyle: "round",
34
- borderColor: theme.primary,
35
- padding: 1
36
- },
37
- /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.primary }, "Plugin Manager")),
38
- /* @__PURE__ */ React.createElement(
39
- Select,
40
- {
41
- options,
42
- onChange: (value) => {
43
- if (value === "browse")
44
- onNavigate({ screen: "marketplace-selector" });
45
- else if (value === "manage")
46
- onNavigate({ screen: "installed-plugins" });
47
- else if (value === "add-marketplace")
48
- onNavigate({ screen: "add-marketplace" });
49
- else if (value === "marketplaces")
50
- onNavigate({ screen: "marketplace-manager" });
51
- }
52
- }
53
- ),
54
- /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press ", /* @__PURE__ */ React.createElement(Text, { bold: true }, "Esc"), " to exit"))
55
- );
56
- };
57
- const MarketplaceSelector = ({ onNavigate, onBack }) => {
58
- const theme = getTheme();
59
- const [marketplaces] = useState(listMarketplaces());
60
- useInput((input, key) => {
61
- if (key.escape) onBack();
62
- });
63
- if (marketplaces.length === 0) {
64
- return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", padding: 1 }, /* @__PURE__ */ React.createElement(Text, { color: theme.warning }, "No marketplaces configured."), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Add a marketplace first with option 3 from the main menu."), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press Esc to go back")));
65
- }
66
- const options = marketplaces.map((m) => ({
67
- label: `${m.name} (${m.manifest.plugins.length} plugins)`,
68
- value: m.name
69
- }));
70
- return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", padding: 1 }, /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.primary }, "Select Marketplace")), /* @__PURE__ */ React.createElement(
71
- Select,
72
- {
73
- options,
74
- onChange: (value) => {
75
- const marketplace = marketplaces.find((m) => m.name === value);
76
- if (marketplace) {
77
- onNavigate({ screen: "plugin-browser", marketplace });
78
- }
79
- }
80
- }
81
- ), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press Esc to go back")));
82
- };
83
- const PluginBrowser = ({ marketplace, onNavigate, onBack }) => {
84
- const theme = getTheme();
85
- const [selectedPlugins, setSelectedPlugins] = useState([]);
86
- const [installing, setInstalling] = useState(false);
87
- useInput((input, key) => {
88
- if (key.escape) onBack();
89
- else if (input === "i" && selectedPlugins.length > 0) {
90
- setInstalling(true);
91
- installSelectedPlugins();
92
- }
93
- });
94
- const installSelectedPlugins = async () => {
95
- for (const pluginName of selectedPlugins) {
96
- try {
97
- await installPluginFromMarketplace(pluginName, marketplace.name);
98
- } catch (error) {
99
- console.error(`Failed to install ${pluginName}:`, error);
100
- }
101
- }
102
- setInstalling(false);
103
- setSelectedPlugins([]);
104
- };
105
- if (installing) {
106
- return /* @__PURE__ */ React.createElement(Box, { padding: 1 }, /* @__PURE__ */ React.createElement(SimpleSpinner, null), /* @__PURE__ */ React.createElement(Text, { color: theme.primary }, " Installing ", selectedPlugins.length, " plugin(s)..."));
107
- }
108
- const options = marketplace.manifest.plugins.map((p) => ({
109
- label: `${p.name} - ${p.description || "No description"}`,
110
- value: p.name
111
- }));
112
- return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", padding: 1 }, /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.primary }, marketplace.name, " Plugins")), /* @__PURE__ */ React.createElement(
113
- Select,
114
- {
115
- options,
116
- onChange: (value) => {
117
- const plugin = marketplace.manifest.plugins.find((p) => p.name === value);
118
- if (plugin) {
119
- onNavigate({
120
- screen: "plugin-details-install",
121
- marketplace,
122
- plugin
123
- });
124
- }
125
- }
126
- }
127
- ), /* @__PURE__ */ React.createElement(Box, { marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press Enter to view details"), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press Esc to go back")));
128
- };
129
- const PluginDetailsInstall = ({ marketplace, plugin, onBack }) => {
130
- const theme = getTheme();
131
- const [installing, setInstalling] = useState(false);
132
- const [installed, setInstalled] = useState(false);
133
- const [error, setError] = useState();
134
- useInput((input, key) => {
135
- if (key.escape) onBack();
136
- else if (input === "i" && !installing && !installed) {
137
- setInstalling(true);
138
- installPlugin();
139
- }
140
- });
141
- const installPlugin = async () => {
142
- try {
143
- await installPluginFromMarketplace(plugin.name, marketplace.name);
144
- setInstalled(true);
145
- } catch (err) {
146
- setError(err instanceof Error ? err.message : String(err));
147
- } finally {
148
- setInstalling(false);
149
- }
150
- };
151
- if (installing) {
152
- return /* @__PURE__ */ React.createElement(Box, { padding: 1 }, /* @__PURE__ */ React.createElement(SimpleSpinner, null), /* @__PURE__ */ React.createElement(Text, { color: theme.primary }, " Installing ", plugin.name, "..."));
153
- }
154
- return /* @__PURE__ */ React.createElement(
155
- Box,
156
- {
157
- flexDirection: "column",
158
- borderStyle: "round",
159
- borderColor: theme.primary,
160
- padding: 1
161
- },
162
- /* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.success }, plugin.name),
163
- /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "v", plugin.version),
164
- plugin.description && /* @__PURE__ */ React.createElement(Text, null, plugin.description),
165
- plugin.author && /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Author: "), /* @__PURE__ */ React.createElement(Text, null, plugin.author)),
166
- error && /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { color: theme.error }, "Error: ", error)),
167
- installed && /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { color: theme.success }, "\u2713 Installed successfully!")),
168
- /* @__PURE__ */ React.createElement(Box, { marginTop: 1, flexDirection: "column" }, !installed && !error && /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press ", /* @__PURE__ */ React.createElement(Text, { bold: true }, "i"), " to install"), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press ", /* @__PURE__ */ React.createElement(Text, { bold: true }, "Esc"), " to go back"))
169
- );
170
- };
171
- const InstalledPluginsManager = ({ onNavigate, onBack }) => {
172
- const theme = getTheme();
173
- const [plugins, setPlugins] = useState(loadAllPlugins());
174
- useInput((input, key) => {
175
- if (key.escape) onBack();
176
- });
177
- if (plugins.length === 0) {
178
- return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", padding: 1 }, /* @__PURE__ */ React.createElement(Text, { color: theme.warning }, "No plugins installed."), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press Esc to go back")));
179
- }
180
- const options = plugins.map((p) => ({
181
- label: `${p.manifest.displayName || p.manifest.name} ${p.enabled ? "" : "(disabled)"}`,
182
- value: p.manifest.name
183
- }));
184
- return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", padding: 1 }, /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.primary }, "Installed Plugins (", plugins.length, ")")), /* @__PURE__ */ React.createElement(
185
- Select,
186
- {
187
- options,
188
- onChange: (value) => {
189
- const plugin = plugins.find((p) => p.manifest.name === value);
190
- if (plugin) {
191
- onNavigate({ screen: "plugin-details-manage", installedPlugin: plugin });
192
- }
193
- }
194
- }
195
- ), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press Enter to manage \u2022 Esc to go back")));
196
- };
197
- const PluginDetailsManage = ({ plugin, onBack }) => {
198
- const theme = getTheme();
199
- const [enabled, setEnabled] = useState(plugin.enabled);
200
- const [uninstalling, setUninstalling] = useState(false);
201
- useInput((input, key) => {
202
- if (key.escape) onBack();
203
- else if (input === "t") {
204
- const newState = togglePluginEnabled(plugin.manifest.name);
205
- setEnabled(newState);
206
- } else if (input === "u") {
207
- setUninstalling(true);
208
- uninstallPlugin();
209
- }
210
- });
211
- const uninstallPlugin = () => {
212
- try {
213
- rmSync(plugin.location, { recursive: true, force: true });
214
- onBack();
215
- } catch (error) {
216
- console.error("Failed to uninstall:", error);
217
- setUninstalling(false);
218
- }
219
- };
220
- if (uninstalling) {
221
- return /* @__PURE__ */ React.createElement(Box, { padding: 1 }, /* @__PURE__ */ React.createElement(SimpleSpinner, null), /* @__PURE__ */ React.createElement(Text, { color: theme.primary }, " Uninstalling ", plugin.manifest.name, "..."));
222
- }
223
- return /* @__PURE__ */ React.createElement(
224
- Box,
225
- {
226
- flexDirection: "column",
227
- borderStyle: "round",
228
- borderColor: theme.primary,
229
- padding: 1
230
- },
231
- /* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.success }, plugin.manifest.displayName || plugin.manifest.name),
232
- /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "v", plugin.manifest.version),
233
- plugin.manifest.description && /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, null, plugin.manifest.description)),
234
- /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, null, "Status: "), /* @__PURE__ */ React.createElement(Text, { color: enabled ? theme.success : theme.warning }, enabled ? "Enabled" : "Disabled")),
235
- /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Components:")),
236
- /* @__PURE__ */ React.createElement(Box, { marginLeft: 2 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, plugin.agents.length, " agents, ", plugin.commands.length, " commands,", " ", plugin.skills.length, " skills")),
237
- /* @__PURE__ */ React.createElement(Box, { marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press ", /* @__PURE__ */ React.createElement(Text, { bold: true }, "t"), " to toggle enable/disable"), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press ", /* @__PURE__ */ React.createElement(Text, { bold: true }, "u"), " to uninstall"), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press ", /* @__PURE__ */ React.createElement(Text, { bold: true }, "Esc"), " to go back"))
238
- );
239
- };
240
- const AddMarketplaceForm = ({ onBack }) => {
241
- const theme = getTheme();
242
- const [source, setSource] = useState("");
243
- const [adding, setAdding] = useState(false);
244
- const [added, setAdded] = useState(false);
245
- const [error, setError] = useState();
246
- useInput((input, key) => {
247
- if (key.escape && !adding) onBack();
248
- else if (key.return && source && !adding && !added) {
249
- setAdding(true);
250
- addMarketplaceAsync();
251
- }
252
- });
253
- const addMarketplaceAsync = async () => {
254
- try {
255
- await addMarketplace(source);
256
- setAdded(true);
257
- setTimeout(onBack, 2e3);
258
- } catch (err) {
259
- setError(err instanceof Error ? err.message : String(err));
260
- } finally {
261
- setAdding(false);
262
- }
263
- };
264
- if (adding) {
265
- return /* @__PURE__ */ React.createElement(Box, { padding: 1 }, /* @__PURE__ */ React.createElement(SimpleSpinner, null), /* @__PURE__ */ React.createElement(Text, { color: theme.primary }, " Adding marketplace..."));
266
- }
267
- if (added) {
268
- return /* @__PURE__ */ React.createElement(Box, { padding: 1 }, /* @__PURE__ */ React.createElement(Text, { color: theme.success }, "\u2713 Marketplace added successfully!"));
269
- }
270
- return /* @__PURE__ */ React.createElement(
271
- Box,
272
- {
273
- flexDirection: "column",
274
- borderStyle: "round",
275
- borderColor: theme.primary,
276
- padding: 1
277
- },
278
- /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.primary }, "Add Marketplace")),
279
- /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, null, "Source (GitHub owner/repo or URL): ")),
280
- /* @__PURE__ */ React.createElement(InkTextInput, { value: source, onChange: setSource }),
281
- error && /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { color: theme.error }, "Error: ", error)),
282
- /* @__PURE__ */ React.createElement(Box, { marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press ", /* @__PURE__ */ React.createElement(Text, { bold: true }, "Enter"), " to add"), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press ", /* @__PURE__ */ React.createElement(Text, { bold: true }, "Esc"), " to cancel"))
283
- );
284
- };
285
- const MarketplaceManager = ({ onNavigate, onBack }) => {
286
- const theme = getTheme();
287
- const [marketplaces] = useState(listMarketplaces());
288
- useInput((input, key) => {
289
- if (key.escape) onBack();
290
- });
291
- if (marketplaces.length === 0) {
292
- return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", padding: 1 }, /* @__PURE__ */ React.createElement(Text, { color: theme.warning }, "No marketplaces configured."), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press Esc to go back")));
293
- }
294
- const options = marketplaces.map((m) => ({
295
- label: `${m.name} (${m.manifest.plugins.length} plugins)${!m.enabled ? " - disabled" : ""}`,
296
- value: m.name
297
- }));
298
- return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", padding: 1 }, /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.primary }, "Manage Marketplaces (", marketplaces.length, ")")), /* @__PURE__ */ React.createElement(
299
- Select,
300
- {
301
- options,
302
- onChange: (value) => {
303
- const marketplace = marketplaces.find((m) => m.name === value);
304
- if (marketplace) {
305
- onNavigate({ screen: "marketplace-details", marketplace });
306
- }
307
- }
308
- }
309
- ), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press Enter to manage \u2022 Esc to go back")));
310
- };
311
- const MarketplaceDetails = ({ marketplace, onBack }) => {
312
- const theme = getTheme();
313
- const [removing, setRemoving] = useState(false);
314
- useInput((input, key) => {
315
- if (key.escape) onBack();
316
- else if (input === "r") {
317
- setRemoving(true);
318
- removeMarketplaceAction();
319
- }
320
- });
321
- const removeMarketplaceAction = () => {
322
- try {
323
- removeMarketplace(marketplace.name);
324
- onBack();
325
- } catch (error) {
326
- console.error("Failed to remove marketplace:", error);
327
- setRemoving(false);
328
- }
329
- };
330
- if (removing) {
331
- return /* @__PURE__ */ React.createElement(Box, { padding: 1 }, /* @__PURE__ */ React.createElement(SimpleSpinner, null), /* @__PURE__ */ React.createElement(Text, { color: theme.primary }, " Removing marketplace..."));
332
- }
333
- return /* @__PURE__ */ React.createElement(
334
- Box,
335
- {
336
- flexDirection: "column",
337
- borderStyle: "round",
338
- borderColor: theme.primary,
339
- padding: 1
340
- },
341
- /* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.success }, marketplace.name),
342
- marketplace.manifest.metadata?.description && /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, null, marketplace.manifest.metadata.description)),
343
- /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, null, "Plugins: "), /* @__PURE__ */ React.createElement(Text, { color: theme.primary }, marketplace.manifest.plugins.length)),
344
- /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, null, "Owner: "), /* @__PURE__ */ React.createElement(Text, null, marketplace.manifest.owner.name)),
345
- /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, null, "Source: "), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, marketplace.source.type)),
346
- /* @__PURE__ */ React.createElement(Box, { marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press ", /* @__PURE__ */ React.createElement(Text, { bold: true }, "r"), " to remove marketplace"), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press ", /* @__PURE__ */ React.createElement(Text, { bold: true }, "Esc"), " to go back"))
347
- );
348
- };
349
- const PluginInteractiveCommand = ({
350
- onDone
351
- }) => {
352
- const [navigationStack, setNavigationStack] = useState([
353
- { screen: "main-menu" }
354
- ]);
355
- const currentState = navigationStack[navigationStack.length - 1];
356
- const handleNavigate = (state) => {
357
- setNavigationStack([...navigationStack, state]);
358
- };
359
- const handleBack = () => {
360
- if (navigationStack.length > 1) {
361
- setNavigationStack(navigationStack.slice(0, -1));
362
- } else {
363
- onDone();
364
- }
365
- };
366
- const handleExit = () => {
367
- onDone();
368
- };
369
- switch (currentState.screen) {
370
- case "main-menu":
371
- return /* @__PURE__ */ React.createElement(MainMenu, { onNavigate: handleNavigate, onExit: handleExit });
372
- case "marketplace-selector":
373
- return /* @__PURE__ */ React.createElement(MarketplaceSelector, { onNavigate: handleNavigate, onBack: handleBack });
374
- case "plugin-browser":
375
- if (!currentState.marketplace) return null;
376
- return /* @__PURE__ */ React.createElement(
377
- PluginBrowser,
378
- {
379
- marketplace: currentState.marketplace,
380
- onNavigate: handleNavigate,
381
- onBack: handleBack
382
- }
383
- );
384
- case "plugin-details-install":
385
- if (!currentState.marketplace || !currentState.plugin) return null;
386
- return /* @__PURE__ */ React.createElement(
387
- PluginDetailsInstall,
388
- {
389
- marketplace: currentState.marketplace,
390
- plugin: currentState.plugin,
391
- onBack: handleBack
392
- }
393
- );
394
- case "installed-plugins":
395
- return /* @__PURE__ */ React.createElement(
396
- InstalledPluginsManager,
397
- {
398
- onNavigate: handleNavigate,
399
- onBack: handleBack
400
- }
401
- );
402
- case "plugin-details-manage":
403
- if (!currentState.installedPlugin) return null;
404
- return /* @__PURE__ */ React.createElement(
405
- PluginDetailsManage,
406
- {
407
- plugin: currentState.installedPlugin,
408
- onBack: handleBack
409
- }
410
- );
411
- case "add-marketplace":
412
- return /* @__PURE__ */ React.createElement(AddMarketplaceForm, { onBack: handleBack });
413
- case "marketplace-manager":
414
- return /* @__PURE__ */ React.createElement(MarketplaceManager, { onNavigate: handleNavigate, onBack: handleBack });
415
- case "marketplace-details":
416
- if (!currentState.marketplace) return null;
417
- return /* @__PURE__ */ React.createElement(
418
- MarketplaceDetails,
419
- {
420
- marketplace: currentState.marketplace,
421
- onBack: handleBack
422
- }
423
- );
424
- default:
425
- return /* @__PURE__ */ React.createElement(Box, { padding: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "red" }, "Unknown screen"));
426
- }
427
- };
428
- const pluginInteractive = {
429
- type: "local-jsx",
430
- name: "plugin-ui",
431
- description: "Interactive plugin management interface",
432
- isEnabled: true,
433
- isHidden: false,
434
- aliases: ["plugins-ui"],
435
- async call(onDone, _context) {
436
- return /* @__PURE__ */ React.createElement(PluginInteractiveCommand, { onDone });
437
- },
438
- userFacingName() {
439
- return "plugin-ui";
440
- }
441
- };
442
- var plugin_interactive_default = pluginInteractive;
443
- export {
444
- plugin_interactive_default as default
445
- };
446
- //# sourceMappingURL=plugin-interactive.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/commands/plugin-interactive.tsx"],
4
- "sourcesContent": ["/**\n * Interactive Plugin Management UI\n *\n * Complete interactive interface for plugin management with navigation\n * Phase 5: Full integration with all components\n */\n\nimport React, { useState } from 'react'\nimport { Box, Text, useInput } from 'ink'\nimport { Select } from '@components/CustomSelect/select'\nimport { getTheme } from '@utils/theme'\nimport { Command } from '@commands'\nimport {\n loadAllPlugins,\n getPlugin,\n togglePluginEnabled,\n} from '@utils/pluginLoader'\nimport {\n listMarketplaces,\n addMarketplace,\n removeMarketplace,\n installPluginFromMarketplace,\n} from '@utils/marketplaceManager'\nimport { LoadedPlugin } from '../types/plugin'\nimport { RegisteredMarketplace, MarketplaceError } from '../types/marketplace'\nimport { SimpleSpinner } from '@components/Spinner'\nimport { rmSync } from 'fs'\nimport InkTextInput from 'ink-text-input'\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype Screen =\n | 'main-menu'\n | 'marketplace-selector'\n | 'plugin-browser'\n | 'plugin-details-install'\n | 'installed-plugins'\n | 'plugin-details-manage'\n | 'add-marketplace'\n | 'marketplace-manager'\n | 'marketplace-details'\n\ntype NavigationState = {\n screen: Screen\n marketplace?: RegisteredMarketplace\n plugin?: any\n installedPlugin?: LoadedPlugin\n}\n\n// =============================================================================\n// Main Menu\n// =============================================================================\n\nconst MainMenu: React.FC<{\n onNavigate: (state: NavigationState) => void\n onExit: () => void\n}> = ({ onNavigate, onExit }) => {\n const theme = getTheme()\n\n const options = [\n { label: '\uD83D\uDCE6 Browse and install plugins', value: 'browse' },\n { label: '\u2699\uFE0F Manage installed plugins', value: 'manage' },\n { label: '\u2795 Add marketplace', value: 'add-marketplace' },\n { label: '\uD83C\uDFEA Manage marketplaces', value: 'marketplaces' },\n ]\n\n useInput((input, key) => {\n if (key.escape) onExit()\n })\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.primary}\n padding={1}\n >\n <Box marginBottom={1}>\n <Text bold color={theme.primary}>\n Plugin Manager\n </Text>\n </Box>\n\n <Select\n options={options}\n onChange={(value) => {\n if (value === 'browse')\n onNavigate({ screen: 'marketplace-selector' })\n else if (value === 'manage')\n onNavigate({ screen: 'installed-plugins' })\n else if (value === 'add-marketplace')\n onNavigate({ screen: 'add-marketplace' })\n else if (value === 'marketplaces')\n onNavigate({ screen: 'marketplace-manager' })\n }}\n />\n\n <Box marginTop={1}>\n <Text dimColor>\n Press <Text bold>Esc</Text> to exit\n </Text>\n </Box>\n </Box>\n )\n}\n\n// =============================================================================\n// Marketplace Selector\n// =============================================================================\n\nconst MarketplaceSelector: React.FC<{\n onNavigate: (state: NavigationState) => void\n onBack: () => void\n}> = ({ onNavigate, onBack }) => {\n const theme = getTheme()\n const [marketplaces] = useState(listMarketplaces())\n\n useInput((input, key) => {\n if (key.escape) onBack()\n })\n\n if (marketplaces.length === 0) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text color={theme.warning}>No marketplaces configured.</Text>\n <Text dimColor>\n Add a marketplace first with option 3 from the main menu.\n </Text>\n <Box marginTop={1}>\n <Text dimColor>Press Esc to go back</Text>\n </Box>\n </Box>\n )\n }\n\n const options = marketplaces.map((m) => ({\n label: `${m.name} (${m.manifest.plugins.length} plugins)`,\n value: m.name,\n }))\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color={theme.primary}>\n Select Marketplace\n </Text>\n </Box>\n\n <Select\n options={options}\n onChange={(value) => {\n const marketplace = marketplaces.find((m) => m.name === value)\n if (marketplace) {\n onNavigate({ screen: 'plugin-browser', marketplace })\n }\n }}\n />\n\n <Box marginTop={1}>\n <Text dimColor>Press Esc to go back</Text>\n </Box>\n </Box>\n )\n}\n\n// =============================================================================\n// Plugin Browser\n// =============================================================================\n\nconst PluginBrowser: React.FC<{\n marketplace: RegisteredMarketplace\n onNavigate: (state: NavigationState) => void\n onBack: () => void\n}> = ({ marketplace, onNavigate, onBack }) => {\n const theme = getTheme()\n const [selectedPlugins, setSelectedPlugins] = useState<string[]>([])\n const [installing, setInstalling] = useState(false)\n\n useInput((input, key) => {\n if (key.escape) onBack()\n else if (input === 'i' && selectedPlugins.length > 0) {\n setInstalling(true)\n installSelectedPlugins()\n }\n })\n\n const installSelectedPlugins = async () => {\n for (const pluginName of selectedPlugins) {\n try {\n await installPluginFromMarketplace(pluginName, marketplace.name)\n } catch (error) {\n console.error(`Failed to install ${pluginName}:`, error)\n }\n }\n setInstalling(false)\n setSelectedPlugins([])\n }\n\n if (installing) {\n return (\n <Box padding={1}>\n <SimpleSpinner />\n <Text color={theme.primary}> Installing {selectedPlugins.length} plugin(s)...</Text>\n </Box>\n )\n }\n\n const options = marketplace.manifest.plugins.map((p) => ({\n label: `${p.name} - ${p.description || 'No description'}`,\n value: p.name,\n }))\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color={theme.primary}>\n {marketplace.name} Plugins\n </Text>\n </Box>\n\n <Select\n options={options}\n onChange={(value) => {\n const plugin = marketplace.manifest.plugins.find((p) => p.name === value)\n if (plugin) {\n onNavigate({\n screen: 'plugin-details-install',\n marketplace,\n plugin,\n })\n }\n }}\n />\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>Press Enter to view details</Text>\n <Text dimColor>Press Esc to go back</Text>\n </Box>\n </Box>\n )\n}\n\n// =============================================================================\n// Plugin Details (Install)\n// =============================================================================\n\nconst PluginDetailsInstall: React.FC<{\n marketplace: RegisteredMarketplace\n plugin: any\n onBack: () => void\n}> = ({ marketplace, plugin, onBack }) => {\n const theme = getTheme()\n const [installing, setInstalling] = useState(false)\n const [installed, setInstalled] = useState(false)\n const [error, setError] = useState<string>()\n\n useInput((input, key) => {\n if (key.escape) onBack()\n else if (input === 'i' && !installing && !installed) {\n setInstalling(true)\n installPlugin()\n }\n })\n\n const installPlugin = async () => {\n try {\n await installPluginFromMarketplace(plugin.name, marketplace.name)\n setInstalled(true)\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setInstalling(false)\n }\n }\n\n if (installing) {\n return (\n <Box padding={1}>\n <SimpleSpinner />\n <Text color={theme.primary}> Installing {plugin.name}...</Text>\n </Box>\n )\n }\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.primary}\n padding={1}\n >\n <Text bold color={theme.success}>\n {plugin.name}\n </Text>\n <Text dimColor>v{plugin.version}</Text>\n {plugin.description && <Text>{plugin.description}</Text>}\n {plugin.author && (\n <Box marginTop={1}>\n <Text dimColor>Author: </Text>\n <Text>{plugin.author}</Text>\n </Box>\n )}\n\n {error && (\n <Box marginTop={1}>\n <Text color={theme.error}>Error: {error}</Text>\n </Box>\n )}\n\n {installed && (\n <Box marginTop={1}>\n <Text color={theme.success}>\u2713 Installed successfully!</Text>\n </Box>\n )}\n\n <Box marginTop={1} flexDirection=\"column\">\n {!installed && !error && (\n <Text dimColor>\n Press <Text bold>i</Text> to install\n </Text>\n )}\n <Text dimColor>\n Press <Text bold>Esc</Text> to go back\n </Text>\n </Box>\n </Box>\n )\n}\n\n// =============================================================================\n// Installed Plugins Manager\n// =============================================================================\n\nconst InstalledPluginsManager: React.FC<{\n onNavigate: (state: NavigationState) => void\n onBack: () => void\n}> = ({ onNavigate, onBack }) => {\n const theme = getTheme()\n const [plugins, setPlugins] = useState(loadAllPlugins())\n\n useInput((input, key) => {\n if (key.escape) onBack()\n })\n\n if (plugins.length === 0) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text color={theme.warning}>No plugins installed.</Text>\n <Box marginTop={1}>\n <Text dimColor>Press Esc to go back</Text>\n </Box>\n </Box>\n )\n }\n\n const options = plugins.map((p) => ({\n label: `${p.manifest.displayName || p.manifest.name} ${p.enabled ? '' : '(disabled)'}`,\n value: p.manifest.name,\n }))\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color={theme.primary}>\n Installed Plugins ({plugins.length})\n </Text>\n </Box>\n\n <Select\n options={options}\n onChange={(value) => {\n const plugin = plugins.find((p) => p.manifest.name === value)\n if (plugin) {\n onNavigate({ screen: 'plugin-details-manage', installedPlugin: plugin })\n }\n }}\n />\n\n <Box marginTop={1}>\n <Text dimColor>Press Enter to manage \u2022 Esc to go back</Text>\n </Box>\n </Box>\n )\n}\n\n// =============================================================================\n// Plugin Details (Manage)\n// =============================================================================\n\nconst PluginDetailsManage: React.FC<{\n plugin: LoadedPlugin\n onBack: () => void\n}> = ({ plugin, onBack }) => {\n const theme = getTheme()\n const [enabled, setEnabled] = useState(plugin.enabled)\n const [uninstalling, setUninstalling] = useState(false)\n\n useInput((input, key) => {\n if (key.escape) onBack()\n else if (input === 't') {\n const newState = togglePluginEnabled(plugin.manifest.name)\n setEnabled(newState)\n } else if (input === 'u') {\n setUninstalling(true)\n uninstallPlugin()\n }\n })\n\n const uninstallPlugin = () => {\n try {\n rmSync(plugin.location, { recursive: true, force: true })\n onBack()\n } catch (error) {\n console.error('Failed to uninstall:', error)\n setUninstalling(false)\n }\n }\n\n if (uninstalling) {\n return (\n <Box padding={1}>\n <SimpleSpinner />\n <Text color={theme.primary}> Uninstalling {plugin.manifest.name}...</Text>\n </Box>\n )\n }\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.primary}\n padding={1}\n >\n <Text bold color={theme.success}>\n {plugin.manifest.displayName || plugin.manifest.name}\n </Text>\n <Text dimColor>v{plugin.manifest.version}</Text>\n\n {plugin.manifest.description && (\n <Box marginTop={1}>\n <Text>{plugin.manifest.description}</Text>\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text>Status: </Text>\n <Text color={enabled ? theme.success : theme.warning}>\n {enabled ? 'Enabled' : 'Disabled'}\n </Text>\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Components:</Text>\n </Box>\n <Box marginLeft={2}>\n <Text dimColor>\n {plugin.agents.length} agents, {plugin.commands.length} commands,{' '}\n {plugin.skills.length} skills\n </Text>\n </Box>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>\n Press <Text bold>t</Text> to toggle enable/disable\n </Text>\n <Text dimColor>\n Press <Text bold>u</Text> to uninstall\n </Text>\n <Text dimColor>\n Press <Text bold>Esc</Text> to go back\n </Text>\n </Box>\n </Box>\n )\n}\n\n// =============================================================================\n// Add Marketplace Form\n// =============================================================================\n\nconst AddMarketplaceForm: React.FC<{\n onBack: () => void\n}> = ({ onBack }) => {\n const theme = getTheme()\n const [source, setSource] = useState('')\n const [adding, setAdding] = useState(false)\n const [added, setAdded] = useState(false)\n const [error, setError] = useState<string>()\n\n useInput((input, key) => {\n if (key.escape && !adding) onBack()\n else if (key.return && source && !adding && !added) {\n setAdding(true)\n addMarketplaceAsync()\n }\n })\n\n const addMarketplaceAsync = async () => {\n try {\n await addMarketplace(source)\n setAdded(true)\n setTimeout(onBack, 2000)\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setAdding(false)\n }\n }\n\n if (adding) {\n return (\n <Box padding={1}>\n <SimpleSpinner />\n <Text color={theme.primary}> Adding marketplace...</Text>\n </Box>\n )\n }\n\n if (added) {\n return (\n <Box padding={1}>\n <Text color={theme.success}>\u2713 Marketplace added successfully!</Text>\n </Box>\n )\n }\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.primary}\n padding={1}\n >\n <Box marginBottom={1}>\n <Text bold color={theme.primary}>\n Add Marketplace\n </Text>\n </Box>\n\n <Box marginBottom={1}>\n <Text>Source (GitHub owner/repo or URL): </Text>\n </Box>\n\n <InkTextInput value={source} onChange={setSource} />\n\n {error && (\n <Box marginTop={1}>\n <Text color={theme.error}>Error: {error}</Text>\n </Box>\n )}\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>\n Press <Text bold>Enter</Text> to add\n </Text>\n <Text dimColor>\n Press <Text bold>Esc</Text> to cancel\n </Text>\n </Box>\n </Box>\n )\n}\n\n// =============================================================================\n// Marketplace Manager\n// =============================================================================\n\nconst MarketplaceManager: React.FC<{\n onNavigate: (state: NavigationState) => void\n onBack: () => void\n}> = ({ onNavigate, onBack }) => {\n const theme = getTheme()\n const [marketplaces] = useState(listMarketplaces())\n\n useInput((input, key) => {\n if (key.escape) onBack()\n })\n\n if (marketplaces.length === 0) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Text color={theme.warning}>No marketplaces configured.</Text>\n <Box marginTop={1}>\n <Text dimColor>Press Esc to go back</Text>\n </Box>\n </Box>\n )\n }\n\n const options = marketplaces.map((m) => ({\n label: `${m.name} (${m.manifest.plugins.length} plugins)${!m.enabled ? ' - disabled' : ''}`,\n value: m.name,\n }))\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box marginBottom={1}>\n <Text bold color={theme.primary}>\n Manage Marketplaces ({marketplaces.length})\n </Text>\n </Box>\n\n <Select\n options={options}\n onChange={(value) => {\n const marketplace = marketplaces.find((m) => m.name === value)\n if (marketplace) {\n onNavigate({ screen: 'marketplace-details', marketplace })\n }\n }}\n />\n\n <Box marginTop={1}>\n <Text dimColor>Press Enter to manage \u2022 Esc to go back</Text>\n </Box>\n </Box>\n )\n}\n\n// =============================================================================\n// Marketplace Details\n// =============================================================================\n\nconst MarketplaceDetails: React.FC<{\n marketplace: RegisteredMarketplace\n onBack: () => void\n}> = ({ marketplace, onBack }) => {\n const theme = getTheme()\n const [removing, setRemoving] = useState(false)\n\n useInput((input, key) => {\n if (key.escape) onBack()\n else if (input === 'r') {\n setRemoving(true)\n removeMarketplaceAction()\n }\n })\n\n const removeMarketplaceAction = () => {\n try {\n removeMarketplace(marketplace.name)\n onBack()\n } catch (error) {\n console.error('Failed to remove marketplace:', error)\n setRemoving(false)\n }\n }\n\n if (removing) {\n return (\n <Box padding={1}>\n <SimpleSpinner />\n <Text color={theme.primary}> Removing marketplace...</Text>\n </Box>\n )\n }\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.primary}\n padding={1}\n >\n <Text bold color={theme.success}>\n {marketplace.name}\n </Text>\n\n {marketplace.manifest.metadata?.description && (\n <Box marginTop={1}>\n <Text>{marketplace.manifest.metadata.description}</Text>\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text>Plugins: </Text>\n <Text color={theme.primary}>{marketplace.manifest.plugins.length}</Text>\n </Box>\n\n <Box marginTop={1}>\n <Text>Owner: </Text>\n <Text>{marketplace.manifest.owner.name}</Text>\n </Box>\n\n <Box marginTop={1}>\n <Text>Source: </Text>\n <Text dimColor>{marketplace.source.type}</Text>\n </Box>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>\n Press <Text bold>r</Text> to remove marketplace\n </Text>\n <Text dimColor>\n Press <Text bold>Esc</Text> to go back\n </Text>\n </Box>\n </Box>\n )\n}\n\n// =============================================================================\n// Main Plugin Interactive Command\n// =============================================================================\n\nconst PluginInteractiveCommand: React.FC<{ onDone: () => void }> = ({\n onDone,\n}) => {\n const [navigationStack, setNavigationStack] = useState<NavigationState[]>([\n { screen: 'main-menu' },\n ])\n\n const currentState = navigationStack[navigationStack.length - 1]\n\n const handleNavigate = (state: NavigationState) => {\n setNavigationStack([...navigationStack, state])\n }\n\n const handleBack = () => {\n if (navigationStack.length > 1) {\n setNavigationStack(navigationStack.slice(0, -1))\n } else {\n onDone()\n }\n }\n\n const handleExit = () => {\n onDone()\n }\n\n // Render current screen\n switch (currentState.screen) {\n case 'main-menu':\n return <MainMenu onNavigate={handleNavigate} onExit={handleExit} />\n\n case 'marketplace-selector':\n return (\n <MarketplaceSelector onNavigate={handleNavigate} onBack={handleBack} />\n )\n\n case 'plugin-browser':\n if (!currentState.marketplace) return null\n return (\n <PluginBrowser\n marketplace={currentState.marketplace}\n onNavigate={handleNavigate}\n onBack={handleBack}\n />\n )\n\n case 'plugin-details-install':\n if (!currentState.marketplace || !currentState.plugin) return null\n return (\n <PluginDetailsInstall\n marketplace={currentState.marketplace}\n plugin={currentState.plugin}\n onBack={handleBack}\n />\n )\n\n case 'installed-plugins':\n return (\n <InstalledPluginsManager\n onNavigate={handleNavigate}\n onBack={handleBack}\n />\n )\n\n case 'plugin-details-manage':\n if (!currentState.installedPlugin) return null\n return (\n <PluginDetailsManage\n plugin={currentState.installedPlugin}\n onBack={handleBack}\n />\n )\n\n case 'add-marketplace':\n return <AddMarketplaceForm onBack={handleBack} />\n\n case 'marketplace-manager':\n return (\n <MarketplaceManager onNavigate={handleNavigate} onBack={handleBack} />\n )\n\n case 'marketplace-details':\n if (!currentState.marketplace) return null\n return (\n <MarketplaceDetails\n marketplace={currentState.marketplace}\n onBack={handleBack}\n />\n )\n\n default:\n return (\n <Box padding={1}>\n <Text color=\"red\">Unknown screen</Text>\n </Box>\n )\n }\n}\n\n// =============================================================================\n// Command Export\n// =============================================================================\n\nconst pluginInteractive = {\n type: 'local-jsx',\n name: 'plugin-ui',\n description: 'Interactive plugin management interface',\n isEnabled: true,\n isHidden: false,\n aliases: ['plugins-ui'],\n async call(onDone, _context) {\n return <PluginInteractiveCommand onDone={onDone} />\n },\n userFacingName() {\n return 'plugin-ui'\n },\n} satisfies Command\n\nexport default pluginInteractive\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,61 +0,0 @@
1
- var pr_comments_default = {
2
- type: "prompt",
3
- name: "pr-comments",
4
- description: "Get comments from a GitHub pull request",
5
- progressMessage: "fetching PR comments",
6
- isEnabled: true,
7
- isHidden: false,
8
- userFacingName() {
9
- return "pr-comments";
10
- },
11
- async getPromptForCommand(args) {
12
- return [
13
- {
14
- role: "user",
15
- content: [
16
- {
17
- type: "text",
18
- text: `You are an AI assistant integrated into a git-based version control system. Your task is to fetch and display comments from a GitHub pull request.
19
-
20
- Follow these steps:
21
-
22
- 1. Use \`gh pr view --json number,headRepository\` to get the PR number and repository info
23
- 2. Use \`gh api /repos/{owner}/{repo}/issues/{number}/comments\` to get PR-level comments
24
- 3. Use \`gh api /repos/{owner}/{repo}/pulls/{number}/comments\` to get review comments. Pay particular attention to the following fields: \`body\`, \`diff_hunk\`, \`path\`, \`line\`, etc. If the comment references some code, consider fetching it using eg \`gh api /repos/{owner}/{repo}/contents/{path}?ref={branch} | jq .content -r | base64 -d\`
25
- 4. Parse and format all comments in a readable way
26
- 5. Return ONLY the formatted comments, with no additional text
27
-
28
- Format the comments as:
29
-
30
- ## Comments
31
-
32
- [For each comment thread:]
33
- - @author file.ts#line:
34
- \`\`\`diff
35
- [diff_hunk from the API response]
36
- \`\`\`
37
- > quoted comment text
38
-
39
- [any replies indented]
40
-
41
- If there are no comments, return "No comments found."
42
-
43
- Remember:
44
- 1. Only show the actual comments, no explanatory text
45
- 2. Include both PR-level and code review comments
46
- 3. Preserve the threading/nesting of comment replies
47
- 4. Show the file and line number context for code review comments
48
- 5. Use jq to parse the JSON responses from the GitHub API
49
-
50
- ${args ? "Additional user input: " + args : ""}
51
- `
52
- }
53
- ]
54
- }
55
- ];
56
- }
57
- };
58
- export {
59
- pr_comments_default as default
60
- };
61
- //# sourceMappingURL=pr_comments.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/commands/pr_comments.ts"],
4
- "sourcesContent": ["import { Command } from '@commands'\n\nexport default {\n type: 'prompt',\n name: 'pr-comments',\n description: 'Get comments from a GitHub pull request',\n progressMessage: 'fetching PR comments',\n isEnabled: true,\n isHidden: false,\n userFacingName() {\n return 'pr-comments'\n },\n async getPromptForCommand(args: string) {\n return [\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: `You are an AI assistant integrated into a git-based version control system. Your task is to fetch and display comments from a GitHub pull request.\n\nFollow these steps:\n\n1. Use \\`gh pr view --json number,headRepository\\` to get the PR number and repository info\n2. Use \\`gh api /repos/{owner}/{repo}/issues/{number}/comments\\` to get PR-level comments\n3. Use \\`gh api /repos/{owner}/{repo}/pulls/{number}/comments\\` to get review comments. Pay particular attention to the following fields: \\`body\\`, \\`diff_hunk\\`, \\`path\\`, \\`line\\`, etc. If the comment references some code, consider fetching it using eg \\`gh api /repos/{owner}/{repo}/contents/{path}?ref={branch} | jq .content -r | base64 -d\\`\n4. Parse and format all comments in a readable way\n5. Return ONLY the formatted comments, with no additional text\n\nFormat the comments as:\n\n## Comments\n\n[For each comment thread:]\n- @author file.ts#line:\n \\`\\`\\`diff\n [diff_hunk from the API response]\n \\`\\`\\`\n > quoted comment text\n \n [any replies indented]\n\nIf there are no comments, return \"No comments found.\"\n\nRemember:\n1. Only show the actual comments, no explanatory text\n2. Include both PR-level and code review comments\n3. Preserve the threading/nesting of comment replies\n4. Show the file and line number context for code review comments\n5. Use jq to parse the JSON responses from the GitHub API\n\n${args ? 'Additional user input: ' + args : ''}\n`,\n },\n ],\n },\n ]\n },\n} satisfies Command\n"],
5
- "mappings": "AAEA,IAAO,sBAAQ;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,iBAAiB;AACf,WAAO;AAAA,EACT;AAAA,EACA,MAAM,oBAAoB,MAAc;AACtC,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgChB,OAAO,4BAA4B,OAAO,EAAE;AAAA;AAAA,UAEpC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;",
6
- "names": []
7
- }
@@ -1,30 +0,0 @@
1
- import { MACRO } from "../constants/macros.js";
2
- import { RELEASE_NOTES } from "../constants/releaseNotes.js";
3
- const releaseNotes = {
4
- description: "Show release notes for the current or specified version",
5
- isEnabled: false,
6
- isHidden: false,
7
- name: "release-notes",
8
- userFacingName() {
9
- return "release-notes";
10
- },
11
- type: "local",
12
- async call(args) {
13
- const currentVersion = MACRO.VERSION;
14
- const requestedVersion = args ? args.trim() : currentVersion;
15
- const notes = RELEASE_NOTES[requestedVersion];
16
- if (!notes || notes.length === 0) {
17
- return `No release notes available for version ${requestedVersion}.`;
18
- }
19
- const header = `Release notes for version ${requestedVersion}:`;
20
- const formattedNotes = notes.map((note) => `\u2022 ${note}`).join("\n");
21
- return `${header}
22
-
23
- ${formattedNotes}`;
24
- }
25
- };
26
- var release_notes_default = releaseNotes;
27
- export {
28
- release_notes_default as default
29
- };
30
- //# sourceMappingURL=release-notes.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/commands/release-notes.ts"],
4
- "sourcesContent": ["import { MACRO } from '@constants/macros'\nimport type { Command } from '@commands'\nimport { RELEASE_NOTES } from '@constants/releaseNotes'\n\nconst releaseNotes: Command = {\n description: 'Show release notes for the current or specified version',\n isEnabled: false,\n isHidden: false,\n name: 'release-notes',\n userFacingName() {\n return 'release-notes'\n },\n type: 'local',\n async call(args) {\n const currentVersion = MACRO.VERSION\n\n // If a specific version is requested, show that version's notes\n const requestedVersion = args ? args.trim() : currentVersion\n\n // Get the requested version's notes\n const notes = RELEASE_NOTES[requestedVersion]\n\n if (!notes || notes.length === 0) {\n return `No release notes available for version ${requestedVersion}.`\n }\n\n const header = `Release notes for version ${requestedVersion}:`\n const formattedNotes = notes.map(note => `\u2022 ${note}`).join('\\n')\n\n return `${header}\\n\\n${formattedNotes}`\n },\n}\n\nexport default releaseNotes\n"],
5
- "mappings": "AAAA,SAAS,aAAa;AAEtB,SAAS,qBAAqB;AAE9B,MAAM,eAAwB;AAAA,EAC5B,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AACf,WAAO;AAAA,EACT;AAAA,EACA,MAAM;AAAA,EACN,MAAM,KAAK,MAAM;AACf,UAAM,iBAAiB,MAAM;AAG7B,UAAM,mBAAmB,OAAO,KAAK,KAAK,IAAI;AAG9C,UAAM,QAAQ,cAAc,gBAAgB;AAE5C,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,aAAO,0CAA0C,gBAAgB;AAAA,IACnE;AAEA,UAAM,SAAS,6BAA6B,gBAAgB;AAC5D,UAAM,iBAAiB,MAAM,IAAI,UAAQ,UAAK,IAAI,EAAE,EAAE,KAAK,IAAI;AAE/D,WAAO,GAAG,MAAM;AAAA;AAAA,EAAO,cAAc;AAAA,EACvC;AACF;AAEA,IAAO,wBAAQ;",
6
- "names": []
7
- }