2384 Commits
Author SHA1 Message Date
Pranit dc870f3a91 Merge pull request #1004 from vercel-labs/fazxes/fix-pgso-corpus-count
Fix PGSO corpus scenario count
v0.0.11
2026-09-21 18:56:51 -04:00
Pranit 0b0543d86b Merge pull request #977 from vercel-labs/fazxes/spill-diff-snapshots
Spill committed edit snapshots into the session result store
2026-09-21 18:41:17 -04:00
Pranit c87d1247f1 Fix PGSO corpus scenario count 2026-09-21 18:20:23 -04:00
Pranit b8f73c1c33 Harden spilled diff recovery
Bind spilled diff artifacts to their tool calls and validate their size and structure before recovery promotion.

Preserve exact recovered history while canonicalizing checkpoint-only storage projections.
2026-09-21 18:06:20 -04:00
Pranit ca14c38df9 Merge pull request #1002 from vercel-labs/prepare-v0.0.11
Prepare v0.0.11 release
2026-09-21 17:41:58 -04:00
Pranit ee3a1d2bd4 Prepare v0.0.11 release 2026-09-21 17:32:37 -04:00
Pranit 2b9687b77f Merge pull request #997 from vercel-labs/fazxes/default-grok-4-7
Use Grok 4.7 by default
2026-09-21 17:09:55 -04:00
Pranit cb51f1ebc6 Merge main into spill diff snapshots 2026-09-21 16:38:11 -04:00
Pranit 64e0a88f01 Keep spilled edit artifacts canonical
Keep durable diff snapshots handle-backed across imports, native seeds, and recovered session copies.

Reject conflicting presentation sources and authenticate copied artifacts by family and content.
2026-09-21 16:28:40 -04:00
Pranit 6063c32524 Disable Fast for the Grok default
Start unconfigured Grok 4.7 sessions at standard speed and keep Fast-capable override coverage explicit.
2026-09-21 16:02:09 -04:00
Pranit 6a5e8bb689 Match Grok 4.7 catalog capabilities
Keep the default-model E2E metadata aligned with the production catalog.
2026-09-21 15:00:23 -04:00
Pranit a83589f990 Update default model expectations
Align default-model coverage with Grok 4.7 and keep the narrow statusline assertion truncation-safe.
2026-09-21 14:08:33 -04:00
Pranit e50c88c8bd Copy spilled edit artifacts into recovered sessions 2026-09-21 13:27:27 -04:00
Pranit 11157e7f8f Use Grok 4.7 by default
Use Grok 4.7 for requests without a model override.
2026-09-21 13:24:14 -04:00
Pranit a67aec754f Spill imported edit snapshots before publishing history 2026-09-21 12:36:56 -04:00
Pranit 571b65b98a Merge pull request #918 from samcx/codex/slack-cli-install
Install the Slack workspace bot through the CLI
2026-09-21 12:36:46 -04:00
Pranit 40dd337bfc Merge pull request #986 from vercel-labs/fazxes/resume-observed-shell
Restore shell session command labels when resuming in a moved workspace
2026-09-21 11:06:14 -04:00
Pranit ae325668a8 Pin moved-workspace session labels with a modern-format fixture
The reclip fixture wrote a legacy schema-2 session file, but the legacy
loader never reads origin_workspace_root: it sets origin equal to the
current workspace, so the diverging-roots condition the test describes
never reached the resume path. A mutation restoring the old root
blanking passed every assertion.

Rewrite the fixture in the modern durable format: schema-4 session
metadata with distinct origin and current roots, content-addressed
result artifacts, and events.jsonl conversation frames. The observe-row
assertions now exercise the moved-workspace path for real; the same
mutation fails with the raw session id back on screen.
2026-09-20 22:49:50 -04:00
Pranit 6ba554f21e Correct resume session-label fixture counts and test title
The moved-workspace fixture's run and observe results carry session
status JSON, so their byte counts match the payload length. The new
resume projection test proves the sink resolves labels seeded from the
live root; its title now says that instead of overstating coverage of
the seeding decision, which the end-to-end moved-workspace test owns.
2026-09-20 22:49:50 -04:00
Pranit 70b841c263 Restore shell session command labels when resuming in a moved workspace
Resume seeded historical session labels with a blanked workspace root
whenever the session's origin and current workspaces differed. The
two-condition guard in the run-command formatter then withheld every
absolute-path label, so shell interact and stop rows fell back to the raw
session id (Observed shell-42) even though the launch command was
recorded and the Ran rows beside them rendered it in full.

Seed the labels map with the app's live workspace root like the sibling
replay paths already do. Commands under the live root abbreviate the
same way as Ran rows; commands elsewhere show raw instead of dropping
to the raw session id, matching the reclip behavior the moved-workspace
resume already ships.
2026-09-20 22:49:50 -04:00
Pranit 707afac508 Merge pull request #989 from vercel-labs/fazxes/libfx-gaps-08-10
Add libfx liveness, steering, and provider tools
2026-09-20 18:45:48 -04:00
Pranit 04b8ad8dfc Preserve native steering event order 2026-09-20 18:06:45 -04:00
Pranit 8ee9d93097 Add libfx liveness, steering, and provider tools
Expose bounded transport activity, mid-turn steering, and Gateway-executed web search through the JavaScript agent API.
2026-09-20 17:11:59 -04:00
Pranit 4c99a4b2ea Merge pull request #988 from vercel-labs/fazxes/libfx-reserved-names
Let host tools use the reserved write_file and edit_file names
2026-09-20 16:36:54 -04:00
Pranit 791c5aa799 Let host tools use the reserved write_file and edit_file names
A host-defined tool named `write_file` or `edit_file` no longer fails at call
time with "unsupported file mutation tool". The kernel routes by the
registered executor kind instead of the public name: a host tool under either
name runs the host's `execute()` through the ordinary registered-tool
permission path, while the builtin file mutations keep their typed contract.
2026-09-20 15:29:50 -04:00
Pranit f651bb13ae Merge pull request #987 from vercel-labs/fazxes/libfx-tool-start-input
Include tool input in libfx tool_start events
2026-09-20 14:25:12 -04:00
Pranit 1d7f49a8df Bound the tool_start input preview with the shared UTF-8 prefix helper 2026-09-20 13:47:46 -04:00
Pranit 1468269b44 Include tool input in libfx tool_start events
`tool_start` events now include the tool's `input` object, so a host UI can
show what the agent is doing while it does it. Inputs over 64 KiB of JSON
arrive as an `inputPreview` string prefix with `inputTruncated: true`; the
tool still receives the complete arguments.
2026-09-20 13:26:43 -04:00
Pranit 8578e57719 Merge pull request #984 from vercel-labs/fazxes/libfx-prompt-images
Accept image blocks in libfx prompt input
2026-09-20 13:26:17 -04:00
Pranit 2f10b8f39c Handle decode errors with try in the inline capture test 2026-09-20 12:50:44 -04:00
Pranit ca19505e94 Accept image blocks in libfx prompt input
`agent.prompt()` accepts `{ type: "image", data, mimeType }` blocks (the ACP
content shape) on both the native and WebAssembly backends. Images are sent
only to models that advertise image input; any other model fails the turn
with "Image prompts are unavailable for the selected model" and no image
bytes leave the process.

The SDK rejects oversized prompts with typed errors before any request: over
5 MiB of base64 per image, more than 8 images, over 8 MiB of image data, or a
total prompt frame over 8 MiB (text-only prompts included, which previously
hung the WebAssembly backend).

Prompt images are retained in `checkpoint()` bytes within the existing 4 MiB
checkpoint bound, so a restored agent can refer to earlier images on either
backend.
2026-09-20 12:14:28 -04:00
Pranit 61a2357939 Merge pull request #981 from vercel-labs/fazxes/reduce-session-decoding-overhead
Reduce durable session decoding overhead
2026-09-20 04:24:56 -04:00
Pranit df22927449 Merge pull request #980 from vercel-labs/fazxes/sdk-agent-fast
Add fast mode control to libfx agents
2026-09-20 03:35:24 -04:00
Pranit a54684725e Merge pull request #982 from vercel-labs/revert-968-fazxes/prompt-cache-overlay-tail
Revert "Keep per-step runtime context at the message tail for prompt cache stability"
2026-09-20 03:34:11 -04:00
Pranit f3bf3cf47c Revert "Keep per-step runtime context at the message tail for prompt cache stability" 2026-09-20 03:33:10 -04:00
Pranit 7e27839cf6 Reduce durable session decoding overhead
Bound parser cleanup scopes so each decoding phase owns only its allocations.
2026-09-20 03:32:14 -04:00
Pranit 9ce23affe2 Merge pull request #979 from vercel-labs/fazxes/sdk-agent-effort
Add reasoning effort control to libfx agents
2026-09-20 03:06:04 -04:00
Pranit e5e35e6fb1 Keep shipped edit presentations parseable in recovery records
Accept both the shipped nine-key committed_file_presentation shape
and the extended handle-carrying shape when parsing, and omit
content_handle from written records when no snapshot was spilled so
older builds can still read new checkpoints. Resume degrades to the
inline diff preview when a spilled artifact is missing or corrupt
instead of failing.
2026-09-20 03:05:47 -04:00
Pranit c4486d0da6 Merge pull request #974 from vercel-labs/fazxes/reduce-mcp-cleanup-overhead
Reduce MCP failure cleanup overhead
2026-09-20 02:31:50 -04:00
Pranit 3c33cde039 Add fast mode control to libfx agents
createFxAgent() accepts a boolean fast option matching --fast/--no-fast.
Enabling fast is validated against the selected model's advertised fast
path during agent creation and rejects with a LIBFX_UNSUPPORTED_FAST
error naming the model. fast: false or omitting the option keeps current
behavior.
2026-09-20 02:19:41 -04:00
Pranit fda7f97b73 Add reasoning effort control to libfx agents
createFxAgent() accepts an effort option using the same vocabulary as
--effort. A named level is validated against the selected model's
advertised effort levels during agent creation and rejects with a
LIBFX_UNSUPPORTED_EFFORT error naming the supported set. ACP turn
usage now surfaces provider reasoning tokens.
2026-09-20 01:48:08 -04:00
Pranit bbbf4da35f Spill committed edit snapshots into the session result store
Large before/after file snapshots no longer inline into the
conversation event log or the recovery checkpoint. Edits past the
inline budget persist one content-addressed artifact under
tool-results and the durable records carry its handle. Resume
reloads the snapshots for the full diff view and falls back to the
compact preview when an artifact is missing or corrupt. Older
session logs remain readable.
2026-09-20 01:18:54 -04:00
Pranit 80fd74538c Extend MCP failure cleanup consolidation
Apply the existing shared free path to feature catalog and snapshot error exits.
2026-09-20 01:05:40 -04:00
Pranit 6231922e7b Reduce MCP failure cleanup overhead
Route repeated failure-unwind frees through the shared type-erased cleanup path.
2026-09-20 00:50:10 -04:00
Pranit 3fb2af4c30 Merge pull request #967 from vercel-labs/fazxes/mcp-feature-unsupported
Answer unsupported MCP features instead of failing the tool call
2026-09-20 00:46:05 -04:00
Pranit 9a24db727b Answer unsupported MCP features instead of failing the tool call
Asking a server for resources or prompts it never advertised failed the
mcp_features call with tool_execution_failed and an internal error name the
model could not act on. A missing capability is not an execution failure:
render an explicit note naming the server and the absent capability,
keeping the untrusted-external envelope, so the model can fall back to the
server's tools or another server.
2026-09-20 00:15:31 -04:00
Pranit 14484ea0a5 Merge pull request #965 from vercel-labs/fazxes/mcp-reauth-status
Mark rejected MCP credentials as needing re-authentication
2026-09-20 00:15:15 -04:00
Pranit d6a1cc07a7 Mark re-authentication only for terminal refresh rejections
McpRefreshRejected now fires only when the token endpoint answers 400 with
invalid_grant; 429 and 5xx map to a transient McpRefreshUnavailable that
fails the attempt without flipping the server to needs_auth. The mark
itself is generation-guarded so a concurrent successful refresh is never
overwritten by a stale rejection, and installing usable credentials clears
the challenge flag so a recovered server stops asking for re-auth.
2026-09-19 23:26:51 -04:00
Pranit fee07cb774 Mark rejected MCP credentials as needing re-authentication
A server whose stored OAuth credentials fail refresh was left claiming
auth=authenticated while the connection failed, so every surface reported
it as a generic failure with no path forward. When the token endpoint
rejects the refresh (or credentials expire with no refresh token), flip
the challenge and credential flags so the shared classifier reports
needs_auth everywhere: the list view and menu offer /mcp auth, capability
search emits its authentication guidance, the startup notice names the
server, and the model catalog stops calling it ready. The rejected
credentials stay installed until a successful re-auth replaces them.

Extend the expired-refresh e2e to assert the re-authentication
classification in fx mcp list output.
2026-09-19 23:26:51 -04:00
Pranit 50ef28f598 Merge pull request #963 from vercel-labs/fazxes/mcp-startup-notice
Announce MCP servers that need attention when startup settles
2026-09-19 23:26:40 -04:00