Commit Graph
6719 Commits
Author SHA1 Message Date
roboomp aeea2c8a8a fix(coding-agent): preserved noninteractive cross-project resume failures
Separated the fork prompt result into accepted, declined, and unavailable states.
Interactive declines now return cleanly through runRootCommand, while non-TTY
invocations continue to fail with a diagnostic instead of silently exiting 0.

Updated regression coverage for both branches.

Fixes #1668
2026-06-01 22:36:10 +00:00
roboomp cea19b6ebf fix(coding-agent): exited cleanly when declining cross-project resume fork
createSessionManager threw `Session "X" is in another project (Y).` when
the user answered "n" to the fork prompt, and runRootCommand never caught
it. The throw bubbled up as an Uncaught Exception with a stack trace.

Return undefined from the decline branch instead, and treat
`typeof parsed.resume === "string" && !sessionManager` in runRootCommand
as a user cancellation: print a dimmed "Resume cancelled" message and
return cleanly (exit 0), mirroring how the picker UI handles
"No session selected".

Fixes #1668
2026-06-01 22:31:26 +00:00
can1357 96fd4c0f4f test(coding-agent): removed warm-cache refresh performance test case
- Removed the status-line context cache test that benchmarked warm-cache refreshes on a 200-message session.
2026-06-01 20:42:22 +02:00
can1357 7a8c879f9a test(bash-executor): replaced fixed sleep timers with event-driven sync
- Replaced `Bun.sleep(50)` with `Promise.withResolvers` resolved on first chunk to avoid races.
- Used a filesystem marker file to detect shell startup before aborting in persistent-session test.
- Prevents flaky failures where aborts arrived before shell setup completed.
2026-06-01 20:33:43 +02:00
can1357 47690d6495 Merge remote-tracking branch 'origin/farm/f765e67b/esc-keeps-autocomplete-dismissal' 2026-06-01 20:33:08 +02:00
can1357 503d29f408 fix(eval): resolved TDZ crash by splitting eval renderer into eval-render.ts
- Extracted TUI rendering from `eval.ts` into a dependency-light `eval-render.ts` to break the circular initialization chain.
- `renderers.ts` now imports `evalToolRenderer` from `eval-render` directly, avoiding re-entry into the root barrel while `eval.ts` is still initializing.
- `eval.ts` re-exports `evalToolRenderer` and `EVAL_DEFAULT_PREVIEW_LINES` for backward compatibility.
- Increased first-event timeout test budget from 50ms to 5000ms to prevent CI scheduler jitter from tripping the watchdog on success cases.
2026-06-01 20:31:46 +02:00
can1357 c069136eca refactor(exec): extracted eval-backends module and improved shell quarantine
- Moved EvalBackendsAllowance and related functions to a dedicated eval-backends.ts module.
- Replaced ad-hoc brokenShellSessions tracking with a quarantineShellSession helper that also awaits the abort cleanup promise.
- Applied quarantine on timeout and cancellation paths, not just errors.
2026-06-01 20:15:21 +02:00
roboomp 27f4965e00 fix(coding-agent): stop ESC from aborting agent run while @ autocomplete is open
When the autocomplete popup is visible, ESC unconditionally falls through
to the editor base class so it can dismiss the popup. Only an ESC with no
popup visible reaches onEscape and routes to the global interrupt handler.

Removed the shouldBypassAutocompleteOnEscape callback that paved over the
popup-dismissal path whenever the agent was busy (streaming, bash, /btw,
auto-compaction, etc.) — that is precisely the moment the user is most
likely to hit ESC while the popup is open, and dismissing-then-aborting in
one keystroke is a footgun, not a feature. Two-press semantics now match
the standard TUI/IDE pattern: first ESC closes the popup, second ESC
aborts.

Tests cover both branches in custom-editor-keybindings.test.ts and the
input-controller escape suite no longer asserts the dead callback.

Fixes #1655
2026-06-01 17:26:10 +00:00
can1357 cfea72f0f2 chore: bump version to 15.7.6 2026-06-01 19:24:27 +02:00
can1357 0246c25257 Merge remote-tracking branch 'origin/farm/ebaddff1/raise-fuzzy-file-completion-cap' 2026-06-01 19:23:33 +02:00
Can BölükandGitHub 88b8682b03 Merge pull request #1656 from daaximus/fix/wt-deferred-mutation-unknown-viewport
fix(tui): repaint visible window when native viewport probe is unknown
2026-06-01 20:23:06 +03:00
daaximus a58f701580 fix(tui): repaint visible window when native probe is unknown 2026-06-01 12:20:13 -05:00
roboomp b7366c9438 fix(tui): removed 20-result hard cap on @-file fuzzy completion
CombinedAutocompleteProvider.#getFuzzyFileSuggestions sliced fuzzy
matches to 20 entries unconditionally, regardless of how many files
matched. fuzzyFind itself is already capped via maxResults: 100 in
buildAutocompleteFuzzyDiscoveryProfile, so the inner slice was a
redundant truncation that silently hid correct matches in monorepos
or whenever the typed stem (e.g. @controller, @test) matched many
files. Dropping the slice lets the natural upstream ceiling apply,
matching the uncapped behavior of the direct-prefix path
(#getFileSuggestions).

Fixes #1652
2026-06-01 17:16:28 +00:00
can1357 fbdc064186 feat(lsp): added session-scoped LSP diagnostics deduplication
- Added `DiagnosticsLedger` to track diagnostics already surfaced per file, suppressing repeats within a session.
- Wired dedup into both edit and write tools via a `transformDiagnostics` hook on the writethrough pipeline.
- Added `lsp.diagnosticsDeduplicate` setting (default: true) to control the behavior.
2026-06-01 18:04:05 +02:00
Can BölükandGitHub 3106cf6240 Merge pull request #1598 from ForeverYoungPp/fix/acp-mcp-tool-activation
fix(coding-agent/acp): MCP tools registered but never activated for ACP sessions
2026-06-01 18:30:20 +03:00
Can BölükandGitHub afc8d7ffd3 Merge pull request #1524 from can1357/farm/ad674fba/fix-claude-subdir-commands
fix(coding-agent): resolve Claude subdirectory slash commands
2026-06-01 18:24:56 +03:00
Can BölükandGitHub a0836b6687 Fix Claude Code command discovery and eval timeout behavior
Fixed the Claude Code slash command discovery to load subdirectory commands recursively and added namespace aliases for colon-namespaced workflows. Updated the timeout behavior for the eval tool to better handle cell execution without premature termination.
2026-06-01 17:24:09 +02:00
Can BölükandGitHub be022d8a89 Merge branch 'main' into farm/ad674fba/fix-claude-subdir-commands 2026-06-01 18:23:10 +03:00
Can BölükandGitHub 811d2d94ed Merge pull request #1529 from can1357/farm/a22ef9df/raise-discovered-model-max-tokens
fix(coding-agent): raised auto-discovered model maxTokens cap to 32K
2026-06-01 18:22:38 +03:00
Can BölükandGitHub 112602cda3 Merge branch 'main' into farm/a22ef9df/raise-discovered-model-max-tokens 2026-06-01 18:22:11 +03:00
Can BölükandGitHub b2175bf581 Merge pull request #1555 from can1357/farm/aeb6ba9d/make-indicator-glyphs-and-colorizing-con
feat(theme): make spinner frames overridable per custom theme
2026-06-01 18:21:11 +03:00
Can BölükandGitHub 164ecbe2e0 Merge pull request #1619 from can1357/farm/f5ca35c4/prevent-overlimit-prompts
fix(agent): compact before oversized prompts
2026-06-01 18:19:27 +03:00
can1357 dbd9489010 refactor(eval): changed timeout from inactivity to wall-clock budget
- Only bridge heartbeats (`agent()`/`llm()`) now re-arm the watchdog; compute, stdout, `log()`/`phase()`, and ordinary tool calls count against the budget.
- Emitted an immediate heartbeat at bridge call start to avoid early abort near budget edge.
- Removed `idle` flag and "of inactivity" suffix from timeout annotation strings.
- Updated docs, prompts, and comments to reflect the new wall-clock semantics.
2026-06-01 17:17:00 +02:00
Can BölükandGitHub c7923e77eb Merge pull request #1577 from shoucandanghehe/feat/assistant-thinking-renderer
feat(coding-agent): add assistant thinking renderers
2026-06-01 18:16:50 +03:00
Can BölükandGitHub 52a29e5df5 Merge branch 'main' into feat/assistant-thinking-renderer 2026-06-01 18:16:42 +03:00
Can BölükandGitHub 649f5993c7 Merge pull request #1629 from rimless-casualty/fix-ask-option-descriptions
Improve ask option rendering
2026-06-01 18:15:17 +03:00
Can BölükandGitHub 890d63fdb1 Merge branch 'main' into fix-ask-option-descriptions 2026-06-01 18:14:42 +03:00
Can BölükandGitHub 2c9bb3d6eb Merge pull request #1631 from ephraimduncan/fix/anthropic-oauth-claude-code-scopes
fix(ai/anthropic): request current Claude Code OAuth scopes
2026-06-01 18:12:56 +03:00
can1357 e18e4ada71 fix(eval): keep idle watchdog armed during in-flight agent()/llm() calls
The per-cell `timeout` is an inactivity budget that only re-arms on status
events, but host-side bridge calls can run long stretches with no
intermediate status (a subagent's time-to-first-token on a reasoning
model, a long quiet nested tool, or an entire oneshot llm() request).
The watchdog mistook that for a stall and aborted working subagents
mid-flight.

Pump a lightweight heartbeat while a bridge call awaits, re-arming the
watchdog through the existing emitStatus -> onStatus channel. The
heartbeat is a pure keepalive: forwarded to bump the timer but never
stored or rendered, so a genuinely stalled cell is still interrupted
once the call settles.

- eval/heartbeat.ts: withBridgeHeartbeat() + EVAL_HEARTBEAT_OP
- agent-bridge/llm-bridge: wrap runSubprocess / completeSimple
- js+py executors: forward heartbeat to onStatus, drop from displayOutputs
- tools/eval.ts: bump on heartbeat, skip persist/render
2026-06-01 16:38:32 +02:00
can1357 9b5677ea7a chore: bump models 2026-06-01 16:17:11 +02:00
can1357 f9d094de60 perf(coding-agent): aligned spinner and shimmer animations to the TUI 60fps render interval
- Tool execution now renders every 16ms and advances spinner glyphs only every 80ms using a tracked last-advance timestamp.
- Output block shimmer ticks were reduced to 16ms so border-frame updates align with the 60fps cadence for smoother animation.
2026-06-01 16:07:54 +02:00
can1357 da58949320 chore: bump version to 15.7.5 2026-06-01 15:04:12 +02:00
can1357 a814706740 fix(tui): avoided destructive history rebuild when transcript fits viewport
- Added an early `viewportRepaint` path when `nativeViewportAtBottom` is unavailable and `newLines.length <= height`.
- Marked native scrollback dirty before returning that repaint so cleanup is deferred to the next checkpoint.
- Kept the `historyRebuild` fallback for shrinks beyond the padded viewport top to avoid unnecessary repainting.
2026-06-01 15:03:42 +02:00
can1357 ff2de07e78 test(coding-agent): added workspaceTree fixture to system prompt tests
- Introduced helper `createEmptyWorkspaceTree` to reduce duplication.
- Populated missing `workspaceTree` field in test contexts for `buildSystemPrompt`.
2026-06-01 14:43:12 +02:00
can1357 e78b66fc6f test(coding-agent): updated fixtures with missing ui and context mocks
- Added `setEagerNativeScrollbackRebuild` mock to `ui` objects in test fixtures.
- Added `pendingTools` map to context fixtures missing it.
2026-06-01 14:42:58 +02:00
can1357 0c6c6fb92f Merge remote-tracking branch 'origin/farm/5636bafd/dedupe-streaming-assistant-tail' 2026-06-01 14:39:34 +02:00
can1357 77d417f706 Merge remote-tracking branch 'origin/farm/b84f19f4/mcp-reconnect-backoff' 2026-06-01 14:38:37 +02:00
can1357 d90136446c Merge remote-tracking branch 'origin/farm/e3c29949/respect-local-stream-timeout' 2026-06-01 14:38:11 +02:00
can1357 f1237131bd Merge remote-tracking branch 'origin/farm/59c71bcd/isolate-tiny-model-process' 2026-06-01 14:37:59 +02:00
can1357 b37c20cb10 Merge remote-tracking branch 'origin/farm/55028c01/local-plan-md-unreachable-macos' 2026-06-01 14:37:35 +02:00
can1357 72cf371b9d Merge remote-tracking branch 'origin/farm/f30c73d1/demote-subagent-abort-log' 2026-06-01 14:37:10 +02:00
can1357 6a63b17711 Merge remote-tracking branch 'origin/farm/cdb7e4ab/fix-find-renderer-string-paths' 2026-06-01 14:36:57 +02:00
can1357 0c0d7f8695 Merge remote-tracking branch 'origin/farm/def983c0/tui-no-erase-scrollback-on-modern-terms' 2026-06-01 14:36:43 +02:00
can1357 8a41264745 feat(ai): added Anthropic task budget support via output_config
- Added `TokenTaskBudget` type and `taskBudget` option to `StreamOptions`.
- Forwarded `taskBudget` as `output_config.task_budget` with the `task-budgets-2026-03-13` beta header.
- Fixed `disableThinkingIfToolChoiceForced` to preserve `task_budget` when clearing `effort`.
- Accepted `output_config.task_budget` from Anthropic gateway requests.
2026-06-01 14:35:43 +02:00
roboomp ca7b0b63db fix(tui): suppressed native viewport probe under Windows Terminal
When omp runs under Windows Terminal on native Windows, ConPTY routes the
console through a pseudo-console whose GetConsoleScreenBufferInfo answer
is always pinned to the buffer tail; it does not reflect the user's
scroll position in the WT pane. The renderer's planRender used that
answer to authorize the shrink-across-viewport historyRebuild intent,
emitting the destructive \x1b[2J\x1b[H\x1b[3J on every full redraw and
yanking a scrolled-up reader to the top of WT's scrollback.

ProcessTerminal.isNativeViewportAtBottom now returns undefined whenever
WT_SESSION is set, matching the POSIX fallback. The renderer's existing
unknown-viewport deferral keeps streaming-time mutations non-destructive
(viewportRepaint / deferredShrink) and reconciles native history at the
next prompt-submit checkpoint via refreshNativeScrollbackIfDirty({
allowUnknownViewport: true }), where the user is provably at the bottom.

The probe gate is factored into a pure shouldTrustNativeViewportProbe
helper so the contract is unit-testable without spying on process state.

Fixes #1635
2026-06-01 11:35:13 +00:00
roboomp 73102d20df fix(coding-agent): routed local:// reads through the calling session
- Extended ResolveContext / WriteContext with localProtocolOptions so the
  internal-URL router can thread the calling session's local-root mapping
  through to handlers.
- LocalProtocolHandler.resolveOptions now prefers context.localProtocolOptions
  before consulting the process-global override or the first main-kind session
  in AgentRegistry, fixing multi-session ACP hosts (cmux) where reads of
  local://PLAN.md were routing to a sibling session's artifacts dir even
  though plan-mode writes succeeded against the calling session.
- read, find, ast_grep, ast_edit, and search now thread
  this.session.localProtocolOptions into the router so local://, memory://,
  agent://, and other handlers see the right caller.
- Added regression tests covering the override-vs-context priority and the
  ENOENT-against-caller-root path.

Fixes #1608
2026-06-01 11:27:14 +00:00
rimless-casualty 8dfdf27af7 Cap outlined ask selector by wrapped rows 2026-06-01 19:04:27 +08:00
ephraimduncan c57d0f6aeb fix(ai/anthropic): request current Claude Code OAuth scopes
The Anthropic OAuth login requested an outdated scope set (`org:create_api_key user:profile user:inference`). Recent Claude Code versions request `user:profile user:inference user:sessions:claude_code user:mcp_servers user:file_upload`, so omp's consent screen omitted the Claude Code session, connector (MCP), and file-upload grants the current client carries.

omp uses the OAuth access token (sk-ant-oat...) directly for inference and never mints an API key, so `org:create_api_key` was unused. Drop it and align with the current Claude Code scope set.
2026-06-01 10:19:10 +00:00
rimless-casualty f7b157675c Count ask option descriptions in selector height 2026-06-01 17:58:49 +08:00
rimless-casualty 3c7d50d292 Improve ask option rendering 2026-06-01 17:37:26 +08:00