{ "id": "desktop-shell-gui", "name": "desktop-shell-gui", "title": "Design desktop shell for ocswitch", "description": "Define a desktop-shell architecture for ocswitch that adds launch-at-login, tray/menu, notifications, and a GUI control surface without rewriting existing Go core logic into desktop-specific code.", "status": "completed", "dev_type": "docs", "scope": "desktop", "package": null, "priority": "P2", "creator": "Apale", "assignee": "Apale", "createdAt": "2026-04-18", "completedAt": "2026-04-18", "branch": null, "base_branch": "master", "worktree_path": null, "current_phase": 6, "next_action": [ { "phase": 1, "action": "brainstorm" }, { "phase": 2, "action": "research" }, { "phase": 3, "action": "implement" }, { "phase": 4, "action": "check" }, { "phase": 5, "action": "update-spec" }, { "phase": 6, "action": "record-session" } ], "commit": null, "pr_url": null, "subtasks": [], "children": [], "parent": null, "relatedFiles": [ ".trellis/tasks/04-18-desktop-shell-gui/prd.md", "internal/config/config.go", "internal/config/config_test.go", "internal/app/types.go", "internal/app/service.go", "internal/app/service_test.go", "internal/proxy/server.go", "internal/opencode/opencode.go", "internal/cli/root.go", "internal/cli/provider.go", "internal/cli/opencode.go", "internal/cli/doctor.go", "internal/cli/serve.go", "internal/desktop/app.go", "internal/desktop/bindings.go", "internal/desktop/runtime_fallback.go", "internal/desktop/runtime_wails.go", "internal/desktop/http.go", "internal/desktop/http_test.go", "internal/desktop/tray.go", "internal/desktop/notify.go", "internal/desktop/autostart.go", "internal/desktop/autostart_test.go", "internal/desktop/wails.go", "cmd/ocswitch-desktop/main_fallback.go", "cmd/ocswitch-desktop/main_wails.go", "main_wails.go", "frontend/assets.go", "frontend/package.json", "frontend/package-lock.json", "frontend/tsconfig.json", "frontend/tsconfig.node.json", "frontend/vite.config.ts", "frontend/index.html", "frontend/src/main.tsx", "frontend/src/App.tsx", "frontend/src/api.ts", "frontend/src/types.ts", "frontend/src/env.d.ts", "frontend/src/styles.css", "frontend/dist/index.html", "frontend/dist/assets/" ], "notes": "Implemented the next desktop-shell iteration with a real Wails integration path and a formal React + TypeScript frontend. The browser fallback shell now serves the same frontend assets as the Wails build, Linux XDG launch-at-login is implemented for real, and close-to-background behavior is wired through the desktop preference model. Verification passed for `npm run build`, `go test ./...`, and `go test -tags desktop_wails ./...`. `wails build -tags desktop_wails -debug` now reaches native compilation and is blocked only by missing Linux system packages (`pkg-config`, plus GTK/WebKit dev packages). Stable public tray and native notification APIs remain unresolved in the pinned Wails version, so those desktop-only pieces are intentionally limited to lifecycle wiring/placeholders rather than private-API integrations.", "meta": { "desktopShellRequired": true, "recommendedShell": "wails", "recommendedFrontend": "react", "requiredDesktopCapabilities": [ "launch-at-login", "tray-menu", "native-notifications" ], "sharedServiceLayer": "internal/app" } }