Commit Graph
3508 Commits
Author SHA1 Message Date
Pranit e71a663b95 Merge pull request #1462 from vercel-labs/prepare-v0.0.15
Prepare v0.0.15 release
2026-10-26 16:20:02 -04:00
Pranit a13511634f Prepare v0.0.15 release 2026-10-26 16:17:21 -04:00
Pranit de8e919056 Merge pull request #1460 from vercel-labs/esteban/mcp-menu-sign-in-link
Link a waiting sign-in in one line on the server screen
2026-10-26 16:16:02 -04:00
Esteban Suarez 040d5bbbf2 Link a waiting sign-in in one line on the server screen
While a sign-in waits, the server screen in /mcp now reads "Didn't open?
Open the sign-in page." with the label linking the whole address, as the
transcript does since the sign-in links change. A long address no longer
fills the panel. An address that can't be a link target, or a screen too
narrow for the label, still shows the whole address. The transcript and
the screen share the label from menu.sign_in_link_label.
2026-10-26 11:18:56 -03:00
Pranit f0732a02c3 Merge pull request #1457 from vercel-labs/fazxes/reconnect-dropped-mcp-connections
Reconnect when an MCP server drops an idle connection
2026-10-25 22:38:54 -04:00
Pranit a97f9d9e2f Reconnect when an MCP server drops an idle connection
- An MCP tool call over HTTP after the server dropped an idle connection now goes out on a new connection, instead of failing with "the server went away" on every call until fx restarts.
- Renewing an MCP login after the sign-in server dropped an idle connection now goes through, instead of failing with "the sign-in server didn't answer" until fx restarts.
- A connection the server closed cleanly while idle is replaced before the call is sent, so the call no longer fails once with "the tool may have run".
- Connections unused for more than a minute are replaced instead of reused, so a call after the network silently dropped one no longer waits out its timeout.
- A request whose send fails goes out once more on a new connection. A request that was fully sent is still never sent twice.
2026-10-25 21:37:17 -04:00
Pranit a2e11d98f6 Merge pull request #1453 from vercel-labs/fazxes/link-sign-in-addresses
Link sign-in addresses instead of printing them
2026-10-24 23:00:30 -04:00
Pranit 0840784f9e Read the sign-in driver's addresses from their links
The repeated-login driver read the sign-in address the transcript printed.
The transcript now links it, so the driver records the shell's output and
reads each link's target instead.
2026-10-24 20:07:29 -04:00
Pranit 2d61cc038d Link sign-in addresses instead of printing them
A typed /mcp login and the Vercel sign-in picker printed the whole sign-in
address. Both now show a few underlined words whose OSC 8 link is the
address: "Open the sign-in page" for MCP and "Authorize with Vercel", the
way Codex and Grok already link theirs. Notices underline a link on every
row it wraps onto. An address that can't be a link target is still printed
so it can be copied.
2026-10-24 19:25:50 -04:00
Pranit 7d854a42c6 Merge pull request #1452 from vercel-labs/fazxes/effort-menu
Add /effort to choose the reasoning effort
2026-10-24 14:33:52 -04:00
Pranit fefb9d9a51 Merge pull request #1444 from vercel-labs/fazxes/restart-only-changed-mcp-servers
Restart only the MCP servers a config change affects
2026-10-24 14:31:27 -04:00
Pranit 04a5e3af6a Add /effort to choose the reasoning effort
- `/effort` opens a menu of the current model's reasoning effort levels with the one in use marked. ↑↓ moves, Enter applies the highlighted level, and Esc closes it.
- `/effort <level>` applies a level without the menu, and `/effort default` goes back to the model's default.
- Tab after `/effort` opens a level column under the prompt, as Tab after `/model` opens the model column. ↑↓ previews the level in the status line, typing filters the list, Tab fills in the highlighted level, and Enter applies it.
- A new level is saved like a level chosen in `/settings`, and fx prints `Reasoning effort set to <level> for <model>`.
- During a response, the line reads `Next turn will use reasoning effort <level> for <model>`. The running turn keeps its level.
- A model without levels, a level the model doesn't offer, or a malformed level prints a notice and leaves the effort unchanged. If the model list is still loading, the notice asks to try again.
- In a short terminal, the menu leaves the end of the conversation in view and scrolls.
- `/model` still asks for the effort after a model is chosen.
- `/help` lists `/effort` with the model commands.
2026-10-24 13:28:03 -04:00
Pranit 2327e3cb8e Merge pull request #1445 from vercel-labs/fazxes/permissions-panel
Show /permissions in a footer panel
2026-10-23 22:26:36 -04:00
Pranit 5f9aed6634 Merge pull request #1441 from vercel-labs/fazxes/status-session-panel
Show the session ID in a /status panel
2026-10-23 22:26:05 -04:00
Pranit 45abf082ae Merge pull request #1446 from vercel-labs/fazxes/ask-twenty-questions
Allow up to 20 questions in one ask_user_question call
2026-10-23 22:23:12 -04:00
Pranit ea13c33573 Model sign-ins across in-place MCP reloads
The SignIn model and its driver still had every reload replace the host and
end the sign-in. A reload now keeps a sign-in when it leaves that server
alone and ends it when it removes or changes the server; the host swap
remains for reloads the loader can't apply in place. KeptSignInGoesOn checks
the first, with a planted bug for the old behavior.
2026-10-23 20:20:18 -04:00
Pranit 28cf53b548 Allow up to 20 questions in one ask_user_question call
- The model can ask up to 20 questions in one ask_user_question call, so a related set of questions opens as one prompt instead of several prompts of 4.
- The tool schema and description tell the model the new limit.
- A call with more than 20 questions is rejected with "provide 1 to 20 questions", and no prompt opens.
- Resumed sessions show every answer from a batch of up to 20 questions.
2026-10-23 20:16:15 -04:00
Pranit 915d439bd2 Show /permissions in a footer panel
Running /permissions with no arguments printed the mode, configured
rules, session grants, and saved rules to the transcript. It now opens a
read-only panel in the footer, like /status, and prints nothing. Each
configured rule, session grant, and saved rule is a bullet, and saved
rules show the ID that /permissions revoke takes. The panel updates when
an approval adds a grant. Subcommands such as /permissions auto and
/permissions remember still confirm in the transcript.

The /status panel becomes a shared info panel that both commands use.
Tests that ran /permissions only to put text in the transcript now run
/allowlist.
2026-10-23 19:29:02 -04:00
Pranit 13ff1ab627 Keep the MCP catalog generation 32-bit for wasm32
wasm32 has no 64-bit atomics, so the SDK's WASM builds failed to compile
the catalog's generation counter. Bindings only compare it for equality,
so 32 bits is enough.
2026-10-23 19:28:46 -04:00
Pranit b31b528760 Check the transcript's last row under a short /status panel
With FX_RECORD set, fx prints a recording notice under the banner, so a
12-row terminal has no room left for the banner above the panel. The
tests now check that the last row of the transcript stays in view.
2026-10-23 19:24:29 -04:00
Pranit 333d476456 Restart only the MCP servers a config change affects
An /mcp add, remove, approve, or reject used to build a new MCP host and
restart every server. The runtime now applies the change in place through
Engine.reload: servers with the same config keep their process, connection,
sign-in, and calls; removed or changed servers stop and their calls end;
a changed or re-added server starts once its own old process has exited.

The engine copies each server's environment and compares it by content, so
reading the same config again no longer looks like a change.
2026-10-23 19:10:17 -04:00
Pranit 20331680eb Keep the transcript in view under the /status panel
In a short terminal the panel could take every row but three and cover
the turn in progress. Closing it redrew the rows it had covered, which a
terminal could already have scrolled into history, so they showed twice.
Output written while the panel was open could lose them instead.

The panel now gets the rows an inline picker gets, which leave the end of
the transcript in view, and scrolls the rest with the arrow keys. The E2E
reader scrolls a panel that does not fit to read every line.
2026-10-23 18:54:07 -04:00
Pranit 8a964aca1d Show the session ID in a /status panel
- /status opens a panel in the footer instead of writing a notice to the transcript. Esc or Enter closes it and leaves nothing behind.
- The panel's first line shows the open session's ID and whether it is saved yet, so it can be resumed with fx --resume <id>. A shell that can't save sessions shows none.
- The open panel updates when a running turn saves the session or finishes.
- When the panel doesn't fit, the arrow keys scroll it and the hint says so. Long values such as the workspace path wrap instead of being cut off.
- When profile settings can't be read, the panel shows a Settings line and leaves out auth, instead of printing an error with no status.
- A fork made before the first prompt now counts as saved: /status shows it as saved, and the exit line prints its resume command.
2026-10-23 15:59:13 -04:00
Pranit 314c01479c Merge pull request #1435 from vercel-labs/esteban/reanchor-variation-selector-glyphs
Keep cells aligned after glyphs with a variation selector
2026-10-23 14:02:33 -04:00
Pranit 3f312edcd6 Merge pull request #1417 from vercel-labs/esteban/mcp-status-line-startup
Show the MCP attention count once servers start and clear it after a prompt
2026-10-23 14:02:03 -04:00
Pranit 2f8503970d Merge pull request #1416 from vercel-labs/esteban/mcp-menu-attention-group
Group the /mcp list and tidy each server screen
2026-10-23 14:01:21 -04:00
Pranit 6ba6b47621 Merge pull request #1437 from vercel-labs/fazxes/mcp-oversized-replies
Explain oversized MCP replies and stop fetching them again
2026-10-23 13:55:26 -04:00
Pranit 6d6a4e271f Merge pull request #1436 from vercel-labs/fazxes/mcp-logout-everywhere
Keep MCP logouts in effect across terminals
2026-10-23 13:55:19 -04:00
Pranit 7a64a790c2 Merge pull request #1421 from vercel-labs/fazxes/withhold-earlier-images
Keep earlier images from blocking new messages
2026-10-23 13:44:51 -04:00
Pranit e38fa77e8d Describe the oversized call flag for HTTP answers too
The flag on a call's end covers an HTTP answer over the message limit as
well as a stdio line, so its comments now say so.
2026-10-23 12:20:44 -04:00
Pranit 80b2bbecfb Explain oversized MCP replies and stop fetching them again
- When a stdio MCP server replies with more than 16 MiB, the model is told the reply was too large and fx restarted the server, instead of "the server went away".
- When an HTTP MCP server replies with more than 16 MiB, fx ends the call at once and tells the model the reply was too large, instead of "the server went away".
- fx no longer resumes an HTTP stream (2025 protocol) to fetch an oversized reply again. Before, it downloaded the same reply up to two more times.
- fx no longer requests an oversized tool list again from an HTTP server on the 2026 protocol.
- The debug trace logs each dropped reply with the server, transport, and reason.
2026-10-23 12:10:32 -04:00
Pranit edb1505f8b Keep MCP logouts in effect across terminals
- /mcp logout in a shell now also revokes the login another terminal saved after the shell started. Before, that login stayed valid at the server.
- After another terminal logs out of an MCP server, a shell that still holds the login revokes it the next time it would renew it, instead of renewing it and saving it back.
2026-10-23 12:06:10 -04:00
Esteban Suarez a1f264f3d6 Merge branch 'esteban/mcp-status-line-startup' into esteban/reanchor-variation-selector-glyphs 2026-10-23 12:58:59 -03:00
Esteban Suarez 17e24aa347 Merge branch 'esteban/mcp-menu-attention-group' into esteban/mcp-status-line-startup 2026-10-23 12:58:56 -03:00
Esteban Suarez dc6498d489 Choose yes or no with the arrows on an in-place question
On a Remove or Reject asked on its row, left chooses yes and right
chooses no; the chosen answer is bright. Enter on no goes back like Esc,
and a new question starts on yes. An approval's own screen keeps its
keys.
2026-10-23 12:58:45 -03:00
Pranit ae687a4879 Merge pull request #1425 from vercel-labs/fazxes/encode-inline-fuzz-seeds
Encode inline fuzz seeds the way the tests read them
2026-10-23 11:56:30 -04:00
Pranit 3009e80783 Merge pull request #1424 from vercel-labs/fazxes/skip-substitutions-in-command-labels
Read command substitutions in assignment values as one word
2026-10-23 11:56:16 -04:00
Pranit f8a7917ef1 Merge pull request #1430 from vercel-labs/fazxes/stop-processes-before-force-kill
Stop a command's processes before force-killing them
2026-10-23 11:56:04 -04:00
Pranit 683f84a0df Merge pull request #1428 from vercel-labs/fazxes/skip-next-version-check-in-sdk-tests
Keep the Next package test off the npm registry
2026-10-23 11:55:53 -04:00
Pranit be3805bc79 Merge pull request #1422 from vercel-labs/fazxes/show-mremap-to-thread-sanitizer
Let ThreadSanitizer see pages that mremap releases
2026-10-23 11:55:42 -04:00
Pranit 2fe8583744 Merge pull request #1419 from vercel-labs/fazxes/review-git-remote-helpers
Review git fetch from repositories that name a remote helper
2026-10-23 11:55:31 -04:00
Pranit 131b41e1bc Merge pull request #1418 from vercel-labs/fazxes/allow-slow-conversion-notice
Let resumed v1 session tests accept the slow conversion notice
2026-10-23 11:55:20 -04:00
Esteban Suarez 5333e72340 Merge branch 'esteban/mcp-status-line-startup' into esteban/reanchor-variation-selector-glyphs 2026-10-23 12:49:20 -03:00
Esteban Suarez 6edb47a6a7 Merge branch 'esteban/mcp-menu-attention-group' into esteban/mcp-status-line-startup 2026-10-23 12:49:16 -03:00
Esteban Suarez 9d444936da Show yes and no beside an in-place question
Remove and Reject now end their question with a bright "yes" for Enter
and a dim "no" for Esc, on the same row. The hint line keeps the server
screen's hints instead of switching to the answers.
2026-10-23 12:49:11 -03:00
Esteban Suarez 51aa67948c Merge branch 'esteban/mcp-status-line-startup' into esteban/reanchor-variation-selector-glyphs 2026-10-23 12:47:21 -03:00
Esteban Suarez ba9dd8c911 Merge branch 'esteban/mcp-menu-attention-group' into esteban/mcp-status-line-startup 2026-10-23 12:47:18 -03:00
Esteban Suarez 3d6af76628 Ask Remove and Reject on the choice's own row
The question replaces the choice's row on the server's screen, so it
shows where Enter was pressed. The hint line only says how to answer.
The row draws the name terminal safe, so the hint line no longer needs
its own guard for names that aren't plain ASCII.
2026-10-23 12:47:07 -03:00
Esteban Suarez 95e6c8fd8c Re-anchor the cursor after glyphs with a variation selector
Terminals disagree on how wide a glyph with VS15 or VS16 is: Ghostty draws
U+26A1 U+FE0E in one cell, while fx and tmux use two. Cells painted after
it landed one column off, so clearing the status line's MCP notice left
its first character behind in Ghostty.

The diff now moves to an absolute column after such a glyph and erases a
two-cell one before drawing it, so later cells and repaints land where the
grid puts them.
2026-10-23 12:37:49 -03:00
Pranit a9ffecc223 Merge remote-tracking branch 'origin/main' into fazxes/withhold-earlier-images 2026-10-23 11:35:25 -04:00