@vybestack/llxprt-code 0.5.0 → 0.6.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 (515) hide show
  1. package/README.md +0 -244
  2. package/dist/package.json +15 -6
  3. package/dist/src/auth/gemini-oauth-provider.d.ts +18 -0
  4. package/dist/src/auth/gemini-oauth-provider.js +140 -78
  5. package/dist/src/auth/gemini-oauth-provider.js.map +1 -1
  6. package/dist/src/auth/local-oauth-callback.spec.js +29 -2
  7. package/dist/src/auth/local-oauth-callback.spec.js.map +1 -1
  8. package/dist/src/commands/extensions/disable.d.ts +1 -2
  9. package/dist/src/commands/extensions/disable.js +15 -3
  10. package/dist/src/commands/extensions/disable.js.map +1 -1
  11. package/dist/src/commands/extensions/enable.d.ts +1 -2
  12. package/dist/src/commands/extensions/enable.js +17 -6
  13. package/dist/src/commands/extensions/enable.js.map +1 -1
  14. package/dist/src/commands/extensions/install.d.ts +3 -1
  15. package/dist/src/commands/extensions/install.js +63 -12
  16. package/dist/src/commands/extensions/install.js.map +1 -1
  17. package/dist/src/commands/extensions/install.test.js +166 -13
  18. package/dist/src/commands/extensions/install.test.js.map +1 -1
  19. package/dist/src/commands/extensions/link.js +2 -2
  20. package/dist/src/commands/extensions/link.js.map +1 -1
  21. package/dist/src/commands/extensions/list.d.ts +1 -1
  22. package/dist/src/commands/extensions/list.js +3 -2
  23. package/dist/src/commands/extensions/list.js.map +1 -1
  24. package/dist/src/commands/extensions/new.test.js +2 -2
  25. package/dist/src/commands/extensions/new.test.js.map +1 -1
  26. package/dist/src/commands/extensions/uninstall.js +1 -1
  27. package/dist/src/commands/extensions/uninstall.js.map +1 -1
  28. package/dist/src/commands/extensions/uninstall.test.js +4 -1
  29. package/dist/src/commands/extensions/uninstall.test.js.map +1 -1
  30. package/dist/src/commands/extensions/update.d.ts +2 -2
  31. package/dist/src/commands/extensions/update.js +68 -19
  32. package/dist/src/commands/extensions/update.js.map +1 -1
  33. package/dist/src/commands/mcp/add.js +6 -1
  34. package/dist/src/commands/mcp/add.js.map +1 -1
  35. package/dist/src/commands/mcp/list.js +3 -2
  36. package/dist/src/commands/mcp/list.js.map +1 -1
  37. package/dist/src/config/__tests__/profileBootstrap.test.js +1351 -1
  38. package/dist/src/config/__tests__/profileBootstrap.test.js.map +1 -1
  39. package/dist/src/config/config.d.ts +4 -1
  40. package/dist/src/config/config.js +172 -69
  41. package/dist/src/config/config.js.map +1 -1
  42. package/dist/src/config/config.loadMemory.test.js +6 -3
  43. package/dist/src/config/config.loadMemory.test.js.map +1 -1
  44. package/dist/src/config/extension.d.ts +48 -14
  45. package/dist/src/config/extension.js +263 -142
  46. package/dist/src/config/extension.js.map +1 -1
  47. package/dist/src/config/extensions/extensionEnablement.d.ts +47 -0
  48. package/dist/src/config/extensions/extensionEnablement.js +188 -0
  49. package/dist/src/config/extensions/extensionEnablement.js.map +1 -0
  50. package/dist/src/config/extensions/extensionEnablement.test.d.ts +6 -0
  51. package/dist/src/config/extensions/extensionEnablement.test.js +333 -0
  52. package/dist/src/config/extensions/extensionEnablement.test.js.map +1 -0
  53. package/dist/src/config/extensions/github.d.ts +37 -0
  54. package/dist/src/config/extensions/github.js +348 -0
  55. package/dist/src/config/extensions/github.js.map +1 -0
  56. package/dist/src/config/extensions/github.test.d.ts +6 -0
  57. package/dist/src/config/extensions/github.test.js +340 -0
  58. package/dist/src/config/extensions/github.test.js.map +1 -0
  59. package/dist/src/config/extensions/update.d.ts +19 -0
  60. package/dist/src/config/extensions/update.js +118 -0
  61. package/dist/src/config/extensions/update.js.map +1 -0
  62. package/dist/src/config/extensions/update.test.d.ts +6 -0
  63. package/dist/src/config/extensions/update.test.js +340 -0
  64. package/dist/src/config/extensions/update.test.js.map +1 -0
  65. package/dist/src/config/extensions/variableSchema.d.ts +8 -0
  66. package/dist/src/config/extensions/variableSchema.js +4 -0
  67. package/dist/src/config/extensions/variableSchema.js.map +1 -1
  68. package/dist/src/config/keyBindings.d.ts +1 -0
  69. package/dist/src/config/keyBindings.js +3 -1
  70. package/dist/src/config/keyBindings.js.map +1 -1
  71. package/dist/src/config/paths.d.ts +8 -0
  72. package/dist/src/config/paths.js +11 -0
  73. package/dist/src/config/paths.js.map +1 -0
  74. package/dist/src/config/profileBootstrap.d.ts +13 -0
  75. package/dist/src/config/profileBootstrap.js +369 -15
  76. package/dist/src/config/profileBootstrap.js.map +1 -1
  77. package/dist/src/config/settings.d.ts +14 -4
  78. package/dist/src/config/settings.js +161 -99
  79. package/dist/src/config/settings.js.map +1 -1
  80. package/dist/src/config/settingsSchema.d.ts +510 -216
  81. package/dist/src/config/settingsSchema.js +468 -214
  82. package/dist/src/config/settingsSchema.js.map +1 -1
  83. package/dist/src/config/settingsSchema.test.js +18 -31
  84. package/dist/src/config/settingsSchema.test.js.map +1 -1
  85. package/dist/src/config/trustedFolders.d.ts +6 -3
  86. package/dist/src/config/trustedFolders.js +35 -13
  87. package/dist/src/config/trustedFolders.js.map +1 -1
  88. package/dist/src/config/trustedFolders.test.js +83 -9
  89. package/dist/src/config/trustedFolders.test.js.map +1 -1
  90. package/dist/src/coreToolToggle.test.d.ts +6 -0
  91. package/dist/src/coreToolToggle.test.js +427 -0
  92. package/dist/src/coreToolToggle.test.js.map +1 -0
  93. package/dist/src/extensions/extensionAutoUpdater.d.ts +76 -0
  94. package/dist/src/extensions/extensionAutoUpdater.js +279 -0
  95. package/dist/src/extensions/extensionAutoUpdater.js.map +1 -0
  96. package/dist/src/extensions/extensionAutoUpdater.test.d.ts +6 -0
  97. package/dist/src/extensions/extensionAutoUpdater.test.js +146 -0
  98. package/dist/src/extensions/extensionAutoUpdater.test.js.map +1 -0
  99. package/dist/src/gemini.js +93 -63
  100. package/dist/src/gemini.js.map +1 -1
  101. package/dist/src/gemini.test.js +121 -1
  102. package/dist/src/gemini.test.js.map +1 -1
  103. package/dist/src/generated/git-commit.d.ts +1 -1
  104. package/dist/src/generated/git-commit.js +1 -1
  105. package/dist/src/generated/git-commit.js.map +1 -1
  106. package/dist/src/integration-tests/cli-args.integration.test.js +299 -0
  107. package/dist/src/integration-tests/cli-args.integration.test.js.map +1 -1
  108. package/dist/src/nonInteractiveCli.d.ts +2 -1
  109. package/dist/src/nonInteractiveCli.js +29 -16
  110. package/dist/src/nonInteractiveCli.js.map +1 -1
  111. package/dist/src/nonInteractiveCliCommands.d.ts +17 -0
  112. package/dist/src/nonInteractiveCliCommands.js +81 -0
  113. package/dist/src/nonInteractiveCliCommands.js.map +1 -0
  114. package/dist/src/runtime/runtimeSettings.test.js +2 -0
  115. package/dist/src/runtime/runtimeSettings.test.js.map +1 -1
  116. package/dist/src/services/BuiltinCommandLoader.d.ts +3 -3
  117. package/dist/src/services/BuiltinCommandLoader.js +7 -0
  118. package/dist/src/services/BuiltinCommandLoader.js.map +1 -1
  119. package/dist/src/services/BuiltinCommandLoader.test.js +37 -0
  120. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -1
  121. package/dist/src/services/McpPromptLoader.js +39 -34
  122. package/dist/src/services/McpPromptLoader.js.map +1 -1
  123. package/dist/src/settings/ephemeralSettings.js +56 -0
  124. package/dist/src/settings/ephemeralSettings.js.map +1 -1
  125. package/dist/src/test-utils/createExtension.d.ts +15 -0
  126. package/dist/src/test-utils/createExtension.js +24 -0
  127. package/dist/src/test-utils/createExtension.js.map +1 -0
  128. package/dist/src/test-utils/mockCommandContext.js +4 -2
  129. package/dist/src/test-utils/mockCommandContext.js.map +1 -1
  130. package/dist/src/test-utils/render.d.ts +3 -1
  131. package/dist/src/test-utils/render.js +4 -1
  132. package/dist/src/test-utils/render.js.map +1 -1
  133. package/dist/src/ui/App.d.ts +18 -3
  134. package/dist/src/ui/App.js +32 -873
  135. package/dist/src/ui/App.js.map +1 -1
  136. package/dist/src/ui/AppContainer.d.ts +19 -0
  137. package/dist/src/ui/AppContainer.js +1187 -0
  138. package/dist/src/ui/AppContainer.js.map +1 -0
  139. package/dist/src/ui/IdeIntegrationNudge.d.ts +2 -2
  140. package/dist/src/ui/IdeIntegrationNudge.js +4 -7
  141. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -1
  142. package/dist/src/ui/commands/chatCommand.js +214 -58
  143. package/dist/src/ui/commands/chatCommand.js.map +1 -1
  144. package/dist/src/ui/commands/clearCommand.js +1 -2
  145. package/dist/src/ui/commands/clearCommand.js.map +1 -1
  146. package/dist/src/ui/commands/diagnosticsCommand.js +2 -2
  147. package/dist/src/ui/commands/diagnosticsCommand.js.map +1 -1
  148. package/dist/src/ui/commands/directoryCommand.js +3 -2
  149. package/dist/src/ui/commands/directoryCommand.js.map +1 -1
  150. package/dist/src/ui/commands/docsCommand.js +1 -1
  151. package/dist/src/ui/commands/docsCommand.js.map +1 -1
  152. package/dist/src/ui/commands/extensionsCommand.d.ts +1 -1
  153. package/dist/src/ui/commands/extensionsCommand.js +92 -17
  154. package/dist/src/ui/commands/extensionsCommand.js.map +1 -1
  155. package/dist/src/ui/commands/helpCommand.js +6 -5
  156. package/dist/src/ui/commands/helpCommand.js.map +1 -1
  157. package/dist/src/ui/commands/ideCommand.js +7 -7
  158. package/dist/src/ui/commands/ideCommand.js.map +1 -1
  159. package/dist/src/ui/commands/loggingCommand.js +1 -1
  160. package/dist/src/ui/commands/loggingCommand.js.map +1 -1
  161. package/dist/src/ui/commands/mcpCommand.js +11 -3
  162. package/dist/src/ui/commands/mcpCommand.js.map +1 -1
  163. package/dist/src/ui/commands/memoryCommand.js +21 -3
  164. package/dist/src/ui/commands/memoryCommand.js.map +1 -1
  165. package/dist/src/ui/commands/permissionsCommand.d.ts +7 -0
  166. package/dist/src/ui/commands/permissionsCommand.js +16 -0
  167. package/dist/src/ui/commands/permissionsCommand.js.map +1 -0
  168. package/dist/src/ui/commands/permissionsCommand.test.d.ts +6 -0
  169. package/dist/src/ui/commands/permissionsCommand.test.js +55 -0
  170. package/dist/src/ui/commands/permissionsCommand.test.js.map +1 -0
  171. package/dist/src/ui/commands/policiesCommand.d.ts +10 -0
  172. package/dist/src/ui/commands/policiesCommand.js +112 -0
  173. package/dist/src/ui/commands/policiesCommand.js.map +1 -0
  174. package/dist/src/ui/commands/policiesCommand.test.d.ts +6 -0
  175. package/dist/src/ui/commands/policiesCommand.test.js +224 -0
  176. package/dist/src/ui/commands/policiesCommand.test.js.map +1 -0
  177. package/dist/src/ui/commands/setCommand.js +105 -30
  178. package/dist/src/ui/commands/setCommand.js.map +1 -1
  179. package/dist/src/ui/commands/setCommand.test.js +1 -1
  180. package/dist/src/ui/commands/setCommand.test.js.map +1 -1
  181. package/dist/src/ui/commands/statsCommand.js +11 -1
  182. package/dist/src/ui/commands/statsCommand.js.map +1 -1
  183. package/dist/src/ui/commands/test/subagentCommand.test.js +6 -1
  184. package/dist/src/ui/commands/test/subagentCommand.test.js.map +1 -1
  185. package/dist/src/ui/commands/types.d.ts +19 -23
  186. package/dist/src/ui/commands/types.js +1 -1
  187. package/dist/src/ui/commands/types.js.map +1 -1
  188. package/dist/src/ui/commands/uiprofileCommand.d.ts +7 -0
  189. package/dist/src/ui/commands/uiprofileCommand.js +23 -0
  190. package/dist/src/ui/commands/uiprofileCommand.js.map +1 -0
  191. package/dist/src/ui/components/AuthDialog.js +4 -0
  192. package/dist/src/ui/components/AuthDialog.js.map +1 -1
  193. package/dist/src/ui/components/AuthDialog.test.js +32 -32
  194. package/dist/src/ui/components/AuthDialog.test.js.map +1 -1
  195. package/dist/src/ui/components/CacheStatsDisplay.d.ts +7 -0
  196. package/dist/src/ui/components/CacheStatsDisplay.js +35 -0
  197. package/dist/src/ui/components/CacheStatsDisplay.js.map +1 -0
  198. package/dist/src/ui/components/CacheStatsDisplay.test.d.ts +6 -0
  199. package/dist/src/ui/components/CacheStatsDisplay.test.js +118 -0
  200. package/dist/src/ui/components/CacheStatsDisplay.test.js.map +1 -0
  201. package/dist/src/ui/components/CliSpinner.d.ts +10 -0
  202. package/dist/src/ui/components/CliSpinner.js +20 -0
  203. package/dist/src/ui/components/CliSpinner.js.map +1 -0
  204. package/dist/src/ui/components/Composer.d.ts +17 -0
  205. package/dist/src/ui/components/Composer.js +16 -0
  206. package/dist/src/ui/components/Composer.js.map +1 -0
  207. package/dist/src/ui/components/ConsentPrompt.d.ts +13 -0
  208. package/dist/src/ui/components/ConsentPrompt.js +18 -0
  209. package/dist/src/ui/components/ConsentPrompt.js.map +1 -0
  210. package/dist/src/ui/components/ConsentPrompt.test.d.ts +6 -0
  211. package/dist/src/ui/components/ConsentPrompt.test.js +67 -0
  212. package/dist/src/ui/components/ConsentPrompt.test.js.map +1 -0
  213. package/dist/src/ui/components/DebugProfiler.d.ts +15 -0
  214. package/dist/src/ui/components/DebugProfiler.js +137 -13
  215. package/dist/src/ui/components/DebugProfiler.js.map +1 -1
  216. package/dist/src/ui/components/DebugProfiler.test.d.ts +6 -0
  217. package/dist/src/ui/components/DebugProfiler.test.js +131 -0
  218. package/dist/src/ui/components/DebugProfiler.test.js.map +1 -0
  219. package/dist/src/ui/components/DialogManager.d.ts +16 -0
  220. package/dist/src/ui/components/DialogManager.js +131 -0
  221. package/dist/src/ui/components/DialogManager.js.map +1 -0
  222. package/dist/src/ui/components/EditorSettingsDialog.js +18 -8
  223. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -1
  224. package/dist/src/ui/components/FolderTrustDialog.js +4 -0
  225. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -1
  226. package/dist/src/ui/components/FolderTrustDialog.test.js +2 -2
  227. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -1
  228. package/dist/src/ui/components/HistoryItemDisplay.d.ts +6 -2
  229. package/dist/src/ui/components/HistoryItemDisplay.js +10 -2
  230. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -1
  231. package/dist/src/ui/components/HistoryItemDisplay.test.js +90 -10
  232. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -1
  233. package/dist/src/ui/components/InputPrompt.d.ts +6 -0
  234. package/dist/src/ui/components/InputPrompt.js +52 -18
  235. package/dist/src/ui/components/InputPrompt.js.map +1 -1
  236. package/dist/src/ui/components/LoadProfileDialog.js +13 -9
  237. package/dist/src/ui/components/LoadProfileDialog.js.map +1 -1
  238. package/dist/src/ui/components/LoadingIndicator.js +1 -1
  239. package/dist/src/ui/components/LoadingIndicator.js.map +1 -1
  240. package/dist/src/ui/components/LoadingIndicator.test.js +6 -0
  241. package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -1
  242. package/dist/src/ui/components/LoggingDialog.js +14 -10
  243. package/dist/src/ui/components/LoggingDialog.js.map +1 -1
  244. package/dist/src/ui/components/Notifications.d.ts +14 -0
  245. package/dist/src/ui/components/Notifications.js +34 -0
  246. package/dist/src/ui/components/Notifications.js.map +1 -0
  247. package/dist/src/ui/components/OAuthCodeDialog.js +2 -1
  248. package/dist/src/ui/components/OAuthCodeDialog.js.map +1 -1
  249. package/dist/src/ui/components/PermissionsModifyTrustDialog.d.ts +14 -0
  250. package/dist/src/ui/components/PermissionsModifyTrustDialog.js +115 -0
  251. package/dist/src/ui/components/PermissionsModifyTrustDialog.js.map +1 -0
  252. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.d.ts +6 -0
  253. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js +98 -0
  254. package/dist/src/ui/components/PermissionsModifyTrustDialog.test.js.map +1 -0
  255. package/dist/src/ui/components/ProviderDialog.js +23 -18
  256. package/dist/src/ui/components/ProviderDialog.js.map +1 -1
  257. package/dist/src/ui/components/ProviderModelDialog.js +24 -18
  258. package/dist/src/ui/components/ProviderModelDialog.js.map +1 -1
  259. package/dist/src/ui/components/SettingsDialog.d.ts +12 -2
  260. package/dist/src/ui/components/SettingsDialog.js +253 -23
  261. package/dist/src/ui/components/SettingsDialog.js.map +1 -1
  262. package/dist/src/ui/components/SettingsDialog.test.js +90 -8
  263. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -1
  264. package/dist/src/ui/components/ShellConfirmationDialog.js +3 -0
  265. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -1
  266. package/dist/src/ui/components/ThemeDialog.js +6 -4
  267. package/dist/src/ui/components/ThemeDialog.js.map +1 -1
  268. package/dist/src/ui/components/ToolsDialog.js +6 -4
  269. package/dist/src/ui/components/ToolsDialog.js.map +1 -1
  270. package/dist/src/ui/components/WorkspaceMigrationDialog.js +5 -3
  271. package/dist/src/ui/components/WorkspaceMigrationDialog.js.map +1 -1
  272. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +37 -6
  273. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -1
  274. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +9 -0
  275. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -1
  276. package/dist/src/ui/components/messages/ToolGroupMessage.js +7 -3
  277. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -1
  278. package/dist/src/ui/components/messages/ToolMessage.js +7 -3
  279. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -1
  280. package/dist/src/ui/components/messages/WarningMessage.d.ts +11 -0
  281. package/dist/src/ui/components/messages/WarningMessage.js +10 -0
  282. package/dist/src/ui/components/messages/WarningMessage.js.map +1 -0
  283. package/dist/src/ui/components/messages/WarningMessage.test.d.ts +6 -0
  284. package/dist/src/ui/components/messages/WarningMessage.test.js +15 -0
  285. package/dist/src/ui/components/messages/WarningMessage.test.js.map +1 -0
  286. package/dist/src/ui/components/shared/BaseSelectionList.d.ts +38 -0
  287. package/dist/src/ui/components/shared/BaseSelectionList.js +76 -0
  288. package/dist/src/ui/components/shared/BaseSelectionList.js.map +1 -0
  289. package/dist/src/ui/components/shared/BaseSelectionList.test.d.ts +6 -0
  290. package/dist/src/ui/components/shared/BaseSelectionList.test.js +376 -0
  291. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +1 -0
  292. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +4 -5
  293. package/dist/src/ui/components/shared/RadioButtonSelect.js +11 -117
  294. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -1
  295. package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +1 -1
  296. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +116 -95
  297. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -1
  298. package/dist/src/ui/components/shared/text-buffer.d.ts +6 -0
  299. package/dist/src/ui/components/shared/text-buffer.js +71 -4
  300. package/dist/src/ui/components/shared/text-buffer.js.map +1 -1
  301. package/dist/src/ui/components/views/ChatList.d.ts +12 -0
  302. package/dist/src/ui/components/views/ChatList.js +17 -0
  303. package/dist/src/ui/components/views/ChatList.js.map +1 -0
  304. package/dist/src/ui/components/views/ChatList.test.d.ts +6 -0
  305. package/dist/src/ui/components/views/ChatList.test.js +42 -0
  306. package/dist/src/ui/components/views/ChatList.test.js.map +1 -0
  307. package/dist/src/ui/constants.d.ts +1 -0
  308. package/dist/src/ui/constants.js +1 -0
  309. package/dist/src/ui/constants.js.map +1 -1
  310. package/dist/src/ui/contexts/FocusContext.d.ts +7 -0
  311. package/dist/src/ui/contexts/FocusContext.js +9 -0
  312. package/dist/src/ui/contexts/FocusContext.js.map +1 -0
  313. package/dist/src/ui/contexts/KeypressContext.d.ts +1 -1
  314. package/dist/src/ui/contexts/KeypressContext.js +63 -4
  315. package/dist/src/ui/contexts/KeypressContext.js.map +1 -1
  316. package/dist/src/ui/contexts/KeypressContext.test.js +156 -0
  317. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -1
  318. package/dist/src/ui/contexts/SessionContext.d.ts +6 -0
  319. package/dist/src/ui/contexts/SessionContext.js +107 -5
  320. package/dist/src/ui/contexts/SessionContext.js.map +1 -1
  321. package/dist/src/ui/contexts/UIActionsContext.d.ts +82 -0
  322. package/dist/src/ui/contexts/UIActionsContext.js +20 -0
  323. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -0
  324. package/dist/src/ui/contexts/UIStateContext.d.ts +121 -0
  325. package/dist/src/ui/contexts/UIStateContext.js +20 -0
  326. package/dist/src/ui/contexts/UIStateContext.js.map +1 -0
  327. package/dist/src/ui/contexts/VimModeContext.js +4 -4
  328. package/dist/src/ui/contexts/VimModeContext.js.map +1 -1
  329. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +29 -6
  330. package/dist/src/ui/hooks/slashCommandProcessor.js +150 -155
  331. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
  332. package/dist/src/ui/hooks/useBracketedPaste.js +3 -4
  333. package/dist/src/ui/hooks/useBracketedPaste.js.map +1 -1
  334. package/dist/src/ui/hooks/useEditorSettings.js +1 -1
  335. package/dist/src/ui/hooks/useEditorSettings.js.map +1 -1
  336. package/dist/src/ui/hooks/useExtensionAutoUpdate.d.ts +13 -0
  337. package/dist/src/ui/hooks/useExtensionAutoUpdate.js +40 -0
  338. package/dist/src/ui/hooks/useExtensionAutoUpdate.js.map +1 -0
  339. package/dist/src/ui/hooks/useExtensionUpdates.d.ts +21 -0
  340. package/dist/src/ui/hooks/useExtensionUpdates.js +168 -0
  341. package/dist/src/ui/hooks/useExtensionUpdates.js.map +1 -0
  342. package/dist/src/ui/hooks/useExtensionUpdates.test.d.ts +6 -0
  343. package/dist/src/ui/hooks/useExtensionUpdates.test.js +243 -0
  344. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +1 -0
  345. package/dist/src/ui/hooks/useFlickerDetector.d.ts +22 -0
  346. package/dist/src/ui/hooks/useFlickerDetector.js +38 -0
  347. package/dist/src/ui/hooks/useFlickerDetector.js.map +1 -0
  348. package/dist/src/ui/hooks/useFlickerDetector.test.d.ts +6 -0
  349. package/dist/src/ui/hooks/useFlickerDetector.test.js +142 -0
  350. package/dist/src/ui/hooks/useFlickerDetector.test.js.map +1 -0
  351. package/dist/src/ui/hooks/useGeminiStream.d.ts +1 -1
  352. package/dist/src/ui/hooks/useGeminiStream.integration.test.js +1 -1
  353. package/dist/src/ui/hooks/useGeminiStream.integration.test.js.map +1 -1
  354. package/dist/src/ui/hooks/useGeminiStream.js +41 -18
  355. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -1
  356. package/dist/src/ui/hooks/useMemoryMonitor.d.ts +13 -0
  357. package/dist/src/ui/hooks/useMemoryMonitor.js +28 -0
  358. package/dist/src/ui/hooks/useMemoryMonitor.js.map +1 -0
  359. package/dist/src/ui/hooks/usePermissionsModifyTrust.d.ts +34 -0
  360. package/dist/src/ui/hooks/usePermissionsModifyTrust.js +90 -0
  361. package/dist/src/ui/hooks/usePermissionsModifyTrust.js.map +1 -0
  362. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.d.ts +6 -0
  363. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js +60 -0
  364. package/dist/src/ui/hooks/usePermissionsModifyTrust.test.js.map +1 -0
  365. package/dist/src/ui/hooks/useReactToolScheduler.d.ts +1 -1
  366. package/dist/src/ui/hooks/useReactToolScheduler.js +5 -1
  367. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -1
  368. package/dist/src/ui/hooks/useSelectionList.d.ts +34 -0
  369. package/dist/src/ui/hooks/useSelectionList.js +292 -0
  370. package/dist/src/ui/hooks/useSelectionList.js.map +1 -0
  371. package/dist/src/ui/hooks/useSelectionList.test.d.ts +6 -0
  372. package/dist/src/ui/hooks/useSelectionList.test.js +726 -0
  373. package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -0
  374. package/dist/src/ui/hooks/useShowMemoryCommand.js +1 -1
  375. package/dist/src/ui/hooks/useShowMemoryCommand.js.map +1 -1
  376. package/dist/src/ui/hooks/useStateAndRef.d.ts +1 -1
  377. package/dist/src/ui/hooks/useStateAndRef.js +2 -2
  378. package/dist/src/ui/hooks/useStateAndRef.js.map +1 -1
  379. package/dist/src/ui/hooks/useStaticHistoryRefresh.d.ts +13 -0
  380. package/dist/src/ui/hooks/useStaticHistoryRefresh.js +35 -0
  381. package/dist/src/ui/hooks/useStaticHistoryRefresh.js.map +1 -0
  382. package/dist/src/ui/hooks/useStaticHistoryRefresh.test.d.ts +6 -0
  383. package/dist/src/ui/hooks/useStaticHistoryRefresh.test.js +42 -0
  384. package/dist/src/ui/hooks/useStaticHistoryRefresh.test.js.map +1 -0
  385. package/dist/src/ui/hooks/useThemeCommand.js +7 -7
  386. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -1
  387. package/dist/src/ui/hooks/useToolScheduler.test.js +17 -20
  388. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -1
  389. package/dist/src/ui/keyMatchers.test.js +6 -0
  390. package/dist/src/ui/keyMatchers.test.js.map +1 -1
  391. package/dist/src/ui/layouts/DefaultAppLayout.d.ts +23 -0
  392. package/dist/src/ui/layouts/DefaultAppLayout.js +76 -0
  393. package/dist/src/ui/layouts/DefaultAppLayout.js.map +1 -0
  394. package/dist/src/ui/noninteractive/nonInteractiveUi.d.ts +12 -0
  395. package/dist/src/ui/noninteractive/nonInteractiveUi.js +31 -0
  396. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -0
  397. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js +2 -2
  398. package/dist/src/ui/privacy/CloudFreePrivacyNotice.js.map +1 -1
  399. package/dist/src/ui/privacy/MultiProviderPrivacyNotice.d.ts +11 -0
  400. package/dist/src/ui/privacy/MultiProviderPrivacyNotice.js +92 -0
  401. package/dist/src/ui/privacy/MultiProviderPrivacyNotice.js.map +1 -0
  402. package/dist/src/ui/privacy/MultiProviderPrivacyNotice.test.d.ts +6 -0
  403. package/dist/src/ui/privacy/MultiProviderPrivacyNotice.test.js +106 -0
  404. package/dist/src/ui/privacy/MultiProviderPrivacyNotice.test.js.map +1 -0
  405. package/dist/src/ui/privacy/PrivacyNotice.js +4 -9
  406. package/dist/src/ui/privacy/PrivacyNotice.js.map +1 -1
  407. package/dist/src/ui/state/extensions.d.ts +61 -0
  408. package/dist/src/ui/state/extensions.js +84 -0
  409. package/dist/src/ui/state/extensions.js.map +1 -0
  410. package/dist/src/ui/themes/theme.js +2 -2
  411. package/dist/src/ui/themes/theme.js.map +1 -1
  412. package/dist/src/ui/types.d.ts +58 -2
  413. package/dist/src/ui/types.js +6 -0
  414. package/dist/src/ui/types.js.map +1 -1
  415. package/dist/src/ui/utils/MarkdownDisplay.js +1 -2
  416. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -1
  417. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +1 -1
  418. package/dist/src/ui/utils/MarkdownDisplay.test.js +94 -104
  419. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -1
  420. package/dist/src/ui/utils/bracketedPaste.d.ts +9 -0
  421. package/dist/src/ui/utils/bracketedPaste.js +14 -0
  422. package/dist/src/ui/utils/bracketedPaste.js.map +1 -0
  423. package/dist/src/ui/utils/displayUtils.d.ts +1 -0
  424. package/dist/src/ui/utils/displayUtils.js +4 -1
  425. package/dist/src/ui/utils/displayUtils.js.map +1 -1
  426. package/dist/src/ui/utils/displayUtils.test.js +36 -17
  427. package/dist/src/ui/utils/displayUtils.test.js.map +1 -1
  428. package/dist/src/ui/utils/highlight.d.ts +2 -1
  429. package/dist/src/ui/utils/highlight.js +52 -8
  430. package/dist/src/ui/utils/highlight.js.map +1 -1
  431. package/dist/src/ui/utils/highlight.test.js +15 -14
  432. package/dist/src/ui/utils/highlight.test.js.map +1 -1
  433. package/dist/src/ui/utils/kittyProtocolDetector.d.ts +1 -0
  434. package/dist/src/ui/utils/kittyProtocolDetector.js +11 -3
  435. package/dist/src/ui/utils/kittyProtocolDetector.js.map +1 -1
  436. package/dist/src/ui/utils/terminalSequences.d.ts +22 -0
  437. package/dist/src/ui/utils/terminalSequences.js +23 -0
  438. package/dist/src/ui/utils/terminalSequences.js.map +1 -0
  439. package/dist/src/ui/utils/textUtils.d.ts +10 -0
  440. package/dist/src/ui/utils/textUtils.js +82 -1
  441. package/dist/src/ui/utils/textUtils.js.map +1 -1
  442. package/dist/src/ui/utils/textUtils.test.d.ts +6 -0
  443. package/dist/src/ui/utils/textUtils.test.js +132 -0
  444. package/dist/src/ui/utils/textUtils.test.js.map +1 -0
  445. package/dist/src/utils/bootstrap.d.ts +24 -0
  446. package/dist/src/utils/bootstrap.js +55 -0
  447. package/dist/src/utils/bootstrap.js.map +1 -0
  448. package/dist/src/utils/bootstrap.test.d.ts +6 -0
  449. package/dist/src/utils/bootstrap.test.js +103 -0
  450. package/dist/src/utils/bootstrap.test.js.map +1 -0
  451. package/dist/src/utils/cleanup.d.ts +6 -0
  452. package/dist/src/utils/cleanup.js +14 -0
  453. package/dist/src/utils/cleanup.js.map +1 -1
  454. package/dist/src/utils/commands.d.ts +17 -0
  455. package/dist/src/utils/commands.js +60 -0
  456. package/dist/src/utils/commands.js.map +1 -0
  457. package/dist/src/utils/dialogScopeUtils.d.ts +3 -0
  458. package/dist/src/utils/dialogScopeUtils.js +11 -2
  459. package/dist/src/utils/dialogScopeUtils.js.map +1 -1
  460. package/dist/src/utils/dynamicSettings.d.ts +20 -0
  461. package/dist/src/utils/dynamicSettings.js +110 -0
  462. package/dist/src/utils/dynamicSettings.js.map +1 -0
  463. package/dist/src/utils/dynamicSettings.test.d.ts +6 -0
  464. package/dist/src/utils/dynamicSettings.test.js +329 -0
  465. package/dist/src/utils/dynamicSettings.test.js.map +1 -0
  466. package/dist/src/utils/events.d.ts +3 -1
  467. package/dist/src/utils/events.js +2 -0
  468. package/dist/src/utils/events.js.map +1 -1
  469. package/dist/src/utils/handleAutoUpdate.js +4 -1
  470. package/dist/src/utils/handleAutoUpdate.js.map +1 -1
  471. package/dist/src/utils/installationInfo.d.ts +1 -0
  472. package/dist/src/utils/installationInfo.js +5 -3
  473. package/dist/src/utils/installationInfo.js.map +1 -1
  474. package/dist/src/utils/relaunch.d.ts +16 -0
  475. package/dist/src/utils/relaunch.js +34 -0
  476. package/dist/src/utils/relaunch.js.map +1 -0
  477. package/dist/src/utils/relaunch.test.d.ts +6 -0
  478. package/dist/src/utils/relaunch.test.js +96 -0
  479. package/dist/src/utils/relaunch.test.js.map +1 -0
  480. package/dist/src/utils/sessionCleanup.d.ts +22 -0
  481. package/dist/src/utils/sessionCleanup.integration.test.d.ts +6 -0
  482. package/dist/src/utils/sessionCleanup.integration.test.js +174 -0
  483. package/dist/src/utils/sessionCleanup.integration.test.js.map +1 -0
  484. package/dist/src/utils/sessionCleanup.js +213 -0
  485. package/dist/src/utils/sessionCleanup.js.map +1 -0
  486. package/dist/src/utils/sessionCleanup.test.d.ts +6 -0
  487. package/dist/src/utils/sessionCleanup.test.js +1144 -0
  488. package/dist/src/utils/sessionCleanup.test.js.map +1 -0
  489. package/dist/src/utils/sessionUtils.d.ts +37 -0
  490. package/dist/src/utils/sessionUtils.js +71 -0
  491. package/dist/src/utils/sessionUtils.js.map +1 -0
  492. package/dist/src/utils/settingsUtils.d.ts +6 -3
  493. package/dist/src/utils/settingsUtils.js +39 -11
  494. package/dist/src/utils/settingsUtils.js.map +1 -1
  495. package/dist/src/utils/settingsUtils.test.js +96 -96
  496. package/dist/src/utils/settingsUtils.test.js.map +1 -1
  497. package/dist/src/utils/singleSettingSaver.js +5 -0
  498. package/dist/src/utils/singleSettingSaver.js.map +1 -1
  499. package/dist/src/utils/windowTitle.d.ts +12 -0
  500. package/dist/src/utils/windowTitle.js +19 -0
  501. package/dist/src/utils/windowTitle.js.map +1 -0
  502. package/dist/src/utils/windowTitle.test.d.ts +6 -0
  503. package/dist/src/utils/windowTitle.test.js +49 -0
  504. package/dist/src/utils/windowTitle.test.js.map +1 -0
  505. package/dist/src/zed-integration/acp.js +1 -2
  506. package/dist/src/zed-integration/acp.js.map +1 -1
  507. package/dist/src/zed-integration/fileSystemService.d.ts +1 -0
  508. package/dist/src/zed-integration/fileSystemService.js +3 -0
  509. package/dist/src/zed-integration/fileSystemService.js.map +1 -1
  510. package/dist/src/zed-integration/schema.d.ts +212 -212
  511. package/dist/tsconfig.build.tsbuildinfo +1 -1
  512. package/package.json +15 -6
  513. package/dist/src/ui/App.quittingMessages.test.d.ts +0 -1
  514. package/dist/src/ui/App.quittingMessages.test.js +0 -14
  515. package/dist/src/ui/App.quittingMessages.test.js.map +0 -1
package/README.md CHANGED
@@ -1,244 +0,0 @@
1
- # LLxprt Code
2
-
3
- [![LLxprt Code CI](https://github.com/vybestack/llxprt-code/actions/workflows/ci.yml/badge.svg)](https://github.com/vybestack/llxprt-code/actions/workflows/ci.yml)
4
-  [![Mentioned in Awesome Gemini CLI](https://awesome.re/mentioned-badge.svg)](https://github.com/Piebald-AI/awesome-gemini-cli) [![Discord Server](https://dcbadge.limes.pink/api/server/https://discord.gg/Wc6dZqWWYv?style=flat)](https://discord.gg/Wc6dZqWWYv) ![CodeRabbit Pull Request Reviews](https://img.shields.io/coderabbit/prs/github/vybestack/llxprt-code?utm_source=oss&utm_medium=github&utm_campaign=vybestack%2Fllxprt-code&labelColor=171717&color=FF570A&link=https%3A%2F%2Fcoderabbit.ai&label=CodeRabbit+Reviews)
5
-
6
- ![LLxprt Code Screenshot](./docs/assets/llxprt-screenshot.png)
7
-
8
- **AI-powered coding assistant that works with any LLM provider.** Command-line interface for querying and editing codebases, generating applications, and automating development workflows.
9
-
10
- ## Free & Subscription Options
11
-
12
- Get started immediately with powerful LLM options:
13
-
14
- ```bash
15
- # Free Gemini models
16
- /auth gemini enable
17
- /provider gemini
18
- /model gemini-2.5-flash
19
-
20
- # Free Qwen models
21
- /auth qwen enable
22
- /provider qwen
23
- /model qwen-3-coder
24
-
25
- # Your Claude Pro / Max subscription
26
- /auth anthropic enable
27
- /provider anthropic
28
- /model claude-sonnet-4-5
29
- ```
30
-
31
- ## Why Choose LLxprt Code?
32
-
33
- - **Free Tier Support**: Start coding immediately with Gemini, Qwen, or your existing Claude account
34
- - **Provider Flexibility**: Switch between any Anthropic, Gemini, or OpenAI-compatible provider
35
- - **Top Open Models**: Works seamlessly with GLM 4.6, MiniMax-2, and Qwen 3 Coder
36
- - **Local Models**: Run models locally with LM Studio, llama.cpp for complete privacy
37
- - **Privacy First**: No telemetry by default, local processing available
38
- - **Subagent Flexibility**: Create agents with different models, providers, or settings
39
- - **[ACTION] Real-time**: Interactive REPL with beautiful themes
40
- - **Zed Integration**: Native Zed editor integration for seamless workflow
41
-
42
- ```bash
43
- # Install and get started
44
- npm install -g @vybestack/llxprt-code
45
- llxprt
46
-
47
- # Try without installing
48
- npx @vybestack/llxprt-code --provider synthetic --model hf:zai-org/GLM-4.6 --keyfile ~/.synthetic_key "simplify the README.md"
49
- ```
50
-
51
- ## What is LLxprt Code?
52
-
53
- LLxprt Code is a command-line AI assistant designed for developers who want powerful LLM capabilities without leaving their terminal. Unlike GitHub Copilot or ChatGPT, LLxprt Code works with **any provider** and can run **locally** for complete privacy.
54
-
55
- **Key differences:**
56
-
57
- - **Open source & community driven**: Not locked into proprietary ecosystems
58
- - **Provider agnostic**: Not locked into one AI service
59
- - **Local-first**: Run entirely offline if needed
60
- - **Developer-centric**: Built specifically for coding workflows
61
- - **Terminal native**: Designed for CLI workflows, not web interfaces
62
-
63
- ## Quick Start
64
-
65
- 1. **Prerequisites:** Node.js 20+ installed
66
- 2. **Install:**
67
- ```bash
68
- npm install -g @vybestack/llxprt-code
69
- # Or try without installing:
70
- npx @vybestack/llxprt-code
71
- ```
72
- 3. **Run:** `llxprt`
73
- 4. **Choose provider:** Use `/provider` to select your preferred LLM service
74
- 5. **Start coding:** Ask questions, generate code, or analyze projects
75
-
76
- **First session example:**
77
-
78
- ```bash
79
- cd your-project/
80
- llxprt
81
- > Explain the architecture of this codebase and suggest improvements
82
- > Create a test file for the user authentication module
83
- > Help me debug this error: [paste error message]
84
- ```
85
-
86
- ## Key Features
87
-
88
- - **Free & Subscription Options** - Gemini, Qwen (free), Claude Pro/Max (subscription)
89
- - **Extensive Provider Support** - Any Anthropic, Gemini, or OpenAI-compatible provider [**Provider Guide →**](./docs/providers/quick-reference.md)
90
- - **Top Open Models** - GLM 4.6, MiniMax-2, Qwen 3 Coder
91
- - **Local Model Support** - LM Studio, llama.cpp, Ollama for complete privacy
92
- - **Profile System** - Save provider configurations and model settings
93
- - **Advanced Subagents** - Isolated AI assistants with different models/providers
94
- - **MCP Integration** - Connect to external tools and services
95
- - **Beautiful Terminal UI** - Multiple themes with syntax highlighting
96
-
97
- ## Interactive vs Non-Interactive Workflows
98
-
99
- **Interactive Mode (REPL):**
100
- Perfect for exploration, rapid prototyping, and iterative development:
101
-
102
- ```bash
103
- # Start interactive session
104
- llxprt
105
-
106
- > Explore this codebase and suggest improvements
107
- > Create a REST API endpoint with tests
108
- > Debug this authentication issue
109
- > Optimize this database query
110
- ```
111
-
112
- **Non-Interactive Mode:**
113
- Ideal for automation, CI/CD, and scripted workflows:
114
-
115
- ```bash
116
- # Single command with immediate response
117
- llxprt --profile-load zai-glm46 "Refactor this function for better readability"
118
- llxprt "Generate unit tests for payment module" > tests/payment.test.js
119
- ```
120
-
121
- ## Top Open Weight Models
122
-
123
- LLxprt Code works seamlessly with the best open-weight models:
124
-
125
- ### GLM 4.6
126
-
127
- - **Context Window**: 200,000 tokens
128
- - **Architecture**: Mixture-of-Experts with 355B total parameters (32B active)
129
- - **Strengths**: Coding, multi-step planning, tool integration
130
- - **15% fewer tokens** for equivalent tasks vs previous generation
131
-
132
- ### MiniMax-2
133
-
134
- - **Context Window**: ~204,800 tokens
135
- - **Architecture**: MoE with 230B total parameters (10B active)
136
- - **Strengths**: Coding workflows, multi-step agents, tool calling
137
- - **Cost**: Only 8% of Claude Sonnet, ~2x faster
138
-
139
- ### Qwen 3 Coder
140
-
141
- - **Context Window**: 256,000 tokens (extendable to 1M)
142
- - **Architecture**: MoE with 480B total parameters (35B active)
143
- - **Strengths**: Agentic coding, browser automation, tool usage
144
- - **Performance**: State-of-the-art on SWE-bench Verified (69.6%)
145
-
146
- ## Local Models
147
-
148
- Run models completely offline for maximum privacy:
149
-
150
- ```bash
151
- # With LM Studio
152
- /provider openai
153
- /baseurl http://localhost:1234/v1/
154
- /model your-local-model
155
-
156
- # With Ollama
157
- /provider ollama
158
- /model codellama:13b
159
- ```
160
-
161
- Supported local providers:
162
-
163
- - **LM Studio**: Easy Windows/Mac/Linux setup
164
- - **llama.cpp**: Maximum performance and control
165
- - **Ollama**: Simple model management
166
- - **Any OpenAI-compatible API**: Full flexibility
167
-
168
- ## Advanced Subagents
169
-
170
- Create specialized AI assistants with isolated contexts and different configurations:
171
-
172
- ```bash
173
- # Subagents run with custom profiles and tool access
174
- # Access via the commands interface
175
- /subagent list
176
- /subagent create <name>
177
- ```
178
-
179
- Each subagent can be configured with:
180
-
181
- - **Different providers** (Gemini vs Anthropic vs Qwen vs Local)
182
- - **Different models** (Flash vs Sonnet vs GLM 4.6 vs Custom)
183
- - **Different tool access** (Restrict or allow specific tools)
184
- - **Different settings** (Temperature, timeouts, max turns)
185
- - **Isolated runtime context** (No memory or state crossover)
186
-
187
- Subagents are designed for:
188
-
189
- - **Specialized tasks** (Code review, debugging, documentation)
190
- - **Different expertise areas** (Frontend vs Backend vs DevOps)
191
- - **Tool-limited environments** (Read-only analysis vs Full development)
192
- - **Experimental configurations** (Testing new models or settings)
193
-
194
- **[Full Subagent Documentation →](./docs/subagents.md)**
195
-
196
- ## Zed Integration
197
-
198
- Native Zed editor support for seamless development workflow:
199
-
200
- ```bash
201
- # Install Zed extension
202
- zed:install llxprt-code
203
-
204
- # Use within Zed
205
- # (See docs for Zed integration setup)
206
- ```
207
-
208
- Features:
209
-
210
- - **In-editor chat**: Direct AI interaction without leaving Zed
211
- - **Code selection**: Ask about specific code selections
212
- - **Inline suggestions**: Get AI help while typing
213
- - **Project awareness**: Full context of your open workspace
214
-
215
- ** [Zed Integration Guide →](./docs/zed-integration.md)**
216
-
217
- ** [Complete Provider Guide →](./docs/cli/providers.md)**
218
-
219
- ## Advanced Features
220
-
221
- - **Settings & Profiles**: Fine-tune model parameters and save configurations
222
- - **Subagents**: Create specialized assistants for different tasks
223
- - **MCP Servers**: Connect external tools and data sources
224
- - **Checkpointing**: Save and resume complex conversations
225
- - **IDE Integration**: Connect to VS Code and other editors
226
-
227
- ** [Full Documentation →](./docs/index.md)**
228
-
229
- ## Migration & Resources
230
-
231
- - **From Gemini CLI**: [Migration Guide](./docs/gemini-cli-tips.md)
232
- - **Local Models Setup**: [Local Models Guide](./docs/local-models.md)
233
- - **Command Reference**: [CLI Commands](./docs/cli/commands.md)
234
- - **Troubleshooting**: [Common Issues](./docs/troubleshooting.md)
235
-
236
- ## Privacy & Terms
237
-
238
- LLxprt Code does not collect telemetry by default. Your data stays with you unless you choose to send it to external AI providers.
239
-
240
- When using external services, their respective terms of service apply:
241
-
242
- - [OpenAI Terms](https://openai.com/policies/terms-of-use)
243
- - [Anthropic Terms](https://www.anthropic.com/legal/terms)
244
- - [Google Terms](https://policies.google.com/terms)
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vybestack/llxprt-code",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "LLxprt Code",
5
5
  "repository": {
6
6
  "type": "git",
@@ -22,7 +22,7 @@
22
22
  "test:integration": "vitest run -c vitest.integration.config.ts",
23
23
  "test:ci:covered": "vitest run -c vitest.ci.covered.config.ts",
24
24
  "test:ci:fast": "vitest run -c vitest.ci.fast.config.ts",
25
- "test:ci": "npm run test:ci:covered && npm run test:ci:fast",
25
+ "test:ci": "vitest run",
26
26
  "test:legacy": "OPENAI_RESPONSES_DISABLE=true vitest run -t \"legacy|gpt-3.5-turbo\"",
27
27
  "typecheck": "tsc --noEmit",
28
28
  "prerelease:version": "node ../../scripts/bind_package_version.js",
@@ -33,7 +33,7 @@
33
33
  "dist"
34
34
  ],
35
35
  "config": {
36
- "sandboxImageUri": "ghcr.io/vybestack/llxprt-code/sandbox:0.5.0"
36
+ "sandboxImageUri": "ghcr.io/vybestack/llxprt-code/sandbox:0.6.0"
37
37
  },
38
38
  "dependencies": {
39
39
  "@anthropic-ai/sdk": "^0.55.1",
@@ -42,33 +42,39 @@
42
42
  "@iarna/toml": "^2.2.5",
43
43
  "@modelcontextprotocol/sdk": "^1.15.1",
44
44
  "@types/update-notifier": "^6.0.8",
45
- "@vybestack/llxprt-code-core": "0.5.0",
45
+ "@vybestack/llxprt-code-core": "0.6.0",
46
+ "ansi-regex": "^6.2.2",
46
47
  "chalk": "^5.3.0",
47
48
  "cli-spinners": "2.9.2",
48
49
  "command-exists": "^1.2.9",
49
50
  "diff": "^7.0.0",
50
51
  "dotenv": "^17.1.0",
52
+ "extract-zip": "^2.0.1",
51
53
  "fzf": "^0.5.2",
52
- "glob": "^10.4.1",
54
+ "glob": "^12.0.0",
53
55
  "gradient-string": "2.0.2",
54
56
  "highlight.js": "^11.11.1",
55
- "ink": "^6.3.1",
57
+ "ink": "^6.5.1",
56
58
  "ink-gradient": "^3.0.0",
57
59
  "ink-select-input": "^6.2.0",
58
60
  "ink-spinner": "^5.0.0",
59
61
  "ink-testing-library": "^4.0.0",
60
62
  "lowlight": "^3.3.0",
61
63
  "mime-types": "^3.0.1",
64
+ "mnemonist": "^0.40.3",
62
65
  "open": "^10.1.2",
63
66
  "openai": "^5.10.1",
64
67
  "react": "^19.2.0",
65
68
  "read-package-up": "^11.0.0",
66
69
  "shell-quote": "^1.8.3",
70
+ "simple-git": "^3.28.0",
67
71
  "string-width": "^7.1.0",
68
72
  "strip-ansi": "^7.1.0",
69
73
  "strip-json-comments": "^3.1.1",
74
+ "tar": "^7.5.1",
70
75
  "undici": "^7.10.0",
71
76
  "update-notifier": "^7.3.1",
77
+ "wrap-ansi": "9.0.2",
72
78
  "yargs": "^17.7.2",
73
79
  "zod": "^3.23.8"
74
80
  },
@@ -77,6 +83,7 @@
77
83
  "@fast-check/vitest": "^0.2.2",
78
84
  "@testing-library/dom": "^10.4.0",
79
85
  "@testing-library/react": "^16.3.0",
86
+ "@types/archiver": "^6.0.3",
80
87
  "@types/command-exists": "^1.2.3",
81
88
  "@types/diff": "^7.0.2",
82
89
  "@types/dotenv": "^6.1.1",
@@ -85,8 +92,10 @@
85
92
  "@types/react-dom": "^19.1.6",
86
93
  "@types/semver": "^7.7.0",
87
94
  "@types/shell-quote": "^1.7.5",
95
+ "@types/tar": "^6.1.13",
88
96
  "@types/yargs": "^17.0.33",
89
97
  "@vybestack/llxprt-code-test-utils": "file:../test-utils",
98
+ "archiver": "^7.0.1",
90
99
  "dom-accessibility-api": "^0.5.16",
91
100
  "jsdom": "^26.1.0",
92
101
  "lz-string": "^1.5.0",
@@ -23,11 +23,25 @@ export declare class GeminiOAuthProvider implements OAuthProvider {
23
23
  private retryHandler;
24
24
  private logger;
25
25
  private addItem?;
26
+ private authCodeResolver?;
27
+ private authCodeRejecter?;
26
28
  constructor(tokenStore?: TokenStore, addItem?: (itemData: Omit<HistoryItemWithoutId, 'id'>, baseTimestamp: number) => number);
27
29
  /**
28
30
  * Set the addItem callback for displaying messages in the UI
29
31
  */
30
32
  setAddItem(addItem: (itemData: Omit<HistoryItemWithoutId, 'id'>, baseTimestamp: number) => number): void;
33
+ /**
34
+ * Wait for authorization code from UI dialog
35
+ */
36
+ waitForAuthCode(): Promise<string>;
37
+ /**
38
+ * Submit authorization code from UI dialog
39
+ */
40
+ submitAuthCode(code: string): void;
41
+ /**
42
+ * Cancel OAuth flow
43
+ */
44
+ cancelAuth(): void;
31
45
  /**
32
46
  * Lazy initialization with proper state management
33
47
  * Ensures initialization only happens once and handles concurrent calls
@@ -54,4 +68,8 @@ export declare class GeminiOAuthProvider implements OAuthProvider {
54
68
  * Clears tokens from all legacy locations
55
69
  */
56
70
  private clearLegacyTokens;
71
+ /**
72
+ * Install auth-code hooks so oauth2.ts can ask the UI for the code instead of readline
73
+ */
74
+ private installAuthCodeHooks;
57
75
  }
@@ -26,6 +26,8 @@ export class GeminiOAuthProvider {
26
26
  retryHandler;
27
27
  logger;
28
28
  addItem;
29
+ authCodeResolver;
30
+ authCodeRejecter;
29
31
  constructor(tokenStore, addItem) {
30
32
  this.tokenStore = tokenStore;
31
33
  this.retryHandler = new RetryHandler();
@@ -44,6 +46,36 @@ export class GeminiOAuthProvider {
44
46
  setAddItem(addItem) {
45
47
  this.addItem = addItem;
46
48
  }
49
+ /**
50
+ * Wait for authorization code from UI dialog
51
+ */
52
+ waitForAuthCode() {
53
+ return new Promise((resolve, reject) => {
54
+ this.authCodeResolver = resolve;
55
+ this.authCodeRejecter = reject;
56
+ });
57
+ }
58
+ /**
59
+ * Submit authorization code from UI dialog
60
+ */
61
+ submitAuthCode(code) {
62
+ if (this.authCodeResolver) {
63
+ this.authCodeResolver(code);
64
+ this.authCodeResolver = undefined;
65
+ this.authCodeRejecter = undefined;
66
+ }
67
+ }
68
+ /**
69
+ * Cancel OAuth flow
70
+ */
71
+ cancelAuth() {
72
+ if (this.authCodeRejecter) {
73
+ const error = OAuthErrorFactory.fromUnknown(this.name, new Error('OAuth authentication was cancelled by user'), 'user cancellation');
74
+ this.authCodeRejecter(error);
75
+ this.authCodeResolver = undefined;
76
+ this.authCodeRejecter = undefined;
77
+ }
78
+ }
47
79
  /**
48
80
  * Lazy initialization with proper state management
49
81
  * Ensures initialization only happens once and handles concurrent calls
@@ -100,98 +132,104 @@ export class GeminiOAuthProvider {
100
132
  async initiateAuth() {
101
133
  await this.ensureInitialized();
102
134
  return this.errorHandler.wrapMethod(async () => {
103
- // Import the existing Google OAuth infrastructure
104
- const coreModule = await import('@vybestack/llxprt-code-core');
105
- const { getOauthClient, AuthType } = coreModule;
106
- // Create a minimal config for OAuth - use type assertion for test environment
107
- // Type assertion is needed since we're creating a partial Config for test mode
108
- const config = {
109
- getProxy: () => undefined,
110
- isBrowserLaunchSuppressed: () => !shouldLaunchBrowser(),
111
- };
112
- // Use the existing Google OAuth infrastructure to get a client
113
- let client;
135
+ const cleanupAuthHooks = this.installAuthCodeHooks();
114
136
  try {
115
- client = await getOauthClient(AuthType.LOGIN_WITH_GOOGLE, config);
116
- }
117
- catch (error) {
118
- // Handle browser auth cancellation or other auth failures
119
- if (error instanceof Error) {
120
- // Show error message to user if addItem is available
121
- const addItem = this.addItem || globalOAuthUI.getAddItem();
122
- if (addItem) {
123
- addItem({
124
- type: 'error',
125
- text: `Browser authentication failed: ${error.message}
126
- Please try again or use an API key with /keyfile <path-to-your-gemini-key>`,
127
- }, Date.now());
128
- }
129
- // Check for specific cancellation messages
130
- if (error.message.includes('cancelled') ||
131
- error.message.includes('denied') ||
132
- error.message.includes('access_denied') ||
133
- error.message.includes('user_cancelled')) {
134
- // CRITICAL FIX: Trigger fallback flow instead of failing
135
- this.logger.debug(() => `Browser auth cancelled, triggering fallback: ${error.message}`);
136
- // Show fallback instructions to user
137
- const fallbackMessage = `Browser authentication was cancelled or failed.\nFallback options:\n1. Use API key: /keyfile <path-to-your-gemini-key>\n2. Set environment: export GEMINI_API_KEY=<your-key>\n3. Try OAuth again: /auth gemini enable`;
137
+ // Import the existing Google OAuth infrastructure
138
+ const coreModule = await import('@vybestack/llxprt-code-core');
139
+ const { getOauthClient, AuthType } = coreModule;
140
+ // Create a minimal config for OAuth - use type assertion for test environment
141
+ // Type assertion is needed since we're creating a partial Config for test mode
142
+ const config = {
143
+ getProxy: () => undefined,
144
+ isBrowserLaunchSuppressed: () => !shouldLaunchBrowser(),
145
+ };
146
+ // Use the existing Google OAuth infrastructure to get a client
147
+ let client;
148
+ try {
149
+ client = await getOauthClient(AuthType.LOGIN_WITH_GOOGLE, config);
150
+ }
151
+ catch (error) {
152
+ // Handle browser auth cancellation or other auth failures
153
+ if (error instanceof Error) {
154
+ // Show error message to user if addItem is available
138
155
  const addItem = this.addItem || globalOAuthUI.getAddItem();
139
156
  if (addItem) {
140
157
  addItem({
141
- type: 'info',
142
- text: fallbackMessage,
158
+ type: 'error',
159
+ text: `Browser authentication failed: ${error.message}
160
+ Please try again or use an API key with /keyfile <path-to-your-gemini-key>`,
143
161
  }, Date.now());
144
162
  }
145
- else {
146
- console.log('\\n' + '─'.repeat(60));
147
- console.log('Browser authentication was cancelled or failed.');
148
- console.log('Fallback options:');
149
- console.log('1. Use API key: /keyfile <path-to-your-gemini-key>');
150
- console.log('2. Set environment: export GEMINI_API_KEY=<your-key>');
151
- console.log('3. Try OAuth again: /auth gemini enable');
152
- console.log('─'.repeat(60));
163
+ // Check for specific cancellation messages
164
+ if (error.message.includes('cancelled') ||
165
+ error.message.includes('denied') ||
166
+ error.message.includes('access_denied') ||
167
+ error.message.includes('user_cancelled')) {
168
+ // CRITICAL FIX: Trigger fallback flow instead of failing
169
+ this.logger.debug(() => `Browser auth cancelled, triggering fallback: ${error.message}`);
170
+ // Show fallback instructions to user
171
+ const fallbackMessage = `Browser authentication was cancelled or failed.\nFallback options:\n1. Use API key: /keyfile <path-to-your-gemini-key>\n2. Set environment: export GEMINI_API_KEY=<your-key>\n3. Try OAuth again: /auth gemini enable`;
172
+ const addItem = this.addItem || globalOAuthUI.getAddItem();
173
+ if (addItem) {
174
+ addItem({
175
+ type: 'info',
176
+ text: fallbackMessage,
177
+ }, Date.now());
178
+ }
179
+ else {
180
+ console.log('\n' + '─'.repeat(60));
181
+ console.log('Browser authentication was cancelled or failed.');
182
+ console.log('Fallback options:');
183
+ console.log('1. Use API key: /keyfile <path-to-your-gemini-key>');
184
+ console.log('2. Set environment: export GEMINI_API_KEY=<your-key>');
185
+ console.log('3. Try OAuth again: /auth gemini enable');
186
+ console.log('─'.repeat(60));
187
+ }
188
+ // Throw a user-friendly error that doesn't hang the system
189
+ throw OAuthErrorFactory.authenticationRequired(this.name, {
190
+ reason: 'Browser authentication was cancelled or failed. Please use one of the fallback options shown above, or check the URL in your history.',
191
+ });
153
192
  }
154
- // Throw a user-friendly error that doesn't hang the system
155
- throw OAuthErrorFactory.authenticationRequired(this.name, {
156
- reason: 'Browser authentication was cancelled or failed. Please use one of the fallback options shown above, or check the URL in your history.',
157
- });
158
193
  }
194
+ // Re-throw other authentication errors
195
+ throw error;
159
196
  }
160
- // Re-throw other authentication errors
161
- throw error;
162
- }
163
- // The client should now have valid credentials
164
- // Extract and cache the token
165
- const credentials = client.credentials;
166
- if (credentials && credentials.access_token) {
167
- const token = this.credentialsToOAuthToken(credentials);
168
- if (token && this.tokenStore) {
169
- try {
170
- await this.tokenStore.saveToken('gemini', token);
171
- this.currentToken = token;
172
- // Display success message
173
- const addItem = this.addItem || globalOAuthUI.getAddItem();
174
- if (addItem) {
175
- addItem({
176
- type: 'info',
177
- text: 'Successfully authenticated with Google Gemini!',
178
- }, Date.now());
197
+ // The client should now have valid credentials
198
+ // Extract and cache the token
199
+ const credentials = client.credentials;
200
+ if (credentials && credentials.access_token) {
201
+ const token = this.credentialsToOAuthToken(credentials);
202
+ if (token && this.tokenStore) {
203
+ try {
204
+ await this.tokenStore.saveToken('gemini', token);
205
+ this.currentToken = token;
206
+ // Display success message
207
+ const addItem = this.addItem || globalOAuthUI.getAddItem();
208
+ if (addItem) {
209
+ addItem({
210
+ type: 'info',
211
+ text: 'Successfully authenticated with Google Gemini!',
212
+ }, Date.now());
213
+ }
214
+ else {
215
+ console.log('Successfully authenticated with Google Gemini!');
216
+ }
179
217
  }
180
- else {
181
- console.log('Successfully authenticated with Google Gemini!');
218
+ catch (saveError) {
219
+ throw OAuthErrorFactory.storageError(this.name, saveError instanceof Error ? saveError : undefined, {
220
+ operation: 'saveToken',
221
+ });
182
222
  }
183
223
  }
184
- catch (saveError) {
185
- throw OAuthErrorFactory.storageError(this.name, saveError instanceof Error ? saveError : undefined, {
186
- operation: 'saveToken',
187
- });
188
- }
224
+ }
225
+ else {
226
+ throw OAuthErrorFactory.authenticationRequired(this.name, {
227
+ reason: 'No valid credentials received from Google OAuth',
228
+ });
189
229
  }
190
230
  }
191
- else {
192
- throw OAuthErrorFactory.authenticationRequired(this.name, {
193
- reason: 'No valid credentials received from Google OAuth',
194
- });
231
+ finally {
232
+ cleanupAuthHooks();
195
233
  }
196
234
  }, this.name, 'initiateAuth')();
197
235
  }
@@ -361,5 +399,29 @@ Please try again or use an API key with /keyfile <path-to-your-gemini-key>`,
361
399
  }
362
400
  });
363
401
  }
402
+ /**
403
+ * Install auth-code hooks so oauth2.ts can ask the UI for the code instead of readline
404
+ */
405
+ installAuthCodeHooks() {
406
+ const globalObj = global;
407
+ const previousWaitForCode = globalObj.__oauth_wait_for_code;
408
+ const previousProvider = globalObj.__oauth_provider;
409
+ globalObj.__oauth_wait_for_code = () => this.waitForAuthCode();
410
+ globalObj.__oauth_provider = this.name;
411
+ return () => {
412
+ if (previousWaitForCode !== undefined) {
413
+ globalObj.__oauth_wait_for_code = previousWaitForCode;
414
+ }
415
+ else {
416
+ delete globalObj.__oauth_wait_for_code;
417
+ }
418
+ if (previousProvider !== undefined) {
419
+ globalObj.__oauth_provider = previousProvider;
420
+ }
421
+ else {
422
+ delete globalObj.__oauth_provider;
423
+ }
424
+ };
425
+ }
364
426
  }
365
427
  //# sourceMappingURL=gemini-oauth-provider.js.map