S258 Progress Report

Documentation for Sessions

Session 258 — Progress Report

Date: March 22-23, 2026 Goal: Build native Vitto chat into the VSCode/Cursor extension Status: Complete — Extension v0.13.0 released


What We Did (Plain Language)

The Problem

Our Vitto chat currently works in two places:

  1. In the browser — the full Angular web app (gograb-space, gograb-ai)
  2. In Cursor/VSCode — but only as a tiny iframe showing the same browser chat

The browser chat can't do anything inside your editor. It can't read your files, can't run commands, can't see what you're working on. It's like having a smart assistant locked in a phone booth — it can think, but it can't act.

What We Built

We made Vitto a native citizen inside your code editor. Three major deliverables:


1. The Plugin Core Library (the foundation)

What it is: A new shared library (@libs-ai/chat-plugin-core) that contains everything about how Vitto's chat features work — the buttons, commands, suggestions, context awareness, model switching, and more.

Why it matters: Previously, all of this was locked inside Angular (our web framework). Now it's framework-agnostic — meaning the same chat features work in:

The analogy: Think of it like extracting the engine from a specific car model and making it work in any vehicle — cars, boats, planes. Same engine, different chassis.

Technical achievement: 17 plugins migrated, zero breaking changes for existing users, automatic platform filtering (voice plugin won't load in VSCode because there's no microphone API, drag-drop won't load on mobile, etc.).


2. Native Chat Tab in the Extension

What it is: A third tab called "Chat" in the Vitto extension sidebar (alongside the existing "MCP" and "Vitto" tabs). This chat is built natively — not an iframe, not a web wrapper.

Why it matters: Because it runs natively in the extension, it can:

The analogy: Previously, Vitto was looking at your code through a window. Now Vitto is sitting at your desk with you.


3. IDE Context Integration

What it is: When you use the Chat tab, Vitto automatically knows:

Why it matters: Every message you send to Vitto is enriched with this context. You don't have to copy-paste file contents or explain what you're working on — Vitto already sees it.


What Changed (Summary for Stakeholders)

Area Before After
Plugin system Angular-only, 17 plugins in one library Framework-agnostic, works on 5 platforms
VSCode extension 2 tabs (MCP + Vitto iframe) 3 tabs (+ native Chat with IDE tools)
Vitto in editor Can only chat (no file access) Can read, write, search, run commands
Extension version 0.12.4 0.13.0
New NX library — @libs-ai/chat-plugin-core (29 files)

Timeline of Work

Phase What Happened Impact
Research Analyzed all 17 plugins for Angular dependencies. Found only 2 Angular concepts used (Signal, Type). Identified 3 dangerous barrel imports. Confirmed extraction was feasible with minimal risk
Design Proposed capability negotiation system. User chose framework-agnostic core with platform matching. Future platforms (mobile, desktop) get plugins for free
Spec & Review Wrote comprehensive spec. Automated reviewer found 5 critical issues (barrel contamination, esbuild paths, type migration gaps). All fixed. Avoided build failures before writing code
Plugin Core Created NX library, migrated all types and 17 plugins organized by category. Single source of truth for chat features
Angular Adapter Re-export shim + Angular wrapper so existing web apps work unchanged. Zero breaking changes
Extension Infrastructure esbuild path aliases, Chat tab shell, message protocol (13 new types). Extension can now consume shared libraries
Extension Services ContextProvider, IdeToolService (7 tools), AgentSessionService (SSE streaming). Vitto can interact with the IDE
Chat UI Lit component with streaming messages, tool cards, quick actions, slash commands, context bar. User-facing chat experience
Bug Fixes Fixed Angular compiler errors from type mismatches, cleaned 198 leaked .js artifacts, fixed import paths. Stable builds across all surfaces

What's Next (Future Sessions)

Task Priority Why
Backend agent-session endpoint P0 The Chat tab sends messages but the backend endpoint on vitto-api (port 3003) doesn't exist yet. Without it, the chat won't work end-to-end.
Keybindings P1 Cmd+Shift+V to open Chat, context menu "Ask Vitto" on selected code. Convenience features.
Diff preview for writes P1 When Vitto writes a file, show a proper diff view for approval. Currently shows a basic diff.
Plugin Event Bus P2 Let plugins react to each other (e.g., learning plugin tracks which model produced a response). Multiplies plugin value.
End-to-end testing P2 Build, package, install extension, verify Chat tab works with live backend.

Key Decisions Made

  1. Capability negotiation over platform lists — Plugins say what they need, not where they run. Adding a new platform requires zero plugin changes.

  2. Angular barrel avoidance — Three import paths would have pulled Angular into the "zero Angular" library. Solved with local lightweight types.

  3. tsc + esbuild dual path resolution — The extension webview build needs BOTH tsconfig AND esbuild configured for path aliases. Neither alone is sufficient.

  4. Optional category/requires fields — Made backward-compatible so existing plugin objects without these fields still work (resolver applies defaults).

  5. Separate wire vs stored types — Socket data (optional fields) and normalized storage (required fields) should be distinct interfaces to avoid type mismatches.


Files Created/Modified

New library: libs/libs-ai/chat-plugin-core/ (29 TypeScript files)

New extension files:

Modified:


For technical details: See the spec and implementation plan.