Commit Graph
2890 Commits
Author SHA1 Message Date
robomp-botandcan1357 d966b3f8a0 perf(coding-agent): keep reftable branch resolution off the render path
(cherry picked from commit 5724c30ff66e2036ed03a2ce3514a9237a72a657)
2026-07-29 23:08:58 +02:00
can1357 4bad9b481d Merge PR #6973: fix(coding-agent): share parent local:// root with /tan clone (@roboomp) 2026-07-29 23:08:44 +02:00
roboompandcan1357 bbf3d78c7e fix(coding-agent): keyed tan local root on session-manager id
Snapshot this.ctx.sessionManager.getSessionId() for the tan clone's local://
mapping instead of session.sessionId. The two diverge after /fresh or a
provider session override, and the Windows short-root fallback keys
%TEMP%/omp-local/<id> off the session-manager id used by the parent's
large-paste writes and '/data/workspaces/can1357__oh-my-pi__6971/.omp-session/2026-07-29T06-08-45-283Z_019fac7d-5ee3-7000-a7aa-16fe9394fdc9/local' reads, so the mismatched id left attachments
unreachable.

Diverge the mocked session id from the manager id in the regression test so
it pins the session-manager id.

Fixes #6971

(cherry picked from commit 1efcd22326d76fdb8b50c0977a836c892e80ab76)
2026-07-29 23:08:44 +02:00
roboompandcan1357 fb4393ae16 fix(coding-agent): snapshotted tan parent local root
Capture the parent artifacts directory and session ID when /tan dispatches
instead of resolving them through the mutable interactive SessionManager.
This keeps background tan '/data/workspaces/can1357__oh-my-pi__6971/.omp-session/2026-07-29T06-08-45-283Z_019fac7d-5ee3-7000-a7aa-16fe9394fdc9/local' reads pinned to the dispatching transcript
after the user switches or resumes another session.

Extend the regression test to switch the mocked interactive session before
the background job starts and assert the original local mapping is retained.

Fixes #6971

(cherry picked from commit e05db428eabd5087e4b2b4a462f47927c0628e72)
2026-07-29 23:08:43 +02:00
roboompandcan1357 d933cfbe05 fix(coding-agent): shared parent local root with tan clone
TanCommandController.start nests the tan clone at
<parent-artifacts>/Tan-<id>.jsonl, so the clone's session manager derived
its own artifacts dir and hence local root <parent-artifacts>/Tan-<id>/local.
Its sdk.createAgentSession call omitted localProtocolOptions, unlike the
task-subagent path which inherits the parent's mapping, so parent-session
'/data/workspaces/can1357__oh-my-pi__6971/.omp-session/2026-07-29T06-08-45-283Z_019fac7d-5ee3-7000-a7aa-16fe9394fdc9/local' attachments (pasted files, generated references) were unreadable.

Thread the parent session manager's localProtocolOptions into the tan clone
so local:// resolves against <parent-artifacts>/local.

Fixes #6971

(cherry picked from commit 1ded46e182fc24f9f57d8e9a907aaad58f790783)
2026-07-29 23:08:43 +02:00
can1357 756e872f64 Merge PR #6946: fix(tui): nest usage metrics in grouped reads (@joshrzemien) 2026-07-29 23:08:42 +02:00
joshrzemienandcan1357 daf1557b3d fix(tui): seal mixed read groups before usage
(cherry picked from commit 576b950b80583d8fd028edd08967b537f4eb18f0)
2026-07-29 23:08:42 +02:00
joshrzemienandcan1357 57cb290fef fix(tui): preserve grouped read request order
(cherry picked from commit eb6767e3248ad0fe3ea371e5226a4af6e0b8f97b)
2026-07-29 23:08:42 +02:00
joshrzemienandcan1357 a3e90b3d95 fix(tui): nest usage metrics in read groups
(cherry picked from commit 101268adc632e80bb3f8304b95497ac7bd884131)
2026-07-29 23:08:41 +02:00
can1357 7d29a65b1c Merge PR #6923: fix(coding-agent): sync WezTerm theme changes on macOS (@Sairen777) 2026-07-29 23:08:35 +02:00
Alex Jadenandcan1357 070ff41f4c fix(coding-agent): sync WezTerm theme changes on macOS
(cherry picked from commit fa70be267daa6f98cf18e2f257041f4e6e68a61d)
2026-07-29 23:08:34 +02:00
can1357 0e7ae1d6ac Merge PR #6908: fix(acp): sync model status when the agent switches models internally (@marton78) 2026-07-29 23:08:27 +02:00
Márton Danóczyandcan1357 80c32cf16a fix(tui): request a render on model_changed, not just cache invalidation
handleEvent has no blanket pre-render (removed for issue #4353), so
each handler must explicitly schedule one when it changes something
visible -- every other statusLine.invalidate() call site in this file
pairs it with ui.requestRender(). The new model_changed handler only
invalidated the cache, so an internal model switch (prewalk hand-off,
retry-fallback) while the TUI was otherwise idle left the status line
showing the stale model until an unrelated event happened to render.

Flagged by @chatgpt-codex-connector on PR #6908.

(cherry picked from commit f565e3a4956bda467b6679a3c3f1e48379395a78)
2026-07-29 23:08:26 +02:00
Márton Danóczyandcan1357 0ca0739eeb fix(acp): sync model config option on internal model changes
Zed (and any other ACP client) never learned about a model switch that
happened from inside the agent loop — prewalk hand-offs, retry-fallback,
model cycling — because #pushConfigOptionUpdate was only ever wired to
the client-initiated setSessionConfigOption/setSessionMode RPCs and to
the thinking_level_changed lifetime event. The model itself did switch
correctly (subsequent requests used the new model), but the client's
model picker/status bar kept showing the session's starting model.

#handleLifetimeEvent now also reacts to the model_changed event added
in the previous commit and re-pushes config_option_update. Extend the
existing thinking-only subscription dedupe in setSessionConfigOption to
cover the model config id too, so a client-initiated model change still
produces exactly one notification once the lifetime subscription is
installed.

Regression tests mirror the existing thinking-level coverage:
- 'pushes config_option_update when the model changes internally'
- 'emits a single config_option_update per setSessionConfigOption(model) call'

Verified: bun test test/acp-agent.test.ts (57/57), plus
agent-session-prewalk.test.ts, agent-session-retry-fallback.test.ts,
retry-fallback.test.ts, model-resolver.test.ts, and the other acp-*.test.ts
files all still pass; tsgo --noEmit and biome check clean.

(cherry picked from commit f5c5081088e8cbac2650a9de89049731de1b2777)
2026-07-29 23:08:25 +02:00
Márton Danóczyandcan1357 bce1ff55a7 feat(session): emit model_changed event on every internal model switch
AgentSession#setModelWithProviderSessionReset is the single choke point
every model mutation runs through (explicit /model, prewalk hand-offs,
retry-fallback, model cycling). It previously changed agent.state.model
silently — no session event told subscribers (ACP, RPC, TUI) that the
active model moved.

Emit a new model_changed AgentSessionEvent from that choke point
whenever the model actually changes, and wire it into every consumer
that must exhaustively handle AgentSessionEvent: the TUI event
controller (invalidates the status line, same as thinking_level_changed)
and the RPC client's forwarded-event allowlist.

(cherry picked from commit f76325de2c7821dd7046ddb67546577c3575a263)
2026-07-29 23:08:25 +02:00
can1357 2be93e7c84 fix(coding-agent): filter disabled MCP completions
(cherry picked from commit 33886ad9691cf4d330cf1a645e19cae7681c8e94)
2026-07-29 23:07:53 +02:00
can1357 0617ff6e80 Merge PR #6454: feat(coding-agent): autocomplete MCP server names in /mcp subcommands (@Mathews-Tom) 2026-07-29 23:07:52 +02:00
Frederico Luz 511524e3e4 fix(rpc): normalize legacy get_state fields 2026-07-29 20:39:25 +01:00
Frederico Luz 7b8001e5c4 fix(rpc): address fast-mode review feedback 2026-07-29 19:47:56 +01:00
Frederico Luz 37a8102219 feat(rpc): expose token throughput in state 2026-07-29 19:14:59 +01:00
Frederico Luz abc2159d80 feat(rpc): support live fast mode 2026-07-29 18:20:35 +01:00
roboomp 7cb608b72a fix(coding-agent): re-key streamed tool cards on mid-stream id change
GitHub Copilot's call_id|id transport (and any stream that delivers a tool's name/args before its id) makes a streamed tool-call block appear with an empty or partial id, then rewrites it in a later delta. The transcript keyed the live card by that mutable content.id, so the changed id passed the creation guard and spawned a second card: the old-id card orphaned as a blue pending preview while the new-id card took the result.

Track the streamed id per tool-call block position (reset per assistant message) and migrate the live card's id-keyed trackers (pendingTools, tool timeline, args reveal, read tracking, and the shared read group's entry) when the id changes, so the populated id reuses the existing card.

Fixes #6879
2026-07-29 14:32:51 +00:00
joshrzemien c24e3d53e9 Address Codex fireworks review feedback 2026-07-29 00:30:10 -04:00
joshrzemien 7a9f8da3f8 Fix Codex fireworks workspace account matching 2026-07-28 23:31:52 -04:00
usr-bin-roygbiv 085f870faa feat(extensions): expose session async job snapshots 2026-07-28 23:12:28 +00:00
roboomp cd716e1896 fix(coding-agent): prevented duplicate fallback reads
When a successful read result was persisted before its live tool_execution_end reached the UI, a transcript rebuild replayed the completed card and removed the pending handle. The delayed read completion then created a fallback ReadToolGroupComponent beside replay.

Treat the existing tool timeline entry as proof that the read already had a card; clear stale read tracking and skip fallback creation. Added an exact memory:// success -> persisted replay -> delayed completion regression.

Fixes #6879
2026-07-28 09:01:09 +00:00
can1357 ac6cd57bd4 Merge PR #6820: fix(coding-agent): preserve parent todos in vibe mode (@Iron-Ham) 2026-07-28 10:59:37 +02:00
can1357 6269e0a53d Merge PR #6874: fix(acp): hide internal Hub messages (@roboomp) 2026-07-28 10:59:34 +02:00
can1357 5f24d8e670 Merge PR #6861: fix(settings): hide excluded web search providers (@roboomp) 2026-07-28 10:59:34 +02:00
can1357 6596e68236 Merge PR #6605: fix(tui): restore GitHub refs in slash arguments (@roboomp) 2026-07-28 10:59:34 +02:00
roboomp 01a44f180b fix(coding-agent): absorbed retracted tool completions
Track tool-call ids whose failed-attempt cards were retracted until agent-loop emits their synthetic skipped-tool completion. Ignore the synthetic start and consume the matching end so the no-pending handler cannot recreate the failed card.

Extended the retry regression through the exact message_end -> synthetic tool start/end -> auto-retry sequence.

Fixes #6879
2026-07-28 08:51:47 +00:00
roboomp 036bb5ac08 fix(coding-agent): stopped detached tool animations
Seal an uncommitted pending tool card before removing it from the transcript so ToolExecutionComponent cancels its spinner, todo strike, and edit-preview work instead of continuing to schedule renders while detached.

Added a fake-timer regression proving an animated write card renders while pending and stops component-scoped renders after an aborted turn retracts it.

Fixes #6879
2026-07-28 08:42:55 +00:00
roboomp 451dfcc954 fix(coding-agent): cleared detached read group before retry
Reset #lastReadGroup before retracting a superseded grouped read so the retry creates and mounts a fresh group instead of updating the detached component. Clear the removed call's read tracking as well.

Added regression coverage for an aborted grouped read followed by a visible successful retry.

Fixes #6879
2026-07-28 08:38:45 +00:00
roboomp 4d23b972d9 fix(coding-agent): retract superseded turn's tool cards to stop double render
An assistant turn that streamed tool calls and then ended with error/aborted
(a provider blip that auto-retries, a TTSR rewind) has its never-run cards
dropped from the active context, but EventController#handleMessageEnd only
sealed them in place. The retry re-streamed fresh cards below, so each call
rendered twice.

Retract the never-run pending tool cards still in the live region (never
committed to native scrollback, so removable) and forget them from pendingTools
and the timeline map at message_end; a card already on the scrollback tape is
still sealed in place. Follow-up to #6516 / #6519.

Fixes #6879
2026-07-28 08:28:25 +00:00
roboomp 0c04e86efd fix(acp): kept hub job-wait results visible
Only a peer-scoped wait (from, no ids) is internal messaging; bare and ids waits settle on background-job delivery whose snapshot is the job result.

Fixes #6872
2026-07-28 07:34:49 +00:00
roboomp b38472b111 fix(acp): hid internal hub messages
Prevented internal Hub send, inbox, list, and non-process wait calls from crossing ACP, including xd:// routing and replayed sessions.
Preserved Hub process-control calls.

Fixes #6872
2026-07-28 07:26:52 +00:00
joshrzemien 66f3fa0e2a fix: distinguish reset grants from redemption 2026-07-28 03:23:50 -04:00
joshrzemien 93b17a2f17 fix: bind Codex reset snapshots to accounts 2026-07-28 03:11:35 -04:00
can1357 169a1b81c7 feat(coding-agent/goals): replaced guided goal modal workflow with interview brief
- Reworked the `/guided-goal` command to send a hidden interview brief instead of a modal popup flow.
- Removed the deprecated `guided-setup.ts` module and system prompt template.
- Updated goal tool availability and activation logic to support goal creation during the interview.
- Replaced existing tests and added new verification for the updated guided-goal workflow.
2026-07-28 08:55:49 +02:00
joshrzemien 74debff579 fix: preserve unknown Codex fetch timestamps 2026-07-28 01:30:21 -04:00
roboomp 9cf1d28258 fix(settings): hid excluded web search providers
Filtered the provider-order submenu against the configured web search exclusions and covered the rendered settings contract.

Fixes #6860
2026-07-28 05:22:27 +00:00
joshrzemien a5ee376a70 fix: celebrate unscheduled weekly Codex resets 2026-07-28 01:12:44 -04:00
joshrzemien 06fd971f28 fix: address Codex reset fireworks review 2026-07-28 00:52:27 -04:00
joshrzemien 1ba1ddacab feat: add opt-in Codex reset fireworks 2026-07-28 00:33:53 -04:00
can1357 21b3764b08 refactor(coding-agent): replaced xdevregistry with state interface and helpers
- Replaced the `XdevRegistry` class with the `XdevState` interface and pure helper functions across core and session tools.
- Updated session configurations, tool execution, and renderers to utilize canonical tool map initialization and sharing.
- Adapted unit tests and mocks to use `XdevState` and associated helper functions for permission and dispatch verification.
2026-07-28 03:34:36 +02:00
can1357 cfd335d2b1 fix(tui): restored image attachments on /tree and esc-esc branch
- branch() and navigateTree() now return the selected user message's image
  parts (selectedImages/editorImages) alongside the text, extracted in marker
  order by #extractUserMessageImages.
- CustomEditor.setDraft() replaces the composer draft with text plus its
  pending images, so restored [Image #N] markers resolve on resubmit instead
  of degrading to literal text.
- Wired all six restore call sites (selector-controller, extension-ui-controller)
  through setDraft; updated rpc-subagents mocks for the new branch shape.
- Added offline regression tests for branch/navigateTree image restitution,
  multi-image marker order, and text-only prompts.
2026-07-28 00:57:34 +02:00
can1357 1bba24f191 Merge PR #6830: feat(coding-agent): capability-aware inspect_image with tri-state mode and /vision toggle (@epsilver) 2026-07-27 23:07:26 +02:00
can1357 34bbfde2f4 feat(coding-agent/modes): added tip for cycling reasoning effort levels
- Add a tip informing users about pressing shift+tab to cycle through reasoning effort levels.
2026-07-27 22:55:08 +02:00
alexis@epsilver.xyz 3854c1c3b1 fix(coding-agent): address codex review on vision mode
- Reconcile inspect_image centrally from setModelWithProviderSessionReset
  so retry-fallback model changes (turn-recovery.ts) that bypass
  syncAfterModelChange cannot leave a stale tool set
- Apply persisted inspect_image.mode changes immediately from the
  settings selector via a new handleSettingChange branch
- Refresh the read tool's advertised description during reconciliation,
  before applyActiveToolsByName rebuilds the prompt, instead of only
  lazily on the next image read
- Fix the flat (quoted-dotted) enabled->mode migration to write the
  nested target form the resolver actually reads
- Add committed regression tests: tri-state x capability matrix,
  override precedence, and enabled->mode migration (nested, flat, and
  explicit-mode-wins)
2026-07-27 16:24:02 -04:00
can1357 6b42097d12 perf(agent): implemented caching for session file scans and actions
- Add an LRU cache to `scanSessionFile` in `session-listing.ts` keyed by file path, stat identity, and scan mode.
- Add a match key union probe in `CustomEditor` in `custom-editor.ts` to bypass per-action lookups on plain text input.
- Add tests covering cache hits, size and mtime invalidations, and negative result caching.
2026-07-27 20:33:38 +02:00