Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
db29e64
test(tui): the config command group's guard tests count /connect and …
claude Oct 11, 2026
3eeedbd
Merge remote-tracking branch 'origin/main' into claude/nice-bohr-h4i23r
claude Oct 11, 2026
42c5dcc
fix(snapshot): restore and /undo work with git 2.43
claude Oct 11, 2026
8eb23ad
fix(shell): a self-cancelled job stays quiet, and an exited job keeps…
claude Oct 11, 2026
d33dc38
fix(tui): a command that moves to the background after 30 s says so p…
claude Oct 11, 2026
7b1dcd3
fix(engine): todo_write answers the model with a short receipt
claude Oct 11, 2026
85063be
fix(goal): usage counts the turn that completes, yields or blocks the…
claude Oct 11, 2026
d438379
fix(pet): show sub-agents while they run, and let a finished one rest
claude Oct 11, 2026
985967e
fix(pet): crisp half-block sprites; vendor codewhale-ratatui 0.1.2
claude Oct 11, 2026
674dcc3
fix(shell): a silent running command stays running and stoppable
claude Oct 11, 2026
e71255e
fix(constitution): ratify checks what you reviewed; preview and wordi…
claude Oct 11, 2026
49bd217
docs: 0.10.2 changelog for the readiness fixes; registry row names /d…
claude Oct 11, 2026
054b122
Merge remote-tracking branch 'origin/main' into claude/nice-bohr-h4i23r
claude Oct 11, 2026
d220add
docs(credits): 0.10.2 credits @LIghtJUNction on the website and contr…
claude Oct 11, 2026
17a88a9
fix(shell): only the model's own cancel silences a job; cancel-all sk…
claude Oct 11, 2026
ed25a29
fix(tui): a tty:true command is not "moved to /jobs"
claude Oct 11, 2026
625f25b
fix(constitution): ratifying one clause at a time keeps working
claude Oct 11, 2026
31deea3
Merge remote-tracking branch 'origin/main' into claude/nice-bohr-h4i23r
claude Oct 11, 2026
210904f
test(pet): the shared-owner check sends the current appearance schema
claude Oct 11, 2026
407cb8e
fix(goal): update_goal accepts a progress estimate with yield; the st…
claude Oct 11, 2026
82bef73
chore(budget): record update_goal's +7 B progress description
claude Oct 11, 2026
f7264f7
fix(tui): the shell inspector follows a running job; Alt+V keeps the …
claude Oct 11, 2026
02fd463
fix(shell): wait results carry progress; a person's kill says what su…
claude Oct 11, 2026
41c44ee
refactor(oauth): drop the never-set `originator` authorize parameter
claude Oct 11, 2026
0cbdb9b
test(fleet): move the last fleet -> lib.rs test edge to the CLI tests
claude Oct 11, 2026
e2ee2d2
docs(changelog): 0.10.2 notes for the shell inspector, Alt+V and wait…
claude Oct 11, 2026
8fa735e
fix(tui): /jobs wait stops freezing the UI; dock rows open the live i…
claude Oct 11, 2026
28ea342
fix(tui): /setup u/d only act on the agreement step; retired hints sk…
claude Oct 11, 2026
e99934a
docs(tui): the shell inspector note matches the dock's live pager
claude Oct 11, 2026
d40be2b
fix(l10n): three strings that misdescribe what happens
claude Oct 11, 2026
4b7a623
fix(tui): file edits read as patches; tool status words come from one…
claude Oct 11, 2026
a4603c3
fix(tui): the approval card uses its translated labels in every locale
claude Oct 11, 2026
cad2c00
fix(tui): first run continues after Ollama; failures read as failures
claude Oct 11, 2026
34d35fa
fix(tui): mode receipts say Work; /zidong names the Full Access it gr…
claude Oct 11, 2026
e53972a
fix(subagent): delegated cards name the running tool, not "Core tool …
claude Oct 11, 2026
619a6d9
fix(tui): markdown headings need '# ' and render inline markup; table…
claude Oct 11, 2026
be6ed76
perf(tui): the context meter keeps estimates for unchanged history
claude Oct 11, 2026
cf068be
perf(utils): write_atomic sweeps a directory for stale temps at most …
claude Oct 11, 2026
8fee238
perf(runtime): /v1/usage reads the turn store once instead of once pe…
claude Oct 11, 2026
f518a5c
perf(engine): tool contexts share the turn-start history instead of c…
claude Oct 11, 2026
85331b5
perf(compaction): one pressure walk per model step, and JSON is sized…
claude Oct 11, 2026
1f7ebc9
perf(tui): drop four shell ocean passes that repeat the full-frame pass
claude Oct 11, 2026
cadd721
perf(subagent): checkpoints project only the bounded tail, not the wh…
claude Oct 11, 2026
ae17d53
perf(session): retention lists records without the late-usage cost ov…
claude Oct 11, 2026
9413b15
perf(pet): the pet tick skips its tty probe and view build when no pe…
claude Oct 11, 2026
79735df
build(tui): no doctest pass for codewhale-tui; test-only deps move to…
claude Oct 11, 2026
2f82993
docs(changelog): 0.10.2 notes for the UX polish and performance slices
claude Oct 11, 2026
811b6ed
docs(changelog): 0.10.2 states its known limits
claude Oct 11, 2026
e107caf
fix(tui): polish slice 2: honest chrome, quieter errors, cards that d…
claude Oct 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 117 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,45 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
from plugins stay on demand. Finishing an OAuth login reconnects just that
server, and `/mcp reload` redials every server that is not `lazy` and reports
how many are not connected out of the configured total.
- Running shell commands open an inspector with their output and status, and
`Alt+V` opens the newest running shell (#6931).
- Running shell commands open an inspector with their output and status. It
follows new output until you scroll back, and drops Stop once the command
ends. `Alt+V` opens the card you clicked, even after newer cards arrive or a
tool run collapses around it. `/jobs wait` and `/jobs poll` open the same
inspector instead of freezing the screen for up to 5 s, a shell row in the
work dock opens it too, and a task row opens `/task show` instead of failing
with "Job … not found" (#6931).
- In `/setup`, `u` and `d` act only on the working-agreement step. Pressed on
another step they no longer close the wizard and switch your agreement off.
- `/setup` no longer says "You're ready." when no model is connected; its last
step asks for a provider and lists the P and C keys it accepts. A rejected
API key's reason stays visible at narrow widths.
- First run with a local Ollama model continues to the trust question and the
ready screen instead of ending onboarding, and the next launch no longer
starts onboarding again.
- A turn that ended in failure reads as an error, live and after resume. Retry
notices stay in the transcript instead of flashing a red error that hid the
recovery.
- File edits show as patches with their change summary once. Tool status
words read `done`, `failed` and `loaded, not run` everywhere, and a tool
that only loaded no longer gets a done check.
- Delegated agents' cards name the tool they are running instead of
"Core tool <call id>".
- Markdown: a line like `#6235 fixed it` is no longer a heading, headings
render inline code and emphasis, and tables draw one rule under the header
instead of one between every row.
- The approval card shows its field labels and description in your language in
every locale, not only Simplified Chinese.
- `/mode work` says "Switched to Work mode.", and `/zidong` says it switched to
Full Access. `/overview` and `/setup` call the mode Work.
- The language screen points to `/config locale <tag> --save`, the Korean
Never chip says it allows nothing, and the elevation dialog's Abort says it
skips only that tool call.
- Less work on the UI thread and less memory per turn:
- the context meter keeps its estimates for unchanged history;
- tool calls share the turn's history instead of copying it;
- compaction checks pressure with one pass;
- write_atomic sweeps a directory for stale temps at most hourly;
- the pet costs nothing while hidden.
- `/resume`, `/load` and other session changes that cannot run yet now list
what is still busy and how to stop it.
- Sessions that ended without a clean exit show `interrupted` with their age
Expand Down Expand Up @@ -72,6 +109,10 @@ launcher guidance.

### Added

- `/connect [<provider>]` signs in to a model provider that a plugin adds,
inside the TUI, and `/disconnect <provider>` removes that sign-in.
`/login` and `/logout` are for your Codewhale account only. Plugins that
ship a shell installer can be installed from the plugin view (#6950).
- `codewhale auth claude` and `/auth claude` add Claude subscription sign-in
to the existing Anthropic route, with protected owned credentials, refresh
before requests, a provider-picker choice and local sign-out. API-key billing
Expand Down Expand Up @@ -210,6 +251,60 @@ launcher guidance.

### Fixed

- Windows 10 1607 starts again. 0.10.1 stopped at load with 0xC0000139
because `DeriveCapabilitySidsFromName` is missing there; it is now resolved
at runtime (#6953).
- `codewhale resume` no longer refuses a session whose saved history still
holds a raw sub-agent handoff (#6954).
- A saved session over 8 MiB can be resumed and forked again. Journal entries
off the current branch are archived instead of refusing the session (#6955).
- Snapshot restore and `/undo` work with older git, such as the 2.43 that
Ubuntu 24.04 ships. They failed there with "only one reference expected".
- Cancelling your own background shell job no longer reports it as finished
or starts a new model turn. Cancelling a job that had already exited keeps
its real exit status instead of reading "killed, exit 0".
- A shell command that moves to the background after 30 seconds shows the
same "keep running in /jobs" notice as `Ctrl+B`, and its card no longer
shows the instructions written for the model.
- `todo_write` returns a short receipt (counts and the item in progress) to
the model instead of repeating the whole list on every call.
- Goal usage counts the turn that completes, yields or blocks the goal, so
`tokens_used` and `time_used_seconds` no longer stay at 0. `update_goal`
accepts a progress estimate with `yield`.
- Waiting on a running shell job reports how long ago it last printed and
whether it is still compiling or already running tests or the program.
Stopping a job from `/jobs`, and the completion the model then receives,
say whether build artifacts already on disk survive the kill (#6944).
- A shell command that has printed nothing for a minute still reads as
running ("no output for 1m 05s"), keeps its Stop action and is reachable
through the Runtime API; only a job whose process is gone after a restart
is stale. `/jobs poll` and `/jobs stdin` no longer consume the output the
model has not read yet (#6931).
- `/constitution`: `ratify` checks the digest you reviewed in `suggestions`,
so a file that changed after your review is refused as documented; `preview`
shows the block exactly as the model receives it; messages no longer claim a
ratify or migrate moves the prompt-cache prefix; the setup wizard no longer
lists an authority order that contradicts the base prompt, and it caps your
own note so saving never cuts its end. The Simplified Chinese manager uses
the glossary term 宪章 throughout.
- The pet shows sub-agents while they run, and a finished one no longer stays
"working". Half-block pet sprites are drawn crisply instead of blurred.
- A provider's retry delay is honored when a 429 carries it in the body
instead of a `Retry-After` header (#6923).
- A Codewhale home reached through a symlink or Windows junction keeps saving
artifacts and compacting (#6947).
- A workflow gate that blocks its own role is rejected when the plan is
admitted instead of deadlocking the run (#6945).
- Auto-Review gives its guardian an output budget a reasoning model can think
inside.
- Skills are deduplicated across roots by file, ignored-key warnings are
grouped, in-workspace skill links are followed, and `doctor` warns about a
dead `always_load` pin or an unrecognized bundled skill.
- MCP servers reconnect when a session sync drops the eager connection pool.
- The shared pet owner exits after ten minutes with no client.
- Tool headers keep their clipped part visible at narrow widths, `/jobs`
prints plain exit codes and a three-line tail, and a collapsed tool output
shows a single hidden row instead of a "1 line omitted" marker.
- ChatGPT sign-in omits the unsupported `originator` query parameter that
caused an initial `invalid_authorize_request` rejection. PKCE, account
binding and granted-scope validation remain in the same login flow
Expand Down Expand Up @@ -298,6 +393,23 @@ launcher guidance.
deadline set by its first unsaved event. Tool heartbeats and store polls no
longer restart that wait, and heartbeats are kept in memory only.

### Known limits

- Windows: when the previous app-server owner died without cleaning up, the
next start refuses with "Windows stale-owner recovery is not qualified" and
the stale publication has to be removed by hand. Unix recovers on its own
([#6915](https://github.com/codewhale-hq/Codewhale/issues/6915)).
- Idle CPU has not been measured on FreeBSD or Linux for this release
([#6728](https://github.com/codewhale-hq/Codewhale/issues/6728)).
- Models.dev prices with context tiers: a turn above a model's first tier can
be priced at its base rate. The bundled catalog has no tiered rows, so this
can only happen after a live models.dev refresh
([#6396](https://github.com/codewhale-hq/Codewhale/issues/6396)).
- Shell commands run by delegated agents appear in `/jobs` and the work dock
with their owner, not in the agent's own detail view; named terminal
sessions live in the terminal dock
([#6931](https://github.com/codewhale-hq/Codewhale/issues/6931)).

### Maintenance

- CI and test harness only, no change to the shipped binaries. The
Expand All @@ -308,10 +420,11 @@ launcher guidance.

### Contributors

- **[@SparkofSpike](https://github.com/SparkofSpike)** — live network-policy updates and goal milestone hand-back ([#6928](https://github.com/codewhale-hq/Codewhale/pull/6928), [#6930](https://github.com/codewhale-hq/Codewhale/pull/6930)).
- **[@LIghtJUNction](https://github.com/LIghtJUNction)** — plugin shell install and in-TUI plugin OAuth sign-in ([#6950](https://github.com/codewhale-hq/Codewhale/pull/6950)).
- **[@SparkofSpike](https://github.com/SparkofSpike)** — live network-policy updates and goal milestone hand-back ([#6928](https://github.com/codewhale-hq/Codewhale/pull/6928), [#6930](https://github.com/codewhale-hq/Codewhale/pull/6930)), and a relocated Codewhale home ([#6947](https://github.com/codewhale-hq/Codewhale/issues/6947)).
- **[@dajiaohuang](https://github.com/dajiaohuang)** — cache-write token accounting ([#6913](https://github.com/codewhale-hq/Codewhale/pull/6913)).
- **[@gaord](https://github.com/gaord)** — embedder telemetry surface support ([#6916](https://github.com/codewhale-hq/Codewhale/pull/6916)).
- **[@Lstarsky0](https://github.com/Lstarsky0)** — localized profile replies ([#6919](https://github.com/codewhale-hq/Codewhale/pull/6919)).
- **[@Lstarsky0](https://github.com/Lstarsky0)** — localized profile replies ([#6919](https://github.com/codewhale-hq/Codewhale/pull/6919)) and workflow gates that block their own role ([#6952](https://github.com/codewhale-hq/Codewhale/pull/6952)).
- **[@jayanthvee](https://github.com/jayanthvee)** — Windows npm launcher guidance ([#6906](https://github.com/codewhale-hq/Codewhale/pull/6906)).
- **[@asto18089](https://github.com/asto18089)** — callback-window reference fix for longer browser sign-in waits ([#6865](https://github.com/codewhale-hq/Codewhale/issues/6865)).
- **[@BX166](https://github.com/BX166)** — reported three provider failure modes measured on AICraft's own traffic: a cold model that reads as a dead connection, a listed model that fails on every call, and a response cut at the output ceiling that reports `stop` ([#6889](https://github.com/codewhale-hq/Codewhale/issues/6889)).
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 5 additions & 4 deletions crates/config/src/user_constitution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,11 @@
//! silently. [`UserConstitution::migrate_file`] writes a backup first so
//! [`UserConstitution::rollback_file`] can restore the pre-migration bytes.
//! - **The prompt projection is byte-stable.**
//! [`UserConstitution::cache_projection`] returns exactly the bytes that enter
//! the cache-stable prompt prefix plus their digest and measures. Suggested
//! clauses, preserved unknown fields, and schema metadata are all outside it,
//! so recording advice never invalidates a prompt cache.
//! [`UserConstitution::cache_projection`] returns exactly the bytes the model
//! receives (as a session message at turn admission, outside the cache-stable
//! prompt prefix) plus their digest and measures. Suggested clauses,
//! preserved unknown fields, and schema metadata are all outside it, so
//! recording advice never changes what the model receives.

use std::collections::BTreeMap;
use std::fmt::Write;
Expand Down
11 changes: 7 additions & 4 deletions crates/localization/locales/ca.json
Original file line number Diff line number Diff line change
Expand Up @@ -799,6 +799,7 @@
"ClipboardSentToTerminal": "S'ha enviat al porta-retalls del terminal (els terminals no ho confirmen)",
"ClipboardCutKeptText": "S'ha enviat al porta-retalls del terminal; el text es manté perquè els terminals no confirmen les còpies",
"ClipboardNothingToPaste": "No hi ha res per enganxar: el porta-retalls és buit o no s'ha pogut llegir",
"ClipboardCopyFailed": "Ha fallat la còpia al porta-retalls: {error}",
"KbContextMenu": "Actua sobre el que hi ha sota el punter: copia, enganxa, obre els detalls o un file:line a l'editor, enfoca o atura un agent",
"KbPointerScroll": "Desplaça la transcripció; sobre el redactor, mou el cursor línia a línia",
"KbPointerClick": "Activa la fila, el xip o el bloc d'eina sota el punter",
Expand Down Expand Up @@ -914,7 +915,7 @@
"HomePlanModeChecklistTip": " Presenta un pla i el progrés de tasques, després canvia a Act o Operate",
"HomeGoalModeTip": "Seguiment d'objectius - Defineix /goal <objectiu> per perseguir objectius",
"OnboardLanguageTitle": "Tria l'idioma",
"OnboardLanguageBlurb": "Tria l'idioma de la interfície. El pots canviar en qualsevol moment amb `/settings set locale <tag>`.",
"OnboardLanguageBlurb": "Tria l'idioma de la interfície. El pots canviar en qualsevol moment amb `/config locale <tag> --save`.",
"OnboardProviderTitle": "Tria el teu proveïdor de models",
"OnboardProviderBlurb": "Tria on s'executa el teu model. Els proveïdors allotjats necessiten una clau; els runtimes locals poden continuar sense.",
"KimiCodePlanApiKeyHint": "Per als plans de membresia de Kimi Code, crea la clau vinculada al pla a {console}.",
Expand Down Expand Up @@ -1019,7 +1020,6 @@
"SetupStepConstitutionWhy": "Aquest acord guia el comportament, no els permisos d'execució.",
"SetupStepVerificationTitle": "Revisió",
"SetupStepVerificationWhy": "Resumeix l'estat de Setup i mostra quins passos estan verificats, omesos o encara calen acció.",
"SetupCheckpointLayerOrder": "Ordre de capes: constitució inclosa -> constitució global d'usuari -> constitució del repo -> instruccions AGENTS/del projecte -> memòria/handoff -> petició actual.",
"SetupCheckpointDoneBundled": "Punt de control de la constitució complet: s'usa la llei inclosa/per defecte.",
"SetupCheckpointDoneGuided": "Constitució ratificada — la teva llei permanent s'ha desat. Esmena-la en qualsevol moment amb /constitution.",
"SetupCheckpointDoneKept": "Constitució conservada — la teva llei existent continua vigent, sense canvis. Esmena-la en qualsevol moment amb /constitution.",
Expand Down Expand Up @@ -1230,7 +1230,6 @@
"ApprovalIntentLabel": "Intenció: ",
"ApprovalMoreLines": " … (+{count} línies)",
"ApprovalAutoDeniedSession": "{tool} denegat automàticament: ja has denegat una sol·licitud coincident en aquest torn. Envia un missatge nou perquè se't torni a preguntar.",
"ElevationTitleSandboxDenied": " ⚠ Sandbox denegat ",
"ElevationTitleRequired": " Cal elevació del sandbox ",
"ElevationFieldTool": " Eina: ",
"ElevationFieldCmd": " Cmd: ",
Expand Down Expand Up @@ -1314,6 +1313,10 @@
"ToolReceiptDone": "fet",
"ToolReceiptLinesSingular": "1 línia",
"ToolReceiptLinesPlural": "{count} línies",
"TodoStatusPending": "pendent",
"TodoStatusInProgress": "en curs",
"TodoStatusCompleted": "completada",
"TodoStatusCancelled": "cancel·lada",
"CmdVoiceDescription": "Commuta l'entrada de veu: grava veu i transcriu-la al compositor",
"CmdVoiceSendDescription": "Commuta l'enviament per veu: digues \"send it\" per enviar",
"CmdVoiceControlDescription": "Commuta el control per veu: dictat que coneix l'esborrany",
Expand Down Expand Up @@ -2455,7 +2458,7 @@
"NotificationElevationNeeded": "Permet o denega l'accés elevat per a '{tool}'",
"NotificationDecisionWebHint": "Decideix aquí o al web.",
"NotificationTurnFailed": "El torn ha fallat",
"NotificationProviderFallback": "S'ha canviat a {provider} (alternativa {position}/{total}) després d'un error recuperable del proveïdor.",
"NotificationProviderFallback": "S'ha canviat a {provider} (alternativa {position}/{total}), després d'un error recuperable del proveïdor.",
"ApprovalNeverPostureBlocked": "S'ha bloquejat '{tool}': aquesta sessió no permet eines que requereixen aprovació.",
"NotificationWebApproved": "Aprovat al web.",
"NotificationWebDenied": "Denegat al web.",
Expand Down
Loading
Loading