Commit Graph
5864 Commits
Author SHA1 Message Date
Brit e71d2ff49e fix: detect content rewrites in syncMessages, reset append-only cache on model switch 2026-05-24 22:39:20 +02:00
Brit 648bbdc163 fix(agent): passed AbortSignal to transformContext and re-evaluated append-only on model switch 2026-05-24 22:28:38 +02:00
Brit ee04dd8e21 chore: bun check 2026-05-24 22:17:15 +02:00
Brit 2a86049f0f feat(agent): add append-only context mode for DeepSeek prefix-cache stability
ImmutablePrefix caches system prompt + tool specs after first build()
so subsequent turns reuse identical byte sequences. AppendOnlyLog
converts messages once via syncMessages() and only appends deltas
on further turns — prior-turn bytes stay stable.

- New module: packages/agent/src/append-only-context.ts
  StablePrefix, AppendOnlyLog, AppendOnlyContextManager
- AppendOnlyContextManager added to AgentLoopConfig
- Wired into streamAssistantResponse in agent-loop.ts
- Toggleable via provider.appendOnlyContext setting (auto/on/off)
- Default auto enables for deepseek provider
- 38 tests covering prefix, log, sync, compaction handling
- /session info surfaces current active state
2026-05-24 22:08:53 +02:00
Can Bölük 3b072a10b9 Merge remote-tracking branch 'origin/farm/a46597ca/clipboard-image-paste-ctrl-v-silently-fa' 2026-05-22 22:40:03 +09:00
roboomp 00233b24fa style: bun run fix 2026-05-22 09:47:52 +00:00
roboomp 8f83cbd9a9 fix(clipboard): route image reads through powershell.exe on WSL
WSLg exposes WAYLAND_DISPLAY, so readImageFromClipboard() took the
native arboard path on WSL2. arboard::Clipboard::get_image() returns
ContentNotAvailable on WSLg because the Wayland clipboard does not
carry image payloads from the Windows clipboard, and that surfaced as
silent 'No image in clipboard' on Ctrl+V.

Detect WSL via WSL_DISTRO_NAME / WSL_INTEROP and read the image with a
PowerShell one-liner that emits base64-encoded PNG bytes from
[System.Windows.Forms.Clipboard]::GetImage(). Fall back to the native
bridge when PowerShell returns nothing, exits non-zero, or is missing,
so non-WSLg Wayland setups continue working unchanged.

Fixes #1280
2026-05-22 09:47:47 +00:00
can1357 6ca92dd08d test(coding-agent): increased bash abort test timeout and runtime
- Extended the abort scenario shell command from a 5-second sleep to 60 seconds.
- Raised the corresponding test timeout to 15,000 ms for the abort test case.
2026-05-22 18:06:50 +09:00
can1357 e6c08c1155 chore: bump version to 15.2.4 2026-05-22 17:48:11 +09:00
can1357andCan Bölük ebd2f77770 feat: implemented canonical § hashlines with ≔/""/" ops in hashline parser
- Changed hashline format to canonical `§` section headers and `"`/`"`/`≔` operations across grammar, parser, and docs.
- Reworked range and op parsing so single anchors are valid, legacy `-`/`-=` ops error, and empty `≔` payloads now delete ranges.
- Removed legacy `HL_EDIT_SEP`, `$HSEP$`, and `hsep` plumbing, adopting raw payload lines.
- Updated execution, input, renderer, and streaming flows to use `HL_FILE_PREFIX` and `HL_OP_CHARS` helpers.
- Updated session-stats parsing to `§`/`≔`/`"`/`"` format, patch envelopes, and bumped parser versions.
- Removed the hashline-separator benchmark script and its PI_HL_SEP job orchestration.
2026-05-22 17:46:53 +09:00
can1357andCan Bölük f29e733b67 refactor(coding-agent/modes): reorganized working-message hints in modes
- Added a shared `interruptHint()` utility in the modes shared module to generate the interrupt suffix with themed bracket glyphs.
- Replaced hardcoded working-message interrupt text in interactive and event controllers with calls to `interruptHint()`.
- Updated working-message rendering to recognize and strip the new themed hint when applying shimmer styling.
2026-05-22 17:44:20 +09:00
can1357 cac98df6d7 fix(ai): mapped Fireworks reasoning effort to provider-supported literal
- Updated OpenAI completions compatibility logic to translate a disabled-reasoning `minimal` effort to `none` for Fireworks endpoints.
- Added a Fireworks-specific test confirming the disableReasoning payload uses `reasoning_effort: "none"`.
- Refactored the disable-reasoning tests to reuse a shared request-payload capture helper.
2026-05-22 16:06:33 +09:00
can1357 21280fcb85 test(ai): adjusted issue-1270 repro test token endpoint mocks
- Added constants for OAuth and metadata token endpoints in the Vertex AI repro test.
- Expanded the fetch mock in the issue #1270 test to return tokens for either token endpoint, accommodating different ADC environments.
2026-05-22 15:53:56 +09:00
can1357andCan Bölük 2ebb55134e fix(coding-agent): adjusted reasoning-disable handling and title generation for reasoned models
- Updated OpenAI completions parameterization to honor `disableReasoning` on effort-based compatible models by sending the minimum supported effort.
- Expanded commit and title generation token budgets so reasoning models can return output after internal thinking while non-reasoning calls keep existing limits.
- Switched title generation to request a `set_title` tool call, added extraction from tool-call arguments, and updated tests for the new behavior.
2026-05-22 15:51:32 +09:00
can1357 3e21ab8980 fix(coding-agent/modes): applied working-message accent to interactive spinner
- Updated interactive mode to render the loader spinner with the current working message accent when available.
- Added a fallback to theme accent and a reset color code when no working-message accent is provided.
2026-05-22 15:48:14 +09:00
Can Bölük 3868c3234b Merge remote-tracking branch 'origin/farm/0f01bcdc/chatgpt-plus-pro-codex-subscription-auth' 2026-05-22 15:42:02 +09:00
can1357 4ada748c61 feat(modes): added ANSI-capable shimmer accents to loading messages
- Loading message rendering now derived session-specific accent colors and applied them to shimmer output when a session name was available.
- Shimmer palettes were updated to accept raw ANSI color values as well as theme color names during compilation.
- A unit test was added to confirm shimmer text rendered with a supplied ANSI crest color.
2026-05-22 15:40:58 +09:00
roboomp c246d88dbb fix(ai): prevent Codex OAuth 403 from port-fallback redirect_uri mismatch
- OpenAICodexOAuthFlow now passes a fixed redirectUri option to
  OAuthCallbackFlow, preventing the silent fallback to a random port.
  OpenAI's /oauth/authorize accepts any localhost redirect URI (loose
  validation), so the browser callback could succeed even on a non-1455
  port; but /oauth/token rejects it with 403 because the port is not
  in the registered allowlist. The fix surfaces port conflicts as an
  immediate actionable error instead.
- exchangeCodeForToken now reads the 403 response body (error /
  error_description) and includes it in the thrown message, matching
  the existing refreshOpenAICodexToken error handling.
- Added loginOpenAICodexDevice (openai-codex-device provider): device-
  code flow via /api/accounts/deviceauth/usercode + polling, avoiding a
  local callback server entirely. Credentials are stored under the
  existing 'openai-codex' key so no model or tooling reconfiguration is
  needed. Useful when port 1455 is unavailable or the browser flow is
  blocked by network/proxy.

Fixes #1277
2026-05-22 04:47:46 +00:00
can1357 3ecfac846c chore: bump version to 15.2.3 2026-05-22 13:34:49 +09:00
can1357 a13c9bf6fc feat(coding-agent): added SettingsList#setItems with clamped selection
- Added SettingsList#setItems to replace items and clamp selection to a valid index after updates.
- Updated SettingsSelector to rebuild active memory items on backend changes and skip refresh when appropriate.
- Switched MCP wizard and command spinners to theme frames with themed initial frame and 80ms updates.
- Reworked welcome intro animation for a 3-second eased sweep with optional shine blending.
- Added memory backend refresh tests and aligned package changelogs with the updated behavior.
2026-05-22 13:19:35 +09:00
can1357andCan Bölük 796f963da9 feat(coding-agent): added coding-agent follow-up queue with onBeforeYield
- Added optional `onBeforeYield` configuration and `setOnBeforeYield` in Agent, executed before follow-up checks.
- Added `YieldQueue` to `AgentSession`, with setup/teardown and streaming/idle flush via `setOnBeforeYield`.
- Replaced immediate async-result follow-up dispatch with queued batch entries, including stale-state suppression.
- Added MCP follow-up queueing in SDK, deduplicating updates by `serverName` and `uri`.
- Added changelog entries for `onBeforeYield`, async-result batching, MCP dedupe, and `display.shimmer` modes.
- Added yield queue unit tests for streaming emission, debounced idle batches, stale filtering, and error isolation.
2026-05-22 13:08:51 +09:00
can1357 e39b48c405 feat(coding-agent): added shimmer modes and tuned loader timing cadence
- Added `display.shimmer` setting (`classic`, `kitt`, `disabled`) with default `classic` and UI metadata.
- Added shimmer mode resolution with defaulting plus classic/KITT intensity tier profiles and thresholds.
- Added `getFgAnsi` handling across shimmer compilation and progress-bar themes, with fallback ANSI output defaults.
- Reworked shimmer rendering to coalesce same-tier segments, cache palettes by symbol, and map disabled mode to mid-tier.
- Tuned loader timing to a 16ms render interval and 80ms spinner stepping for smoother ~60fps updates.
2026-05-22 13:03:03 +09:00
can1357 1228c96959 feat(coding-agent): added worktree list/clear CLI with orphan pruning
- Added the new `omp worktree` (`wt`) command with `list|clear`, `all/dry-run/json` options, and CLI registration.
- Added `listWorktrees`/`clearWorktrees` flows that scan worktrees, classify orphaned entries, emit JSON, and call `worktree.prune`.
- Replaced legacy path encoding with `hashPath` via `getWorktreeDir`, updating task isolation, storage keys, and PR checkout paths.
- Added bounded PR worktree path retries before `git worktree add` and updated checkout-path tests for hashed names.
2026-05-22 12:47:13 +09:00
can1357 cf94ded9d3 chore: bump version to 15.2.2 2026-05-22 11:29:03 +09:00
Can Bölük 4280f67ea8 Merge remote-tracking branch 'origin/farm/09bef25d/429-rate-limit-for-250k-token-min-trigge' 2026-05-22 11:28:36 +09:00
Can Bölük b66fd61b51 Merge remote-tracking branch 'origin/farm/b71ca8c7/cloud-code-assist-api-error-antigravity-' 2026-05-22 11:28:24 +09:00
Can Bölük 5da20dbda9 Merge remote-tracking branch 'origin/farm/64aed46f/404-error-when-calling-gemini-model-via-' 2026-05-22 11:28:13 +09:00
Can Bölük cb032371c3 Merge remote-tracking branch 'origin/farm/8f673404/rules-md-does-not-seem-to-be-injected' 2026-05-22 11:27:51 +09:00
Can Bölük 8e7a46588b Merge remote-tracking branch 'origin/farm/488a64b7/browser-stealth-script-crashes-when-docu' 2026-05-22 11:27:05 +09:00
roboomp 00179413cb chore: update lockfile after bun install 2026-05-22 00:34:14 +00:00
roboomp 312d8d1e5d fix(providers): injected ANTIGRAVITY_SYSTEM_INSTRUCTION for gemini-3.1 models
shouldInjectAntigravitySystemInstruction checked for the string
"gemini-3-pro-high" (hyphen) but the deployed model IDs are
"gemini-3.1-pro-high" and "gemini-3.1-pro-low" (dot-versioned).
String.includes() never matched, so the required identity header was
silently omitted and Cloud Code Assist returned HTTP 400 for every
request targeting these models.

Broadened the guard to match.includes("gemini-3"), consistent with
the existing isGemini3Model convention in google-shared.ts, covering
all current and future Gemini 3.x variants on the antigravity provider.

Fixes #1274
2026-05-22 00:33:48 +00:00
roboomp b5b723a135 fix(ai): used Vertex global endpoint host
Route Vertex AI requests with location=global through aiplatform.googleapis.com instead of the invalid global-aiplatform regional host.

Fixes #1270
2026-05-21 17:42:27 +00:00
roboomp 1a279bba88 fix(browser): handled null head in stealth bootstrap
Appended the stealth iframe to documentElement when document.head is not available during new-document evaluation.

Added regression coverage for the null-head bootstrap path.

Fixes #1267
2026-05-21 15:43:02 +00:00
roboomp 2b9eaee0b5 style: bun run fix 2026-05-21 15:42:33 +00:00
roboomp 1be2ead968 fix(discovery): load top-level RULES.md as sticky always-apply rule
The native rule discovery provider only scanned the rules/ subdirectory under .omp/ and ~/.omp/agent/. The documented top-level RULES.md file (per https://omp.sh/docs/context-files) was silently ignored — neither ~/.omp/agent/RULES.md nor <repo>/.omp/RULES.md was ever read.

Load both as synthetic rules with alwaysApply forced to true (the whole point of RULES.md is to be reattached every turn). Project scope walks up from cwd to repoRoot using the same nearest-.omp/ search AGENTS.md uses.

Fixes #1266
2026-05-21 15:42:27 +00:00
roboomp 1b6ef3b5dc fix(coding-agent): respected google retry hints
Parsed provider retry hint text before falling back to quota cooldowns so Google per-minute token limits use the server-provided delay.

Fixes #1253
2026-05-21 09:38:43 +00:00
can1357andCan Bölük 8dc9125b0b fix(coding-agent): stabilize extension and hyperlink tests 2026-05-21 17:35:04 +09:00
Can Bölük 26b75f34f0 Merge remote-tracking branch 'origin/farm/cc636da8/repeated-400-errors-with-no-body-when-co' 2026-05-21 17:23:32 +09:00
can1357 3064bb9084 chore: bump version to 15.2.1 2026-05-21 17:15:11 +09:00
roboomp f6e999820e fix(overflow): detect context overflow in wrapped proxy 400-no-body errors
The regex in isContextOverflow used a start-of-string anchor (^) to match
the Cerebras/Mistral pattern '400/413 status code (no body)'. When the
synthetic provider (api.synthetic.new) receives a context-overflow rejection
from the upstream HF inference backend it wraps it in a JSON envelope:

  {"error": "Error from inference backend: 400 status code (no body)"}

finalizeErrorMessage then builds:

  400 status code: {"error":"Error from inference backend: 400 status code (no body)"}

The '^' anchor fails to match because the outer HTTP status is followed by
': {JSON}', not '(no body)'. Changed to '\b' so the substring match finds
the phrase anywhere in the error string.

Also fixed formatCapturedHttpError to extract the error string from
{"error": "string"} bodies instead of falling back to the raw JSON.

Fixes #1251
2026-05-21 08:14:34 +00:00
can1357 def901af5c fix(coding-agent/config): preserved runtime modelRole overrides when saving model role changes
- Added a shallow string-record sanitizer to normalize unknown model role values before applying updates.
- Updated setModelRole and overrideModelRoles to base persistence on global roles while retaining matching runtime overrides.
- Added model role override tests covering non-persistent temporary overrides, override clearing, and consistency after role updates over overrides.
2026-05-21 16:46:46 +09:00
can1357 3d96fd0d9e fix(coding-agent): fixed compaction to prefer active session model over role default
- Added the active session model to compaction candidate selection before role-based candidates.
- Updated compaction routing so role-based models are only considered after the current chat model.
- Added a regression test proving an Anthropic session prefers its active model over `modelRoles.default` on OpenAI.
2026-05-21 16:37:44 +09:00
can1357 dbd3540a31 chore: bump version to 15.2.0 2026-05-21 15:58:02 +09:00
can1357 b134d4b65c feat(coding-agent/modes): added shimmer segment rendering with palette overrides
- Added configurable shimmer palettes by introducing ShimmerPalette and ShimmerSegment types.
- Added a new shimmerSegments helper to render a single sweep across multiple text segments with optional per-segment palettes.
- Updated working-message rendering to style the interrupt hint using a separate borderAccent palette.
2026-05-21 15:57:38 +09:00
can1357 e5d38f0832 fix(ai): persisted broker auth writes via remote credential endpoints
- Added remote-write hooks to `AuthCredentialStore` and routed `AuthStorage` set/upsert/remove flows through them when present.
- Implemented `RemoteAuthCredentialStore` methods to upsert, replace, and delete credentials via broker endpoints and refresh local snapshots in-place.
- Added integration coverage for broker-backed API-key replacement and provider logout disabling all remote credentials.
2026-05-21 15:57:32 +09:00
can1357 319909c0ee chore: reformat 2026-05-21 15:52:55 +09:00
Can Bölük 68dc6e3ace Merge remote-tracking branch 'origin/farm/ebb932bf/emit-osc-8-hyperlinks-around-file-paths-' 2026-05-21 15:50:56 +09:00
can1357 dca24b61b1 feat(coding-agent): added shimmer animations to loader and progress bars
- Added a new shimmerText helper that computes a moving accent shimmer band across characters.
- Updated the interactive mode loader and slash-command ASCII bar renderer to use shimmer styling, with interrupt hints kept dim.
- Added tests for shimmer-enabled progress rendering and verified the visible bar output remains correct.
2026-05-21 15:47:45 +09:00
roboomp eb314025f7 fix(tui): hyperlinks for fs-backed internal URLs and root-level grouped files 2026-05-21 06:44:58 +00:00
Can Bölük 4c0e70da03 Merge remote-tracking branch 'origin/farm/061c0c9d/goal-behavior-is-erratic' 2026-05-21 15:29:24 +09:00