Harden desktop workflows and computer use handling

This commit is contained in:
Simos Mikelatos
2026-06-19 06:21:13 +00:00
parent 531833bc87
commit 2af3d38afe
13 changed files with 73 additions and 26 deletions

View File

@@ -67,6 +67,7 @@ export default function ComputerUsePanel({ isVisible }: ComputerUsePanelProps) {
);
const refresh = useCallback(async () => {
setError(null);
const [statusResponse, sessionsResponse] = await Promise.all([
authenticatedFetch('/api/computer-use/status'),
authenticatedFetch('/api/computer-use/sessions'),
@@ -87,6 +88,10 @@ export default function ComputerUsePanel({ isVisible }: ComputerUsePanelProps) {
void refresh().catch((err) => setError(err instanceof Error ? err.message : 'Failed to load Computer Use'));
}, [isVisible, refresh]);
const handleRefresh = useCallback(() => {
void refresh().catch((err) => setError(err instanceof Error ? err.message : 'Failed to refresh Computer Use'));
}, [refresh]);
// Poll while an active session exists so agent-driven changes show up live.
useEffect(() => {
if (!isVisible || !selectedSession || selectedSession.status !== 'ready') return;
@@ -273,7 +278,12 @@ export default function ComputerUsePanel({ isVisible }: ComputerUsePanelProps) {
</p>
</div>
<div className="flex flex-wrap items-center gap-2">
<Button variant="outline" size="sm" onClick={() => void refresh()} disabled={isBusy}>
<Button
variant="outline"
size="sm"
onClick={handleRefresh}
disabled={isBusy}
>
<RefreshCw className="h-4 w-4" />
Refresh
</Button>

View File

@@ -59,11 +59,11 @@ function MainContent({
const { currentProject, setCurrentProject } = useTaskMaster() as TaskMasterContextValue;
const { tasksEnabled, isTaskMasterInstalled } = useTasksSettings() as TasksSettingsContextValue;
const [browserUseEnabled, setBrowserUseEnabled] = useState(false);
const [computerUseEnabled, setComputerUseEnabled] = useState(false);
const [computerUseEnabled, setComputerUseEnabled] = useState<boolean | undefined>(undefined);
const shouldShowTasksTab = Boolean(tasksEnabled && isTaskMasterInstalled);
const shouldShowBrowserTab = browserUseEnabled;
const shouldShowComputerTab = computerUseEnabled;
const shouldShowComputerTab = computerUseEnabled === true;
const {
editingFile,
@@ -136,10 +136,10 @@ function MainContent({
}, [loadComputerUseSettings]);
useEffect(() => {
if (!shouldShowComputerTab && activeTab === 'computer') {
if (computerUseEnabled === false && activeTab === 'computer') {
setActiveTab('chat');
}
}, [shouldShowComputerTab, activeTab, setActiveTab]);
}, [computerUseEnabled, activeTab, setActiveTab]);
usePaletteOpsRegister({
openFile: (filePath: string) => {

View File

@@ -24,7 +24,7 @@
"git": "Система контроля версий",
"tasks": "Задачи",
"browser": "Browser",
"computer": "Computer"
"computer": "Компьютер"
},
"status": {
"loading": "Загрузка...",

View File

@@ -24,7 +24,7 @@
"git": "Kaynak Kontrolü",
"tasks": "Görevler",
"browser": "Browser",
"computer": "Computer"
"computer": "Bilgisayar"
},
"status": {
"loading": "Yükleniyor...",

View File

@@ -23,8 +23,8 @@
"files": "文件",
"git": "源代码管理",
"tasks": "任务",
"browser": "Browser",
"computer": "Computer"
"browser": "浏览器",
"computer": "计算机"
},
"status": {
"loading": "加载中...",