codebase-cli 2.0.0-pre.3 → 2.0.0-pre.31
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.
- package/dist/agent/agent.js +31 -12
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/config.js +101 -20
- package/dist/agent/config.js.map +1 -1
- package/dist/agent/prompt-suggestion.js +145 -0
- package/dist/agent/prompt-suggestion.js.map +1 -0
- package/dist/agent/system-prompt.js +15 -0
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/app-server/protocol.js +7 -0
- package/dist/app-server/protocol.js.map +1 -0
- package/dist/app-server/server.js +241 -0
- package/dist/app-server/server.js.map +1 -0
- package/dist/auth/credentials.js +10 -0
- package/dist/auth/credentials.js.map +1 -1
- package/dist/auth/flow.js +145 -24
- package/dist/auth/flow.js.map +1 -1
- package/dist/cli.js +58 -6
- package/dist/cli.js.map +1 -1
- package/dist/commands/builtins.js +155 -5
- package/dist/commands/builtins.js.map +1 -1
- package/dist/commands/registry.js +46 -1
- package/dist/commands/registry.js.map +1 -1
- package/dist/compaction/monitor.js +38 -0
- package/dist/compaction/monitor.js.map +1 -0
- package/dist/glue/client.js +10 -1
- package/dist/glue/client.js.map +1 -1
- package/dist/headless/run.js +1 -1
- package/dist/headless/run.js.map +1 -1
- package/dist/hooks/manager.js +8 -2
- package/dist/hooks/manager.js.map +1 -1
- package/dist/permissions/store.js +4 -0
- package/dist/permissions/store.js.map +1 -1
- package/dist/projects/cli.js +92 -0
- package/dist/projects/cli.js.map +1 -0
- package/dist/projects/client.js +120 -0
- package/dist/projects/client.js.map +1 -0
- package/dist/projects/types.js +2 -0
- package/dist/projects/types.js.map +1 -0
- package/dist/skills/platform-loader.js +133 -38
- package/dist/skills/platform-loader.js.map +1 -1
- package/dist/tools/__test__/mock-tool-context.js +31 -0
- package/dist/tools/__test__/mock-tool-context.js.map +1 -0
- package/dist/tools/read-file.js +8 -2
- package/dist/tools/read-file.js.map +1 -1
- package/dist/ui/App.js +267 -17
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/FirstRunSetup.js +66 -14
- package/dist/ui/FirstRunSetup.js.map +1 -1
- package/dist/ui/Input.js +270 -14
- package/dist/ui/Input.js.map +1 -1
- package/dist/ui/Markdown.js +286 -0
- package/dist/ui/Markdown.js.map +1 -0
- package/dist/ui/Message.js +604 -25
- package/dist/ui/Message.js.map +1 -1
- package/dist/ui/MessageList.js +100 -3
- package/dist/ui/MessageList.js.map +1 -1
- package/dist/ui/Permission.js +43 -20
- package/dist/ui/Permission.js.map +1 -1
- package/dist/ui/PixelC.js +25 -0
- package/dist/ui/PixelC.js.map +1 -0
- package/dist/ui/Status.js +213 -7
- package/dist/ui/Status.js.map +1 -1
- package/dist/ui/Throbber.js +11 -7
- package/dist/ui/Throbber.js.map +1 -1
- package/dist/ui/Welcome.js +59 -0
- package/dist/ui/Welcome.js.map +1 -0
- package/dist/ui/attachments.js +68 -0
- package/dist/ui/attachments.js.map +1 -0
- package/dist/ui/debug-input.js +44 -0
- package/dist/ui/debug-input.js.map +1 -0
- package/dist/ui/highlight.js +324 -0
- package/dist/ui/highlight.js.map +1 -0
- package/dist/ui/history-store.js +60 -0
- package/dist/ui/history-store.js.map +1 -0
- package/dist/ui/path-complete.js +102 -0
- package/dist/ui/path-complete.js.map +1 -0
- package/dist/ui/terminal-restore.js +83 -0
- package/dist/ui/terminal-restore.js.map +1 -0
- package/package.json +5 -1
package/dist/ui/App.js
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
2
3
|
import { Box, Text, useApp } from "ink";
|
|
3
|
-
import { useEffect, useMemo, useReducer, useState } from "react";
|
|
4
|
+
import { useEffect, useMemo, useReducer, useRef, useState } from "react";
|
|
4
5
|
import { createAgent } from "../agent/agent.js";
|
|
5
6
|
import { ConfigError } from "../agent/config.js";
|
|
6
7
|
import { initialState, reducer } from "../agent/events.js";
|
|
8
|
+
import { generateSuggestion } from "../agent/prompt-suggestion.js";
|
|
7
9
|
import { routeUserInput } from "../agent/router.js";
|
|
8
10
|
import { BUILTIN_COMMANDS } from "../commands/builtins.js";
|
|
9
11
|
import { CommandRegistry } from "../commands/registry.js";
|
|
10
12
|
import { buildAgentPrompt, generatePlan, generateQuestion, MAX_QUESTIONS, parseAnswer, revisePlan, } from "../plan/flow.js";
|
|
11
13
|
import { ANSWER_START_BUILDING } from "../plan/types.js";
|
|
12
14
|
import { UserQueryCancelled } from "../user-queries/store.js";
|
|
15
|
+
import { buildAttachmentPrompt, collectAttachments } from "./attachments.js";
|
|
13
16
|
import { FirstRunSetup } from "./FirstRunSetup.js";
|
|
17
|
+
import { HistoryStore } from "./history-store.js";
|
|
14
18
|
import { Input } from "./Input.js";
|
|
15
19
|
import { MessageList } from "./MessageList.js";
|
|
16
20
|
import { Permission } from "./Permission.js";
|
|
@@ -18,6 +22,7 @@ import { Status } from "./Status.js";
|
|
|
18
22
|
import { TaskPanel } from "./TaskPanel.js";
|
|
19
23
|
import { ToolPanel } from "./ToolPanel.js";
|
|
20
24
|
import { UserQueryView } from "./UserQuery.js";
|
|
25
|
+
import { Welcome } from "./Welcome.js";
|
|
21
26
|
export function App() {
|
|
22
27
|
const { exit } = useApp();
|
|
23
28
|
const [setupAttempt, setSetupAttempt] = useState(0);
|
|
@@ -25,7 +30,12 @@ export function App() {
|
|
|
25
30
|
const { bundle, configError } = useMemo(() => {
|
|
26
31
|
void setupAttempt;
|
|
27
32
|
try {
|
|
28
|
-
|
|
33
|
+
// Auto-resume the prior session for this cwd by default. The
|
|
34
|
+
// `--new` CLI flag (parsed in cli.tsx) sets CODEBASE_FRESH so
|
|
35
|
+
// users who explicitly want a clean slate can opt out without
|
|
36
|
+
// having to wipe ~/.codebase/sessions manually.
|
|
37
|
+
const resume = process.env.CODEBASE_FRESH !== "1";
|
|
38
|
+
return { bundle: createAgent({ resume }), configError: undefined };
|
|
29
39
|
}
|
|
30
40
|
catch (err) {
|
|
31
41
|
return {
|
|
@@ -49,22 +59,110 @@ function ChatApp({ bundle, onExit }) {
|
|
|
49
59
|
const [state, dispatch] = useReducer(reducer, initialState({ provider: bundle.model.provider, id: bundle.model.id, name: bundle.model.name }));
|
|
50
60
|
const [permRequest, setPermRequest] = useState(bundle.permissions.current());
|
|
51
61
|
const [userQuery, setUserQuery] = useState(bundle.userQueries.current());
|
|
62
|
+
const [compactionState, setCompactionState] = useState(bundle.compactionMonitor.current());
|
|
52
63
|
const [statusLines, setStatusLines] = useState([]);
|
|
64
|
+
// Cap the buffer so noisy emits (long /help, many !cmds) don't grow
|
|
65
|
+
// the status pane indefinitely. 50 rows ≈ a screen on most terms.
|
|
66
|
+
const appendStatus = (line) => setStatusLines((prev) => {
|
|
67
|
+
const next = [...prev, line];
|
|
68
|
+
return next.length > 50 ? next.slice(next.length - 50) : next;
|
|
69
|
+
});
|
|
53
70
|
const [tasks, setTasks] = useState(() => bundle.toolContext.tasks.list());
|
|
54
71
|
const registry = useMemo(() => {
|
|
55
72
|
const reg = new CommandRegistry();
|
|
56
73
|
reg.registerAll(BUILTIN_COMMANDS);
|
|
57
74
|
return reg;
|
|
58
75
|
}, []);
|
|
76
|
+
const commandSuggestions = useMemo(() => registry.list().map((c) => ({ name: c.name, description: c.description })), [registry]);
|
|
77
|
+
const historyStore = useMemo(() => new HistoryStore({ cwd: bundle.toolContext.cwd }), [bundle.toolContext.cwd]);
|
|
78
|
+
const persistedHistory = useMemo(() => historyStore.load(), [historyStore]);
|
|
79
|
+
const inputHistory = useMemo(() => {
|
|
80
|
+
// Build the recall list from (persisted history) ++ (this-session prompts),
|
|
81
|
+
// in chronological order. Persisted gives the user prior runs to recall;
|
|
82
|
+
// this-session ensures their most recent prompt is at the top of ↑.
|
|
83
|
+
const out = [...persistedHistory];
|
|
84
|
+
for (const m of state.messages) {
|
|
85
|
+
if (m.role !== "user")
|
|
86
|
+
continue;
|
|
87
|
+
const text = typeof m.content === "string" ? m.content : extractUserText(m.content);
|
|
88
|
+
if (text.trim().length === 0)
|
|
89
|
+
continue;
|
|
90
|
+
if (out[out.length - 1] === text)
|
|
91
|
+
continue;
|
|
92
|
+
out.push(text);
|
|
93
|
+
}
|
|
94
|
+
return out;
|
|
95
|
+
}, [state.messages, persistedHistory]);
|
|
96
|
+
// Coalesce high-frequency streaming events (per-token assistant updates
|
|
97
|
+
// and per-chunk tool stdout) to one React commit per frame instead of
|
|
98
|
+
// per event. Pi-agent-core emits one message_update per token, and a
|
|
99
|
+
// fast model + long tool output can fire 100+ Hz — each dispatch runs
|
|
100
|
+
// the full reducer + React tree diff + Yoga layout for everything on
|
|
101
|
+
// screen. Throttling here is the single biggest cause of perceived
|
|
102
|
+
// scroll/render jankiness; everything else (Static for finalized
|
|
103
|
+
// messages, memoized children) is icing.
|
|
104
|
+
//
|
|
105
|
+
// Keyed coalescing: message_update has one slot, tool_execution_update
|
|
106
|
+
// has one slot per tool id. Latest event wins. Non-coalesceable events
|
|
107
|
+
// (message_start/end, tool_execution_start/end, turn_*, agent_*) flush
|
|
108
|
+
// any pending updates first so ordering stays correct.
|
|
109
|
+
const pendingRef = useRef(new Map());
|
|
110
|
+
const flushTimerRef = useRef(null);
|
|
59
111
|
useEffect(() => {
|
|
112
|
+
const STREAM_FRAME_MS = 16; // ~60fps cap
|
|
113
|
+
const flush = () => {
|
|
114
|
+
flushTimerRef.current = null;
|
|
115
|
+
if (pendingRef.current.size === 0)
|
|
116
|
+
return;
|
|
117
|
+
const events = [...pendingRef.current.values()];
|
|
118
|
+
pendingRef.current.clear();
|
|
119
|
+
for (const event of events) {
|
|
120
|
+
dispatch({ type: "agent-event", event });
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
const scheduleFlush = () => {
|
|
124
|
+
if (flushTimerRef.current != null)
|
|
125
|
+
return;
|
|
126
|
+
flushTimerRef.current = setTimeout(flush, STREAM_FRAME_MS);
|
|
127
|
+
};
|
|
60
128
|
const unsubscribe = bundle.subscribe((event) => {
|
|
129
|
+
if (event.type === "message_update") {
|
|
130
|
+
pendingRef.current.set("msg", event);
|
|
131
|
+
scheduleFlush();
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (event.type === "tool_execution_update") {
|
|
135
|
+
pendingRef.current.set(`tool:${event.toolCallId}`, event);
|
|
136
|
+
scheduleFlush();
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
// Any other event flushes the queue before dispatching so the
|
|
140
|
+
// reducer sees pending streaming updates before the terminal
|
|
141
|
+
// event (message_end, tool_execution_end, etc.).
|
|
142
|
+
if (pendingRef.current.size > 0) {
|
|
143
|
+
if (flushTimerRef.current != null) {
|
|
144
|
+
clearTimeout(flushTimerRef.current);
|
|
145
|
+
flushTimerRef.current = null;
|
|
146
|
+
}
|
|
147
|
+
flush();
|
|
148
|
+
}
|
|
61
149
|
dispatch({ type: "agent-event", event });
|
|
62
150
|
});
|
|
63
|
-
return
|
|
151
|
+
return () => {
|
|
152
|
+
unsubscribe();
|
|
153
|
+
if (flushTimerRef.current != null) {
|
|
154
|
+
clearTimeout(flushTimerRef.current);
|
|
155
|
+
flushTimerRef.current = null;
|
|
156
|
+
}
|
|
157
|
+
pendingRef.current.clear();
|
|
158
|
+
};
|
|
64
159
|
}, [bundle]);
|
|
65
160
|
useEffect(() => {
|
|
66
161
|
return bundle.permissions.subscribe((req) => setPermRequest(req));
|
|
67
162
|
}, [bundle]);
|
|
163
|
+
useEffect(() => {
|
|
164
|
+
return bundle.compactionMonitor.subscribe((s) => setCompactionState(s));
|
|
165
|
+
}, [bundle]);
|
|
68
166
|
useEffect(() => {
|
|
69
167
|
return bundle.userQueries.subscribe((q) => setUserQuery(q));
|
|
70
168
|
}, [bundle]);
|
|
@@ -72,29 +170,96 @@ function ChatApp({ bundle, onExit }) {
|
|
|
72
170
|
return bundle.toolContext.tasks.subscribe((snapshot) => setTasks(snapshot));
|
|
73
171
|
}, [bundle]);
|
|
74
172
|
const busy = state.status === "thinking" || state.status === "streaming" || state.status === "tool";
|
|
173
|
+
// Inline prompt-suggestion ghost text. Schedules a single forecast
|
|
174
|
+
// call when the agent goes idle; cancels the prior call on every new
|
|
175
|
+
// state change so we never race two suggestions or show a stale one
|
|
176
|
+
// after the user starts a new turn. 500ms debounce lets idle settle
|
|
177
|
+
// (e.g. agent finishes, a quick status emit follows, we don't want to
|
|
178
|
+
// fire twice). Disabled via env so users on metered BYOK providers
|
|
179
|
+
// can opt out.
|
|
180
|
+
const [suggestion, setSuggestion] = useState(null);
|
|
181
|
+
const suggestionAbortRef = useRef(null);
|
|
182
|
+
useEffect(() => {
|
|
183
|
+
// Always clear any active suggestion on state change — it was
|
|
184
|
+
// computed for the previous turn and the user has moved on.
|
|
185
|
+
setSuggestion(null);
|
|
186
|
+
suggestionAbortRef.current?.abort();
|
|
187
|
+
suggestionAbortRef.current = null;
|
|
188
|
+
if (process.env.CODEBASE_NO_SUGGESTIONS === "1")
|
|
189
|
+
return;
|
|
190
|
+
if (state.status !== "idle")
|
|
191
|
+
return;
|
|
192
|
+
if (state.messages.length < 2)
|
|
193
|
+
return;
|
|
194
|
+
const ac = new AbortController();
|
|
195
|
+
suggestionAbortRef.current = ac;
|
|
196
|
+
const timer = setTimeout(async () => {
|
|
197
|
+
if (ac.signal.aborted)
|
|
198
|
+
return;
|
|
199
|
+
try {
|
|
200
|
+
const text = await generateSuggestion(bundle, { signal: ac.signal });
|
|
201
|
+
if (ac.signal.aborted)
|
|
202
|
+
return;
|
|
203
|
+
if (text)
|
|
204
|
+
setSuggestion(text);
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
// Suggestion failures are silent — they're a nicety, not load-bearing.
|
|
208
|
+
}
|
|
209
|
+
}, 500);
|
|
210
|
+
return () => {
|
|
211
|
+
clearTimeout(timer);
|
|
212
|
+
ac.abort();
|
|
213
|
+
if (suggestionAbortRef.current === ac)
|
|
214
|
+
suggestionAbortRef.current = null;
|
|
215
|
+
};
|
|
216
|
+
}, [bundle, state.status, state.messages.length]);
|
|
75
217
|
const handleSubmit = async (text) => {
|
|
218
|
+
// `!cmd` runs a shell command directly — the CC convention for
|
|
219
|
+
// "I just want to check something real quick" without involving
|
|
220
|
+
// the LLM. We bypass the agent loop entirely and inject the
|
|
221
|
+
// output as a synthetic user / toolResult pair so it shows up in
|
|
222
|
+
// the transcript but doesn't end up in the model's context.
|
|
223
|
+
if (text.startsWith("!") && text.length > 1) {
|
|
224
|
+
await runShellEscape(text.slice(1), bundle.toolContext.cwd, appendStatus);
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
76
227
|
// Slash commands first — they bypass the agent.
|
|
77
228
|
if (text.startsWith("/")) {
|
|
78
229
|
const result = await registry.dispatch(text, {
|
|
79
230
|
bundle,
|
|
80
231
|
state: state,
|
|
81
|
-
emit:
|
|
82
|
-
clearDisplay: () =>
|
|
232
|
+
emit: appendStatus,
|
|
233
|
+
clearDisplay: () => {
|
|
234
|
+
dispatch({ type: "reset" });
|
|
235
|
+
setStatusLines([]);
|
|
236
|
+
},
|
|
83
237
|
exit: onExit,
|
|
84
|
-
//
|
|
85
|
-
//
|
|
238
|
+
// Injecting the registry so /help can list commands without us
|
|
239
|
+
// needing to thread it through the CommandContext type.
|
|
86
240
|
registry,
|
|
87
|
-
// biome-ignore lint/suspicious/noExplicitAny: cross-cutting injection
|
|
88
241
|
});
|
|
89
242
|
if (result.handled)
|
|
90
243
|
return;
|
|
91
244
|
}
|
|
245
|
+
// `@path` tokens auto-attach file contents to the prompt so the
|
|
246
|
+
// user doesn't have to spend a tool turn just to put a file in
|
|
247
|
+
// context. Anything that doesn't resolve falls through unchanged
|
|
248
|
+
// — we don't want to silently transform a literal @-mention.
|
|
249
|
+
const attachments = collectAttachments(text, bundle.toolContext.cwd);
|
|
250
|
+
const augmentedText = attachments.length > 0 ? buildAttachmentPrompt(text, attachments) : text;
|
|
251
|
+
if (attachments.length > 0) {
|
|
252
|
+
appendStatus(`Attached: ${attachments.map((a) => a.relPath).join(", ")}`);
|
|
253
|
+
}
|
|
92
254
|
// Capture history-presence BEFORE the user-prompt dispatch — React's
|
|
93
255
|
// batched updates mean state.messages won't reflect the new user message
|
|
94
256
|
// in the same tick, but the router needs to know whether this is a
|
|
95
257
|
// continuation (greeting fast-track) or a first message.
|
|
96
258
|
const hadHistory = state.messages.some((m) => m.role === "assistant");
|
|
97
259
|
dispatch({ type: "user-prompt", text });
|
|
260
|
+
// Persist the raw user input (pre-attachment-augmentation) so ↑ in
|
|
261
|
+
// future sessions recalls what they actually typed.
|
|
262
|
+
historyStore.append(text);
|
|
98
263
|
try {
|
|
99
264
|
const route = await routeUserInput(bundle.glue, text, { hasHistory: hadHistory });
|
|
100
265
|
if (route.kind === "chat") {
|
|
@@ -109,12 +274,9 @@ function ChatApp({ bundle, onExit }) {
|
|
|
109
274
|
catch (err) {
|
|
110
275
|
// If the router itself crashes, don't drop the request — run the agent.
|
|
111
276
|
// We still log it as a non-fatal status line so users notice.
|
|
112
|
-
|
|
113
|
-
...prev,
|
|
114
|
-
`(router fell back to agent: ${err instanceof Error ? err.message : err})`,
|
|
115
|
-
]);
|
|
277
|
+
appendStatus(`(router fell back to agent: ${err instanceof Error ? err.message : err})`);
|
|
116
278
|
}
|
|
117
|
-
bundle.agent.prompt(
|
|
279
|
+
bundle.agent.prompt(augmentedText).catch((err) => {
|
|
118
280
|
dispatch({ type: "error", message: err instanceof Error ? err.message : String(err) });
|
|
119
281
|
});
|
|
120
282
|
};
|
|
@@ -184,16 +346,85 @@ function ChatApp({ bundle, onExit }) {
|
|
|
184
346
|
});
|
|
185
347
|
}
|
|
186
348
|
};
|
|
349
|
+
// Ctrl-C semantics:
|
|
350
|
+
// • While the agent is busy: abort the turn. Stays in the app.
|
|
351
|
+
// • A second Ctrl-C within DOUBLE_TAP_MS exits, regardless of
|
|
352
|
+
// whether the previous press aborted or just landed a hint.
|
|
353
|
+
// "Twice real fast" is universally understood as "I want out."
|
|
354
|
+
// • While idle: first press posts a hint + arms the exit window.
|
|
355
|
+
//
|
|
356
|
+
// 1000ms is "real fast" — wide enough that intentional double-taps
|
|
357
|
+
// register, tight enough that mashing Ctrl-C twice while flustered
|
|
358
|
+
// doesn't accidentally exit. Tunable here if testers want it longer.
|
|
359
|
+
const exitTimerRef = useMemo(() => ({ deadline: 0 }), []);
|
|
187
360
|
const handleAbort = () => {
|
|
361
|
+
const DOUBLE_TAP_MS = 1000;
|
|
362
|
+
const now = Date.now();
|
|
363
|
+
if (now < exitTimerRef.deadline) {
|
|
364
|
+
onExit();
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
exitTimerRef.deadline = now + DOUBLE_TAP_MS;
|
|
188
368
|
if (busy) {
|
|
189
369
|
bundle.agent.abort();
|
|
190
370
|
dispatch({ type: "abort" });
|
|
371
|
+
// No hint here — the abort itself is the feedback. The
|
|
372
|
+
// exit window is set silently so a quick second tap still
|
|
373
|
+
// gets the user out without confirmation theater.
|
|
374
|
+
return;
|
|
191
375
|
}
|
|
192
|
-
|
|
193
|
-
onExit();
|
|
194
|
-
}
|
|
376
|
+
appendStatus("Press Ctrl-C again to exit.");
|
|
195
377
|
};
|
|
196
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { paddingX: 1, paddingY: 0, marginBottom: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "codebase
|
|
378
|
+
return (_jsxs(Box, { flexDirection: "column", children: [state.messages.length === 0 && !state.streaming ? (_jsx(Welcome, { modelName: bundle.model.name, source: bundle.source, cwd: bundle.toolContext.cwd, resumedFrom: bundle.resumedFrom })) : (_jsxs(Box, { paddingX: 1, paddingY: 0, marginBottom: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "codebase" }), _jsxs(Text, { dimColor: true, children: [" \u00B7 ", bundle.model.name, " Model"] })] })), _jsx(MessageList, { messages: state.messages, streaming: state.streaming, tools: state.tools }), compactionState.active ? _jsx(CompactionBanner, { state: compactionState }) : null, _jsx(ToolPanel, { tools: state.tools }), _jsx(TaskPanel, { tasks: tasks }), statusLines.length > 0 ? (_jsx(Box, { flexDirection: "column", paddingX: 1, marginBottom: 1, children: statusLines.map((line, i) => (_jsx(Text, { dimColor: true, children: line }, `${i}-${line.slice(0, 8)}`))) })) : null, _jsx(Status, { state: state, cwd: bundle.toolContext.cwd }), permRequest ? (_jsx(Permission, { request: permRequest, onRespond: (choice) => bundle.permissions.respond(permRequest.id, choice) })) : userQuery ? (_jsx(UserQueryView, { query: userQuery, onAnswer: (answer) => bundle.userQueries.respond(userQuery.id, answer), onCancel: () => bundle.userQueries.cancel(userQuery.id) })) : (_jsx(Input, { disabled: busy, onSubmit: handleSubmit, onAbort: handleAbort, commands: commandSuggestions, history: inputHistory, cwd: bundle.toolContext.cwd, suggestion: suggestion, onSuggestionDismiss: () => setSuggestion(null) }))] }));
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Run a one-shot `!command` and append its output to the status lines.
|
|
382
|
+
* This is intentionally divorced from the agent's shell tool — the
|
|
383
|
+
* agent's tool is for tool-use turns, this is a CLI escape so the user
|
|
384
|
+
* can `!git status` without spending a turn. Output is capped at 32 KB
|
|
385
|
+
* to keep the transcript from drowning.
|
|
386
|
+
*/
|
|
387
|
+
async function runShellEscape(command, cwd, emit) {
|
|
388
|
+
emit(`! ${command}`);
|
|
389
|
+
return new Promise((resolve) => {
|
|
390
|
+
const child = spawn(command, { shell: true, cwd, env: process.env });
|
|
391
|
+
let buffer = "";
|
|
392
|
+
const MAX = 32 * 1024;
|
|
393
|
+
const onChunk = (chunk) => {
|
|
394
|
+
if (buffer.length >= MAX)
|
|
395
|
+
return;
|
|
396
|
+
buffer += chunk.toString("utf8").slice(0, MAX - buffer.length);
|
|
397
|
+
};
|
|
398
|
+
child.stdout?.on("data", onChunk);
|
|
399
|
+
child.stderr?.on("data", onChunk);
|
|
400
|
+
child.on("close", (code) => {
|
|
401
|
+
const trimmed = buffer.trim();
|
|
402
|
+
if (trimmed.length === 0) {
|
|
403
|
+
emit(code === 0 ? "(no output)" : `(exit ${code})`);
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
const lines = trimmed.split("\n").slice(0, 60);
|
|
407
|
+
for (const line of lines)
|
|
408
|
+
emit(line);
|
|
409
|
+
if (code !== 0)
|
|
410
|
+
emit(`(exit ${code})`);
|
|
411
|
+
}
|
|
412
|
+
resolve();
|
|
413
|
+
});
|
|
414
|
+
child.on("error", (err) => {
|
|
415
|
+
emit(`! ${err.message}`);
|
|
416
|
+
resolve();
|
|
417
|
+
});
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
/** Extract the user-visible text from a content array (image messages). */
|
|
421
|
+
function extractUserText(content) {
|
|
422
|
+
if (!Array.isArray(content))
|
|
423
|
+
return "";
|
|
424
|
+
return content
|
|
425
|
+
.filter((b) => b?.type === "text")
|
|
426
|
+
.map((b) => b.text ?? "")
|
|
427
|
+
.join("");
|
|
197
428
|
}
|
|
198
429
|
/**
|
|
199
430
|
* Resolve a user's typed answer to one of the supplied options.
|
|
@@ -226,4 +457,23 @@ function ExitOnCtrlC({ onExit }) {
|
|
|
226
457
|
}, [onExit]);
|
|
227
458
|
return null;
|
|
228
459
|
}
|
|
460
|
+
/**
|
|
461
|
+
* Visible banner while the agent is summarising older turns into a
|
|
462
|
+
* compaction checkpoint. The work itself takes a few seconds on long
|
|
463
|
+
* sessions — silent before, looked like a hang. The banner re-renders
|
|
464
|
+
* its elapsed-seconds label every second so the user has a clear
|
|
465
|
+
* "still working" signal.
|
|
466
|
+
*/
|
|
467
|
+
function CompactionBanner({ state }) {
|
|
468
|
+
const [elapsed, setElapsed] = useState(0);
|
|
469
|
+
useEffect(() => {
|
|
470
|
+
if (!state.startedAt)
|
|
471
|
+
return;
|
|
472
|
+
const tick = () => setElapsed(Math.floor((Date.now() - (state.startedAt ?? Date.now())) / 1000));
|
|
473
|
+
tick();
|
|
474
|
+
const id = setInterval(tick, 1000);
|
|
475
|
+
return () => clearInterval(id);
|
|
476
|
+
}, [state.startedAt]);
|
|
477
|
+
return (_jsx(Box, { paddingX: 1, marginBottom: 0, children: _jsxs(Text, { color: "yellow", children: ["\u27F3 Compacting context (", state.messageCount, " messages", elapsed > 0 ? ` · ${elapsed}s` : "", ")\u2026"] }) }));
|
|
478
|
+
}
|
|
229
479
|
//# sourceMappingURL=App.js.map
|
package/dist/ui/App.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/ui/App.tsx"],"names":[],"mappings":"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"}
|
package/dist/ui/FirstRunSetup.js
CHANGED
|
@@ -3,6 +3,7 @@ import { Box, Text, useInput } from "ink";
|
|
|
3
3
|
import { useEffect, useMemo, useState } from "react";
|
|
4
4
|
import { CredentialsStore } from "../auth/credentials.js";
|
|
5
5
|
import { runOAuthLogin } from "../auth/flow.js";
|
|
6
|
+
import { PixelC } from "./PixelC.js";
|
|
6
7
|
const DEFAULT_AUTH_BASE = "https://codebase.design";
|
|
7
8
|
const PROVIDER_CHOICES = [
|
|
8
9
|
{ id: "anthropic", label: "Anthropic (Claude)", hint: "claude-sonnet-4 default", keyHint: "sk-ant-…" },
|
|
@@ -15,8 +16,13 @@ const PROVIDER_CHOICES = [
|
|
|
15
16
|
{ id: "xai", label: "xAI (Grok)", hint: "grok-4", keyHint: "xai-…" },
|
|
16
17
|
{ id: "cerebras", label: "Cerebras", hint: "fastest inference", keyHint: "" },
|
|
17
18
|
];
|
|
19
|
+
const MENU_OPTIONS = [
|
|
20
|
+
{ key: "oauth", label: "Login to Codebase", hint: "free credits · Codebase Auto model · curated skills" },
|
|
21
|
+
{ key: "byok", label: "Bring your own LLM key", hint: "paste an Anthropic / OpenAI / Groq / etc. key" },
|
|
22
|
+
{ key: "quit", label: "Quit", hint: "exit the wizard" },
|
|
23
|
+
];
|
|
18
24
|
export function FirstRunSetup({ onDone, onQuit, store, authBase = DEFAULT_AUTH_BASE }) {
|
|
19
|
-
const [mode, setMode] = useState({ kind: "menu" });
|
|
25
|
+
const [mode, setMode] = useState({ kind: "menu", cursor: 0 });
|
|
20
26
|
const [manualUrl, setManualUrl] = useState(undefined);
|
|
21
27
|
const credStore = useMemo(() => store ?? new CredentialsStore(), [store]);
|
|
22
28
|
useEffect(() => {
|
|
@@ -63,22 +69,48 @@ export function FirstRunSetup({ onDone, onQuit, store, authBase = DEFAULT_AUTH_B
|
|
|
63
69
|
return;
|
|
64
70
|
}
|
|
65
71
|
if (mode.kind === "menu") {
|
|
66
|
-
if (
|
|
67
|
-
setMode({ kind: "
|
|
72
|
+
if (key.upArrow || (key.shift && key.tab)) {
|
|
73
|
+
setMode({ kind: "menu", cursor: (mode.cursor - 1 + MENU_OPTIONS.length) % MENU_OPTIONS.length });
|
|
74
|
+
return;
|
|
68
75
|
}
|
|
69
|
-
|
|
70
|
-
setMode({ kind: "
|
|
76
|
+
if (key.downArrow || key.tab) {
|
|
77
|
+
setMode({ kind: "menu", cursor: (mode.cursor + 1) % MENU_OPTIONS.length });
|
|
78
|
+
return;
|
|
71
79
|
}
|
|
72
|
-
|
|
73
|
-
|
|
80
|
+
if (key.return) {
|
|
81
|
+
applyMenuChoice(MENU_OPTIONS[mode.cursor].key);
|
|
82
|
+
return;
|
|
74
83
|
}
|
|
84
|
+
// Number-key fast-path stays for muscle memory.
|
|
85
|
+
if (input === "1")
|
|
86
|
+
applyMenuChoice("oauth");
|
|
87
|
+
else if (input === "2")
|
|
88
|
+
applyMenuChoice("byok");
|
|
89
|
+
else if (input === "3" || input === "q")
|
|
90
|
+
applyMenuChoice("quit");
|
|
75
91
|
return;
|
|
76
92
|
}
|
|
77
93
|
if (mode.kind === "byok-provider") {
|
|
78
94
|
if (key.escape) {
|
|
79
|
-
setMode({ kind: "menu" });
|
|
95
|
+
setMode({ kind: "menu", cursor: 1 });
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
if (key.upArrow || (key.shift && key.tab)) {
|
|
99
|
+
setMode({
|
|
100
|
+
kind: "byok-provider",
|
|
101
|
+
cursor: (mode.cursor - 1 + PROVIDER_CHOICES.length) % PROVIDER_CHOICES.length,
|
|
102
|
+
});
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (key.downArrow || key.tab) {
|
|
106
|
+
setMode({ kind: "byok-provider", cursor: (mode.cursor + 1) % PROVIDER_CHOICES.length });
|
|
80
107
|
return;
|
|
81
108
|
}
|
|
109
|
+
if (key.return) {
|
|
110
|
+
setMode({ kind: "byok-key", provider: PROVIDER_CHOICES[mode.cursor], buffer: "" });
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
// Number-key fast-path stays.
|
|
82
114
|
const idx = Number.parseInt(input, 10) - 1;
|
|
83
115
|
if (Number.isInteger(idx) && idx >= 0 && idx < PROVIDER_CHOICES.length) {
|
|
84
116
|
setMode({ kind: "byok-key", provider: PROVIDER_CHOICES[idx], buffer: "" });
|
|
@@ -87,7 +119,7 @@ export function FirstRunSetup({ onDone, onQuit, store, authBase = DEFAULT_AUTH_B
|
|
|
87
119
|
}
|
|
88
120
|
if (mode.kind === "byok-key") {
|
|
89
121
|
if (key.escape) {
|
|
90
|
-
setMode({ kind: "byok-provider" });
|
|
122
|
+
setMode({ kind: "byok-provider", cursor: 0 });
|
|
91
123
|
return;
|
|
92
124
|
}
|
|
93
125
|
if (key.return) {
|
|
@@ -122,24 +154,44 @@ export function FirstRunSetup({ onDone, onQuit, store, authBase = DEFAULT_AUTH_B
|
|
|
122
154
|
}
|
|
123
155
|
if (mode.kind === "error") {
|
|
124
156
|
if (key.return || key.escape || input === " ") {
|
|
125
|
-
setMode({ kind: "menu" });
|
|
157
|
+
setMode({ kind: "menu", cursor: 0 });
|
|
126
158
|
}
|
|
127
159
|
}
|
|
128
160
|
}, { isActive: mode.kind !== "oauth-running" });
|
|
129
|
-
|
|
161
|
+
function applyMenuChoice(choice) {
|
|
162
|
+
if (choice === "oauth")
|
|
163
|
+
setMode({ kind: "oauth-running" });
|
|
164
|
+
else if (choice === "byok")
|
|
165
|
+
setMode({ kind: "byok-provider", cursor: 0 });
|
|
166
|
+
else
|
|
167
|
+
onQuit();
|
|
168
|
+
}
|
|
169
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 1, paddingY: 1, children: [_jsx(BrandHeader, {}), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { dimColor: true, children: "Pick how you want to power the agent. You can change this later via `codebase auth`." }) }), renderBody(mode, authBase, manualUrl)] }));
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Branded header — static pixel C + "codebase" wordmark.
|
|
173
|
+
*/
|
|
174
|
+
function BrandHeader() {
|
|
175
|
+
return (_jsxs(Box, { flexDirection: "row", marginBottom: 1, children: [_jsx(Box, { marginRight: 2, children: _jsx(PixelC, {}) }), _jsxs(Box, { flexDirection: "column", justifyContent: "center", children: [_jsx(Text, { bold: true, color: "cyan", children: "codebase" }), _jsx(Text, { dimColor: true, children: "AI coding agent \u00B7 CLI" })] })] }));
|
|
130
176
|
}
|
|
131
177
|
function renderBody(mode, authBase, manualUrl) {
|
|
132
178
|
if (mode.kind === "menu") {
|
|
133
|
-
return (_jsxs(Box, { flexDirection: "column", children: [
|
|
179
|
+
return (_jsxs(Box, { flexDirection: "column", children: [MENU_OPTIONS.map((opt, i) => {
|
|
180
|
+
const selected = i === mode.cursor;
|
|
181
|
+
return (_jsxs(Text, { children: [_jsx(Text, { color: selected ? "cyan" : "gray", children: selected ? "▸ " : " " }), _jsx(Text, { bold: selected, color: selected ? "white" : undefined, children: opt.label }), _jsx(Text, { dimColor: true, children: " — " + opt.hint })] }, opt.key));
|
|
182
|
+
}), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "\u2191\u2193 to move \u00B7 Enter to select \u00B7 1/2/3 fast-path \u00B7 Ctrl-C to quit" }) })] }));
|
|
134
183
|
}
|
|
135
184
|
if (mode.kind === "oauth-running") {
|
|
136
185
|
if (manualUrl) {
|
|
137
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: "yellow", children: "
|
|
186
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: "yellow", children: "Sign in to continue" }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: manualUrl.reason }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { bold: true, color: "cyan", children: osc8Link(manualUrl.url, "→ Click here to sign in (cmd-click in most terminals)") }) }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { dimColor: true, children: "If clicking didn't open a browser, copy this URL:" }), _jsx(Text, { dimColor: true, children: manualUrl.url })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Waiting for the browser to redirect back. (Ctrl-C to cancel.)" }) })] }));
|
|
138
187
|
}
|
|
139
188
|
return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { children: ["Opening ", _jsx(Text, { color: "cyan", children: authBase }), " in your browser\u2026"] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, children: "Complete sign-in in the browser tab. This window will continue automatically." }) })] }));
|
|
140
189
|
}
|
|
141
190
|
if (mode.kind === "byok-provider") {
|
|
142
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Pick a provider:" }), _jsx(Box, { flexDirection: "column",
|
|
191
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, children: "Pick a provider:" }), _jsx(Box, { flexDirection: "column", marginTop: 1, children: PROVIDER_CHOICES.map((p, i) => {
|
|
192
|
+
const selected = i === mode.cursor;
|
|
193
|
+
return (_jsxs(Text, { children: [_jsx(Text, { color: selected ? "cyan" : "gray", children: selected ? "▸ " : " " }), _jsx(Text, { bold: selected, color: selected ? "white" : undefined, children: p.label }), _jsx(Text, { dimColor: true, children: " — " + p.hint })] }, p.id));
|
|
194
|
+
}) }), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { dimColor: true, children: ["\u2191\u2193 to move \u00B7 Enter to select \u00B7 1\u2013", PROVIDER_CHOICES.length, " fast-path \u00B7 Esc to go back"] }) })] }));
|
|
143
195
|
}
|
|
144
196
|
if (mode.kind === "byok-key") {
|
|
145
197
|
const masked = "•".repeat(Math.min(mode.buffer.length, 40));
|