Commit Graph

16003 Commits

Author SHA1 Message Date
can1357 e824d06dd6 docs(changelog): added entries for #7593 session-migration fix and #7415 fuzzy-find bound 2026-08-05 01:15:31 +02:00
can1357 34ecb4a107 chore(changelog): normalized unreleased entries after merges 2026-08-05 01:13:13 +02:00
can1357 89931e109a fix(session): preserve colliding legacy sessions 2026-08-05 01:12:54 +02:00
can1357 350b85e26c test(coding-agent): drop unrelated schema repro churn 2026-08-05 01:12:02 +02:00
can1357 94c838faea Merge PR #7539: fix(coding-agent): complete usage-aware fallback integration (@eggpeat) 2026-08-05 01:12:02 +02:00
can1357 9a9c3b1541 Merge PR #7589: refactor(ai): isolate SQLite credential store (@metaphorics) 2026-08-05 01:12:02 +02:00
can1357 6da9460dff Merge PR #7488: fix(task): bound abort cleanup and quarantine late jobs (@metaphorics) 2026-08-05 01:12:02 +02:00
can1357 ae1c9c981d test(coding-agent): make coalescing tests deterministic 2026-08-05 01:12:02 +02:00
can1357 783739e618 Merge PR #7542: fix(coding-agent): coalesce streaming message_update handler work per render window (#7443) (@szavadsky) 2026-08-05 01:12:01 +02:00
can1357 18e6df18a6 Merge PR #7621: fix(coding-agent/eval): remove per-call model override from agent() (@szavadsky) 2026-08-05 01:12:01 +02:00
can1357 d53d5c0035 fix(coding-agent): scope hindsight memory errors to caller 2026-08-05 01:12:01 +02:00
can1357 403535d2a9 Merge PR #7588: fix(coding-agent): corrective memory:// error under hindsight backend (@roboomp) 2026-08-05 01:12:01 +02:00
can1357 d48977f380 Merge PR #7570: fix(coding-agent/hindsight): route recall through single injection path (@roboomp) 2026-08-05 01:12:00 +02:00
can1357 975d0a2e9d Merge PR #7501: fix(agent): classify thinking-only unexpected stops (@roboomp) 2026-08-05 01:12:00 +02:00
can1357 0cf5d55ac0 Merge PR #7629: fix(coding-agent): retry buffered print streams (@roboomp) 2026-08-05 01:12:00 +02:00
can1357 43666b3b1a fix(cli): follow promise resolver convention 2026-08-05 01:11:59 +02:00
can1357 e4684325a3 Merge PR #7637: fix(cli): flush final json record before print-mode exit (@roboomp) 2026-08-05 01:11:59 +02:00
can1357 130d3318c8 test(coding-agent): update observer registry stubs 2026-08-05 01:11:59 +02:00
can1357 772fe8fa6e Merge PR #7500: perf(agent-hub): bound roster rendering to viewport (@hancens1024) 2026-08-05 01:11:59 +02:00
can1357 b0984cd25c Merge PR #7598: fix(coding-agent): split semicolon path lists that trip ENAMETOOLONG (@roboomp) 2026-08-05 01:11:59 +02:00
can1357 abc628b63c fix(read): expose artifact source line totals 2026-08-05 01:11:59 +02:00
can1357 a0f203bfd4 Merge PR #7592: fix(cursor): correct inline read range metadata (@roboomp) 2026-08-05 01:11:58 +02:00
can1357 191d7f4051 fix(stats): reclaim insecure wildcard dashboards 2026-08-05 01:11:58 +02:00
can1357 a66805bd78 Merge PR #7634: fix(stats): restrict dashboard to loopback (@roboomp) 2026-08-05 01:11:58 +02:00
can1357 e50b989e45 Merge PR #7654: fix(mcp): propagate enabled flag from translated tool configs (@roboomp) 2026-08-05 01:11:57 +02:00
can1357 511b200bc5 Merge PR #7584: fix(config): read server input modalities in openai-models-list discovery (@roboomp) 2026-08-05 01:11:57 +02:00
can1357 4da44c5492 Merge PR #7604: fix(browser): honor explicit Chromium executable override (@roboomp) 2026-08-05 01:11:57 +02:00
can1357 c14bd77707 Merge PR #7611: fix(coding-agent): restore legacy convertToPng export (@roboomp) 2026-08-05 01:11:57 +02:00
can1357 46a0332614 docs(coding-agent): note Herdr launcher fix 2026-08-05 01:11:57 +02:00
can1357 0998f29da5 Merge PR #7554: fix(cli): preserve OMP identity inside Herdr (@jessemcnew) 2026-08-05 01:11:56 +02:00
can1357 2605243f38 fix: complete version comparator centralization 2026-08-05 01:11:56 +02:00
can1357 84fc295f0c Merge PR #7586: refactor: centralize version comparison in pi-utils (@metaphorics) 2026-08-05 01:11:56 +02:00
can1357 43642a1a00 docs(utils): note PATH-aware lookup caching 2026-08-05 01:11:56 +02:00
can1357 e76d998c01 Merge PR #7498: fix(utils): honor current PATH in cached lookups (@usr-bin-roygbiv) 2026-08-05 01:11:56 +02:00
can1357 40d47b557f Merge PR #7580: fix(tui): run sixel probe under WSL + Windows Terminal (@roboomp) 2026-08-05 01:11:56 +02:00
can1357 2eea289648 Merge PR #7576: fix(tui): terminate wrapped table cell lines' SGR state so borders keep default color (@miaopan607) 2026-08-05 01:11:56 +02:00
can1357 ca71858545 Merge PR #7497: fix(tool): exempt piped-stdin stages from bash interceptor (@roboomp) 2026-08-05 01:11:55 +02:00
can1357 bec5c74c87 Merge PR #7649: fix(omptype): emit postfix bound for min-only numeric typebox schemas (@roboomp) 2026-08-05 01:11:55 +02:00
can1357 13d9a09999 Merge PR #7612: chore(ts): enforce noImplicitOverride (@metaphorics) 2026-08-05 01:11:31 +02:00
Slava Zavadsky 326fb24367 fix(coding-agent): chain every queued dispatch onto the current tail
The previous #runSerialized waited on the shared #dispatchTail, then ran
unconditionally: when two or more events queued behind an in-flight run,
each resumed from the same settled await and started its own run in
parallel, defeating the ordering guarantee for a burst landing in one
coalescing window (message_end + agent_end behind a suspended flush).

Each waiter now chains its own link onto the current tail
(tail.then(run, run)), so queued runs start strictly one after another;
the idle path still runs synchronously, preserving the flush timing the
coalescing tests assert on. The in-flight flag clears only when the
settling link is still the tail, so a later chained link's settle does
not clear it early.

Regression test: two message_end events queued behind a suspended window
flush stay serialized (init call count steps 1 -> 2 -> 3 as each gate
opens); fails on the previous implementation.
2026-08-04 17:42:54 -04:00
Slava Zavadsky 72a6654572 Merge remote-tracking branch 'upstream/main' into fix/7443-streaming-message-update-coalesce 2026-08-04 17:41:15 -04:00
Can Bölük 36830e3d05 Merge pull request #7645 from psamwel77/fix/bedrock-govcloud-us-gov-catalog
fix(catalog): emit AWS GovCloud us-gov Bedrock Claude inference profiles
2026-08-04 23:16:46 +02:00
Can Bölük 02ae28aecb Merge pull request #7651 from lederniermagicien/fix/copilot-fleet-skew-400
fix(ai): retry GitHub Copilot fleet-skew model 400s
2026-08-04 23:15:49 +02:00
roboomp 9f92d36425 fix(mcp): ordered project entries before user in translated importers
The Claude/Cursor/Gemini/Windsurf importers appended user entries before
project entries, so a project `enabled: false` could not claim its dedupe key
ahead of a same-named user server and the disable was silently ignored. Load
project entries first, matching the native/Codex loaders, so a project disable
suppresses a same-named user server.

Updated docs/mcp-config.md to reflect the project-first precedence and added
compound regression coverage.

Fixes #7652
2026-08-04 21:14:11 +00:00
roboomp 172ce9bf6c revert(session): restored legacy project directory names
Reverted PR #7397 session directory hashing and automatic migration.

Restored existing script compatibility with the legacy cwd-derived naming scheme.

Fixes #7646
2026-08-04 21:10:54 +00:00
roboomp 73d3076d14 test(mcp): isolated translated importer home configs
Set HOME and os.homedir() to a dedicated temporary directory for each translated-provider fixture, then restore both after every test. This prevents real user MCP configs from shadowing the project fixture through capability deduplication.
2026-08-04 21:03:19 +00:00
Slava Zavadsky 76f04c4c77 fix(coding-agent/eval): reject legacy model kwarg in Julia agent() prelude
Python/Ruby raise on the removed keyword via their keyword-only
signatures; the Julia helper's kwargs... catch-all silently swallowed
agent("..."; model="default") and forwarded it to the bridge, where
the "+": "delete" strip discarded it. A caller could keep thinking a
model override was honored. Reject model loudly, matching the strict
removal decision on #7621.
2026-08-04 17:03:04 -04:00
roboomp b872e51e6f fix(mcp): propagate enabled flag from translated tool configs
The Claude Code, Cursor, Gemini CLI, Windsurf, and VS Code importers built
their canonical MCPServer object without mapping serverConfig.enabled, so a
server declared with "enabled": false stayed undefined and the central
suppressServer filter never fired. Only disabledServers masked the gap.

Map the field in each importer, mirroring opencode.ts and codex.ts, and add
a table-driven regression test across all five importers.

Fixes #7652
2026-08-04 20:57:47 +00:00
Magicien f3ad5ede6b fix(ai): scope the Copilot 8-attempt retry budget to model flaps
The 3 -> 8 bump in callWithCopilotModelRetry was shared by the generic
retryable branch, so a persistent status-less transport blip on Copilot
would ramp across 8 attempts (~11.2s of dead time) instead of the 3 it
took before, and a repeated Retry-After 429 could stretch the same way
on top of the transport's own fetchWithRetry budget.

Derive the budget from the failure kind: model-availability 400s keep the
8-attempt reroll, everything else caps at the previous 3.

Also read COPILOT_TRANSIENT_MODEL_CODES with Object.hasOwn — `code` is
provider-controlled, so a 400 body whose code was `__proto__` or
`toString` classified as transient through the prototype chain.
2026-08-04 21:51:35 +01:00
Magicien d33f2a1658 fix(ai): retry GitHub Copilot fleet-skew model 400s
Any Copilot model in the middle of a rollout (claude-sonnet-4.6,
claude-opus-4.6, gpt-5.4, gpt-5.3-codex, ...) returned a raw HTTP 400 on
roughly half of all turns. GET /models on api.githubcopilot.com returns
two different catalogs across repeated calls: part of the fleet serves
those ids, part rejects them with

  400 {"error":{"message":"The requested model is not available for
  integrator \"copilot-language-server\". ...",
  "code":"model_not_available_for_integrator", ...}}

The absorb machinery already existed and was correct
(isCopilotTransientModelError -> isProviderRetryableError -> the
Anthropic transport's PROVIDER_MAX_RETRIES). Only the classifier missed:
it matched the older model_not_supported code and probed err.code /
err.error.code, while the real code is model_not_available_for_integrator
sitting at err.error.error.code (the SDK stores the parsed body on
.error, and Copilot's body is itself {error:{code}}). So
isProviderRetryableError fell through to "4xx => terminal".

Fix the classifier: providerErrorCode() walks the error envelope up to
depth 3 instead of hardcoding a shape, both Copilot model-availability
codes are accepted, and a wire-body text match backs it up because SDK
envelope shapes drift between provider families while the stringified
message does not. This alone restores the retry path, because
isProviderRetryableError consults the provider hook before its
4xx short-circuit.

Retry shape, since a rejection is a per-request replica reroll rather
than upstream backpressure:

- both transports wait a flat delay between model-flap attempts instead
  of the growing backoff; generic retryable failures (429/5xx/transport)
  keep their linear ramp and Retry-After handling
- the OpenAI-transport budget goes 3 -> 8 attempts, because a measured
  ~70% flap window produced a turn that needed 6 wire attempts and
  exhausting the budget escalates to the agent-level retry, which
  restarts the whole turn

Absorbed attempts cost no tokens: rejections are gateway-side, carry no
usage block, and return in ~208ms median versus ~1884ms for a served
request.

Also refresh the exhausted-retry guidance text, which cited a
nonexistent model id and described the cause as a per-client rollout gap
rather than fleet skew.
2026-08-04 21:45:44 +01:00