Commit Graph

15181 Commits

Author SHA1 Message Date
roboomp e6cdfd6187 fix(session): cleared session-scoped tool state
Cleared queued tool-choice directives and ACP always decisions after successful logical session transitions.

Added new-session and cross-session regression coverage for staged resolves and both ACP always decisions.

Fixes #4093
2026-07-24 02:23:15 +02:00
can1357 3d64910bb0 feat(coding-agent/live): added realtime voice interaction with Codex Live sessions (experimental)
- Added `src/live/` subsystem with WebRTC transport, protocol parser, session controller, and headless Chromium audio injection.
- Added `LiveVisualizer` component with phase states, transcript display, and animated waveform rendering.
- Added `/live` slash command and `LiveCommandController` to toggle live voice sessions.
- Suppressed local TTS via `vocalizer.suspend()` during live mode to prevent audio conflicts.
- Added live-instructions and agent-final-message prompts for agent messaging context.
- Added `protocol.test.ts` covering event parsing, chunking, and context message construction.
2026-07-24 02:20:43 +02:00
can1357 9a2639e507 refactor(session): converted PERMISSION_OPTIONS_BY_ID from object to Map
- Changed lookup from bracket notation to Map.get() to safely fail closed on unknown permission IDs.
2026-07-24 01:42:25 +02:00
can1357 f5a4c5fe2a fix(coding-agent): exported advisor stats types and update move command test
- Export specific advisor stats types instead of re-exporting all session advisors.
- Update move command tests to mock session-level move actions.
2026-07-24 01:37:41 +02:00
can1357 505af4188f fix(coding-agent/modes): pinned displaceable transcript snapshots to viewport
- Pinned displaceable snapshots like hub waiting polls and todo lists to the viewport during active execution.
- Prevented unpinned spinner ticks from repeatedly committing mutating rows to native scrollback and force-sealing blocks.
2026-07-24 01:25:29 +02:00
can1357 7eeaba0471 refactor(coding-agent/session): restructured monolithic agent session
- Extracted internal handlers and logic from AgentSession into dedicated runner, guard, and coordinator modules.
- Created standalone modules for bash execution, evaluation runners, IRC bridging, and prewalk coordination.
- Established dedicated session components for tracking stats, todos, streams, and retry fallback chains.
- Preserved existing session behavior while significantly reducing monolithic class size and complexity.
2026-07-24 01:24:44 +02:00
can1357 126765c020 docs: add Vibe mode and /fresh session-reset documentation
Closes #6440
2026-07-23 23:16:16 +02:00
can1357 e23359fd1a fix(prompts): restored JS spread operator mangled into Unicode ellipsis by reformat
- 24e2a52615 turned ...f into …f inside the workflow-notice parallel example, making the copyable snippet a syntax error.
2026-07-23 23:15:31 +02:00
roboomp 48be4674e9 docs: document /vibe mode and /fresh command
/vibe (a full director/worker orchestration mode) had no user-facing
documentation, and /fresh appeared only as a matrix row in the
session-operations doc whose title already promised a "fresh" section.
Neither was mentioned in the README.

- Add docs/vibe-mode.md: enable/disable, fast/good worker tiers, the five
  vibe_* control tools, and the director workflow.
- Add a "## Fresh" section to the session-operations doc describing the
  provider-stream/session-state reset and its contrast with /new and /drop.
- Add a "Session controls" subsection to the README linking both docs.

Fixes #6440
2026-07-23 21:12:08 +00:00
can1357 4362cdf6ed fix(snapcompact): scrubbed legacy ¶think: sections from prior archives when thinking is excluded
- Re-compaction unfolds the prior archive's kept source verbatim, so archives written before includeThinking existed kept replaying reasoning to Claude (reasoning_extraction) even after the serializer fix; the prior text is now scrubbed when includeThinking is false, healing poisoned sessions at their next compaction.
2026-07-23 23:07:08 +02:00
can1357 46d2b7d864 Merge PR #6439: fix(compaction): stop feeding reasoning back to Claude summarizer (@roboomp) 2026-07-23 23:05:47 +02:00
can1357 8cab2b7cd5 fix(session): run prompts issued while disposing instead of dropping them
- The memory-backend transition await added in PR #6428 guarded with #isDisposed, which beginDispose() sets immediately; prompts issued in the disposing window were silently dropped instead of running their final turn and settling via the dispose abort.
- Guard now only drops the prompt when disposal began during the transition await.
2026-07-23 22:42:34 +02:00
roboomp 5a70eda7d7 fix(compaction): stop feeding reasoning back to Claude summarizer
Both compaction serializers reproduced prior assistant reasoning as text
bound for a Claude target, tripping Anthropic's reasoning_extraction
refusal and wedging Fable 5 sessions:

- context-full: serializeConversation rendered thinking verbatim inside
  <thinking> tags via the anthropic dialect renderer. Now drops thinking
  blocks when the summary target dialect is anthropic; other dialects
  (e.g. Harmony) keep native reasoning.
- snapcompact: emitted ¶think sections baked into replayed archive
  frames. Added an includeThinking serialize option (default true) and
  wired the agent session to disable it for Anthropic-dialect models.

Fixes #6093
2026-07-23 20:38:27 +00:00
can1357 83e0e4cdac Merge PR #6435: fix(session): resume resolved tool stalls (@roboomp) 2026-07-23 22:38:05 +02:00
can1357 b326e79e6e chore: applied formatter and dropped unused catch binding from merged lsp fix 2026-07-23 22:27:08 +02:00
can1357 69056ac7f2 chore(changelog): restored released sections and added missing tui entry
- Rebuilt coding-agent released sections verbatim from main after the changelog union driver relocated a released webSearch entry during the merges.
- Added the missing tui [Unreleased] entry for the cursor-key/keypad teardown fix from PR #6398.
2026-07-23 22:25:29 +02:00
can1357 9c44ad185c fix(read): restored untilAborted import dropped by merge overlap of #6404 and #6417
- #6417 moved findUniqueSuffixMatch (the only prior untilAborted user) out of read.ts and removed the import; #6404 added new untilAborted callsites in regions git auto-merged without conflict.
2026-07-23 22:19:37 +02:00
roboomp 055a0ce0af fix(session): resumed resolved tool stalls
- Preserved stalled assistant turns when every emitted tool call had a result, including synthetic unexecuted results.

- Kept unresolved and non-stall tool errors replay-safe and covered terminal error agent_end delivery.

Fixes #6414
2026-07-23 20:18:03 +00:00
can1357 600d37ebda Merge PR #6422: fix(collab-web): restore resolve/reject/propose cards after xdev unwrap (@roboomp) 2026-07-23 22:17:17 +02:00
can1357 9c35eb225a chore(changelog): normalized unreleased sections after merges 2026-07-23 22:17:17 +02:00
can1357 29c2bd2595 Merge PR #6415: fix(compaction): judge remote-preserve reuse against the active model (@roboomp)
# Conflicts:
#	packages/coding-agent/src/session/agent-session.ts
2026-07-23 22:16:11 +02:00
can1357 72ff07ff84 Merge PR #6428: fix(memory): synchronize live backend lifecycle (@roboomp) 2026-07-23 22:15:25 +02:00
can1357 f58b8dbbb7 fix(catalog): include base Nova Lite/Micro/Pro IDs in Bedrock cache compat
AWS documents prompt caching for Nova Micro/Lite/Pro under their in-region
model IDs as well; the allowlist covered only the us. geo profiles (Premier
already had both forms). Regional/provisioned-throughput configs using base
IDs now emit the documented default-5m checkpoints.
2026-07-23 22:15:25 +02:00
can1357 c6e8ff5494 Merge PR #6409: fix(bedrock): validate prompt cache checkpoints (@riverpilot) 2026-07-23 22:15:24 +02:00
can1357 bebcc8003f test(robomp): cover issues opened/reopened -> triage_issue dispatch mapping
The queue-level dispatch of issue events had no test at all; a revert of
the reopened mapping in WorkerPool._dispatch would silently reintroduce
the routing gap #5891 fixes. Mirrors the existing PR-review dispatch
test convention.
2026-07-23 22:15:24 +02:00
can1357 0bca6e156a Merge PR #6419: fix(robomp): route issues.reopened to admission-gated re-triage (@roboomp) 2026-07-23 22:15:24 +02:00
can1357 eaa3002b9d fix(tts): cap replay retention so long utterances stay bounded in memory
Streamed PCM kept for the nonzero-exit replay is now dropped once the
utterance exceeds 60s (~5.8 MB at 24 kHz mono f32): the recovered failure
is a short clip that fits the pipe buffer before a broken backend dies,
while replaying a long already-played utterance would duplicate audio and
unbounded retention would defeat streaming for long input.
2026-07-23 22:15:24 +02:00
can1357 46ae99cea8 Merge PR #6421: fix(tts): play buffered audio when streaming backend exits nonzero (@roboomp) 2026-07-23 22:15:24 +02:00
can1357 2ecba08e2a Merge PR #6407: fix(browser): bound open timeout and lease browser across tab acquisition (@roboomp) 2026-07-23 22:15:24 +02:00
can1357 86690c61de Merge PR #6400: fix(stats): prevent malformed entries from stalling sync (@roboomp) 2026-07-23 22:15:24 +02:00
can1357 ad1713632b Merge PR #6405: fix(eval): coalesce dead Python kernel replacement (@roboomp) 2026-07-23 22:15:23 +02:00
can1357 553082a4f2 Merge PR #6406: fix(agent): deliver queued steer on empty transcript instead of looping (@roboomp) 2026-07-23 22:15:23 +02:00
can1357 bbf0402990 fix(coding-agent): surface JSON-RPC error code so -32601 method-not-found is recognized regardless of message text
Codex P2 on #6403: sendRequest rejected with only the server's error
message; a server answering rust-analyzer/reloadWorkspace with code
-32601 but nonstandard text (e.g. "Unknown request") would fail
isMethodNotFoundError and turn lsp reload into a hard error instead of
falling back to the generic reload. Include the code in the rejection
message so the existing -32601 substring check matches. Adds a
regression test with a -32601/"Unknown request" response.
2026-07-23 22:15:23 +02:00
can1357 221c93c88b Merge PR #6403: fix(coding-agent): propagate cancellation from lsp reload instead of false restart (@roboomp) 2026-07-23 22:15:23 +02:00
can1357 418076e44a fix: treat escaped quotes inside double-quoted backticks as inner quoting
Bash treats \" inside a backtick substitution nested in double quotes as
a quote delimiter for the inner command; the generic backslash-skip made
isInsideShellQuote report such quoted literals as unquoted, wrongly
expanding internal URLs inside them (Codex P2 review finding).
2026-07-23 22:15:23 +02:00
can1357 5ac3094d88 Merge PR #6418: fix(tool): expand internal urls inside backtick substitutions (@roboomp) 2026-07-23 22:15:23 +02:00
can1357 cf886d8d8a fix(edit): reuse resolved workspace target across apply_patch hunks for the same authored path 2026-07-23 22:15:23 +02:00
can1357 a5e59a4e56 Merge PR #6417: fix(edit): align relative path resolution (@roboomp) 2026-07-23 22:15:22 +02:00
can1357 c991270145 Merge PR #6404: fix(coding-agent): make PDF image cache content-aware (@roboomp) 2026-07-23 22:15:22 +02:00
can1357 a6072d0013 Merge PR #6427: fix(session): validate blob refs before path join (@roboomp) 2026-07-23 22:15:22 +02:00
can1357 449762b0e9 Merge PR #6426: fix(session): serialize ArtifactManager first-use init (@roboomp) 2026-07-23 22:15:22 +02:00
can1357 ffc4cec4e7 test(ai): occupy 127.0.0.1 explicitly in the port-fallback blocker
Callback flows now bind 127.0.0.1 for localhost; macOS lets a
specific-address bind coexist with the blocker's 0.0.0.0 wildcard bind, so
the fallback path never triggered. Contest the same interface.
2026-07-23 22:15:22 +02:00
can1357 8a17eb1216 fix(ai): surface state-authenticated provider denials instead of timing out
An error redirect carrying the expected state nonce comes from the genuine
authorization flow (e.g. the user denied the consent screen); leaving it
unsettled stalled loopback logins for the full 5-minute timeout. Reject the
callback promise for those, while still ignoring forgeable errors without
the expected state (#4106).
2026-07-23 22:15:22 +02:00
can1357 e410f8fc5a Merge PR #6423: fix(ai): prevent invalid callbacks from aborting oauth (@roboomp) 2026-07-23 22:15:22 +02:00
can1357 3e445dccd9 test(mcp): use Promise.withResolvers in hanging-fetch helper per AGENTS.md 2026-07-23 22:15:21 +02:00
can1357 e8502806ff fix(mcp): retry smithery poll timeouts until the authorization deadline
A single hung/slow poll now aborts with TimeoutError after 30s; without
this, that one timeout escaped #waitForSmitheryCliApiKey and dropped the
browser login to the manual API-key fallback instead of retrying until
the 5-minute deadline. Catch isTimeoutError in the poll loop and
continue; export SmitheryCliPollResponse to type the retried response.
2026-07-23 22:15:21 +02:00
can1357 db2601eaff Merge PR #6425: fix(mcp): bound oauth discovery and smithery poll fetches with abort timeouts (@roboomp) 2026-07-23 22:15:21 +02:00
can1357 a18956ded9 Merge PR #6424: fix(mcp): serialize mcp.json config writes and use unique temp path (@roboomp) 2026-07-23 22:15:21 +02:00
can1357 ef39fe18b9 Merge PR #6420: fix(tui): re-resolve transient status colors on theme swap (@roboomp) 2026-07-23 22:15:21 +02:00
can1357 458d4fead2 Merge PR #6398: fix(tui): reset cursor-key and keypad mode on terminal teardown (@roboomp) 2026-07-23 22:15:21 +02:00