This release adds session context referencing and 1Password secret caching, fixes silent failures on empty/reasoning-only agent turns, and resolves environment variable substitution in model configuration fields.
What's New
- Adds a
session_contexttoolset withlist_sessionsandread_sessiontools, allowing agents to reference previous sessions as context - Adds
WithRootoption to worktree creation to decouple from the global data directory - Caches
op://secret resolutions and coalesces concurrent lookups to avoid redundantopCLI invocations
Bug Fixes
- Fixes silent failure when the runtime receives empty or reasoning-only turns; these are now surfaced instead of dropped
- Fixes whitespace-only turns being treated as valid output, which could cause re-entry loops
- Fixes
${env.X}references inmodelandbase_urlconfig fields not being substituted before being sent to providers - Fixes
${env.X}placeholders not being accepted in thebase_urlschema validation - Fixes empty agent responses on OpenAI-compatible providers caused by multiple consecutive system messages; consecutive system messages are now merged on the
openai_chatcompletionspath (scoped toopenai_chatcompletionsendpoints) - Fixes
os.ChmodinRegistry.Writebreaking non-owner callers by making the permission tightening best-effort - Fixes a data race on the
defaultRegistrypointer by switching toatomic.Pointer - Fixes
${env.VAR}not being normalized beforeos.ExpandEnvin filesystem path expansion - Fixes a transient failure when promoting a worktree directory under concurrency
Technical Changes
- Extracts
themeRegistrystruct to eliminate global state and enable parallel-safe tests - Introduces
Registrystruct inrunregistryto replace process-global directory state - Removes process-global clock and ID variables from
pkg/session, moving them into per-session fields - Introduces
Resolvertype inuseridand injects cagent ID source inhttpclientfor parallel-safe tests - Replaces package-level globals with dependency injection across multiple packages to enable parallel-safe tests
- Enables
t.Parallel()across ~337 test functions in the test suite - Makes
${env.X}the canonical variable-expansion syntax in documentation and example YAML files
What's Changed
- docs: update CHANGELOG.md for v1.91.0 by @docker-read-write[bot] in #3314
- refactor: introduce Resolver type in userid and inject cagent ID source in httpclient for parallel-safe tests by @dgageot in #3321
- chore: bump direct Go dependencies by @dgageot in #3315
- refactor: extract themeRegistry struct for parallel-safe tests by @dgageot in #3316
- refactor(runregistry): introduce Registry struct and tighten dir permissions by @dgageot in #3317
- feat(worktree): add WithRoot option to decouple from global data dir by @dgageot in #3318
- feat(1password): cache op:// resolutions and coalesce concurrent lookups by @dgageot in #3322
- fix: make chmod in Registry.Write best-effort to avoid breaking non-owner callers by @dgageot in #3323
- fix: eliminate themeRegistry data race and TOCTOU window by @dgageot in #3324
- refactor: remove process-global clock/ID vars from pkg/session by @dgageot in #3319
- fix(config): substitute ${env.X} in model and base_url fields by @Sayt-0 in #3304
- refactor: replace test-mutated globals with dependency injection by @dgageot in #3326
- docs: make ${env.X} the canonical variable-expansion syntax (+ fixes) by @dgageot in #3325
- test: enable t.Parallel() across the test suite by @dgageot in #3328
- feat(session_context): reference previous sessions as context by @Sayt-0 in #3320
- test: enable t.Parallel() in environment, config, and sessioncontext tests by @dgageot in #3329
- fix(#3145): empty agent response from multiple system messages on OpenAI-compatible providers by @Sayt-0 in #3327
Full Changelog: v1.91.0...v1.92.0