Commit Graph

1991 Commits

Author SHA1 Message Date
Hunter Bown 9ef8fe7a09 Merge pull request #2468 from Hmbown/codex/esc-whale-animation-fix
Stop header whale after liveness recovery
2026-05-31 15:52:09 -07:00
Hunter B e0a71c2ed0 Stop header whale after liveness recovery 2026-05-31 15:44:53 -07:00
Hunter Bown 12c06c11c8 Merge pull request #2467 from Hmbown/codex/codewhale-secret-path-migration
Migrate file secrets to CodeWhale home
2026-05-31 15:37:19 -07:00
Hunter B d6baf20721 Migrate file secrets to codewhale home 2026-05-31 15:30:35 -07:00
Hunter Bown ad347c62eb Merge pull request #2466 from Hmbown/codex/model-picker-neutral-routes
Fix model picker cancel behavior
2026-05-31 14:58:43 -07:00
Hunter B b1ae0fa60e Fix model picker cancel behavior 2026-05-31 14:49:45 -07:00
Hunter Bown f09b4ae72f Fix TUI cancel busy animations
Clear stale busy state and retry/title animations on local cancel.\n\nLocal verification:\n- cargo test -p codewhale-tui\n- codewhale doctor\n- codewhale --provider deepseek --model deepseek-v4-pro exec "Reply with exactly: OK"
2026-05-31 14:06:52 -07:00
Hunter Bown a5b363c354 Merge pull request #2464 from Hmbown/codex/mention-tunables
Make @-mention completion limits configurable
2026-05-31 13:37:58 -07:00
Hunter B f72f609293 feat: make file mention completion tunable 2026-05-31 13:29:28 -07:00
Hunter Bown 6858c4e105 docs: credit v0.8.48 contributors (#2463) 2026-05-31 13:07:20 -07:00
Hunter Bown 7765f32cdd chore(release): prep v0.8.48 (#2462) 2026-05-31 11:35:45 -07:00
Hunter Bown 5a80556eb2 feat(models): add recent large OpenRouter models (#2461) 2026-05-31 11:26:25 -07:00
HUQIANTAO 9c336123ea test(core): add comprehensive unit tests for JobManager and helpers (#2440)
* test(core): add comprehensive unit tests for JobManager and helpers

Add 35 unit tests covering:
- JobManager lifecycle (enqueue, set_running, update_progress, complete, fail, cancel, pause, resume)
- Exponential backoff computation and saturation
- History truncation beyond MAX_JOB_HISTORY_ENTRIES
- Persisted detail encode/parse round-trip
- Job status string conversion round-trips
- Helper functions (truncate_preview, json_optional_string, parse_retry_metadata, parse_history_entry)
- Status mapping between runtime and persisted types
- Initial history preview generation

* style: fix cargo fmt formatting

* test(core): fix job manager test hygiene

---------

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
Co-authored-by: Hunter B <hmbown@gmail.com>
2026-05-31 11:10:37 -07:00
HUQIANTAO 9bf14e9825 docs(state): add doc comments to all public types (#2452)
* docs(state): add doc comments to all public types

* docs(execpolicy): add doc comments to all public types

* test(web): add unit tests for pure helper functions

Add vitest configuration and tests for:
- relativeTime: time formatting (just now, minutes, hours, days, months, years)
- lastPageFromLink: GitHub Link header pagination parsing

These are the first tests for the web frontend. The test framework
(vitest) was already in package.json but had no config or test files.

---------

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
2026-05-31 11:08:16 -07:00
Implementist 45787bcf70 fix(web_search): improve Volcengine reliability — 90 s timeout, retry, and faster model (#2439)
* fix(web_search): add timeout floor and retry for Volcengine provider

Volcengine's Responses API pipeline (web search + model inference +
JSON generation) can exceed the default 15 s timeout on complex
queries, causing ~50% of requests to fail with transport errors.

Changes:
- Enforce a 60 s minimum timeout for the Volcengine provider
- Separate connect_timeout (15 s) from total request timeout
- Retry transient transport errors up to 3 times (1 s / 2 s backoff)
- Add TCP keepalive, HTTP/2 keepalive, and User-Agent headers
  matching the patterns used in client.rs

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: raise Volcengine timeout floor to 90 s

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix: correct stale comment — floor is 90 s, not 60 s

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(web_search): tighten Volcengine retry semantics

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Hunter B <hmbown@gmail.com>
2026-05-31 11:01:34 -07:00
HUQIANTAO 46134e5bb5 test(mcp): add comprehensive unit tests for MCP manager and helpers (#2441)
* test(mcp): add comprehensive unit tests for MCP manager and helpers

Add 36 unit tests covering:
- InMemoryMcpClient: tool/resource registration, listing, calling, error cases
- McpManager: start_all (ready/failed/cancelled), list_tools with filters, call_tool,
  call_qualified_tool, unregister, stop, list_resources, read_resource, sandbox state
- Tool filter: allow/deny semantics, deny-overrides-allow
- Helper functions: sanitize_component, qualify_tool_name, parse_qualified_tool_name,
  parse_server_from_uri
- JsonRpcError: code correctness, envelope formatting
- Serialization: McpServerConfig defaults, McpStartupStatus snake_case

* style: fix cargo fmt formatting

* fix(mcp): preserve truncated qualified tool calls

---------

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
Co-authored-by: Hunter B <hmbown@gmail.com>
2026-05-31 11:01:20 -07:00
HUQIANTAO 7519914e15 ci: add clippy and docs checks to PR CI workflow (#2443)
* ci: add clippy and docs checks to PR CI workflow

- Add 'cargo clippy --workspace --all-features --locked -- -D warnings' step
  to the lint job (previously only ran in release.yml)
- Enable docs job on all triggers (push/PR), not just weekly schedule
  to catch broken doc links before merge
- Add clippy component to rust-toolchain setup

* ci: revert docs job to schedule-only (pre-existing broken links in tui crate)

* ci: install Linux deps before clippy

---------

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
Co-authored-by: Hunter B <hmbown@gmail.com>
2026-05-31 11:01:11 -07:00
HUQIANTAO 61e1023b3a ci: add web frontend lint and type check workflow (#2444)
Add a dedicated GitHub Actions workflow for the Next.js web frontend
that runs on changes to the web/ directory:

- ESLint checks via 'npm run lint'
- TypeScript type checking via 'tsc --noEmit'
- Runs on push to main and PRs targeting main
- Uses npm cache for faster dependency installation

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
2026-05-31 10:51:44 -07:00
HUQIANTAO 6f785c4bab refactor(palette): remove unused backward-compat aliases and add module docs (#2445)
* refactor(palette): remove unused backward-compat aliases and add module docs

- Remove DEEPSEEK_AQUA_RGB, DEEPSEEK_NAVY_RGB, DEEPSEEK_AQUA, DEEPSEEK_NAVY
  (unused backward-compatible aliases with no references in production code)
- Add module-level doc comment explaining the three-layer palette organization:
  RGB tuples, semantic Color constants, and backward-compat aliases
- Note that some constants are kept for design-system completeness

* fix: remove deprecated color audit test (DEEPSEEK_AQUA no longer exists)

* fix: remove unused import in palette_audit test

---------

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
2026-05-31 10:47:32 -07:00
HUQIANTAO 74a8a6f808 test(tui-core): add unit tests for UiState state machine (#2450)
Add 25 unit tests covering the previously untested UiState::reduce
state machine and snapshot:

- Default state verification
- Key navigation: pane switching (1-5), unknown key no-op
- Prompt lifecycle: pending_tasks increment, response delta tracking
- Tool lifecycle: active_tool set/clear, pending_tasks decrement, saturation
- Job lifecycle: active_jobs increment/decrement, progress clamping, saturation
- Approval lifecycle: pending_approvals increment/decrement, saturation
- Pause/Resume: flag toggling
- Tick: ScheduleBackgroundRefresh effect
- Snapshot: field presence, state change reflection

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
2026-05-31 10:38:24 -07:00
BryonGo f7fbc35165 fix: use effective_model_for_budget instead of raw model in compactio… (#2437)
* fix: use effective_model_for_budget instead of raw model in compaction_config

When model is set to 'auto', self.model holds the literal string 'auto',
which gets passed to the API as the model name in compaction requests.
DeepSeek's API rejects 'auto' with HTTP 400 since it's not a recognized
model ID.

effective_model_for_budget() resolves 'auto' to the last effective model
or falls back to DEFAULT_TEXT_MODEL, ensuring compaction always sends a
concrete model name.

* test(tui): cover auto model compaction config

---------

Co-authored-by: codgo <anbiaoren@gie777.com>
Co-authored-by: Hunter B <hmbown@gmail.com>
2026-05-31 10:33:47 -07:00
HUQIANTAO 0302ace9d8 docs(protocol): add doc comments to all public types (#2458)
* docs(secrets): add doc comments to all public types

* docs(protocol): add doc comments to all public types

* style(protocol): run rustfmt on docs

---------

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
Co-authored-by: Hunter B <hmbown@gmail.com>
2026-05-31 10:33:13 -07:00
HUQIANTAO 655f50ea72 docs(hooks): add doc comments to all public types (#2447)
* docs(hooks): add doc comments to all public types

* docs(hooks): clarify sink error handling

---------

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
Co-authored-by: Hunter B <hmbown@gmail.com>
2026-05-31 10:29:33 -07:00
HUQIANTAO 7ad6317c1a docs(tui-core): add doc comments to all public types (#2456)
Add doc comments to all public types in the tui-core crate:
- Pane enum and all 6 variants
- UiEvent enum and all 13 variants
- UiEffect enum and all 4 variants
- UiState struct and all 8 fields
- UiState::reduce and UiState::snapshot methods

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
2026-05-31 10:29:01 -07:00
HUQIANTAO 9eb33875bf test(app-server): add unit tests for auth, CORS, and JSON-RPC helpers (#2448)
* test(app-server): add unit tests for auth, CORS, and JSON-RPC helpers

Add 16 new unit tests (total 20) covering:
- resolve_auth_token: empty token rejection, auto-generation, explicit token, insecure loopback
- cors_layer: default origins, extra origins, empty origin skipping
- JSON-RPC helpers: params_or_object, jsonrpc_result, jsonrpc_error, error codes
- Default CORS origins verification

* test(app-server): redact auth token debug output

---------

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
Co-authored-by: Hunter B <hmbown@gmail.com>
2026-05-31 10:24:26 -07:00
HUQIANTAO 896104b851 docs(release): add doc comments to all public types and functions (#2449)
* docs(release): add doc comments to all public types and functions

* test(tui-core): add unit tests for UiState state machine

Add 25 unit tests covering the previously untested UiState::reduce
state machine and snapshot:

- Default state verification
- Key navigation: pane switching (1-5), unknown key no-op
- Prompt lifecycle: pending_tasks increment, response delta tracking
- Tool lifecycle: active_tool set/clear, pending_tasks decrement, saturation
- Job lifecycle: active_jobs increment/decrement, progress clamping, saturation
- Approval lifecycle: pending_approvals increment/decrement, saturation
- Pause/Resume: flag toggling
- Tick: ScheduleBackgroundRefresh effect
- Snapshot: field presence, state change reflection

* Revert "test(tui-core): add unit tests for UiState state machine"

This reverts commit 92dfb9bcf3e915b14d5848244e0732fb188b2ce8.

---------

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
Co-authored-by: Hunter B <hmbown@gmail.com>
2026-05-31 10:23:59 -07:00
HUQIANTAO dfeedca524 test(web): add unit tests for pure helper functions (#2454)
* test(web): add unit tests for pure helper functions

Add vitest configuration and tests for:
- relativeTime: time formatting (just now, minutes, hours, days, months, years)
- lastPageFromLink: GitHub Link header pagination parsing

These are the first tests for the web frontend. The test framework
(vitest) was already in package.json but had no config or test files.

* test(web): exercise real GitHub helpers

---------

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
Co-authored-by: Hunter B <hmbown@gmail.com>
2026-05-31 10:21:09 -07:00
HUQIANTAO 311333d887 refactor(tools): replace manual Display impl with thiserror derive (#2442)
* refactor(tools): replace manual Display impl with thiserror derive

Replace the hand-rolled Display implementation for ToolError with
thiserror derive macros. The thiserror crate is already a workspace
dependency. Error messages remain identical (verified by existing
test tool_error_display_matches_legacy_text).

This reduces boilerplate and ensures consistency with other error
types in the codebase (secrets, state crates already use thiserror).

* chore: add thiserror to Cargo.lock

---------

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
2026-05-31 10:18:05 -07:00
HUQIANTAO aea924adf2 docs(core): add doc comments to all public types (#2460)
* docs(core): add doc comments to all public types

Add doc comments to all public types in the core crate:
- InitialHistory enum and variants
- NewThread struct and fields
- JobStatus enum and variants
- JobRetryMetadata struct and fields
- JobHistoryEntry struct and fields
- JobRecord struct and fields
- JobManager struct
- ThreadManager struct
- Runtime struct

* docs(core): add doc comments to all public types

---------

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
2026-05-31 10:17:45 -07:00
HUQIANTAO f0c3051231 docs(secrets): add doc comments to all public types (#2457)
Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
2026-05-31 10:07:00 -07:00
HUQIANTAO a2725a2d26 docs(agent): add doc comments to all public types (#2455)
Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
2026-05-31 10:06:54 -07:00
HUQIANTAO ee80350d89 docs(tools): add doc comments to remaining public types (#2451)
Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
2026-05-31 10:06:42 -07:00
HUQIANTAO 1f8d69b60b docs(mcp): add comprehensive doc comments to all public types (#2446)
Add doc comments to all public structs, enums, traits, and methods:
- McpServerConfig, ToolFilter, McpServerDefinition
- McpStartupStatus, McpStartupUpdateEvent, McpStartupFailure, McpStartupCompleteEvent
- McpToolDescriptor, McpResourceDescriptor
- McpManagedClient trait and all its methods
- InMemoryMcpClient and its builder methods
- McpManager and all its public methods
- run_stdio_server function

Co-authored-by: Hu Qiantao <huqiantao@HudeMacBook-Air.local>
2026-05-31 10:06:37 -07:00
Hunter Bown 375021a28c Merge pull request #2433 from aboimpinto/docs/stacked-pr-process
docs: document layered PR process
2026-05-31 10:03:26 -07:00
Hunter Bown 1eebb0462e Merge pull request #2431 from reidliu41/fix/attach-absolute-path-completion
fix(tui): suppress inline skill completions in slash command args
2026-05-31 10:03:08 -07:00
Hunter Bown 9cf382a446 Merge pull request #2434 from Hmbown/codex/harvest-2318-message-submit-hooks
feat(hooks): harvest message_submit transform hooks
2026-05-31 10:02:34 -07:00
Hunter B 0d3b81db2e fix(hooks): surface continued submit hook stderr 2026-05-31 04:43:54 -07:00
ningjingkun 4146ec617e fix(hooks): harden message_submit review cases 2026-05-31 04:39:51 -07:00
ningjingkun 467e2cbfff feat(hooks): allow message_submit to transform submitted text 2026-05-31 04:39:51 -07:00
Hunter B 1b71031113 docs: clarify partial issue references 2026-05-31 04:37:26 -07:00
Hunter Bown 55bcedd8be Merge pull request #2432 from hongqitai/style/fix-clippys
style: fix clippy warnings and run fmt
2026-05-31 04:32:06 -07:00
Hunter Bown 88ae74cabd Merge pull request #2430 from Hmbown/codex/harvest-2333-unix-socket
feat(hooks): add opt-in Unix socket event sink
2026-05-31 04:27:11 -07:00
Paulo Aboim Pinto 6f46a5d199 docs: document layered PR process 2026-05-31 13:27:10 +02:00
hqt 12cba233df style: fix clippy warnings and run fmt 2026-05-31 19:22:21 +08:00
lihuan215 459ae3d4ae feat(hooks): add opt-in Unix socket event sink
Harvests the UnixSocketHookSink work from #2333 while moving app-server socket configuration to the separate [hook_sinks] table, requiring an explicit socket path, and adding regression coverage for macOS-safe socket paths and lifecycle [hooks] preservation.
2026-05-31 04:19:27 -07:00
reidliu41 ff7ef7951e fix(tui): suppress inline skill completions in slash command args
Prevent inline skill slash completions from opening while editing arguments for an existing slash command.

  This keeps `/attach /path/to/image.png` usable without showing skill entries after the path slash, while
  preserving inline skill completions in normal message text.

  Adds a regression test for `/attach /`.
2026-05-31 19:15:35 +08:00
Hunter Bown ecfca261a1 fix(tools): remove invalid override fallthrough (#2428)
Hardens the tool override path from #2420 so a broken replacement override cannot silently fall through to the original built-in tool.

Validation:
- git diff --check
- CARGO_TARGET_DIR=/Volumes/VIXinSSD/codewhale-target/fix-plugin-override cargo test -p codewhale-tui tools::registry --all-features
- CARGO_TARGET_DIR=/Volumes/VIXinSSD/codewhale-target/fix-plugin-override cargo test -p codewhale-tui tools::plugin --all-features
2026-05-31 04:13:13 -07:00
Hunter Bown f4eba5fe43 Merge pull request #2429 from Hmbown/codex/harvest-2426-volcengine-search
feat(web_search): add Volcengine Ark search provider
2026-05-31 04:07:37 -07:00
Hunter B 553acc3cf7 fix(web_search): harden Volcengine provider wiring 2026-05-31 03:56:57 -07:00
implecao c1a9a841ca chore: fix clippy warning in extract_json_block
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-31 03:54:09 -07:00