Commit Graph

2700 Commits

Author SHA1 Message Date
CodeWhale Agent d48373617f fix(tui): clear sidebar hover highlight on exit while loading 2026-06-12 15:54:08 -07:00
CodeWhale Agent b0577057c9 fix(tui): localize notifications and persist sidebar focus 2026-06-12 15:47:44 -07:00
CodeWhale Agent e4989c0eae feat(tui): add Copy to the sidebar right-click context menu
Removing Paste from the sidebar menu (#3065) left rows with no copy
path at all — sidebar text can't be mouse-selected. Right-clicking a
sidebar row now offers Copy, which writes the row's untruncated text
plus its hover detail to the clipboard via a new
ContextMenuAction::CopyText. Run stays first for clickable rows.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 15:35:20 -07:00
CodeWhale Agent ba1104251a feat(tui): richer Work overflow and Agents hover detail in sidebar
- Work panel: hovering the '+N more checklist items' overflow row now
  reveals the omitted checklist items in the popover, so a
  height-constrained panel no longer hides work items with no way to
  inspect them (#3063).
- Agents panel: the compact agent label row's hover text now carries a
  full dossier — id, role, status, elapsed time, step count, objective
  (new SidebarAgentRow field, from SubAgentAssignment), branch, and
  untruncated progress. Compact rows stay unchanged.
- Detail-row hover keeps the full progress text instead of the
  summarized form.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 15:26:53 -07:00
CodeWhale Agent 2da01367e6 fix(tui): keep sidebar resize live during active turns
The loading mouse filter (should_drop_loading_mouse_motion) dropped all
Drag events while app.is_loading unless a transcript selection or
scrollbar drag was active. A sidebar resize started on the handle
(Down passes the filter) then never received its Drag events, leaving
the resize wedged mid-gesture during live runs (#3063, symptom of the
#3096 subagent-runtime pressure on the TUI).

- Allow Drag events through the loading filter while
  app.sidebar_resizing is set.
- Clear last_sidebar_area / last_sidebar_handle_area and any in-flight
  resize when the sidebar is hidden or doesn't fit, so stale handle
  hit-areas can't capture clicks.
- Tests: resize down/drag/up while loading, mouse-up outside the
  handle still ends the resize.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 15:26:53 -07:00
CodeWhale Agent 3169c459ed docs(changelog): document harvested v0.8.59 features 2026-06-12 14:54:47 -07:00
CodeWhale Agent 7ea05982f2 fix(clippy): resolve rust 1.96 lint errors blocking the release gate
cargo clippy --workspace -D warnings fails on three pre-existing spots
newly flagged by the current toolchain: unnecessary_sort_by in
context_report, question_mark in the provider fallback chain, and
unnecessary_map_or in the empty-state widget check. Apply the
mechanical fixes clippy suggests; no behavior change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 14:48:42 -07:00
CodeWhale Agent 88ec6b5ea5 Harvest PR #3010: lock slim default prompt with calm-overlay regression test
The release branch already ships the slim-prompt intent in a stronger
form than #3010 — compose_default_static_layers appends no personality
overlay at all (voice/tone guidance is folded into the constitution
preamble), where the PR only emptied the Calm arm. Carry over the PR's
regression test, which derives its assertion from calm.md itself so a
future re-inclusion of the overlay text fails loudly.

Harvested from PR #3010 by @894876246

Co-authored-by: Hanmiao Li <894876246@qq.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 14:43:42 -07:00
CodeWhale Agent 71c45cf92f Harvest PR #2808: thread undo/retry and snapshot restore endpoints
The release branch independently evolved the sessions API from #2808
(POST /v1/sessions creates from a thread, /v1/sessions/{id}/resume-thread
resumes), but the turn-rewind and snapshot-restore endpoints never
landed. Port them onto the current thread model:

- POST /v1/threads/{id}/undo — fork at the Nth-from-last user message
  and return the dropped user text for input pre-population.
- POST /v1/threads/{id}/patch-undo — restore the newest differing
  tool:/pre-turn: workspace snapshot (same target selection as the
  TUI's patch_undo), then fork the conversation; reports the file
  rollback result alongside the forked thread.
- POST /v1/threads/{id}/retry — fork and immediately start a turn
  re-using the dropped user text (or an override prompt), adapted to
  the extended StartTurnRequest (dynamic_tools, environment_id).
- POST /v1/snapshots/{id}/restore — restore a workspace snapshot by id.

fork_at_user_message and its tests were already present; this adds the
HTTP surface plus endpoint tests for undo/patch-undo/retry/restore.

Harvested from PR #2808 by @bengao168

Co-authored-by: Ben Gao <bengao168@msn.com>
Co-authored-by: Hunter Bown <hmbown@gmail.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 14:43:42 -07:00
CodeWhale Agent 9b31621b19 Harvest PR #3051: voice input commands and hotbar integration
Port /voice, /voice-send, and /voice-control into the command strategy
registry as groups/core/voice.rs. The handlers only flip App state
(voice_enabled, voice_send_enabled, voice_control_enabled) and emit the
new AppAction::VoiceCapture; the UI event loop performs the actual
record + transcribe cycle so credentials come from the live Config
(deepseek_api_key/deepseek_base_url) instead of auth fields cached on
App, and no audio is ever recorded by the registry smoke tests.

- voice.toggle hotbar action dispatches the real /voice command and
  reports voice_enabled as its active state, replacing the placeholder.
- Recording uses sox/rec/arecord with RMS-based silence detection;
  transcription posts input_audio blocks to the provider chat
  completions API (async reqwest — the blocking client would panic
  inside the tokio event loop).
- Transcripts insert at the composer cursor via App::insert_str. With
  /voice-send enabled, a transcript ending in "send it" / 发送 strips
  the suffix and submits; a bare "send it" submits the current composer
  content. With /voice-control enabled, transcription runs through the
  AI dictation pipeline that sees the composer text.
- Failures (no recorder, no API key, short recording, network) surface
  as localized status messages and disarm voice input.
- Localized command help and status strings for all seven shipped
  locales; /voice now appears in the command palette.

Harvested from PR #3051 by @huqiantao

Co-authored-by: huqiantao <huqiantao@users.noreply.github.com>
Co-authored-by: Hunter B <hmbown@gmail.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 14:43:27 -07:00
CodeWhale Agent 662a459ee5 Harvest PR #2773: activate provider fallback chain
Harvested from PR #2773 by @idling11

Co-authored-by: Hanmiao Li <894876246@qq.com>
2026-06-12 14:12:51 -07:00
CodeWhale Agent 4200b64365 Harvest PR #2851: command strategy registry
Harvested from PR #2851 by @aboimpinto

Co-authored-by: Paulo Aboim Pinto <aboimpinto@gmail.com>

Co-authored-by: Hunter Bown <hmbown@gmail.com>
2026-06-12 14:04:22 -07:00
CodeWhale Agent 89a9981bf9 Merge PR #2879: Hugging Face provider docs and tests
Harvested from PR #2879 by @mvanhorn

Co-authored-by: mvanhorn <455140+mvanhorn@users.noreply.github.com>
2026-06-12 13:56:03 -07:00
CodeWhale Agent 1dc4c279ac Merge PR #3005: provider metadata registry
Harvested from PR #3005 by @sximelon

Co-authored-by: sximelon <15710511+sximelon@users.noreply.github.com>
2026-06-12 13:52:29 -07:00
CodeWhale Agent 1147655397 Merge commit 'refs/tmp/pr-2995' into work/v0.8.59-listed-pr-harvest 2026-06-12 13:50:25 -07:00
Hunter Bown 368b0b704d Merge pull request #3177 from Hmbown/scratch/v0.8.59-experimental-config
feat(config): surface experimental feature flags
2026-06-12 13:36:57 -07:00
CodeWhale Agent 81265ec71b feat(config): surface experimental feature flags 2026-06-12 13:36:13 -07:00
Hunter Bown 62e7f0e686 Merge pull request #3176 from Hmbown/scratch/v0.8.59-release-finish-gpt55-20260612
fix(release): harden v0.8.59 terminal and file stability
2026-06-12 13:29:34 -07:00
CodeWhale Agent d921b5670d fix(tui): keep Ghostty motion override live 2026-06-12 13:27:29 -07:00
CodeWhale Agent a0724bc5af fix(release): harden Windows shell env and PDF extraction
(cherry picked from commit 2d5f2d235849cd2fa520937a529935759e3782a3)
2026-06-12 12:12:24 -07:00
Hunter Bown a448194b81 feat(runtime-api): Phase 0 + Phase 1 — brand-neutral naming, capabilities, and dynamic tool protocol types (#3168)
Phase 0:
- Rename runtime API metadata to CodeWhale Runtime API while keeping
  DeepSeek-prefixed env vars and headers as aliases.
- Add CODEWHALE_RUNTIME_TOKEN primary with DEEPSEEK_RUNTIME_TOKEN fallback.
- Accept x-codewhale-runtime-token header alongside x-deepseek-runtime-token.
- Change generated token prefix from dst_ to cwrt_.
- Add runtime_api_version, codewhale_version, transports, capabilities,
  and experimental to /v1/runtime/info while preserving old fields.
- Update CLI help for --auth-token and --cors-origin.
- Add CODEWHALE_CORS_ORIGINS with DEEPSEEK_CORS_ORIGINS alias.

Phase 1:
- Split inline pub mod runtime into crates/protocol/src/runtime/mod.rs.
- Add DynamicToolSpec, DynamicToolItemStatus, DynamicToolCallParams,
  DynamicToolCallResult, DynamicToolCallContent, and TurnEnvironmentParams.
- Accept dynamic_tools and environments on thread create, plus
  dynamic_tools and environment_id on turn start (no-op in Phase 0/1).

Tests:
- Update existing auth/health/runtime_info tests for new naming.
- Add header alias tests and dynamic-tool request deserialization tests.
- Add protocol crate round-trip tests for all new types.

Co-authored-by: CodeWhale Agent <codewhale-agent@hmbown.local>
2026-06-12 10:51:54 -07:00
CodeWhale Agent fc999162c0 build(release): static linux x64 binaries with musl
Harvested from PR #2903 by @wavezhang.
2026-06-12 10:18:08 -07:00
CodeWhale Agent 8fc2b904de docs: record full 90-PR equivalence audit and lane B landings
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 10:00:53 -07:00
CodeWhale Agent d7de0a8865 Merge PR #2971: expose matched approval rule metadata
Verified on scratch/v0.8.59-clean-train-20260612: build and hooks/core tests green.
2026-06-12 09:59:53 -07:00
CodeWhale Agent 4d84d66e67 Merge PR #2943: normalize macOS SUPER (Cmd) to CONTROL for keyboard shortcuts
Closes #2938. Verified on scratch/v0.8.59-clean-train-20260612: build and focused TUI modifier tests green.
2026-06-12 09:59:53 -07:00
CodeWhale Agent c08f161e1f docs: add v0.8.59 triage runbook and scratch-branch integration guidance
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-12 09:56:29 -07:00
Hunter B ca826bb23b fix(tui): clarify Codex response errors 2026-06-12 08:34:46 -07:00
Hunter B ccc0315831 chore(release): prepare v0.8.59
Cut the 0.8.59 changelog section, bump workspace/npm/README versions, refresh Cargo.lock and generated web facts, and sync the embedded TUI changelog slice.

Also fixes the short codew shim to prefer its sibling codewhale dispatcher before PATH so fresh installs do not delegate to an older global binary.
2026-06-12 07:05:05 -07:00
cyq1017 42de833d80 feat(config): add concise verbosity mode
Harvests #3052 onto the v0.8.59 release branch. Noninteractive CLI launches default to concise output discipline unless config, env, or --verbosity overrides it; interactive TUI launches remain normal by default.

Also forwards CODEWHALE_VERBOSITY as the primary env bridge while keeping DEEPSEEK_VERBOSITY for compatibility, documents the setting, and records @cyq1017 credit in both changelogs.
2026-06-12 06:41:01 -07:00
Hunter B cf910b7da2 feat(goal): persist thread goals through app server 2026-06-12 06:28:47 -07:00
Hunter B 8f265e204f fix(tui): use muted selection highlights in dark themes 2026-06-12 06:13:08 -07:00
Hunter B db8039ae46 fix(tui): keep sidebar hover live while loading 2026-06-12 06:03:07 -07:00
Hunter B 84cae206aa fix(tui): scope context menu actions to sidebar 2026-06-12 06:00:25 -07:00
Hunter B 18b865991f fix(acp): advertise terminal auth method 2026-06-12 05:54:18 -07:00
Hunter B b424848f7e fix(context): keep generated project context ephemeral 2026-06-12 05:52:00 -07:00
Hunter B 438104510c feat(tui): label collapsed command activity 2026-06-12 05:47:23 -07:00
Hunter B efcf299712 feat(models): add Kimi K2.7 Code defaults 2026-06-12 05:43:38 -07:00
Hunter B de9a0131cf test(tools): avoid approximate constant lint 2026-06-12 05:36:15 -07:00
Hunter B 0986cabb1d feat(tui): add context source map report
Add an explicit /context report|json|summary source-map surface while preserving plain /context as the existing inspector.

Expose the same diagnostic map through doctor --context-json for headless checks. The report uses the existing compaction token heuristic and labels counts as conservative estimates rather than exact provider billing.

Modified harvest from PR #3150 by @idling11.

Co-authored-by: idling11 <8055620+idling11@users.noreply.github.com>
2026-06-12 03:20:59 -07:00
Hunter B 6e9baaa988 refactor(tui): group completion search state
Introduce a small SearchContext for workspace completion walks so the related search state moves together and the helper signatures no longer need too-many-arguments allowances.

Also keeps the nearby hotbar test clippy-clean under the all-targets TUI gate.

Modified harvest from PR #3128 by @Hmbown.

Co-authored-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
2026-06-12 03:05:56 -07:00
Hunter B c95122fb43 chore(deps): update reqwest rustls and clap_complete
Updates the lockfile-only Dependabot PRs for reqwest 0.13.4, rustls 0.23.40, and clap_complete 4.6.5 while keeping unrelated resolver drift out of the release branch.

Refs #3001.

Refs #3002.

Refs #3003.
2026-06-12 03:01:16 -07:00
Hunter B 757ffefc46 test(tools,release): cover execution subjects and mirror URLs
Harvests focused coverage from #3114, #3116, #3124, and #3127.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

Co-authored-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
2026-06-12 02:54:46 -07:00
Hunter B 1bb17cfced test(release,tools): extend helper coverage
Harvests focused coverage from #3110, #3111, #3113, #3123, #3125, and #3126.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

Co-authored-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
2026-06-12 02:53:47 -07:00
Hunter B c766aab406 test(tools): cover missing field constructor
Harvests focused coverage from #3133.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

Co-authored-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
2026-06-12 02:51:04 -07:00
Hunter B 936848f3a8 test(release): cover release channel query helpers
Harvests release helper coverage from #3130, #3131, #3132, and #3134 without adding a serial-test dependency.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

Co-authored-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
2026-06-12 02:50:35 -07:00
Hunter B e27d63a55a chore(tui): remove unused prompt persistence module
Harvests the dead-code cleanup from #3135.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

Co-authored-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
2026-06-12 02:48:57 -07:00
Hunter B f5104467db test(release): cover release base URL env overrides
Harvests the release URL coverage from #3137 without adding a serial-test dependency.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

Co-authored-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
2026-06-12 02:46:01 -07:00
Hunter B 3aa7131ebf test(tools): cover ToolError constructors
Harvests focused coverage from #3136 and #3138.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

Co-authored-by: Hmbown <101357273+Hmbown@users.noreply.github.com>
2026-06-12 02:44:27 -07:00
Hunter B b1c94b3f02 perf(skills): sync registry entries concurrently
Use bounded ordered concurrency for /skills sync so registry downloads no longer serialize one skill at a time while preserving deterministic outcome order.

Harvested from PR #3139.

Co-authored-by: Hmbown <101357273+Hmbown@users.noreply.github.com>

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-06-12 02:41:18 -07:00
Hunter B d50dfd4827 fix(hooks): require workspace trust for project hooks
Gate .codewhale/hooks.toml behind user-owned workspace trust, mirroring the project-local MCP trust boundary while preserving shell-command hook semantics.

Harvested from PR #3140.

Co-authored-by: Hmbown <101357273+Hmbown@users.noreply.github.com>

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-06-12 02:38:56 -07:00