Asystent AI kontrolujący komputer poprzez Next.js, E2B Desktop i Azure OpenAI
operator/
├── app/ # Next.js App Router
│ ├── api/ # API Routes
│ │ ├── chat/ # Główny endpoint streamu
│ │ ├── db-query/ # Zapytania do bazy
│ │ ├── db-test/ # Testy bazy
│ │ └── kill-desktop/ # Zabijanie sesji E2B
│ ├── globals.css # Style globalne
│ ├── layout.tsx # Layout aplikacji
│ └── page.tsx # Strona główna
│
├── components/ # Komponenty React
│ ├── ui/ # Komponenty UI (shadcn)
│ ├── message.tsx # Renderowanie wiadomości
│ ├── realtime-message.tsx # Streaming w czasie rzeczywistym
│ ├── input.tsx # Input czatu
│ └── ... # Komponenty cache-busting
│
├── lib/ # Biblioteki i utilities
│ ├── e2b/ # Integracja E2B Desktop
│ │ ├── tool.ts # Definicja narzędzi computer
│ │ └── utils.ts # Utilities E2B
│ ├── use-custom-chat.ts # Hook czatu z flushSync
│ ├── streaming-config.ts # Konfiguracja streamingu
│ └── utils.ts # Ogólne utility
│
├── disable-next-cache.js # Skrypt blokujący cache
├── next.config.ts # Konfiguracja Next.js (NO CACHE)
├── middleware.ts # Middleware cache control
├── package.json # Zależności
└── .env.example # Przykładowa konfiguracja
cd operator
npm installSkopiuj .env.example do .env.local:
cp .env.example .env.localUzupełnij zmienne środowiskowe:
AZURE_OPENAI_ENDPOINT=https://your-endpoint.cognitiveservices.azure.com/
AZURE_OPENAI_API_KEY=twój-klucz-api
AZURE_OPENAI_DEPLOYMENT=gpt-4.1-mini
AZURE_API_VERSION=2024-12-01-preview
E2B_API_KEY=twój-klucz-e2bnpm run dev:no-cache # Development z wyłączonym cache
npm run build:no-cache # Build production bez cache
npm start # Production server- next.config.ts - konfiguracja
no-store - disable-next-cache.js - aktywny bloker
.next/cache - middleware.ts - headers
Cache-Control: no-cache - package.json - skrypty
dev:no-cache,build:no-cache
- flushSync - synchroniczne renderowanie każdej delty tekstu
- JSON Lines - streaming przez fetch (nie WebSocket)
- Node.js runtime - prawdziwy stream (nie Edge)
- Każda delta → natychmiastowe wyświetlenie (zero opóźnień)
- Każdy fragment tekstu → osobny element
- Każda akcja (tool call) → osobny blok
- Wizualne wskaźniki streamingu (migający kursor)
- BLOKOWANIE-CACHE.md - System blokowania cache (PL)
- STREAMING.md - Architektura streamingu
- CHANGES.md - Historia zmian
- Next.js 15 (App Router, Node.js runtime)
- React 19 (flushSync dla synchronicznego renderowania)
- Azure OpenAI (GPT-4.1-mini z function calling)
- E2B Desktop (Sandbox z GUI dla computer use)
- TypeScript + Tailwind CSS
- shadcn/ui (komponenty UI)
- User → wpisuje prompt w interfejsie czatu
- Frontend →
use-custom-chat.tswysyła request do/api/chat - Backend → Azure OpenAI generuje response z tool calls
- E2B Desktop → wykonuje akcje computer (screenshot, click, type)
- Streaming → każda delta tekstu/akcji →
flushSync→ natychmiastowy render - No Cache → każde odświeżenie strony = świeży stan (zero cache)
app/api/chat/route.ts
Przed produkcją:
- Przenieś klucze do zmiennych środowiskowych
- Użyj
.env.local(nigdy nie commituj!) - Zaktualizuj kod aby używał
process.env.*
Główne paczki:
next- frameworkreact+react-dom- UI (flushSync!)openai- Azure OpenAI SDK@e2b/code-interpreter- E2B Desktopai- Vercel AI SDK (utils)tailwindcss- styling
Jeśli streaming nie działa:
- Sprawdź czy używasz
npm run dev:no-cache - Zweryfikuj
disable-next-cache.js(powinien być aktywny) - Zobacz logi w konsoli przeglądarki
- Upewnij się że folder
.next/cacheNIE istnieje
Jeśli fragmenty się łączą:
- Sprawdź
use-custom-chat.ts- musi używaćflushSync - Zobacz
realtime-message.tsx- każdy render powinien być natychmiastowy - Zweryfikuj że backend wysyła oddzielne eventy (JSON Lines)
Kod aplikacji - sprawdź LICENSE jeśli istnieje.
Wersja: 1.0
Data: Październik 2025
Autor: Operator AI Project