Commit Graph
569 Commits
Author SHA1 Message Date
Hunter B fb39c53ea7 config: add verifier preview policy table
Add a typed [verifier] config table for the v0.8.67 verifier-preview lane. The only shipped verdict policy remains hunt, so unknown policies are rejected instead of silently accepted.

Document the surface in config.example.toml, CONFIGURATION.md, and the Unreleased changelog.

Verification:

- cargo fmt --all -- --check

- git diff --check

- CARGO_TARGET_DIR=/Volumes/VIXinSSD/codewhale-target cargo test -p codewhale-config verifier_config --locked

- CARGO_TARGET_DIR=/Volumes/VIXinSSD/codewhale-target cargo test -p codewhale-tui config::tests::verifier_config_parses_hunt_policy_and_merges_overrides --locked

Part of #2093

Signed-off-by: Codex <[email protected]>
2026-06-28 07:18:58 -07:00
Hunter B 144ec90d55 docs: add v0.8.66 release ledger
Record the current v0.8.66 release candidate, token/cache release-gate evidence, and ACP registry submission state. Update the changelog and ACP registry prep doc to reflect the validated [email protected] ACP auth handshake and external registry PR.\n\nVerification:\n- ./scripts/release/check-versions.sh\n- git diff --check\n- cargo fmt --all --check\n- cargo test -p codewhale-tui --bin codewhale-tui --locked scorecard -- --nocapture\n- cargo test -p codewhale-tui --bin codewhale-tui --locked initialize_advertises_baseline_acp_agent -- --nocapture
2026-06-27 16:45:26 -07:00
Paulo Aboim Pinto 7101edf675 docs: align FEAT-008 with Layer 4.2 tracker 2026-06-27 22:01:25 +02:00
Paulo Aboim Pinto 0962f78f42 Phase 8 final checkpoint: update docs with final validation evidence
- command-dispatch.md: update EPIC-002 status to Phase 8 complete
- pr-issue-evidence-prep.md: replace ⬜ placeholders with ✅ final results
- Record all validation: 489 command tests passed, 2 acceptance tests passed,
  5344/5345 workspace tests passed (1 known-flaky papercut)
- Sign off as Paulo Aboim Pinto
2026-06-27 21:55:06 +02:00
Paulo Aboim Pinto 09f11d74ed fix(docs): update phase status from Phase 6 to Phase 7 in repo-visible docs
Phase 6 code review is APPROVED; advance documentation status to Phase 7.
Addresses code review 2026-06-27T16:06:38 F2 (REQUIRED/docs-status).
2026-06-27 21:55:06 +02:00
Paulo Aboim Pinto 81308bb886 Phase 6 code-review recovery: correct repo-visible docs to Phase 6 (not Phase 7) awaiting approval
F3-recovery-2: Reverted Phase 7 wording to 'Phase 6; awaiting code review
approval for Phase 7' in command-dispatch.md and pr-issue-evidence-prep.md.
2026-06-27 21:55:06 +02:00
Paulo Aboim Pinto 0d19150edb Phase 6 recoverable: fix formatting in eval_smoke_acceptance.rs, advance command-dispatch.md to Phase 7
- eval_smoke_acceptance.rs: collapse multi-line string constant to single line (cargo fmt fix)
- command-dispatch.md: advance EPIC-002 status from Phase 6 to Phase 7,
  replace detailed Phase 6 evidence list with concise 'Current Evidence' summary
2026-06-27 21:55:06 +02:00
Paulo Aboim Pinto f8b93dfa39 docs(pr-issue-evidence-prep): Add missing PR title and Refs #2870. to FEAT-008 draft
Phase 7 code review (F1) found the FEAT-008 PR Summary Draft did not
follow the required PR #3652 pattern: it jumped directly from the heading
to ## Summary without the PR title or Refs #2870. opening line.

Added the title line (Layer 4.4: Registry cleanup, docs, and full
validation (FEAT-008)) as a reference outside the markdown fence, and
Refs #2870. as the first line of the PR body markdown.

This is a code-review recovery fix for FEAT-008 Phase 7.
2026-06-27 21:55:06 +02:00
Paulo Aboim Pinto 6cefb386b5 Fix F1: Replace stale command_surfaces_acceptance reference with eval_smoke_acceptance in pr-issue-evidence-prep.md
Code review REQUIRED finding F1: The public validation list still referenced
the deleted command_surfaces_acceptance target. Replaced with the current
eval_smoke_acceptance test and noted it is eval smoke, not AT-004
command-surface evidence.

Ref: FEAT-008 Phase 6 code review 2026-06-27T14:09:26.829Z
2026-06-27 21:55:06 +02:00
Paulo Aboim Pinto a2cd8ea0e8 Phase 6 code-review fixes: rename command_surfaces to eval_smoke, use neutral draft wording
F1 [REQUIRED/test-coverage]: Rename command_surfaces.feature and
command_surfaces_acceptance.rs to eval_smoke.feature and
eval_smoke_acceptance.rs to stop implying AT-004 command-surface coverage.
Update world struct name, file path constant, and feature file header to
match. Feature file now includes disclaimer that this is not AT-004 evidence.

F2 [REQUIRED/docs-status]: command-dispatch.md evidence items use '— draft'
instead of '— pass'. pr-issue-evidence-prep.md result cells use
'⬜ Draft (Phase 6 current evidence)' instead of '⬜ Pass (draft Phase 6
evidence)'.

F3 [REQUIRED/docs-status]: FeatureTasks.md status line updated from
'Phase 6 COMPLETED' to 'Phase 6 NEEDS_CHANGES' reflecting latest code review.

Review Finding Decision Ledger recorded in phase-6-integration.md.
2026-06-27 21:55:05 +02:00
Paulo Aboim Pinto f963bdc7ef fix: resolve Phase 6 code review REQUIRED findings (F1, F2, F3)
F1: Remap command_surfaces acceptance test as eval smoke test.
Stop counting it as AT-004 command-surface evidence — rename
feature/scenario/step text from 'command surface acceptance' to
'eval smoke test' and update runner doc comments.

F2: Rewrite public docs with draft/Phase 6 in-progress status.
command-dispatch.md: EPIC-002 Completion Status → Draft —
Phase 6 In Progress with neutral table status.
pr-issue-evidence-prep.md: Add draft header, replace ✅ with ⬜
neutral placeholders, mark all evidence as draft Phase 6.

F3: Update FeatureTasks.md status line to include Phase 6
AWAITING_REVIEW state with code review NEEDS_CHANGES note.

Also update phase-6-integration.md AT-004 row and
planning-analysis-report.md to remove command_surfaces from
AT-004 evidence, adjust count from 40 to 39.
2026-06-27 21:55:05 +02:00
Paulo Aboim Pinto 29a01d940b fix(arch): correct plugins group scope in command-dispatch.md
The plugins row claimed 'list, install, and configure tools' but live
source only supports plugin discovery/listing and per-plugin metadata
detail display. No install/configure command behavior exists.

Discovered by FEAT-008 Phase 4 code review.

Refs: FEAT-008
2026-06-27 21:55:05 +02:00
Paulo Aboim Pinto 6cbdb6dfb9 docs: add /slop and /canzha to dispatch flow and Permanent Exceptions
The architecture doc only listed /jihua and /zidong as legacy/permanent
aliases, but live dispatch (commands/mod.rs:157-168) also has /slop and
/canzha dispatching directly to /debt in the same pre-registry match block.

- Updated dispatch flow Step 2 to list all four permanent aliases.
- Updated Permanent Exceptions first row to include all four aliases.

Refs: FEAT-008 Phase 4 code review finding #1
2026-06-27 21:55:05 +02:00
Paulo Aboim Pinto c8d30f8f88 docs: add missing plugins group to command-dispatch.md
The Built-In Command Groups table listed 8 groups but the live source
registers 9 (including plugins::PluginsCommands). Added the /plugins
entry and removed the stale 'plugins' mention from utility scope.

Found during FEAT-008 Phase 4 documentation verification (Task 6).
2026-06-27 21:55:05 +02:00
Hunter Bown 674c876878 Merge pull request #3696 from findshan/feat/config-prompt-overrides
feat(prompts): allow overriding the base prompt from the config dir (#3638)
2026-06-27 12:53:52 -07:00
Hunter Bown 684540c7d3 Merge branch 'main' into codex/issue-3089-stale-policy 2026-06-27 11:12:57 -07:00
findshan c5fda76b41 feat(acp): stream session/prompt deltas as session/update chunks (#3192)
Follow-up to #3698. The ACP adapter buffered the whole turn: it called the
non-streaming `create_message` and emitted a single `session/update` chunk
only after the provider finished. Editors like Zed show agent output
incrementally, so users waited for the entire response with no feedback, and
the readiness audit listed non-streaming as a known limitation.

Stream the turn instead, reusing the existing `LlmClient::create_message_stream`
path that the TUI engine already uses:

- `open_prompt_stream` builds the request with `stream: true` and returns the
  `'static` `StreamEventBox`. It borrows `&self` only to read config/model and
  open the stream, so the caller can race it against the reader without holding
  a borrow on the server.
- `drive_prompt_stream` consumes the stream concurrently with the input reader:
  each text delta (`content_block_delta`/`content_block_start` text) is emitted
  as its own `session/update` agent_message_chunk as it arrives; `message_stop`
  or stream end completes the turn with the accumulated text (recorded in
  history); a provider stream error surfaces as a JSON-RPC error.
- Cancellation is preserved and now interrupts mid-stream: a matching
  `session/cancel` returns `stopReason: "cancelled"` and dropping the stream
  aborts the underlying provider connection. Single-flight semantics are
  unchanged (other-session cancel ignored; concurrent request rejected with a
  clear error). The single-writer invariant holds, so streamed chunks and
  acknowledgements stay on one protocol-clean stdout stream.

The streaming + cancellation control logic stays a free function over the
reader/writer + boxed stream, so it is unit-tested with canned in-memory
streams (delta-by-delta chunking, cancel mid-stream, other-session cancel
ignored, concurrent request rejected) — no real provider call. Full bin suite
5521 green; fmt + clippy clean. Updates docs/ACP_REGISTRY_SUBMISSION.md.

Refs #3192.

Signed-off-by: findshan <[email protected]>
2026-06-28 00:20:51 +08:00
findshan 25d23cae59 feat(acp): cancel in-flight session/prompt on session/cancel (#3192)
The ACP stdio adapter processed input strictly serially: the read loop
awaited each request — including the full provider call behind
`session/prompt` — before reading the next line. A `session/cancel`
therefore could not even be observed until the turn it was meant to
cancel had already finished, so it was a documented no-op (it just
returned `null`). Editors like Zed send `session/cancel` when the user
hits Esc, so the in-flight turn kept running and streamed a result the
user no longer wanted.

Drive `session/prompt` concurrently with the reader instead:

- `run_prompt` borrows `&self` only and never touches the writer, so it
  is raced against `reader.next_line()` in `drive_prompt_with_cancellation`
  while the main task keeps exclusive ownership of stdout — stdout stays
  protocol-clean (the existing single-line-JSON invariant holds).
- A `session/cancel` for the in-flight session (request or notification
  form) aborts the awaited provider call and the prompt returns
  `stopReason: "cancelled"`; the assistant turn is not appended to history.
- A no-prompt `session/cancel` remains an idempotent `null` no-op.
- The turn is single-flight: a cancel for a different session is
  acknowledged and ignored; any other concurrent request gets a clear
  "prompt in progress" error rather than being silently dropped.

The cancellation control logic is extracted into a generic free function
so it is unit-tested with a delayed future and an in-memory reader — no
real provider call required. 4 new tests cover complete, cancel,
other-session-ignored, and concurrent-request-rejected paths.

Refs #3192 (advances the ACP readiness audit in docs/ACP_REGISTRY_SUBMISSION.md).

Signed-off-by: findshan <[email protected]>
2026-06-27 22:37:21 +08:00
findshan 59259eb4db feat(prompts): require explicit opt-in flag for base-prompt override
Addresses maintainer review on #3638: replacing the global Constitution is a
prompt trust boundary, so the override file alone must not be enough. Gate it
behind an explicit CODEWHALE_ALLOW_BASE_PROMPT_OVERRIDE flag — the file is
ignored (with a log line pointing to the flag) unless the user has deliberately
opted in. Makes replacing the base prompt a two-step, auditable action.

- prompts.rs: BASE_PROMPT_OVERRIDE_OPT_IN_ENV + base_prompt_override_opt_in();
  load_config_dir_prompt_overrides now requires it. Added a test that a present
  file without the flag applies nothing (safe: no global cell mutation).
- docs/CONFIGURATION.md: document the two-step opt-in.

Refs #3638

Signed-off-by: findshan <[email protected]>
2026-06-27 22:08:39 +08:00
findshan d25166c704 feat(working-set): cache-maximal context mode — materialize active file contents (#528)
Today the Repo Working Set block only injects a path *list* ("Active paths
(prioritize these)"), so the model must spend tool calls re-reading files it
already touched. #528 asks for a cache-maximal mode that keeps the active
files' full contents resident in context each turn, trading a larger but
byte-stable prefix for far fewer re-read round-trips and high KV prefix-cache
hit rates on DeepSeek.

This adds an opt-in cache-maximal mode to the working set:

- WorkingSetConfig gains cache_maximal + per-file/total byte caps (serde
  defaults so existing persisted sessions deserialize unchanged).
- summary_block, when enabled, appends an "### Active file contents
  (cache-resident)" section: the top active files (existing
  sorted_for_prompt order) materialized as fenced blocks, bounded by
  max_resident_file_bytes per file and max_total_resident_bytes overall.
  Directories and unreadable/missing files are skipped (the latter noted, not
  silent); over-budget files are reported as omitted.
- Order follows sorted_for_prompt, which is turn-agnostic, so the block is
  byte-identical while the files are unchanged (KV cache hit); editing a file
  cache-misses from its block onward — exactly the intended trade.
- Reachable via the CODEWHALE_CACHE_MAXIMAL env toggle (1/true/on/yes) or the
  config flag; **off by default**, so existing behavior (path list only) is
  unchanged.

Tests (7): flag-off keeps the path list only; flag-on materializes contents;
dirs not materialized; per-file cap truncates on a char boundary; total cap
omits extras; byte-stable across next_turn when files are unchanged; changes
when a file is edited. docs/CONFIGURATION.md documents the toggle and caps.

This is a first, self-contained slice. The compaction-deferral half of #528
(hold off summarization until a hard budget wall when cache-maximal is on) is
left as a follow-up, and I'm happy to align the toggle (env vs settings.toml)
and caps with your preferred current-main design.

Refs #528

Signed-off-by: findshan <[email protected]>
2026-06-27 21:46:02 +08:00
findshan da982c094f feat(prompts): allow overriding the base prompt from the config dir
Issue #3638 asks to make the hard-loaded base prompt repurposable (e.g. for
long-form writing) without editing in-tree files or building a custom
embedder. The prompt-override hooks already exist for embedders
(set_base_prompt_override + the OnceLock cells), but there was no user-facing
source that feeds them.

Bridge those hooks to a config-directory file: at startup, if
`~/.codewhale/prompts/constitution.md` (under $CODEWHALE_HOME) exists and is
non-empty, install it via the existing set_base_prompt_override path;
otherwise fall back to the bundled constant. Loaded once before any engine
spawns (first-call-wins cells).

Scope is deliberately narrow and safe: only the byte-stable base prompt
segment is user-overridable. Mode deltas, approval policy, tool taxonomy,
Context Management, and the Compaction Relay stay owned by the runtime
assembly (see StaticPromptCtx), so an override cannot strip safety-relevant
guidance (sandbox/approvals).

- prompts.rs: pure, unit-tested resolver read_prompt_override_file +
  load_config_dir_prompt_overrides / load_prompt_overrides_from_config_home.
- main.rs: wire the loader in once after CLI parse, before subcommand dispatch.
- docs/CONFIGURATION.md: document the override file, its scope, and that it
  cannot remove safety layers.
- 3 unit tests (present/absent/empty-file). Empty/whitespace files are ignored
  so a stray file can't blank the system prompt.

Refs #3638

Signed-off-by: findshan <[email protected]>
2026-06-27 21:11:54 +08:00
Hunter B 6771558fd4 chore: harden stale cleanup workflow
Pin actions/stale to the current v10 commit and replace release-era dry-run dates with generated cutoff variables so the triage docs stay usable over time.

Signed-off-by: Hunter B <[email protected]>
2026-06-26 19:53:55 -07:00
pkeging 94a5b056fe docs: add WeCom Bridge deployment guide
Harvested from PR #3640 by @pkeging.

Preserves the contributor's deployment and security guide while aligning commands with the files currently shipped in the repository. The harvest replaces stale helper-script references with the actual runtime and npm commands, and adds the approval-timeout variable to the bridge env template.
2026-06-26 18:40:53 -07:00
Toan Nguyen 0357e4190a feat(provider): add OpenModel support
Register OpenModel across the shared provider registry, CLI model registry, TUI config, provider picker, and docs. Default the route to deepseek-v4-flash, use Anthropic Messages wire semantics, and keep Bearer auth so /v1/messages and /v1/models share one client.

This harvest also updates the config example to use deepseek-v4-flash instead of deepseek-chat, which the original PR notes is not available through OpenModel Messages.

Harvested from PR #3585 by @noaft.

Verification:

- cargo fmt

- CARGO_TARGET_DIR=/Volumes/VIXinSSD/codewhale-target CARGO_INCREMENTAL=0 cargo test -p codewhale-config --locked openmodel

- CARGO_TARGET_DIR=/Volumes/VIXinSSD/codewhale-target CARGO_INCREMENTAL=0 cargo test -p codewhale-tui --bin codewhale-tui --locked openmodel

- CARGO_TARGET_DIR=/Volumes/VIXinSSD/codewhale-target CARGO_INCREMENTAL=0 cargo test -p codewhale-agent --locked first_party_recent_provider_models_are_listed
2026-06-26 17:07:06 -07:00
Toan Nguyen 7cf75c32d5 fix(provider-links): update fallback docs URL
Update the /links fallback docs URL from the stale codewhale.dev providers page to the current codewhale.net docs page, and add a Qianfan-specific docs link so the provider list does not fall through to the generic CodeWhale docs.

Harvested from PR #3621 by @noaft.

Verification:

- cargo fmt

- CARGO_TARGET_DIR=/Volumes/VIXinSSD/codewhale-target CARGO_INCREMENTAL=0 cargo test -p codewhale-tui --bin codewhale-tui --locked links

- CARGO_TARGET_DIR=/Volumes/VIXinSSD/codewhale-target CARGO_INCREMENTAL=0 cargo test -p codewhale-tui --bin codewhale-tui --locked provider_link_fallback_uses_current_codewhale_docs

- curl -I -L --max-time 15 https://codewhale.net/en/docs

- curl -I -L --max-time 15 https://cloud.baidu.com/doc/qianfan/index.html
2026-06-26 16:41:15 -07:00
Hunter Bown b1ab7fc3e9 Merge branch 'main' into codex/issue-3089-stale-policy 2026-06-26 16:22:55 -07:00
Hunter Bown 97460464ca Merge pull request #3614 from Hmbown/codex/issue-3401-hotbar-qa-matrix
docs: add hotbar release QA matrix
2026-06-26 08:39:26 -07:00
Hunter Bown 42046ed9dc Merge pull request #3611 from Hmbown/codex/issue-2958-token-savings
docs: record prompt mode token comparison
2026-06-26 06:39:51 -07:00
greyfreedom ee2a119a78 docs: update ask-rule persistence docs
Document the current ask-only permissions.toml behavior now that approval-card S saves rules for exec_shell, write_file, edit_file, and apply_patch.

Clarify that read_file is manual-only, YOLO remains unrestricted, and allow/deny records, globs, broad directory rules, and edit/delete UI remain out of scope.
2026-06-26 14:38:04 +08:00
Hunter Bown d2a95458ca Merge pull request #3571 from shenjackyuanjie/ohos/cleanup
cleanup for ohos and tool chain
2026-06-25 22:32:25 -07:00
Hunter Bown 163a5d8455 Merge pull request #3624 from yekern/codex/lsp-php-custom-servers
Codex/lsp php custom servers
2026-06-25 22:31:22 -07:00
Hunter B 097c57b08b fix(release): gate registry publish on fresh assets
Add a release asset verification gate that compares the local and remote tag SHAs, confirms a successful Release workflow run for that SHA, and reruns the npm wrapper asset verifier against the public GitHub assets.

Strengthen npm release:check so stale or incomplete GitHub Release assets fail before publish, while local/mirror asset checks still work through explicit release-base overrides.

Document npm auth/OTP retry commands, final registry verification, and the legacy deepseek-tui no-republish rule.

Closes #2642.

Closes #2643.
2026-06-25 20:15:32 -07:00
Hunter B 26e0a9cd45 test(tui): add token cache report fixtures
Add user-report-derived cache fixtures for #1177 and #1747, plus an evidence matrix for the related high-token/cache issue cluster.

Closes #3390
2026-06-25 18:58:37 -07:00
maple 6f2ca52ec2 docs: add LSP PHP + custom server feature documentation (CN/EN) 2026-06-26 09:36:40 +08:00
Hunter B 170b7bc9dd docs: add hotbar release QA matrix
Add the v0.8.66 Hotbar QA matrix with config, UI, source, dispatch, and release-smoke coverage mapped to existing tests and deferred-source support levels.\n\nVerification:\n- cargo fmt --all -- --check\n- git diff --check\n- cargo test -p codewhale-config hotbar -- --nocapture\n- cargo test -p codewhale-tui --bin codewhale-tui --locked hotbar_setup -- --nocapture\n- cargo test -p codewhale-tui --bin codewhale-tui --locked wizard_ -- --nocapture\n- cargo test -p codewhale-tui --bin codewhale-tui --locked hotbar_panel -- --nocapture\n- cargo test -p codewhale-tui --bin codewhale-tui --locked hotbar_alt_digit -- --nocapture\n- cargo test -p codewhale-tui --bin codewhale-tui --locked hotbar_dispatch -- --nocapture\n- cargo test -p codewhale-tui --bin codewhale-tui --locked hotbar::actions -- --nocapture\n\nRefs #3401
2026-06-25 17:43:50 -07:00
Hunter Bown 084659307b Merge branch 'main' into codex/issue-3089-stale-policy 2026-06-25 17:19:28 -07:00
Hunter B 46bd020ed9 docs: record prompt mode token comparison
Extend the #2958 prompt-mode matrix with a v0.8.56 before/after comparison for Agent, Plan, and YOLO static prompt layers. The measured result is intentionally explicit: this audit records zero token savings versus v0.8.56 because the current shared Constitution is larger than the old base prompt.\n\nVerification:\n- cargo fmt --all -- --check\n- git diff --check\n- cargo test -p codewhale-tui --bin codewhale-tui --locked mode_prompts -- --nocapture\n\nCloses #2958
2026-06-25 17:13:24 -07:00
Hunter Bown 6c7af85a76 Merge branch 'main' into codex/issue-3089-stale-policy 2026-06-25 16:50:21 -07:00
Hunter B 4e1930fec9 docs(tui): add prompt mode audit matrix
Document the current Agent, Plan, and YOLO prompt-mode contract with size snapshots and runtime enforcement anchors. Add prompt tests that keep mode files as compact deltas instead of duplicated constitution or approval-policy blocks.

Refs #2958
2026-06-25 16:50:15 -07:00
Hunter Bown 1e10c76d44 Merge pull request #3605 from Hmbown/codex/issue-3487-terminal-visual-matrix
test(tui): add terminal visual matrix guardrails
2026-06-25 16:48:41 -07:00
Hunter B 2fa33bf200 test(tui): add terminal visual matrix guardrails
Add a terminal visual regression matrix that maps contrast, selector, sessions, config, sidebar, and transcript surfaces to deterministic tests.

Extend the palette audit with selected-row and light-palette contrast pairs, and add a /sessions render fixture for narrow and medium terminal widths with long CJK titles, border checks, truncation checks, and selected-row visibility.

Verification: cargo fmt --all -- --check; git diff --check; cargo test -p codewhale-tui --test palette_audit --locked; cargo test -p codewhale-tui --bin codewhale-tui --locked visual_matrix -- --nocapture; cargo test -p codewhale-tui --bin codewhale-tui --locked session_picker -- --nocapture.

Fixes #3487
2026-06-25 16:37:02 -07:00
Hunter B 29cd12022d chore: reactivate stale issue cleanup
Create the missing stale-policy labels in GitHub and make the workflow match the documented policy: needs-info bugs can age out unless they also carry a protected label such as release-blocker or security.\n\nDocument the maintainer dry-run queries and first manual cleanup pass so the automation is auditable before it closes anything.\n\nRefs #3089
2026-06-25 16:33:44 -07:00
Hunter B f120e3ffa6 fix(tui): centralize hotbar recommendations
Add a shared hotbar recommendation engine that preserves the default eight-slot order, filters disabled and required-argument actions, applies category limits for eligible entries, and can serialize recommendations as [[hotbar]] bindings with labels.

Wire the setup wizard to the shared recommendation set and mark recommended rows, then document the default hotbar slots in the keybinding guide.

Verification: cargo fmt --all -- --check; git diff --check; cargo test -p codewhale-tui --bin codewhale-tui --locked hotbar -- --nocapture; cargo check -p codewhale-tui --locked.

Fixes #3397
2026-06-25 16:20:04 -07:00
Hunter B adde1f9597 fix(tui): lock hotbar config contract
Add tests for empty hotbar arrays, user-owned project overlay behavior, and trusted profile replacement semantics. Add a comment-preserving hotbar persistence helper that writes the documented [[hotbar]] schema to the resolved user config path. Document the durable schema, warnings, default behavior, and project-overlay boundary.\n\nVerification:\n- cargo fmt --all -- --check\n- git diff --check\n- cargo test -p codewhale-config --locked hotbar -- --nocapture\n- cargo test -p codewhale-tui --bin codewhale-tui --locked hotbar -- --nocapture\n- cargo test -p codewhale-tui --bin codewhale-tui --locked config_persistence -- --nocapture\n- cargo check -p codewhale-tui --locked
2026-06-25 15:00:47 -07:00
Hunter B 5c32f1f791 fix(tui): settle hotbar trigger semantics
Keep Hotbar dispatch on Alt+1 through Alt+8 only, block dispatch while inline selectors or modal/onboarding focus owns numeric input, and document the focus matrix.\n\nRefs #3395
2026-06-25 14:27:40 -07:00
Hunter B e63db39d00 docs: bump stale v0.8.63 references to v0.8.65 in INSTALL.md
The Linux musl/glibc build artifact prose on lines 45 and 59 still
referenced v0.8.63 as the current release lane. Bump both to v0.8.65
so the install doc matches the shipped release.
2026-06-25 01:34:11 -07:00
Hunter B cff78dd04f release: ship native codew shim in archives
Stage the codew binary in release builds, include it in platform archives and Windows installer inputs, and teach local release asset prep/checks about the shim. The Unix archive installer now installs via atomic replace so an existing executable is not overwritten in place.
2026-06-24 22:10:21 -07:00
shenjack 187b15cc21 update harmony os docs 2026-06-25 12:49:25 +08:00
Nightt b36f31669b Add provider context window overrides
Add a provider-table context_window setting for built-in and custom provider configs, expose it through the config key-value API, and validate zero values.

Thread the override into route resolution, startup/model/provider/profile switching, CLI exec budgeting, system prompt context notes, compaction thresholds, context pressure, and request output caps.

Document the DashScope/OpenAI-compatible use case and add examples.

Fixes #3545.

Validated with: cargo fmt; cargo fmt --all -- --check; cargo test -p codewhale-config --locked context_window; cargo test -p codewhale-config --locked; cargo test -p codewhale-tui --bin codewhale-tui --locked context_window; cargo test -p codewhale-tui --bin codewhale-tui --locked route_runtime; cargo test -p codewhale-tui --bin codewhale-tui --locked provider_config; cargo test -p codewhale-tui --bin codewhale-tui --locked route_context_budget; cargo check -p codewhale-tui --bin codewhale-tui --locked; cargo test -p codewhale-tui --bin codewhale-tui --locked; cargo test --workspace --locked; git diff --check.
2026-06-25 12:12:09 +08:00
Hunter B 03146cbb92 whaleflow: bound fleet workflow shape
Add Fleet launch-shape validation for WhaleFlow IR with a 100-agent default population cap, five recursive rings, and bounded loop/expand requirements. Update the Fleet setup surface and docs to frame Fleet as the durable sub-agent config layer while WhaleFlow owns agent-authored orchestration.
2026-06-24 20:02:59 -07:00