Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
138 commits
Select commit Hold shift + click to select a range
a81622c
feat(codex): surface Computer Use and MCP tool approvals; Windows nat…
Nelglor Aug 10, 2026
60e7cd7
fix(desktop): declare NSAppleEventsUsageDescription so Computer Use c…
sheehanmunim Aug 13, 2026
e1a23a9
Add macOS desktop control and agent-owned browser tabs
sheehanmunim Aug 13, 2026
60ebda3
Avoid a needless spread when listing agent tabs
sheehanmunim Aug 13, 2026
d932b5e
test(desktop): cover the Apple Events usage description in build config
sheehanmunim Aug 13, 2026
a89ec40
refactor(codex): drop the Windows Computer Use transport bridge
sheehanmunim Aug 13, 2026
97b819e
feat(desktop): add the Windows desktop-control MCP server
sheehanmunim Aug 13, 2026
dc07fd8
feat(desktop): add the Linux desktop-control backend
sheehanmunim Aug 13, 2026
44f8fc6
feat(desktop): ship the desktop-control server on Windows and Linux
sheehanmunim Aug 13, 2026
80a059a
fix(desktop): write text through AT-SPI on Linux instead of synthetic…
sheehanmunim Aug 13, 2026
f31916f
feat(desktop): bring agent-owned Chrome tabs to Windows and Linux
sheehanmunim Aug 13, 2026
51882ca
fix(repo): stop the pre-commit formatter failing on native-only changes
sheehanmunim Aug 13, 2026
ca63740
fix(desktop): prefer X11 for capture when both display servers are pr…
sheehanmunim Aug 13, 2026
8373565
fix(desktop): capture on Wayland through wlr-screencopy when xcap cannot
sheehanmunim Aug 13, 2026
5d9b5a4
fix(desktop): commit the desktop server lockfile
sheehanmunim Aug 13, 2026
f004c87
refactor(desktop): name the desktop server executable in one place
sheehanmunim Aug 13, 2026
a667cf0
fix(desktop): report the requested url when a new tab has not loaded
sheehanmunim Aug 13, 2026
fb4e925
fix(desktop): confirm browser actions in the macOS server's words
sheehanmunim Aug 13, 2026
0c577bc
feat(desktop): give the agent its own pointer, and stop taking the us…
sheehanmunim Aug 13, 2026
a02e4d6
feat(desktop): Computer Use settings, pointer polish, Windows backgro…
sheehanmunim Aug 13, 2026
dc58d70
feat(desktop): polish Computer Use settings and fix Windows Gdi import
sheehanmunim Aug 13, 2026
3f664f2
fix(desktop): satisfy Effect diagnostics in Computer Use permissions
sheehanmunim Aug 13, 2026
41395fc
fix(desktop): inject t3-desktop MCP for Cursor/Grok without HTTP session
sheehanmunim Aug 13, 2026
5c6eec3
fix(desktop): address Computer Use review findings
sheehanmunim Aug 13, 2026
22f23db
fix(desktop): resolve Computer Use settings without widening session R
sheehanmunim Aug 13, 2026
447dabb
fix(desktop): skip bad MCP binary candidates and avoid overlay SIGPIPE
sheehanmunim Aug 13, 2026
9c5e815
fix(desktop): make ServerSettings acquisition unmistakable for Macros…
sheehanmunim Aug 13, 2026
0b3525f
fix(desktop): finish Computer Use correctness follow-ups
sheehanmunim Aug 13, 2026
5aa81cc
fix(desktop): harden background input fallbacks and group creation
sheehanmunim Aug 13, 2026
7fe191b
fix(desktop): close remaining Computer Use correctness gaps
sheehanmunim Aug 13, 2026
cde7d7d
fix(desktop): inject t3-desktop MCP into Codex sessions
sheehanmunim Aug 13, 2026
6d1986f
fix(desktop): avoid JSON.stringify in Codex MCP -c overrides
sheehanmunim Aug 13, 2026
f4a02a9
fix(desktop): Windows agent cursor and Chrome extension reconnect
sheehanmunim Aug 14, 2026
66c5842
fix(desktop): address Computer Use bot review findings
sheehanmunim Aug 14, 2026
a771e76
fix(desktop): unique MCP elicitation correlation and session teardown
sheehanmunim Aug 14, 2026
38345e5
fix(desktop): serialize Chrome session cleanup and clear Effect path
sheehanmunim Aug 14, 2026
d6356f5
fix(chrome-extension): keep agent group id across reconnect cleanup
sheehanmunim Aug 14, 2026
a8b5dc5
fix(desktop-mcp): raise Linux apps via EWMH when AT-SPI focus fails
sheehanmunim Aug 14, 2026
b9d7212
fix(desktop-mcp): harden Linux activate/type/press_key and Windows chmod
sheehanmunim Aug 14, 2026
997231f
fix(desktop-mcp): use short bridge socket path when App Support is to…
sheehanmunim Aug 14, 2026
84ebaba
fix(desktop-mcp): harden agent window ownership and Linux input cleanup
sheehanmunim Aug 14, 2026
5cfdd00
fix(desktop-mcp): address follow-up Computer Use bot findings
sheehanmunim Aug 14, 2026
21aa23e
fix(desktop-mcp): process follow-up Computer Use bot findings
sheehanmunim Aug 14, 2026
8b2ee6a
fix(desktop-mcp): clear remaining Linux Computer Use bot findings
sheehanmunim Aug 14, 2026
f2f13b3
fix(desktop-mcp): drop accidental history.rs from Computer Use branch
sheehanmunim Aug 14, 2026
79e5e74
fix(desktop-mcp): keep AT-SPI insert on caret errors; harden Wayland …
sheehanmunim Aug 14, 2026
b94f755
fix(desktop-mcp): append on caret miss; drop Effect shim; Wayland scroll
sheehanmunim Aug 14, 2026
755bf1a
fix(desktop-mcp): error when Shift is required but unavailable
sheehanmunim Aug 14, 2026
1624033
fix(desktop-mcp): reject out-of-range pointer coords; lazy Shift_R lo…
sheehanmunim Aug 14, 2026
608dde9
fix(desktop-mcp): sync Computer Use with Macroscope MCP hardening
sheehanmunim Aug 15, 2026
48bdd62
fix(desktop): repair ipc doc comment; drop unused Codex stateDir
sheehanmunim Aug 15, 2026
9ba1644
fix(settings): decorative brand icons and Computer Use bridge fallback
sheehanmunim Aug 15, 2026
f1b654b
fix(desktop): port pointer animation and Win/Linux Computer Use parity
sheehanmunim Aug 15, 2026
4120c8c
fix(desktop): repair desktop-mcp stage JSDoc opener
sheehanmunim Aug 15, 2026
54b9726
fix(desktop): clear Macroscope Computer Use correctness findings
sheehanmunim Aug 15, 2026
6dd2167
fix(desktop): restore CaptureBox for window PNG race safety
sheehanmunim Aug 15, 2026
276af27
fix(desktop): clear follow-up Macroscope and Bugbot findings
sheehanmunim Aug 15, 2026
c0207f8
fix(desktop): prefer under-point click targets and cap click_count
sheehanmunim Aug 15, 2026
2d39180
fix(desktop): scope browser disconnects and tighten click/app resolution
sheehanmunim Aug 15, 2026
c16c3c8
fix(desktop): constrain click targeting and lock disconnect generation
sheehanmunim Aug 15, 2026
9428596
fix(desktop): report real tab ids and clearer off-screen click errors
sheehanmunim Aug 15, 2026
bdb03a4
fix(desktop): ignore agent-cursor overlay in under-point hit tests
sheehanmunim Aug 15, 2026
7d6b992
fix(desktop): resolve explicit app for drag/click without stale pid
sheehanmunim Aug 15, 2026
2f2ac81
fix(desktop): allow background drags under occluding windows
sheehanmunim Aug 15, 2026
7c2424b
fix(settings): use shared CollapsibleContent for More browsers
sheehanmunim Aug 15, 2026
5bb4044
fix(web): use CollapsiblePanel for More browsers disclosure
sheehanmunim Aug 15, 2026
2053d58
fix(settings): extract More browsers collapsible into shared component
sheehanmunim Aug 15, 2026
1b15033
fix(native): harden shared Computer Use bridge, capture, and app listing
sheehanmunim Aug 15, 2026
3424bd7
fix(settings): share SettingRowTitle across Computer Use settings
sheehanmunim Aug 15, 2026
97d48e9
fix(native): hold agent-window lock through creation
sheehanmunim Aug 15, 2026
69b576c
fix(native): drop computer-history entry from computer-use main
sheehanmunim Aug 15, 2026
4d7a4fd
fix(cu): align bridge socket cleanup, display listing, and privacy se…
sheehanmunim Aug 15, 2026
1edee9c
fix(desktop): port shared Computer Use correctness fixes from history…
sheehanmunim Aug 15, 2026
ab16a6c
fix(desktop): reject empty app query in macOS resolveApp
sheehanmunim Aug 15, 2026
80f8e36
fix(desktop-mcp): resolve numeric app names when PID is absent
sheehanmunim Aug 15, 2026
dfd98d6
fix(desktop-mcp): keep agent windows across AX gaps; exact numeric names
sheehanmunim Aug 15, 2026
a21b8f1
fix(desktop-mcp): remove History CLI; exact-match numeric app names
sheehanmunim Aug 15, 2026
373fcd5
fix(desktop-mcp): remove stray brace after native-host entry
sheehanmunim Aug 15, 2026
e91440e
fix(desktop-mcp): port shared Macroscope CU hardening from History
sheehanmunim Aug 15, 2026
633f32b
fix(desktop-mcp): use MSG_DONTWAIT bridge writes; fix Shift and FRONT…
sheehanmunim Aug 15, 2026
54027f1
fix(desktop-mcp): invoke press/click AT-SPI actions by name
sheehanmunim Aug 15, 2026
6ef1925
fix(chrome-extension): use prod toolbar icon and unclip pointer favicon
sheehanmunim Aug 16, 2026
bda58dc
fix(desktop): prefer X11 for capture when both display servers are pr…
sheehanmunim Aug 13, 2026
c411b1b
feat(desktop): add opt-in Computer History across macOS, Windows, and…
sheehanmunim Aug 14, 2026
a435edc
feat(desktop): add Computer History app/website exclusion privacy UI
sheehanmunim Aug 14, 2026
5b5c81e
fix(desktop): address Computer History and Linux CU bot findings
sheehanmunim Aug 14, 2026
1885000
fix(desktop): close remaining Computer Use and History review findings
sheehanmunim Aug 14, 2026
8cb30e4
fix(desktop): address follow-up Computer Use and History bot findings
sheehanmunim Aug 14, 2026
8379d25
fix(desktop): process follow-up bot findings from PR monitor
sheehanmunim Aug 14, 2026
5ed285f
fix(desktop): clear remaining bot findings and Effect-service the his…
sheehanmunim Aug 14, 2026
4a1e5e2
fix(desktop): clear new History/Use bot findings on quit, titles, input
sheehanmunim Aug 14, 2026
0466353
fix(server): load Computer History via Effect service in Codex turns
sheehanmunim Aug 14, 2026
6f19d86
fix(desktop): clear remaining Macroscope/Bugbot findings on CH PR
sheehanmunim Aug 15, 2026
c4ec067
fix(desktop): stop UIA walk at max_depth; drop unused root helper
sheehanmunim Aug 15, 2026
20e7b10
fix(computer-history): tryPromise fallbacks and Defect-backed errors
sheehanmunim Aug 15, 2026
4654c3f
fix(computer-history): make daemon stop finish idempotent
sheehanmunim Aug 15, 2026
15e6bcd
fix(computer-history): swallow best-effort status write failures
sheehanmunim Aug 15, 2026
d71c85e
fix(computer-history): keep daemon errors typed; use shared Collapsible
sheehanmunim Aug 15, 2026
7836646
fix(settings): share SettingIconAction; catch typed history errors
sheehanmunim Aug 15, 2026
b67e169
fix(computer-history): stop status respawn, dual writes, and path reveal
sheehanmunim Aug 15, 2026
75006c7
fix(desktop-mcp): address Macroscope correctness findings
sheehanmunim Aug 15, 2026
18a59a6
chore: clarify already-fixed Effect/UI conventions for Macroscope
sheehanmunim Aug 15, 2026
b624d26
fix(computer-history): match Macroscope UI and Effect conventions
sheehanmunim Aug 15, 2026
c67d14c
fix(desktop): scope browser disconnects and tighten click/app resolution
sheehanmunim Aug 15, 2026
8e10b46
fix(desktop): constrain click targeting and catchTags for History
sheehanmunim Aug 15, 2026
c72092c
fix(settings): extract History privacy controls onto shared UI primit…
sheehanmunim Aug 15, 2026
ea20587
fix(web): align Computer Use collapsible with CollapsiblePanel
sheehanmunim Aug 15, 2026
e360ba7
fix(settings): inline History privacy UI and extract More browsers
sheehanmunim Aug 15, 2026
500fc08
fix(desktop): harden Computer History errors and daemon-aware setting…
sheehanmunim Aug 15, 2026
4a94a25
fix(settings): share SettingRowTitle and drop Badge chip overrides
sheehanmunim Aug 15, 2026
1ef8925
fix(desktop): serialize history patches and refresh stale daemon status
sheehanmunim Aug 15, 2026
675b009
fix(history): tighten privacy filters and settings UX edge cases
sheehanmunim Aug 15, 2026
ca4c08b
fix(history,cu): address remaining bot findings for privacy and daemo…
sheehanmunim Aug 15, 2026
6e20d8b
fix(history): confirm clears, bust Effect path, tighten sampling
sheehanmunim Aug 15, 2026
75fdfc8
chore(desktop): re-export ComputerHistoryManager from manager.ts
sheehanmunim Aug 15, 2026
2044d0a
fix(desktop): drop ComputerHistoryManager re-export shim
sheehanmunim Aug 15, 2026
6f0081a
fix(desktop): address Macroscope correctness findings for Computer Us…
sheehanmunim Aug 15, 2026
0313b35
fix(desktop-mcp): numeric app names and fail-closed website filters
sheehanmunim Aug 15, 2026
ded3951
fix(desktop-mcp): harden host matching and agent-window AX misses
sheehanmunim Aug 15, 2026
0557b1a
fix(history): match website filters on URL tokens, not titles
sheehanmunim Aug 15, 2026
3c8ff7a
fix(history): parse IPv6 and angle-bracket URL hosts for filters
sheehanmunim Aug 15, 2026
9a78a17
fix(history): use only the first URL token for site filters
sheehanmunim Aug 15, 2026
7d3bdc7
fix(history): require host match for host/path website needles
sheehanmunim Aug 15, 2026
37cf7f9
fix(history): harden website path filters for /path, URLs, localhost
sheehanmunim Aug 15, 2026
70cb219
fix(history): treat origin filters as whole-host; normalize path slashes
sheehanmunim Aug 15, 2026
9de4361
fix(history): align Rust path normalization with Swift
sheehanmunim Aug 15, 2026
2661080
fix(desktop): clear Macroscope findings for History and shared CU
sheehanmunim Aug 15, 2026
71f30df
fix(desktop): harden bridge writes and History disable merge
sheehanmunim Aug 15, 2026
81b26d8
fix(server): inject Computer History context for all providers
sheehanmunim Aug 15, 2026
c64c8b9
fix(desktop): clear post-rebase Bugbot and Macroscope findings
sheehanmunim Aug 16, 2026
7d434e9
fix(web): clean agent cursor settings icon
sheehanmunim Aug 16, 2026
476bf37
fix(web): use real agent-cursor overlay art in settings
sheehanmunim Aug 16, 2026
385b92e
fix(web): soften agent-cursor glow padding in settings icons
sheehanmunim Aug 16, 2026
aa6cde7
fix(web): soft-extend agent-cursor badge glow into purple frame
sheehanmunim Aug 16, 2026
2978695
fix(desktop-mcp): close Macroscope Highs on drag, bridge, history fil…
sheehanmunim Aug 16, 2026
8b001ca
fix(desktop-mcp): address Macroscope/Bugbot Highs after main rebase
sheehanmunim Aug 16, 2026
c248595
fix(desktop): wait for recorder exit after SIGKILL on stop timeout
sheehanmunim Aug 16, 2026
d9b242d
fix(desktop-mcp): parse escaped app ids and keep ambiguous activate f…
sheehanmunim Aug 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions apps/desktop/scripts/electron-launcher.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,14 @@ function patchMainBundleInfoPlist(appBundlePath, iconPath, executableName) {
setPlistString(infoPlistPath, "CFBundleIdentifier", APP_BUNDLE_ID);
setPlistString(infoPlistPath, "CFBundleExecutable", executableName);
setPlistString(infoPlistPath, "CFBundleIconFile", "icon.icns");
// Without this key macOS denies every Apple Event with errAEEventNotPermitted
// (-1743) and never shows the Automation prompt, so Codex Computer Use and any
// other MCP server we spawn silently fail to drive other apps.
setPlistString(
infoPlistPath,
"NSAppleEventsUsageDescription",
"This app needs to control other apps to run Computer Use automations you approve.",
);
setPlistJson(infoPlistPath, "CFBundleURLTypes", [
{
CFBundleURLName: APP_BUNDLE_ID,
Expand Down
34 changes: 34 additions & 0 deletions apps/desktop/src/app/DesktopApp.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import * as Cause from "effect/Cause";
import * as Effect from "effect/Effect";
import * as FileSystem from "effect/FileSystem";
import * as Option from "effect/Option";
import * as Ref from "effect/Ref";
import * as Schema from "effect/Schema";
import { DEFAULT_SERVER_SETTINGS, ServerSettings } from "@t3tools/contracts/settings";

import * as NetService from "@t3tools/shared/Net";
import * as Crypto from "effect/Crypto";
Expand All @@ -11,6 +13,7 @@ import * as ElectronDialog from "../electron/ElectronDialog.ts";
import * as ElectronProtocol from "../electron/ElectronProtocol.ts";
import * as ElectronSafeStorage from "../electron/ElectronSafeStorage.ts";
import { installDesktopIpcHandlers } from "../ipc/DesktopIpcHandlers.ts";
import * as ComputerHistoryManager from "../computerHistory/ComputerHistoryManager.ts";
import * as DesktopAppIdentity from "./DesktopAppIdentity.ts";
import * as DesktopClerk from "./DesktopClerk.ts";
import * as DesktopApplicationMenu from "../window/DesktopApplicationMenu.ts";
Expand Down Expand Up @@ -200,6 +203,32 @@ const bootstrap = Effect.gen(function* () {
yield* installDesktopIpcHandlers();
yield* logBootstrapInfo("bootstrap ipc handlers registered");

// Start the Computer History recorder when already enabled so capture resumes
// after relaunch without requiring a visit to Settings.
yield* Effect.gen(function* () {
const environment = yield* DesktopEnvironment.DesktopEnvironment;
const fileSystem = yield* FileSystem.FileSystem;
const raw = yield* fileSystem
.readFileString(environment.serverSettingsPath)
.pipe(Effect.orElseSucceed(() => "{}"));
const decoded = yield* Schema.decodeUnknownEffect(Schema.fromJsonString(ServerSettings))(
raw,
).pipe(Effect.orElseSucceed(() => DEFAULT_SERVER_SETTINGS));
// ensureDaemon keeps ComputerHistoryOperationError in the error channel so
// bootstrap can Effect.catch without turning spawn/layout failures into defects.
const manager = yield* ComputerHistoryManager.ComputerHistoryManager;
yield* manager.ensureDaemon(environment.stateDir, decoded.computerHistory).pipe(
Effect.catchTags({
ComputerHistoryOperationError: (cause) =>
Effect.logWarning("Computer History daemon bootstrap skipped", { cause }),
}),
);
}).pipe(
Effect.catch((cause) =>
Effect.logWarning("Computer History daemon bootstrap skipped", { cause }),
),
);

if (!(yield* Ref.get(state.quitting))) {
// In wsl-only mode the renderer is served by the WSL backend, which can be
// slow to cold-boot — show a "Connecting to WSL" splash immediately so the
Expand Down Expand Up @@ -300,6 +329,11 @@ const scopedProgram = Effect.scoped(

yield* Effect.addFinalizer(() =>
Effect.gen(function* () {
// electronApp.quit() can race ahead of the layer-scope cascade — stop
// Computer History here the same way we stop backends, so the recorder
// receives SIGTERM instead of surviving or being hard-killed.
const history = yield* ComputerHistoryManager.ComputerHistoryManager;
yield* history.stopDaemon().pipe(Effect.ignore);
const pool = yield* DesktopBackendPool.DesktopBackendPool;
// Stop every backend in the pool, not just the primary. The
// electronApp.quit() path can race ahead of the layer-scope
Expand Down
Loading
Loading