Repository navigation
Releases: pupontech/splashtop-unified-launcher
Release list
v0.3.9-test — refresh no longer timer-throttled; mid-walk Refresh joins; sign-in popups open
Testing prerelease for owner live retest. Source: branch feat/live-account-browser at commit c2a4c9c.
Addresses the v0.3.4 review ("faster-refresh"): why refresh was still slow, plus the
correctness bugs found by disassembling the shipped 0.3.4 DLL.
Refresh speed
- Account consoles now run with
--disable-background-timer-throttling,
--disable-renderer-backgrounding,--disable-backgrounding-occluded-windows
and--disable-features=CalculateNativeWinOcclusion. Opening the unified list
(a second window that usually covers the console panes) no longer makes Chromium
treat the consoles as hidden and clamp every page-side timer to >=1s. Each account
keeps its own isolated user-data folder; only the engine switches are shared. - The walk's repaint wait is now a
MutationObserverinstalled before the action runs,
with one bounded fallback for a list that never repaints, instead of a 40ms poll that
an occluded page turned into roughly a second per step. - A manual Refresh issued while the automatic walk is still running now joins that
walk (exact generation and document) and waits for its final message, instead of
queueing behind the console lock, issuing a redundant second walk, and reporting a
meaningless "read in 40ms". Console-lock contention is reported honestly
("another read is still running") rather than as a read failure.
Correctness
- Web sign-in (SSO/MFA) popups now open in the account's own isolated browser profile.
They were silently refused before because the pane passed a field that was always
null. Fixed, and the window is now shown before its WebView2 controller is created
(the previous order could hang the app) with a bounded initialization. - Connect locates the selected computer again by identity in its owning console,
following the pager or the virtual-scroll window, and refuses a changed, duplicated
or no-longer-rendered target without clicking. - A scrolled read can be reported complete without a console-reported total once the
walk reaches a stable physical bottom.
Runtime proof (GitHub Actions windows-latest, two isolated environments)
Run 38558014376 on c2a4c9c, all three workflows green. Evidence file attached.
| Proof | Result |
|---|---|
| Minimized host, 240-row virtualised console | 240/240 rows, Complete, scrolled, walk 299 / 289 ms (wall 698 / 688 ms), window stayed minimized |
| Refresh issued mid-walk | Complete, exactly one walk per navigation |
| Popup | opens and inherits the account's own user-data folder |
| Connect locator | later-page target clicked; changed identity, cross-page duplicate and mid-locate navigation all refused with zero clicks |
Still open from the review
- The fixed ~350 ms post-navigation first-attempt delay was not replaced by a
page-side grid-readiness signal (reduced from the 0.3.4 ladder, but still a constant). collect()still re-scans rows it has already seen while scrolling.
This is a testing prerelease, not production-ready. Owner live retest on Windows
is required before any release decision.
v0.3.8-test - bounded account inspection and unified refresh outcomes
v0.3.8-test - bounded account inspection and unified refresh outcomes
This is a Windows testing prerelease, not a production release. It packages the two-account Account Browser from source commit 920545196c7868907992ff83473fd6b889b9acf5.
Changes since v0.3.7-test
- Inspect consoles is bounded per account pane. A hung read times out; no second inspection starts while the original script remains outstanding; page navigation invalidates the result; late failures do not expose exception details.
- Refresh state is classified once and consistently from the account pane through the unified window. Partial, unavailable, and reload-required remain distinct; incomplete or cached inventory still cannot authorize Connect.
- Corrected the Windows smoke assertion to expect the existing fixed refusal message on an untrusted top-level origin. The production trusted-origin guard was not weakened.
Verification
- Local Release tests: 241 passed, 0 failed, 0 skipped across seven test projects.
- Release WPF build: 0 warnings, 0 errors.
- All three push workflows passed on the exact source commit:
- Account Browser Windows runtime/package: run 37752581499
- Core CI: run 37752581495
- Windows Prototype CI and ZIP: run 37752581749
- The Account Browser workflow ran two independent synthetic WebView2 environments using Microsoft Evergreen Runtime
154.0.4258.62. Both passed profile isolation, connection-handoff safeguards, inventory fixtures, pagination, virtual scrolling, and completeness checks. - The ZIP contains 411 members; all 410 non-manifest files match the embedded SHA-256 manifest. The package records the exact source commit.
- ZIP SHA-256:
a843c0ed9e9b5b7a86c775a878cd06f783929b42856044009e701939c20090f4.
How to test
Download the ZIP, extract the entire archive into a writable folder, and run START.bat. Microsoft WebView2 Evergreen Runtime and the official Splashtop Business app are prerequisites. Sign into each account normally, including any MFA/SSO/device verification, then compare the unified inventory with each official console.
Limits
The hosted tests use synthetic fixtures, not live Splashtop accounts. They do not prove owner sign-in/MFA, live-console DOM compatibility, every account size, or a real remote-session outcome. The inventory cache remains JSON, and this remains a test prototype. The open PR is not merged. Do not use it as production-ready software.
v0.3.7-test — read long lists fully when the page root also scrolls
v0.3.7-test — read long lists fully when the page root also scrolls
Fixes the follow-up report on v0.3.6-test: list rows were recognized but the walk stopped early (about one screen), so the merged list looked short.
Root cause
The reader only scrolled when exactly one scrollable container surrounded the table and never considered the document root. The live console has two scrollable containers, so the walk was skipped and the read stayed partial.
Changes
- Walks the nearest eligible scroll ancestor and probes outward: a container that actually repaints the row window owns the walk; the document root is now a candidate too. A failed probe restores any container it moved.
- Bounded per-candidate probing (six candidates, existing per-step and overall deadlines) preserves the refresh budget.
- Row identity for de-duplication no longer includes presence text or Connect-enabled state, so a console that rewrites indicators during scrolling cannot fabricate duplicate computer records.
- Refresh outcomes are now classified honestly: a partial recognized read reports "partial read — completeness not proven; Connect disabled" instead of "failed or interrupted"; unavailable and reload-required stay distinct.
- Inspect consoles adds capped structural scroll ancestry (depth, tag, overflow, heights, document-root flag) — no ids, classes, attributes or content.
Verification
Source: deae440957f7bf4e16b4a0dc052561124b45ccae.
All three exact-commit push workflows passed. Windows runtime/package: https://github.com/pupontech/splashtop-unified-launcher/actions/runs/37483066319
Both independent hosted Windows WebView2 environments passed every prior assertion plus the new gates: nested scroll ownership reconciled, and status changes during the walk cannot duplicate rows.
Parent-verified Chromium matrix (six fixtures, exact generated scripts): inner scroller, outer page scroller and document root each read 48/48 rows and reconcile the stated total; a table with no scrollable ancestor stays 16/48 incomplete; a fixture that rewrites presence and Connect state on scroll reads 16 rows with no fabricated duplicates. 234 local unit tests pass (Extractor 71) and the Release WPF build has zero warnings/errors.
Retry
Close the old app, extract this ZIP into a fresh folder, run START.bat, then use Refresh from consoles. Do not keep logging in.
If an account still fails, use Inspect consoles and send its output — it now shows the scroll ancestry so I can tell which container the console actually uses. A recognized list may still report partial when the console never states a confirmed total; that is deliberate and cannot authorize Connect.
Limits
A screenshot/console observation is not captured DOM, and agents still do not access live accounts or run real remote sessions. Two-account unsigned testing prototype; JSON cache, not SQLite.
Integrity
SplashtopUnified-v0.3.7-test-win-x64.zip — 65842743 bytes.
SHA-256: d88ff509364de4af16d4ed83b0658da56fe7a16fb04e2a3db454c4dd3a67851a.
v0.3.6-test — fix unavailable signed-in computer lists
v0.3.6-test — fix signed-in consoles showing an unavailable unified list
Fixes the reproduced header-recognition defect reported against v0.3.5-test: the live screenshot shows Computer Name, while the old reader required Name. In a trusted-origin replay of the exact old script, changing only that label changed five visible synthetic rows into zero rows / Unavailable. The corrected script accepts both exact labels.
Changes
- Uses unique semantic header indexes for Computer Name/Name, Device Name and Group; Notes is optional. Blank, reordered and decorative columns no longer shift the fields.
- Extraction and Connect use direct inventory rows/cells, excluding nested decorative rows. An independent review's action-index finding was reproduced and fixed before this release.
- Preserves unique selected-row identity and unique visible Connect-control checks; refuses ambiguous headers/tables and changed targets. No guessed icon actions or private APIs.
- Unknown layout messages explicitly distinguish a recognition failure from a recognized sign-in page.
- Inspect consoles now includes capped structural header tokens/indexes/tags/spans and row/cell counts. Unknown headings become
other; no arbitrary headings, row values, HTML, cookies, tokens or URLs are exported. - Adds actual Windows WebView2 regression fixtures and eight required header/action evidence gates, alongside all prior isolation, status, pagination and virtual-scroll proofs.
Verification
Source: 89fa763855d29f77e1ed0c704cd75e3db589c89e.
All three exact-commit push workflows passed. Windows runtime/package: https://github.com/pupontech/splashtop-unified-launcher/actions/runs/37474302940
Both independent hosted Windows WebView2 environments passed every original smoke assertion and all eight new header/action checks, including correct second-target indexing despite a same-width nested decorative row. Parent verified a seven-case Chromium mapping/action/privacy matrix and the original label RED/GREEN reproduction. Local unit suites: 228 passed; Release WPF build: zero warnings/errors.
The CI ZIP has 411 independently verified members with full-SHA provenance. This release is a byte-identical copy of the final CI ZIP, not the earlier superseded candidate.
Retry
Close the old app, extract this entire ZIP to a fresh folder, and run START.bat. Existing per-user account profiles are reused; do not erase them or repeatedly log in unless the actual console requests it. Open both My Computers lists and refresh the unified list. Compare both account row counts to their own consoles. If still unavailable or missing rows, send the updated Inspect consoles output rather than account data or browser profiles.
Remaining limits
This fixes the demonstrated label/mapping defects, but a screenshot is not captured DOM and agents did not access the owner's live accounts or run actual remote sessions. Completeness still needs reconciled supported evidence; recognized rows can be shown as incomplete, with Connect disabled, if the live console provides no supported total/pager or its layout is ambiguous. No inferred blue/gray presence or arbitrary bare-toolbar count parsing. Two-account unsigned testing prototype, not production-ready; JSON cache, not SQLite. Official WebView2 Runtime and official Business client are separate prerequisites. Real target/session outcome remains owner-tested.
Integrity
SplashtopUnified-v0.3.6-test-win-x64.zip — 65839997 bytes.
SHA-256: c9338f4b51bc2876be0edc881aab8dbbb80a6854947e3c46d90ee07a382981be.
Includes checksum sidecar and sanitized Windows runtime/member evidence. Existing versions/tags are preserved.
v0.3.5-test — unified GUI fixes and startup cache
v0.3.5-test — unified GUI fixes and cache prototype
Windows x64 testing prerelease, not production-ready. Extract the complete ZIP and run START.bat as a standard user. The official WebView2 Evergreen Runtime is required; install the official Splashtop Business app for native remote sessions.
Changes since v0.3.4-test
- Historical startup inventory cache with per-account last-good snapshot preservation, atomic Windows replacement/concurrent access, honest cached/stale labels and a five-minute action freshness bound. JSON cache, not SQLite. Notes and free-form diagnostics are omitted from new cache writes; inventory names/groups remain sensitive plaintext metadata.
- Current-request/document correlation and page-lock ownership; manual refresh can join its matching in-flight read. Unknown completion requires Reload rather than overlapping walks.
- Immutable selected-computer revalidation around connection prompts. Cached, failed, incomplete, ambiguous or stale inventory cannot authorize unified Connect. Only recognized current chooser options are offered.
- Native handoff requires trusted official HTTPS origin and verified user initiation or explicit host confirmation; page-forged arm messages are not authorization.
- Preserves exact row multiplicity during verified pagination, refuses false completeness for ambiguous virtual duplicates, and fixes overlapping short-viewport repaint detection without unconditional delays or weakened guards.
- Repairs synthetic virtual fixtures and smoke-result decoding, strengthens runtime assertions and counters-only failure diagnostics, and replaces stale CSV/Core-only instructions with current prototype usage and owner acceptance steps. GitHub README/About reflect the testing scope.
Verification
Exact source commit: 1997f63f787ed6b26c4a38dc59e504bc73400d6c.
- Parent local verification: 226 unit tests passed across seven projects; Release WPF cross-build passed with zero warnings/errors.
- All three push workflows passed on the exact source commit. Account Browser runtime/package run: https://github.com/pupontech/splashtop-unified-launcher/actions/runs/37467842245
- Hosted Windows actual Evergreen WebView2 smoke passed in two independent environments, each exercising two isolated profiles, cookies/local/session storage and persistence, native handoff guards, synthetic inventory/status/chooser and bounded pagination/virtual walks. Complete 18/240/24-row fixtures and incomplete duplicate/slow-repaint cases are required, not inferred.
- Independently verified downloaded CI ZIP integrity, full source provenance, all 411 members and both Windows smoke results. The release ZIP is a byte-identical copy of that CI artifact, not a rebuild. Downloaded release bytes are checked against the CI artifact before handoff.
Limits / owner testing
Synthetic local fixtures are NOT captured live Splashtop DOM. Owner still needs to test real login/MFA, current console compatibility and full inventory counts, actual foreground dialogs/cached-startup interactions, and the official client's real session target/outcome. Agents did not access live accounts or dispatch to the installed client. Two-account prototype only; no arbitrary-N support or background monitoring. Unknown status is not inferred from colors, and cached status is not live presence. Unsigned prerelease; follow your organization's SmartScreen policy. Legal/automation clearance remains unresolved.
Integrity
ZIP: SplashtopUnified-v0.3.5-test-win-x64.zip
Bytes: 65834538
SHA-256: bbbf1314d78d86b6c047595d7fd0fb9b83ac84bd4e669879a8f1d2e8ec2815a8
The .sha256 sidecar names the versioned ZIP; the separate runtime-evidence JSON includes source commit, member hashes and sanitized synthetic Windows results. Existing tags/assets are unchanged.
v0.3.4-test — much faster Refresh from consoles
Speed fix for the slow refresh you reported. Measured on real Windows WebView2 (CI run 37313281436, commit 38e2b60):
- A page load now triggers exactly ONE console walk. It used to trigger five, each of which re-clicked through every page of the list - that alone was most of the wait.
- Page turns and scroll steps now wait for the list to actually repaint (40 ms poll) instead of sleeping a fixed interval. A three-page console walks in 307 ms.
- The 240-row virtualised fixture reads 240/240 rows in 7.2 s and reports complete, where the old fixed-interval scroll walk plus five overlapping walks took roughly 35 s and could publish a partial list.
- Accounts are now read in parallel, so two accounts cost the slower one rather than the sum.
- The view rebuilds once per burst instead of once per message.
- Walking is single-flight both in the page and on the host: a refresh can no longer stack on an in-flight read and fight it for the same scroll position (that bug produced partial lists such as 15 rows).
Completeness now keys on the strongest evidence: collecting exactly the number of unique rows the console itself states is treated as complete, instead of requiring the scroll to reach the literal bottom, because overlapping windows can finish a list before the final step. A missing total still means incomplete.
The per-account line now reports what each read cost (rows, pages, milliseconds and walk mode), and the summary line reports how many rows are online.
Verification: Windows CI 37313281436 passed with the full existing suite plus new proofs - exactly one walk per page load, three pages visited on the paged fixture, 240/240 rows complete on the long virtualised fixture, and wall-clock budgets enforced so a refresh regression fails the build. 41 extractor/chooser validator tests, 23 handoff tests, isolation, chooser, credential-saving and handoff proofs all green. ZIP member hashes, provenance and byte-for-byte readback verified. Limits: fixtures reproduce the documented column labels and the two truncation shapes, not the live console DOM; a genuinely huge account (thousands of rows) still costs a few seconds because every row must be rendered once. Unsigned prerelease. SHA256 4fc20fd3924b09cbed447e50e5683905d23ac1f5054c82c5b59e3997493eefda.
v0.3.3-test — online/offline status in the unified list
Adds the status you asked for: the unified list now has a Status column showing what each row's own console indicator says (for example Online, Offline, In use), and the summary line reports how many rows are online, per account and overall. Status is read ONLY from an indicator the row itself carries (its aria-label / title / image alt). Nothing is inferred: if a list shows no indicators the column stays blank and the summary says status was not reported, and a device name containing a word like 'online' is never treated as a status. Status is deliberately excluded from the row de-duplication key, because it is display state that changes between reads, not identity. 'Inspect consoles' now also reports which presence words it can find on the page, so you can confirm at a glance whether your console exposes status at all. Windows CI run 37311420627 passed on real WebView2: five fixture rows extracted, three carrying a presence indicator, exactly one online and one offline reported, the 'In use' indicator reported verbatim, and a device named online-backup-01 proved to yield NO status - alongside the paging (9/9), virtual-scroll (18/18), chooser, isolation, handoff and credential-saving proofs, and 39 extractor/chooser validator tests. ZIP member hashes, provenance and byte-for-byte readback verified. Limits: the official support screenshot shows no confirmed per-row presence indicator, so this is written to report status when the live console exposes it and to stay blank when it does not - send the Inspect consoles survey if your list shows a status the app leaves blank. Unsigned prerelease. SHA256 41078e18ee74508b32f92c7e54d6191393a1a076d8842a966c2abe354fc12353.
v0.3.2-test — connect prompt now appears in the unified list
Implements your request: pressing Connect in the unified list no longer leaves you hunting for Splashtop's dialog in the split view behind it. The app detects the console's documented chooser after a real Connect and shows the choice as a prompt in the unified list window - 'From the Splashtop Business App' or 'From the Web App in this browser', plus Cancel. Your answer is applied inside the owning account's console, so the session still starts through Splashtop's own client path. If no chooser appears, the status line says Splashtop started the session directly; if you Cancel, the console's own dialog is left untouched. Security unchanged: options are matched only by the two exact official labels, an unknown option is refused, the apply script refuses to run outside my.splashtop.com/my.splashtop.eu, and the app still never fabricates a user gesture or selects the web fallback on its own. Windows CI 37310065192 passed on real WebView2: the new proofs confirm the chooser and both options are detected, the Business-app option is applied and observed by the page, the web-app option is applied and observed, an invented option is refused, and a page with no chooser is never reported as showing one - alongside the existing paging, virtual-scroll, isolation, handoff and credential proofs, 36 extractor/chooser validator tests and 23 handoff tests. ZIP member hashes, provenance and byte-for-byte readback verified. Limits: the fixture uses the documented option labels with invented surrounding markup, not the captured live console DOM; if the prompt still does not appear, press Inspect consoles and send the survey. Unsigned prerelease. SHA256 d5d8784d6dd63ae1fe3e837ef89b4309b5be469985a0576cc92257ac7c6b4a30.
v0.3.1-test — the unified list now reads the whole account
Fixes the report that the unified list showed only some computers. The console renders a long list a page or a screenful at a time, so the previous reader only saw the rows that happened to be rendered. The reader now walks every page (Next until the pager is exhausted) and every virtual-scroll window (scroll to the end), merging unique rows and reading the console-stated total from the pager, then returns the console to its first page. A read is reported complete only when the walk reached the end and the console total matches; otherwise it stays incomplete. Also added an 'Inspect consoles' button that shows a read-only structural survey (counts and control labels only, never device data) so any remaining mismatch can be diagnosed precisely. Windows CI 37309445673 passed on real WebView2: the newly added proofs confirm a paged fixture yields all 9 rows (Complete, total 9) and a virtualised fixture yields all 18 rows including one that is only rendered after scrolling (Complete), alongside the existing 4-row, duplicate-name, Connect-routing, stale-row, sign-in and handoff proofs, plus 24 extractor validator tests, 23 handoff tests and native-preference tests. ZIP member hashes, provenance and byte-for-byte readback verified. Limits: the fixtures reproduce the observed column labels and the two common truncation shapes, not the captured live console DOM; if the real console still differs, press Inspect consoles and send the survey. Unsigned prerelease. SHA256 0a3e4c7bc03dee2947ce4dfc32db021e4e0e4a0e517f73d5f9d1758f552ca9bf.
v0.3.0-test — unified list across both live accounts
Implements your request: one native unified computer list over both live accounts. Click 'Open unified list' to merge every account's own console rows (Name, Device Name, Group, Notes) into a single searchable list, each row badged with its account. 'Refresh from consoles' re-reads both consoles; 'Connect' routes to that row's own account console so Splashtop's own client path starts the session. Honest limits, by design: the console list exposes no numeric computer identity, so rows are never merged or de-duplicated by name; a read is reported incomplete unless the console itself states a total matching the rendered rows; a sign-in page is never treated as an empty list. Extraction is read-only and posts only the four visible columns plus whether a Connect control exists - no cookies, tokens, storage, HTML or private APIs. Windows CI 37308449168 passed: 23 extractor validator tests (TDD), 23 handoff/arm tests, native-preference tests, real two-account WebView2 isolation, real Business-app handoff dispatch, and a new real-runtime unified-list proof (4 fixture rows extracted, duplicate names retained, 3 Connect controls detected, one Connect activation routed into the owning page, stale row refused without clicking, sign-in page reported unavailable). ZIP member hashes, provenance, secret-file exclusion and byte-for-byte readback verified. Limits: real Splashtop login/MFA and the live console DOM are user-verified; the fixture reproduces only the observed column labels, not the captured console DOM, so a console markup change can surface as 'incomplete' rather than wrong data. Unsigned prerelease. SHA256 7cbda317b3efc9b6979dd64900b183028a48c5968ef17fce9e4b5e3880579ae2.