Repository navigation
Releases
KnoxCoder 2.3.3
Removed
-
Chat, Edit, Apply, View/Read, and RealTime Search pickers. Settings > Models no longer assigns a different model per action. The composer model is used for every action.
-
Chat session mode and Ask permission mode. Knox Agent is Agent-only (plus Cmd+I edit). The permission bar is Edits / Auto. Leftover Chat sessions become Agent; leftover Ask (
default) becomes Auto. Models without tools still stream a tool-free turn. Checkpoints are the rollback path.knoxchat.trustedGitRemotesand the fresh-clone Ask heuristic are gone;knoxchat.permissionDefaultisauto/edits.
Added
- Harness judgments (Decisions models). Knox Settings lists Decisions models when the toggle is on: TypeSafe Jev (Knox Chat or OpenRouter) and Google Gemini Decision 1 (
google/gemini-decision-1, OpenRouter-only). Gemini reads images from the top-level System Onestatearray (anyimage/*data URL or public https URL). Settings copy, the status bar chip (Jev or Gemini), and "Show Judgments Log" describe harness judgments rather than Jev alone. Pick the model in Settings or withknoxchat.jev.model/ YAMLjev.model.
Changed
-
One model for every Knox Agent action. Chat, edit, apply, View/Read, and RealTime Search no longer have separate pickers. The model you choose in the composer is used for the whole turn (including tools and web search). Settings > Models is Add Model only. Connect stamps that model for every action.
-
Add Model in Settings > Models. The KnoxStudio / OpenRouter catalog (sign-in, search, Connect) no longer overlays chat. Empty model picker, first-run Add Model, and quota "Add API key" open Settings on the Models tab. Connect also selects that model in the composer. The configs hint and Open Config File control under Connect are gone.
-
Compact Settings > Models catalog. The Models tab drops the page heading, hint, and Add Model title. Provider tabs are compact logo pills, account actions sit on the same toolbar as Connect, and the catalog fills the remaining height so only the model list scrolls.
-
tsrs 0.25.0 with Windows ARM64. Native TypeScript 7 CLI, gulp compile, and the layers checker use tsrs
0.25.0-ts7.1.0-beta, which ships@tsrs/win32-arm64. gulpvscode-win32-arm64-mintypecheck uses tsrs instead of Gotsc.
Fixed
-
Chinese IME in the Knox composer. Candidate-confirm Enter, empty-box placeholder layout, and stray compositionend no longer cut or submit half-typed CJK input.
-
Reasoning effort None and user-message parts. An explicit None stays None (JEV no longer bumps it to high). Consecutive user parts are no longer flattened to
[object Object]. -
Darwin ARM64 minify packaging. Pin
@electron/asar3.2.1 so gulpvscode-darwin-arm64-mincan constructFilesystemafter a 3.4.x hoist. -
Knox GUI tests after Ask removal. Local auto-approve in Edits no longer treats file edits as a deny, checkpoint switch/checkout still prompt, and unused
devdata/logis off the GUI outbound catalog. -
Settings > Models Connect stays a one-shot per catalog model. After a model is connected and selected, Connect is inactive so extra clicks cannot add duplicate picker entries.
-
Windows Core tests: project-scoped recall (IMP-25). FTS5 porter does not support prefix MATCH (
orphan*), which windows-2022 sqlite3 treats as zero hits. Latin FTS terms are exact tokens, and the orphan-scope regression queries a unique hyphenated token like the other IMP-25 tests.
KnoxCoder 2.3.2
Added
- Memory Brain Rev 2 (revised Knox-MS notes 16-25). Write path, forgetting, calibration, erasure, and a release gate on top of the 2.3.0 rewrite. Retrieval stays local lexical (sqlite FTS, BM25, trigrams, MinHash, graph, tree). No embeddings, vector index, or neural rerank. How to use it: Memory. Pairing: knox-memory-checkpoint.md. Math: KMS Unlimited Context Theorem. Plan: memory-impl.md (MEM-45 through MEM-80).
- Write path. Every row has provenance
src(user/assistant/tool/external). Tool and external facts are quoted data and cannot supersede a user fact. φ₄ reconcile returnsADD / UPDATE / SUPERSEDE / MERGE / NOOPunder a per-scope lock. Facts are bitemporal (valid_*plusrecorded_at). Repeat writes are idempotent by content hash. Summary-tree ancestors store Bloom + top-term sketches on insert and split so depth stays⌈log_b N⌉. - Forgetting and Value.
S₀scales withI₀. FSRS is capped (ρ_max,S_max,S_min) and difficulty reverts. Uncited injection adds fractionalωtou. Near-duplicate MERGE uses 128-permutation MinHash of 3-shingles stored at encode time. - Calibration. Opt-in ablation probes (2%, lexical judge) and Thompson exploration (5%) log propensity. θ is an isotonic, inverse-propensity
P(helpful)fit (pool-adjacent-violators), per-scope after 200 injections, else global, else top 20. Sleep refits the ✓ parameter block with holdout rollback. Injected memory is a quoted[mem:]user-role block, never the system prompt. - Scope and channels. Access is this sqlite (fail-closed). Relevance is the project plus user-global
preference/workflow. As-of intent keeps superseded facts for past queries. Candidates are top 50 plus reserved tree-routed leaves (≤ B·b). Each channel has a hard cost cap (FTS MATCH 2048, ripgrep 200 ms, PPRO(1/(αε)), treeO(B b log_b N)).|G_W| > Btriggers an H→P second hop.W_memhas a floor; an impossible window reroutes or errors, never truncates silently. - Archive vs forget. Archive freezes (reversible, out of default retrieve). Forget / TTL / privacy erases: content-free tombstone, FTS/n-gram/rg postings, graph evidence, ancestor summaries, and snapshot JSON. Health checks five invariants: Budget, Reachability, Losslessness, Freshness (read-your-writes), Erasure. Sleep runs on the 24h timer and when a scope is idle. Frozen postings sit in a slower FTS segment and stay tree-routable. Active is the last 30 minutes of session activity.
- Proof gate. Scale bench publishes
Rec_Wagainst budgeted goldG_W(q),ε_Ω(scope miss), per-tierε_S(4K / 32K / 200K), per-levelε_B, and a flat top-k Dilution Lemma baseline. NightlyN_q = 1e6requires p95 < 300 ms. LongMemEval / LoCoMo / held-out adapters (env paths, never vendored) plus a synthetic fixture; grader is lexical. Erasure bench plants, forgets, and searches (zero hits).gateReleaseaggregates recall, accuracy,H_0.85, latency, and erasure. Overview showsε_Ωand the five invariant chips.
- Write path. Every row has provenance
Changed
-
Typecheck and emit with tsrs. Native TypeScript 7 CLI, gulp compile, and the layers checker now run tsrs (Rust port of TypeScript 7.1) instead of
@typescript/native(Gotsc).--fastis on. TypeScript 6 stays for eslint, tsec, and the compiler API. -
Upgrade editor host to VS Code 1.145.2
Merged upstreammicrosoft/vscode1.145.2 editor, workbench, terminal, Git, Markdown editor, and Electron 43.8.3 (ms_build_id15784459) changes while keeping Knox branding, Open VSX gallery, the native TypeScript 7 toolchain, and Knox Agent isolated from upstream AI. The npmelectronpackage and Knox native rebuild (KNOX_ELECTRON_VERSION) now pin 43.8.3 as well (ABI 148, same as 43.7.7).Editor-side additions from 1.144–1.145.2:
files.exclude/search.exclude!exception patterns, Timeline API finalized (registerWorkspaceTimelineProvider,TimelineItem.resourceUri), Mermaid subgraph titles, media preview moved into the workbench, Windows terminal dialog reparenting, Markdown preview refresh before a hidden panel rebuild, task-system readiness and terminal auto-reply leak fixes, Electron 43.8.3, and the 1.145.2 restricted-event drop.Not adopted from upstream: Copilot harness, Chat, Agents window, Agent Host, MCP, canvases, prompt/skill packs, inline chat, dictation, on-device models, Copilot CLI installer, sandbox/agent telemetry, experiment assignment, and related SDKs — KnoxCoder stays slim and uses its own Knox Agent.
-
New-version popup. When an update is available, KnoxCoder now shows a centered "Update Available" dialog with the new version, the size, the GitHub release notes, and Skip Version / Later / Download & Install. It shows download progress and then installs and restarts without further clicks. Turn it off with
update.showModal; reopen it from the command palette with "Show Available Update".
Fixed
- Retrieve-path table count. Graph, trigram, semantic, episodic, and ripgrep no longer
COUNT(*)the store to decide a LIKE scan. Empty FTS is a miss. LIKE is FTS-less only. Search staysO(log N_q). - Rec-vs-N scan detector. With ~13 gold queries, p95 is the max. Growth is gated on p50 so one Windows cold sample is not a table scan. Absolute ceilings stay a leftover-scan tripwire, not a laptop SLO.
- Memory GUI contracts. Fusion uses the public tree channel (
searchTreeChannel). The bulk-forget banner matches Forget copy (could not be forgotten).
KnoxCoder 2.3.1
Changed
- Conversation History in the title bar. The History control now sits in the top title bar after Memory and Checkpoint (same 22×22 icon box). Clicking it opens a dedicated History editor with the same search, select, pin, rename, export, delete, and keyboard behavior. Opening a conversation still loads it in Knox chat. The composer toolbar no longer has a History button.
- History title-bar icon size. History uses the same contributed icon font as Memory and Checkpoint, sized to sit with those two instead of the smaller built-in history icon.
- Settings in the title bar. Settings sits with History, Memory, and Checkpoint. The editor is a General / Tools / Prompts / Rules / Models sidebar. Tools, Prompts, Rules, and Models leave the composer toolbar; permission edits, slash bookmarks, workspace rules, and the model picker still apply to chat. Role titles show in full. Session tabs stay on real chats in one row — New Chat reuses an empty tab so leftover “Chat N” labels no longer wrap over the sidebar.
- Composer send row. Hide-panel and transcript scroll buttons sit between New chat and Auto. Gathering context moves onto the agent meter instead of under the input. Model and Send icons match the Memory brain size so the input toolbar stays on one line.
- README as a product brief. The repo README states why KnoxCoder exists, how it differs from upstream VS Code, and describes native Knox, Memory Brain, checkpoints, and recipes.
Fixed
- History list while the editor stays open. A new chat turn, rename, delete, or pin now updates the already-open History editor (and the leftover
/historyoverlay) the way the original same-store overlay did — including the current-conversation badge and auto-title. Deleting the conversation that is open in chat starts a fresh chat without writing that session back. - Send and Cancel during a live turn. The composer keeps Send and Cancel while a turn is streaming so generation does not look finished mid-stream.
- Send during Ask User. A generated question is no longer counted as in-flight, which had blocked submit. Send stays available so answering does not look like a live turn.
KnoxCoder 2.3.0
Added
- Memory Brain rewrite (revised Knox-MS theorem). Stored memory is unbounded (
C_addr= sessions + facts + recipes, counted once). Each model call is a bounded context (C_use ≤ Wof the routed model). Success is measured recall of relevant facts, not a bigger inject number. Retrieval stays local lexical (sqlite FTS, BM25, trigrams, rule synonyms, graph, tree) — no embeddings, vector index, or neural rerank. How to use it: Memory. Pairing: knox-memory-checkpoint.md. Math: KMS Unlimited Context Theorem.- Lossless store. Age, sleep, and five-tier archive + tombstone instead of DELETE.
builtin_memorydelete / forget / TTL is reversible via audit; command-palette wipe still hard-deletes after tombstones. Summaries are pointer nodes; originalcontentstays. - Forgetting, Value, and tiers. Power-law
R = (1 + F t/S)^(-c)with categoryS₀(episodic 1d; fact / error_fix / code_pattern 14d; preference / workflow 30d; decision / project_context 60d). UtilityU = (h + κ I₀)/(h + u + κ);Value = R · U. Default retrieve skipsValue < 0.05(archive, not delete). Tiers are Active / Hot (R ≥ 0.9) / Warm / Cold / Frozen / Deleted fromRand Value, not clock knobs. FSRS strengthens only on cited+helpful or harmful use; retrieve and inject recordinject_countand do not raise stability. - Attribution. Injected semantic, episodic, and recipe hints render
[mem:type:id]cites. Cited + successful turn incrementsh; a user correction or recipe revert incrementsu.builtin_memoryattribute{ id, helpful }writes the same log. Recipe replay and cited hints sharebrain_attribution. Sleep refits channel weightsw_sand copies calibratedθinto the live retrieval threshold. - Four-channel RRF. Fusion is reciprocal rank fusion (
k₀=60) over lexical (BM25-then-trigram + synonyms), ripgrep (memory corpus +.knoxignore-allowed project files), hub-damped Personalized PageRank (α=0.15, no entity cap), and summary-tree beam (b=8,B=4; silent until ≥ 8 leaves). Score isrel · (1+η_U U) · (1+η_R R); importance and recency cannot resurrectrel=0. Top 50 fused candidates, thenθ=0.35. Graph aliases merge (TS/TypeScript); superseded and expired facts stay out of the default call. - Inject against the routed window.
WandW_outfollow the routed model (never the leftover 10M storage ceiling).W_memis the remainder after system, goal, recent turns, and output, capped locally at 4096. Sources compete with budgeted submodular selection (λ=0.5) and a start/end sandwich. Overflow injects a session/tree node and drops raw old turns from that call only; originals stay retrievable. Sensory buffer (M₁) flushes at the turn boundary; working memory (M₂) lasts the call/session — 250ms / 30s / 30K are no longer Knox-MS spec. - Recipes as M₅, checkpoints as pointers. Live recipes (or their linked workflow row, once) count in
C_addr. Recall is FTS + fingerprint +memory_id, not a cap-1000 list. Eviction uses theoremValue(workflowS₀=30d); the 256MB blob pin stays a disk budget. Knowledge rewind snapshots are v3 (recipes, steps, outcomes, supersessions, attribution, summary tree) and relink a danglingmemory_id. Workspace capture/pin upserts an episodiccheckpoint_id=…leaf; restore does not dump snapshot JSON into the prompt. Leftoverbrain_proceduresyield when a live recipe shares the fingerprint. Recipes stay off by default. - Measured recall. Scale bench publishes Rec,
|C(q)|, and latency atN ∈ {1e3, 1e4, 1e5}with project scope soN_q = σ N. Horizon bench publishesH_0.85. Each run recordsσ,ε_B,ε_S(ε_B = n/a — flat FTSwhen the tree is silent; that is not a proof).npm run mc:self-improvereports Rec vs N,ε_S, false-inject, attribution coverage, and recipewrongApplyRate;proposeThresholdsfitsθandw_s; git history iscommitChurn. Overview showsC_addr,C_use ≤ W, rolling Rec, andH_0.85/σ/ε_*when published.
- Lossless store. Age, sleep, and five-tier archive + tombstone instead of DELETE.
Changed
- Memory Overview Addressable Memory. The card is a stored-vs-window hero (
C_addrvsC_use / W) with Rec /H_0.85/σ/ε_*chips, stored vs buffer layer bars, and an age-mix stack — not three equal tiles and a flat M₁–M₅ dump. - Memory Settings. Collapsed Revised theorem group exposes the live parameter table (power-law F/c, FSRS, RRF, channel weights,
W_mem, tree beam). Opening a pre-rewritebrain.sqliteadds theorem columns plusbrain_summary_treeandbrain_attribution; older readers still open. Ebbinghaus access-boost keys stay as unused leftover. - Memory Brain disk default 1 GiB.
knoxchat.memoryBrain.maxBytes(andKNOX_BRAIN_MAX_BYTES) default to 1 GiB, was 256 MB. Overview health, capacity score, and growth forecast (days_until_cap) use that valve. Tiers stay R/Value (R >= 0.9is hot); leftovermax_hot_memories=500is unused, like the old clock knobs. Settings marks Max Hot Memories leftover. - Chat recipe chrome. Chat no longer shows a capture toast (Saved as candidate / Don't save / Memory → Recipes) or a “No verified recipe reused this turn” banner. Save and refuse stay on Memory → Recipes; chat still shows a card when a verified recipe is actually reused, previewed, or hinted.
Fixed
- Pre-turn ripgrep corpus scan. The memory ripgrep channel dumped up to 12k recent Ω(q) rows to a temp file on every turn (an O(N_q) leftover, against Search(q) = O(log N_q)). Rec-vs-N pre-turn p95 on GitHub Actions was ~1.5 s (budget 750 ms). Corpus search now MATCH-then-JOIN Ω(q) for exact / regex / identifier needles and runs bundled rg on that hit list; conversational BM25 terms stay on the lexical channel.
- Rec-vs-N leftover latency gate. The 750 ms p95 ceiling was a laptop
searchSemanticSLO and failed GHA windows-2022 (~1.1 s p95) while Rec and the theorem floor held. The gate now catches an O(N) scan (p95/max ceilings plus growth vs N), not a machine-specific turn time. - Jev status bar. The editor status bar Jev chip is hidden while Jev harness judgments are off (Knox Settings toggle, YAML
jev.enabled, orknoxchat.jev.enabled). It used to stay visible because it only read the VS Code setting, which stays on by default after the GUI toggle writes shared config. - False Critical on large brains. Overview treated every sqlite
tier='hot'row as a 500-cap overflow and any file over 100 MB as a problem, so a ~150 MB brain with tens of thousands of never-reclassified turns looked Critical with grade A. Inserts classify from R/Value; Refresh/Consolidate recompute stale labels; heal no longer force-demotes by recency. The 0-1 health score is shown as 0-100. - Dangling summary-tree leaves after disk reclaim. When
max_bytesdropped original rows, tree pointers stayed (Losslessness). Health, consolidate, and heal prune them. Under the cap, forgotten tombstones stay reversible; reclaim is oldest-first. - Project-scope lexical recall. FTS JOIN-filters to this project's sessions and retries MATCH when tombstones filled the first window, so live in-scope rows are not dropped.
- Mismatch scar after the 7-day demote. The leftover 0.15 penalty no longer applies once
mismatch_untilhas passed (it was about 10x one RRF channel). - Sleep and inject leftovers. Distill skips tombstones. LIKE fallback skips
Value < θ_arch. φ₅ still links the summary tree when a turn extracted no new facts. Recipe capture uses project session ids for scope. - Pinning an editor. Transcript resize waits a frame so pinning a message does not trip ResizeObserver.
Removed
C_effectiveas the capacity headline. Overview no longer publishesΣ |Mᵢ|/rᵢas unlimited context. Sensory buffer, working memory, graph entity count, and checkpoint blob bytes are notC_addr. Retrieve-time importance (I), Ebbinghaus access boosts, and the leftover 0.6 additive admission floor no longer score or admit rows — inject stays on calibratedθand W-derivedW_mem.
KnoxCoder 2.2.4
Added
- Recipes as reusable procedures (experimental, still off by default). Verified work can now be a family of variants with slots (component name, path, package), not only a byte-identical snapshot. The Recipes tab is an inspector: search, filter, family grouping, inline preview, rename/pin/notes, and promote to all projects with consent. Chat can
@recipeattach a procedure.builtin_recipelists, previews, and applies (apply still uses the ask card and the same replayer). Sleep can draft family-slot merges for you to approve; it never auto-merges variants. Health reports (npm run mc:self-improve) include recipe counts, capture skips, quarantines, and wrong-reuse. How to use it: recipes.md. builtin_delete_file. Delete one workspace file through the normal tool path (permissions, review mode, turn checkpoint). Directories, parent traversal, and secret files (.env, keys, certs) are refused. Recipes can capture and replay deletes this way.- Checkpoint SCM. Knox Checkpoint can now do the local-SCM jobs that used to stop at labeled snapshots. Still git-independent (no remotes, push/pull, or LFS). Graph, palette, and
builtin_workspace_checkpointcover each action; restore-class actions still ask. How to use it: Checkpoints.- Stash. Park dirty files on a sidecar stack and restore the current line’s head. Pop three-way-applies; overlap leaves the tree unchanged. Graph shows an “N stashed” chip.
- Checkout. Switching a branch writes that line’s head. Dirty files auto-stash (
knox.checkpoints.autoStashOnCheckout, default on) or the switch is refused. Checking out a non-head node is detached (detachedFrom). - Rename and copy.
mv a.ts b.tsis one renamed file, not delete+add. Diff showsrenamed/copied; file history follows the old path. - Cherry-pick. Apply one turn’s delta onto the current line. Already-present changes are a no-op; conflicts wait for continue/abort.
- Revert. Undo one turn and keep later work. Restore still rewinds. Merge checkpoints need an explicit
mainline. - Merge continue / abort. Overlapping hashes try a line-level three-way; leftovers get
<<<<<<<markers. Continue writes the merge (or cherry-pick / revert) node; abort restores the pre-merge tree. - Blame. Editor gutter and hover attribute each line to the newest introducing checkpoint (rename-follow).
knox.checkpoints.blame(default on) annotates when the graph is open. Binary files unsupported. - Worktrees. Reconstruct a snapshot under
~/.knoxcoder/worktrees/…(cap 4). Destinations inside the project are refused. - Bisect. Binary-search a known-good / known-bad range in an isolated worktree.
bisect_runuses exit 0 = good, 1–127 = bad, 125 = skip. - Portable patches. Export a turn as a unified diff (
X-Knox-Checkpointtrailer). Apply uses the cherry-pick three-way and tags the resultpatch. Bundles still clone a full tree.
Changed
- Recipe capture and replay. Capture records safe terminal commands, language/framework checks, and deletes; it ignores lockfiles/
dist/noise and still diffs against the turn-start checkpoint when soul history overflows. Replay fills slots from the new message, open editors, and @-mentions, asks when a slot is empty, and can compose two disjoint verified recipes in sequence. Adapt remains previewed; extra files in an adapt patch stay off until you check them. - Recipe matching. Jaccard plus file/buffer overlap and linked workflow memories. Zero shared tokens still cannot match (no embeddings). A reverted recipe is quarantined. Default reuse stays off; Automatic still auto-applies only a byte-identical clean replay.
- Recipes tab and chat preview. Replay listings render as markdown (file list, highlighted commands, unified diffs) instead of a raw dump. Recipe cards have a chevron to expand or collapse the inspector.
- Checkpoint branch switch checks out files. Graph / palette / agent
switch_branchdefault to a hard checkout of that line’s head (pointer-only stays available for internal bookkeeping).
Fixed
- Recipes preview overflow. Long paths, commands, and diffs wrap inside the ask card instead of crossing the rounded edge.
- Recipe precondition labels.
clean_pathsshows as “No uncommitted changes” instead of a raw i18n key. - Older brain recipe tables. Opening a pre-family
brain.sqliteaddsfamily_id/slot_values/pinned/notesbefore indexes that name those columns, so migrate can finish. - Floating sent prompt edit. Clicking the top floating or pinned prompt opens the history editor immediately so you can type without a second click.
- Scroll to top. The button stays enabled while older messages are still lazy-loaded, walks earlier windows, and only disables at the first message.
- Windows worktree reconstruct keys. Checkpoint reconstruct keys stay posix so Windows worktrees and KN-375/382 contracts pass.
Security
- Recipe deletes, slot substitution, adapt patches, and command steps stay on
callToolwith path, secret, and command guards. Imported skills and bundles start ascandidateand are never auto-replayed. Recipes remain off until you turn onknoxchat.recipes.enabled.
KnoxCoder 2.2.3
Fixed
- Windows terminal error 193.
.cmd/.batshells are launched throughcmd.exeinstead ofCreateProcess. The failure message now explains architecture mismatch. Windows packaging always ships the target-archconpty.dll/OpenConsole.exe. GitHub Actions inspect PE machine types and spawn a live ConPTY under Electron-as-Node;start()waits for the deferred pid. - Windows terminal size-to-content scrollbar. Toggling horizontal scroll no longer throws on xterm 6 wrap flags after resize.
- Auto-update stays on KnoxCoder GitHub releases. Clients refuse
update.code.visualstudio.comandmicrosoft/vscodepackage URLs. The Update feeds workflow probes livelatest-*.jsonon knoxchat/knoxcoder.
Changed
-
Upgrade editor host to VS Code 1.143.1
Merged upstreammicrosoft/vscode1.143.1 editor, workbench, terminal, Git, Markdown editor, and Electron 43.7.7 (ms_build_id15743441) changes while keeping Knox branding, Open VSX gallery, the native TypeScript 7 toolchain, and Knox Agent isolated from upstream AI.Editor-side additions from 1.142–1.143: diagnostic highlight limit 500→5,000,
editor.occurrencesHighlightFromAllProviders, Markdown editor paste-image / rename-links / outline / copy-code-block, experimental multi-diff file list, custom text editor navigation, ZIP progress, and js-debug 1.140.0.Not adopted from upstream: Copilot harness, Chat, Agents window, Agent Host, MCP, canvases, prompt/skill packs, inline chat, dictation, on-device models, Copilot CLI installer, sandbox/agent telemetry, experiment assignment, and related SDKs — KnoxCoder stays slim and uses its own Knox Agent.
KnoxCoder 2.2.2
Added
- Memory write and correction (T1, T2). A chat that states a preference or decision now lands on the Memories tab without the user saying “we decided”. Short prefs (
always use bun) andremember …skip the filler gates; filler still stores nothing. Memories tab Create / Edit / Not relevant, plus composer Remember, store a fact, preference, or decision with no model or tool call. - Paraphrase recall without embeddings (T6, T12). Rule-based enhanced semantic is on by default. Synonym groups cover invoice/tax → money/cents, icon-only → a11y, and settings-card → design-system; the longest matching phrase wins. Memories rows and Overview show why a row was injected last turn (
injected last turn · lexical: jwt). No vector DB, embedding index, or neural rerank. - Recipes on-ramp (T5, T13). After a green mutating turn, chat shows a dismissible toast (saved as candidate, or the skip reason) with a Memory → Recipes link. Recipes tab Preview / Replay reuse the ask card + Undo; Verify, Restore, and Save as project|global skill work from the tab; source checkpoint chips open that node on the Checkpoint Graph. Obvious path/identifier slots fill from the user message. Recipes stay off by default (
knoxchat.recipes.enabled); product replay stays exact + ask. - Sessions as context (T9). The Sessions tab can delete a session or Use as context, which pins that session’s summary and top semantic rows into the next inject (no new store).
- Checkpoint branches on the agent tool (T10).
builtin_workspace_checkpointlistshowslabel=andbranch=;create_branchforks an engine line (not git). Restore and delete still prompt.
Changed
- Memory Settings (T9). Product Settings keep on/off, scope, auto-extract, recipes, enhanced semantic, and inject cap. λ / fusion / budget / compression / mode multipliers sit behind collapsed Expert retrieval with reset-to-defaults.
- Smart checkpoints match the engine (T10). Create no longer silently stops at 50; retention is the engine’s (
knox.checkpoints.maxCheckpoints, default 1000) plus pins. File cap is 5 MB (was 100 KB); oversized files logtoo_large. The unusedknox.checkpoints.smart.maxCheckpointskey is deprecated. - One labeled restore point per agent turn (T4). A pre-risky snapshot is adopted as that turn’s checkpoint. File-threshold auto is skipped while the turn is active. Auto undo snapshots the dirty workspace as the redo target.
- Plan tool.
createcan draft concrete steps from the user request whenstepsis omitted;complete/skipdefault to the current step. Repeating{action:complete}is not treated as a doom loop. - Streaming chat chrome. Thinking and Loading stay on the agent meter, not the composer toolbar. Streaming thinking collapses to a compact chip so tool cards stay in view. Terminal cards cap at five lines so long output scrolls instead of eating the chat.
Fixed
- Journaled Restore All (T3, T7). GUI Restore All, skip-confirm, and the agent
restoretool go through journaledrestoreCheckpoint(backup + journal + rollback). Extra files are unchecked checkboxes plus an explicit “also remove files not in this checkpoint” control (default off). Restore Selected only writes checked paths. A failed restore sets an error and keeps the dialog open. - Auto undo (T4). Undo restores the checkpoint before the last edit (
[A,B]+ dirty workspace → undo A, redo the pre-undo snapshot). - Checkpoint skipUnchanged (T11). Content-only snapshots hash with SHA-256 (
hashBlobBytes), so unchanged files match the live index instead of looking dirty. - Streaming chat. Auto-scroll pauses on the first upward wheel so a live reply cannot yank the view. Streaming replies can be selected and copied. Click-to-edit on the floating sent prompt works during streaming.
- Git tools without a repo. Fail immediately when
vscode.gitfinds no repo instead of a 20s HEAD poll and subprocess stack dumps that looked like a crash.
Removed
knox.checkpoints.auto.checkpointAfterAIand the unusedonAIOperationCompletepath (the setting did nothing).- Empty checkpoint “contextual assistance” stubs and their messenger handlers.
Security
builtin_memoryproduct actions only (T8). The agent tool can onlystore/recall/search/delete/build_context/pin/unpin. Admin actions (heal,export,run_pipeline, …) return an error and do not run. Child/soulreadonlyMemorystays a second write gate.
KnoxCoder 2.2.1
Added
- Agent accessibility (K-102). Skip-to-composer control, landmarks, a live transcript region, and named permission cards, jobs, checkpoints, and recipe preview. Built-in One Dark, Light+, and high-contrast palettes are contrast-checked in CI. A dedicated VoiceOver/NVDA session is still a human check.
- Host soak (K-101).
eval/hostSoak.test.tsruns 1000runChatTurns throughcallTool, checkpoints, and event fold. The native GUI folds 40 shared-loop turns without unbounded DOM growth. Neither is a real VS Code window soak.
Changed
- Tool ports (K-084 stretch). File, shell, search, git, terminal, and composite tools use
ToolExtrasports (fs/proc/search/git/term/editor) instead of calling the full IDE. Core still takes a concrete IDE for diagnostics, DAP, checkpoints, secrets, LSP, and repo map. A messenger-only Core is not done. - Recipe preview (MC-90) now shows on an empty transcript, with Apply / Skip and the latency line.
Fixed
- Auto-update (version detect + download). Packaged builds read
latest-<platform>-<arch>.jsonfrom GitHub Releases (/releases/latest/download/…) and compare thatproductVersionwith the running app, so 2.2.0 detects 2.2.1 without the GitHub API rate limit. “Download Update” opens the installer/archive, not the generic releases page. Feed URLs usev<version>even when CI was started with Run workflow (they previously pointed atv{run}-build.{attempt}and 404’d). Windows verifiessha256hashfrom the same JSON. A missing feed still falls back to/releases/latest. - Hover-only chrome (terminal copy command, tool-args toggle, unnamed switches) now has accessible names.
- Checkpoint list search and the jobs “clear finished” control are labelled for screen readers.
v2.2.0
Added
- Knox Agent 2.2 product path. Sidebar Agent now uses the same loop safeguards as eval: oracle-hold after a red
make/cargo test/npm test, auto-context on submit, a workspace card for Node/Python/Go/CMake (not only kernel/Cargo), and a Turn Context block (open files, git porcelain, diagnostics). Plan mode is a composer toggle (read-only explore until Execute plan). Composer Run in background and Knox: Background Agents: Start runrunChatTurnin a seeded worktree (cap 2). Child subagent steps stream into the jobs panel. - Live eval (manual). After Knox OAuth sign-in,
cd extensions/knox && npm run test:livecompares the loop vs GUI path on Node tasks plus mini-c and mini-rust. NoKNOX_API_KEY. Nightly CI stays scripted.
Changed
- Default core tools with deferral include git status/diff.
builtin_lspis promoted on classified workspaces (node/python/go/cargo/editor/cmake) and systems, not on unknown trees. Composite tools stay off unlessknoxchat.enableCompositeTools. Custom agents load from.knoxcoder/agentsand~/.knoxcoder/agentsonly. Recipes still off by default; sleep now runs the 200-recipe budget and purges old retired rows. Memory Brain FTS indexes overlapping CJK bigrams so Chinese queries match sqlite, not embeddings.
Fixed
- Agent file-edit tool calls recover more often.
builtin_edit_fileacceptssearch/replace,oldString/newString,old_str/new_str, and line-array values inedits[], and skips a truncated trailing entry instead of failing the whole call (edits[12] needs string old_string…). Omittingnew_stringdeletesold_stringinstead of reporting a missingold_string. Matching now ignores markdown line wrapping, so a unique paragraph still applies when the model broke lines differently than the file. JSON arguments with raw newlines or unescaped quotes inside markdown still parse.builtin_apply_patchnow matches hunks with indent drift, wrap drift, partial first/last lines, stale context (git-style fuzz), unique deleted-line fallbacks, and unified-diff---/+++wrappers, and lists closest lines when a hunk still misses.
Removed
- Empty-chat Try sample prompt chips in Knox Agent (truncated, unused starter tips).
v2.1.3
Added
- CheckPoint +N/−N on chat file-edit cards. Streaming file-modification cards show green
+Nand red−Ncounted with Knox CheckPoint line delta on the tool edit, not git unified diffs.
Changed
- Reuse verified work moved from Knox Agent Settings to Memory → Settings, next to the Recipes tab. Agent Settings stays for global agent knobs.
- Write tools retry less. Fuzzy matching, no-op skips, and overwrite-on-create cut retry loops on file edits. The task plan is the work order: the current step auto-advances and the turn holds until remaining is 0.
- Jev harness judgments go through OpenRouter System One when the selected model is OpenRouter (KnoxStudio-only
/v1/systemoneleft OpenRouter sessions without Jev). - Linux native modules are built with Clang 15 instead of the flaky GCC 13 PPA.
- Smaller desktop app: one shared mermaid webview, leftover Knox GUI and Electron-only
dist/browsercopies omitted.
Fixed
- Recipe capture no longer races turn end: soul events and turn marks are awaited so a verified edit is visible to capture. The Memory Recipes tab shows why an empty list was skipped; repeating a chat is not enough.
- Electron unit tests load under Mocha 12 and glob 13 (the Knox GUI job never reached the tests).
Removed
- The post-turn files-changed card that appeared after every finished Knox conversation.
- The inaccurate tokens-per-second rate from the Knox agent meter.
- Unused Microsoft authentication and Azure wiring. KnoxCoder uses GitHub OAuth; Electron stays on 43.7.7.