Replaced naive with parse_semver tuple comparison
so dev builds (e.g. "0.8.46-pre") don't trigger false update hints.
Falls back to string compare when either side is non-semver.
Caught by Gemini Code Assist review on PR #2181.
grep_files default excludes now include bare directory names
(e.g. "node_modules") alongside the "dir/*" variants. The glob
matcher requires a '/' to match "dir/*", so the bare form skips
the directory traversal entirely instead of descending and filtering
each file — fixes 7MB result payloads from node_modules (#2200).
Added a background version check that fetches the latest GitHub
release tag once per TUI session. When a newer version is available,
the footer renders a persistent toast:
"vX.Y.Z available — run `codewhale update` and restart"
Silent on network errors (5s timeout).
Covers Openrouter, Novita, NvidiaNim, Fireworks, Sglang, Vllm, Ollama,
Atlascloud, and WanjieArk — the providers that were silently expanded
by the generic provider_env_vars loop but had no test coverage beyond
the existing Moonshot and OpenAI cases.
Co-Authored-By: bot_apk <apk@cognition.ai>
Harvested from PR #2118 by @Hmbown.
Includes Kimi/Moonshot OAuth, v0.8.45 release prep, the Codex/ChatGPT OAuth removal, open-source-first model defaults, and the safe green PR batch merged into main before the release branch refresh.
Adds Moonshot/Kimi provider support with Kimi CLI OAuth reuse and review fixes for secure refresh writes, model completion, CLI auth, and secret-store behavior.
* feat(tui): add command palette voice input
* feat(rlm): expose active session objects
* fix(tui): do not restore slash commands as retry drafts
* fix(config): expose voice input settings rows
* fix: sync ActiveTurnState.auto_approve when remember is set
When a user checks 'Remember for this tool' and approves a tool call,
remember_thread_auto_approve() only persisted thread.auto_approve to disk
but did not update the in-memory ActiveTurnState for the current turn.
This meant subsequent tool calls within the same turn would still require
manual approval, making the remember checkbox appear non-functional.
Now remember_thread_auto_approve() also sets
ActiveTurnState.auto_approve = true, so active_turn_flags() returns
the correct value and the approval_decision() logic auto-approves
remaining tool calls in the current turn.
(cherry picked from commit 2ccf048c8984d61e3341a4304d0796a1f965d3e7)
* test(runtime): cover remembered auto approve on active turn
---------
Co-authored-by: Ben Gao <bengao168@msn.com>
Includes cancellable file_search/list_dir behavior, deterministic sub-agent whale-species nicknames, and an honest /balance command scaffold for the provider-billing work. Reviewed the overlapping file-search cancellation contribution in #2044 from @h3c-hexin; that PR's Windows failure was unrelated to the cancellation code, and the contributor context is preserved here.
- composer_history: raise deadline to 10s on Windows for writer thread
- prompts: make memory_guidance tier-order assertion CRLF-agnostic
- gitattributes: enforce LF line endings for include_str!() prompt files
Regression from the v0.8.44 release changes — the writer thread batching
and the updated constitutional tier ordering in memory_guidance.md both
uncovered Windows-only test flakes.
migrate_config_if_needed() copies config.toml on first launch.
Called in run_interactive after config creation. Non-fatal,
never overwrites an existing primary config.
#1981: DelegateCard now shows readable roles (scout, builder,
reviewer, etc.) instead of raw agent_type strings, and uses the
completion summary as the primary detail when available. Raw
agent_ids are truncated to 8 chars as secondary detail.
#834: PlanPromptView now renders the plan explanation and steps
(when update_plan was called) before the action options. Uses
PlanSnapshot from the shared plan state.
#1638: Session picker auto-opens on clean startup when saved
sessions exist and no --resume/--continue/--fresh was specified.
No new TuiOptions field needed — uses existing resume_session_id.
When the model is busy but not actively streaming text (waiting on
tool results, sub-agents, or shell commands), Enter now tries to steer
the message into the current turn rather than silently queueing it.
If steering fails, the message falls back to queuing.
During active streaming, Enter still queues to avoid interrupting
in-flight reasoning. Ctrl+Enter forces Steer in all busy states.
#1600: 'r' keybinding in session picker for inline rename.
Enter inline rename mode, type new title, Enter to confirm, Esc to cancel.
Updates the saved session metadata and refreshes the picker list.
#1787: checklist_write, checklist_update, update_plan now trigger
immediate Work sidebar refresh (previously only todo_write did).
npm install -g codewhale now also provides the codew command.
Calls run('codewhale') — same download-and-forward pattern as
the existing codewhale.js and codewhale-tui.js wrappers.
Permanent short-form shim — forwards silently to codewhale.
Six fewer keystrokes, no deprecation warning. Ships alongside
codewhale and the legacy deepseek alias.