Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
303 commits
Select commit Hold shift + click to select a range
cc00335
chore(budget): record the uninstall command's synchronous path resolu…
Oct 29, 2026
447d812
Group always_load misses into one actionable Computer Use notice
Oct 29, 2026
fba468d
fix(lsp): open TSX documents with typescriptreact language ID
Ricardo-M-L Oct 29, 2026
6845814
Merge pull request #7126 from Lstarsky0/fix/vim-normal-keys-held-for-…
Hmbown Oct 29, 2026
3884110
Merge pull request #7130 from Lstarsky0/fix/vim-normal-shifted-keys
Hmbown Oct 29, 2026
56eadce
Merge pull request #7127 from laozidabo/fix/remote-control-failure-di…
Hmbown Oct 29, 2026
db0c1de
Merge pull request #7121 from Aboysky/fix/undo-localization
Hmbown Oct 29, 2026
39f4878
fix(work): publish Work state only for the session that was saved (CW…
Oct 29, 2026
8e6d0f7
fix(tui): repaint after a held key reaches vim Normal mode
Oct 29, 2026
c71d236
fix(commands): keep the undo sync action when its report cannot be lo…
Oct 29, 2026
aea75ba
Merge pull request #7140 from Ricardo-M-L/fix/zero29-runtime
Hmbown Oct 29, 2026
8b93da1
docs(release): 0.10.3 changelog and credit for the merged vim, rc, un…
Oct 29, 2026
a154359
chore(release): re-version the vendored codewhale-ratatui to 0.1.3
Oct 29, 2026
6035605
fix(cli): list interrupted sessions in `codewhale sessions` (#7095)
Oct 29, 2026
c2a4872
fix(review): withhold unsupported Action findings from PR feedback [s…
Oct 29, 2026
010d99c
docs(i18n): translate the review-bot row and refresh README stamps
Aboysky Oct 29, 2026
dc09e8a
fix(review): pin our bot to the evidence publication guard [skip ci]
Oct 29, 2026
e374d76
Merge pull request #7141 from Aboysky/docs/readme-i18n-bot-row
Hmbown Oct 29, 2026
7dba198
fix(tui): report partial rewind and Work failures accurately [skip ci]
Oct 29, 2026
429d9a1
fix(tui): preserve the live remote-control authorization banner [skip…
Oct 29, 2026
89f70b4
fix(ollama): keep generic probes out of the native model roster [skip…
Oct 29, 2026
2166fc2
compaction: token-budgeted recent tail, older-span summary, think-tag…
Oct 29, 2026
81ae174
feat(review): carry immutable source and prior findings through the E…
Oct 29, 2026
9c43710
dsh: brokered Git review scopes in the host shim (policy v8)
Oct 29, 2026
30fd3e2
exec/doctor: adopt the TUI's keyless local Ollama route (#7115)
Oct 29, 2026
5661b48
thinking: default reasoning effort is auto, not max
Oct 29, 2026
1f0c4d0
main fixes: write schema budget, Copy lint, Unix-scoped test imports,…
Oct 29, 2026
78580d3
uninstall: preflight purge targets before program removal; non-destru…
Oct 29, 2026
e908f3f
feat(telemetry): count models, tokens and tools; honor DO_NOT_TRACK (…
Oct 29, 2026
00f9e32
changelog: record landed 0.10.3 work (compaction, Ollama exec/doctor,…
Oct 29, 2026
1eff627
fmt: rustfmt-only fixes in compaction/last_round.rs and tools/file.rs
Oct 29, 2026
1d677d9
fix(install): validate ownership and destinations before writes [skip…
Oct 29, 2026
62f0cc9
fix(tui): keep compact approvals and launch navigation safe [skip ci]
Oct 29, 2026
abed615
fix(vscode): patch MSAL packager dependency and remove waiver [skip ci]
Oct 29, 2026
588426d
refactor(tui): move shared services to their owning crates [skip ci]
Oct 29, 2026
9dc506b
fix(tui): keep the indent of a paragraph nested in a list
Lstarsky0 Oct 29, 2026
2d55b97
refactor(skills): own discovery and share configurable routing index …
Oct 29, 2026
7b54e7f
fix(compaction): honor automatic-off during overflow recovery [skip ci]
Oct 29, 2026
2231d73
feat(skills): make bundled install and discovery configurable [skip ci]
Oct 29, 2026
0dd3f04
fix(mcp): record current connection state in existing history [skip ci]
Oct 29, 2026
bd7c7bb
docs: reconcile deconstruction with the active native product [skip ci]
Oct 29, 2026
9fc5c89
fix(tui): keep the quote rail on wrapped rows of a blockquote (#7144)…
Lstarsky0 Oct 29, 2026
896e781
fix(tui): localize activity and file receipts [skip ci]
Oct 29, 2026
16d42ab
fix(session): finish interrupted deletion without removing shared rec…
Oct 29, 2026
74517cb
test: align conformance fixtures with current tool and effort contrac…
Oct 29, 2026
f20a0d7
fix(skills): collapse owned-root condition for clippy [skip ci]
Oct 29, 2026
0bf3158
fix(tui): show effective compaction threshold and disabled state [ski…
Oct 29, 2026
47442ac
feat(providers): add Runcrate descriptor [skip ci]
Oct 29, 2026
57e957f
docs: restore spacing in decomposition guidance [skip ci]
Oct 29, 2026
14a5723
fix(doctor): keep local adoption credential checks read-only [skip ci]
Oct 29, 2026
3b76227
test(telemetry): align existing process checks with current wire vers…
Oct 29, 2026
e908528
fix(tui): display a zero effective compaction threshold [skip ci]
Oct 29, 2026
e636d71
test(tui): wait for the launch resume confirmation controls [skip ci]
Oct 29, 2026
1b18425
test(fleet): model growing input in worker compaction fixture [skip ci]
Oct 29, 2026
1014538
docs: correct landing guide runtime-check cost [skip ci]
Oct 29, 2026
4d974f0
fix(session): retain completed snapshot beside newer checkpoint [skip…
Oct 29, 2026
b42759e
fix(session): preserve reset snapshots during coalesced clears [skip ci]
Oct 29, 2026
c4a4f42
fix(session): preserve checkpoints when reset saves fail [skip ci]
Oct 30, 2026
6a08f03
fix(session): retain recovery when reset snapshot fails [skip ci]
Oct 30, 2026
707e6d3
fix(tui): fork a conversation by the history it carries
gaord Oct 30, 2026
adcf3f5
changelog: record today's landed session, context and doctor fixes [s…
Oct 30, 2026
da026a2
fix(tui): carry the resolved context window with its source through p…
Oct 30, 2026
884f05e
docs(skills): record the changelog and credit in the landing commit […
Oct 30, 2026
b3f1e25
docs(skills): align maintainer skills to canonical main, own-everythi…
Oct 30, 2026
7198de9
fix(tui): remove dead persistence clear request and test-only route w…
Oct 30, 2026
1480e84
docs(skills): check the library under -D warnings after removing a la…
Oct 30, 2026
e5fa43a
refactor(runtime): move runtime_log and working_set out of crates/tui…
Oct 30, 2026
20e8be4
Merge branch 'main' into fix/indent-list-paragraphs
Hmbown Oct 30, 2026
434ef77
Merge branch 'main' into fix/fork-measures-carried-history
Hmbown Oct 30, 2026
00e6272
Merge branch 'main' into fix/upstream-local-model-reasoning
Hmbown Oct 30, 2026
4b51a73
fix(tui): name why a saved window re-rooted, and report an empty acti…
Oct 30, 2026
c43d513
fix(mcp): send one Accept and one Content-Type per Streamable HTTP re…
Oct 30, 2026
5e9cefd
test(tui): install the paired context window in three fixtures that o…
Oct 30, 2026
0e3677b
feat(catalog): pin kimi-k3.1-pro, MiniMax-M3.1-Flash and gpt-6.1-terr…
Oct 30, 2026
287b5eb
fix(tui): detach recalled history when removing an attachment or dele…
Lstarsky0 Oct 30, 2026
0d8b664
fix(mcp): read a JSON-RPC error on the modern probe as a legacy-hands…
Oct 30, 2026
4f97c76
fix(runtime): compare a prompt with its metadata envelope stripped fr…
Oct 30, 2026
e1c8c48
Merge remote-tracking branch 'origin/main'
Oct 30, 2026
6dd9af5
refactor(util): own the process-wide test-environment barrier so runt…
Oct 30, 2026
e33fe00
docs(dsh): say which question each compatibility list answers
Oct 30, 2026
c55c5cb
chore(tui): drop blanket dead_code allows in fleet alerts and pet worker
luochen211 Oct 30, 2026
651c908
fix(l10n): unify zh-Hans pronoun and provider/token terms
luochen211 Oct 30, 2026
ad03c20
fix(engine): bound the tool phase and make a stall end the turn
Oct 30, 2026
a7b35c0
refactor(runtime): own artifacts and tool-output receipts (S2, CW-6129)
Oct 30, 2026
c1616fc
fix(tui): drop the engine's status reply to a fleet roster refresh
Lstarsky0 Oct 30, 2026
f285377
style: reformat the S2 rewrite sites and repoint the blocking-calls b…
Oct 30, 2026
193cd7a
ci(main): run the checked-in preflight on every push to main
Oct 30, 2026
41592ac
ci(main): also allow a manual run of the landing gate
Oct 30, 2026
e31dcd4
refactor(runtime): own workspace trust, delivery files and session di…
Oct 30, 2026
c96f4ed
refactor(runtime): own the workspace drive lease and share its path h…
Oct 30, 2026
3a02722
fix(release): publish codewhale-util before the crates that depend on it
Oct 30, 2026
36f058c
docs: unlink intra-doc references to private items so the docs gate b…
Oct 30, 2026
d0d4f45
fix(tui): render ~~~ fences as code blocks
Lstarsky0 Oct 30, 2026
fd9f06d
fix(cli): gate the hashing module with the only module that uses it
Oct 30, 2026
953ef5a
docs(ohos): make the guide's build work on a host without cmake
gaord Oct 30, 2026
4e01558
feat(release): publish a signed native HarmonyOS binary
gaord Oct 30, 2026
84acb83
test: refresh the providers golden and install the paired window in t…
Oct 30, 2026
b92540d
test(engine): give the user-input probe a timer gap Windows cannot eat
Oct 30, 2026
3748a3b
fix(tui): keep asterisks that don't open emphasis
Lstarsky0 Oct 30, 2026
eb565c0
fix(tui): end a bare URL at full-width punctuation
Lstarsky0 Oct 30, 2026
558845d
chore(deps): bump docker/login-action from 4.6.0 to 4.7.0
dependabot[bot] Oct 30, 2026
507413e
chore(deps): bump jsonwebtoken from 10.4.0 to 11.1.0
dependabot[bot] Oct 30, 2026
9d128fc
chore(deps): bump codewhale-hq/Codewhale
dependabot[bot] Oct 30, 2026
831e639
chore(deps): bump actions/download-artifact from 7.0.0 to 8.0.2
dependabot[bot] Oct 30, 2026
e778ea9
chore(deps): bump codewhale-hq/Codewhale/scripts/github-action/publish
dependabot[bot] Oct 30, 2026
b17c94d
feat(tui): let the model read the transcript compaction replaced
SparkofSpike Oct 31, 2026
77cf34d
fix(tui): make archive ids structural and bound the archive read tools
SparkofSpike Oct 31, 2026
b6523f3
test: stop three host-dependent failures from reddening Windows and m…
Oct 31, 2026
e9e322e
style: rustfmt the host-independent footer width in the remote-contro…
Oct 31, 2026
e3cc433
fix(deps): clear the new follow-redirects and minimatch npm advisories
Oct 31, 2026
70190ac
Merge pull request #7146 from Lstarsky0/fix/indent-list-paragraphs
Oct 31, 2026
2fb9267
Merge pull request #7156 from Lstarsky0/fix/tilde-code-fences
Oct 31, 2026
627e976
Merge pull request #7157 from Lstarsky0/fix/asterisk-emphasis-spaces
Oct 31, 2026
af01036
Merge pull request #7158 from Lstarsky0/fix/url-ends-at-cjk-punctuation
Oct 31, 2026
88911a3
Merge pull request #7152 from Lstarsky0/fix/fleet-roster-no-engine-ack
Oct 31, 2026
9db0961
Merge pull request #7149 from luochen211/chore/dead-code-fleet-alerts
Oct 31, 2026
17df160
Merge pull request #7150 from luochen211/l10n/zh-hans-terminology
Oct 31, 2026
cb0f669
Merge pull request #7147 from gaord/fix/fork-measures-carried-history
Oct 31, 2026
64c5780
docs(zh-Hans): point the install guide at `codewhale uninstall` and a…
Oct 31, 2026
acfd660
docs: record the merged contributor PRs in the changelog and credit s…
Oct 31, 2026
9bf67d1
Merge pull request #7125 from gannp/fix/upstream-local-model-reasoning
Oct 31, 2026
269c1bd
fix(tui): keep a reviewed local model's effort tiers through route no…
Oct 31, 2026
283174a
docs: record #7125/#7124 and regenerate the web facts
Oct 31, 2026
5e96b81
docs(harmonyos): record what hmdfs actually does with owner and mode
gaord Oct 31, 2026
a5c796e
fix(secrets): work on a mount without Unix mode bits or advisory locks
gaord Oct 31, 2026
9578367
feat(runtime): keep private state on a filesystem that cannot express…
gaord Oct 31, 2026
22d6a16
fix(tui): translate the approval card's chrome through the shared mes…
Oct 31, 2026
c4f1e72
fix(tui): translate the approval card's impact lines for every locale
Oct 31, 2026
6d90894
Merge pull request #7151 from gaord/ohos-native-support
Oct 31, 2026
135e28c
fix(tui): close the adversarial recheck findings on archive recall
SparkofSpike Oct 31, 2026
20f091d
fix(cli): remove the marked PATH block and Codewhale completions on u…
Oct 31, 2026
a5db7c7
fix(tui): drop the engine's status reply to a stream timeout change
Lstarsky0 Oct 31, 2026
69ff817
fix(tui): keep balanced parentheses in a markdown link's target
Lstarsky0 Oct 31, 2026
45a7a0f
fix(tui): close the remaining adversarial findings on archive recall
SparkofSpike Oct 31, 2026
bd9ebcd
ci: record conformance prompt goldens on a Linux runner
SparkofSpike Oct 31, 2026
6ea6d8a
ci: install libdbus-1-dev before recording goldens
SparkofSpike Oct 31, 2026
0bcb5d7
ci: bound the golden recorder's memory and print host headroom on fai…
SparkofSpike Oct 31, 2026
36c038a
fix(secrets): compile outside Unix and without a redundant cast
Oct 31, 2026
af6517b
ci(review): skip the App-token jobs for Dependabot
Oct 31, 2026
b984e31
chore(contract): re-lock the runtime-contract budget for the archive …
SparkofSpike Oct 31, 2026
f40cdae
docs(hooks): say what the archive classifier actually receives
SparkofSpike Oct 31, 2026
bfc61fe
fix(config): compile the private-directory guard on Windows and Linux
Oct 31, 2026
be175f8
fix(exec): say no configuration changed, not "nothing was saved"
Oct 31, 2026
6bd17c4
fix(cli): drop the needless return CI's lint gate rejects
Oct 31, 2026
3506f5f
fix(config): pass the guard to the xAI Windows validation calls
Oct 31, 2026
b548a63
chore(gates): record the uninstall shell-integration blocking-call sites
Oct 31, 2026
2ef0f8d
fix(runtime): gate the lease predicate test to Unix
Oct 31, 2026
395f2b6
fix(runtime): gate the unsupported-lease constructor to Unix
Oct 31, 2026
2668c4b
fix(setup): keep the setup checkpoint when a second instance is running
SparkofSpike Oct 27, 2026
9a3dc29
fix(tui): keep the backslashes in a machine-generated note
SparkofSpike Oct 27, 2026
4d72d35
test(tui): give the note path case a frame wide enough for the path
SparkofSpike Oct 27, 2026
1a49316
fix(settings): retry a settings write whose destination is held
SparkofSpike Oct 28, 2026
3e7e8c5
fix(settings): deliver a settings write when the directory refuses re…
SparkofSpike Oct 28, 2026
cd407f9
docs: record the held-destination and note-rendering fixes for 0.10.3
Oct 31, 2026
7a30bb6
fix(settings): gate the in-place rewrite to Windows
Oct 31, 2026
ce32a1c
feat(session): record what a resume repaired, in the audit log
Oct 31, 2026
c768e1a
Merge pull request #7117 from SparkofSpike/fix/setup-state-contention…
Hmbown Oct 31, 2026
785f7d0
chore(gates): budget the settings-write retry sleeps
Oct 31, 2026
7cc1fd2
fix(tui): render code and links inside emphasis
Lstarsky0 Oct 31, 2026
23c2acb
test(conformance): re-record the prompt goldens for the archive tools
SparkofSpike Oct 31, 2026
ecd256c
chore(gates): lower the dead-code ceiling to 158
Oct 31, 2026
dc48701
Merge pull request #7169 from Lstarsky0/fix/stream-timeout-no-engine-ack
Hmbown Oct 31, 2026
9986831
Merge pull request #7170 from Lstarsky0/fix/link-target-balanced-parens
Hmbown Oct 31, 2026
b2db2c0
Merge pull request #7171 from Lstarsky0/fix/parse-markup-inside-emphasis
Hmbown Oct 31, 2026
1b0e510
docs: record #7169, #7170 and #7171 in the changelog and credits
Oct 31, 2026
8202875
docs(split): measure the billing/catalog cluster as the next cycle cut
Oct 31, 2026
1f8f853
fix(goal): name the ask-the-user exit in continuation prompts
SparkofSpike Oct 31, 2026
ac51209
fix(goal): keep the continuation yield trigger as narrow as the header
SparkofSpike Oct 31, 2026
f36e46d
Merge pull request #7168 from gaord/feat/hmdfs-ownerless-mount
Hmbown Oct 31, 2026
f510a59
docs: record #7168 and rebase the blocking-call budget after it
Oct 31, 2026
297b06d
docs(split): crate map, coarse split plan, and the crate_map.py checker
Oct 31, 2026
ea91944
fix(markdown): keep a keycap in one span through the inline parser
SparkofSpike Oct 31, 2026
73beac7
refactor(split): clear stage A's band boundaries for the coarse split
Oct 31, 2026
f550980
docs(split): place core/protocol_parity with the engine in stage A
Oct 31, 2026
711075a
Merge pull request #7175 from SparkofSpike/codex/goal-yield-on-question
Hmbown Oct 31, 2026
aafbf5f
Merge pull request #7131 from Felixkw12/feat/opper-descriptor
Oct 31, 2026
aac4abb
docs: record #7175 and #7131 and credit their contributors
Oct 31, 2026
8f8d463
Merge pull request #7173 from SparkofSpike/codex/compaction-archive-r…
Oct 31, 2026
7d5464e
fix(context-archive): mask archived credentials, scrub snapshots, bou…
Oct 31, 2026
44a2049
docs: remove the retired Tideline design documents
Oct 31, 2026
44007bf
docs: record #7173 and credit @SparkofSpike
Oct 31, 2026
80b7c44
refactor(split): keep StartReviewRequest with the thread manager
Oct 31, 2026
b691789
fix(goal): route a needed user answer to yield, not blocked
SparkofSpike Oct 31, 2026
938b157
test(conformance): re-record the goal tool fixtures for the yield wor…
SparkofSpike Oct 31, 2026
3186728
build(runtime): enable Win32_System_Console for the Windows log redirect
SparkofSpike Nov 1, 2026
db2c8d0
fix(session): keep history matched when turn metadata differs
SparkofSpike Nov 1, 2026
5cc8179
fix(session): converge the journal when turn metadata differs
SparkofSpike Nov 1, 2026
e34f207
refactor(engine): extract the shared runtime from the TUI [skip ci]
Nov 1, 2026
9219548
Merge pull request #7177 from SparkofSpike/codex/goal-yield-not-block…
Hmbown Nov 1, 2026
db0b231
Merge approved goal-schema PR #7177 across Engine extraction [skip ci]
Nov 1, 2026
a27d80d
chore(goal): record PR 7177 credit and exact schema growth [skip ci]
Nov 1, 2026
4715f9c
chore(deps): bump htmd from 0.5.5 to 0.5.6
dependabot[bot] Nov 1, 2026
376690e
chore(deps): bump toml from 1.1.4+spec-1.1.0 to 1.1.6+spec-1.1.0
dependabot[bot] Nov 1, 2026
5f67c80
chore(deps): bump liblzma from 0.4.8 to 0.4.9
dependabot[bot] Nov 1, 2026
0a97bd4
fix(session): refresh a metadata-only prefix instead of forking
SparkofSpike Nov 1, 2026
a137b4c
test(contract): pin host facts and refresh goal schema receipts [skip…
Nov 1, 2026
88fd50d
feat(plugins): update reviewed DSH compatibility to rc.5 [skip ci]
Nov 1, 2026
ddb48a5
fix(session): match a projection strictly unless the entry stores a m…
SparkofSpike Nov 1, 2026
4b85ac2
docs(web): finish FAQ and source-aware install discovery [skip ci]
Nov 1, 2026
759a2e4
fix(session): stop the comparison doc from overclaiming
SparkofSpike Nov 1, 2026
be492e8
fix(markdown): preserve keycap graphemes through inline parsing (#717…
Hmbown Nov 1, 2026
5d795f7
docs: credit keycap parser fix and repair historical contributor note…
Nov 1, 2026
597a16a
Merge upstream/main into codex/session-rebranch-turn-meta
SparkofSpike Nov 1, 2026
abe7690
test(engine): account for reviewed #7177 parent schema text [skip ci]
Nov 1, 2026
21a1c07
feat(engine): compose scoped MCP batches in the existing VM [skip ci]
Nov 1, 2026
c80c16c
fix(session): preserve stamped turns and shared journal ancestors (#7…
Nov 1, 2026
1434f88
fix(tui): parse a table cell's markup before wrapping it
Lstarsky0 Nov 1, 2026
515fc64
chore(deps): bump docker/login-action from 4.6.0 to 4.7.0 (#7159) [sk…
Hmbown Nov 1, 2026
92058c4
chore(deps): bump codewhale-hq/Codewhale from c2a48723285c48978279f6c…
Hmbown Nov 1, 2026
c77d2f4
chore(deps): bump actions/download-artifact from 7.0.0 to 8.0.2 (#716…
Hmbown Nov 1, 2026
9e2c17c
chore(deps): bump codewhale-hq/Codewhale/scripts/github-action/publis…
Hmbown Nov 1, 2026
c7721b9
test(tui): pin the whole model-visible tool catalog in prompt fixture…
Nov 1, 2026
1d750e5
fix(routes): honor the serving limits of named custom endpoints [skip…
Nov 1, 2026
c722e4a
chore(deps): bump jsonwebtoken from 10.4.0 to 11.1.0 (#7160) [skip ci]
Hmbown Nov 1, 2026
3070c00
fix(bridges): reconcile interrupted Feishu and Weixin deliveries [ski…
Nov 1, 2026
0079c86
Merge current main into the original session journal repair (#7180) […
Nov 1, 2026
00226bb
Merge pull request #7180 from SparkofSpike/codex/session-rebranch-tur…
Hmbown Nov 1, 2026
1ce8331
fix(engine): restore moved feature and Windows checks [skip ci]
Nov 1, 2026
35980d9
Merge verified main into the original dependency update (#7163) [skip…
Nov 1, 2026
28bb88c
chore(deps): bump liblzma from 0.4.8 to 0.4.9 (#7163) [skip ci]
Hmbown Nov 1, 2026
56e4994
Merge verified main into the original dependency update (#7165) [skip…
Nov 1, 2026
f27ad2e
chore(deps): bump htmd from 0.5.5 to 0.5.6 (#7165) [skip ci]
Hmbown Nov 1, 2026
84a05f3
Merge verified main into the original dependency update (#7166) [skip…
Nov 1, 2026
ffa9b23
chore(deps): bump toml from 1.1.4+spec-1.1.0 to 1.1.6+spec-1.1.0 (#71…
Hmbown Nov 1, 2026
2fad148
fix(engine): send the goal objective once per live context window [sk…
Nov 1, 2026
a595ca4
fix(tui): resolve an unavailable Ollama default when the daemon appea…
Nov 1, 2026
0bbfbb2
fix(providers): refresh the Runcrate public roster without a key [ski…
Nov 1, 2026
b6210eb
Integrate wrapped table links with current main (original #7181) [ski…
Nov 1, 2026
24b83e4
fix(tui): render markup in wrapped table cells (#7181) [skip ci]
Hmbown Nov 1, 2026
e7bee48
fix(web): serialize scheduled and manual facts refreshes [skip ci]
Nov 1, 2026
ca75613
fix(web): bound DeepSeek response bodies for both community clients […
Nov 1, 2026
c4a31ba
fix(web): serialize draft generation with maintainer review [skip ci]
Nov 1, 2026
f70f7bb
fix(web): bound weekly digest archive reads and rendering [skip ci]
Nov 1, 2026
43628e4
fix(bridges): bound Runtime events and preserve interrupted turns [sk…
Nov 1, 2026
9897aa8
fix(lighthouse): install each bridge with its matching shared runtime…
Nov 1, 2026
af3e9e3
fix(tui): persist conversation rewind after restoring request files […
Nov 1, 2026
12632ee
fix(tui): keep fanout worker identities stable across reordered event…
Nov 1, 2026
f5d12d6
fix(update): bound release discovery and sanitize remote errors [skip…
Nov 1, 2026
847ea56
fix(tui): recover interrupted replies across shutdown and resume [ski…
Nov 1, 2026
31723e5
fix(release): check all three published release records [skip ci]
Nov 1, 2026
42532e3
fix(release): refuse malformed facts before writing the release recor…
Nov 1, 2026
de99f05
fix(tui): retain historical context windows for resolved Auto turns […
Nov 1, 2026
5fd52e8
fix(tui): checkpoint the visible partial reply during a running turn …
Nov 1, 2026
ce44c64
docs(changelog): describe verified restart and Auto-window behavior […
Nov 1, 2026
823b719
fix(tui): persist the selected conversation before confirming backtra…
Nov 1, 2026
05a6647
fix(registry): read provider readiness from its Engine owner [skip ci]
Nov 1, 2026
daceee7
fix(tui): keep the Unix doctor scan reference inside its test [skip ci]
Nov 1, 2026
465c30d
fix(catalog): give the bare deepseek-v4.1-flash spelling its own row
SparkofSpike Nov 1, 2026
1fb549b
test(models): move the bare v4.1-flash spelling to the resolved list
SparkofSpike Nov 1, 2026
3a9f261
docs(catalog): narrow two over-claims about the new bare row
SparkofSpike Nov 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 3 additions & 3 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,14 @@ filter = 'binary(telemetry_kill_switch_dispatch)'
test-group = 'telemetry-contract'

[[profile.default.overrides]]
filter = 'package(codewhale-tui) & kind(lib) & test(/^fleet::manager::tests::/)'
filter = 'package(codewhale-engine) & kind(lib) & test(/^fleet::manager::tests::/)'
test-group = 'fleet-manager-lifecycle'

[[profile.default.overrides]]
# DSH preparation also launches the isolated host against the shared hermetic
# home. OCR/PDF consumers also launch real hosts outside extension_host's
# namespace. Keep their process lifecycle checks in this existing serial lane.
filter = 'package(codewhale-tui) & kind(lib) & (test(/^extension_host::/) | test(/^tools::image_ocr::host_tests::/) | test(/^tools::pdf::host_tests::/) | test(/^core::engine::.*extension/) | test(/^plugins::install::dsh::/) | test(/^plugins::tests::dsh_/) | test(/^runtime_api::tests::dsh_package_preview_then_exact_install_over_http$/) | test(/^commands::contract::tests::plugin_adapter_dsh_preview_runs_from_live_runtime$/) | test(/^commands::groups::plugins::tests::dsh_import_reviews_without_installing_then_installs_the_exact_bundle$/))'
filter = '(package(codewhale-engine) | package(codewhale-tui)) & kind(lib) & (test(/^extension_host::/) | test(/^tools::image_ocr::host_tests::/) | test(/^tools::pdf::host_tests::/) | test(/^core::engine::.*extension/) | test(/^plugins::install::dsh::/) | test(/^plugins::tests::dsh_/) | test(/^runtime_api::tests::dsh_package_preview_then_exact_install_over_http$/) | test(/^commands::contract::tests::plugin_adapter_dsh_preview_runs_from_live_runtime$/) | test(/^commands::groups::plugins::tests::dsh_import_reviews_without_installing_then_installs_the_exact_bundle$/))'
test-group = 'extension-host'

[[profile.default.overrides]]
Expand Down Expand Up @@ -116,5 +116,5 @@ path = "junit.xml"
report-name = "codewhale-native-host"

[[profile.ci.overrides]]
filter = 'package(codewhale-tui) & kind(lib) & (test(/^extension_host::tests::compiled_native_host_cannot_read_secrets_or_write_outside_its_data_dir$/) | test(/^extension_host::tests::compiled_native_host_memory_cap_is_enforced$/))'
filter = 'package(codewhale-engine) & kind(lib) & (test(/^extension_host::tests::compiled_native_host_cannot_read_secrets_or_write_outside_its_data_dir$/) | test(/^extension_host::tests::compiled_native_host_memory_cap_is_enforced$/))'
junit.store-success-output = true
14 changes: 7 additions & 7 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
# produces different compiled binaries on Windows vs Linux/macOS.
# Cover nested mode/approval/personality prompts — a top-level *.md glob alone
# left modes/*.md on CRLF under Windows autocrlf and blew the agent token budget.
crates/tui/src/prompts/**/*.md text eol=lf
crates/tui/src/prompts/*.md text eol=lf
crates/tui/src/prompts/*.txt text eol=lf
crates/engine/src/prompts/**/*.md text eol=lf
crates/engine/src/prompts/*.md text eol=lf
crates/engine/src/prompts/*.txt text eol=lf

# The rest of the include_str!() inputs. `* text=auto` below converts these to
# CRLF on a Windows checkout, which is invisible for the ones that are only
Expand Down Expand Up @@ -58,12 +58,12 @@ scripts/fixtures/dsh-web-app/** text eol=lf
# the generator's LF output (protocol/tests.rs), and its dist bundle is
# include_bytes!()'d and digest-checked at launch; a CRLF Windows checkout
# failed the former and would embed different bytes.
crates/tui/extension-host/src/protocol.generated.ts text eol=lf
crates/tui/extension-host/dist/** text eol=lf
crates/engine/extension-host/src/protocol.generated.ts text eol=lf
crates/engine/extension-host/dist/** text eol=lf
# Reviewed extension-host fixtures carry exact source SHA-256 receipts.
# A Windows checkout must not rewrite their admitted source closure to CRLF.
crates/tui/tests/fixtures/extension_host/** text eol=lf
crates/tui/extension-host/src/dsh/dsh-message-compat.js text eol=lf
crates/engine/tests/fixtures/extension_host/** text eol=lf
crates/engine/extension-host/src/dsh/dsh-message-compat.js text eol=lf

# Rustfmt writes LF; keep Rust sources stable across Windows/Linux/macOS.
*.rs text eol=lf
Expand Down
3 changes: 3 additions & 0 deletions .github/AUTHOR_MAP
Original file line number Diff line number Diff line change
Expand Up @@ -272,3 +272,6 @@ henrikdukef@gmail.com = Henrik Bakke Dukefoss <76407537+henrikdukefoss@users.nor
dhruvsingalabc@gmail.com = Dhruv Singal <170742396+dsingal0@users.noreply.github.com>
aboyskyi@gmail.com = Boyce <52989177+Aboysky@users.noreply.github.com>
Boyce = Boyce <52989177+Aboysky@users.noreply.github.com>
Felixkw12 = Felix Wunderlich <151852644+Felixkw12@users.noreply.github.com>
felix@opper.ai = Felix Wunderlich <151852644+Felixkw12@users.noreply.github.com>
Felix Wunderlich = Felix Wunderlich <151852644+Felixkw12@users.noreply.github.com>
47 changes: 43 additions & 4 deletions .github/scripts/release-workflows.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -362,6 +362,7 @@ const expectedTargets = [
"x86_64-unknown-linux-musl",
"aarch64-unknown-linux-musl",
"aarch64-linux-android",
"aarch64-unknown-linux-ohos",
"x86_64-apple-darwin",
"aarch64-apple-darwin",
"x86_64-pc-windows-msvc",
Expand Down Expand Up @@ -395,7 +396,7 @@ const builtAssetNames = [
...valuesForKey(artifacts, "shim_artifact"),
...valuesForKey(artifacts, "compat_tui_artifact"),
];
assert.equal(builtAssetNames.length, 21);
assert.equal(builtAssetNames.length, 24);
assert.deepEqual(
[...new Set(builtAssetNames)].sort(),
[
Expand All @@ -417,6 +418,44 @@ const bundleInvocations = [...bundles.matchAll(
assert.deepEqual(bundleInvocations.sort(), [...BUNDLE_ASSET_NAMES].sort());
assert.match(artifacts, /aarch64-pc-windows-msvc/);
assert.match(artifacts, /aarch64-linux-android/);
// HarmonyOS bytes cannot be shipped unsigned: the device refuses to execute an
// unsigned ELF, so the leg must self-sign and prove the signature before
// staging. Assert the order too — signing after staging would publish the
// unsigned copy.
assert.match(artifacts, /aarch64-unknown-linux-ohos/);
const ohosSdk = namedStep(artifacts, "Install OpenHarmony native SDK");
assert.match(ohosSdk, /components: 'native;toolchains'/, "the SDK must include the binary signer");
assert.match(ohosSdk, /cache: false/, "a release must download the SDK, not publish a new cache entry");
// A step header glued onto the previous line because a `run:` block lost its
// trailing newline parses as valid YAML (the header becomes script text) and
// silently drops the step. Every `- name:` in these workflows must start its
// own line.
for (const [file, source] of [
["release-artifacts.yml", artifacts],
["release.yml", release],
["nightly.yml", nightly],
]) {
for (const match of source.matchAll(/- name:/g)) {
const lineStart = source.lastIndexOf("\n", match.index) + 1;
assert.match(
source.slice(lineStart, match.index),
/^\s*$/,
`${file}: a step header must start its own line, not follow other content`,
);
}
}

const ohosBuild = namedStep(artifacts, "Cross-compile and code-sign the OpenHarmony binary");
assert.match(ohosBuild, /matrix\.platform == 'ohos-arm64'/);
assert.match(ohosBuild, /binary-sign-tool\.jar/);
assert.match(ohosBuild, /-selfSign 1/);
assert.match(ohosBuild, /code signature is self-sign/);
assert.match(ohosBuild, /scripts\/ohos-env\.sh/);
assert.ok(
ohosBuild.indexOf("codesign") === -1 ||
ohosBuild.indexOf("binary-sign-tool.jar") < ohosBuild.indexOf("display-sign"),
"the signature must be applied before it is verified",
);
assert.match(artifacts, /codew-windows-arm64\.exe/);
assert.match(artifacts, /CodeWhaleSetup\.exe/);
assert.match(artifacts, /assemble-release-assets\.js --verify release-assets/);
Expand Down Expand Up @@ -491,7 +530,7 @@ const parityRustCache = [...parity[1].matchAll(/uses: Swatinem\/rust-cache@[\s\S
assert.equal(parityRustCache.length, 1, "parity must pin exactly one rust-cache");
assert.doesNotMatch(parityRustCache[0], /github\.(event|ref|sha)|inputs\./);

assert.equal(allReleaseAssetNames().length, 34);
assert.equal(allReleaseAssetNames().length, 38);
assert.match(release, /^ artifacts:\n/m);
assert.match(release, /uses: \.\/\.github\/workflows\/release-artifacts\.yml/);
assert.doesNotMatch(release, /^ (build|bundle|windows-installer):/m);
Expand Down Expand Up @@ -620,7 +659,7 @@ assert.doesNotMatch(

assert.match(runbook, /release[- ]candidate/i);
assert.match(runbook, /expected_sha/);
assert.match(runbook, /34/);
assert.match(runbook, /38/);
assert.match(runbook, /does not create a tag/i);
assert.match(runbook, /explicit.*approval/i);
assert.match(runbook, /last[- ]useful[- ]log/i, "runbook must document the last-useful-log rule (#5496)");
Expand Down Expand Up @@ -866,5 +905,5 @@ assert.ok(
);

console.log(
"Workflow contracts OK: 6-target/12-asset single-runtime nightly and exact-head 7-target/34-asset release candidate.",
"Workflow contracts OK: 6-target/12-asset single-runtime nightly and exact-head 8-target/38-asset release candidate.",
);
18 changes: 9 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ jobs:
# push to main still runs it unconditionally as the pre-release
# safety net for anything this filter misses.
case "${path}" in
crates/app-server/*|crates/tui/src/runtime_api*|crates/tui/src/runtime_mobile.html|crates/tui/src/runtime_threads*|crates/tui/src/main.rs|scripts/mobile-smoke.sh|.github/workflows/ci.yml|Cargo.lock|Cargo.toml)
crates/app-server/*|crates/tui/src/runtime_api*|crates/tui/src/runtime_mobile.html|crates/engine/src/runtime_threads*|crates/tui/src/main.rs|scripts/mobile-smoke.sh|.github/workflows/ci.yml|Cargo.lock|Cargo.toml)
mobile=true
;;
esac
Expand Down Expand Up @@ -327,7 +327,7 @@ jobs:
# testing; then reject any bundle drift. Node 22 matches the host floor.
run: |
set -euo pipefail
cd crates/tui/extension-host
cd crates/engine/extension-host
npm ci --ignore-scripts
npm test
npm run typecheck
Expand All @@ -344,7 +344,7 @@ jobs:
# suites only; the Rust host tests run on Node.
run: |
set -euo pipefail
cd crates/tui/extension-host
cd crates/engine/extension-host
npm run test:bun

extension-host-runtimes:
Expand All @@ -359,7 +359,7 @@ jobs:
runs-on: ${{ matrix.os }}
defaults:
run:
working-directory: crates/tui/extension-host
working-directory: crates/engine/extension-host
shell: bash
steps:
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7
Expand All @@ -384,7 +384,7 @@ jobs:
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
with:
name: extension-host-runtime-${{ matrix.os }}
path: crates/tui/extension-host/dist/builtin-modules.json
path: crates/engine/extension-host/dist/builtin-modules.json
if-no-files-found: error

vscode-extension:
Expand Down Expand Up @@ -470,7 +470,7 @@ jobs:
# codewhale-runtime owns `safe_label` (its hostile-authority test)
# since RS-2; add the next package when another safety module moves.
run: |
sh scripts/with-hermetic-test-home.sh cargo nextest run -p codewhale-tui -p codewhale-runtime --lib --locked --no-tests=fail -E 'test(auto_review) | test(authority) | test(sandbox)'
sh scripts/with-hermetic-test-home.sh cargo nextest run -p codewhale-engine -p codewhale-tui -p codewhale-runtime --lib --locked --no-tests=fail -E 'test(auto_review) | test(authority) | test(sandbox)'
sh scripts/with-hermetic-test-home.sh cargo test -p codewhale-execpolicy --locked

lint:
Expand Down Expand Up @@ -896,7 +896,7 @@ jobs:
set -euo pipefail
bun_binary="$(bun -p 'process.execPath')"
host_binary="$(node -p "require('path').join(process.env.RUNNER_TEMP, 'codewhale-extension-host' + (process.platform === 'win32' ? '.exe' : ''))")"
compiled_info="$(node crates/tui/extension-host/compile-host.mjs --bun "$bun_binary" --output "$host_binary")"
compiled_info="$(node crates/engine/extension-host/compile-host.mjs --bun "$bun_binary" --output "$host_binary")"
printf 'CODEWHALE_COMPILED_HOST_TEST_BINARY=%s\n' "$host_binary" >> "$GITHUB_ENV"
node - "$host_binary" "$bun_binary" "$compiled_info" >> "$GITHUB_ENV" <<'JS'
const fs = require('node:fs'), crypto = require('node:crypto');
Expand All @@ -908,7 +908,7 @@ jobs:
console.log('CODEWHALE_COMPILED_HOST_TEST_SHA256=' + digest(process.argv[2]));
console.log('CODEWHALE_COMPILED_HOST_TEST_BUN=' + process.argv[3]);
console.log('CODEWHALE_COMPILED_HOST_TEST_RUNTIME_SHA256=' + digest(process.argv[3]));
console.log('CODEWHALE_COMPILED_HOST_TEST_BUNDLE_SHA256=' + digest('crates/tui/extension-host/dist/codewhale-extension-host.mjs'));
console.log('CODEWHALE_COMPILED_HOST_TEST_BUNDLE_SHA256=' + digest('crates/engine/extension-host/dist/codewhale-extension-host.mjs'));
JS
# The required hermetic full invocation executes the shared actual
# compiled Native secret/history/write scenario on each OS; Windows
Expand Down Expand Up @@ -1149,7 +1149,7 @@ jobs:
python3 scripts/compiled-host-native-receipt.py \
--junit target/nextest/ci/junit.xml \
--compiled-image "$CODEWHALE_COMPILED_HOST_TEST_BINARY" \
--bundle crates/tui/extension-host/dist/codewhale-extension-host.mjs \
--bundle crates/engine/extension-host/dist/codewhale-extension-host.mjs \
--bun "$CODEWHALE_COMPILED_HOST_TEST_BUN" --source-sha "$GITHUB_SHA" \
--image-platform "$CODEWHALE_COMPILED_HOST_TEST_PLATFORM" --image-arch "$CODEWHALE_COMPILED_HOST_TEST_ARCH" \
--host-sha256 "$CODEWHALE_COMPILED_HOST_TEST_SHA256" \
Expand Down
Loading
Loading