diff --git a/CHANGELOG.md b/CHANGELOG.md index b3a46923..98757b84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **Slash-menu Ctrl+P/Ctrl+N navigation (#3196).** The slash command menu now supports Ctrl+P/Ctrl+N movement without letting the global file picker steal focus while the menu is open. Thanks @1Git2Clone for the PR. +- **New models and first-party provider routes.** This release adds + **GLM-5.2** (selectable on the Z.ai Coding Plan and over OpenRouter as + `z-ai/glm-5.2`, alongside the existing GLM-5.1 default), a first-party + **Z.ai** provider route, a first-party **StepFun / StepFlash** route + (`step-3.7-flash`), and a first-party **MiniMax** route defaulting to + `MiniMax-M3` with the M2.7/M2.5/M2.1 family selectable (#3187/#3191). ### Changed diff --git a/crates/config/src/lib.rs b/crates/config/src/lib.rs index 6d7b4f98..2ff7e6ca 100644 --- a/crates/config/src/lib.rs +++ b/crates/config/src/lib.rs @@ -7423,7 +7423,7 @@ fallback_providers = ["deepseek", "openrouter"] DEFAULT_SPAWN_DEPTH ); assert_eq!(FleetExecConfig::default().max_spawn_depth, 3); - assert!(DEFAULT_SPAWN_DEPTH <= MAX_SPAWN_DEPTH_CEILING); + const { assert!(DEFAULT_SPAWN_DEPTH <= MAX_SPAWN_DEPTH_CEILING) }; } #[test] diff --git a/crates/tui/CHANGELOG.md b/crates/tui/CHANGELOG.md index 063c8d47..62795897 100644 --- a/crates/tui/CHANGELOG.md +++ b/crates/tui/CHANGELOG.md @@ -26,6 +26,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **Slash-menu Ctrl+P/Ctrl+N navigation (#3196).** The slash command menu now supports Ctrl+P/Ctrl+N movement without letting the global file picker steal focus while the menu is open. Thanks @1Git2Clone for the PR. +- **New models and first-party provider routes.** This release adds + **GLM-5.2** (selectable on the Z.ai Coding Plan and over OpenRouter as + `z-ai/glm-5.2`, alongside the existing GLM-5.1 default), a first-party + **Z.ai** provider route, a first-party **StepFun / StepFlash** route + (`step-3.7-flash`), and a first-party **MiniMax** route defaulting to + `MiniMax-M3` with the M2.7/M2.5/M2.1 family selectable (#3187/#3191). ### Changed diff --git a/crates/tui/src/main.rs b/crates/tui/src/main.rs index a5c0c35e..b640ee7a 100644 --- a/crates/tui/src/main.rs +++ b/crates/tui/src/main.rs @@ -7329,6 +7329,7 @@ mod terminal_mode_tests { } #[tokio::test] + #[allow(clippy::await_holding_lock)] async fn explicit_exec_model_routes_to_unique_authenticated_provider_candidate() { let _env_lock = crate::test_support::lock_test_env(); let _zai = crate::test_support::EnvVarGuard::set("ZAI_API_KEY", "zai-key"); @@ -7349,6 +7350,7 @@ mod terminal_mode_tests { } #[tokio::test] + #[allow(clippy::await_holding_lock)] async fn explicit_exec_model_reports_ambiguous_authenticated_provider_candidates() { let _env_lock = crate::test_support::lock_test_env(); let _zai = crate::test_support::EnvVarGuard::set("ZAI_API_KEY", "zai-key"); @@ -9050,4 +9052,4 @@ mod pr_prompt_tests { "missing command should return false, not panic" ); } -} +} \ No newline at end of file diff --git a/docs/V0_8_59_RELEASE_TRIAGE.md b/docs/V0_8_59_RELEASE_TRIAGE.md deleted file mode 100644 index 072d4e4c..00000000 --- a/docs/V0_8_59_RELEASE_TRIAGE.md +++ /dev/null @@ -1,366 +0,0 @@ -# v0.8.59 Release Triage - -Generated on 2026-06-12 for `Hmbown/CodeWhale`. - -Current local release branch at handoff time: - -- Branch: `codex/v0.8.59-release-ready` -- Head: `ca826bb2 fix(tui): clarify Codex response errors` -- Remote: `origin=https://github.com/Hmbown/CodeWhale.git` - -## Mission - -Move v0.8.59 toward release by actively landing, harvesting, or closing the -remaining PR and issue queue. Do not only summarize. Use GitHub and local Git -state to decide which items are already landed, which can be directly merged, -which need a credited harvest, and which should be deferred with a clear note. - -Start from `codex/v0.8.59-release-ready` unless Hunter gives a newer branch. - -## Key Operating Idea: Scratch Integration Branches - -Hunter's "dummy branch" idea is feasible and useful. Use it. - -The scratch branch is for discovery and acceleration: - -- create it from the real release branch; -- merge or cherry-pick many candidate PR heads into it; -- use conflicts, tests, and diff review to learn what composes; -- harvest only the safe result back into the release branch. - -The scratch branch is not the thing to ship. It can contain noisy merge commits, -temporary conflict resolutions, and interactions between unrelated PRs. - -Suggested local workflow: - -```bash -git fetch --prune origin -git switch codex/v0.8.59-release-ready -git pull --ff-only -git switch -c scratch/v0.8.59-pr-train-$(date +%Y%m%d-%H%M) -``` - -Fetch specific PR heads into temporary refs: - -```bash -git fetch origin pull/3152/head:refs/tmp/pr-3152 -git fetch origin pull/3148/head:refs/tmp/pr-3148 -git fetch origin pull/3150/head:refs/tmp/pr-3150 -``` - -Dry-run conflicts before touching the scratch branch: - -```bash -base=$(git merge-base origin/codex/v0.8.59-release-ready refs/tmp/pr-3152) -git merge-tree "$base" origin/codex/v0.8.59-release-ready refs/tmp/pr-3152 -``` - -On the scratch branch, merge one candidate at a time: - -```bash -git merge --no-ff refs/tmp/pr-3152 -``` - -If it conflicts, resolve only enough to learn whether the PR should be directly -merged, cherry-picked, harvested, or closed as already landed. After the scratch -experiment, return to the release branch and apply the final result as narrow -commits. - -Use direct GitHub merge only when the PR is clean against the actual landing -branch. Many PRs are clean against `main` but conflict against -`codex/v0.8.59-release-ready`. - -If a scratch branch needs CI, push it only as a clearly named scratch branch or -draft PR after Hunter authorizes that branch/CI lane. Never tag or publish from -scratch. - -## Credit Contract - -When harvesting contributor work: - -- Preserve the original author when practical. -- Add `Co-authored-by` using `.github/AUTHOR_MAP` or: - -```bash -gh api users/ --jq '"\(.id)+\(.login)@users.noreply.github.com"' -``` - -- Include this line in the commit body: - -```text -Harvested from PR #N by @handle -``` - -The repo has `.github/workflows/auto-close-harvested.yml`, which closes PRs -after such commits land on `main`. Until then, leave clear comments linking the -release-branch commit or harvest plan. - -## Recently Approved PRs Already Covered - -`Hmbown` submitted formal `APPROVED` reviews on these PRs on 2026-06-12. A -follow-up scratch-merge pass against `codex/v0.8.59-release-ready` found that -the release branch already contains equivalent or stronger implementations. Do -not spend another cycle re-harvesting them; close them after the release branch -lands on `main`, or leave/update triage comments if they remain open. - -### PR #3152 - SSE `data:` parsing - -- URL: https://github.com/Hmbown/CodeWhale/pull/3152 -- Author: `wgeeker` -- Title: `fix(SSE): accept SSE data lines without space after colon` -- Hunter approval: 2026-06-12T16:10:34Z -- GitHub merge state against `main`: `BLOCKED` -- Non-success checks shown by `gh`: none -- Head: `fix/sse-data-prefix-no-space` -- Commit: `50445eb3 fix: accept SSE data lines without space after colon` -- Files: `crates/tui/src/client.rs`, `client/anthropic.rs`, `client/chat.rs`, - `client/responses.rs` -- Release-branch result: scratch merge produced a literal zero diff. -- Covered by release commit: `2f717d33 fix(tui): accept compact SSE data - fields`. -- Notes: release branch already has an identical `extract_sse_data_value` - helper and equivalent tests. -- Action: no harvest needed. Keep the triage comment as credit and close after - the release branch lands on `main`. - -### PR #3148 - `--model auto` / `DEEPSEEK_MODEL` - -- URL: https://github.com/Hmbown/CodeWhale/pull/3148 -- Author: `hongchen1993` -- Title: `fix(exec): resolve --model auto via DEEPSEEK_MODEL env and reorder ExecArgs` -- Hunter approval: 2026-06-12T16:10:21Z -- GitHub merge state against `main`: `CLEAN` -- Non-success checks shown by `gh`: none -- Head: `fix/auto-model-agent-plan` -- Commits: `b67f4add`, `55e66a6e` -- File: `crates/tui/src/main.rs` -- Release-branch result: fully covered. -- Covered by release commit: `862cb2e3 fix(exec): preserve auto model handoff`. -- Notes: `ExecArgs` is already reordered so the prompt is last, and the release - branch env fallback is a superset: `CODEWHALE_MODEL`, then `DEEPSEEK_MODEL`. -- Action: no harvest needed. Keep the triage comment as credit and close after - the release branch lands on `main`. - -### PR #3150 - prompt source map / context usage - -- URL: https://github.com/Hmbown/CodeWhale/pull/3150 -- Author: `idling11` -- Title: `feat(context): add prompt source map and context-usage report (#3143)` -- Hunter approval: 2026-06-12T16:10:10Z -- GitHub merge state against `main`: `CLEAN` -- Non-success checks shown by `gh`: none -- Head: `feat/3143-prompt-source-map` -- Commits: `e91d4984`, `97e711c4`, `c463dac4`, `b8efcde0` -- Files include `crates/tui/src/context_report.rs`, command wiring, - `compaction.rs`, `localization.rs`, `main.rs`, and TUI UI/app files. -- Closing issue: #3143 -- Release-branch result: independently implemented. -- Covered by release commit: `0986cabb feat(tui): add context source map - report`. -- Notes: release branch already has `/context [report|json|summary]` and - `codewhale doctor --context-json`. Gemini's string-slicing and duplicate - `AGENTS.md` findings apply to the PR implementation, not the release branch: - the release module does no string slicing and no `AGENTS.md` processing. The - PR's remaining tests target its divergent API and do not transplant cleanly. -- Action: no harvest needed. Keep the triage comment as credit and close after - the release branch lands on `main`. - -## Current v0.8.59 PR Queue - -Open PRs carrying `v0.8.59` at the handoff scan, updated with the -release-branch scratch triage pass. - -### Merge cleanly into the release branch (await Hunter approval) - -- #3062 - fix(tools): apply strict mode per schema -- #3008 - docs(prompt): clarify Constitution trust framing -- #3006 - fix update release-download timeout/error messaging -- #3003 - bump `clap_complete` (CodeQL neutral) -- #3002 - bump `rustls` (CodeQL neutral) -- #3001 - bump `reqwest` (CodeQL neutral) -- #2971 - expose matched approval rule metadata -- #2943 - normalize macOS Cmd/SUPER to CONTROL - -These can be landed directly or via a small scratch train, but they did not have -Hunter approval at the 2026-06-12 re-scan (reviewDecision empty on all). Ask for -approval or review each one before merging. Lowest-risk first: docs PR #3008, -update-network fallback #3006, then the three dependency bumps -#3001/#3002/#3003. - -### Already landed on the release branch (verified by scratch merge, zero residual diff) - -Triage comments with the covering commits were posted on each on 2026-06-12. -Close after the release branch reaches `main`. - -- #2901 - localize ToolFamily labels. Zero unique commits vs release branch. -- #3056 - hotbar number keys. Covered by `3de1d35c` with stronger tests - (extra `needs_redraw` assertions). -- #3052 - verbosity settings. Covered by `42de833d`, which is a superset - (case/whitespace-tolerant `is_concise_verbosity`). -- #3011 - provider source tracking + unsupported-TUI errors. Release branch - already has `ProviderSource::Cli/Env` and `provider_is_supported_by_tui` - with per-source error messages. -- #3009 - cli-compare Harbor harness. Release-branch script is a strict - evolution (adds `_first_present`/`_stable_path` helpers). -- #2895 - `siliconflow_cn` provider config field. Test merge produced zero - residual diff. - -### Genuinely missing work; needs review/rebase (commented 2026-06-12) - -- #3051 - feat(voice): `/voice` speech-to-text. Release branch has NO voice - command — this is a real 711-line feature. Conflicts in `commands/mod.rs`, - `localization.rs`, `tui/ui.rs`, and it smuggles an unrelated - `switch_provider` change (`app.api_key`/`app.base_url` reassignment) that - collides with the release branch's `reasoning_effort.normalize_for_provider` - line. Asked contributor to split/rebase; Hunter decides 0.8.59 vs next. -- #3005 - refactor(config): provider metadata registry. NOT landed — real - ~300-line net simplification delta. One semantic conflict: release branch - registers config key `siliconflow_cn`; PR uses `siliconflow` + aliases. - Recommend deferring the refactor to the cycle after v0.8.59 unless Hunter - wants it in; asked for rebase onto the release branch. - -### Blocked against `main` or with failing checks - -- #3053 - docs: add Upgrading from deepseek-tui section. Merge state: BLOCKED. -- #3013 - detect legacy deepseek/deepseek-tui binary and print migration - instructions. Merge state: BLOCKED; macOS test failed and Windows test was - cancelled at scan time. -- #2995 - bump actions/stale from 9 to 10. Merge state: BLOCKED; version drift - failed and CodeQL was neutral. -- #2903 - build static linux x64 binaries with musl. Merge state: BLOCKED. - -### Dirty / needs rebase, conflict triage, or harvest - -- #3010 - exclude Calm personality overlay from default prompt path -- #2940 - localize Cmd command output messages -- #2932 - localize mode-picker messages -- #2929 - localize pending-input preview messages -- #2926 - localize onboard-welcome and app-mode-switch messages -- #2921 - localize sidebar panel labels, status messages, and focus indicators -- #2919 - localize ConfigEdit labels and default values -- #2918 - localize ConfigSection and ConfigScope labels -- #2899 - localize SubAgents surface -- #2894 - localize composer surface -- #2879 - align Hugging Face provider docs, errors, and tests -- #2851 - refactor TUI command groups into focused implementations; draft -- #2808 - runtime-api session save, undo/retry, and snapshot endpoints; dirty, - `needs-human`, lint failing -- #2773 - complete provider fallback chain -- #2239 - i18n Phase 1-4b wiring plus rebase compile fixes - -## Full Open-PR Equivalence Audit (2026-06-12, vs release head d7de0a88) - -Method: `git merge-tree --write-tree` of every open PR head against the -release branch. "Already landed" means the merge result tree is identical to -the release branch tree. Manual scratch-merge verdicts override raw -merge-tree conflicts where noted. - -### Landed on the release branch in this pass - -- #2943 - macOS SUPER→CONTROL normalization. Merged as `4d84d66e`, tests green. -- #2971 - matched approval rule metadata. Merged as `d7de0a88`, tests green. - -### Already landed (identical tree; close after release reaches main) - -#2895, #2901, #3001, #3002, #3003, #3006, #3008, #3062, #3119, #3135 -(#3119/#3135 are duplicates of each other), plus manually verified -zero-residual: #3152, #3148, #3150, #3056, #3052, #3011, #3009. - -### Clean merge with real delta (candidates; need review, not in v0.8.59 label mostly) - -- Security: #3140 command-injection fix in hooks (3 files) — high priority review. -- Infra: #2903 musl static linux build (3 files; was BLOCKED on main, clean here). -- Docs: #2986 harvest-credit close template. -- Dependency bumps (workflow/web/rust): #2991, #2992, #2993, #2994, #2995, - #2996, #2997, #2998, #2999, #3000. -- Generated test PRs: #3113, #3116, #3120, #3122, #3125, #3130, #3131, #3132, - #3134, #3137. -- Generated perf/cleanup PRs: #3105, #3107, #3108, #3109, #3112, #3117, - #3121, #3129. - -### Conflict against release branch (need scratch triage, rebase, or defer) - -Real feature/fix work: #3103 (#3080), #3104 (#3095), #3106 (#3095), #3013, -#3010, #3053, #2773 (#2574), #2808, #2851, #2865, #2933, #2486, #2879, -#3051 (voice, see above), #3005 (registry refactor, see above). - -i18n localize train (likely serial-conflicting with each other): #2239, -#2894, #2899, #2918, #2919, #2921, #2926, #2929, #2932, #2940. - -Generated test/cleanup PRs with conflicts: #3110, #3111, #3114, #3115, -#3118, #3123, #3124, #3126, #3127, #3128, #3133, #3136, #3138, #3139, #3141. - -## Milestone Issues - -At scan time, milestone `v0.8.59` had 76 open issues and 35 open PRs, for 111 -open milestone items. Issue priorities: - -1. #3063 release tracker and release-blocker coordination. -2. Close/update already-covered approved PRs #3152, #3148, #3150 after the - release branch reaches `main`; do not re-harvest them. -3. User-visible bugs/regressions: #3064, #3067, #3065, #3080, #3088, #3095, - #3094, #3070, #1812, #1679, #1190, #1120, #1060, #861, #759, #1920. -4. Provider/model catalog and cost/context: #3086, #3085, #3084, #3083, #3076, - #3075, #3073, #3072, #3071, #3066, #2574, #1310, #868. -5. Tool and runtime UX: #3146, #3145, #3144, #3143, #3102, #3079, #2886, - #1917, #1847, #1822, #1802, #1794, #1186. -6. TUI and command polish: #3081, #3077, #3074, #3069, #2870, #2791, #1871, - #1722, #963. -7. Docs/localization/migration: #3093, #3092, #3091, #3090, #3087, #3068, - #3061, #3058, #1447, #1118, #683. - -For each issue, first ask: "Is this already satisfied on -`codex/v0.8.59-release-ready`?" If yes, prepare a closure/update note with the -commit hash. If no, implement or harvest the smallest safe slice. - -## Suggested Next Work Session - -Conflict triage of #3056/#3052/#3051/#3011/#3009/#3005 was completed on -2026-06-12 (scratch branch `scratch/v0.8.59-conflict-triage-20260612`, -local only). Remaining: - -1. Get Hunter's explicit approval to land the eight release-branch-clean PRs: - #3062, #3008, #3006, #3003, #3002, #3001, #2971, #2943. -2. Land those in small batches, starting with docs/dependencies/low-risk fixes, - and run focused checks after each batch. -3. Hunter decisions needed: include #3051 (voice) in v0.8.59 or defer; defer - #3005 (provider registry refactor) or reconcile the `siliconflow_cn` vs - `siliconflow`+aliases key naming and land. -4. After the release branch reaches `main`, close the verified-covered PRs: - #3152, #3148, #3150, #2901, #3056, #3052, #3011, #3009, #2895. -5. Triage the blocked PRs (#3053, #3013, #2995, #2903) and the dirty/localize - train, then move to milestone issues per the priority list above. -6. Update `CHANGELOG.md` and close/update linked issues only after verification. - -## Useful Commands - -List PRs with v0.8.59: - -```bash -gh pr list -R Hmbown/CodeWhale --state open --limit 200 \ - --search 'milestone:v0.8.59' \ - --json number,title,url,headRefName,baseRefName,mergeStateStatus,reviewDecision,isDraft,statusCheckRollup -``` - -Find formal reviews by Hunter on open PRs: - -```bash -for n in $(gh pr list -R Hmbown/CodeWhale --state open --limit 200 --json number --jq '.[].number'); do - gh pr view -R Hmbown/CodeWhale "$n" --json number,title,url,reviews,updatedAt \ - --jq '. as $pr | [.reviews[]? | select(.author.login == "Hmbown") | {number:$pr.number,title:$pr.title,url:$pr.url,prUpdatedAt:$pr.updatedAt,state:.state,submittedAt:.submittedAt}][] | [.number,.state,.submittedAt,.prUpdatedAt,.title,.url] | @tsv' -done -``` - -Check whether a PR has patch-equivalent commits already on the release branch: - -```bash -git log --cherry-mark --right-only --oneline \ - origin/codex/v0.8.59-release-ready...refs/tmp/pr-3152 -``` - -Show conflicts without modifying the worktree: - -```bash -base=$(git merge-base origin/codex/v0.8.59-release-ready refs/tmp/pr-3152) -git merge-tree "$base" origin/codex/v0.8.59-release-ready refs/tmp/pr-3152 -``` diff --git a/release-notes-v0.8.59.md b/release-notes-v0.8.59.md deleted file mode 100644 index 794b7fdf..00000000 --- a/release-notes-v0.8.59.md +++ /dev/null @@ -1,107 +0,0 @@ -v0.8.59 - -CodeWhale v0.8.59 is a stability and integration release that hardens the TUI, -improves sidebar interactivity, localizes notifications, cleans up user-facing -naming, and adds experimental config and runtime API foundations. - ---- - -## TUI stability and interactivity - -- **Sidebar resize stays live during active turns** — the split pane no longer - freezes while the model is generating. -- **Sidebar hover stays live while loading** — detail popovers update in real - time instead of dropping mid-turn. -- **Hover highlight cleared on exit** — stale highlight state no longer - persists after leaving the sidebar. -- **Ghostty motion override kept live** — mouse motion events continue to - work correctly in Ghostty terminals. -- **Mouse-report sanitizer added** — raw SGR mouse reports are sanitized - defensively so corrupted composer input is blocked. -- **Sidebar Copy action** — the right-click context menu now includes Copy - alongside existing actions. -- **Richer Work overflow and Agents hover detail** — sidebar detail - popovers surface more information for Work and Agents entries. -- **Provider-wait state is now observable** — the TUI shows route, idle - budget, and fanout-preflight state during provider waits. -- **fanout launches are queued behind a visible launch gate** — interactive - fanout no longer stalls the TUI without feedback. - -## Sub-agent safety and worker-ledger substrate - -- **Sub-agents survive backgrounded waits** — worker cards are no longer - dropped when the TUI yields during long waits. -- **Interrupted sub-agent lifecycle events are emitted** — stale running - cards are reconciled with actual state. -- **Runtime-prompt stand-still guard** — the TUI no longer spins in an - autonomous loop when the launch gate is closed. - -## i18n and user-facing naming - -- **Notifications are now localized** — notification text respects the - configured language instead of always rendering in English. -- **Tool family labels are localized** — 10 tool family labels now use - MessageId-based i18n. -- **Config editor labels are localized** — config section editor labels - follow the configured language. -- **"Bash" shown in user-facing UI** — shell execution is surfaced as "Bash" - in the TUI while `exec_shell` remains the internal tool name. - -## Provider and model updates - -- **Kimi OAuth credentials aligned with Kimi Code** — the config path for - Kimi OAuth credentials now matches the Kimi Code provider surface. -- **Kimi K2.7 Code defaults added** — model metadata for Kimi K2.7 Code is - included. -- **SiliconFlow CN provider config split** — a separate provider entry for - SiliconFlow China is available. -- **Provider metadata registry refactored** — provider metadata is now - data-driven and easier to extend. -- **OpenRouter Nemotron preset fixed** — the invalid model ID is corrected. -- **Provider fallback chain activated** — harvested from community PR #2773. - -## Experimental config and runtime API - -- **Experimental feature flags** — `[experimental]` config section for goal - and WhaleFlow opt-ins, surfaced through normal config paths. -- **Runtime API Phase 0 + Phase 1** — brand-neutral naming, capabilities - advertisement, and dynamic tool protocol types for editor/GUI clients. -- **Command strategy registry** — harvested from community PR #2851. -- **Context source map report** — visibility into rules, tools, memory, and - skills contributions to prompt cost. - -## Community harvests - -- **PR #3010** — lock slim default prompt with calm-overlay regression test. -- **PR #2808** — thread undo/retry and snapshot restore endpoints. -- **PR #3051** — voice input commands and hotbar integration. -- **PR #2773** — activate provider fallback chain. -- **PR #2851** — command strategy registry. - -## Other fixes and improvements - -- **macOS Command modifier normalized to Control** for keyboard shortcuts - (#2938). -- **Hotbar slots dispatched from number keys**. -- **Thread goals persisted through the app server**. -- **Concise verbosity mode added** to config. -- **Workspace trust required for project hooks** — safety boundary - enforced. -- **Thread detail item reads batched** — N+1 query fix. -- **Legacy deepseek users guided to codewhale** in update paths. -- **Static Linux x64 musl binaries** now built. -- **Approval rule metadata exposed at runtime**. -- **Codex response errors clarified** in TUI. -- **Microsoft Build Tools / cmake --build** shell compatibility fix. -- **PDF extraction hardened** for non-Identity-H CMap fonts. - ---- - -**Full headless sub-agents (fleet manager, worker runtime, durable inbox/ledger) -are deferred to v0.8.60 / #3096.** The v0.8.59 release includes the -sub-agent safety and worker-ledger substrate that v0.8.60 builds on. - -**v0.8.60+ tracking issues remain open:** -- #3096 — Full headless sub-agents and worker runtime -- #1310 — MiniMax first-party provider -- #3187 — Z.ai / StepFlash first-party providers