v0.12.1
What's Changed
- test(session): hermetic fork/moveTo failure-injection across platforms (#3209) by @Yeachan-Heo in #3219
- fix(tui): prevent duplicate transcript scrollback rows by @minislively in #3213
- fix(sdk): drain MCP stdio handlers so e2e cannot hang after stdin EOF by @Yeachan-Heo in #3221
- fix(coding-agent): hermetic ModelRegistry canonical-equivalence tests by @Yeachan-Heo in #3222
- fix(sdk): accept early WebSocket hello for daemon session query flake by @Yeachan-Heo in #3223
- feat(coding-agent): harden memory-guard checkpoint ownership by @twoimo in #3225
- fix(coding-agent): repair #3225 continue breadcrumb and SDK inventory by @Yeachan-Heo in #3228
- feat(sdk): durable kind-aware reconciliation for #3031 #3032 #3035 by @Yeachan-Heo in #3227
- fix(sdk): unbreak post-#3227 host preflight + operation matrix by @Yeachan-Heo in #3229
- fix(sdk): finish post-#3227 Q28 parity + failure correlation by @Yeachan-Heo in #3230
- fix(sdk): deterministic Telegram root release retain/retry on shutdown by @Yeachan-Heo in #3231
- fix(ask): ignore aborted remote answer failures by @suho-han in #3224
- fix(resume): cut ordinary /resume readiness wait and progress lag by @Yeachan-Heo in #3234
- feat(coding-agent): guard team worker memory by @twoimo in #3226
- fix(resume): fail open progress lease on minimal statusContainer by @Yeachan-Heo in #3237
- feat(ai): add BizRouter as a first-class provider by @Yeachan-Heo in #3220
- fix(tools): accept JSON-string asks and recover NNBSP screenshot paths by @probepark in #3238
- fix(acp): report spec-conformant errors, paths, and sizes by @probepark in #3244
- feat(providers): rank existing and well-known providers first in /model, /login, /provider by @Yeachan-Heo in #3243
- fix(ai): honor documented GJC_OPENAI_CODE_* env names by @10kH in #3245
- fix(utils): honor documented GJC_BASH_NO_CI / GJC_BASH_NO_LOGIN by @10kH in #3248
- test(ci): add a fail-closed CI failure-identity extractor by @Yeachan-Heo in #3255
- test(telegram): widen the /btw e2e waitFor budget for loaded CI shards by @Yeachan-Heo in #3259
- fix(utils): resolve the shell prefix from trusted env only by @10kH in #3252
- fix(ai): align Anthropic subscription attribution by @nolainjin in #3254
- fix(browser): resolve launch overrides from trusted env only by @10kH in #3256
- fix(coding-agent): harden recovered settings controls by @twoimo in #3251
- fix(coding-agent): terminalize no-op overflow recovery by @DevOrca18 in #3257
- fix(coding-agent): repair dev CI 30244279756 after #3257 by @Yeachan-Heo in #3275
- fix(providers): rank BizRouter directly below OpenGateway in /login by @Yeachan-Heo in #3281
- docs: name the Foundry env vars that are actually read by @10kH in #3250
- fix(sdk,harness): resolve spawned command overrides from trusted env only by @10kH in #3260
- chore(sdk): bump @agentclientprotocol/sdk to 1.3.0 by @probepark in #3261
- fix(ai): resolve the Anthropic endpoint from trusted env only by @10kH in #3262
- fix(utils): reject a project-.env agent directory override by @10kH in #3285
- fix(coding-agent): resolve Smithery endpoints and key from trusted env by @10kH in #3286
- fix(utils): reject a project-.env config directory override by @10kH in #3295
- fix(ai): resolve the Kimi usage base URL from trusted env only by @10kH in #3312
- fix(coding-agent): garbage-collect stale session local roots by @10kH in #3313
- test(coding-agent): fix dev CI shard-5 managed-session migration timing flake by @Yeachan-Heo in #3322
- fix(utils): honor the PI_CODING_AGENT_DIR alias in getAgentDir by @10kH in #3328
- fix(coding-agent): redact GitHub tokens in memory consolidation by @10kH in #3330
- fix(ai): name the failed host when a request never reaches the provider by @devswha in #3333
- fix(natives): recover Cargo from rustup homes for addon builds by @suho-han in #3335
- perf(coding-agent): add deterministic Bun memory baseline corpus by @twoimo in #3336
- fix(coding-agent): repair post-merge dev CI shard 2/5 failures from run 30291963270 by @Yeachan-Heo in #3340
- fix(ai): rename Codex reserved tool namespaces on the wire by @probepark in #3339
- feat: add a sticky transcript viewport by @elppaaa in #3343
- fix(coding-agent): fence notification WebSocket fixture startup by @Yeachan-Heo in #3353
- docs(ultragoal): loosen delegation and planning gates by @Yeachan-Heo in #3355
- docs: describe the $env loading order as implemented by @10kH in #3297
- fix(ai): refresh the spoofed Gemini CLI version by @10kH in #3307
- fix(coding-agent): drop an exports entry with no module behind it by @10kH in #3306
- docs(ultragoal): resume same-domain subagents and terminal critic instead of fresh spawns by @Yeachan-Heo in #3359
- fix(coding-agent): clone sticky-viewport fixture instead of recapturing by @Yeachan-Heo in #3358
- feat(read): default truncation to the tail of a file by @Yeachan-Heo in #3348
- fix(tui): redraw once the terminal width settles by @Yeachan-Heo in #3360
- docs: point fs-scan-cache architecture at the real invalidation callsites by @10kH in #3349
- fix(ralplan): stop infinite consensus loops with reviewer ratchet + per-lane review budget by @Yeachan-Heo in #3356
- fix(test): wrap an over-long assertion to satisfy the formatter by @Yeachan-Heo in #3363
- test: make the env trust suites hermetic by @10kH in #3284
- fix(utils): keep the configured config-dir name beneath home by @10kH in #3267
- fix(coding-agent): resolve skill-hook config paths from trusted dirs by @10kH in #3324
- fix(read): scan directional windows for merge conflicts by @Yeachan-Heo in #3365
- feat(ralplan): persisted resume-default Architect/Critic lanes (follow-up to #3356) by @Yeachan-Heo in #3364
- fix(coding-agent): resolve workflow settings under the config root by @10kH in #3327
- fix(ai,agent): resolve OpenAI/Azure endpoints from trusted env only by @10kH in #3268
- fix(coding-agent): resolve registry provider base URLs from trusted env by @10kH in #3270
- fix(ai): resolve Google credential material from trusted env by @10kH in #3283
- fix(ai): resolve the Grok usage token fallback from trusted env by @10kH in #3289
- fix(tui): address width-settle review findings from #3360 by @Yeachan-Heo in #3361
- fix(ultragoal): repair final-aggregate receipts minted without criticReview OKAY by @Yeachan-Heo in #3368
- fix(deep-interview): make draft recovery self-healing by @IYENTeam in #3369
- test(ultragoal): resolve the nudge-budget user setting under home by @Yeachan-Heo in #3370
- fix(deep-interview): harden self-healing draft recovery by @Yeachan-Heo in #3374
- fix(deep-interview): inherit session and unblock read-only bash by @Yeachan-Heo in #3377
- fix(deep-interview): close final contract gaps by @Yeachan-Heo in #3378
- fix(deep-interview): close terminal guard gaps by @Yeachan-Heo in #3379
- fix(deep-interview): relax round scoring and name setup conflicts by @Yeachan-Heo in #3381
- fix(deep-interview): make setup-conflict recovery runnable for required fields by @Yeachan-Heo in #3382
- revert(coding-agent): replace typed deep-interview repair CLI with staged JSON transitions by @Yeachan-Heo in #3380
- fix(guard): block only explicit filesystem mutations during planning phases by @Yeachan-Heo in #3385
- fix(deep-interview): typed session errors, runtime-owned ambiguity, incremental staging by @Yeachan-Heo in #3386
- feat(deep-interview): unified gjc deep-interview surface with runtime-owned state by @Yeachan-Heo in #3387
- feat(deep-interview): unified gjc deep-interview surface with runtime-owned state by @Yeachan-Heo in #3393
- fix(deep-interview): intent-key guard, null-prose init, HUD sync, full help by @Yeachan-Heo in #3395
- fix(deep-interview): null-prose first-try init and HUD sync after write/apply by @Yeachan-Heo in #3396
- fix(test): type the deep-interview stage fact-count assertion by @Yeachan-Heo in #3400
- chore: restore dev history ancestry into main by @Yeachan-Heo in #3405
- test(sdk): widen the Discord recovery wait to the daemon's own backoff ceiling by @Yeachan-Heo in #3406
- chore: merge main release ancestry back into dev by @Yeachan-Heo in #3411
- fix coordinator workflow question reconciliation by @thisisjun786 in #3408
- test(read): pin conflict surfacing across truncation directions by @Yeachan-Heo in #3366
- fix(coding-agent): make task delegation actionable with discovery by @yeongjunyoo in #3357
- feat(gjc-plugins): scope-qualified bundle lifecycle and Settings management by @probepark in #3342
- fix(tui): stop terminal probe replies leaking into the prompt by @sskys18 in #3392
- fix(coding-agent): resolve web-search endpoints and keys from trusted env by @10kH in #3282
- fix(tui): isolate status-line gh lookup stdin by @sj0618 in #3401
- perf(coding-agent): cache transcript viewer layouts by @elppaaa in #3404
- fix(coding-agent): resolve the Exa API key from trusted env by @10kH in #3287
- fix(coding-agent): resolve SDK bus tokens from trusted env by @10kH in #3288
- fix(coding-agent): resolve SearXNG search config from trusted env by @10kH in #3290
- fix(team): return actionable errors for unknown API operations by @jaeyunha in #3414
- fix(ai): stop GOOGLE_CLOUD_LOCATION from redirecting Vertex requests by @10kH in #3291
- docs: stop documenting removed native APIs by @10kH in #3351
- docs: correct the scope of the two directory overrides by @10kH in #3352
- fix(telegram): launch lifecycle sessions safely on macOS by @chiznoir in #3367
- chore(artifacts): record pr3392/3401/3404 merge batch receipt by @Yeachan-Heo in #3416
- fix(skill-state): stop heredoc document bodies from false-blocking spec persistence during planning phases by @Yeachan-Heo in #3415
- fix(acp): harden Air prompt termination and session recovery (repair of #3373) by @Yeachan-Heo in #3413
- fix(session): restore disk offloading for managed-session resident data (RAM/CPU bloat in long sessions) by @Yeachan-Heo in #3344
- feat(session): add resume model behavior control (repair of #3293) by @Yeachan-Heo in #3418
- feat(session): add session.resumeModelBehavior to control resume model restore by @minislively in #3293
- fix(ai): drop the unused $env import from the Vertex provider by @Yeachan-Heo in #3419
- fix(coding-agent): align eager todo prompt schema by @sj0618 in #3407
- fix(coding-agent): show subagent fast mode in task UI by @sj0618 in #3417
- fix(ci): address workflow bun test files by explicit relative path by @Yeachan-Heo in #3430
- fix(coding-agent): surface subagent launch failures by @probepark in #3423
- feat(ralplan): support configured auto handoff by @probepark in #3428
- chore(schemas): regenerate config schema for session.resumeModelBehavior by @Yeachan-Heo in #3431
- feat(telegram): add notification sound policy by @probepark in #3427
- fix(skill-state): harden heredoc masking against shadowing, escapes, continuations, and multiline quotes by @Yeachan-Heo in #3421
- fix(tui): preserve nested paths during slash completion by @jaeyunha in #3432
- fix(streaming): retry first-event timeouts safely by @probepark in #3424
- fix(agent): unwedge invalid_prompt repair so the retry can continue by @probepark in #3433
- chore(artifacts): record merge-batch lane retirement receipt by @Yeachan-Heo in #3422
- docs: record #3373/#3357/#3344/#3293 repair batch merge receipt by @Yeachan-Heo in #3429
- fix(coding-agent): guard resume-model-choice prompt against a settings-less ctx by @Yeachan-Heo in #3434
- fix(sdk): classify resolveConfiguredDefaultModel as an internal seam by @Yeachan-Heo in #3438
- fix(skill-state): fold line continuations and strip ANSI-C $ in the heredoc dequoted view by @Yeachan-Heo in #3436
- fix(tui): clear completed shell command overlay by @probepark in #3437
- fix: handle stale Codex named tool choices by @probepark in #3441
- fix(test): realign two goldens with the contracts their producers changed by @Yeachan-Heo in #3443
- fix(team): publish a runtime-owned worker heartbeat while a turn is in flight by @jaeyunha in #3391
- fix: expose subagent sessions to Session Observer by @ZergRocks in #3435
- chore(artifacts): record #3422/#3429 CI-wait lane retirement receipt by @Yeachan-Heo in #3442
- fix(prompts): honor explicit worktree delegation requests by @probepark in #3440
- fix(coding-agent): keep ralplan writes in owner session by @ZergRocks in #3439
- Fix ralplan session_id handoff goldens by @Yeachan-Heo in #3447
- fix(coding-agent): downgrade expected AgentBusyError continuation races to debug by @Yeachan-Heo in #3446
- chore(artifacts): record dev-CI green recovery receipt for a92c4dd by @Yeachan-Heo in #3445
- fix(telegram): preserve multiline ask questions in rich messages by @chiznoir in #3325
- fix(natives): fall back to linkat(2) for managed no-replace publish on NFS by @bjkim95 in #3388
- fix(coding-agent): advertise search in fast help by @sj0618 in #3294
- fix(coding-agent): wire ToolSession.getAuthorizedArtifactsDirs for same-tree artifact reads by @Yeachan-Heo in #3314
- perf(coding-agent): incrementally project observer sessions by @elppaaa in #3448
- fix(ai): resolve the Kimi OAuth host from trusted env only by @10kH in #3311
- fix(telegram): preserve multi-select state in remote prompts by @chiznoir in #3304
- fix(coding-agent): resolve auth-broker config from trusted env only by @10kH in #3310
- fix(coding-agent): resolve image-generation env from trusted sources by @10kH in #3309
- fix(ai): honor the documented GJC_NO_STRICT bypass by @10kH in #3305
- fix(coding-agent): sweep session resident-cache dirs on abnormal exit by @10kH in #3318
- fix(ai): honor the documented GJC_AUTH_NO_BORROW opt-out by @10kH in #3296
- fix(telegram): support WebP image delivery by @probepark in #3453
- fix(ai): resolve the Azure API key fallback from trusted env by @10kH in #3272
- fix(telegram): convert WebP images to photos by @probepark in #3454
- feat(telegram): add topic session folder picker (successor of #3214, #3258) by @gimso2x in #3271
- fix(coding-agent): restore descriptor-backed subagent resume by @Yeachan-Heo in #3456
- fix(sdk): restart broker that predates broker.shutdown, and close its session hosts by @probepark in #3450
- fix(ai): bound the HTTP 400 request-dump directory by @10kH in #3319
- feat(tui): add type-to-filter to the /login provider selector by @Yeachan-Heo in #3315
- fix(coding-agent): repair the tmux session lifecycle on macOS by @lightofjeju in #3452
- test(ai): repair exact dev evidence and timeout contract by @Yeachan-Heo in #3457
- fix(coding-agent): sweep SDK revision-store spills on abnormal exit by @10kH in #3320
- fix(dev): remove Bun shadow before source link validation by @probepark in #3451
- test(team): extend memory-guard selector-replacement timeout for CI contention by @Yeachan-Heo in #3409
- feat(compaction): tool-aware, artifact-aware, state-aware pruning and compaction by @Yeachan-Heo in #2957
- fix(test): align T2 mid-run maintenance with protectRecentTurns fence by @Yeachan-Heo in #3458
- fix(ai): flag Anthropic and Ollama tool calls truncated by max_tokens by @Yeachan-Heo in #3455
- fix(mcp): honor explicit config startup timeouts by @raphaelnz in #3372
- fix(utils): redact complete AWS STS credentials and current GitHub token formats in crash logs by @10kH in #3449
- fix(coding-agent): separate review findings evidence by @Yeachan-Heo in #3467
- fix(ai): stop Anthropic thinking replay from contradicting the request shape by @probepark in #3465
- feat(coding-agent): default Bash tool output to 1 KiB tail by @Yeachan-Heo in #3476
- fix(session): expose managed scope prepare diagnostics by @Yeachan-Heo in #3462
- fix(ci): require exact PR base ancestry for exact-head gates by @Yeachan-Heo in #3481
- test(bash): complete Settings fixtures after default-tail merge by @Yeachan-Heo in #3482
- fix(tui): clear Kitty images during viewport repaint by @Yeachan-Heo in #3475
- fix(tui): harden Kitty placement lifecycle by @Yeachan-Heo in #3493
- feat(ultragoal): move verification from per-subgoal to per-boundary by @Yeachan-Heo in #3498
- fix(coding-agent): complete single-model credential failover for extension-loaded sessions (#3491) by @Yeachan-Heo in #3495
- chore(coding-agent): restore ultragoal formatting by @Yeachan-Heo in #3506
- fix(ai): stamp lazy-stream first-event timeouts as transport facts (#3496) by @innocarpe in #3501
- fix(coding-agent): retry Codex overloads with backoff by @probepark in #3510
- test(sdk): await async command dispatch before asserting query_request by @Yeachan-Heo in #3512
- fix(coding-agent): follow CLAUDE_CONFIG_DIR and CODEX_HOME when importing credentials by @Dayoooun in #3513
New Contributors
- @DevOrca18 made their first contribution in #3257
- @thisisjun786 made their first contribution in #3408
- @ZergRocks made their first contribution in #3435
- @gimso2x made their first contribution in #3271
- @lightofjeju made their first contribution in #3452
- @Dayoooun made their first contribution in #3513
Full Changelog: v0.12.0...v0.12.1