@within-7/minto 0.1.5 → 0.1.6

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 (264) hide show
  1. package/dist/commands/agents/AgentsCommand.js +2342 -0
  2. package/dist/commands/agents/AgentsCommand.js.map +7 -0
  3. package/dist/commands/agents/constants.js +58 -0
  4. package/dist/commands/agents/constants.js.map +7 -0
  5. package/dist/commands/agents/index.js +37 -0
  6. package/dist/commands/agents/index.js.map +7 -0
  7. package/dist/commands/agents/types.js +10 -0
  8. package/dist/commands/agents/types.js.map +7 -0
  9. package/dist/commands/agents/utils/fileOperations.js +185 -0
  10. package/dist/commands/agents/utils/fileOperations.js.map +7 -0
  11. package/dist/commands/agents/utils/index.js +21 -0
  12. package/dist/commands/agents/utils/index.js.map +7 -0
  13. package/dist/commands/bug.js +2 -2
  14. package/dist/commands/bug.js.map +2 -2
  15. package/dist/commands/compact.js +5 -5
  16. package/dist/commands/compact.js.map +2 -2
  17. package/dist/commands/ctx_viz.js +55 -22
  18. package/dist/commands/ctx_viz.js.map +2 -2
  19. package/dist/commands/mcp-interactive.js +11 -11
  20. package/dist/commands/mcp-interactive.js.map +2 -2
  21. package/dist/commands/model.js +94 -32
  22. package/dist/commands/model.js.map +3 -3
  23. package/dist/commands/plugin/AddMarketplaceForm.js +49 -21
  24. package/dist/commands/plugin/AddMarketplaceForm.js.map +2 -2
  25. package/dist/commands/plugin/ConfirmDialog.js +38 -26
  26. package/dist/commands/plugin/ConfirmDialog.js.map +2 -2
  27. package/dist/commands/plugin/InstalledPluginsByMarketplace.js +24 -8
  28. package/dist/commands/plugin/InstalledPluginsByMarketplace.js.map +2 -2
  29. package/dist/commands/plugin/InstalledPluginsManager.js +3 -1
  30. package/dist/commands/plugin/InstalledPluginsManager.js.map +2 -2
  31. package/dist/commands/plugin/MainMenu.js +16 -7
  32. package/dist/commands/plugin/MainMenu.js.map +2 -2
  33. package/dist/commands/plugin/MarketplaceManager.js +84 -39
  34. package/dist/commands/plugin/MarketplaceManager.js.map +2 -2
  35. package/dist/commands/plugin/MarketplaceSelector.js +7 -3
  36. package/dist/commands/plugin/MarketplaceSelector.js.map +2 -2
  37. package/dist/commands/plugin/PlaceholderScreen.js +16 -2
  38. package/dist/commands/plugin/PlaceholderScreen.js.map +2 -2
  39. package/dist/commands/plugin/PluginBrowser.js +4 -2
  40. package/dist/commands/plugin/PluginBrowser.js.map +2 -2
  41. package/dist/commands/plugin/PluginDetailsInstall.js +12 -6
  42. package/dist/commands/plugin/PluginDetailsInstall.js.map +2 -2
  43. package/dist/commands/plugin/PluginDetailsManage.js +14 -5
  44. package/dist/commands/plugin/PluginDetailsManage.js.map +2 -2
  45. package/dist/commands/plugin/example-usage.js.map +2 -2
  46. package/dist/commands/plugin/utils.js.map +2 -2
  47. package/dist/commands/plugin.js +226 -46
  48. package/dist/commands/plugin.js.map +2 -2
  49. package/dist/commands/refreshCommands.js +6 -3
  50. package/dist/commands/refreshCommands.js.map +2 -2
  51. package/dist/commands/resume.js +2 -1
  52. package/dist/commands/resume.js.map +2 -2
  53. package/dist/commands/setup.js +19 -5
  54. package/dist/commands/setup.js.map +2 -2
  55. package/dist/commands/terminalSetup.js +2 -2
  56. package/dist/commands/terminalSetup.js.map +1 -1
  57. package/dist/commands.js +14 -30
  58. package/dist/commands.js.map +2 -2
  59. package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js.map +2 -2
  60. package/dist/components/AskUserQuestionDialog/QuestionView.js +10 -1
  61. package/dist/components/AskUserQuestionDialog/QuestionView.js.map +2 -2
  62. package/dist/components/BackgroundTasksPanel.js +5 -1
  63. package/dist/components/BackgroundTasksPanel.js.map +2 -2
  64. package/dist/components/Config.js +17 -4
  65. package/dist/components/Config.js.map +2 -2
  66. package/dist/components/ConsoleOAuthFlow.js.map +2 -2
  67. package/dist/components/CustomSelect/select-option.js +4 -1
  68. package/dist/components/CustomSelect/select-option.js.map +2 -2
  69. package/dist/components/Help.js +6 -8
  70. package/dist/components/Help.js.map +2 -2
  71. package/dist/components/Logo.js +1 -1
  72. package/dist/components/Logo.js.map +2 -2
  73. package/dist/components/ModelListManager.js.map +2 -2
  74. package/dist/components/ModelSelector/ModelSelector.js +2030 -0
  75. package/dist/components/ModelSelector/ModelSelector.js.map +7 -0
  76. package/dist/components/ModelSelector/ScreenContainer.js +27 -0
  77. package/dist/components/ModelSelector/ScreenContainer.js.map +7 -0
  78. package/dist/components/ModelSelector/constants.js +37 -0
  79. package/dist/components/ModelSelector/constants.js.map +7 -0
  80. package/dist/components/ModelSelector/hooks/index.js +5 -0
  81. package/dist/components/ModelSelector/hooks/index.js.map +7 -0
  82. package/dist/components/ModelSelector/hooks/useEscapeNavigation.js +21 -0
  83. package/dist/components/ModelSelector/hooks/useEscapeNavigation.js.map +7 -0
  84. package/dist/components/ModelSelector/index.js +17 -0
  85. package/dist/components/ModelSelector/index.js.map +7 -0
  86. package/dist/components/ModelSelector/types.js +1 -0
  87. package/dist/components/ModelSelector/types.js.map +7 -0
  88. package/dist/components/PressEnterToContinue.js +1 -1
  89. package/dist/components/PressEnterToContinue.js.map +2 -2
  90. package/dist/components/ProjectOnboarding.js +1 -1
  91. package/dist/components/ProjectOnboarding.js.map +2 -2
  92. package/dist/components/PromptInput.js +88 -37
  93. package/dist/components/PromptInput.js.map +2 -2
  94. package/dist/components/QuitSummary.js +17 -10
  95. package/dist/components/QuitSummary.js.map +2 -2
  96. package/dist/components/SentryErrorBoundary.js.map +2 -2
  97. package/dist/components/StreamingBashOutput.js.map +2 -2
  98. package/dist/components/StructuredDiff.js.map +2 -2
  99. package/dist/components/SubagentProgress.js.map +2 -2
  100. package/dist/components/TaskCard.js.map +2 -2
  101. package/dist/components/TextInput.js.map +1 -1
  102. package/dist/components/TodoItem.js.map +1 -1
  103. package/dist/components/binary-feedback/BinaryFeedbackOption.js +1 -3
  104. package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +2 -2
  105. package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +1 -1
  106. package/dist/components/messages/AssistantToolUseMessage.js +3 -1
  107. package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
  108. package/dist/components/messages/TaskProgressMessage.js.map +2 -2
  109. package/dist/components/messages/TaskToolMessage.js.map +2 -2
  110. package/dist/components/messages/UserToolResultMessage/utils.js.map +2 -2
  111. package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +2 -2
  112. package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +2 -2
  113. package/dist/components/permissions/hooks.js.map +2 -2
  114. package/dist/constants/modelCapabilities.js +1 -1
  115. package/dist/constants/modelCapabilities.js.map +2 -2
  116. package/dist/constants/prompts.js.map +1 -1
  117. package/dist/constants/timing.js +34 -0
  118. package/dist/constants/timing.js.map +7 -0
  119. package/dist/entrypoints/cli.js +128 -33
  120. package/dist/entrypoints/cli.js.map +3 -3
  121. package/dist/entrypoints/mcp.js +13 -18
  122. package/dist/entrypoints/mcp.js.map +2 -2
  123. package/dist/hooks/useCanUseTool.js.map +2 -2
  124. package/dist/hooks/useCancelRequest.js.map +1 -1
  125. package/dist/hooks/useHistorySearch.js.map +2 -2
  126. package/dist/hooks/useLogStartupTime.js.map +2 -2
  127. package/dist/hooks/usePermissionRequestLogging.js.map +2 -2
  128. package/dist/hooks/useTextInput.js.map +1 -1
  129. package/dist/hooks/useUnifiedCompletion.js +493 -394
  130. package/dist/hooks/useUnifiedCompletion.js.map +2 -2
  131. package/dist/index.js.map +2 -2
  132. package/dist/permissions.js +4 -7
  133. package/dist/permissions.js.map +2 -2
  134. package/dist/query.js +6 -1
  135. package/dist/query.js.map +2 -2
  136. package/dist/screens/REPL.js +72 -36
  137. package/dist/screens/REPL.js.map +2 -2
  138. package/dist/screens/ResumeConversation.js +2 -1
  139. package/dist/screens/ResumeConversation.js.map +2 -2
  140. package/dist/services/adapters/base.js.map +2 -2
  141. package/dist/services/adapters/chatCompletions.js.map +2 -2
  142. package/dist/services/adapters/responsesAPI.js +3 -1
  143. package/dist/services/adapters/responsesAPI.js.map +2 -2
  144. package/dist/services/claude.js +327 -328
  145. package/dist/services/claude.js.map +2 -2
  146. package/dist/services/customCommands.js +6 -1
  147. package/dist/services/customCommands.js.map +2 -2
  148. package/dist/services/fileFreshness.js.map +2 -2
  149. package/dist/services/gpt5ConnectionTest.js +20 -7
  150. package/dist/services/gpt5ConnectionTest.js.map +2 -2
  151. package/dist/services/hookExecutor.js +6 -12
  152. package/dist/services/hookExecutor.js.map +2 -2
  153. package/dist/services/mcpClient.js +29 -2
  154. package/dist/services/mcpClient.js.map +2 -2
  155. package/dist/services/mentionProcessor.js +23 -10
  156. package/dist/services/mentionProcessor.js.map +2 -2
  157. package/dist/services/modelAdapterFactory.js.map +2 -2
  158. package/dist/services/oauth.js.map +2 -2
  159. package/dist/services/openai.js +109 -72
  160. package/dist/services/openai.js.map +3 -3
  161. package/dist/services/responseStateManager.js.map +2 -2
  162. package/dist/services/systemReminder.js.map +2 -2
  163. package/dist/tools/ArchitectTool/ArchitectTool.js.map +1 -1
  164. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +14 -8
  165. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
  166. package/dist/tools/BashOutputTool/BashOutputTool.js.map +2 -2
  167. package/dist/tools/BashTool/BashTool.js.map +2 -2
  168. package/dist/tools/FileReadTool/FileReadTool.js.map +1 -1
  169. package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
  170. package/dist/tools/GrepTool/GrepTool.js +1 -4
  171. package/dist/tools/GrepTool/GrepTool.js.map +2 -2
  172. package/dist/tools/MultiEditTool/MultiEditTool.js +4 -1
  173. package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
  174. package/dist/tools/NotebookReadTool/NotebookReadTool.js +3 -1
  175. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +2 -2
  176. package/dist/tools/SkillTool/SkillTool.js +12 -6
  177. package/dist/tools/SkillTool/SkillTool.js.map +2 -2
  178. package/dist/tools/TaskTool/TaskTool.js +14 -5
  179. package/dist/tools/TaskTool/TaskTool.js.map +2 -2
  180. package/dist/tools/TaskTool/prompt.js.map +2 -2
  181. package/dist/tools/ThinkTool/ThinkTool.js +6 -1
  182. package/dist/tools/ThinkTool/ThinkTool.js.map +2 -2
  183. package/dist/tools/TodoWriteTool/TodoWriteTool.js +23 -3
  184. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +2 -2
  185. package/dist/tools/URLFetcherTool/URLFetcherTool.js +2 -2
  186. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
  187. package/dist/tools/URLFetcherTool/cache.js +6 -3
  188. package/dist/tools/URLFetcherTool/cache.js.map +2 -2
  189. package/dist/tools/URLFetcherTool/htmlToMarkdown.js +3 -1
  190. package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +2 -2
  191. package/dist/tools/WebSearchTool/WebSearchTool.js.map +2 -2
  192. package/dist/tools/WebSearchTool/prompt.js.map +2 -2
  193. package/dist/tools/WebSearchTool/searchProviders.js +15 -6
  194. package/dist/tools/WebSearchTool/searchProviders.js.map +2 -2
  195. package/dist/tools.js +4 -1
  196. package/dist/tools.js.map +2 -2
  197. package/dist/types/core.js +1 -0
  198. package/dist/types/core.js.map +7 -0
  199. package/dist/types/hooks.js +1 -4
  200. package/dist/types/hooks.js.map +2 -2
  201. package/dist/types/marketplace.js +8 -2
  202. package/dist/types/marketplace.js.map +2 -2
  203. package/dist/types/plugin.js +9 -6
  204. package/dist/types/plugin.js.map +2 -2
  205. package/dist/utils/BackgroundShellManager.js +76 -10
  206. package/dist/utils/BackgroundShellManager.js.map +2 -2
  207. package/dist/utils/PersistentShell.js +7 -2
  208. package/dist/utils/PersistentShell.js.map +2 -2
  209. package/dist/utils/advancedFuzzyMatcher.js +4 -1
  210. package/dist/utils/advancedFuzzyMatcher.js.map +2 -2
  211. package/dist/utils/agentLoader.js +69 -35
  212. package/dist/utils/agentLoader.js.map +2 -2
  213. package/dist/utils/agentStorage.js.map +2 -2
  214. package/dist/utils/async.js +163 -0
  215. package/dist/utils/async.js.map +7 -0
  216. package/dist/utils/autoUpdater.js +8 -2
  217. package/dist/utils/autoUpdater.js.map +2 -2
  218. package/dist/utils/commands.js +23 -11
  219. package/dist/utils/commands.js.map +2 -2
  220. package/dist/utils/commonUnixCommands.js +3 -1
  221. package/dist/utils/commonUnixCommands.js.map +2 -2
  222. package/dist/utils/compressionMode.js.map +2 -2
  223. package/dist/utils/config.js +30 -14
  224. package/dist/utils/config.js.map +2 -2
  225. package/dist/utils/debugLogger.js.map +2 -2
  226. package/dist/utils/env.js.map +2 -2
  227. package/dist/utils/envConfig.js +82 -0
  228. package/dist/utils/envConfig.js.map +7 -0
  229. package/dist/utils/errorHandling.js +89 -0
  230. package/dist/utils/errorHandling.js.map +7 -0
  231. package/dist/utils/expertChatStorage.js.map +2 -2
  232. package/dist/utils/fuzzyMatcher.js +13 -7
  233. package/dist/utils/fuzzyMatcher.js.map +2 -2
  234. package/dist/utils/hookManager.js +14 -4
  235. package/dist/utils/hookManager.js.map +2 -2
  236. package/dist/utils/log.js.map +2 -2
  237. package/dist/utils/marketplaceManager.js +44 -9
  238. package/dist/utils/marketplaceManager.js.map +2 -2
  239. package/dist/utils/messageContextManager.js.map +1 -1
  240. package/dist/utils/messages.js +6 -3
  241. package/dist/utils/messages.js.map +2 -2
  242. package/dist/utils/model.js +3 -1
  243. package/dist/utils/model.js.map +2 -2
  244. package/dist/utils/pluginInstaller.js +3 -15
  245. package/dist/utils/pluginInstaller.js.map +2 -2
  246. package/dist/utils/pluginLoader.js +41 -13
  247. package/dist/utils/pluginLoader.js.map +2 -2
  248. package/dist/utils/pluginRegistry.js.map +2 -2
  249. package/dist/utils/pluginValidator.js +71 -49
  250. package/dist/utils/pluginValidator.js.map +2 -2
  251. package/dist/utils/ptyCompat.js.map +2 -2
  252. package/dist/utils/roundConverter.js.map +2 -2
  253. package/dist/utils/secureFile.js +43 -14
  254. package/dist/utils/secureFile.js.map +2 -2
  255. package/dist/utils/sessionState.js.map +2 -2
  256. package/dist/utils/skillLoader.js.map +2 -2
  257. package/dist/utils/teamConfig.js +7 -4
  258. package/dist/utils/teamConfig.js.map +2 -2
  259. package/dist/utils/theme.js.map +2 -2
  260. package/dist/utils/thinking.js.map +2 -2
  261. package/dist/utils/unaryLogging.js.map +2 -2
  262. package/dist/version.js +2 -2
  263. package/dist/version.js.map +1 -1
  264. package/package.json +5 -5
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -2,7 +2,7 @@ import * as React from "react";
2
2
  import { getTheme } from "../utils/theme.js";
3
3
  import { Text } from "ink";
4
4
  function PressEnterToContinue() {
5
- return /* @__PURE__ */ React.createElement(Text, { color: getTheme().permission }, "Press ", /* @__PURE__ */ React.createElement(Text, { bold: true }, "Enter"), " to continue\u2026");
5
+ return /* @__PURE__ */ React.createElement(Text, { color: getTheme().permission }, "Press ", /* @__PURE__ */ React.createElement(Text, { bold: true }, "Enter"), " or ", /* @__PURE__ */ React.createElement(Text, { bold: true }, "Esc"), " to continue\u2026");
6
6
  }
7
7
  export {
8
8
  PressEnterToContinue
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/PressEnterToContinue.tsx"],
4
- "sourcesContent": ["import * as React from 'react'\nimport { getTheme } from '@utils/theme'\nimport { Text } from 'ink'\n\nexport function PressEnterToContinue(): React.ReactNode {\n return (\n <Text color={getTheme().permission}>\n Press <Text bold>Enter</Text> to continue\u2026\n </Text>\n )\n}\n"],
5
- "mappings": "AAAA,YAAY,WAAW;AACvB,SAAS,gBAAgB;AACzB,SAAS,YAAY;AAEd,SAAS,uBAAwC;AACtD,SACE,oCAAC,QAAK,OAAO,SAAS,EAAE,cAAY,UAC5B,oCAAC,QAAK,MAAI,QAAC,OAAK,GAAO,oBAC/B;AAEJ;",
4
+ "sourcesContent": ["import * as React from 'react'\nimport { getTheme } from '@utils/theme'\nimport { Text } from 'ink'\n\nexport function PressEnterToContinue(): React.ReactNode {\n return (\n <Text color={getTheme().permission}>\n Press <Text bold>Enter</Text> or <Text bold>Esc</Text> to continue\u2026\n </Text>\n )\n}\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;AACvB,SAAS,gBAAgB;AACzB,SAAS,YAAY;AAEd,SAAS,uBAAwC;AACtD,SACE,oCAAC,QAAK,OAAO,SAAS,EAAE,cAAY,UAC5B,oCAAC,QAAK,MAAI,QAAC,OAAK,GAAO,QAAI,oCAAC,QAAK,MAAI,QAAC,KAAG,GAAO,oBACxD;AAEJ;",
6
6
  "names": []
7
7
  }
@@ -72,7 +72,7 @@ function ProjectOnboarding({
72
72
  }
73
73
  if (showTerminalTip) {
74
74
  items.push(
75
- /* @__PURE__ */ React.createElement(React.Fragment, { key: "terminal" }, /* @__PURE__ */ React.createElement(OrderedList.Item, null, /* @__PURE__ */ React.createElement(Text, { color: theme.secondaryText }, "Run ", /* @__PURE__ */ React.createElement(Text, { color: theme.text }, "/terminal-setup"), /* @__PURE__ */ React.createElement(Text, { bold: false }, " to set up terminal integration"))))
75
+ /* @__PURE__ */ React.createElement(React.Fragment, { key: "terminal" }, /* @__PURE__ */ React.createElement(OrderedList.Item, null, /* @__PURE__ */ React.createElement(Text, { color: theme.secondaryText }, "Run ", /* @__PURE__ */ React.createElement(Text, { color: theme.text }, "/terminal-setup"), /* @__PURE__ */ React.createElement(Text, { bold: false }, " ", "to set up terminal integration"))))
76
76
  );
77
77
  }
78
78
  items.push(
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/components/ProjectOnboarding.tsx"],
4
- "sourcesContent": ["import * as React from 'react'\nimport { OrderedList } from '@inkjs/ui'\nimport { Box, Text } from 'ink'\nimport {\n getCurrentProjectConfig,\n getGlobalConfig,\n saveCurrentProjectConfig,\n saveGlobalConfig,\n} from '@utils/config'\nimport { existsSync } from 'fs'\nimport { join } from 'path'\nimport { homedir } from 'os'\nimport terminalSetup from '@commands/terminalSetup'\nimport { getTheme } from '@utils/theme'\nimport { RELEASE_NOTES } from '@constants/releaseNotes'\nimport { gt } from 'semver'\nimport { isDirEmpty } from '@utils/file'\nimport { MACRO } from '@constants/macros'\nimport { PROJECT_FILE, PRODUCT_NAME } from '@constants/product'\n\n// Function to mark onboarding as complete\nexport function markProjectOnboardingComplete(): void {\n const projectConfig = getCurrentProjectConfig()\n if (!projectConfig.hasCompletedProjectOnboarding) {\n saveCurrentProjectConfig({\n ...projectConfig,\n hasCompletedProjectOnboarding: true,\n })\n }\n}\n\nfunction markReleaseNotesSeen(): void {\n const config = getGlobalConfig()\n saveGlobalConfig({\n ...config,\n lastReleaseNotesSeen: MACRO.VERSION,\n })\n}\n\ntype Props = {\n workspaceDir: string\n}\n\nexport default function ProjectOnboarding({\n workspaceDir,\n}: Props): React.ReactNode {\n // Check if project onboarding has already been completed\n const projectConfig = getCurrentProjectConfig()\n const showOnboarding = !projectConfig.hasCompletedProjectOnboarding\n\n // Get previous version from config\n const config = getGlobalConfig()\n const previousVersion = config.lastReleaseNotesSeen\n\n // Get release notes to show\n let releaseNotesToShow: string[] = []\n if (!previousVersion || gt(MACRO.VERSION, previousVersion)) {\n releaseNotesToShow = RELEASE_NOTES[MACRO.VERSION] || []\n }\n const hasReleaseNotes = releaseNotesToShow.length > 0\n\n // Mark release notes as seen when they're displayed without onboarding\n React.useEffect(() => {\n if (hasReleaseNotes && !showOnboarding) {\n markReleaseNotesSeen()\n }\n }, [hasReleaseNotes, showOnboarding])\n\n // We only want to show either onboarding OR release notes (with preference for onboarding)\n // If there's no onboarding to show and no release notes, return null\n if (!showOnboarding && !hasReleaseNotes) {\n return null\n }\n\n // Load what we need for onboarding\n // NOTE: This whole component is statically rendered Once\n const workspaceHasProjectGuide = existsSync(join(workspaceDir, PROJECT_FILE))\n const isWorkspaceDirEmpty = isDirEmpty(workspaceDir)\n const shouldRecommendProjectGuide = !workspaceHasProjectGuide && !isWorkspaceDirEmpty\n const showTerminalTip =\n terminalSetup.isEnabled && !getGlobalConfig().shiftEnterKeyBindingInstalled\n\n const theme = getTheme()\n\n return (\n <Box flexDirection=\"column\" gap={1} padding={1} paddingBottom={0}>\n {showOnboarding && (\n <>\n <Text color={theme.secondaryText}>Tips for getting started:</Text>\n {/* @ts-expect-error - OrderedList children prop issue */}\n <OrderedList>\n {/* Collect all the items that should be displayed */}\n {(() => {\n const items = []\n\n if (isWorkspaceDirEmpty) {\n items.push(\n <React.Fragment key=\"workspace\">\n {/* @ts-expect-error - OrderedList.Item children prop issue */}\n <OrderedList.Item>\n <Text color={theme.secondaryText}>\n Ask {PRODUCT_NAME} to create a new app or clone a\n repository.\n </Text>\n </OrderedList.Item>\n </React.Fragment>,\n )\n }\n if (shouldRecommendProjectGuide) {\n items.push(\n <React.Fragment key=\"projectGuide\">\n {/* @ts-expect-error - OrderedList.Item children prop issue */}\n <OrderedList.Item>\n <Text color={theme.secondaryText}>\n Run <Text color={theme.text}>/init</Text> to create\n a&nbsp;\n {PROJECT_FILE} file with instructions for {PRODUCT_NAME}.\n </Text>\n </OrderedList.Item>\n </React.Fragment>,\n )\n }\n\n if (showTerminalTip) {\n items.push(\n <React.Fragment key=\"terminal\">\n {/* @ts-expect-error - OrderedList.Item children prop issue */}\n <OrderedList.Item>\n <Text color={theme.secondaryText}>\n Run <Text color={theme.text}>/terminal-setup</Text>\n <Text bold={false}> to set up terminal integration</Text>\n </Text>\n </OrderedList.Item>\n </React.Fragment>,\n )\n }\n\n items.push(\n <React.Fragment key=\"questions\">\n {/* @ts-expect-error - OrderedList.Item children prop issue */}\n <OrderedList.Item>\n <Text color={theme.secondaryText}>\n Ask {PRODUCT_NAME} questions about your codebase.\n </Text>\n </OrderedList.Item>\n </React.Fragment>,\n )\n\n items.push(\n <React.Fragment key=\"changes\">\n {/* @ts-expect-error - OrderedList.Item children prop issue */}\n <OrderedList.Item>\n <Text color={theme.secondaryText}>\n Ask {PRODUCT_NAME} to implement changes to your codebase.\n </Text>\n </OrderedList.Item>\n </React.Fragment>,\n )\n\n return items\n })()}\n </OrderedList>\n </>\n )}\n\n {!showOnboarding && hasReleaseNotes && (\n <Box\n borderColor={getTheme().secondaryBorder}\n flexDirection=\"column\"\n marginRight={1}\n >\n <Box flexDirection=\"column\" gap={0}>\n <Box marginBottom={1}>\n <Text>\uD83C\uDD95 What&apos;s new in v{MACRO.VERSION}:</Text>\n </Box>\n <Box flexDirection=\"column\" marginLeft={1}>\n {releaseNotesToShow.map((note, noteIndex) => (\n <React.Fragment key={noteIndex}>\n <Text color={getTheme().secondaryText}>\n \u2022 {note}\n </Text>\n </React.Fragment>\n ))}\n </Box>\n </Box>\n </Box>\n )}\n\n {workspaceDir === homedir() && (\n <Text color={getTheme().warning}>\n Note: You have launched <Text bold>anon-code</Text> in your home\n directory. For the best experience, launch it in a project directory\n instead.\n </Text>\n )}\n </Box>\n )\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as React from 'react'\nimport { OrderedList } from '@inkjs/ui'\nimport { Box, Text } from 'ink'\nimport {\n getCurrentProjectConfig,\n getGlobalConfig,\n saveCurrentProjectConfig,\n saveGlobalConfig,\n} from '@utils/config'\nimport { existsSync } from 'fs'\nimport { join } from 'path'\nimport { homedir } from 'os'\nimport terminalSetup from '@commands/terminalSetup'\nimport { getTheme } from '@utils/theme'\nimport { RELEASE_NOTES } from '@constants/releaseNotes'\nimport { gt } from 'semver'\nimport { isDirEmpty } from '@utils/file'\nimport { MACRO } from '@constants/macros'\nimport { PROJECT_FILE, PRODUCT_NAME } from '@constants/product'\n\n// Function to mark onboarding as complete\nexport function markProjectOnboardingComplete(): void {\n const projectConfig = getCurrentProjectConfig()\n if (!projectConfig.hasCompletedProjectOnboarding) {\n saveCurrentProjectConfig({\n ...projectConfig,\n hasCompletedProjectOnboarding: true,\n })\n }\n}\n\nfunction markReleaseNotesSeen(): void {\n const config = getGlobalConfig()\n saveGlobalConfig({\n ...config,\n lastReleaseNotesSeen: MACRO.VERSION,\n })\n}\n\ntype Props = {\n workspaceDir: string\n}\n\nexport default function ProjectOnboarding({\n workspaceDir,\n}: Props): React.ReactNode {\n // Check if project onboarding has already been completed\n const projectConfig = getCurrentProjectConfig()\n const showOnboarding = !projectConfig.hasCompletedProjectOnboarding\n\n // Get previous version from config\n const config = getGlobalConfig()\n const previousVersion = config.lastReleaseNotesSeen\n\n // Get release notes to show\n let releaseNotesToShow: string[] = []\n if (!previousVersion || gt(MACRO.VERSION, previousVersion)) {\n releaseNotesToShow = RELEASE_NOTES[MACRO.VERSION] || []\n }\n const hasReleaseNotes = releaseNotesToShow.length > 0\n\n // Mark release notes as seen when they're displayed without onboarding\n React.useEffect(() => {\n if (hasReleaseNotes && !showOnboarding) {\n markReleaseNotesSeen()\n }\n }, [hasReleaseNotes, showOnboarding])\n\n // We only want to show either onboarding OR release notes (with preference for onboarding)\n // If there's no onboarding to show and no release notes, return null\n if (!showOnboarding && !hasReleaseNotes) {\n return null\n }\n\n // Load what we need for onboarding\n // NOTE: This whole component is statically rendered Once\n const workspaceHasProjectGuide = existsSync(join(workspaceDir, PROJECT_FILE))\n const isWorkspaceDirEmpty = isDirEmpty(workspaceDir)\n const shouldRecommendProjectGuide =\n !workspaceHasProjectGuide && !isWorkspaceDirEmpty\n const showTerminalTip =\n terminalSetup.isEnabled && !getGlobalConfig().shiftEnterKeyBindingInstalled\n\n const theme = getTheme()\n\n return (\n <Box flexDirection=\"column\" gap={1} padding={1} paddingBottom={0}>\n {showOnboarding && (\n <>\n <Text color={theme.secondaryText}>Tips for getting started:</Text>\n {/* @ts-expect-error - OrderedList children prop issue */}\n <OrderedList>\n {/* Collect all the items that should be displayed */}\n {(() => {\n const items = []\n\n if (isWorkspaceDirEmpty) {\n items.push(\n <React.Fragment key=\"workspace\">\n {/* @ts-expect-error - OrderedList.Item children prop issue */}\n <OrderedList.Item>\n <Text color={theme.secondaryText}>\n Ask {PRODUCT_NAME} to create a new app or clone a\n repository.\n </Text>\n </OrderedList.Item>\n </React.Fragment>,\n )\n }\n if (shouldRecommendProjectGuide) {\n items.push(\n <React.Fragment key=\"projectGuide\">\n {/* @ts-expect-error - OrderedList.Item children prop issue */}\n <OrderedList.Item>\n <Text color={theme.secondaryText}>\n Run <Text color={theme.text}>/init</Text> to create\n a&nbsp;\n {PROJECT_FILE} file with instructions for {PRODUCT_NAME}\n .\n </Text>\n </OrderedList.Item>\n </React.Fragment>,\n )\n }\n\n if (showTerminalTip) {\n items.push(\n <React.Fragment key=\"terminal\">\n {/* @ts-expect-error - OrderedList.Item children prop issue */}\n <OrderedList.Item>\n <Text color={theme.secondaryText}>\n Run <Text color={theme.text}>/terminal-setup</Text>\n <Text bold={false}>\n {' '}\n to set up terminal integration\n </Text>\n </Text>\n </OrderedList.Item>\n </React.Fragment>,\n )\n }\n\n items.push(\n <React.Fragment key=\"questions\">\n {/* @ts-expect-error - OrderedList.Item children prop issue */}\n <OrderedList.Item>\n <Text color={theme.secondaryText}>\n Ask {PRODUCT_NAME} questions about your codebase.\n </Text>\n </OrderedList.Item>\n </React.Fragment>,\n )\n\n items.push(\n <React.Fragment key=\"changes\">\n {/* @ts-expect-error - OrderedList.Item children prop issue */}\n <OrderedList.Item>\n <Text color={theme.secondaryText}>\n Ask {PRODUCT_NAME} to implement changes to your codebase.\n </Text>\n </OrderedList.Item>\n </React.Fragment>,\n )\n\n return items\n })()}\n </OrderedList>\n </>\n )}\n\n {!showOnboarding && hasReleaseNotes && (\n <Box\n borderColor={getTheme().secondaryBorder}\n flexDirection=\"column\"\n marginRight={1}\n >\n <Box flexDirection=\"column\" gap={0}>\n <Box marginBottom={1}>\n <Text>\uD83C\uDD95 What&apos;s new in v{MACRO.VERSION}:</Text>\n </Box>\n <Box flexDirection=\"column\" marginLeft={1}>\n {releaseNotesToShow.map((note, noteIndex) => (\n <React.Fragment key={noteIndex}>\n <Text color={getTheme().secondaryText}>\u2022 {note}</Text>\n </React.Fragment>\n ))}\n </Box>\n </Box>\n </Box>\n )}\n\n {workspaceDir === homedir() && (\n <Text color={getTheme().warning}>\n Note: You have launched <Text bold>anon-code</Text> in your home\n directory. For the best experience, launch it in a project directory\n instead.\n </Text>\n )}\n </Box>\n )\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -147,20 +147,27 @@ function PromptInput({
147
147
  if (suggestions.length === 0) return null;
148
148
  const hasMoreAbove = visibleSuggestions.length > 0 && visibleSuggestions[0].globalIndex > 0;
149
149
  const hasMoreBelow = visibleSuggestions.length > 0 && visibleSuggestions[visibleSuggestions.length - 1].globalIndex < suggestions.length - 1;
150
- return /* @__PURE__ */ React.createElement(React.Fragment, null, hasMoreAbove && /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " \u2191 ", visibleSuggestions[0].globalIndex, " more above...")), visibleSuggestions.map((suggestion) => {
150
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, hasMoreAbove && /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " ", "\u2191 ", visibleSuggestions[0].globalIndex, " more above...")), visibleSuggestions.map((suggestion) => {
151
151
  const isSelected = suggestion.globalIndex === selectedIndex;
152
152
  const isAgent = suggestion.type === "agent";
153
153
  const displayColor = isSelected ? theme.suggestion : isAgent && suggestion.metadata?.color ? suggestion.metadata.color : void 0;
154
- return /* @__PURE__ */ React.createElement(Box, { key: `${suggestion.type}-${suggestion.value}-${suggestion.globalIndex}`, flexDirection: "row" }, /* @__PURE__ */ React.createElement(
155
- Text,
154
+ return /* @__PURE__ */ React.createElement(
155
+ Box,
156
156
  {
157
- color: displayColor,
158
- dimColor: !isSelected && !displayColor
157
+ key: `${suggestion.type}-${suggestion.value}-${suggestion.globalIndex}`,
158
+ flexDirection: "row"
159
159
  },
160
- isSelected ? "\u25C6 " : " ",
161
- suggestion.displayValue
162
- ));
163
- }), hasMoreBelow && /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " \u2193 ", suggestions.length - visibleSuggestions[visibleSuggestions.length - 1].globalIndex - 1, " more below...")));
160
+ /* @__PURE__ */ React.createElement(
161
+ Text,
162
+ {
163
+ color: displayColor,
164
+ dimColor: !isSelected && !displayColor
165
+ },
166
+ isSelected ? "\u25C6 " : " ",
167
+ suggestion.displayValue
168
+ )
169
+ );
170
+ }), hasMoreBelow && /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " ", "\u2193", " ", suggestions.length - visibleSuggestions[visibleSuggestions.length - 1].globalIndex - 1, " ", "more below...")));
164
171
  }, [suggestions, selectedIndex, visibleSuggestions, theme.suggestion]);
165
172
  const onChange = useCallback(
166
173
  (value) => {
@@ -246,7 +253,10 @@ function PromptInput({
246
253
  return;
247
254
  }
248
255
  } else {
249
- setMessage({ show: true, text: decision.reason || "Blocked by hook" });
256
+ setMessage({
257
+ show: true,
258
+ text: decision.reason || "Blocked by hook"
259
+ });
250
260
  setTimeout(() => setMessage({ show: false }), 3e3);
251
261
  return;
252
262
  }
@@ -399,7 +409,10 @@ function PromptInput({
399
409
  abortController.abort();
400
410
  }
401
411
  setIsLoading(false);
402
- setHotkeyMessage({ show: true, text: "Interrupted by user (Ctrl-C)" });
412
+ setHotkeyMessage({
413
+ show: true,
414
+ text: "Interrupted by user (Ctrl-C)"
415
+ });
403
416
  setTimeout(() => setHotkeyMessage({ show: false }), 2e3);
404
417
  } else if (input.length > 0) {
405
418
  onInputChange("");
@@ -426,7 +439,10 @@ function PromptInput({
426
439
  setHotkeyMessage({ show: true, text: "Exiting gracefully..." });
427
440
  setTimeout(() => exit(), 500);
428
441
  } else {
429
- setHotkeyMessage({ show: true, text: "Press Ctrl-D again to exit" });
442
+ setHotkeyMessage({
443
+ show: true,
444
+ text: "Press Ctrl-D again to exit"
445
+ });
430
446
  setTimeout(() => setHotkeyMessage({ show: false }), 2e3);
431
447
  }
432
448
  return true;
@@ -580,7 +596,10 @@ function PromptInput({
580
596
  if (escCount >= 1) {
581
597
  const success = onRollbackConversation();
582
598
  if (success) {
583
- setMessage({ show: true, text: "Conversation rolled back (Esc Esc)" });
599
+ setMessage({
600
+ show: true,
601
+ text: "Conversation rolled back (Esc Esc)"
602
+ });
584
603
  setTimeout(() => setMessage({ show: false }), 2e3);
585
604
  } else {
586
605
  setMessage({ show: true, text: "No history to rollback" });
@@ -589,7 +608,10 @@ function PromptInput({
589
608
  setEscCount(0);
590
609
  return true;
591
610
  } else {
592
- setMessage({ show: true, text: "Press Esc again to rollback conversation" });
611
+ setMessage({
612
+ show: true,
613
+ text: "Press Esc again to rollback conversation"
614
+ });
593
615
  setTimeout(() => setMessage({ show: false }), 2e3);
594
616
  return true;
595
617
  }
@@ -619,13 +641,16 @@ function PromptInput({
619
641
  },
620
642
  { isActive: !isBackgroundPanelOpen && !fallbackMode }
621
643
  );
622
- const handleSpecialKey = useCallback((inputChar, key) => {
623
- if (key.shift && (inputChar === "M" || inputChar === "m")) {
624
- handleQuickModelSwitch();
625
- return true;
626
- }
627
- return false;
628
- }, [handleQuickModelSwitch]);
644
+ const handleSpecialKey = useCallback(
645
+ (inputChar, key) => {
646
+ if (key.shift && (inputChar === "M" || inputChar === "m")) {
647
+ handleQuickModelSwitch();
648
+ return true;
649
+ }
650
+ return false;
651
+ },
652
+ [handleQuickModelSwitch]
653
+ );
629
654
  const textInputColumns = useTerminalSize().columns - 6;
630
655
  const tokenUsage = useMemo(() => countTokens(messages), [messages]);
631
656
  const modelManager = getModelManager();
@@ -647,7 +672,7 @@ function PromptInput({
647
672
  currentTokens: tokenUsage
648
673
  };
649
674
  }, [tokenUsage, modelSwitchMessage.show, submitCount, currentModelId]);
650
- return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column" }, fallbackMode && /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "yellow" }, "\u26A0\uFE0F Limited input mode"), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " ", "(Advanced keyboard shortcuts unavailable - raw mode not supported)")), historySearch.isActive && /* @__PURE__ */ React.createElement(
675
+ return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column" }, fallbackMode && /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "yellow" }, "\u26A0\uFE0F Limited input mode"), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " ", "(Advanced keyboard shortcuts unavailable - raw mode not supported)")), historySearch.isActive && /* @__PURE__ */ React.createElement(
651
676
  HistorySearchOverlay,
652
677
  {
653
678
  searchTerm: historySearch.searchTerm,
@@ -737,7 +762,12 @@ function PromptInput({
737
762
  " background task",
738
763
  backgroundShellCount > 1 ? "s" : ""
739
764
  ))),
740
- /* @__PURE__ */ React.createElement(SentryErrorBoundary, { children: /* @__PURE__ */ React.createElement(Box, { justifyContent: "flex-end", gap: 1 }, !debug && tokenUsage < WARNING_THRESHOLD && /* @__PURE__ */ React.createElement(Text, { dimColor: true }, terminalSetup.isEnabled && isShiftEnterKeyBindingInstalled() ? "shift + \u23CE for newline" : "\\\u23CE for newline"), /* @__PURE__ */ React.createElement(TokenWarning, { tokenUsage })) })
765
+ /* @__PURE__ */ React.createElement(
766
+ SentryErrorBoundary,
767
+ {
768
+ children: /* @__PURE__ */ React.createElement(Box, { justifyContent: "flex-end", gap: 1 }, !debug && tokenUsage < WARNING_THRESHOLD && /* @__PURE__ */ React.createElement(Text, { dimColor: true }, terminalSetup.isEnabled && isShiftEnterKeyBindingInstalled() ? "shift + \u23CE for newline" : "\\\u23CE for newline"), /* @__PURE__ */ React.createElement(TokenWarning, { tokenUsage }))
769
+ }
770
+ )
741
771
  ), suggestions.length > 0 && /* @__PURE__ */ React.createElement(
742
772
  Box,
743
773
  {
@@ -746,21 +776,42 @@ function PromptInput({
746
776
  paddingX: 2,
747
777
  paddingY: 0
748
778
  },
749
- /* @__PURE__ */ React.createElement(Box, { flexDirection: "column" }, renderedSuggestions, /* @__PURE__ */ React.createElement(Box, { marginTop: 1, paddingX: 3, borderStyle: "round", borderColor: "gray" }, /* @__PURE__ */ React.createElement(Text, { dimColor: !emptyDirMessage, color: emptyDirMessage ? "yellow" : void 0 }, emptyDirMessage || (() => {
750
- const selected = suggestions[selectedIndex];
751
- const positionInfo = suggestions.length > 1 ? `[${selectedIndex + 1}/${suggestions.length}] ` : "";
752
- if (!selected) {
753
- return `${positionInfo}\u2191\u2193 navigate \u2022 \u2192 accept \u2022 Tab cycle \u2022 Esc close`;
754
- }
755
- if (selected?.value.endsWith("/")) {
756
- return `${positionInfo}\u2192 enter directory \u2022 \u2191\u2193 navigate \u2022 Tab cycle \u2022 Esc close`;
757
- } else if (selected?.type === "agent") {
758
- return `${positionInfo}\u2192 select agent \u2022 \u2191\u2193 navigate \u2022 Tab cycle \u2022 Esc close`;
759
- } else {
760
- return `${positionInfo}\u2192 insert reference \u2022 \u2191\u2193 navigate \u2022 Tab cycle \u2022 Esc close`;
779
+ /* @__PURE__ */ React.createElement(Box, { flexDirection: "column" }, renderedSuggestions, /* @__PURE__ */ React.createElement(
780
+ Box,
781
+ {
782
+ marginTop: 1,
783
+ paddingX: 3,
784
+ borderStyle: "round",
785
+ borderColor: "gray"
786
+ },
787
+ /* @__PURE__ */ React.createElement(
788
+ Text,
789
+ {
790
+ dimColor: !emptyDirMessage,
791
+ color: emptyDirMessage ? "yellow" : void 0
792
+ },
793
+ emptyDirMessage || (() => {
794
+ const selected = suggestions[selectedIndex];
795
+ const positionInfo = suggestions.length > 1 ? `[${selectedIndex + 1}/${suggestions.length}] ` : "";
796
+ if (!selected) {
797
+ return `${positionInfo}\u2191\u2193 navigate \u2022 \u2192 accept \u2022 Tab cycle \u2022 Esc close`;
798
+ }
799
+ if (selected?.value.endsWith("/")) {
800
+ return `${positionInfo}\u2192 enter directory \u2022 \u2191\u2193 navigate \u2022 Tab cycle \u2022 Esc close`;
801
+ } else if (selected?.type === "agent") {
802
+ return `${positionInfo}\u2192 select agent \u2022 \u2191\u2193 navigate \u2022 Tab cycle \u2022 Esc close`;
803
+ } else {
804
+ return `${positionInfo}\u2192 insert reference \u2022 \u2191\u2193 navigate \u2022 Tab cycle \u2022 Esc close`;
805
+ }
806
+ })()
807
+ )
808
+ )),
809
+ /* @__PURE__ */ React.createElement(
810
+ SentryErrorBoundary,
811
+ {
812
+ children: /* @__PURE__ */ React.createElement(Box, { justifyContent: "flex-end", gap: 1 }, /* @__PURE__ */ React.createElement(TokenWarning, { tokenUsage: countTokens(messages) }))
761
813
  }
762
- })()))),
763
- /* @__PURE__ */ React.createElement(SentryErrorBoundary, { children: /* @__PURE__ */ React.createElement(Box, { justifyContent: "flex-end", gap: 1 }, /* @__PURE__ */ React.createElement(TokenWarning, { tokenUsage: countTokens(messages) })) })
814
+ )
764
815
  ));
765
816
  }
766
817
  var PromptInput_default = memo(PromptInput);