feat(computer-use): 2.0 background delivery, activation, overlay, harness - #315

Merged
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2
Aug 31, 2026
Merged

feat(computer-use): 2.0 background delivery, activation, overlay, harness#315
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Computer Use 2.0 — background input delivery (macOS)

Follows the techniques in pi-computer-use and kwwk-computer-use-core. The computer-use tools now drive target apps without stealing focus or moving the real cursor.

What changed

  • Background delivery (backend/macos/background.rs): mouse/keyboard/scroll/drag fallbacks are addressed to the target process via CGEventPostToPid with the required window-addressing fields (pid 39, window 51, routing 58, mouse window 91/92) and optional SkyLight window-local coordinates. AX-first (AXPress/AXValue) behavior is unchanged.
  • Background activation without a foreground switch: per-PID event taps drop the focus messages (raw types 13/19/20) headed to the previously-frontmost app, plus an appKitDefined primer (subtype 1 on acquire / 2 on release) and a window-center primer. The user's frontmost window stays put.
  • Chromium/Electron AX activation (ax.rs): sets AXManualAccessibility/AXEnhancedUserInterface and registers an AXObserver so background Chromium exposes its full tree (private _AXObserverAddNotificationAndCheckRemote with public fallback).
  • Agent-cursor overlay (backend/macos/overlay/): a click-through, non-activating NSPanel cursor + colorful window halo showing where the agent acts (never moves the real pointer; all UI marshalled to the main queue; no-op when disabled).
  • Screenshots: scaled (long-edge 1568 / area cap) and JPEG-encoded (q≈0.8).
  • Structured outcomes: per-step delivery (ax/background_pid/foreground_hid/none) and transaction-level activation.
  • Per-PID scheduling lanes: different apps run concurrently; same-app ops serialize. Existing epoch staleness rejection preserved.
  • Harness annotations: <computer_use_harness> block with observation sequence, recent actions, candidate targets, and stable-label deltas (since previous / initial).
  • Settings (Computer Use page): show_agent_cursor (default on) and allow_foreground_fallback (default off — keyboard-only, never pointer), with en/zh-CN i18n.

Every private API (SkyLight, per-PID taps, appKitDefined, private AX observer symbol) degrades gracefully — missing symbol / nil / tap-create failure falls back or reports didnt; nothing panics.

Testing

  • Local CI parity green: cargo fmt --all --check, cargo clippy --workspace --all-targets --locked -- -D warnings, cargo test --workspace --locked, process-helper boundary check, --locked (no Cargo.lock drift).
  • Live functional test on a real backgrounded app (TextEdit, with Finder frontmost): background keyboard input landed in the document AND the frontmost app was unchanged (1297 → 1297); background pointer click likewise kept focus. Both reported delivery: background_pid.

Notes / limitations

  • macOS only; Windows/Linux input paths are unchanged (Windows still advertises PNG screenshots).
  • The overlay's on-screen rendering isn't exercised by the headless probe (needs the app's main run loop); it is observational-only and no-ops on any failure.

@Tryanks
Tryanks merged commit cab63b0 into mainAug 31, 2026
3 checks passed
@Tryanks
Tryanks deleted the feat/computer-use-2 branch August 31, 2026 20:19
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Tryanks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(computer-use): 2.0 background delivery, activation, overlay, harness - #315

Merged
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2
Aug 31, 2026
Merged

feat(computer-use): 2.0 background delivery, activation, overlay, harness#315
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Computer Use 2.0 — background input delivery (macOS)

Follows the techniques in pi-computer-use and kwwk-computer-use-core. The computer-use tools now drive target apps without stealing focus or moving the real cursor.

What changed

  • Background delivery (backend/macos/background.rs): mouse/keyboard/scroll/drag fallbacks are addressed to the target process via CGEventPostToPid with the required window-addressing fields (pid 39, window 51, routing 58, mouse window 91/92) and optional SkyLight window-local coordinates. AX-first (AXPress/AXValue) behavior is unchanged.
  • Background activation without a foreground switch: per-PID event taps drop the focus messages (raw types 13/19/20) headed to the previously-frontmost app, plus an appKitDefined primer (subtype 1 on acquire / 2 on release) and a window-center primer. The user's frontmost window stays put.
  • Chromium/Electron AX activation (ax.rs): sets AXManualAccessibility/AXEnhancedUserInterface and registers an AXObserver so background Chromium exposes its full tree (private _AXObserverAddNotificationAndCheckRemote with public fallback).
  • Agent-cursor overlay (backend/macos/overlay/): a click-through, non-activating NSPanel cursor + colorful window halo showing where the agent acts (never moves the real pointer; all UI marshalled to the main queue; no-op when disabled).
  • Screenshots: scaled (long-edge 1568 / area cap) and JPEG-encoded (q≈0.8).
  • Structured outcomes: per-step delivery (ax/background_pid/foreground_hid/none) and transaction-level activation.
  • Per-PID scheduling lanes: different apps run concurrently; same-app ops serialize. Existing epoch staleness rejection preserved.
  • Harness annotations: <computer_use_harness> block with observation sequence, recent actions, candidate targets, and stable-label deltas (since previous / initial).
  • Settings (Computer Use page): show_agent_cursor (default on) and allow_foreground_fallback (default off — keyboard-only, never pointer), with en/zh-CN i18n.

Every private API (SkyLight, per-PID taps, appKitDefined, private AX observer symbol) degrades gracefully — missing symbol / nil / tap-create failure falls back or reports didnt; nothing panics.

Testing

  • Local CI parity green: cargo fmt --all --check, cargo clippy --workspace --all-targets --locked -- -D warnings, cargo test --workspace --locked, process-helper boundary check, --locked (no Cargo.lock drift).
  • Live functional test on a real backgrounded app (TextEdit, with Finder frontmost): background keyboard input landed in the document AND the frontmost app was unchanged (1297 → 1297); background pointer click likewise kept focus. Both reported delivery: background_pid.

Notes / limitations

  • macOS only; Windows/Linux input paths are unchanged (Windows still advertises PNG screenshots).
  • The overlay's on-screen rendering isn't exercised by the headless probe (needs the app's main run loop); it is observational-only and no-ops on any failure.

@Tryanks
Tryanks merged commit cab63b0 into mainAug 31, 2026
3 checks passed
@Tryanks
Tryanks deleted the feat/computer-use-2 branch August 31, 2026 20:19
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Tryanks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(computer-use): 2.0 background delivery, activation, overlay, harness - #315

Merged
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2
Aug 31, 2026
Merged

feat(computer-use): 2.0 background delivery, activation, overlay, harness#315
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Computer Use 2.0 — background input delivery (macOS)

Follows the techniques in pi-computer-use and kwwk-computer-use-core. The computer-use tools now drive target apps without stealing focus or moving the real cursor.

What changed

  • Background delivery (backend/macos/background.rs): mouse/keyboard/scroll/drag fallbacks are addressed to the target process via CGEventPostToPid with the required window-addressing fields (pid 39, window 51, routing 58, mouse window 91/92) and optional SkyLight window-local coordinates. AX-first (AXPress/AXValue) behavior is unchanged.
  • Background activation without a foreground switch: per-PID event taps drop the focus messages (raw types 13/19/20) headed to the previously-frontmost app, plus an appKitDefined primer (subtype 1 on acquire / 2 on release) and a window-center primer. The user's frontmost window stays put.
  • Chromium/Electron AX activation (ax.rs): sets AXManualAccessibility/AXEnhancedUserInterface and registers an AXObserver so background Chromium exposes its full tree (private _AXObserverAddNotificationAndCheckRemote with public fallback).
  • Agent-cursor overlay (backend/macos/overlay/): a click-through, non-activating NSPanel cursor + colorful window halo showing where the agent acts (never moves the real pointer; all UI marshalled to the main queue; no-op when disabled).
  • Screenshots: scaled (long-edge 1568 / area cap) and JPEG-encoded (q≈0.8).
  • Structured outcomes: per-step delivery (ax/background_pid/foreground_hid/none) and transaction-level activation.
  • Per-PID scheduling lanes: different apps run concurrently; same-app ops serialize. Existing epoch staleness rejection preserved.
  • Harness annotations: <computer_use_harness> block with observation sequence, recent actions, candidate targets, and stable-label deltas (since previous / initial).
  • Settings (Computer Use page): show_agent_cursor (default on) and allow_foreground_fallback (default off — keyboard-only, never pointer), with en/zh-CN i18n.

Every private API (SkyLight, per-PID taps, appKitDefined, private AX observer symbol) degrades gracefully — missing symbol / nil / tap-create failure falls back or reports didnt; nothing panics.

Testing

  • Local CI parity green: cargo fmt --all --check, cargo clippy --workspace --all-targets --locked -- -D warnings, cargo test --workspace --locked, process-helper boundary check, --locked (no Cargo.lock drift).
  • Live functional test on a real backgrounded app (TextEdit, with Finder frontmost): background keyboard input landed in the document AND the frontmost app was unchanged (1297 → 1297); background pointer click likewise kept focus. Both reported delivery: background_pid.

Notes / limitations

  • macOS only; Windows/Linux input paths are unchanged (Windows still advertises PNG screenshots).
  • The overlay's on-screen rendering isn't exercised by the headless probe (needs the app's main run loop); it is observational-only and no-ops on any failure.

@Tryanks
Tryanks merged commit cab63b0 into mainAug 31, 2026
3 checks passed
@Tryanks
Tryanks deleted the feat/computer-use-2 branch August 31, 2026 20:19
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Tryanks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(computer-use): 2.0 background delivery, activation, overlay, harness - #315

Merged
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2
Aug 31, 2026
Merged

feat(computer-use): 2.0 background delivery, activation, overlay, harness#315
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Computer Use 2.0 — background input delivery (macOS)

Follows the techniques in pi-computer-use and kwwk-computer-use-core. The computer-use tools now drive target apps without stealing focus or moving the real cursor.

What changed

  • Background delivery (backend/macos/background.rs): mouse/keyboard/scroll/drag fallbacks are addressed to the target process via CGEventPostToPid with the required window-addressing fields (pid 39, window 51, routing 58, mouse window 91/92) and optional SkyLight window-local coordinates. AX-first (AXPress/AXValue) behavior is unchanged.
  • Background activation without a foreground switch: per-PID event taps drop the focus messages (raw types 13/19/20) headed to the previously-frontmost app, plus an appKitDefined primer (subtype 1 on acquire / 2 on release) and a window-center primer. The user's frontmost window stays put.
  • Chromium/Electron AX activation (ax.rs): sets AXManualAccessibility/AXEnhancedUserInterface and registers an AXObserver so background Chromium exposes its full tree (private _AXObserverAddNotificationAndCheckRemote with public fallback).
  • Agent-cursor overlay (backend/macos/overlay/): a click-through, non-activating NSPanel cursor + colorful window halo showing where the agent acts (never moves the real pointer; all UI marshalled to the main queue; no-op when disabled).
  • Screenshots: scaled (long-edge 1568 / area cap) and JPEG-encoded (q≈0.8).
  • Structured outcomes: per-step delivery (ax/background_pid/foreground_hid/none) and transaction-level activation.
  • Per-PID scheduling lanes: different apps run concurrently; same-app ops serialize. Existing epoch staleness rejection preserved.
  • Harness annotations: <computer_use_harness> block with observation sequence, recent actions, candidate targets, and stable-label deltas (since previous / initial).
  • Settings (Computer Use page): show_agent_cursor (default on) and allow_foreground_fallback (default off — keyboard-only, never pointer), with en/zh-CN i18n.

Every private API (SkyLight, per-PID taps, appKitDefined, private AX observer symbol) degrades gracefully — missing symbol / nil / tap-create failure falls back or reports didnt; nothing panics.

Testing

  • Local CI parity green: cargo fmt --all --check, cargo clippy --workspace --all-targets --locked -- -D warnings, cargo test --workspace --locked, process-helper boundary check, --locked (no Cargo.lock drift).
  • Live functional test on a real backgrounded app (TextEdit, with Finder frontmost): background keyboard input landed in the document AND the frontmost app was unchanged (1297 → 1297); background pointer click likewise kept focus. Both reported delivery: background_pid.

Notes / limitations

  • macOS only; Windows/Linux input paths are unchanged (Windows still advertises PNG screenshots).
  • The overlay's on-screen rendering isn't exercised by the headless probe (needs the app's main run loop); it is observational-only and no-ops on any failure.

@Tryanks
Tryanks merged commit cab63b0 into mainAug 31, 2026
3 checks passed
@Tryanks
Tryanks deleted the feat/computer-use-2 branch August 31, 2026 20:19
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Tryanks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(computer-use): 2.0 background delivery, activation, overlay, harness - #315

Merged
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2
Aug 31, 2026
Merged

feat(computer-use): 2.0 background delivery, activation, overlay, harness#315
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Computer Use 2.0 — background input delivery (macOS)

Follows the techniques in pi-computer-use and kwwk-computer-use-core. The computer-use tools now drive target apps without stealing focus or moving the real cursor.

What changed

  • Background delivery (backend/macos/background.rs): mouse/keyboard/scroll/drag fallbacks are addressed to the target process via CGEventPostToPid with the required window-addressing fields (pid 39, window 51, routing 58, mouse window 91/92) and optional SkyLight window-local coordinates. AX-first (AXPress/AXValue) behavior is unchanged.
  • Background activation without a foreground switch: per-PID event taps drop the focus messages (raw types 13/19/20) headed to the previously-frontmost app, plus an appKitDefined primer (subtype 1 on acquire / 2 on release) and a window-center primer. The user's frontmost window stays put.
  • Chromium/Electron AX activation (ax.rs): sets AXManualAccessibility/AXEnhancedUserInterface and registers an AXObserver so background Chromium exposes its full tree (private _AXObserverAddNotificationAndCheckRemote with public fallback).
  • Agent-cursor overlay (backend/macos/overlay/): a click-through, non-activating NSPanel cursor + colorful window halo showing where the agent acts (never moves the real pointer; all UI marshalled to the main queue; no-op when disabled).
  • Screenshots: scaled (long-edge 1568 / area cap) and JPEG-encoded (q≈0.8).
  • Structured outcomes: per-step delivery (ax/background_pid/foreground_hid/none) and transaction-level activation.
  • Per-PID scheduling lanes: different apps run concurrently; same-app ops serialize. Existing epoch staleness rejection preserved.
  • Harness annotations: <computer_use_harness> block with observation sequence, recent actions, candidate targets, and stable-label deltas (since previous / initial).
  • Settings (Computer Use page): show_agent_cursor (default on) and allow_foreground_fallback (default off — keyboard-only, never pointer), with en/zh-CN i18n.

Every private API (SkyLight, per-PID taps, appKitDefined, private AX observer symbol) degrades gracefully — missing symbol / nil / tap-create failure falls back or reports didnt; nothing panics.

Testing

  • Local CI parity green: cargo fmt --all --check, cargo clippy --workspace --all-targets --locked -- -D warnings, cargo test --workspace --locked, process-helper boundary check, --locked (no Cargo.lock drift).
  • Live functional test on a real backgrounded app (TextEdit, with Finder frontmost): background keyboard input landed in the document AND the frontmost app was unchanged (1297 → 1297); background pointer click likewise kept focus. Both reported delivery: background_pid.

Notes / limitations

  • macOS only; Windows/Linux input paths are unchanged (Windows still advertises PNG screenshots).
  • The overlay's on-screen rendering isn't exercised by the headless probe (needs the app's main run loop); it is observational-only and no-ops on any failure.

@Tryanks
Tryanks merged commit cab63b0 into mainAug 31, 2026
3 checks passed
@Tryanks
Tryanks deleted the feat/computer-use-2 branch August 31, 2026 20:19
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Tryanks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(computer-use): 2.0 background delivery, activation, overlay, harness - #315

Merged
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2
Aug 31, 2026
Merged

feat(computer-use): 2.0 background delivery, activation, overlay, harness#315
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Computer Use 2.0 — background input delivery (macOS)

Follows the techniques in pi-computer-use and kwwk-computer-use-core. The computer-use tools now drive target apps without stealing focus or moving the real cursor.

What changed

  • Background delivery (backend/macos/background.rs): mouse/keyboard/scroll/drag fallbacks are addressed to the target process via CGEventPostToPid with the required window-addressing fields (pid 39, window 51, routing 58, mouse window 91/92) and optional SkyLight window-local coordinates. AX-first (AXPress/AXValue) behavior is unchanged.
  • Background activation without a foreground switch: per-PID event taps drop the focus messages (raw types 13/19/20) headed to the previously-frontmost app, plus an appKitDefined primer (subtype 1 on acquire / 2 on release) and a window-center primer. The user's frontmost window stays put.
  • Chromium/Electron AX activation (ax.rs): sets AXManualAccessibility/AXEnhancedUserInterface and registers an AXObserver so background Chromium exposes its full tree (private _AXObserverAddNotificationAndCheckRemote with public fallback).
  • Agent-cursor overlay (backend/macos/overlay/): a click-through, non-activating NSPanel cursor + colorful window halo showing where the agent acts (never moves the real pointer; all UI marshalled to the main queue; no-op when disabled).
  • Screenshots: scaled (long-edge 1568 / area cap) and JPEG-encoded (q≈0.8).
  • Structured outcomes: per-step delivery (ax/background_pid/foreground_hid/none) and transaction-level activation.
  • Per-PID scheduling lanes: different apps run concurrently; same-app ops serialize. Existing epoch staleness rejection preserved.
  • Harness annotations: <computer_use_harness> block with observation sequence, recent actions, candidate targets, and stable-label deltas (since previous / initial).
  • Settings (Computer Use page): show_agent_cursor (default on) and allow_foreground_fallback (default off — keyboard-only, never pointer), with en/zh-CN i18n.

Every private API (SkyLight, per-PID taps, appKitDefined, private AX observer symbol) degrades gracefully — missing symbol / nil / tap-create failure falls back or reports didnt; nothing panics.

Testing

  • Local CI parity green: cargo fmt --all --check, cargo clippy --workspace --all-targets --locked -- -D warnings, cargo test --workspace --locked, process-helper boundary check, --locked (no Cargo.lock drift).
  • Live functional test on a real backgrounded app (TextEdit, with Finder frontmost): background keyboard input landed in the document AND the frontmost app was unchanged (1297 → 1297); background pointer click likewise kept focus. Both reported delivery: background_pid.

Notes / limitations

  • macOS only; Windows/Linux input paths are unchanged (Windows still advertises PNG screenshots).
  • The overlay's on-screen rendering isn't exercised by the headless probe (needs the app's main run loop); it is observational-only and no-ops on any failure.

@Tryanks
Tryanks merged commit cab63b0 into mainAug 31, 2026
3 checks passed
@Tryanks
Tryanks deleted the feat/computer-use-2 branch August 31, 2026 20:19
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Tryanks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(computer-use): 2.0 background delivery, activation, overlay, harness - #315

Merged
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2
Aug 31, 2026
Merged

feat(computer-use): 2.0 background delivery, activation, overlay, harness#315
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Computer Use 2.0 — background input delivery (macOS)

Follows the techniques in pi-computer-use and kwwk-computer-use-core. The computer-use tools now drive target apps without stealing focus or moving the real cursor.

What changed

  • Background delivery (backend/macos/background.rs): mouse/keyboard/scroll/drag fallbacks are addressed to the target process via CGEventPostToPid with the required window-addressing fields (pid 39, window 51, routing 58, mouse window 91/92) and optional SkyLight window-local coordinates. AX-first (AXPress/AXValue) behavior is unchanged.
  • Background activation without a foreground switch: per-PID event taps drop the focus messages (raw types 13/19/20) headed to the previously-frontmost app, plus an appKitDefined primer (subtype 1 on acquire / 2 on release) and a window-center primer. The user's frontmost window stays put.
  • Chromium/Electron AX activation (ax.rs): sets AXManualAccessibility/AXEnhancedUserInterface and registers an AXObserver so background Chromium exposes its full tree (private _AXObserverAddNotificationAndCheckRemote with public fallback).
  • Agent-cursor overlay (backend/macos/overlay/): a click-through, non-activating NSPanel cursor + colorful window halo showing where the agent acts (never moves the real pointer; all UI marshalled to the main queue; no-op when disabled).
  • Screenshots: scaled (long-edge 1568 / area cap) and JPEG-encoded (q≈0.8).
  • Structured outcomes: per-step delivery (ax/background_pid/foreground_hid/none) and transaction-level activation.
  • Per-PID scheduling lanes: different apps run concurrently; same-app ops serialize. Existing epoch staleness rejection preserved.
  • Harness annotations: <computer_use_harness> block with observation sequence, recent actions, candidate targets, and stable-label deltas (since previous / initial).
  • Settings (Computer Use page): show_agent_cursor (default on) and allow_foreground_fallback (default off — keyboard-only, never pointer), with en/zh-CN i18n.

Every private API (SkyLight, per-PID taps, appKitDefined, private AX observer symbol) degrades gracefully — missing symbol / nil / tap-create failure falls back or reports didnt; nothing panics.

Testing

  • Local CI parity green: cargo fmt --all --check, cargo clippy --workspace --all-targets --locked -- -D warnings, cargo test --workspace --locked, process-helper boundary check, --locked (no Cargo.lock drift).
  • Live functional test on a real backgrounded app (TextEdit, with Finder frontmost): background keyboard input landed in the document AND the frontmost app was unchanged (1297 → 1297); background pointer click likewise kept focus. Both reported delivery: background_pid.

Notes / limitations

  • macOS only; Windows/Linux input paths are unchanged (Windows still advertises PNG screenshots).
  • The overlay's on-screen rendering isn't exercised by the headless probe (needs the app's main run loop); it is observational-only and no-ops on any failure.

@Tryanks
Tryanks merged commit cab63b0 into mainAug 31, 2026
3 checks passed
@Tryanks
Tryanks deleted the feat/computer-use-2 branch August 31, 2026 20:19
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Tryanks
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(computer-use): 2.0 background delivery, activation, overlay, harness - #315

Merged
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2
Aug 31, 2026
Merged

feat(computer-use): 2.0 background delivery, activation, overlay, harness#315
Tryanks merged 4 commits into
mainfrom
feat/computer-use-2

Conversation

@Tryanks

Copy link
Copy Markdown
Owner

Computer Use 2.0 — background input delivery (macOS)

Follows the techniques in pi-computer-use and kwwk-computer-use-core. The computer-use tools now drive target apps without stealing focus or moving the real cursor.

What changed

  • Background delivery (backend/macos/background.rs): mouse/keyboard/scroll/drag fallbacks are addressed to the target process via CGEventPostToPid with the required window-addressing fields (pid 39, window 51, routing 58, mouse window 91/92) and optional SkyLight window-local coordinates. AX-first (AXPress/AXValue) behavior is unchanged.
  • Background activation without a foreground switch: per-PID event taps drop the focus messages (raw types 13/19/20) headed to the previously-frontmost app, plus an appKitDefined primer (subtype 1 on acquire / 2 on release) and a window-center primer. The user's frontmost window stays put.
  • Chromium/Electron AX activation (ax.rs): sets AXManualAccessibility/AXEnhancedUserInterface and registers an AXObserver so background Chromium exposes its full tree (private _AXObserverAddNotificationAndCheckRemote with public fallback).
  • Agent-cursor overlay (backend/macos/overlay/): a click-through, non-activating NSPanel cursor + colorful window halo showing where the agent acts (never moves the real pointer; all UI marshalled to the main queue; no-op when disabled).
  • Screenshots: scaled (long-edge 1568 / area cap) and JPEG-encoded (q≈0.8).
  • Structured outcomes: per-step delivery (ax/background_pid/foreground_hid/none) and transaction-level activation.
  • Per-PID scheduling lanes: different apps run concurrently; same-app ops serialize. Existing epoch staleness rejection preserved.
  • Harness annotations: <computer_use_harness> block with observation sequence, recent actions, candidate targets, and stable-label deltas (since previous / initial).
  • Settings (Computer Use page): show_agent_cursor (default on) and allow_foreground_fallback (default off — keyboard-only, never pointer), with en/zh-CN i18n.

Every private API (SkyLight, per-PID taps, appKitDefined, private AX observer symbol) degrades gracefully — missing symbol / nil / tap-create failure falls back or reports didnt; nothing panics.

Testing

  • Local CI parity green: cargo fmt --all --check, cargo clippy --workspace --all-targets --locked -- -D warnings, cargo test --workspace --locked, process-helper boundary check, --locked (no Cargo.lock drift).
  • Live functional test on a real backgrounded app (TextEdit, with Finder frontmost): background keyboard input landed in the document AND the frontmost app was unchanged (1297 → 1297); background pointer click likewise kept focus. Both reported delivery: background_pid.

Notes / limitations

  • macOS only; Windows/Linux input paths are unchanged (Windows still advertises PNG screenshots).
  • The overlay's on-screen rendering isn't exercised by the headless probe (needs the app's main run loop); it is observational-only and no-ops on any failure.

@Tryanks
Tryanks merged commit cab63b0 into mainAug 31, 2026
3 checks passed
@Tryanks
Tryanks deleted the feat/computer-use-2 branch August 31, 2026 20:19
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Tryanks