codebase-cli 2.0.0-pre.2 → 2.0.0-pre.20

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 (63) hide show
  1. package/dist/agent/agent.js +2 -0
  2. package/dist/agent/agent.js.map +1 -1
  3. package/dist/agent/config.js +76 -9
  4. package/dist/agent/config.js.map +1 -1
  5. package/dist/app-server/protocol.js +7 -0
  6. package/dist/app-server/protocol.js.map +1 -0
  7. package/dist/app-server/server.js +241 -0
  8. package/dist/app-server/server.js.map +1 -0
  9. package/dist/auth/flow.js +174 -41
  10. package/dist/auth/flow.js.map +1 -1
  11. package/dist/cli.js +47 -6
  12. package/dist/cli.js.map +1 -1
  13. package/dist/commands/builtins.js +88 -5
  14. package/dist/commands/builtins.js.map +1 -1
  15. package/dist/commands/registry.js +46 -1
  16. package/dist/commands/registry.js.map +1 -1
  17. package/dist/headless/run.js +1 -1
  18. package/dist/headless/run.js.map +1 -1
  19. package/dist/permissions/store.js +4 -0
  20. package/dist/permissions/store.js.map +1 -1
  21. package/dist/projects/cli.js +92 -0
  22. package/dist/projects/cli.js.map +1 -0
  23. package/dist/projects/client.js +120 -0
  24. package/dist/projects/client.js.map +1 -0
  25. package/dist/projects/types.js +2 -0
  26. package/dist/projects/types.js.map +1 -0
  27. package/dist/skills/platform-loader.js +133 -38
  28. package/dist/skills/platform-loader.js.map +1 -1
  29. package/dist/ui/App.js +122 -12
  30. package/dist/ui/App.js.map +1 -1
  31. package/dist/ui/FirstRunSetup.js +90 -15
  32. package/dist/ui/FirstRunSetup.js.map +1 -1
  33. package/dist/ui/Input.js +245 -13
  34. package/dist/ui/Input.js.map +1 -1
  35. package/dist/ui/Markdown.js +286 -0
  36. package/dist/ui/Markdown.js.map +1 -0
  37. package/dist/ui/Message.js +449 -25
  38. package/dist/ui/Message.js.map +1 -1
  39. package/dist/ui/MessageList.js +7 -2
  40. package/dist/ui/MessageList.js.map +1 -1
  41. package/dist/ui/Permission.js +43 -20
  42. package/dist/ui/Permission.js.map +1 -1
  43. package/dist/ui/PixelC.js +25 -0
  44. package/dist/ui/PixelC.js.map +1 -0
  45. package/dist/ui/Status.js +213 -7
  46. package/dist/ui/Status.js.map +1 -1
  47. package/dist/ui/Throbber.js +11 -7
  48. package/dist/ui/Throbber.js.map +1 -1
  49. package/dist/ui/Welcome.js +59 -0
  50. package/dist/ui/Welcome.js.map +1 -0
  51. package/dist/ui/attachments.js +68 -0
  52. package/dist/ui/attachments.js.map +1 -0
  53. package/dist/ui/debug-input.js +44 -0
  54. package/dist/ui/debug-input.js.map +1 -0
  55. package/dist/ui/highlight.js +324 -0
  56. package/dist/ui/highlight.js.map +1 -0
  57. package/dist/ui/history-store.js +60 -0
  58. package/dist/ui/history-store.js.map +1 -0
  59. package/dist/ui/path-complete.js +102 -0
  60. package/dist/ui/path-complete.js.map +1 -0
  61. package/dist/ui/terminal-restore.js +83 -0
  62. package/dist/ui/terminal-restore.js.map +1 -0
  63. package/package.json +3 -1
package/dist/auth/flow.js CHANGED
@@ -87,28 +87,151 @@ export function awaitCallback(server, expectedState, timeoutMs) {
87
87
  });
88
88
  }
89
89
  function renderResponse(res, ok, message) {
90
+ const title = ok ? "Signed in" : "Sign-in failed";
91
+ const accent = ok ? "#22c55e" : "#ef4444";
92
+ const subtitle = ok ? "You can close this tab." : "Return to your terminal for details.";
93
+ // Inline SVG logo + minimal CSS. No external deps so the page renders
94
+ // before any network even on the CLI's localhost-only callback host.
90
95
  const html = `<!doctype html>
91
- <html><head><meta charset="utf-8"><title>codebase</title></head>
92
- <body style="font-family:system-ui;padding:40px;max-width:560px;margin:auto;">
93
- <h1>${ok ? "" : "✗"} codebase</h1>
94
- <p>${message}</p>
95
- </body></html>`;
96
+ <html lang="en">
97
+ <head>
98
+ <meta charset="utf-8" />
99
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
100
+ <title>codebase · ${title}</title>
101
+ <style>
102
+ :root { color-scheme: light dark; }
103
+ * { box-sizing: border-box; }
104
+ html, body { margin: 0; padding: 0; }
105
+ body {
106
+ font: 15px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Inter, system-ui, sans-serif;
107
+ background: #0a0a0b;
108
+ color: #f1f1f3;
109
+ min-height: 100vh;
110
+ display: flex;
111
+ align-items: center;
112
+ justify-content: center;
113
+ padding: 24px;
114
+ }
115
+ @media (prefers-color-scheme: light) {
116
+ body { background: #fafafa; color: #0a0a0b; }
117
+ .card { background: #fff; border-color: #e5e5ea; box-shadow: 0 1px 2px rgba(0,0,0,0.04), 0 8px 24px rgba(0,0,0,0.06); }
118
+ .subtitle { color: #6b6b73; }
119
+ .hint { color: #6b6b73; }
120
+ }
121
+ .card {
122
+ max-width: 440px;
123
+ width: 100%;
124
+ padding: 40px 36px 32px;
125
+ border: 1px solid #1f1f23;
126
+ border-radius: 16px;
127
+ background: #131316;
128
+ box-shadow: 0 1px 2px rgba(0,0,0,0.4), 0 12px 40px rgba(0,0,0,0.4);
129
+ text-align: center;
130
+ }
131
+ .logo {
132
+ width: 64px;
133
+ height: 64px;
134
+ margin: 0 auto 24px;
135
+ display: block;
136
+ }
137
+ .logo rect { fill: currentColor; }
138
+ .icon {
139
+ width: 48px;
140
+ height: 48px;
141
+ margin: 0 auto 12px;
142
+ border-radius: 999px;
143
+ background: ${accent}22;
144
+ color: ${accent};
145
+ display: flex;
146
+ align-items: center;
147
+ justify-content: center;
148
+ font-size: 28px;
149
+ font-weight: 600;
150
+ }
151
+ h1 {
152
+ font-size: 22px;
153
+ font-weight: 600;
154
+ margin: 0 0 4px;
155
+ letter-spacing: -0.01em;
156
+ }
157
+ .subtitle {
158
+ color: #a3a3ab;
159
+ font-size: 14px;
160
+ margin: 0 0 24px;
161
+ }
162
+ .message {
163
+ background: rgba(255,255,255,0.04);
164
+ border: 1px solid rgba(255,255,255,0.06);
165
+ padding: 12px 14px;
166
+ border-radius: 8px;
167
+ font-size: 13px;
168
+ text-align: left;
169
+ white-space: pre-wrap;
170
+ }
171
+ @media (prefers-color-scheme: light) {
172
+ .message { background: #f5f5f7; border-color: #e5e5ea; }
173
+ }
174
+ .hint {
175
+ margin-top: 18px;
176
+ font-size: 12px;
177
+ color: #6b6b73;
178
+ }
179
+ .brand {
180
+ font-size: 12px;
181
+ color: #6b6b73;
182
+ letter-spacing: 0.02em;
183
+ text-transform: uppercase;
184
+ margin-bottom: 8px;
185
+ }
186
+ </style>
187
+ </head>
188
+ <body>
189
+ <div class="card">
190
+ <svg class="logo" viewBox="7 6 6 7" shape-rendering="crispEdges" aria-hidden="true">
191
+ <rect width="1" height="1" x="9" y="7" /><rect width="1" height="1" x="10" y="7" /><rect width="1" height="1" x="11" y="7" />
192
+ <rect width="1" height="1" x="8" y="8" /><rect width="1" height="1" x="8" y="9" /><rect width="1" height="1" x="8" y="10" />
193
+ <rect width="1" height="1" x="9" y="11" /><rect width="1" height="1" x="10" y="11" /><rect width="1" height="1" x="11" y="11" />
194
+ </svg>
195
+ <div class="brand">codebase</div>
196
+ <div class="icon" aria-hidden="true">${ok ? "✓" : "!"}</div>
197
+ <h1>${title}</h1>
198
+ <p class="subtitle">${subtitle}</p>
199
+ <div class="message">${escapeHtml(message)}</div>
200
+ <p class="hint">${ok ? "Your terminal is signed in via codebase.design." : "Try <code>codebase auth login</code> again, or check your terminal for the error."}</p>
201
+ </div>
202
+ </body>
203
+ </html>`;
96
204
  res.statusCode = ok ? 200 : 400;
97
205
  res.setHeader("Content-Type", "text/html; charset=utf-8");
206
+ res.setHeader("Cache-Control", "no-store");
98
207
  res.end(html);
99
208
  }
209
+ function escapeHtml(s) {
210
+ return s
211
+ .replace(/&/g, "&amp;")
212
+ .replace(/</g, "&lt;")
213
+ .replace(/>/g, "&gt;")
214
+ .replace(/"/g, "&quot;")
215
+ .replace(/'/g, "&#39;");
216
+ }
217
+ /**
218
+ * Token endpoints on codebase.design's web app expect JSON bodies —
219
+ * `app.js` only mounts `express.json()`, no `express.urlencoded()`.
220
+ * OAuth 2.0 RFC 6749 §4.1.3 says token endpoints MUST accept
221
+ * form-urlencoded; the web app is non-standard there but it's easier
222
+ * to send JSON from the CLI than to upstream a middleware change.
223
+ */
100
224
  export async function exchangeCode(config, params) {
101
- const body = new URLSearchParams({
102
- grant_type: "authorization_code",
103
- client_id: config.clientId,
104
- code: params.code,
105
- code_verifier: params.codeVerifier,
106
- redirect_uri: params.redirectUri,
107
- });
108
225
  const res = await fetch(config.tokenUrl, {
109
226
  method: "POST",
110
- headers: { "Content-Type": "application/x-www-form-urlencoded", Accept: "application/json" },
111
- body,
227
+ headers: { "Content-Type": "application/json", Accept: "application/json" },
228
+ body: JSON.stringify({
229
+ grant_type: "authorization_code",
230
+ client_id: config.clientId,
231
+ code: params.code,
232
+ code_verifier: params.codeVerifier,
233
+ redirect_uri: params.redirectUri,
234
+ }),
112
235
  });
113
236
  if (!res.ok) {
114
237
  const text = await res.text();
@@ -118,15 +241,14 @@ export async function exchangeCode(config, params) {
118
241
  return tokenToCredentials(json, config);
119
242
  }
120
243
  export async function refreshAccessToken(config, refreshToken) {
121
- const body = new URLSearchParams({
122
- grant_type: "refresh_token",
123
- client_id: config.clientId,
124
- refresh_token: refreshToken,
125
- });
126
244
  const res = await fetch(config.refreshUrl, {
127
245
  method: "POST",
128
- headers: { "Content-Type": "application/x-www-form-urlencoded", Accept: "application/json" },
129
- body,
246
+ headers: { "Content-Type": "application/json", Accept: "application/json" },
247
+ body: JSON.stringify({
248
+ grant_type: "refresh_token",
249
+ client_id: config.clientId,
250
+ refresh_token: refreshToken,
251
+ }),
130
252
  });
131
253
  if (!res.ok) {
132
254
  const text = await res.text();
@@ -138,12 +260,11 @@ export async function refreshAccessToken(config, refreshToken) {
138
260
  export async function revokeToken(config, accessToken) {
139
261
  if (!config.revokeUrl)
140
262
  return;
141
- const body = new URLSearchParams({ token: accessToken, client_id: config.clientId });
142
263
  try {
143
264
  await fetch(config.revokeUrl, {
144
265
  method: "POST",
145
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
146
- body,
266
+ headers: { "Content-Type": "application/json" },
267
+ body: JSON.stringify({ token: accessToken, client_id: config.clientId }),
147
268
  });
148
269
  }
149
270
  catch {
@@ -165,17 +286,10 @@ function tokenToCredentials(token, config) {
165
286
  source: "codebase",
166
287
  };
167
288
  }
168
- /**
169
- * Run the full browser OAuth flow:
170
- * 1. PKCE: generate verifier + challenge + state
171
- * 2. Bind a localhost HTTP server on a random port
172
- * 3. Open the authorization URL in the user's browser
173
- * 4. Wait for /callback, validate state
174
- * 5. Exchange the code for tokens
175
- *
176
- * Returns ready-to-save Credentials.
177
- */
178
- export async function runOAuthLogin(config, openBrowserFn = openBrowser) {
289
+ export async function runOAuthLogin(config, options = {}) {
290
+ // Backwards-compat: callers used to pass a bare openBrowserFn.
291
+ const opts = typeof options === "function" ? { openBrowserFn: options } : options;
292
+ const openBrowserFn = opts.openBrowserFn ?? openBrowser;
179
293
  const verifier = generateCodeVerifier();
180
294
  const challenge = generateCodeChallenge(verifier);
181
295
  const state = generateState();
@@ -188,17 +302,36 @@ export async function runOAuthLogin(config, openBrowserFn = openBrowser) {
188
302
  const redirectUri = `http://127.0.0.1:${port}/callback`;
189
303
  const authUrl = buildAuthorizationUrl(config, { codeChallenge: challenge, state, redirectUri });
190
304
  const callbackPromise = awaitCallback(server, state, config.timeoutMs ?? DEFAULT_TIMEOUT_MS);
191
- try {
192
- await openBrowserFn(authUrl);
305
+ if (isHeadlessSession()) {
306
+ opts.onManualUrl?.(authUrl, "headless session detected — open the URL manually in your browser");
193
307
  }
194
- catch (err) {
195
- server.close();
196
- throw new Error(`couldn't open browser automatically: ${err instanceof Error ? err.message : String(err)}. ` +
197
- `Open this URL manually:\n${authUrl}`);
308
+ else {
309
+ try {
310
+ await openBrowserFn(authUrl);
311
+ }
312
+ catch (err) {
313
+ // DON'T tear down the server: the user can still complete
314
+ // sign-in by opening the URL themselves. Surface the URL via
315
+ // onManualUrl and continue waiting for the callback.
316
+ opts.onManualUrl?.(authUrl, `auto-open failed: ${err instanceof Error ? err.message : String(err)}`);
317
+ }
198
318
  }
199
319
  const { code } = await callbackPromise;
200
320
  return exchangeCode(config, { code, codeVerifier: verifier, redirectUri });
201
321
  }
322
+ /**
323
+ * Heuristic: is this process running somewhere that obviously can't
324
+ * launch a GUI browser? We bail out of the auto-open attempt instead
325
+ * of letting xdg-open ENOENT or `open` hang on a headless macOS box.
326
+ */
327
+ function isHeadlessSession() {
328
+ const env = process.env;
329
+ if (env.SSH_CONNECTION || env.SSH_TTY || env.SSH_CLIENT)
330
+ return true;
331
+ if (process.platform === "linux" && !env.DISPLAY && !env.WAYLAND_DISPLAY)
332
+ return true;
333
+ return false;
334
+ }
202
335
  /** Best-effort browser open. Falls back to printing the URL on platforms we can't detect. */
203
336
  export async function openBrowser(url) {
204
337
  const command = browserOpenCommand(url);
@@ -1 +1 @@
1
- {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/auth/flow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../src/auth/flow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAA0D,MAAM,WAAW,CAAC;AAGjG,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE3G,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,sDAAsD;AAyBhG;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAmB,EAAE,MAA8B;IACxF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC7C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC9C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACzD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACvD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;IAC7D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;IACtD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACvB,CAAC;AAOD;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,aAAqB,EAAE,SAAiB;IACrF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,WAAW,GAAG,CAAC,KAAqB,EAAQ,EAAE;YACnD,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,CAAC,GAAU,EAAQ,EAAE;YACvC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,CAAC;QACb,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,IAAI,KAAK,CAAC,kCAAkC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1F,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAoB,EAAE,GAAmB,EAAE,EAAE;YAClE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;YACxD,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBAClC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;gBACrE,OAAO;YACR,CAAC;YACD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;gBAC7D,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,mBAAmB,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClF,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,UAAU,CAAC,IAAI,KAAK,CAAC,kCAAkC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC5F,OAAO;YACR,CAAC;YACD,MAAM,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACX,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,iDAAiD,CAAC,CAAC;gBAC9E,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,UAAU,CAAC,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;gBAC/D,OAAO;YACR,CAAC;YACD,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;gBAC/C,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,iDAAiD,CAAC,CAAC;gBAC9E,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,UAAU,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;gBACvD,OAAO;YACR,CAAC;YAED,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,oCAAoC,CAAC,CAAC;YAChE,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAC1B,UAAU,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAmB,EAAE,EAAW,EAAE,OAAe;IACxE,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAClD,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1C,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,sCAAsC,CAAC;IACzF,sEAAsE;IACtE,qEAAqE;IACrE,MAAM,IAAI,GAAG;;;;;oBAKM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eA2CV,MAAM;UACX,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wCAoDwB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;OAC/C,KAAK;uBACW,QAAQ;wBACP,UAAU,CAAC,OAAO,CAAC;mBACxB,EAAE,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,mFAAmF;;;QAGvJ,CAAC;IACR,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAChC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,0BAA0B,CAAC,CAAC;IAC1D,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IAC3C,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC;SACN,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,MAAmB,EACnB,MAAmE;IAEnE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;QACxC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE;QAC3E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACpB,UAAU,EAAE,oBAAoB;YAChC,SAAS,EAAE,MAAM,CAAC,QAAQ;YAC1B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,aAAa,EAAE,MAAM,CAAC,YAAY;YAClC,YAAY,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC;KACF,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CACd,0BAA0B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACjG,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAkB,CAAC;IACjD,OAAO,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAAmB,EAAE,YAAoB;IACjF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE;QAC1C,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE;QAC3E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACpB,UAAU,EAAE,eAAe;YAC3B,SAAS,EAAE,MAAM,CAAC,QAAQ;YAC1B,aAAa,EAAE,YAAY;SAC3B,CAAC;KACF,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,yBAAyB,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnH,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAkB,CAAC;IACjD,OAAO,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAmB,EAAE,WAAmB;IACzE,IAAI,CAAC,MAAM,CAAC,SAAS;QAAE,OAAO;IAC9B,IAAI,CAAC;QACJ,MAAM,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE;YAC7B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;SACxE,CAAC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACR,2DAA2D;IAC5D,CAAC;AACF,CAAC;AAWD,SAAS,kBAAkB,CAAC,KAAoB,EAAE,MAAmB;IACpE,IAAI,CAAC,KAAK,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAChF,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC9F,OAAO;QACN,OAAO,EAAE,CAAC;QACV,WAAW,EAAE,KAAK,CAAC,YAAY;QAC/B,YAAY,EAAE,KAAK,CAAC,aAAa;QACjC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS;QAC9E,MAAM;QACN,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE;QACtB,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK;QACxB,MAAM,EAAE,UAAU;KAClB,CAAC;AACH,CAAC;AA0BD,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,MAAmB,EACnB,UAAmE,EAAE;IAErE,+DAA+D;IAC/D,MAAM,IAAI,GAAyB,OAAO,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACxG,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,WAAW,CAAC;IAExD,MAAM,QAAQ,GAAG,oBAAoB,EAAE,CAAC;IACxC,MAAM,SAAS,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAE9B,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAI,MAAM,CAAC,OAAO,EAAkB,CAAC,IAAI,CAAC;IACpD,MAAM,WAAW,GAAG,oBAAoB,IAAI,WAAW,CAAC;IACxD,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAEhG,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,SAAS,IAAI,kBAAkB,CAAC,CAAC;IAE7F,IAAI,iBAAiB,EAAE,EAAE,CAAC;QACzB,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,mEAAmE,CAAC,CAAC;IAClG,CAAC;SAAM,CAAC;QACP,IAAI,CAAC;YACJ,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,0DAA0D;YAC1D,6DAA6D;YAC7D,qDAAqD;YACrD,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,qBAAqB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtG,CAAC;IACF,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,eAAe,CAAC;IACvC,OAAO,YAAY,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB;IACzB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACxB,IAAI,GAAG,CAAC,cAAc,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IACrE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IACtF,OAAO,KAAK,CAAC;AACd,CAAC;AAED,6FAA6F;AAC7F,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW;IAC5C,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACtC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,OAAO,GAAG,CAAC;IAC9D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,aAAa,OAAO,GAAG,CAAC;IACjE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,aAAa,OAAO,GAAG,CAAC;IACjE,OAAO,IAAI,CAAC;AACb,CAAC"}
package/dist/cli.js CHANGED
@@ -2,13 +2,29 @@
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { readFileSync } from "node:fs";
4
4
  import { render } from "ink";
5
+ import { runAppServer } from "./app-server/server.js";
5
6
  import { runAuthSubcommand } from "./auth/cli.js";
6
7
  import { loadDotEnv } from "./dotenv/loader.js";
7
8
  import { runHeadless } from "./headless/run.js";
9
+ import { runProjectSubcommand } from "./projects/cli.js";
8
10
  import { App } from "./ui/App.js";
11
+ import { installTerminalRestoreHandlers } from "./ui/terminal-restore.js";
9
12
  // Auto-load .env files before any subsystem reads process.env.
10
13
  loadDotEnv();
11
- const argv = process.argv.slice(2);
14
+ const VALID_OUTPUT_FORMATS = new Set(["text", "json", "stream-json"]);
15
+ const rawArgv = process.argv.slice(2);
16
+ // Strip flags consumed at the top-level dispatcher before subcommand
17
+ // matching. `--debug-input` is one of those: it sets an env var that
18
+ // the Input component picks up, then disappears from argv so it can't
19
+ // confuse downstream parsers.
20
+ const argv = [];
21
+ for (const a of rawArgv) {
22
+ if (a === "--debug-input") {
23
+ process.env.CODEBASE_DEBUG_INPUT = "1";
24
+ continue;
25
+ }
26
+ argv.push(a);
27
+ }
12
28
  if (argv[0] === "--version" || argv[0] === "-v") {
13
29
  process.stdout.write(`${readPackageVersion()}\n`);
14
30
  process.exit(0);
@@ -20,28 +36,42 @@ else if (argv[0] === "--help" || argv[0] === "-h") {
20
36
  else if (argv[0] === "auth") {
21
37
  runAuthSubcommand(argv).then((code) => process.exit(code));
22
38
  }
39
+ else if (argv[0] === "project" || argv[0] === "projects") {
40
+ runProjectSubcommand(argv).then((code) => process.exit(code));
41
+ }
42
+ else if (argv[0] === "app-server") {
43
+ // JSON-RPC-ish over stdio for IDE extensions. Auto-approve permissions
44
+ // by default — IDE clients render approval UIs themselves and we don't
45
+ // want the server to hang waiting on a TUI prompt no one's watching.
46
+ // The `--no-auto-approve` flag is for clients that DO implement their
47
+ // own approval flow via the `permission_request` event.
48
+ const noAutoApprove = argv.includes("--no-auto-approve");
49
+ const resume = argv.includes("--resume");
50
+ runAppServer({ autoApprove: !noAutoApprove, resume }).then((code) => process.exit(code));
51
+ }
23
52
  else if (argv[0] === "run") {
24
- const { prompt, outputFormat, error } = parseRunArgs(argv.slice(1));
53
+ const { prompt, outputFormat, autoApprove, error } = parseRunArgs(argv.slice(1));
25
54
  if (error) {
26
55
  process.stderr.write(`${error}\n`);
27
56
  process.exit(2);
28
57
  }
29
58
  if (!prompt) {
30
- process.stderr.write("usage: codebase run [--output text|json|stream-json] <prompt>\n");
59
+ process.stderr.write("usage: codebase run [--output text|json|stream-json] [--auto-approve] <prompt>\n");
31
60
  process.exit(2);
32
61
  }
33
- runHeadless({ prompt, outputFormat }).then((code) => process.exit(code));
62
+ runHeadless({ prompt, outputFormat, autoApprove }).then((code) => process.exit(code));
34
63
  }
35
64
  else {
36
65
  const instance = render(_jsx(App, {}));
66
+ installTerminalRestoreHandlers(instance);
37
67
  instance.waitUntilExit().catch(() => {
38
68
  process.exit(1);
39
69
  });
40
70
  }
41
- const VALID_OUTPUT_FORMATS = new Set(["text", "json", "stream-json"]);
42
71
  function parseRunArgs(args) {
43
72
  const remaining = [];
44
73
  let outputFormat;
74
+ let autoApprove = false;
45
75
  for (let i = 0; i < args.length; i++) {
46
76
  const a = args[i];
47
77
  if (a === "--output" || a === "-o") {
@@ -61,10 +91,14 @@ function parseRunArgs(args) {
61
91
  outputFormat = value;
62
92
  continue;
63
93
  }
94
+ if (a === "--auto-approve" || a === "--yes" || a === "-y") {
95
+ autoApprove = true;
96
+ continue;
97
+ }
64
98
  remaining.push(a);
65
99
  }
66
100
  const prompt = remaining.join(" ").trim();
67
- return { prompt: prompt || undefined, outputFormat };
101
+ return { prompt: prompt || undefined, outputFormat, autoApprove };
68
102
  }
69
103
  function readPackageVersion() {
70
104
  // dist/cli.js → ../package.json. Works for tsc-emitted output; if
@@ -93,9 +127,16 @@ function printHelp() {
93
127
  " codebase auth status show current sign-in",
94
128
  " codebase auth refresh force-refresh the access token",
95
129
  " codebase auth <cbk_xxx> save a manual API key (for SSH / headless)",
130
+ " codebase project list list your projects on codebase.design",
131
+ " codebase project pull <id> download a project as a ZIP",
132
+ " codebase app-server JSON-RPC server on stdio (for IDE extensions)",
96
133
  " codebase --version print version and exit",
97
134
  " codebase --help show this message",
98
135
  "",
136
+ "Diagnostics:",
137
+ " --debug-input log every keystroke to ~/.codebase/logs/input.log",
138
+ " (use when reporting a keyboard/terminal issue)",
139
+ "",
99
140
  "More: https://github.com/codebase-foundation/codebase-cli",
100
141
  "",
101
142
  ].join("\n"));
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.tsx"],"names":[],"mappings":"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"}
@@ -4,15 +4,22 @@ import { homedir } from "node:os";
4
4
  import { join } from "node:path";
5
5
  import { CredentialsStore } from "../auth/credentials.js";
6
6
  import { copyToClipboard, extractLastCodeBlock } from "../clipboard/copy.js";
7
+ import { NotAuthenticatedError, ProjectClient, ProjectClientError } from "../projects/client.js";
7
8
  const help = {
8
9
  name: "help",
9
- description: "List available slash commands.",
10
+ description: "List available slash commands and keyboard shortcuts.",
10
11
  handler: (_args, ctx) => {
11
- const lines = ["available slash commands:"];
12
+ const lines = [];
13
+ lines.push("Keyboard shortcuts:");
14
+ lines.push(" / slash-command autocomplete (Tab to complete, ↑↓ to choose)");
15
+ lines.push(" !cmd run a shell command directly (e.g. !git status)");
16
+ lines.push(" @path inline a file's contents into the next prompt");
17
+ lines.push(" ↑/↓ recall prior prompts (at line start)");
18
+ lines.push(" \\<Enter> insert a newline instead of submitting");
19
+ lines.push(" Ctrl-C cancel turn (busy) · twice to exit (idle)");
20
+ lines.push("");
21
+ lines.push("Slash commands:");
12
22
  const reg = ctx.registry;
13
- // builtins() is built before registry is constructed, so the registry
14
- // reference is injected via ctx by the App. If absent (e.g. in tests),
15
- // we print just this message.
16
23
  if (reg) {
17
24
  for (const cmd of reg.list()) {
18
25
  const aliasPart = cmd.aliases?.length ? ` (${cmd.aliases.map((a) => `/${a}`).join(", ")})` : "";
@@ -395,6 +402,48 @@ const init = {
395
402
  return { handled: true };
396
403
  },
397
404
  };
405
+ const projects = {
406
+ name: "projects",
407
+ aliases: ["project"],
408
+ description: "List your projects from codebase.design (requires sign-in via `codebase auth login`).",
409
+ handler: async (_args, ctx) => {
410
+ const client = new ProjectClient();
411
+ if (!client.hasCredentials()) {
412
+ ctx.emit("not signed in. Run `codebase auth login` from a fresh terminal, then come back. " +
413
+ "Env-var providers (ANTHROPIC_API_KEY etc.) work fine for inference but the projects " +
414
+ "endpoint is gated on a codebase.design account.");
415
+ return { handled: true };
416
+ }
417
+ try {
418
+ const list = await client.list();
419
+ if (list.length === 0) {
420
+ ctx.emit("(no projects yet — build one at https://codebase.design)");
421
+ return { handled: true };
422
+ }
423
+ const lines = [`${list.length} project${list.length === 1 ? "" : "s"} on your account:`, ""];
424
+ for (const p of list) {
425
+ const tag = p.source === "storage-only" ? " [storage]" : "";
426
+ const date = p.publishedAt ? ` · ${p.publishedAt.slice(0, 10)}` : "";
427
+ lines.push(` ${p.id} ${p.title ?? "(untitled)"}${tag}${date}`);
428
+ }
429
+ lines.push("");
430
+ lines.push("pull one with: codebase project pull <id>");
431
+ ctx.emit(lines.join("\n"));
432
+ }
433
+ catch (err) {
434
+ if (err instanceof NotAuthenticatedError) {
435
+ ctx.emit(err.message);
436
+ }
437
+ else if (err instanceof ProjectClientError) {
438
+ ctx.emit(`/projects failed: ${err.message}`);
439
+ }
440
+ else {
441
+ ctx.emit(`/projects failed: ${err instanceof Error ? err.message : String(err)}`);
442
+ }
443
+ }
444
+ return { handled: true };
445
+ },
446
+ };
398
447
  const mcp = {
399
448
  name: "mcp",
400
449
  description: "Manage MCP (Model Context Protocol) servers — placeholder until Phase 9 lands.",
@@ -406,6 +455,37 @@ const mcp = {
406
455
  return { handled: true };
407
456
  },
408
457
  };
458
+ const redo = {
459
+ name: "redo",
460
+ aliases: ["retry"],
461
+ description: "Resend the last user prompt to the agent (e.g. after an error or aborted turn).",
462
+ handler: (_args, ctx) => {
463
+ const lastUser = [...ctx.state.messages].reverse().find((m) => m.role === "user");
464
+ if (!lastUser) {
465
+ ctx.emit("nothing to redo — no prior user prompts.");
466
+ return { handled: true };
467
+ }
468
+ const text = typeof lastUser.content === "string" ? lastUser.content : "";
469
+ if (!text) {
470
+ ctx.emit("can't redo — the last user message had non-text content.");
471
+ return { handled: true };
472
+ }
473
+ ctx.emit(`(redo) ${text.slice(0, 80)}${text.length > 80 ? "…" : ""}`);
474
+ void ctx.bundle.agent.prompt(text).catch(() => undefined);
475
+ return { handled: true };
476
+ },
477
+ };
478
+ const pwd = {
479
+ name: "pwd",
480
+ aliases: ["cwd"],
481
+ description: "Print the current working directory and copy it to the clipboard.",
482
+ handler: async (_args, ctx) => {
483
+ const cwd = ctx.bundle.toolContext.cwd;
484
+ const copied = await copyToClipboard(cwd).catch(() => false);
485
+ ctx.emit(copied ? `${cwd}\n(copied to clipboard)` : cwd);
486
+ return { handled: true };
487
+ },
488
+ };
409
489
  export const BUILTIN_COMMANDS = [
410
490
  help,
411
491
  clear,
@@ -424,7 +504,10 @@ export const BUILTIN_COMMANDS = [
424
504
  logout,
425
505
  resume,
426
506
  init,
507
+ projects,
427
508
  mcp,
509
+ pwd,
510
+ redo,
428
511
  exit,
429
512
  ];
430
513
  //# sourceMappingURL=builtins.js.map