Skip to content

TST Desk tstdesk-v0.2.0

Choose a tag to compare

@github-actions github-actions released this 15 Oct 21:59
· 95 commits to main since this release
acf9c12

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.