Commit Graph

1961 Commits

Author SHA1 Message Date
Hanmiao Li 5e22753ee1 fix(tui): normalize macOS SUPER (Cmd) to CONTROL for keyboard shortcuts (#2938) (#2943)
* fix(tui): normalize macOS SUPER (Cmd) to CONTROL for keyboard shortcuts (#2938)

On macOS, terminal emulators may report Cmd (SUPER) instead of Ctrl
(CONTROL) for keyboard shortcuts, depending on the terminal app and
its configuration. This caused Ctrl+B, Ctrl+Alt+2, and other shortcuts
to be inconsistent.

Fix:
- Add normalize_macos_modifiers() in composer_ui.rs
- On macOS: map SUPER to CONTROL when CONTROL is not already set
- On other platforms: no-op
- Apply normalization at the key event entry point in ui.rs

Tests:
- normalize_macos_modifiers_maps_super_to_control
- normalize_macos_modifiers_preserves_existing_control
- normalize_macos_modifiers_leaves_alt_unchanged

* fix: strip SUPER from modifiers after normalization per review

* fix: gate macOS-specific modifier tests with #[cfg(target_os = "macos")]
2026-06-12 10:53:09 -07:00
New2Niu 2d81f91ea1 fix: codewhale update error: GitHub release downloads may be blocked or slow on this network (#3006)
Co-authored-by: lei <liulei@8531.cn>
2026-06-12 10:53:06 -07:00
cyq b8be06d9ba docs(prompt): clarify Constitution trust framing (#3008)
* docs(prompt): clarify Constitution trust framing

* docs(prompt): align trust standing wording
2026-06-12 10:53:03 -07:00
Hunter Bown aa1ce527e7 feat(tui): add /plugins slash command (#3169)
Adds a /plugins [name] command to list discovered script plugin tools
and inspect their metadata (description, input schema, approval level,
path). Includes localization strings and unit tests.

Co-authored-by: CodeWhale Agent <codewhale-agent@hmbown.local>
2026-06-12 10:52:38 -07:00
Reid 1ac32df627 feat(tui): dispatch hotbar slots from number keys (#3056)
Wire hotbar key dispatch into the TUI event loop.

  Bare 1-8 now fires the matching hotbar slot only when the composer is empty.
  Alt+1 through Alt+8 fires the matching slot even when the composer has text.
  Modal and overlay views keep ownership of those keys, and empty slots remain a
  safe no-op.
2026-06-12 10:52:02 -07:00
Nightt 4968983339 fix(tools): apply strict mode per schema (#3062)
* fix: apply strict tool mode per schema

* fix: preserve optional strict schema fields
2026-06-12 10:51:58 -07:00
Claude 0181493c79 release: v0.8.58 — native Anthropic provider, hooks v2 JSON decisions, clickable sidebar, provider-aware subagent routing, model-fact prompt templating
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-10 23:06:44 -07:00
Claude d940b7821c Merge origin/main into v0.8.58-3014-anthropic-adapter — keep #3024 Moonshot/Ollama dialect arms plus the #3014 Anthropic native-shaping arms in all three reasoning tiers; keep the #3014 Anthropic capability early-return while honoring the #3023 removal of the Openai/Atlascloud/Moonshot one; union claude + bare-id max_output rows 2026-06-11 05:45:51 +00:00
Claude 06f49af69f Merge origin/main into v0.8.58-constitution — carry the #3025 model-fact placeholders ({context_window_note}/{subagent_economics}/{model_thinking_note}/{model_characteristics}) into constitution.md per the prompt-layer coordination note; union sidebar tests and add TaskPanelEntry.kind to #3028 test literals 2026-06-11 05:39:19 +00:00
Hunter Bown 5b47a2e3e0 Merge PR #3048 from Hmbown: parameterize model-specific facts in the base prompt
feat(prompts): parameterize model-specific facts — context window, pricing, thinking
2026-06-10 22:30:08 -07:00
Hunter Bown 186ebbb116 Merge PR #3050 from Hmbown: wire reasoning-effort for Atlascloud, Moonshot, Ollama dialects
fix(reasoning): wire reasoning-effort for Atlascloud, Moonshot, Ollama
2026-06-10 22:30:00 -07:00
Hunter Bown a6d5824cee Merge PR #3047 from Hmbown: model-based capability lookups for Moonshot/OpenAI/Atlascloud + bare-id registry rows
fix(providers): use model-based lookups for Moonshot/OpenAI/Atlascloud/Ollama capability
2026-06-10 22:29:52 -07:00
Hunter Bown 78ed3768bf Merge PR #3046 from Hmbown: add Moonshot/Kimi to reasoning-content provider and model gates
fix(reasoning): add Moonshot/Kimi to reasoning-content provider and model support
2026-06-10 22:29:44 -07:00
Claude 3f2f154ad2 Merge origin/main into v0.8.58-3018-unhardcode-deepseek — append #3030 step-counter tests after the #3018 routing tests 2026-06-11 05:29:25 +00:00
Claude d9dff6809c Merge origin/main into v0.8.58-3026-hooks-v2 — keep both the #3026 hook fold helpers and the #3027 command_denies_tool gate in turn_loop 2026-06-11 05:26:27 +00:00
Claude 8a165cc49b Merge origin/main into v0.8.58-3028-clickable-tui — union the sidebar test imports (#3030 hover texts + #3028 row builders) 2026-06-11 05:23:29 +00:00
Hunter Bown 880346622b Merge PR #3039 from Hmbown: OSC 8 out-of-band hyperlink infrastructure
feat(tui): OSC 8 out-of-band hyperlink infrastructure
2026-06-10 22:20:35 -07:00
Hunter Bown 6b01cccc65 Merge PR #3038 from Hmbown: make Ctrl+B directly background the active foreground shell
fix(tui): make Ctrl+B directly background the active foreground shell
2026-06-10 22:20:27 -07:00
Hunter Bown d9c5dac55b Merge PR #3037 from Hmbown: compact tool-call transcript rendering — suppress boilerplate cells
fix(tui): compact tool-call transcript rendering — suppress boilerplate
2026-06-10 22:20:18 -07:00
Claude 418ad5b744 Merge origin/main into v0.8.58-3030-hide-internal-ids — combine #3030 stable agent labels with #3033 AgentProgress redraw throttle (both kept in App state and the AgentProgress arm) 2026-06-11 05:19:57 +00:00
Hunter Bown eb610c83ee Merge PR #3035 from Hmbown: throttle AgentProgress redraws to prevent freeze under subagent load
fix(tui): throttle AgentProgress redraws to prevent freeze under subagent load
2026-06-10 22:11:17 -07:00
Hunter Bown 8fadd764d2 Merge PR #3042 from Hmbown: exec --allowed-tools, --disallowed-tools, --max-turns, --append-system-prompt
feat(exec): add --allowed-tools, --disallowed-tools, --max-turns, --append-system-prompt
2026-06-10 22:11:07 -07:00
Hunter Bown 20fa626fb8 Merge PR #3041 from Hmbown: harvest error-message fixes — better tool denial and provider errors
fix: harvest error-message fixes from PR #2933 — better tool denial + subagent conflict messages
2026-06-10 22:11:00 -07:00
Claude 1a61a79910 fix(hooks): pass the Windows cmd /C command line via raw_arg — Command::arg's CRT-style quoting inserted literal \" into hook commands, which cmd.exe does not unescape, so JSON decisions never parsed (hook_gate_* Windows failures)
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 04:46:05 +00:00
Claude 29f75dc19d fix(lint): fold the sidebar click row lookup into the bounds let-chain — newer clippy (1.96) flags the nested if as collapsible_if and CI lints with -D warnings
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 04:42:18 +00:00
Claude 8284f395e6 test(integration): add signature field to ContentBlock::Thinking initializers and pattern in tests/ — the bins-only local run missed integration-test targets when the field landed
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 04:38:39 +00:00
Claude f65d091c65 fix(lint): collapse nested if-let into a let-chain in codex responses reasoning shaping — newer clippy (1.96) flags collapsible_if on if-let nesting and CI lints with -D warnings
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 04:29:24 +00:00
Claude 279ad5af90 feat(client): native Anthropic Messages API adapter — /v1/messages dialect with x-api-key + anthropic-version auth, adaptive thinking + output_config.effort shaping, cache_control breakpoints (prefix zones, capped at 4), signed-thinking replay via new signature field + signature_delta, #2961 usage normalization, SSE pass-through with error envelopes; registry/docs sync (#3014)
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 03:54:46 +00:00
Claude 3c38dabefb feat(providers): add Anthropic to the three provider surfaces — ApiProvider/ProviderKind variants, provider metadata (x-api-key auth env, api.anthropic.com, claude-sonnet-4-6 default), AnthropicMessages wire format, ModelRegistry rows for claude-opus-4-8 / claude-sonnet-4-6 / claude-haiku-4-5 (#3014, WIP)
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 03:10:47 +00:00
Hunter Bown 81b060928b Merge PR #2579 from encyc: Phase 4 — replace Session.messages Vec with AppendLog
refs(#2264): Phase 4 — replace Session.messages: Vec<Message> with AppendLog
2026-06-10 20:10:20 -07:00
Hunter Bown 544b44bd98 Merge PR #2892 from gordonlu: localize sandbox elevation dialog across 7 locales
feat(i18n): localize sandbox elevation dialog across 7 locales
2026-06-10 20:10:05 -07:00
Claude fc10d10189 feat(routing): complete #3018 — RouterCandidates + provider_router_candidates; candidate-aware heuristics, router prompts and recommendation parsing; skip the network router when no cheap tier exists; validate spawn-time model against the active provider; tests + SUBAGENTS.md per-role models docs
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 03:03:08 +00:00
Claude 2bbe25b7e4 fix: #3034 audit residuals — correct the constitution renderer doc-comment (renderer NOT reconciled with committed MD, do not regenerate); pin the collapsed-thinking header assertion; align auth list's openai-codex credential source with auth status
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 02:45:25 +00:00
Claude 033132a735 fix(tui): #3032 residuals — running-exec hint now says Ctrl+B backgrounds the command; Ctrl+B documented in KEYBINDINGS.md and runbook updated for menu removal; Cannot-background message names the reason (interactive / non-shell tool / nothing running)
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 02:40:07 +00:00
Claude 7a64119635 test(reasoning): #3016 coverage — Moonshot in provider_accepts_reasoning_content, kimi-k2.6 stream classification, multi-chunk Moonshot reasoning_content decoder fixture; exclude non-thinking kimi-for-coding from the kimi- prefix rule
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 02:35:36 +00:00
Claude 5fb41cc209 test(errors): add #3020 test extensions — Plan-mode denial passes through verbatim, bare/model denials get the suffix; Model-Not-Exist + OpenAI-style rejections annotated; conflict error includes elapsed time; tighten mode-word predicate so 'model' no longer matches
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 02:30:30 +00:00
Claude 948e42397f fix(tui): #3029 audit fix — interleave OSC 8 open/close per region in diff order (OSC 8 is last-writer-wins state; batched opens linked the whole frame to the last target); drop cursor-move hack and dead pending_links; add byte-stream bracketing tests
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 02:26:45 +00:00
Claude b6e88d2d34 fix(tui): #3031 audit fix — map the literal '(no output)' ToolResult placeholder to None at the routing layer (exec + generic cells) so compact-mode suppression actually fires; add helper + render-mode tests
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 02:18:46 +00:00
Claude 5a71d644f5 fix(tui): #3030 audit fixes — nickname beats generated Agent-N label; status bar uses stable labels (with raw-id fallback) for spawn/progress/complete; drop truncated raw id from compact detail line; add label/turn/step-counter tests
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 02:13:30 +00:00
Claude df1b35ba0f fix(tui): #3033 audit fix — throttled AgentProgress no longer cancels redraws owed to other events in the same drain batch; restore pre-event accumulator value; extract agent_progress_redraw_permitted + unit tests
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 02:03:17 +00:00
Claude 6f5039101a feat(hooks): wire the #3026 decision contract into the engine — JSON deny/ask/updatedInput now steer tool calls (deny>ask>allow, last-writer updatedInput), additionalContext piped into tool results, project .codewhale/hooks.toml loaded at both HookExecutor sites; parser hardening + fold/glob/project tests; docs
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 01:52:22 +00:00
Claude ac3f8c04b6 fix(tui): rebuild sidebar click-action mapping — lines and actions now built in one pass so indices can't drift; shell_* jobs route via /jobs, task jobs via /task; finished jobs lose the cancel target; agents panel gates role-mix slot correctly; fix test compile; add action-mapping + click-resolution tests (#3028)
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 00:46:38 +00:00
Claude c15e937096 fix(exec): wire --disallowed-tools into the gate chain (deny wins over allow), filter the advertised tool catalog, honor --append-system-prompt in needs_engine, surface max-steps notice in text mode; add clap/gate/catalog tests (#3027)
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 00:31:05 +00:00
Claude 6a2c529242 fix(prompts): make #3025 placeholders live — base.md now carries {context_window_note}/{subagent_economics}/{model_thinking_note}/{model_characteristics}; add model_characteristics handler (V4 vs generic); fix one-million-token-token wording; genericize Flash V4 tool_agent note; add compose + pricing tests
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 00:23:37 +00:00
Claude b9bcc9c710 fix(providers): update stale Atlascloud/Ollama capability tests to the generic model-based path; add bare Moonshot/MiniMax/Z.ai model rows (kimi-k2.6, kimi-for-coding, minimax-m3, glm-5.1, glm-5v-turbo) mirroring vendor-prefixed rows; add Moonshot capability + engine capacity tests (#3023, #1310)
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 00:17:53 +00:00
Claude 29e60cd4b9 fix(reasoning): Atlascloud joins the DeepSeek dialect group — max tier now sends reasoning_effort=max; add Atlascloud/Moonshot/Ollama dialect-shape tests; document per-provider reasoning-effort wire mapping in PROVIDERS.md (#3024)
Co-Authored-By: Claude <noreply@anthropic.com>
https://claude.ai/code/session_018zaP8vUfTAsrE38L6h6fw5
2026-06-11 00:13:18 +00:00
Hunter Bown e1a61f445e fix(tui): remove ShellControlView menu now unreachable after direct Ctrl+B
Ctrl+B backgrounds the foreground shell directly (#3032), leaving the
two-step shell-control modal dead code that fails clippy -Dwarnings.
Delete ShellControlView/ShellControlChoice, the ModalKind and ViewEvent
variants, and open_shell_control; repoint the default-paste regression
test at HelpView; update the Ctrl+B keybinding description in all
locales to describe the new direct-background behavior.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 16:49:30 -07:00
Hunter Bown c98b7ea42c fix: harvest error-message fixes from PR #2933 — better tool denial + subagent conflict messages (#3020)
Three targeted error-message improvements extracted from community
PR #2933 (author cy2311), with additional model-not-found annotation:

1. dispatch.rs format_tool_error: pass through self-explanatory messages
   that already name the cause (mode switch, allow_shell, feature flag,
   denied by user) instead of appending a conflicting generic suffix.
   Fixes the Plan-mode double-message (#2657).

2. subagent/mod.rs session-name conflict: include elapsed time
   (started Ns ago / NmNs ago) so the parent can distinguish a live
   worker from a stale/failed earlier spawn (#2656).

3. subagent/mod.rs annotate_child_model_error: catch model-not-found
   patterns (Model Not Exist, does not exist, no such model, etc.) in
   the raw error text even when the taxonomy classifies them as
   Internal rather than Authorization/State (#2653).

Closes #2653, #2656, #2657.
Credit: cy2311 for the dispatch.rs and subagent conflict hunks from #2933.

Co-authored-by: cy2311 <29836092+cy2311@users.noreply.github.com>
2026-06-10 16:41:55 -07:00
Hunter Bown 2d7d5e55ed style: cargo fmt
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 16:40:37 -07:00
Hunter Bown 6d646999d9 style: cargo fmt
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 16:40:34 -07:00