feat: prepare 0.2.0 with local terminals and latest DSH support - #8
Merged
Merged
Conversation
- Add packages/terminal-core: PTY lifetime, canonical terminal state, output snapshots, backpressure, single active input controller - Add packages/terminal-host: shell launch, HTTP/WebSocket terminal server, pairing management, macOS service lifecycle - Add apps/terminal-surface: xterm-based browser terminal with input, resize and selection - Extend connector contract/host with terminal runtime descriptor and option tap - Update extension connection coordinator, background and overlay for the terminal runtime path - Add build/verify scripts, architecture doc and verification records
An iframe load event can describe the inherited about:blank document or a CSP-blocked error document, so it cannot prove that the extension wrapper document is actually running with the expected origin. Replace the load-event readiness heuristic with a surface.wrapper-ready announcement posted by the wrapper after it installs its presentation buffer, validated by origin, source window, and nonce. Also keep the placeholder iframe detached until a workspace is actually requested, so mounting never injects a CSP-inheriting blank document into the host page, and never reinsert a retained iframe whose browsing context would be destroyed.
Replace the flat runtime-switch button row with a collapsible picker: a stable trigger showing the active workspace icon and name, and an option list that opens on click and closes on selection, blur, or Escape. Activation is only claimed once the background confirms the new runtime, metadata updates reuse existing option nodes so focus and the open state survive unread markers and renames, and a fixed-geometry decode effect plays on switches without resizing the dock.
…ons menu Turn the terminal sessions select into clickable tabs that stay in the header, and move status, control, paste-image, reconnect, and close into an overflow actions menu that closes on outside pointer, Escape, or button activation. Connection state now renders in a separate non-live notice that hides once connected, so automatic retries neither flash an intermediate status nor re-announce the same failure to assistive technology. Session lists that no longer contain the current id fall back to the first available session.
Replace the vertical icon strip with a fixed 48px launcher that expands into a full controls panel: three mode cards with a sliding highlight, an opacity slider that now disables outside chill mode, and a workspaces view that swaps in when the runtime picker opens. Focus is managed with inert instead of hidden, Escape layers from options to dock to shell and restores focus to the launcher, and collapsing returns focus when it lives inside the dock. The picker drops its focusout close now that options are a view with an explicit back button, and unread output dots render on both the launcher and the workspace trigger.
Allow every connected view to write to the same shell while limiting resize updates to the focused view. Remove manual takeover and image-paste buttons, handle clipboard image paste directly, and show each shell current directory on tab hover.
…bSocket Session names now default to the shell's current directory (basename) instead of a counter, and follow cd through a directory refresh that is debounced to once per second of shell output and skipped entirely for idle shells or manually named sessions. POST /api/terminals gains a rename action (1-80 chars, no control characters, trimmed) and every name change is broadcast to connected viewers as a session-names message, closing the gap where background tabs kept stale titles.
… bar Tabs can be renamed through a context menu (right-click, Shift+F10 or Menu key), by double-clicking the name, or with F2. The dialog validates input client-side and applies names without reconnecting. Tab titles arrive via the session-names WebSocket message, so surfaces never poll the terminal list while idle. The native title tooltip is replaced by a positioned folder tooltip that stays out of the context menu's way, and refreshSessions now reconciles tabs incrementally, preserving hovered elements and scroll position across updates. Slimmer tab chrome keeps wider directory names visible without layout shifts.
- Run every shutdown step through a shared cleanup() helper that aggregates failures instead of aborting on the first error, and report shutdown failures on stop signals with a nonzero exit code. - Compare the launch token with timingSafeEqual like the admin cookie. - Reject non-JSON or non-object POST bodies with a 400 error. - Cover invalid launch tokens, malformed request bodies, and lock release failures during shutdown in the integration tests.
HeftyKoo
marked this pull request as ready for review
September 29, 2026 02:28
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
AgentOnWeb 0.2.0 adds a real local shell alongside DSH, so users can run installed CLIs on their current website and switch workspaces without stopping their processes. Terminal views share input, follow the shell directory, support shared tab renaming, and reconnect to running shells.
@latest; verify 0.1.7-rc.2 and add a CI job that installs npm latest and tests the actual packed plugin, native settings UI and iframe/API/WebSocket authentication. The old alpha.3 pin no longer installs reliably with current upstream transitive dependencies.Validation
verifyanddsh-lateston this revision before merge.Release boundary
This merges the release candidate; it does not publish npm packages, create release tags, deploy the public docs site or submit store builds. Final installer/setup/upgrade/uninstall and live Codex notification acceptance remain in the release checklist. Live terminal support is scoped to macOS/Chrome; other platforms are not implied by successful builds.
See
docs/releasing.mdanddocs/verification/release-0.2.0.mdfor commands and remaining publication gates.