René's URL Explorer Experiment


Title: Add a "jump to latest" (scroll-to-bottom) button to the chat transcript · Issue #46 · modelstudioai/openwork · GitHub

Open Graph Title: Add a "jump to latest" (scroll-to-bottom) button to the chat transcript · Issue #46 · modelstudioai/openwork

X Title: Add a "jump to latest" (scroll-to-bottom) button to the chat transcript · Issue #46 · modelstudioai/openwork

Description: Problem or Motivation Every comparable AI desktop chat surface — Claude Code Desktop, ChatGPT desktop, Codex desktop — shows a floating "jump to latest" / scroll-to-bottom affordance when you scroll up through a long conversation, so you...

Open Graph Description: Problem or Motivation Every comparable AI desktop chat surface — Claude Code Desktop, ChatGPT desktop, Codex desktop — shows a floating "jump to latest" / scroll-to-bottom affordance when you scrol...

X Description: Problem or Motivation Every comparable AI desktop chat surface — Claude Code Desktop, ChatGPT desktop, Codex desktop — shows a floating "jump to latest" / scroll-to-bottom affordance when...

Opengraph URL: https://github.com/modelstudioai/openwork/issues/46

X: @github

direct link

Domain: github.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Add a \"jump to latest\" (scroll-to-bottom) button to the chat transcript","articleBody":"## Problem or Motivation\n\nEvery comparable AI desktop chat surface — Claude Code Desktop, ChatGPT desktop, Codex desktop — shows a floating **\"jump to latest\" / scroll-to-bottom** affordance when you scroll up through a long conversation, so you can return to the newest message in one click. OpenWork has no such control.\n\nToday OpenWork's transcript (`ChatDisplay`) already tracks scroll position for sticky-bottom auto-scroll (`handleScroll` computes `distanceFromBottom`, un-sticks when you scroll up, re-sticks at the bottom), but there is **no visible way to jump back to the latest message**: once you scroll up to read history you must manually drag all the way back down, and during active streaming that means fighting the growing content. The state needed to drive the button already exists — only the UI was missing.\n\n## Proposed Solution\n\nRender a small floating circular button (a down-chevron) centered near the bottom of the transcript, shown **only when the user has scrolled well away from the bottom** (200px hysteresis so it doesn't flicker near the end). Clicking it:\n\n- re-enables sticky-bottom auto-scroll (`isStickToBottomRef = true`),\n- smooth-scrolls the transcript to the latest message,\n- hides itself again once back at the bottom.\n\nIt fades in/out with the existing `motion`/`AnimatePresence` primitives already used throughout `ChatDisplay`, and hides on session switch.\n\n**Frontend-only.** No backend / qwen-code change. The button reads/derives from existing renderer scroll state (`scrollViewportRef`, `distanceFromBottom`, `messagesEndRef.scrollIntoView`). One new i18n key `chat.scrollToBottom` (accessible label / tooltip) is added to all six locales.\n\n## Feasibility\n\n- **Classification: pure frontend — candidate.** The scroll geometry, the sticky-bottom ref, and the scroll anchor all already live in `apps/electron/src/renderer/components/app-shell/ChatDisplay.tsx`. Adding a button that flips visibility on `distanceFromBottom` and calls `scrollIntoView` requires no main-process or backend involvement.\n- Confirmed genuinely missing: the `ChevronDown` import in `ChatDisplay` is used only for a details expander, not for scrolling; there is no floating jump control anywhere in the transcript.\n\n## Acceptance Criteria (what the CDP assertion checks)\n\nA new e2e CDP assertion (`e2e/assertions/scroll-to-bottom.assert.ts`) drives the real built app end-to-end:\n\n1. **Seeds** a 40-message session on disk (backend-independent — a plain `session.jsonl` under the isolated profile) and opens it from the sidebar.\n2. The transcript renders and **overflows** the viewport (proof the real conversation loaded).\n3. On open the transcript is at the bottom and the button is **hidden**.\n4. Scrolling to the top makes the button **appear**.\n5. Clicking the button returns the transcript to the bottom (`distanceFromBottom \u003c 40`) and the button **disappears**.\n\nThis required a small, reusable harness addition: an optional `seed(profileDirs)` hook (`e2e/app.ts` + `e2e/runner.ts`) that lets an assertion pre-seed on-disk session state before the app launches — unblocking this and future transcript-dependent assertions.\n\nPart of the autonomous desktop-feature loop (`loop-bot`).","author":{"url":"https://github.com/DragonnZhang","@type":"Person","name":"DragonnZhang"},"datePublished":"2026-07-02T13:41:25.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/46/openwork/issues/46"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:a02b7c3e-da41-c52f-9f03-a44d2df8e260
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idC46C:1ECA58:567373:740530:6A529AB1
html-safe-nonced4bdaed6aa23bd8f1bbfb792ace916f9a1e2e67d81b5ea7b91c4d5f0e75b3d33
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDNDZDOjFFQ0E1ODo1NjczNzM6NzQwNTMwOjZBNTI5QUIxIiwidmlzaXRvcl9pZCI6IjIzNDI4NDcwMzkzNDQ4NzIxNyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9
visitor-hmac4d9f810c3c0efa032445dd6f63001c5bba439aff730de2a8855002d4c3f293cb
hovercard-subject-tagissue:4794968690
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/modelstudioai/openwork/46/issue_layout
twitter:imagehttps://opengraph.githubassets.com/dbb3b77b54995e7c1c81951f614a6853c6d95ba5e5a258df7b318b44b2f6759a/modelstudioai/openwork/issues/46
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/dbb3b77b54995e7c1c81951f614a6853c6d95ba5e5a258df7b318b44b2f6759a/modelstudioai/openwork/issues/46
og:image:altProblem or Motivation Every comparable AI desktop chat surface — Claude Code Desktop, ChatGPT desktop, Codex desktop — shows a floating "jump to latest" / scroll-to-bottom affordance when you scrol...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernameDragonnZhang
hostnamegithub.com
expected-hostnamegithub.com
Noneb9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb
turbo-cache-controlno-preview
go-importgithub.com/modelstudioai/openwork git https://github.com/modelstudioai/openwork.git
octolytics-dimension-user_id283556804
octolytics-dimension-user_loginmodelstudioai
octolytics-dimension-repository_id1256697754
octolytics-dimension-repository_nwomodelstudioai/openwork
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id1256697754
octolytics-dimension-repository_network_root_nwomodelstudioai/openwork
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release07a982c1d40157c619b364352b704c3ce66bb332
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/modelstudioai/openwork/issues/46#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmodelstudioai%2Fopenwork%2Fissues%2F46
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fmodelstudioai%2Fopenwork%2Fissues%2F46
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=modelstudioai%2Fopenwork
Reloadhttps://github.com/modelstudioai/openwork/issues/46
Reloadhttps://github.com/modelstudioai/openwork/issues/46
Reloadhttps://github.com/modelstudioai/openwork/issues/46
Please reload this pagehttps://github.com/modelstudioai/openwork/issues/46
modelstudioai https://github.com/modelstudioai
openworkhttps://github.com/modelstudioai/openwork
Notifications https://github.com/login?return_to=%2Fmodelstudioai%2Fopenwork
Fork 3 https://github.com/login?return_to=%2Fmodelstudioai%2Fopenwork
Star 11 https://github.com/login?return_to=%2Fmodelstudioai%2Fopenwork
Code https://github.com/modelstudioai/openwork
Issues 14 https://github.com/modelstudioai/openwork/issues
Pull requests 12 https://github.com/modelstudioai/openwork/pulls
Actions https://github.com/modelstudioai/openwork/actions
Projects https://github.com/modelstudioai/openwork/projects
Security and quality 0 https://github.com/modelstudioai/openwork/security
Insights https://github.com/modelstudioai/openwork/pulse
Code https://github.com/modelstudioai/openwork
Issues https://github.com/modelstudioai/openwork/issues
Pull requests https://github.com/modelstudioai/openwork/pulls
Actions https://github.com/modelstudioai/openwork/actions
Projects https://github.com/modelstudioai/openwork/projects
Security and quality https://github.com/modelstudioai/openwork/security
Insights https://github.com/modelstudioai/openwork/pulse
#47https://github.com/modelstudioai/openwork/pull/47
Add a "jump to latest" (scroll-to-bottom) button to the chat transcripthttps://github.com/modelstudioai/openwork/issues/46#top
#47https://github.com/modelstudioai/openwork/pull/47
enhancementNew feature or requesthttps://github.com/modelstudioai/openwork/issues?q=state%3Aopen%20label%3A%22enhancement%22
loop-bothttps://github.com/modelstudioai/openwork/issues?q=state%3Aopen%20label%3A%22loop-bot%22
https://github.com/DragonnZhang
DragonnZhanghttps://github.com/DragonnZhang
on Jul 2, 2026https://github.com/modelstudioai/openwork/issues/46#issue-4794968690
enhancementNew feature or requesthttps://github.com/modelstudioai/openwork/issues?q=state%3Aopen%20label%3A%22enhancement%22
loop-bothttps://github.com/modelstudioai/openwork/issues?q=state%3Aopen%20label%3A%22loop-bot%22
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.