#vibeParentSession() omitted getActiveModelString, so on resume/switch
#reconcileModeFromSession -> VibeSessionRegistry.rehydrate() ->
#resolveWorker() fell back to the settings default model. A reopened or
switched-to session whose active model came from the journal or a
non-default launch therefore resolved the good (pi/task) worker on the
wrong model. Wire getActiveModelString from the session's active model,
matching the spawn-path ToolSession and sdk's dispose-path helper.
Fixes#5303
#clearTransientModeState's vibe branch runs only from
#reconcileModeFromSession, after switchSession has already loaded and
restored the target session's active tools. It called
deactivateVibeTools(#vibeModePreviousTools), which SETS the active tool
set to that snapshot — but the snapshot belongs to the SOURCE session,
so switching to a non-vibe (or different vibe) target clobbered the
target's tools. Add AgentSession.removeVibeToolsPreservingActive(), which
strips only the transient vibe tools and keeps the current active set,
and use it on the switch path. The live-exit path (#exitVibeMode) still
restores its own snapshot.
Fixes#5303
vibe_kill and Vibe-mode exit / session-switch suspension awaited every
cancelled turn's job promise unconditionally. When a provider or tool
ignores the abort signal the promise never settles, so teardown hung
indefinitely. Give cancelled jobs a 250ms unref'd settlement grace, then
log and detach any still-pending job while preserving cancelled state.
Ported from @RensTillmann's fix (65446c4).
Fixes#5303
- Added schema and type updates for task-agent fields and model resolver settings.
- Extended discovery helper logic to carry resolved task-agent metadata through execution setup.
- Updated task/agent registration and execution paths to use the new capability/field data.
- Expanded test coverage for agent-field parsing, model resolution, and executor prewalk behavior.
- Removed `selector`/`sel` arguments from read and grep tool schemas and related execution arg handling.
- Reworked read and grep path processing to parse line selectors from `path` suffixes instead of separate fields, including inline range propagation.
- Updated delegation and execution call paths (including JS/Python preludes and executor tests) to pass selectors embedded in `path`.
- Updated read/grep prompt docs and changelog for the breaking inline-selector API, and removed obsolete selector-specific tests and expectations.
- Replaced the advisor turn validation to raise errors only when a turn has no assistant response at all, instead of treating a content-less `stop` as a failure.
- Kept zero-content silent reviews from entering the retry/rollback/warn path by no longer raising "Advisor unavailable" for completed empty-stop turns.
- Updated advisor runtime tests and changelog language to assert and document that consecutive zero-usage silent turns now succeed without notifications.
Built-in discovery skipped the OAuth refresh whenever a fresh authoritative cache existed, so an openai-codex user with an expired access token never got the model manager constructed and stale bundled models (e.g. gpt-5.4-nano) stayed selectable for the full cache TTL. Force the refresh for authoritative providers and forward the registry fetch through the Codex manager so discovery honors the configured transport.
Fixes#5364