@abacus-ai/cli 1.106.25007 → 2.0.0-canary.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 (200) hide show
  1. package/.oxlintrc.json +8 -0
  2. package/dist/index.mjs +12603 -0
  3. package/package.json +7 -39
  4. package/resources/abacus.ico +0 -0
  5. package/resources/entitlements.plist +9 -0
  6. package/src/__e2e__/README.md +196 -0
  7. package/src/__e2e__/agent-interactions.e2e.test.tsx +61 -0
  8. package/src/__e2e__/cli-commands.e2e.test.tsx +77 -0
  9. package/src/__e2e__/conversation-throttle.e2e.test.ts +453 -0
  10. package/src/__e2e__/conversation.e2e.test.tsx +56 -0
  11. package/src/__e2e__/diff-preview.e2e.test.tsx +3399 -0
  12. package/src/__e2e__/file-creation.e2e.test.tsx +149 -0
  13. package/src/__e2e__/helpers/test-helpers.ts +450 -0
  14. package/src/__e2e__/keyboard-navigation.e2e.test.tsx +34 -0
  15. package/src/__e2e__/llm-models.e2e.test.ts +402 -0
  16. package/src/__e2e__/mcp/mcp-callback-flow.e2e.test.tsx +71 -0
  17. package/src/__e2e__/mcp/mcp-full-app-ui.e2e.test.tsx +167 -0
  18. package/src/__e2e__/mcp/mcp-ui-rendering.e2e.test.tsx +185 -0
  19. package/src/__e2e__/repl.e2e.test.tsx +78 -0
  20. package/src/__e2e__/shell-compatibility.e2e.test.tsx +76 -0
  21. package/src/__e2e__/theme-mcp.e2e.test.tsx +98 -0
  22. package/src/__e2e__/tool-permissions.e2e.test.tsx +66 -0
  23. package/src/args.ts +22 -0
  24. package/src/components/__tests__/react-compiler.test.tsx +78 -0
  25. package/src/components/__tests__/status-indicator.test.tsx +403 -0
  26. package/src/components/composer/__tests__/bash-runner.test.tsx +263 -0
  27. package/src/components/composer/agent-mode-indicator.tsx +63 -0
  28. package/src/components/composer/bash-runner.tsx +54 -0
  29. package/src/components/composer/commands/default-commands.tsx +615 -0
  30. package/src/components/composer/commands/handler.tsx +59 -0
  31. package/src/components/composer/commands/picker.tsx +273 -0
  32. package/src/components/composer/commands/registry.ts +233 -0
  33. package/src/components/composer/commands/types.ts +33 -0
  34. package/src/components/composer/context.tsx +88 -0
  35. package/src/components/composer/file-mention-picker.tsx +83 -0
  36. package/src/components/composer/help.tsx +44 -0
  37. package/src/components/composer/index.tsx +1006 -0
  38. package/src/components/composer/mentions.ts +57 -0
  39. package/src/components/composer/message-queue.tsx +70 -0
  40. package/src/components/composer/mode-panel.tsx +35 -0
  41. package/src/components/composer/modes/__tests__/bash-handler.test.tsx +755 -0
  42. package/src/components/composer/modes/__tests__/bash-renderer.test.tsx +1108 -0
  43. package/src/components/composer/modes/bash-handler.tsx +132 -0
  44. package/src/components/composer/modes/bash-renderer.tsx +175 -0
  45. package/src/components/composer/modes/default-handlers.tsx +33 -0
  46. package/src/components/composer/modes/index.ts +41 -0
  47. package/src/components/composer/modes/types.ts +21 -0
  48. package/src/components/composer/persistent-shell.ts +283 -0
  49. package/src/components/composer/process.ts +65 -0
  50. package/src/components/composer/types.ts +9 -0
  51. package/src/components/composer/use-mention-search.ts +68 -0
  52. package/src/components/error-boundry.tsx +60 -0
  53. package/src/components/exit-message.tsx +29 -0
  54. package/src/components/expanded-view.tsx +74 -0
  55. package/src/components/file-completion.tsx +127 -0
  56. package/src/components/header.tsx +47 -0
  57. package/src/components/logo.tsx +37 -0
  58. package/src/components/segments.tsx +356 -0
  59. package/src/components/status-indicator.tsx +306 -0
  60. package/src/components/tool-group-summary.tsx +263 -0
  61. package/src/components/tool-permissions/ask-user-question-permission-ui.tsx +312 -0
  62. package/src/components/tool-permissions/diff-preview.tsx +355 -0
  63. package/src/components/tool-permissions/index.ts +5 -0
  64. package/src/components/tool-permissions/permission-options.tsx +375 -0
  65. package/src/components/tool-permissions/permission-preview-header.tsx +57 -0
  66. package/src/components/tool-permissions/tool-permission-ui.tsx +398 -0
  67. package/src/components/tools/agent/ask-user-question.tsx +101 -0
  68. package/src/components/tools/agent/enter-plan-mode.tsx +49 -0
  69. package/src/components/tools/agent/exit-plan-mode.tsx +75 -0
  70. package/src/components/tools/agent/handoff-to-main.tsx +27 -0
  71. package/src/components/tools/agent/subagent.tsx +37 -0
  72. package/src/components/tools/agent/todo-write.tsx +104 -0
  73. package/src/components/tools/browser/close-tab.tsx +58 -0
  74. package/src/components/tools/browser/computer.tsx +70 -0
  75. package/src/components/tools/browser/get-interactive-elements.tsx +54 -0
  76. package/src/components/tools/browser/get-tab-content.tsx +51 -0
  77. package/src/components/tools/browser/navigate-to.tsx +59 -0
  78. package/src/components/tools/browser/new-tab.tsx +60 -0
  79. package/src/components/tools/browser/perform-action.tsx +63 -0
  80. package/src/components/tools/browser/refresh-tab.tsx +43 -0
  81. package/src/components/tools/browser/switch-tab.tsx +58 -0
  82. package/src/components/tools/filesystem/delete-file.tsx +104 -0
  83. package/src/components/tools/filesystem/edit.tsx +220 -0
  84. package/src/components/tools/filesystem/list-dir.tsx +78 -0
  85. package/src/components/tools/filesystem/read-file.tsx +180 -0
  86. package/src/components/tools/filesystem/upload-image.tsx +76 -0
  87. package/src/components/tools/ide/ide-diagnostics.tsx +62 -0
  88. package/src/components/tools/index.ts +91 -0
  89. package/src/components/tools/mcp/mcp-tool.tsx +158 -0
  90. package/src/components/tools/search/fetch-url.tsx +73 -0
  91. package/src/components/tools/search/file-search.tsx +78 -0
  92. package/src/components/tools/search/grep.tsx +90 -0
  93. package/src/components/tools/search/semantic-search.tsx +66 -0
  94. package/src/components/tools/search/web-search.tsx +71 -0
  95. package/src/components/tools/shared/index.tsx +48 -0
  96. package/src/components/tools/shared/zod-coercion.ts +35 -0
  97. package/src/components/tools/terminal/bash-tool-output.tsx +174 -0
  98. package/src/components/tools/terminal/get-terminal-output.tsx +85 -0
  99. package/src/components/tools/terminal/run-in-terminal.tsx +106 -0
  100. package/src/components/tools/types.ts +16 -0
  101. package/src/components/tools.tsx +66 -0
  102. package/src/components/ui/__tests__/divider.test.tsx +61 -0
  103. package/src/components/ui/__tests__/gradient.test.tsx +125 -0
  104. package/src/components/ui/__tests__/input.test.tsx +166 -0
  105. package/src/components/ui/__tests__/select.test.tsx +273 -0
  106. package/src/components/ui/__tests__/shimmer.test.tsx +99 -0
  107. package/src/components/ui/blinking-indicator.tsx +25 -0
  108. package/src/components/ui/divider.tsx +162 -0
  109. package/src/components/ui/gradient.tsx +56 -0
  110. package/src/components/ui/input.tsx +228 -0
  111. package/src/components/ui/select.tsx +151 -0
  112. package/src/components/ui/shimmer.tsx +84 -0
  113. package/src/context/agent-mode.tsx +95 -0
  114. package/src/context/extension-file.tsx +136 -0
  115. package/src/context/network-activity.tsx +45 -0
  116. package/src/context/notification.tsx +62 -0
  117. package/src/context/shell-size.tsx +49 -0
  118. package/src/context/shell-title.tsx +38 -0
  119. package/src/entrypoints/print-mode.ts +312 -0
  120. package/src/entrypoints/repl.tsx +401 -0
  121. package/src/hooks/use-agent.ts +15 -0
  122. package/src/hooks/use-api-client.ts +1 -0
  123. package/src/hooks/use-available-height.ts +8 -0
  124. package/src/hooks/use-cleanup.ts +29 -0
  125. package/src/hooks/use-interrupt-manager.ts +242 -0
  126. package/src/hooks/use-models.ts +22 -0
  127. package/src/index.ts +217 -0
  128. package/src/lib/__tests__/ansi.test.ts +255 -0
  129. package/src/lib/__tests__/cli.test.ts +122 -0
  130. package/src/lib/__tests__/commands.test.ts +325 -0
  131. package/src/lib/__tests__/constants.test.ts +15 -0
  132. package/src/lib/__tests__/focusables.test.ts +25 -0
  133. package/src/lib/__tests__/fs.test.ts +231 -0
  134. package/src/lib/__tests__/markdown.test.tsx +348 -0
  135. package/src/lib/__tests__/mcpCommandHandler.test.ts +173 -0
  136. package/src/lib/__tests__/mcpManagement.test.ts +38 -0
  137. package/src/lib/__tests__/path-paste.test.ts +144 -0
  138. package/src/lib/__tests__/path.test.ts +300 -0
  139. package/src/lib/__tests__/queries.test.ts +39 -0
  140. package/src/lib/__tests__/standaloneMcpService.test.ts +71 -0
  141. package/src/lib/__tests__/text-buffer.test.ts +328 -0
  142. package/src/lib/__tests__/text-utils.test.ts +32 -0
  143. package/src/lib/__tests__/timing.test.ts +78 -0
  144. package/src/lib/__tests__/utils.test.ts +238 -0
  145. package/src/lib/__tests__/vim-buffer-actions.test.ts +154 -0
  146. package/src/lib/ansi.ts +150 -0
  147. package/src/lib/cli-push-server.ts +112 -0
  148. package/src/lib/cli.ts +44 -0
  149. package/src/lib/clipboard.ts +226 -0
  150. package/src/lib/command-utils.ts +93 -0
  151. package/src/lib/commands.ts +270 -0
  152. package/src/lib/constants.ts +3 -0
  153. package/src/lib/extension-connection.ts +181 -0
  154. package/src/lib/focusables.ts +7 -0
  155. package/src/lib/fs.ts +533 -0
  156. package/src/lib/markdown/code-block.tsx +63 -0
  157. package/src/lib/markdown/index.ts +4 -0
  158. package/src/lib/markdown/link.tsx +19 -0
  159. package/src/lib/markdown/markdown.tsx +372 -0
  160. package/src/lib/markdown/types.ts +15 -0
  161. package/src/lib/mcpCommandHandler.ts +121 -0
  162. package/src/lib/mcpManagement.ts +44 -0
  163. package/src/lib/path-paste.ts +185 -0
  164. package/src/lib/path.ts +179 -0
  165. package/src/lib/queries.ts +15 -0
  166. package/src/lib/standaloneMcpService.ts +688 -0
  167. package/src/lib/status-utils.ts +237 -0
  168. package/src/lib/test-utils.tsx +72 -0
  169. package/src/lib/text-buffer.ts +2415 -0
  170. package/src/lib/text-utils.ts +272 -0
  171. package/src/lib/timing.ts +63 -0
  172. package/src/lib/types.ts +295 -0
  173. package/src/lib/utils.ts +182 -0
  174. package/src/lib/vim-buffer-actions.ts +732 -0
  175. package/src/providers/agent.tsx +1075 -0
  176. package/src/providers/api-client.tsx +43 -0
  177. package/src/services/logger.ts +85 -0
  178. package/src/terminal/detection.ts +187 -0
  179. package/src/terminal/exit.ts +279 -0
  180. package/src/terminal/notification.ts +83 -0
  181. package/src/terminal/progress.ts +201 -0
  182. package/src/terminal/setup.ts +797 -0
  183. package/src/terminal/suspend.ts +58 -0
  184. package/src/terminal/types.ts +51 -0
  185. package/src/theme/context.tsx +57 -0
  186. package/src/theme/index.ts +4 -0
  187. package/src/theme/themed.tsx +35 -0
  188. package/src/theme/themes.json +546 -0
  189. package/src/theme/types.ts +110 -0
  190. package/src/tools/types.ts +59 -0
  191. package/src/tools/utils/__tests__/zod-coercion.test.ts +33 -0
  192. package/src/tools/utils/tool-ui-components.tsx +631 -0
  193. package/src/tools/utils/zod-coercion.ts +35 -0
  194. package/tsconfig.json +11 -0
  195. package/tsconfig.node.json +29 -0
  196. package/tsconfig.test.json +27 -0
  197. package/tsdown.config.ts +17 -0
  198. package/vitest.config.ts +76 -0
  199. package/README.md +0 -28
  200. package/dist/index.js +0 -26
@@ -0,0 +1,201 @@
1
+ import process from "node:process";
2
+
3
+ import type { TerminalType } from "./types.js";
4
+
5
+ import {
6
+ osc9Progress,
7
+ osc1337ProgressClear,
8
+ osc1337ProgressPercent,
9
+ osc1337ProgressState,
10
+ } from "../lib/ansi.js";
11
+ import { getTerminal } from "./detection.js";
12
+
13
+ export interface ProgressBarOptions {
14
+ label?: string;
15
+ total?: number;
16
+ current?: number;
17
+ percentage?: number;
18
+ state?: "default" | "error" | "warning" | "indeterminate";
19
+ }
20
+
21
+ /**
22
+ * Terminals that support the OSC 9;4 progress bar standard or iTerm2's proprietary sequences.
23
+ */
24
+ const TERMINALS_WITH_PROGRESS: TerminalType[] = [
25
+ "conemu",
26
+ "ghostty",
27
+ "windows-terminal",
28
+ "WezTerm",
29
+ "iTerm.app",
30
+ ];
31
+
32
+ let hideTimeoutId: ReturnType<typeof setTimeout> | null = null;
33
+
34
+ function supportsProgress(terminal: TerminalType): boolean {
35
+ if (!terminal) {
36
+ return false;
37
+ }
38
+ if (!process.stdout.isTTY) {
39
+ return false;
40
+ }
41
+
42
+ // Explicitly check our known list
43
+ if (TERMINALS_WITH_PROGRESS.includes(terminal)) {
44
+ return true;
45
+ }
46
+
47
+ // Handle case-insensitive or partial matches for safety
48
+ const term = terminal.toLowerCase();
49
+ const supported =
50
+ term.includes("iterm") ||
51
+ term.includes("ghostty") ||
52
+ term.includes("wezterm") ||
53
+ term.includes("conemu");
54
+ return supported;
55
+ }
56
+
57
+ function writeToTerminal(data: string): void {
58
+ process.stdout.write(data);
59
+ }
60
+
61
+ function getOscState(state: "default" | "error" | "warning" | "indeterminate"): 0 | 1 | 2 | 3 | 4 {
62
+ switch (state) {
63
+ case "indeterminate":
64
+ return 3;
65
+ case "error":
66
+ return 2;
67
+ case "warning":
68
+ return 4;
69
+ case "default":
70
+ default:
71
+ return 1;
72
+ }
73
+ }
74
+
75
+ function clearHideTimeout(): void {
76
+ if (hideTimeoutId) {
77
+ clearTimeout(hideTimeoutId);
78
+ hideTimeoutId = null;
79
+ }
80
+ }
81
+
82
+ function scheduleHide(): void {
83
+ clearHideTimeout();
84
+ hideTimeoutId = setTimeout(() => {
85
+ hideProgressImmediate();
86
+ }, 500);
87
+ }
88
+
89
+ function hideProgressImmediate(): void {
90
+ const terminal = getTerminal();
91
+ if (!supportsProgress(terminal)) {
92
+ return;
93
+ }
94
+
95
+ // Emit hide sequence for OSC 9;4
96
+ writeToTerminal(osc9Progress(0));
97
+
98
+ // For iTerm2, also emit the clear sequence
99
+ if (terminal?.toLowerCase().includes("iterm")) {
100
+ writeToTerminal(osc1337ProgressClear());
101
+ }
102
+ }
103
+
104
+ export function showProgress(options: ProgressBarOptions): void;
105
+ export function showProgress<T>(promise: Promise<T>, options?: TrackProgressOptions): Promise<T>;
106
+ export function showProgress<T>(
107
+ optionsOrPromise: ProgressBarOptions | Promise<T>,
108
+ trackOptions?: TrackProgressOptions,
109
+ ): void | Promise<T> {
110
+ if (optionsOrPromise instanceof Promise) {
111
+ return trackProgress(optionsOrPromise, trackOptions);
112
+ }
113
+
114
+ const options = optionsOrPromise;
115
+ const terminal = getTerminal();
116
+
117
+ if (!supportsProgress(terminal)) {
118
+ return;
119
+ }
120
+
121
+ clearHideTimeout();
122
+
123
+ let percentage = 0;
124
+ if (options.percentage !== undefined) {
125
+ percentage = options.percentage;
126
+ } else if (options.total !== undefined && options.current !== undefined && options.total > 0) {
127
+ percentage = (options.current / options.total) * 100;
128
+ }
129
+
130
+ const state = options.state ?? "default";
131
+ const oscState = getOscState(state);
132
+
133
+ // Broadcast OSC 9;4 as the primary standard (iTerm2 3.5+, Ghostty, ConEmu, WezTerm)
134
+ writeToTerminal(osc9Progress(oscState, percentage));
135
+
136
+ // Additional proprietary sequences for iTerm2 compatibility
137
+ if (terminal?.toLowerCase().includes("iterm")) {
138
+ if (state === "indeterminate") {
139
+ writeToTerminal(osc1337ProgressState(2));
140
+ } else {
141
+ writeToTerminal(osc1337ProgressPercent(percentage, options.label));
142
+ if (percentage >= 100) {
143
+ writeToTerminal(osc1337ProgressState(1));
144
+ }
145
+ }
146
+ }
147
+
148
+ if (state === "error" || percentage >= 100) {
149
+ scheduleHide();
150
+ }
151
+ }
152
+
153
+ export function hideProgress(): void {
154
+ clearHideTimeout();
155
+ hideProgressImmediate();
156
+ }
157
+
158
+ export function updateProgress(options: ProgressBarOptions): void {
159
+ showProgress(options);
160
+ }
161
+
162
+ export function completeProgress(label?: string): void {
163
+ showProgress({ percentage: 100, label });
164
+ hideProgress();
165
+ if (process.stdout.isTTY) {
166
+ process.stdout.write("\n");
167
+ }
168
+ }
169
+
170
+ export interface TrackProgressOptions {
171
+ label?: string;
172
+ hideOnComplete?: boolean;
173
+ }
174
+
175
+ export async function trackProgress<T>(
176
+ promise: Promise<T>,
177
+ options?: TrackProgressOptions,
178
+ ): Promise<T> {
179
+ const { label, hideOnComplete = true } = options ?? {};
180
+
181
+ showProgress({ state: "indeterminate", label });
182
+
183
+ try {
184
+ const result = await promise;
185
+ showProgress({ percentage: 100, state: "default", label });
186
+
187
+ if (hideOnComplete) {
188
+ scheduleHide();
189
+ }
190
+
191
+ return result;
192
+ } catch (error) {
193
+ showProgress({ percentage: 100, state: "error", label });
194
+
195
+ if (hideOnComplete) {
196
+ scheduleHide();
197
+ }
198
+
199
+ throw error;
200
+ }
201
+ }