Skip to content

Vespin 0.29.0

Choose a tag to compare

@github-actions github-actions released this 09 Nov 06:46
· 699 commits to main since this release
4c0b6d8

What's Changed

  • refactor(database): delete the unsaved description picture sweep by @charleslpan in #7362
  • feat(ui): restyle the landing in a near-black, Linear-like direction by @charleslpan in #7398
  • feat(panel): connect the Terminal and Browser panes as the agent's sandbox opens by @charleslpan in #7369
  • fix(panel): draw the + menu's terminal rows with the still terminal glyph by @charleslpan in #7429
  • feat(panel): open an archived agent in a tab of its task's column by @dastratakos in #7340
  • refactor(features): move the task client's GitHub reads onto hostedCall by @charleslpan in #7417
  • refactor(panel): read side bundles and the markdown parser through TanStack Query, off atoms by @charleslpan in #7431
  • refactor(features): ask the agent client's messages, queue, transcript pages and inbox through hostedCall by @charleslpan in #7442
  • feat(service): fire scheduled automations from Vercel Schedules by @charleslpan in #7379
  • test(database): hold the open sandboxes read to the conversations asked for by @charleslpan in #7443
  • fix(host): keep a held Inbox close with the account that held it by @charleslpan in #7444
  • refactor(host): reopen the local-agent and Mac-command gates on change by @charleslpan in #7381
  • fix(sync): send a waiting write again only as the account that asked it by @charleslpan in #7450
  • fix(features): keep an inbox write taken already under its key as taken by @charleslpan in #7452
  • refactor(panel): open every link as a tab of its own, dropping preview tabs by @dastratakos in #7441
  • docs(changelog): date 0.28.0 Nov 6 by @dastratakos in #7454
  • fix(host): wait on the task list for a terminal's sandbox to open by @charleslpan in #7448
  • refactor(service,database): let sandbox snapshots expire instead of sweeping deletes by @charleslpan in #7437
  • refactor(live): declare the automation and chapters live reads once by @charleslpan in #7456
  • fix(host): send an early-released held close only under the account that asked it by @charleslpan in #7453
  • fix(service): stop installing dependencies when an agent starts by @charleslpan in #7447
  • feat(panel): say whose Mac run_on_mac runs on in the Runs on card by @dastratakos in #7347
  • feat(panel,host,ui): add the workspace Environment settings page by @charleslpan in #7427
  • refactor(panel): hold the composer's drafts, held lines, and undo in TanStack stores, off atoms by @charleslpan in #7411
  • fix(service): answer a member's sandbox open at once while its image is prepared by @charleslpan in #7449
  • feat(panel): remove the task summary and list a task's pages in its Overview by @dastratakos in #7445
  • feat(panel,host,features,service): carry a send's Sentry trace to the service by @charleslpan in #7459
  • refactor(panel): move an agent's own page onto the router's routes by @charleslpan in #7346
  • feat(database): drop the session sandbox cleanup table by @charleslpan in #7460
  • fix(panel): hide the agents tab bar's History while it has nothing to list by @dastratakos in #7463
  • fix(panel): keep terminals, browser tabs, and toasts to the account that opened them by @charleslpan in #7434
  • refactor(features): move the task client's last non-live calls onto hostedCall by @charleslpan in #7465
  • fix(panel): focus the MCP menu's search when it reopens mid-fade by @dastratakos in #7466
  • perf(ui): measure a list's rows only where a motion can play by @charleslpan in #7467
  • feat(service): keep an agent's launch in one Sentry trace and span its costly steps by @charleslpan in #7458
  • perf(panel): follow the window's state from before its first read by @charleslpan in #7455
  • feat(features,service): sample agent start and send traces at 100% by @charleslpan in #7464
  • feat(service): settle lost agent turns on a lease read lazily by @charleslpan in #7370
  • feat(agent-runner): trace a cloud launch's startup in Sentry and record time to first token by @charleslpan in #7471
  • feat(service,features): share a cloud agent's port by public link by @charleslpan in #7473
  • refactor(features): ask the agent client's last calls through hostedCall by @charleslpan in #7469
  • refactor(host): declare each host-followed live read once, proven on hosts, memories, origins and chapters by @charleslpan in #7433
  • fix(service): hand on an agent's queue from every turn settle by @charleslpan in #7475
  • feat: make Task descriptions, Pilot, and Memory workspace experiments by @dastratakos in #7326
  • fix(panel,host): keep a terminal on its latest shell connection by @charleslpan in #7477
  • refactor(panel): route the unknown-workspace page through the router by @charleslpan in #7476
  • refactor(host): move the account asks into their own composer by @charleslpan in #7480
  • refactor(panel,desktop,web): delete the atom registry and @effect/atom-react by @charleslpan in #7478
  • refactor(host): move workspaces, GitHub and admin into their own composer by @charleslpan in #7440
  • perf(host): watch the device record instead of re-reading it every minute by @charleslpan in #7376
  • feat(service): trace the Mac mirror's tunnel and log why it closes by @charleslpan in #7483
  • refactor(service): stop a woken snapshot sandbox through one bounded check by @charleslpan in #7392
  • feat(database): delete a deleted task's or agent's conversations at once by @charleslpan in #7468
  • feat(service,runner): trace every agent start and find it by who and what by @charleslpan in #7486
  • fix(service): hand on a queue whose cut-off hand-off claim lapsed at an agent open by @charleslpan in #7481
  • test(service): assert the woken sandbox's keep-up check saw it held by @charleslpan in #7489
  • refactor(service): retire warm device runners without a sweep by @charleslpan in #7351
  • refactor(live): declare the delta, cursor and held live reads once, and delete the old machinery by @charleslpan in #7470
  • docs(host): describe the composer split, declared acts, and shared state by @charleslpan in #7491
  • fix(service): name the watch step when a mirror folder watcher errors by @charleslpan in #7492
  • chore(database): drop the conversation's deleted_at by @charleslpan in #7493
  • fix(service): annotate a retried start's spans with its agent by @charleslpan in #7494
  • feat(host,desktop,panel): trace a cloud agent's mirror and say its step on the Local tab by @charleslpan in #7495
  • refactor(host): move the task window follows onto the generic live follow by @charleslpan in #7497
  • fix(panel): keep a window's held lines and draft files across an App remount by @charleslpan in #7496
  • fix(host): refuse an act two composers claim by @charleslpan in #7499
  • refactor(host,gateway): move the account, workspace, automation, skill and integration follows onto the live follow by @charleslpan in #7498
  • test(host): assert the standing host answers the client's bootstrap by @charleslpan in #7501
  • fix(service): hide an uncollected host once its pairing lapses by @charleslpan in #7422
  • feat(service,agent-runner): keep a cloud agent's sandbox and runner warm while it's on screen by @charleslpan in #7479
  • refactor(host,gateway): move the agent window follows onto the live follow by @charleslpan in #7502
  • refactor(features): declare every remaining procedure's refusals and delete hostedProcedure by @charleslpan in #7500
  • refactor(agents): hold a native agent's wakeup wait instead of releasing it by @charleslpan in #7363
  • refactor(panel): route Home through the router and follow the host's binding from the place module by @charleslpan in #7503
  • feat(service): profile the service's kept traces with Sentry's Node profiler by @charleslpan in #7487
  • feat(panel,host,features): keep a cloud agent warm while it's on screen by @charleslpan in #7484
  • refactor(panel): declare the task's own place in the place module and fix #7503's review findings by @charleslpan in #7504
  • fix(panel): stop saying the inbox could not be read under a thread that was read by @charleslpan in #7412
  • refactor(panel): bind the task through its route in the place module by @charleslpan in #7505
  • fix(service): skip a mirror folder gone before its watch by @charleslpan in #7507
  • fix(panel): let any later navigation supersede a link's pending read, and fix #7505's narrow-room review finding by @charleslpan in #7506
  • feat(panel): route a task's section, comment, and page links through their routes by @charleslpan in #7508
  • feat(panel): route an agent's link places through their routes by @charleslpan in #7509
  • feat(panel): route every remaining link through its route and delete openPlace's switch by @charleslpan in #7510
  • fix(service): list a mirror again after skipping a folder gone before its watch by @charleslpan in #7511
  • fix(service): resend a mirror file the open could not read by @charleslpan in #7512
  • fix(service): retry a mirror file a listing could not read by @charleslpan in #7513
  • fix(service): restart no session when its workspace's experiments cannot be read by @dastratakos in #7516
  • fix(panel): let a Settings page an account experiment holds stand on its own read by @dastratakos in #7517
  • refactor(panel): classify a pressed link by its route by @charleslpan in #7514
  • fix(panel): point the offline hint at the network connection by @dastratakos in #7518
  • fix(panel): say an unreached call as the connection, not the service by @dastratakos in #7519
  • feat(web): upload the function bundles' source maps to Sentry by @charleslpan in #7521
  • feat(panel,host): share a forwarded port's link from the Forward menu by @charleslpan in #7474
  • fix(panel): keep connection words for calls that got no answer by @dastratakos in #7522
  • feat(runner): profile the cloud runner's startup and upload its source map by @charleslpan in #7523
  • feat(panel): give each agent of a task its own side-panel tabs by @dastratakos in #7446
  • fix(panel): say a pull request's failed reads once, under its title by @dastratakos in #7520
  • docs(changelog): add 0.28.0's screenshots by @dastratakos in #7461
  • fix(web): give the dispatched function bundles a Sentry debug ID by @charleslpan in #7526
  • feat(ui): lead the Mac command ask with Always allow, picked and recommended by @dastratakos in #7527
  • fix(panel): stand a review thread's chevron at a file header's inset by @dastratakos in #7525
  • fix(panel): draw a message's words before the markdown parser lands by @dastratakos in #7529
  • fix(panel): keep blank lines left in a description when its editor closes by @dastratakos in #7485
  • feat(panel): stand an Inbox item's panel on its agent's own tabs by @dastratakos in #7451
  • feat(panel): stand an agent's side-panel tabs inside its sheet, under a row of agents across the page by @dastratakos in #7472
  • feat(service,web): run Docker and sudo in cloud agent sandboxes by @dastratakos in #7488
  • feat(desktop): profile the windows on the traces Sentry keeps by @charleslpan in #7524
  • feat(panel): draw GitHub's comments in the transcript as GitHub renders them by @dastratakos in #7532
  • fix(panel): drop the answer line from an Inbox item's hover card by @dastratakos in #7534
  • fix(desktop): profile no window for a page load its trace sampled out by @charleslpan in #7536
  • chore(database): drop the agent_wakeup table by @charleslpan in #7533
  • fix(service): resend a failed launch's lost prompt on Try again by @dastratakos in #7439
  • refactor(panel): load the pull request and chapters tabs through React.lazy by @charleslpan in #7531
  • feat(panel): say a downloaded release in a toast that stands until dismissed by @dastratakos in #7482
  • feat(ui): synthesized completion sounds and player by @dastratakos in #7537
  • fix(service): key base snapshots on the image without its runner by @charleslpan in #7490
  • feat(settings,service): synced completion sound preferences by @dastratakos in #7539
  • refactor(panel): guard leaving unsaved work with the router's blocker by @charleslpan in #7545
  • fix(agent-runner): exit when line reads are refused or the config never arrives by @charleslpan in #7547
  • fix(service): push a turn's lease on its progress, not every heartbeat by @charleslpan in #7548
  • fix(database,service): claim a session by when it was minted, not its prefix by @charleslpan in #7546
  • fix(agent-runner): trace a launch without a profile where the profiler cannot load by @charleslpan in #7550
  • fix(service,web): ship and install the runner as one unit by @charleslpan in #7552
  • fix(features): read an unknown failure word as other and an unknown turn status as running by @charleslpan in #7553
  • feat(service,database): make the turn row the one record of a turn's state by @charleslpan in #7549
  • fix(service): read a stopped sandbox session's command as gone by @vespin-agent[bot] in #7544
  • refactor(features,service,database): read an agent's status from its turn row alone by @charleslpan in #7551
  • feat(features,service): carry the newest turn's record on an agent's summary by @charleslpan in #7557
  • refactor(panel): task doors navigate first, their state following the arrival by @charleslpan in #7559
  • feat(service,database): deliver each queued turn through Vercel Queues by @charleslpan in #7556
  • fix(panel): run a held move's landing only where that move lands by @charleslpan in #7560
  • feat(panel): read whether an agent works and how its turn ended from its turn record by @charleslpan in #7561
  • fix(service,host): stop the Mac mirror from waking a stopped sandbox by @charleslpan in #7562
  • fix(service,database): resume only a session the store holds from its first entry by @charleslpan in #7563
  • perf(service): read an agent's instruction lookups together by @charleslpan in #7564
  • refactor(sandbox,service): move the Vercel sandbox client into @repo/sandbox by @charleslpan in #7565
  • refactor(panel): tab doors navigate first, their tab following the arrival by @charleslpan in #7566
  • test(panel): a section's mention asks its section into view once Leave is pressed by @charleslpan in #7567
  • fix(service,database): never resume a session whose transcript mirror dropped a batch by @charleslpan in #7571
  • fix(service): keep missing automation schedules from the minute sweep by @charleslpan in #7570
  • chore(service): remove the automation schedules backfill by @charleslpan in #7572
  • perf(service): queue a warm runner's message without reading its exit by @charleslpan in #7568
  • refactor(panel): routed places' doors navigate first, their state following the arrival by @charleslpan in #7573
  • fix(service): record the Claude Code failures the service dropped by @charleslpan in #7574
  • fix(service): drop stale tags when sharing a port by @charleslpan in #7577
  • feat(service,database): open a Start through the turn queue by @charleslpan in #7569
  • refactor(sandbox,service): serve sandboxes through one Sandbox Effect service by @charleslpan in #7575
  • refactor(panel): route hooks read their exits from the place module by @charleslpan in #7581
  • fix(sandbox,service): stop an idle sandbox five minutes after its last touch by @charleslpan in #7576
  • fix(panel): keep a page's leave ask after Leave on a move that stays by @charleslpan in #7582
  • refactor(sandbox,service): delete the sandbox warm window, holds and leases by @charleslpan in #7578
  • refactor(panel): take the Board and a person's page off TasksControl by @charleslpan in #7584
  • style(service): cut slop comments in github by @vespin-agent[bot] in #7585
  • chore(database): drop agent.seen_at and sandbox_terminal_lease.held_until by @charleslpan in #7586
  • refactor(service,sandbox): find an agent's sandbox by its session's name by @charleslpan in #7583
  • fix(service): judge a runner by whether it takes its line, not its exit code by @charleslpan in #7587
  • refactor(panel): take Admin and the Automations pages off TasksControl by @charleslpan in #7588
  • fix(service): record no turn for a launch that fails with none waiting on it by @charleslpan in #7589
  • fix(service): fence a runner's posts by its launch number, not its bearer by @charleslpan in #7590
  • refactor(panel): take the Inbox off TasksControl by @charleslpan in #7591
  • refactor(panel): take the version history's doors off TasksControl by @charleslpan in #7592
  • refactor(panel): move the Settings and Admin doors in app.tsx onto the router's blocker by @charleslpan in #7593
  • refactor(database): undeclare the task's pinned_at column by @charleslpan in #7594
  • refactor(database): undeclare the integration connection's connect_verifier by @charleslpan in #7595
  • refactor(panel): move the app link doors onto the router's blocker by @charleslpan in #7596
  • style(service): cut slop comments in automations, inbox, and integrations by @charleslpan in #7598
  • refactor(service): look up a procedure's workspace through workspace-access by @charleslpan in #7599
  • chore: remove exported code nothing calls by @charleslpan in #7600
  • style(service): cut slop comments in agents, admin, and auth by @charleslpan in #7606
  • refactor(database): derive row types from the schemas that decode them by @charleslpan in #7605
  • style(desktop): drop comments about the removed call card, talk key, and IPC channels by @charleslpan in #7614
  • refactor(web): derive the rewrite types from the schema that reads the table by @charleslpan in #7610
  • style(scripts): correct comments naming removed packages, services, and calls by @charleslpan in #7616
  • refactor(service): derive types from their schemas and reuse shared ones by @charleslpan in #7615
  • style(database): correct stale names in schema and model comments by @charleslpan in #7608
  • refactor(service): drop defenses over values that are never absent by @charleslpan in #7620
  • refactor(panel): draw every settings read failure through one ReadFailed row by @charleslpan in #7597
  • refactor(service): reuse three helpers the service already declares by @charleslpan in #7627
  • refactor(panel): stop reading Inbox scopes kept before the scopes by @charleslpan in #7619
  • refactor(features): declare the message refusals once for messages and threads by @charleslpan in #7602
  • refactor(host): read a corrupt settings file as none without naming why by @charleslpan in #7603
  • refactor(credentials): derive the account snapshot from the schema it crosses as by @charleslpan in #7621
  • refactor(ui,panel): name fixed values by the constants that declare them by @charleslpan in #7631
  • refactor(wire): build the capped doubling backoff through one cappedExponential by @charleslpan in #7617
  • refactor(service): reach the sandbox PTY through a plain function, not a tag by @charleslpan in #7639
  • refactor(service,sandbox): inline three single-caller pass-throughs by @charleslpan in #7640
  • chore: remove unused face glyphs and a stale runtime-edge row by @charleslpan in #7637
  • refactor(host,desktop): pick the window's material in the host's appearance by @charleslpan in #7642
  • style(service): say which repository change holds an automation run back by @charleslpan in #7644
  • refactor(panel): stop reading side panel records kept before the rename by @charleslpan in #7646
  • refactor(features): drop the retired notice and turnUsage answer keys by @charleslpan in #7601
  • refactor(host,agent-runner,credentials): drop defenses that cannot fire by @charleslpan in #7634
  • refactor(database): read a write's transaction id through one txid module by @charleslpan in #7609
  • refactor(panel): drop catches over promises that never reject by @charleslpan in #7625
  • refactor(ui): name the composer's skill option as the wire's task skill by @charleslpan in #7626
  • refactor(anti-slop): read an ESTree node's parent off oxlint's own types by @charleslpan in #7653
  • refactor(service): keep file-local symbols out of the export list by @charleslpan in #7636
  • refactor(desktop): call a helper's and a timer's methods without optional calls by @charleslpan in #7645
  • refactor(database): declare queue and pick writes by their column types by @charleslpan in #7655
  • test(service): read the tunnel's start frame without a non-null assertion by @charleslpan in #7656
  • refactor(database): keep the withdrawn line's age with the writer that deletes it by @charleslpan in #7623
  • refactor(service): read StoreFailure from the database instead of redeclaring it by @charleslpan in #7629
  • refactor(panel): name the task's tabs in a model the fixtures can read by @charleslpan in #7635
  • refactor(ui,panel): type CSS custom properties on React's CSSProperties by @charleslpan in #7651
  • fix(host): follow a state folder made again before its removal is heard by @charleslpan in #7650
  • test(desktop): keep the desktop tests from downloading Electron on import by @charleslpan in #7660
  • refactor(features,sandbox,service): declare the commit SHA and PTY exit schemas once by @charleslpan in #7624
  • test(panel): wait on the pairing's ask rather than its reading spinner by @charleslpan in #7648
  • style(host): cut slop comments in contract, act-port, and follows by @charleslpan in #7613
  • chore: remove exported types nothing names by @charleslpan in #7604
  • refactor(panel,ui): keep file-local symbols out of the export list by @charleslpan in #7607
  • refactor(features): compare two repositories through one sameRepository by @charleslpan in #7622
  • refactor(panel,ui): drop optional chains the condition beside them rules out by @charleslpan in #7632
  • refactor(panel): stop reading main tabs kept before the rename by @charleslpan in #7633
  • refactor(host,database,desktop): keep file-local symbols out of the export list by @charleslpan in #7611
  • refactor(host): build the client's setting side effects in the act port by @charleslpan in #7638
  • refactor(features): keep file-local symbols out of the export list by @charleslpan in #7661
  • refactor(panel): move the workspace doors onto the router's blocker by @charleslpan in #7649
  • refactor(features,service,ui): read a vocabulary word through a Schema guard by @charleslpan in #7652
  • refactor(panel): list a task's agents from a module History can import by @charleslpan in #7643
  • refactor(database,wire,features): drop guards a narrowing already holds by @charleslpan in #7647
  • refactor(panel): inline two single-caller modules by @charleslpan in #7641
  • refactor(panel,ui): read an element's textContent without a fallback by @charleslpan in #7630
  • refactor(ui): untangle the menu's import cycle by @charleslpan in #7612
  • refactor(panel,ui): stop reading Tasks displays and groupings kept before the rename by @charleslpan in #7628
  • refactor(panel): declare each place's narrow way back in the place module by @charleslpan in #7663
  • refactor(ui): untangle the breadcrumbs' import cycle by @charleslpan in #7618
  • refactor: drop casts that restate the type their expression already has by @charleslpan in #7654
  • refactor(panel): move the sidebar's New task and the tab switcher onto arrive by @charleslpan in #7664
  • refactor(panel): delete route.ts, each press decision living with its surface by @charleslpan in #7665
  • refactor: spell the panel's path once, in link-home by @charleslpan in #7666
  • refactor(panel): close routed places and bring the Tasks tab forward by a router navigation by @charleslpan in #7667
  • feat(host,desktop,web): chime when your agent finishes or needs you by @dastratakos in #7541
  • feat(panel): show the sidebar's Restart pill only while the ready toast does not stand by @dastratakos in #7515
  • fix(panel): report a turn failed on a refused own API key as a refusal by @vespin-agent[bot] in #7662
  • refactor(panel): move the window's steps into places/window-steps.ts by @charleslpan in #7671
  • feat(sandbox,service): boot new agents on forks of a repository's base drive by @charleslpan in #7580
  • refactor(service,database,sandbox): keep shared ports in the database instead of a sandbox tag by @charleslpan in #7677
  • fix(service): remount a drive agent's own drive when its lapsed sandbox is recreated by @charleslpan in #7675
  • fix(features): title a shown failure's issue by its surface and code by @dastratakos in #7554
  • fix(ui,panel): never draw a stale Inbox row over a live one by @dastratakos in #7555
  • feat(panel): drop the sidebar's "N more in …" line by @dastratakos in #7679
  • fix(panel): return Back from a started task to where New task was pressed by @dastratakos in #7540
  • fix(panel,ui): rename in place with no box, the task's title bar included by @dastratakos in #7673
  • fix(panel): offer Stop on an agent still starting or awaiting its turn by @dastratakos in #7543
  • fix(panel): open a task pressed on the Board or a person's page by @dastratakos in #7685
  • fix(panel): open an agent from an Inbox item in its own tab, never beside the item by @dastratakos in #7681
  • fix(panel): keep "Drag tasks here" on a section whose tasks are all settled by @dastratakos in #7686
  • feat(panel): offer one task menu from the topbar and the sidebar row by @dastratakos in #7538
  • feat(host,desktop,web): notify when your agent finishes or needs you by @dastratakos in #7542
  • refactor(database): stop writing the attachment's saved_at stamp by @charleslpan in #7684
  • fix(panel): stand the Board or a person's page again when a task pressed there is refused by @dastratakos in #7687
  • feat(panel): stand the panel's toggle and full screen on the agent tabs' row by @dastratakos in #7688
  • refactor(panel): open a pressed tab through one door by @dastratakos in #7430
  • feat(panel): draw the Environment settings page with a key by @dastratakos in #7692
  • fix(features,panel): say a malformed credential paste is invalid, not "Try again" by @dastratakos in #7683
  • fix(panel): draw an automation agent's trail alike and name it in the ⌃Tab switcher by @dastratakos in #7678
  • refactor(panel): stop forwarding cloud agents' ports on their own by @charleslpan in #7676
  • fix(panel): say a refused start from Home on Home's own composer by @dastratakos in #7689
  • fix(panel): ask before ⇧⌘T leaves, and pass over a closed tab open again by @dastratakos in #7416
  • fix(panel): let a terminal tab's status bar wrap its words by @dastratakos in #7693
  • feat(ui,panel): keep the chosen pull request view's name in a narrow panel by @dastratakos in #7694
  • perf(service): drop the CI read check before an agent starts by @charleslpan in #7695
  • feat(agent-runner): let the first turn go without waiting on background MCP servers by @charleslpan in #7696
  • fix(panel): go Home when the open task is deleted by @dastratakos in #7691
  • fix(panel): rest the task page's panel buttons on the frame by @dastratakos in #7698
  • feat(service): refresh a repository's base drive once it falls an hour behind by @charleslpan in #7700
  • perf(service): prepare an agent's launch while its sandbox opens by @charleslpan in #7702
  • refactor(database): drop the attachment's saved_at column and its index by @charleslpan in #7701
  • fix(panel): draw a selected divider and the gap caret in the description editor by @dastratakos in #7528
  • fix(panel): open a related task's pull request in its own agent's tab by @dastratakos in #7408
  • fix(ui): remove the copper glow behind the landing's hero Inbox by @dastratakos in #7535
  • fix(panel,ui): line up the topbar's tabs, titles, hovers, and glyphs by @dastratakos in #7690
  • fix(panel): keep the forward ports menu open while its switch flips by @charleslpan in #7704
  • perf(service): carry the agent's GitHub credential from its sandbox's first write by @charleslpan in #7706
  • fix(panel,ui): stop opening a pull request on GitHub from a ⌘-click on its title by @vespin-agent[bot] in #7657
  • fix(panel,ui): ask for a follow-up, hyphenated as the noun it is by @vespin-agent[bot] in #7658
  • fix(ui,panel): draw a GitHub comment's themed picture in the window's theme by @dastratakos in #7682
  • feat(ui): stand the landing's whole screens on the page with a shadow by @dastratakos in #7680
  • feat(panel,ui): open an automation run's agent on its task, the run's path leading the task's bar by @dastratakos in #7703
  • feat(panel,settings,service): ask a new account three questions in setup by @dastratakos in #7674
  • feat(ui): draw every note's blocks in the transcript's rhythm by @dastratakos in #7697
  • perf(agent-runner,service): start the harness while the launch finishes by @charleslpan in #7705
  • feat(panel): give each forwarded port its own submenu by @charleslpan in #7715
  • fix(panel): name an expired server's toast by its provider alone by @dastratakos in #7716
  • refactor(service,database): share a port by routing straight to it by @charleslpan in #7717
  • feat(ui): flow a transcript's blocks as a note's by @dastratakos in #7708
  • fix(panel): offer Share on no other port while one is shared by @charleslpan in #7720
  • feat(service): refresh every base drive once a day on a Vercel schedule by @charleslpan in #7713
  • fix(panel): show the invite role to every manager, Admin stepped back with why by @dastratakos in #7714
  • fix(panel): hide a settled parent's sub-tasks with it in the sidebar by @dastratakos in #7718
  • feat(panel,service): say only Starting… until a runner opens the turn by @charleslpan in #7721
  • fix(features): read an unknown section icon color as no color by @dastratakos in #7719
  • feat(panel): draw every fence and table as a transcript's by @dastratakos in #7711
  • fix(panel): keep the Forward menu open on every row by @charleslpan in #7726
  • feat(panel,ui): ask a section icon's color under its glyph, and offer Change icon on a section's menu by @dastratakos in #7672
  • feat(database,service,panel): keep a workspace's cloud setup scripts in Settings by @dastratakos in #7710
  • fix(host): close the public link when forwarding turns off by @charleslpan in #7727
  • feat(service): run a workspace's cloud setup scripts as a new agent sandbox is created by @dastratakos in #7725
  • fix(ui): draw the title bar's panel and sidebar glyphs as Lucide's own by @dastratakos in #7728
  • fix(panel): start a new task's card on Agent while the Pilot experiment is on by @dastratakos in #7731
  • refactor(panel): keep the window's steps on the router's history and move along it through place-leave by @charleslpan in #7699
  • fix(sandbox): read Vercel's "Snapshot expired or deleted" answer as a gone snapshot by @dastratakos in #7712
  • fix(sandbox): close a sandbox's public ports when a resume wakes it by @charleslpan in #7732
  • fix(panel): keep Reply over a selection as it scrolls, cut at the pane's edge by @dastratakos in #7730
  • fix(panel,ui): say Drag tasks here in every empty section, and stand every section in the List by @dastratakos in #7733
  • fix(ui): keep the highlighted row of a keyed list in view by @dastratakos in #7737
  • fix(service): delete an account and its solo workspaces through Better Auth by @charleslpan in #6960
  • fix(panel): select a divider anywhere in its gap, and draw no toolbar or second caret over it by @dastratakos in #7738
  • fix(settings,panel): comment with ⇧⌘M, off macOS's Minimize All, and on the block under the pointer by @dastratakos in #7735
  • feat(panel): name the workspaces deleted with the account by @charleslpan in #6963
  • fix(panel): put task block and parent removal on the undo stack by @charleslpan in #7745
  • refactor(panel): move the account's GitHub connection to useAccountGitHub by @charleslpan in #7746
  • fix(service): delete the onboarding contact Resend keeps when an account is deleted by @dastratakos in #7457
  • fix(panel): take an Inbox thread to its end when Reply quotes into its box by @dastratakos in #7739
  • refactor(panel): read failed runs, taskless items and agents from app state by @charleslpan in #7747
  • fix(service): run each look of a held read under a span of its own by @dastratakos in #7668
  • fix(service): read no agent again on a delivery about the default branch by @dastratakos in #7669
  • fix(database): keep a show_image call's pictures in batched statements by @dastratakos in #7670
  • fix(credentials): look for the account before the Mac calls a 401 delete done by @dastratakos in #7748
  • feat(service,panel)!: remove the Pilot experiment by @charleslpan in #7734
  • refactor(panel): take delete, rename, and the description's doors off TasksControl by @charleslpan in #7749
  • fix(service,panel): name who resolved a thread once its agent posts again by @dastratakos in #7743
  • feat(panel): connect a ChatGPT plan without a notice to acknowledge by @dastratakos in #7744
  • fix(panel): put closed drafts and removed review comments on the undo stack by @charleslpan in #7752
  • refactor(panel): put section delete and move on the undo stack by @charleslpan in #7753
  • refactor(panel): move New workspace, Workspace settings, and the workspaces' read off TasksControl by @charleslpan in #7751
  • feat(database,features,service): register iPhones and send pushes through APNs by @dastratakos in #7760
  • refactor(panel): read waiting tasks and the listed inbox from app state by @charleslpan in #7763
  • fix(panel): put settings reset on the undo stack by @charleslpan in #7754
  • fix(panel): put inbox reminders and read marks on the undo stack by @charleslpan in #7756
  • fix(ui): draw every glyph Lucide draws as Lucide's own by @dastratakos in #7736
  • feat(service,web): let the iOS app sign in as the ios OAuth client by @dastratakos in #7758
  • fix(credentials): renew through the shared flight and hold the account while a refused delete looks for it by @dastratakos in #7764
  • fix(panel): put description picture adds on the undo stack and declare restore's words by @charleslpan in #7757
  • refactor(panel): take the pin and section writes and their views off TasksControl by @charleslpan in #7770
  • feat(service,host): push Inbox asks, posts, and failed runs to the phone by @dastratakos in #7771
  • fix(panel): put inbox resolve on the undo stack by @charleslpan in #7755
  • fix(service): trace a held read's first look alone by @dastratakos in #7773
  • feat(service): let a team workspace's owner delete it from Settings by @dastratakos in #7438
  • fix(panel): keep a log at its end when a line lands above its reply box by @dastratakos in #7750
  • refactor(panel): move task relation and repository writes off TasksControl by @charleslpan in #7762
  • fix(credentials): hold a refused delete's account check to the generation it began in by @dastratakos in #7780
  • fix(service): run a delta hold's last look untraced too by @dastratakos in #7778
  • fix(credentials): stop a delete whose account changed before it asks a session or a delete by @dastratakos in #7783
  • fix(panel): draw a pull request's words at GitHub's picture sizes, task gutter, and smallest heading by @dastratakos in #7759
  • refactor(panel): take the standing and settle writes off TasksControl by @charleslpan in #7779
  • fix(service): hand a workspace to an heir when its last owner deletes their account by @dastratakos in #7785
  • fix(service): delete a deleted workspace's base drives by @dastratakos in #7786
  • fix(ui): center every mark in a pill on its name by @dastratakos in #7761
  • refactor(panel): move New task's flow off TasksControl into useNewTask by @charleslpan in #7787
  • feat(panel): delete setup's team workspace on Just me while nobody joined it by @dastratakos in #7789
  • test(database): hold a sole member's claim to workspaces nobody else is in by @dastratakos in #7790
  • fix(service): discard a deleted workspace's local agents on their devices by @dastratakos in #7788
  • fix(panel): let only the undo stack build an Undo toast by @charleslpan in #7781
  • feat(host,panel): start a cloud agent's mirror from its warm call, one attempt each by @charleslpan in #7768
  • feat(panel,ui): show a page pin's whole comment on hover and open its card under the pin by @dastratakos in #7774
  • feat(service): take a relay's bearer whatever Origin the upgrade names by @dastratakos in #7775
  • fix(panel,ui): nest sub-tasks through hidden parents and offer finished sub-tasks in View options by @dastratakos in #7777
  • feat(panel,ui): pin a page comment's draft where it was started by @dastratakos in #7791
  • feat(ui,panel): draw every task row in one anatomy by @dastratakos in #7782
  • feat(panel): peek the folded sidebar from its toggle on hover by @dastratakos in #7795
  • fix(panel): one group header across the sidebar by @dastratakos in #7796
  • feat(panel): the Inbox head in one row by @dastratakos in #7799
  • feat(panel): compact sidebar top by @dastratakos in #7797
  • fix(panel): keep New task at the sidebar's head before a workspace is read by @dastratakos in #7801
  • fix(service,database): keep a running turn's sandbox up from the minute sweep by @dastratakos in #7792
  • fix(service,features): name a turn the sweep failed, and log a runner silent past the idle window by @dastratakos in #7769
  • feat(panel,ui): one mark plus the time on sidebar rows by @dastratakos in #7798
  • feat(ui,panel): make the PR header's two rows one consistent set of controls by @dastratakos in #7740
  • feat(panel): delete setup's team workspace at Finish, asking first where someone joined by @dastratakos in #7803
  • fix(service): keep a deleted account's tasks in shared workspaces by @dastratakos in #7802
  • feat(database,service,panel): count a question as its agent's turn once you follow up by @dastratakos in #7794
  • feat(panel): My tasks as a scope switcher by @dastratakos in #7804
  • fix(panel): hold setup's Finish until the team workspace's members are read by @dastratakos in #7805
  • feat(panel,ui): automatic repository grouping and a By progress view by @dastratakos in #7806
  • feat(database,service): keep a former member assigned to their tasks by @dastratakos in #7807
  • fix(panel): line up a wrapped + Reviewer or + Label with the PR header's edge by @dastratakos in #7811
  • style(panel): cut slop comments in the Settings Workspace page by @vespin-agent[bot] in #7812
  • feat(ui,panel): show a deleted account as a grayed-out "Deleted account" by @dastratakos in #7810
  • fix(panel): draw the PR tab's section headings on the page's ground by @dastratakos in #7814
  • feat(mobile): scaffold the Expo app and its CI by @dastratakos in #7766
  • fix(service): keep a task open while any pull request an agent opened is open by @dastratakos in #7767
  • fix(panel): open the repository menu from the task path and a row's menu by @dastratakos in #7815
  • feat(panel,ui): draw an agent's row in a task row's anatomy and line up a person's page by @dastratakos in #7816
  • fix(panel,ui): keep every task under a hidden settled parent out of the sidebar by @dastratakos in #7818
  • feat(ui,panel): split the composer's pull request bar when an agent opened several by @dastratakos in #7813
  • fix(panel): draw a tab's other task as a breadcrumb crumb, whole where it fits by @dastratakos in #7808
  • feat(ui): wrap a chip in running words, and fade one on one line, never an ellipsis by @dastratakos in #7817
  • fix(ui): show a hover card's name whole rather than clamped to two lines by @dastratakos in #7809
  • refactor(ui): simplify the sidebar's homing walk by @dastratakos in #7819
  • chore(release): bump the desktop to 0.29.0 and write its changelog by @dastratakos in #7820
  • refactor(database,service): read every agent pull request from agent_pull_request by @dastratakos in #7821
  • docs(changelog): add the changes merged since to 0.29.0 by @dastratakos in #7823

Full Changelog: v0.28.0...v0.29.0