Commit Graph
5519 Commits
Author SHA1 Message Date
can1357 e912efaa79 Merge PR #6226: fix(session): skip stop hooks during aborts (@roboomp) 2026-07-22 21:13:15 +02:00
can1357 6542641ad8 Merge PR #6253: fix(session): persist terminal empty error turns ending the run (@roboomp) 2026-07-22 21:13:14 +02:00
can1357 52236fa1a5 Merge PR #6262: fix(settings): merge global model roles per-role on save (@roboomp) 2026-07-22 21:13:14 +02:00
pr-evalandcan1357 ab8e36fa6c test(coding-agent): make prewalk no-auth test independent of runner env keys
hasAuth() consults $HOME/.env via getEnvApiKey, so a CEREBRAS_API_KEY in the
runner's home .env legitimately armed prewalk and failed the no-auth case.
Force the condition with a hasConfiguredAuth spy.
2026-07-22 21:13:14 +02:00
can1357 b6674731a0 Merge PR #6203: fix(coding-agent): keep startup alive when prewalk target lacks auth (@roboomp) 2026-07-22 21:13:14 +02:00
can1357 e49426c949 fix(cli): prefer authenticated provider for flat slashful model ids
Flat aggregator ids whose prefix collides with a provider slug (e.g.
openai/gpt-oss-120b hosted on OpenRouter) bypassed the authenticated-model
preference: the explicit-provider branch searched the full catalog only.
Keep provider/id exact references authoritative, but let the flat-id
fallback prefer authenticated providers before catalog order.
2026-07-22 21:13:14 +02:00
can1357 c74ef96263 Merge PR #6230: fix(cli): prefer authenticated provider for bare models (@roboomp) 2026-07-22 21:13:13 +02:00
can1357 ccbe190d64 fix(sdk): inherit role thinking level on startup retry fallback
A retry-chain entry without its own :level suffix now inherits the
unavailable primary's configured thinking level, matching runtime
fallback-chain semantics. Regression test asserts a level that differs
from the fallback model's default.
2026-07-22 21:13:13 +02:00
can1357 a929cde5e2 Merge PR #6285: fix(sdk): resolve missing role fallback chains (@roboomp) 2026-07-22 21:13:13 +02:00
can1357 c083170c46 Merge PR #6233: fix(sdk): resolve configured default role over cold-cache discovery race (@roboomp) 2026-07-22 21:13:13 +02:00
can1357 50ee1a7998 Merge PR #6196: fix(coding-agent): preserve compat overrides on model refresh (@roboomp) 2026-07-22 21:13:13 +02:00
can1357 45df1a0fd5 Merge PR #6286: fix(catalog): restore cached Copilot 1M models via requestModelId (@roboomp) 2026-07-22 21:13:12 +02:00
can1357 45d00ad296 Merge PR #6266: fix(catalog): union Codex models across OAuth accounts (@roboomp) 2026-07-22 21:13:12 +02:00
can1357 06f2ae96f6 Merge PR #6139: fix(ai): retry provider connection failures (@usr-bin-roygbiv) 2026-07-22 21:12:21 +02:00
roboomp b257a6dcbf fix(session): preserved startup fallback ownership
- Carried startup-selected fallback role and primary selector into AgentSession.
- Continued remaining role fallback entries after the startup fallback fails.
- Added regression coverage for chained startup failover.

Fixes #6283
2026-07-22 11:11:30 +00:00
roboomp b823c18837 fix(catalog): guarded request-model header recovery
Versioned request-header restoration metadata inside v10 cache rows so only markers written by the old id-only matcher can bypass an unrestorable marker through requestModelId. Current aliases whose live headers differ from their static base remain unresolved and are refetched or dropped.

Added catalog and startup-registry regressions for custom-header aliases while preserving legacy Copilot -1m cache recovery.

Fixes #6284
2026-07-22 11:10:23 +00:00
roboomp 79edf46158 fix(sdk): preserved suffixed role fallback lookup
- Stripped explicit thinking suffixes before recording configured role identity.
- Covered unavailable suffixed-role primaries selecting authenticated fallbacks.

Fixes #6283
2026-07-22 11:01:05 +00:00
roboomp d9bab7ce8b fix(catalog): restore cached request-model variants via requestModelId
Copilot -1m long-context variants are synthesized with transport
headers and a requestModelId to a bundled base. The v10 cache omits
headers; the writer only matched a same-id static entry, so these
variants were flagged unrestorable and dropped on the next offline
read, vanishing from the picker with a "Could not restore model"
warning. The startup registry loader dropped them the same way.

Restore/match headers through requestModelId in the cache writer, the
model-manager restore path, and the coding-agent startup loader, and
bypass a stale unrestorable marker written by the old id-only writer.

Fixes #6284
2026-07-22 10:59:10 +00:00
roboomp 093f7c2660 fix(sdk): resolved missing role fallback chains
- Carried configured role identity through deferred CLI model resolution.
- Consulted ordered authenticated role fallbacks after unavailable primaries.
- Added startup regression coverage for missing primary and fallback entries.

Fixes #6283
2026-07-22 10:52:57 +00:00
roboomp dfeaa7aed1 fix(catalog): aborted codex discovery on failed account refresh
resolveCodexDiscoveryAccounts now returns null when any stored Codex OAuth
account fails to resolve (e.g. a transient refresh failure), and the manager's
resolveAccounts callback propagates null to skip discovery. Previously a failed
account was silently dropped before unionCodexModels saw it, so the remaining
accounts were unioned and cached as the authoritative catalog, hiding the
failed account's models for the cache TTL. Aborting keeps the previous/bundled
catalog.

Add a ModelRegistry regression test with one refreshable and one failing Codex
account asserting discovery makes no /models call and bundled models survive.

Fixes #6265
2026-07-22 07:19:11 +00:00
roboomp 2eff59e060 fix(catalog): preserved codex discovery token fallback
Keep the bearer resolved by the discovery preflight when it is not among the
stored OAuth account resolutions. This preserves Codex discovery for env,
runtime/config override, and stored non-OAuth credential sources while still
unioning all configured OAuth account catalogs.

Add a ModelRegistry regression test that drives runtime-key discovery and
asserts the resolved bearer reaches the Codex models endpoint.

Fixes #6265
2026-07-22 07:08:22 +00:00
roboomp d30c5e8603 fix(settings): cleared persisted pending role writes
Serialize queued global saves and remove opportunistically persisted roles from the pending set after a successful write when their value has not changed again. This prevents a redundant follow-up save from replaying stale local values over newer external edits.

Expanded the locked-save regression to externally change the same role after the first write and verify flush leaves that newer disk value intact.
2026-07-22 04:27:25 +00:00
roboomp 640249ef33 fix(settings): preserved role writes during pending saves
Snapshot model roles when each save starts and merge any newer pending values before replacing the in-memory global settings. This keeps a second model switch intact while an earlier locked save is in flight.

Added a deterministic regression test that blocks the first file-lock operation, changes another role, and verifies both memory and disk.
2026-07-22 04:19:35 +00:00
roboomp 14a8b709cc fix(settings): merge global model roles per-role on save
Global setModelRole marked the whole modelRoles path modified and
saveNow overwrote the freshly re-read disk record with the stale
in-memory map, clobbering concurrent/external per-role edits despite
the re-read intended to preserve them. Track modified global roles
individually and merge only those into the re-read file, mirroring the
project save path.

Fixes #6260
2026-07-22 04:09:55 +00:00
roboomp 615d3c6dc5 fix(session): persisted terminal empty error turns ending the run
A non-retriable provider error on the continuation turn after a failed
tool result ended the run, but #persistSessionMessageIfMissing dropped
the empty error turn as reload poison, so the session JSONL stopped at
the last tool result and the provider errorMessage was lost with no
durable record of why the run stopped. When retry, model fallback, and
compaction all decline the turn, the non-retry terminal error tail now
persists it via the same helper the retry-lifecycle dead-ends use; the
empty turn stays off the wire on reload via the transform-messages
empty-assistant filter, matching the existing retry-exhaustion path.

Fixes #6249
2026-07-22 02:29:05 +00:00
roboomp 451ad31cc0 fix(sdk): resolve configured default role over cold-cache discovery race
On a cache-cold interactive launch, a modelRoles.default pointing at a
models.yml discovery provider (openai-models-list) was silently replaced
by an unrelated authenticated provider's default. createAgentSession
resolves the default role before background discovery populates the
catalog, so the configured provider had no models yet and the fallback
fell through to pickDefaultAvailableModel.

Await one cache-aware discovery pass and re-resolve the configured
default whenever it is still unresolved (not only when nothing resolved
at all) before accepting a bundled-provider fallback.

Fixes #6162
2026-07-21 21:58:35 +00:00
roboomp 62b47dede8 fix(cli): preferred authenticated provider for bare models
Made startup resolution rank configured providers before catalog-only matches while preserving explicit provider pins and catalog fallback behavior.

Added regression coverage for shared bare model IDs across authenticated and unauthenticated providers.

Fixes #6150
2026-07-21 21:50:36 +00:00
roboomp 7c96386e29 fix(session): skipped stop hooks during aborts
Short-circuited session_stop emission when an abort or disposal is already in progress, avoiding extension work whose result cannot be used.

Added deterministic coverage for an abort racing the final settle pass.

Fixes #6134
2026-07-21 21:31:46 +00:00
roboomp a7d9e4b89e fix(coding-agent): kept startup alive when prewalk target lacks auth
prewalk.enabled resolved the hand-off target (default @smol) and threw
"No API key for <provider>/<id>" inside buildSessionOptions when the
target had no configured auth, aborting startup and locking the user out
of the app. Prewalk is an optional, off-by-default optimization, so an
unresolvable or unauthorized target now warns and leaves prewalk unarmed
instead of crashing.

Fixes #6064
2026-07-21 20:38:30 +00:00
roboomp 87ca331330 fix(coding-agent): preserved compat overrides on model refresh
Merged provider compatibility configuration after dynamic discovery so explicit models.yml fields remain authoritative across refreshes.

Added a regression covering Anthropic unsigned-thinking replay through refreshProvider.

Fixes #6041
2026-07-21 20:16:52 +00:00
can1357andMatheus Gois 5b798685ef fix(catalog): preserve opaque gateway model ids
Co-authored-by: Matheus Gois <matheus.gois@doordash.com>
2026-07-21 21:46:09 +02:00
usr_bin_roygbiv cbe28fc305 fix(ai): retry provider connection failures 2026-07-20 19:02:13 -05:00
can1357 89d6a8f6d1 fix(coding-agent): gate print-mode plan arming on settings before session context
- runPrintMode dereferenced session.sessionManager before checking whether
  plan.defaultOnStartup was even enabled, crashing partial-session harnesses;
  the settings check now short-circuits first.
- Extended the print-mode session fakes with the settings/sessionManager
  members every real session provides.
- Scoped the rpc-stdin-lock stderr assertion to non-load-notice lines: the
  adversarial fixture's load failure is now legitimately surfaced (#4954)
  and mentions the locked stream by design.
2026-07-21 00:16:45 +02:00
can1357 1bf08608a4 Merge PR #4964: fix(cli): resolve bundled extension imports (@roboomp)
# Conflicts:
#	packages/coding-agent/src/extensibility/plugins/legacy-pi-compat.ts
#	packages/coding-agent/src/main.ts
#	packages/coding-agent/src/prompts/system/workflow-notice.md
#	packages/coding-agent/test/extensibility/legacy-pi-bundled-virtual.test.ts
2026-07-20 22:53:16 +02:00
pr-evalandcan1357 f5bd6bbe0e fix(agent): count malformed yields after incremental sections
Narrow the invalid-yield guard to !abortSent so array-typed incremental
yield sections no longer suppress the infinite-submit-loop abort; add
regression coverage for incremental yield followed by repeated malformed
terminal yields.
2026-07-20 22:51:53 +02:00
can1357 a87d7d35cd Merge PR #4961: fix(agent): stop malformed subagent yield loops (@roboomp)
# Conflicts:
#	packages/coding-agent/src/prompts/system/workflow-notice.md
#	packages/coding-agent/src/task/executor.ts
#	packages/coding-agent/src/tools/yield.ts
2026-07-20 22:51:53 +02:00
can1357 024497995c Merge PR #4882: fix(catalog): collapse Devin GLM-5.2 variants so free 200K model works when quota is exhausted (@oldschoola)
# Conflicts:
#	packages/catalog/src/models.json
2026-07-20 22:50:16 +02:00
can1357 d8e137abdd Merge PR #6079: fix(status-line): aggregate vibe worker tok/s into the status-line badge (@oldschoola) 2026-07-20 22:50:06 +02:00
can1357 f9826dc2b3 Merge PR #5977: fix(coding-agent): bound RPC output and reap failed workers (@wolfiesch) 2026-07-20 22:50:05 +02:00
can1357 3c6ade647b Merge PR #4784: fix(coding-agent): persist bash shortcut cwd changes (@jeffscottward) 2026-07-20 22:50:05 +02:00
can1357 60cbcc8c9d Merge PR #5055: feat(coding-agent): add timestamp to per-turn token-usage row (@zommiommy) 2026-07-20 22:50:05 +02:00
can1357 7e49a95d41 Merge PR #5982: fix(setup): add default model selection (@roboomp) 2026-07-20 22:50:05 +02:00
can1357 4577f064cb Merge PR #5736: fix(session): persist /new boundary so autoResume does not resume pre-/new transcript (@roboomp) 2026-07-20 22:50:05 +02:00
can1357 4b7377bd5b Merge PR #5974: fix(tools): keep web_search top-level under xdev (@roboomp) 2026-07-20 22:50:05 +02:00
can1357 a973556558 Merge PR #6045: fix(coding-agent): run fish user shell interactively instead of as a login shell (@iacore) 2026-07-20 22:50:04 +02:00
can1357 091dad0f90 Merge PR #6088: fix(thinking): persist auto selector receipt (@moomooskycow) 2026-07-20 22:50:04 +02:00
can1357 29f25f537e Merge PR #6020: fix(coding-agent): enable plan mode for print prompts (@roboomp) 2026-07-20 22:50:04 +02:00
can1357 936fdbe4a7 Merge PR #6013: fix(coding-agent): preserve plan exit rollback state (@any-victor) 2026-07-20 22:50:03 +02:00
can1357 1aa70ddc9e Merge PR #6023: fix(coding-agent): preserve model when resuming plan mode (@roboomp) 2026-07-20 22:50:03 +02:00
phrazzld f04741eac2 fix(thinking): persist auto selector receipt 2026-07-19 19:11:30 -05:00