Commit Graph

1716 Commits

Author SHA1 Message Date
hongqitai 5926bf38a6 feat(tui): add Hugging Face env aliases
Harvested from PR #2780 by @hongqitai.
2026-06-05 08:44:29 -07:00
Hunter B f9d7ae7e20 test(tui): satisfy all-targets clippy map_or lint 2026-06-05 08:31:33 -07:00
yusufgurdogan af8ff03618 feat(web_search): add Sofya search provider
Harvested from PR #2790 by @yusufgurdogan.
2026-06-05 08:29:02 -07:00
Hunter B 4a7731f69d docs(changelog): note sidebar command harvest
Refs #2766 and #2788.
2026-06-05 08:22:25 -07:00
aboimpinto abe366dead feat(tui): add sidebar slash command
Harvested from PR #2788 by @aboimpinto.

Refs #2766.
2026-06-05 08:22:21 -07:00
Matt Van Horn 0b0d815fab fix(tui): enrich auth errors with request context
Harvested from PR #2792 by @mvanhorn.

Reported by @Hmbown in #2665.
2026-06-05 08:16:16 -07:00
Hunter B 5d9f93af4d fix(tui): expose external URL opener on unsupported targets
Harvested from PR #2789 by @ci4ic4.

Found while packaging CodeWhale 0.8.53 for pkgsrc on NetBSD.

Co-authored-by: ci4ic4 <6495973+ci4ic4@users.noreply.github.com>
2026-06-05 08:07:01 -07:00
Hunter B 2e49b14655 test(config): isolate provider chain runtime resolution 2026-06-05 08:02:41 -07:00
Hunter B 93d08a8f61 feat(config): add dormant provider fallback chain
Harvested from PR #2777 by @idling11.

Reported by @hsdbeebou in #2574.

Co-authored-by: idling11 <8055620+idling11@users.noreply.github.com>
2026-06-04 21:32:25 -07:00
Hunter B e5fe46db4f feat(tui): expose stream chunk timeout config
Harvested from PR #2507 by @cyq1017.

Reported by @mserrano11 in #2365.

Co-authored-by: cyq1017 <61975706+cyq1017@users.noreply.github.com>
2026-06-04 21:22:15 -07:00
Hunter B cba5537b84 fix(config): keep path suffix out of project overrides 2026-06-04 21:03:41 -07:00
Hunter B 8869f6a722 fix(mcp): #2744 preserve underscored names in displays
Follow up the #2744 MCP routing harvest by reusing the registered-server parser in the runtime API tool listing path and by making approval summaries show the full MCP target route instead of a guessed first underscore segment.

This keeps tool-call routing, runtime metadata, and approval copy aligned for servers such as my_db while avoiding an impossible server-only guess in approval cards that do not have the live MCP registry.

Refs #2744

Verification: cargo fmt --all -- --check; git diff --check; ./scripts/release/check-versions.sh; cargo test -p codewhale-tui --bin codewhale-tui --locked underscored -- --nocapture; cargo test -p codewhale-tui --bin codewhale-tui --locked mcp_pool_call_tool -- --nocapture; cargo clippy -p codewhale-tui --bin codewhale-tui --locked -- -D warnings.

Co-authored-by: cyq1017 <61975706+cyq1017@users.noreply.github.com>

Co-authored-by: puneetdixit200 <236133619+puneetdixit200@users.noreply.github.com>
2026-06-04 20:55:53 -07:00
Hunter B 912d6aed2c fix(tui): #2742 avoid static Ollama model suggestions
Harvested from PR #2742 by @reidliu41

Ollama model IDs are local passthrough tags, so /model static completions should not suggest hosted DeepSeek API models or entrench the stale default local tag. Keep the picker on auto/current/saved local models while the existing /models path fetches installed tags from the configured endpoint.

Verification: cargo fmt --all -- --check; git diff --check; ./scripts/release/check-versions.sh; cargo test -p codewhale-tui --bin codewhale-tui --locked ollama -- --nocapture; cargo clippy -p codewhale-tui --bin codewhale-tui --locked -- -D warnings.

Co-authored-by: reidliu41 <61492567+reidliu41@users.noreply.github.com>
2026-06-04 20:49:54 -07:00
HUQIANTAO b527bd507a feat(init): harvest LLM-guided AGENTS.md init
Replace the static AGENTS.md template with a context-gathering /init flow that delegates customized project-guide generation to the agent. Keep the successor PR polish for credential-safe git remotes, devDependency framework detection, workspace Cargo context, and dead untracked-counter cleanup.

This harvest also finishes the maintainer review items by preserving SSH remotes, handling nested git workspaces, sorting collected context deterministically, and detecting SvelteKit via @sveltejs/kit.

Harvested from PR #2759 by @HUQIANTAO

Includes original /init implementation from PR #2745 by @punkcanyang

Co-authored-by: HUQIANTAO <58421104+HUQIANTAO@users.noreply.github.com>

Co-authored-by: Punkcan Yang <36871858+punkcanyang@users.noreply.github.com>
2026-06-04 20:39:48 -07:00
cyq1017 c36e4d7d20 fix(mcp): harvest trusted workspace MCP config
Merge global MCP config with trusted workspace .codewhale/mcp.json files so project MCP servers appear in TUI, CLI, doctor, and runtime API flows. Project stdio servers default cwd to the workspace, project cwd escapes are rejected, and project MCP is ignored until workspace trust is recorded in user-owned config.

Fixes #2749

Reported by @yekern

Harvested from PR #2751 by @cyq1017
2026-06-04 20:31:26 -07:00
cyq1017 54f7556359 fix(tui): harvest provider auth rollback
Fixes #2754

Reported by @Dr3259.

Harvested from PR #2755 by @cyq1017.

Adds maintainer verification for persisted provider/model settings after rollback.

Co-authored-by: cyq1017 <61975706+cyq1017@users.noreply.github.com>
2026-06-04 20:15:25 -07:00
Hunter B 91215d5f4f feat(tui): harvest custom completion sound files
Add completion_sound = "file" with [notifications].sound_file for Windows custom WAV completion sounds without changing the global Windows sound scheme.

The Windows path uses PlaySoundW asynchronously with no default fallback. Non-Windows file mode warns and no-ops, missing paths warn once, and setting a valid path resets the missing-path warning latch so later misconfiguration is visible again.

Fixes #2484

Reported by @LHqweasd

Harvested from PR #2512 by @cyq1017

Co-authored-by: cyq1017 <61975706+cyq1017@users.noreply.github.com>
2026-06-04 19:56:51 -07:00
Hunter B 933637bb1c feat(search): harvest custom duckduckgo endpoint
Add optional [search].base_url support for DuckDuckGo-compatible private search endpoints, including a preferred CODEWHALE_SEARCH_BASE_URL env override and the legacy DEEPSEEK_SEARCH_BASE_URL alias.

Network policy now gates the configured endpoint host, custom endpoints do not fall back to public Bing, non-DuckDuckGo provider/base_url combinations and challenge pages return explicit errors, and custom endpoint results report the configured host as their source.

Fixes #2436

Reported by @Artenx

Harvested from PR #2510 by @cyq1017

Co-authored-by: cyq1017 <61975706+cyq1017@users.noreply.github.com>
2026-06-04 19:48:45 -07:00
Hunter B cbb1142497 test(shell): #2528 widen background completion wait
Widen the focused background-shell completion wait used by shell tests so slow Windows runners do not leave lightweight background commands reported as Running before assertions fire.

Refs #2525

Refs #2526

Harvested from PR #2528 by @cyq1017

Co-authored-by: cyq1017 <61975706+cyq1017@users.noreply.github.com>
2026-06-04 19:34:52 -07:00
Hunter B 494c8a5351 fix(tui): gate shell child kill helper off Windows 2026-06-04 19:30:38 -07:00
Hunter B 1e54be0620 fix(tui): refresh branch status after shell changes 2026-06-04 19:26:26 -07:00
Hunter B 47577d59e9 fix(tui): #2760 correct sessions resume footer
Harvested from PR #2760 by @sximelon

Fixes #2758

Show the canonical 'codewhale resume <session-id>' subcommand in the sessions footer instead of the invalid dispatcher form, and add a parser/footer regression test tying the hint to the actual Resume command.

Verification: cargo fmt --all -- --check; git diff --check; ./scripts/release/check-versions.sh; cargo test -p codewhale-tui --bin codewhale-tui --locked sessions_footer_points_to_resume_subcommand -- --nocapture; cargo clippy -p codewhale-tui --bin codewhale-tui --locked -- -D warnings.

Co-authored-by: sximelon <15710511+sximelon@users.noreply.github.com>
2026-06-04 18:56:25 -07:00
Hunter B de86cc1860 fix(tui): install rustls provider before HTTP clients
Install the ring rustls provider through a shared TUI helper and route reqwest client construction through it so no-provider TLS builds do not panic in engine, runtime API, tool, MCP, config, and test paths.

Keep the skill-installer integration include compatible with a local helper, and pin prompt byte-stability tests to an isolated home/skills environment under the shared env lock.

Verification: cargo fmt --all -- --check; git diff --check; ./scripts/release/check-versions.sh; cargo clippy --workspace --all-features --locked -- -D warnings; cargo test --workspace --all-features --locked; focused skill_install, finance, goal-tool, and MCP reruns.
2026-06-04 18:50:20 -07:00
Hunter B 70adeeeae6 docs(v0.9): record #2746/#2747, #2750, #2756, #2757 harvests and #2742/#2751/#2755 dispositions
Log the new community-PR harvests in CHANGELOG.md and crates/tui/CHANGELOG.md
(MCP underscore server names, Xiaomi MiMo pricing, hydrated deferred-tool
render, Token Plan region docs) with contributor credit, and update
docs/V0_9_0_EXECUTION_MAP.md with evidence-backed dispositions for the
newly-reviewed PRs, including the deferred #2742 and forwarded #2751/#2755.
2026-06-04 18:28:40 -07:00
Hunter B 74b3268521 fix(tui): render hydrated deferred-tool results as loaded, not run done
When a deferred tool is used for the first time, the engine returns a
schema-hydration result (event tool.schema_hydrated, executed=false,
retry_required=true) instead of executing the tool. The transcript and sidebar
previously rendered this as a completed run ("run done"), which was
indistinguishable from a real successful execution and misled both the user and
the model. Hydrated results now render as "tool loaded - retry required" via a
dedicated ToolStatus::Hydrated, threaded through tool routing, history, sidebar,
and theme. A successful real execution still renders as run done, a failed tool
with hydration metadata stays Failed.

Local correction on top of the PR: a hydrated row ranks with active work
(ToolStatus::Running) in the sidebar rather than alongside completed successes,
matching the "not run done" intent. The contributor's hydration detection and
missing-metadata handling are kept as-is (the sole emitter always sets
executed=false, consistent with the engine's own check).

Harvested from PR #2757 by @mvanhorn. Fixes #2648.

Co-authored-by: mvanhorn <455140+mvanhorn@users.noreply.github.com>
2026-06-04 18:26:37 -07:00
Hunter B 9d13960603 feat(pricing): price Xiaomi MiMo primary models at matching DeepSeek V4 rates
Add cost-estimate pricing for the Xiaomi MiMo chat models that were previously
unpriced: mimo-v2.5-pro / xiaomi/mimo-v2.5-pro reuse the DeepSeek V4-Pro rate
table, and mimo-v2.5 / xiaomi/mimo-v2.5 reuse the DeepSeek V4-Flash rates. The
DeepSeek V4 pro/flash rate tables are extracted into deepseek_v4_pro_pricing()
and deepseek_v4_flash_pricing() helpers so the MiMo aliases stay aligned with
DeepSeek. Existing DeepSeek pricing behavior is unchanged (deepseek + non-v4pro
still maps to Flash), and unrelated models still return None.

Harvested from PR #2750 by @cyq1017. Fixes #2731.

Co-authored-by: cyq1017 <61975706+cyq1017@users.noreply.github.com>
2026-06-04 18:23:49 -07:00
Hunter B 9e29c221b9 fix(mcp): preserve underscored MCP server names in tool routing
parse_prefixed_name now matches the qualified mcp_<server>_<tool> name against
the set of registered server names (connections + configured servers) and
prefers the longest matching server name, instead of naively splitting on the
first underscore. Tools on servers whose names contain underscores (e.g.
"my_db") are now reachable, and an overlapping pair like "my" and "my_db"
routes to the correct server. Falls back to the legacy first-underscore split
when no registered server matches, preserving backward compatibility.

Harvested from PR #2747 by @cyq1017; supersedes the equivalent fix in PR #2746
by @puneetdixit200. Both contributors diagnosed and fixed issue #2744; #2747
landed for its longest-match tie-break test coverage. Fixes #2744.

Co-authored-by: cyq1017 <61975706+cyq1017@users.noreply.github.com>
Co-authored-by: puneetdixit200 <236133619+puneetdixit200@users.noreply.github.com>
2026-06-04 18:23:02 -07:00
Hunter B 56f8044cf3 feat(tui): show focused approval details
Harvested the narrow approval-detail and shell-preview slice from #1991/#2269 by @tdccccc. Approval cards now show prominent command, dir, file, path, or target rows before falling back to raw params, and shell approvals preserve long command tails while splitting common shell chains for review.

The maintained path keeps the existing #2381 intent-summary block visible and does not take the broader diff-preview/pager rewrite from #2269. Live shell companion tools are classified as shell so their approval cards use the same review posture.

Co-authored-by: tdccccc <79492752+tdccccc@users.noreply.github.com>
2026-06-04 00:17:39 -07:00
Hunter B 0d66ef34d1 feat(hooks): add turn_end observer hook
Harvested the narrow Rust/docs slice of PR #2578 by @AresNing for #1364. The event uses the maintained structured observer path: JSON stdin, stdout ignored, warn-only failures, and no ability to block or mutate the turn.

The hook fires after post-turn app state, usage totals, cost, notification, receipt, and queue-recovery state are updated, before queued follow-up dispatch. Docs, RFC notes, /hooks discovery, and v0.9 tracking now describe the observer-only contract.

Co-authored-by: AresNing <49557311+AresNing@users.noreply.github.com>
2026-06-04 00:09:01 -07:00
Hunter B 586640a437 feat(config): add typed harness posture profiles
Harvested from PR #2741 by @idling11 for #2693, with review fixes folded in: typed compaction/tool/safety enums, no silent unknown-kind fallback, unknown profile keys rejected, and whole-struct equality for future reload/runtime checks.

Co-authored-by: idling11 <8055620+idling11@users.noreply.github.com>
2026-06-04 00:00:22 -07:00
Hunter B 13cabac077 docs(config): clarify provider path suffix support
Records that #2506/#2508 are superseded by the safer #2558 path_suffix implementation, credits the original #1874 report and follow-up PR review trail, and documents that suffix overrides only affect chat completions while model and beta paths keep built-in routing.
2026-06-03 23:56:40 -07:00
Hunter B e18f072a5a perf(context): cache project context with content signatures
Harvested from PR #2636 by @HUQIANTAO with widened cache invalidation for constitution files, generated context, trust state, canonical paths, and same-length overwrites.

Co-authored-by: HUQIANTAO <58421104+HUQIANTAO@users.noreply.github.com>
2026-06-03 23:49:08 -07:00
Hunter B 6a7063c912 ci(ohos): guard unsupported target dependencies 2026-06-03 23:41:21 -07:00
Hunter B 8d9cd44078 fix(tui): make queued follow-up edits recoverable 2026-06-03 23:36:42 -07:00
Hunter B 5b3ee9db67 fix(tasks): fail stale running tasks after restart
Refs #1786.

Reported by @bevis-wong. This lands the durable restart-safety slice: persisted running tasks and running tool rows are marked failed with a recovery note instead of being requeued as live work after a prior process exits.
2026-06-03 23:30:16 -07:00
Hunter B ad3d61936b feat(subagent): preserve checkpoints for timeout continuation
Refs #2029.

Reported by @qiyuanlicn. This lands live per-step API-timeout checkpoint continuation and preserves checkpoint metadata through projections, transcripts, and persistence; cold-restart child-task rehydration remains out of scope.
2026-06-03 23:27:20 -07:00
Hunter B 3cb49233ee feat(sidebar): show full details for truncated rows
Harvested from PR #2734 by @idling11 with reviewer fixes for row-source fidelity, row-authoritative hit testing, and display-width popover sizing.

Refs #2694.

Co-authored-by: idling11 <8055620+idling11@users.noreply.github.com>
2026-06-03 23:26:08 -07:00
Hunter B 8d4eb0c2c9 fix(context): bound auto-generated project context
Refs #697 and #1827.

Reported by @NASLXTO and @wuxixing. Prior context-cap and startup-diagnosis work by @linzhiqin2003 and @merchloubna70-dot shaped this fallback.
2026-06-03 23:10:50 -07:00
Hunter B e14fc4712c fix(tui): label pending input delivery modes
Harvested from PR #2532 by @cyq1017.

Pending input rows now distinguish steer-pending, rejected-steer, and queued-follow-up states, with continuation rows aligned under the delivery label.

Refs #2054; leaves the broader cancel/edit affordance work open.

Co-authored-by: cyq1017 <61975706+cyq1017@users.noreply.github.com>
2026-06-03 22:19:22 -07:00
Hunter B 333275162f feat(runtime): save completed threads as sessions
Harvested from PR #2639 by @gaord.

Adds POST /v1/sessions for runtime clients to persist completed threads as managed saved sessions, with a 409 guard for queued or active turn/item state and focused session endpoint coverage.

Also makes MCP HTTP tests install the rustls ring provider before constructing reqwest clients so filtered no-provider test runs are deterministic.

Co-authored-by: gaord <9567937+gaord@users.noreply.github.com>
2026-06-03 22:16:02 -07:00
Hunter B c76ec47526 feat(transcript): collapse dense tool runs
Harvested from PR #2738 by @idling11.

Co-authored-by: idling11 <8055620+idling11@users.noreply.github.com>
2026-06-03 22:00:46 -07:00
Hunter B 55024a16d8 fix(subagent): inherit tool-agent model route
Harvested from PR #2736 by @h3c-hexin.

Co-authored-by: h3c-hexin <13790929+h3c-hexin@users.noreply.github.com>
2026-06-03 21:43:18 -07:00
Hunter B 9719b45cd3 fix(skills): merge configured and workspace skill dirs
Harvested from PR #2737 by @h3c-hexin.

Co-authored-by: h3c-hexin <13790929+h3c-hexin@users.noreply.github.com>
2026-06-03 21:39:15 -07:00
Hunter B 7ac8063b6b feat(plan): preserve rich PlanArtifact context
Harvested from PR #2733 by @idling11.

Adds richer update_plan artifact fields for grounded Plan-mode review, renders them in the transcript and Plan confirmation prompt, and carries them through /relay, fork-state, and saved-session replay.

Verification: cargo test -p codewhale-tui --bin codewhale-tui --locked plan_ -- --nocapture

Verification: cargo test -p codewhale-tui --bin codewhale-tui --locked relay_slash_command_routes_to_session_relay_instruction -- --nocapture

Verification: cargo clippy -p codewhale-tui --locked -- -D warnings

Co-authored-by: idling11 <8055620+idling11@users.noreply.github.com>
2026-06-03 21:31:09 -07:00
Hunter B 66c88ddfae feat(runtime): allow thread workspace updates
Harvest the UpdateThreadRequest workspace field from PR #2640 while keeping the engine-cache correctness fix: PATCH /v1/threads/{id} now persists workspace changes, emits the workspace change in thread.updated, rejects empty paths, rejects workspace changes while a turn is active, and evicts idle cached engines so the next turn starts in the new workspace.

Validation: cargo fmt --all -- --check; git diff --check; cargo test -p codewhale-tui --bin codewhale-tui --locked update_thread_workspace -- --nocapture; cargo clippy -p codewhale-tui --locked -- -D warnings; python3 scripts/check-coauthor-trailers.py --author-map .github/AUTHOR_MAP --range origin/main..HEAD --check-authors.

Harvested from PR #2640 by @gaord.

Co-authored-by: gaord <9567937+gaord@users.noreply.github.com>
2026-06-03 21:11:55 -07:00
Hunter B fb86737a8c test(settings): assert migrated settings display canonical path
Extend the #2730 settings migration harvest with the missing platform-config fallback display assertion from review, and keep the v0.9 execution map/changelog credit current.

Validation: cargo fmt --all -- --check; git diff --check; cargo test -p codewhale-tui --bin codewhale-tui --locked settings_ -- --nocapture; cargo test -p codewhale-tui --bin codewhale-tui --locked display_localizes_header_and_config_file_label -- --nocapture.

Harvested from PR #2730 by @xyuai.

Co-authored-by: xyuai <281015099+xyuai@users.noreply.github.com>
2026-06-03 21:02:46 -07:00
Hunter B 23c9481af1 feat: add HarmonyOS OpenHarmony support
Harvest the HarmonyOS/OpenHarmony port from PR #2634 and make it publish-safe by target-gating unsupported host dependencies out of the OHOS TUI graph. Self-update is disabled on OHOS, PTY shell mode reports unsupported, and Starlark execpolicy parsing returns an explicit unsupported-platform error until upstream starlark/rustyline/nix support catches up.

Add OHOS SDK setup docs and launcher scripts, install the rustls ring provider for rustls-no-provider entrypoints, and keep the packaged codewhale-tui OHOS graph free of starlark, rustyline, nix@0.28, portable-pty, and arboard.

Validation: cargo fmt --all -- --check; git diff --check; git diff --cached --check; cargo check -p codewhale-cli --locked; cargo check -p codewhale-app-server --locked; cargo check -p codewhale-tui --locked; cargo test -p codewhale-cli --locked update::tests::; cargo test -p codewhale-release --locked; cargo test -p codewhale-tui --locked background_tty_command_has_controlling_terminal; cargo test -p codewhale-tui --locked clipboard; cargo package -p codewhale-tui --allow-dirty --no-verify --locked; packaged OHOS cargo tree checks. OHOS target check still requires a loaded OpenHarmony SDK/sysroot and currently stops in ring with missing assert.h when CC/CFLAGS/linker are unset.

Harvested from PR #2634 by @shenjackyuanjie.

Co-authored-by: shenjackyuanjie <54507071+shenjackyuanjie@users.noreply.github.com>
2026-06-03 21:02:46 -07:00
HUQIANTAO 98edba3683 refactor(engine): append turn metadata after user text
Place user text before volatile turn metadata in outgoing user-message content arrays so provider prefix caches can continue matching the stable user-input prefix across date, model-route, and working-set changes.

Also adds wire-level coverage proving tail-positioned turn metadata serializes after user text while preserving turn-meta deduplication.

Harvested from PR #2517 by @HUQIANTAO

Co-authored-by: HUQIANTAO <58421104+HUQIANTAO@users.noreply.github.com>
2026-06-03 21:02:45 -07:00
Hunter B 60f8e7d62e refactor(web_run): split cache locks for page reads
Harvested from PR #2502 by @HUQIANTAO

Co-authored-by: HUQIANTAO <58421104+HUQIANTAO@users.noreply.github.com>
2026-06-03 21:02:45 -07:00
Hunter B 311eb4002b feat(tui): add bounded restore snapshot listing
Harvested from PR #2513 by @cyq1017.

Co-authored-by: cyq1017 <61975706+cyq1017@users.noreply.github.com>
2026-06-03 21:02:45 -07:00