evOo-local/CLAUDE-RESUME-NOW.md
Ingo Wagner f1ac32fd61 fix(web): wire browser-preview-context and extend RakazoDesktop interface
- Create browser-preview-context.ts (missing file causing Vite crash)
- Add browserPreview property to RakazoDesktop contract
- Fix executor-shell-guard.ts non-null assertion for body[cursor]
2026-09-23 09:42:24 +00:00

4.8 KiB

CLAUDE RESUME — 2026-09-22 (~10:00 Vienna)

Completed ✅

  • ✅ Emoji-first Onboarding.tsx (5 steps: emoji → preferences → language → integrations → bot)
    • Shape selector (8 shapes), Color picker (12 GrokColors), Accessory (9), Pose (8)
    • User preferences (name, timezone, hobbies, work style, communication)
    • Language step (9 locales → localStorage rakazo.uiLocale)
    • avatarValue ({color}::shape_{index}) → bot color field on create
    • Bot instructions enriched with user context
  • ✅ onboarding-discovery.ts, OnboardingDiscoveryShell.tsx updated
  • ✅ ui-web exports: GROK_COLOR_LIST, SHIPPED_SHAPE_KEYS, GrokColorDef, GROK_SHAPES
  • ✅ executor.ts split: 4697 → 4231 lines (18 module files)
  • ✅ pi-runtime.ts split: 1726 → 1102 lines
  • ✅ TypeScript: 0 errors across apps/web AND packages/adapters
  • ✅ Graphile worker fixed: GraphileJobWorkerHost.start() now called in app.ts (was never started for graphile jobs, only for in-memory)
  • ✅ Graphile schema: graphile_worker schema created via graphile-worker schema-only
  • ✅ Sandbox supervisor: Built rakazo/sandbox-supervisor:local from source (was using wrong rakazo/app:edge image)
  • ✅ Computer image: Built rakazo/computer:local from source
  • ✅ Smart model routing: estimateMessageComplexity() + resolveSmartModelSelection() implemented
    • Fast model (3B) for short messages (<80 chars)
    • Strong model (30B) for complex/long messages (>500 chars)
    • Medium routing for keyword-based detection
  • ✅ Model credential: local provider connected with empty apiKey allowed
  • ✅ PRs merged: All PRs 36-58 merged to main, stale branches cleaned

Infrastructure fixes

  • ✅ GraphileJobWorkerHost: Added else if (jobPool) branch in app.ts to start the worker
  • ✅ Sandbox provider: SANDBOX_PROVIDER=docker with proper supervisor at port 7091
  • ✅ Computer provisioning: Docker containers spin up successfully (verified: rakazo-bot-cmuber4og000561yrhm2q81c5 running)
  • ✅ DATA_DIR path: Supervisor mounted with correct host path for home directory validation

Completed ✅

  • ✅ Prisma updateMany Bug Fixed! Root cause: toolCallBudgetCount and toolCallBudgetExceeded fields missing from Run model in Prisma schema. Added to schema.prisma, migrated DB, regenerated Prisma client. Runs now complete successfully.
  • ✅ E2E Flow VERIFIED! Bot responds end-to-end:
    • User: "Hello! Can you hear me?"
    • Bot: "I'm here! It looks like we've been going back and forth a bit — but yes, I can definitely hear you. How can I help? 😊"
    • Full pipeline: Message → Graphile job → Worker → Computer provision → Model call → Response → Run completed

Architektur-Status

  • API: Port 3100, Graphile worker active, consuming jobs
  • Sandbox supervisor: Port 7091, rakazo/sandbox-supervisor:local, DATA_DIR mounted correctly
  • Computer: rakazo/computer:local image built and running
  • Smart routing: Fast (3B) → Strong (30B) model selection based on message complexity
  • Known error: events.ts:996 — Prisma updateMany in finalizeRunOnce throws "Invalid invocation" despite all fields existing in schema

Architektur-Status

  • API: Port 3100, Graphile worker active ✅
  • Sandbox supervisor: Port 7091, rakazo/sandbox-supervisor:local ✅
  • Computer: rakazo/computer:local running ✅
  • Smart routing: Fast (3B) → Strong (30B) ✅
  • E2E: Bot responds to user messages ✅

Status

  • Working tree: clean, synced to origin/main
  • PR 66 ✅ fix(messaging): preserve group inbound media URLs in fan-out — merged
  • PR 67 ✅ fix(adapters): poll run lease during silent runtime work — merged
  • PR 69 ✅ fix(teamchat): retry delegated replies when external origin is missing — merged
  • 0 stale branches, 0 draft PRs

Shell.tsx TypeScript fixes

  • ✅ Shell.tsx TS errors fixed (PR #71 introduced type mismatches)
    • ConversationBotPicker now receives bots: Bot[] (not SpaceBot[])
    • conversationSidebarGroups render simplified — only bots, removed dead GroupAvatar branch
    • projectSidebarGroups render uses GroupAvatar with proper members access
    • All TypeScript errors resolved (0 errors across apps/web and packages/adapters)
  • ✅ browser-preview-context.ts created (was missing from repo, caused Vite crash)
    • Implements browserPreviewActivity subject with .subscribe(), .set(), .snapshot(), .clear()
    • Multi-agent cursor tracking for browser preview panels
  • ✅ RakazoDesktop interface extended with optional browserPreview property
    • Contract update in packages/contracts/src/desktop.ts
    • Types: navigate, reload, getState, onNavigate, onLoadingProgress, devServer
  • ✅ executor-shell-guard.ts TS fix: body[cursor]! non-null assertion