Repository navigation
TST Desk tstdesk-v0.2.0
What changed
TD-609
- search fallback chain with Bing shipped second (485db62)
TD-708
- record classifier judgments and close the seam criteria (5b7a3d0)
- backfill an empty typesafe_base_url when the backend is picked (c577490)
- pick the TypeSafe key from stored credentials, not a magic name (e12eebd)
- count implicit openrouter use in API keys 'Used for' (d2531be)
- TypeSafe connector as an opt-in judgment backend + key uses in Settings (79c4782)
- review fixes — threshold wiring, payload redaction, Settings honesty (7fb9c92)
- let the settings pane scroll (grid minmax fix) (14d9be0)
- judgments toggles in Settings, set_judgments protocol message (023f3f7)
- provider-neutral judgment seam + CU judgment features (dev) (cc5b41f)
TD-711
- wire candidate selection into the browser loop as browser_pick (1b557aa)
TD-1303
- tick first tagged release; flatten Release assets (c00442f)
TD-1406
- leave cargo test --lib out of CI for now (7647ed7)
- pin spawn creation flags and CIM parent lookup (b02e6db)
- drop POSIX-only printenv and false from Windows-run tests (7a662db)
- match cmd.exe internals on the Windows allowlist (4c80919)
- drive the Windows tree-kill branch through a taskkill shim (e08b8b0)
- treat taskkill not-found as already gone, not a veto (6499984)
- record that taskkill walks the tree before TerminateProcess (f8b3298)
- walk the Windows process tree before TerminateProcess (f9c866c)
- verify Windows process-tree kill and live secure-desktop refuse (037576a)
TD-1720
- re-export rail rowTitle; keep session preset next to busy (f2f8e59)
- fix bound-turn narrowing for svelte-check (f8f67e3)
- show turn activity on rail dots (fedcaf5)
TD-1722
- Settings → API keys can set the host (7002c5f)
TD-1723
- settings pane scrolls; add a source without a key (b6a8726)
TD-1724
- send tool_choice auto when tools are present (e1bc5b7)
TD-1725
- do not collect mcp.cli into the sidecar (1c9cc26)
- packaged tstd serves the computer-use MCP (ba10b66)
TD-1726
- frozen CU child resets the onefile extract dir (c24d9b3)
TD-1727
- packaged Linux computer-use runs in-process (226c996)
TD-1728
- keep 32k computer-use inside the context window (d995bdc)
TD-1729
- send screenshots as vision parts, not 50k of text (ee74292)
TD-1730
- keep at most one image on a local VLM prompt (56a7e20)
TD-1902
- order chat text and tool folds by arrival (ec7b6c5)
TD-1903
- name the saved screenshot file in desktop_screenshot's text (4a28d21)
- count echoed reasoning in the estimate, not in calibration (b2dd055)
- speak OpenRouter's reasoning_details agent dialect (1369a19)
TD-2001
- refuse Linux CU on Wayland before any Xlib call (bd020f4)
TD-2103
- Memory pane may replace a file at the line cap (3531654)
TD-2302
- pin that crash paths never reach memory distill (c18b870)
TD-2805
- pin the capacity meter to instructions + memory + pins (71d21ee)
TD-3402
- default the real-display overlay on, matching the daemon (bb6c36a)
TD-3407
- test that the kill-switch closes the CU session tag (46973b4)
TD-3801
- pin Slack and ntfy webhook accounts in the keychain tests (cfde613)
TD-3803
- document parse_job; keep autonomy DoD and Wayland click honest (192ced8)
- parse_job fills a draft; save stays a second call (ceecdb5)
TD-3804
- wire production scheduler delivery to Slack and ntfy (fa53311)
TD-3808
- plain-English cadences, per-job time zone, readable job errors (0aaade8)
TD-3809
- fire a scheduled job now without moving its slot (7802582)
TD-3810
- edit a scheduled job without losing its receipt (d63a2ac)
TD-3811
- keep each job run and open its session (fbf5ed7)
TD-3812
- pin the preset and engine on a scheduled job (f8e9f24)
TD-3813
- skip a scheduled slot that is already hours late (2887768)
TD-3814
- retry a scheduled run that failed transiently (5e7ba53)
TD-3815
- park a scheduled run waiting for approval (73ecccd)
TD-3816
- add job templates and schedule this chat (1fb3fec)
TD-3817
- start the next job after one succeeds (183e5c8)
TD-3818
- skip a scheduled slot when a local calendar blocks that day (d06422b)
TD-3819
- a max-run stop names the limit on the cancelled state (f03a363)
- give scheduled runs a configurable time limit (12ce257)
TD-3820
- keep the SMTP password out of echoed AUTH tokens and parse errors (1ea7037)
- deliver scheduled job reports by email (4334833)
TD-3821
- render scheduled reports as newsletter HTML (e6cb7bd)
TD-4301
- run autonomy shell inside the rootless container (efc803e)
TD-4707
- pin Discord and Telegram keychain account names (769109e)
TD-4823
- keep tst-cu-mcp mypy --strict clean on overlay painters (6ad3de6)
TD-4824
- split Linux support into its own milestone (3839131)
TD-4827
- let the inspector and session rail resize freely (9ea177e)
TD-4828
- read the foreground window from the window server, hide the ring switch (aba16de)
TD-4829
- read QueuedUserMessage.display in the Grok loop (2c5c4dd)
- background computer use, Grok photos, session engine chrome (5a46386)
TD-4831
- fix review regressions and record remaining release blockers (ca78d79)
TD-4832
- backlog story + DECISIONS entry for the CU foreground return (6083b07)
- return TST Desk to the foreground when a CU turn stops (97939ff)
TD-4833
- investigate residual warnings and record follow-up plan (44c37ec)
- fix strict types and compiler warnings (0f16c5d)
TD-4834
- pyobjc in the frozen sidecar + frozen overlay re-exec (0b07df2)
TD-4835
- reap subprocesses and config files on cancel (fb483ed)
- cache keychain presence probes; invalidate on key mutations (d80bc50)
TD-4836
- the focus guard exempts system surfaces (fa8e8f1)
TD-4838
- refuse non-ASCII and empty API keys (9d971e8)
- make macOS keychain items readable by security (3b0806b)
TD-4839
- fit in-flight tool results to the tier window (56b993c)
TD-4840
- pick up a fixed or rotated API key without a restart (2a36f5d)
TD-4841
- stop revive from reinserting the audit session row (be0fe95)
TD-4842
- honour --data-dir for logs and stop on SIGTERM (6d25d17)
TD-4843
- bind daemon config and state to --data-dir (96bdd54)
TD-4844
- stop quit-distill from holding shutdown (e7eb920)
TD-4845
- leave Claude Code's global steering unread by default (9993833)
TD-4846
- close leaked test sockets and send api_key_rejected after a retry (983d65d)
TD-4847
- return the foreground window with each computer-use action (1234527)
TD-4848
- remove the port file on every clean shutdown (4c4fc90)
TD-4849
- wait for the daemon to exit on quit (9d19330)
TD-4850
- shut the daemon down gracefully on system quit (35786b9)
TD-4851
- exercise the Linux waitid path on every platform (b17fb71)
- keep a ready quit-distill and close dead transports (59fc81b)
TD-4901
- split Wayland capture and input; never drive XWayland (195b4fb)
TD-4904
- cut default CI to ubuntu; stop packaging on every main push (8e94e87)
TD-5001
- declare dirname and fileURLToPath in the node test shim (c1811cf)
- ship sideload APK 0.1.4 (3305463)
- find AppShell from the test file, not the working directory (59f7c11)
- let a wide window collapse the activity pane (30d5092)
- keep the shell below the status bar (8cf5ff7)
- open the shell at / so the router does not 404 (dfd6b70)
- keep the shell source test inside the ruff line limit (ac7d6d5)
- ship a sideload Android WebView shell (328d201)
TD-5002
- pause an interactive turn that stops making progress (63dce58)
TD-5003
- stop the turn without closing the session (cf43070)
TD-5004
- cap nested steering and skip the nested walk on the home folder (fc87f01)
TD-5005
- the phone keeps its EZER connection across launches and restarts (4beb06c)
TD-5006
- budget the workspace map from the brain tier's context window (7ce7fdd)
TD-5007
- count tool definitions and calibrate token estimates from provider usage (cf1a1ed)
TD-5008
- send max_tokens from the tier and add a per-tier extra_body (690e371)
TD-5009
- steer file changes to fs_edit/fs_write and nudge shell writes (44649e1)
TD-5010
- elide in-turn results to 70% of the budget once over it (78e3ef3)
TD-5011
- load Claude Code skills (name key, whenToUse fallback) (c7d7141)
TD-5012
- fix review findings on the verdict cap warning (cf8cf0f)
- let the worker's verdict calls turn the model's thinking off (0e161b1)
TD-5013
- fix review findings on calibration persistence and map sizing (59260f6)
- learned token ratios survive a restart and size the workspace map (e1d0c5f)
TD-5014
- use a test-range tailnet address in fixtures (0a543c7)
- satisfy the network and loopback guards (77d66f7)
- record the decision, document re-pair/self-removal/presence, steady a slow test (ae008a0)
- fix review findings (UI) (905290c)
- fix review findings in the daemon (fd3f888)
- fix review findings (Android) (d1524e9)
- regenerate protocol fixtures for the pairing messages (3d2c464)
- pair a phone with a one-time code (daemon side) (e0eb182)
- phone pairing in the UI (scan or type a code, Phones and devices) (19ae7eb)
- Android shell pairs by QR code or link and keeps its computer (4521661)
TD-5015
- declare add_machine as ClientMessage interfaces (2137f59)
- hub.finish reads the handshake's remote flag (c4325a5)
- fix review findings (dial host check, remote self-removal scrub, lane invariant, parked links, re-pair lanes, unreachable timing) (69a0e7f)
- fixtures, DECISIONS entry and docs (406a240)
- tst machines [add|remove] (c264adb)
- the daemon hub: paired computers, control links and lanes (19f6712)
- protocol, machine identity, peer kinds and bridged ids (eff21cf)
- fix review findings on remote-session UI (bf2bbdb)
- Settings > Computers, Copy link, and the phone's pair note (0cd2da4)
- rail sections per computer (06bd9d1)
- gate local-only effects on bridged session ids (254c22f)
- machines store and pure helpers (086efda)
- machine protocol types, hello features and bridged-id gate (9275178)
- refuse ':' in read_text session ids; Android 0.1.7 (a0789c4)
TD-5016
- a cancelled store write keeps the lock until its thread lands (92203dd)
TD-5019
- phone APK 0.1.8 bundles the session-survival UI (b06e7d1)
TD-5020
- closing windows in any order stays in the tray (378a617)
TD-5021
- read the supervision socket so Quit reaches tstd (9ab264b)
- keep tstd stderr and the release host's lifecycle log (b67dde7)
TD-5023
- a drain never holds shutdown or undoes a release; hold every turn start (5f0b45f)
TD-5024
- a second launch shows the running app (0eda225)
TD-5026
- open a file picker for the WebView composer's paperclip (dfedf2c)
TD-5142
- send one system message per request; don't retry template errors (0befd81)
TD-5143
- a resume keeps a charter run's shell allowlist and caps (34d972b)
- a live move rebinds the delegate runtime's prompt assembler (d0c79df)
- the overflow-retry test follows the fit's real target (9dc914e)
- pin format_bytes tie vectors on the Python side (7030fad)
- hub refusals of a client verb say which verb they answer (d666049)
- chunk reads and the leftover sweep only reach known sessions (e992f7a)
- a live move rebinds every tool to the new project (98e77a6)
- a cancelled send either indexes and announces, or neither (c6bda53)
- send_file re-checks paths with the dispatcher's own guard (7cc33c8)
- sweep sent-file crash leftovers when the store first loads a session (f15a941)
- an OSError while checking room is disk_full, never the data dir (081844c)
- drop bidi controls from sent file names (step 2b) (183eaf6)
- the file-name rule stays within 120 bytes after a late device prefix (0905118)
- docs for sending files to the chat (18ce839)
- the send_file tool, Class A, wired into every session (a488ad9)
- keep sent-file copies and serve them in chunks (668203b)
- guard every element of a list-valued path field (29bd426)
- document the chunk verb and pin the phone's own-session read (39ecfd7)
- protocol contract for sent files (a973de3)
TD-5144
- a download forgets its leftover requests once every byte is in (2f11529)
- a stall that waits for the other computer names it (d7aa491)
- a computer's name on the card reads exactly as typed (4607c27)
- a finished download forgets its leftover requests (11868e4)
- a machine label that starts the card's sentence starts with a capital (70c2d1f)
- a bridged download that stalls carries on when its computer is back (62cf081)
- an error is a download's only when it answers a chunk request (a9cb963)
- a stopped window's replies never touch the next one (a723c30)
- say why macOS free space ignores APFS purgeable space (3fb599a)
- received-file calls wait for their id's lock off the runtime (246f160)
- a tool fold on a finished row never shimmers (2cb2540)
- an error can say which client message it answers (26f98d9)
- a moved download is failed with Retry, not gone (4acb8b0)
- a bad key on Open, Install or Save shows the mapped copy (40ca4b1)
- a download that goes gone mid-way keeps its part removable (ebaac5d)
- an old hub's refusal names the hub, not the sender (cd64de0)
- claim every reply of a refused window, not just the first (93f2e83)
- fall back to ~/Downloads, and know it at begin (047abff)
- received_file_begin refuses a download the disk cannot hold (c158ef6)
- claim the hub's machine_unreachable and carry on when it is back (c01d5c6)
- serialize received-file calls per artifact id (69da7ae)
- a paused download hands its slot on (038b285)
- no endless "Sending..." when a restart cuts a send_file call (bbe20c5)
- a received copy counts only while it is still that file (24c0952)
- desktop Open is an allowlist, not a program denylist (9cf0baa)
- formatBytes rounds an exact tie to even, like the daemon (2056a12)
- find a local sent file by its recorded name, not by counting (e4556fc)
- hand the opener a plain path, not \?, on Windows (339d8cd)
- send_file cards render under the call (one proxy per tool block) (8093f16)
- Open refuses every kind outside the desktop allowlist (c2c1bda)
- drop bidi controls from received file names (2f72042)
- shell commands for sent and received files (011f968)
- file cards in the chat and the artifacts pane (d577642)
- pull engine, file sinks and card copy for sent files (709f1d0)
TD-5145
- name the checked bytes data.apk before the APK parse (2bb9a9b)
- an APK parse that throws gives no APK line, not a crash (ac675d9)
- write the bidi controls as escapes, and scan for raw ones (ce6a7ff)
- record the APK info in the same meta write that marks it verified (2d3d22d)
- save the meta before naming the verified file (b133588)
- drop bidi controls from received file names (cc3e1ff)
- a failed APK-info write no longer crashes the file worker (95bf4e4)
- phone 0.1.9 downloads, opens and installs files the agent sent (ae30507)
TD-5146
- stream the work check and memory distill, think less, never resend a timeout (c0796cf)
Other
- Release 0.2.0: bump every component version (7e7e587)
- TD-5143..5145: record the review decisions; CI runs for android changes (3ee9f93)
- TD-5016..5024: DECISIONS entries, deploy runbook (drain, then Quit), revive-images fixture closes its turn (49fea27)
- core: session survival across restarts (TD-5018, TD-5021, TD-5022, TD-5023) (77e75d8)
- TD-5019/TD-5023 (ui): review fixes for drafts, Continue and drain refusals (75895fb)
- TD-5021, TD-5024 review fixes: logs never stop a launch; Windows doc (6c722dd)
- TD-5018/TD-5019/TD-5023 (ui): survive a restart in the chat pane (b6e93bd)
- TD-5016, TD-5017: saves never collide; sessions with a picture load again (83c73e7)
- TD-5009, TD-5011: fix review findings on the write nudge and skill loading (8532a9f)
- TD-5010, TD-5008, TD-5007: fix review findings on elision, output cap and extra_body (2669cb6)
- Let non-macOS builds compile the computer-use agent's macOS-only items (31cc75a)
- Format the four files ruff format --check flags (768743d)
- Backlog: count TD-4847 in the summary table (e21de97)
- Backlog: count TD-4846 in the summary table (fefc0da)
- chore: bump @tauri-apps/plugin-notification to 2.4 (6349fca)
- Snapshot of local work Aug 25 – Sep 3 (unpushed until now) (82b4ef4)
- chore: document cloud dev environment setup in AGENTS.md (6ef93ba)
Android phone app
TST-Desk-0.2.0.apk (versionName 0.2.0, versionCode 12), built from the same commit.
SHA-256 1b7fe5f501aae51ccce3433a9d096a30221bae1a68b196d5f6107aac6c68800a.
It is not Play-signed, so Android shows the usual unknown-source warning when you install it.