The tools have evolved. Have you? https://g4dge7.com/
Go to file
Rob Colbert c705cbd3d9 feat: replace react-ace with @uiw/react-codemirror
react-ace v14 is CommonJS-only with no ESM entry point, making it
fundamentally incompatible with Vite's ESM-first dev server. Every
CJS interop workaround failed. Switched to @uiw/react-codemirror v4.25
which ships proper dual ESM+CJS and works with Vite out of the box.

Changes:
- Remove ace-builds and react-ace dependencies
- Add @uiw/react-codemirror + 16 @codemirror/lang-* packages
- Add @uiw/codemirror-theme-tomorrow-night-blue (closest to ACE's 'tomorrow')
- Add @replit/codemirror-lang-csharp for C# support
- Rewrite EditorPanel.tsx: delete 108 lines of ACE boilerplate
  (?url imports, setModuleUrl, CJS interop hack), replace with
  ~30 lines of clean CodeMirror language extension setup
- Delete vite.d.ts (only needed for ACE ?url import types)
- Remove optimizeDeps.include from vite.config.ts (not needed for CM)
- Add CodeMirror flex layout CSS to index.css

Supported languages: JavaScript/JSX, TypeScript/TSX, Python, JSON,
HTML, CSS, Less, YAML, Markdown, SQL, Java, Go, Rust, C/C++, C#,
PHP, XML. Unsupported types fall back to plain text.

Verified: tsc clean, vite build passes, heartbeat worker intact.
2026-05-12 22:41:31 -04:00
.opencode/plans checkpoint 2026-04-29 18:59:42 -04:00
.vscode cleanup 2026-05-07 00:59:15 -04:00
assets added for placement in UI 2026-05-05 05:28:29 -04:00
docs OpenAI API tool call processing fixes/correctness 2026-05-12 14:39:44 -04:00
gadget-code feat: replace react-ace with @uiw/react-codemirror 2026-05-12 22:41:31 -04:00
gadget-drone Phase 2: ACE Editor integration and file operations 2026-05-12 19:32:58 -04:00
packages Phase 2: ACE Editor integration and file operations 2026-05-12 19:32:58 -04:00
.gitignore feat: abort controller for work order processing 2026-05-12 12:25:17 -04:00
AGENTS.md quick updates 2026-05-08 03:05:01 -04:00
gadget.code-workspace socket message and drone workspace cleanup 2026-05-02 02:46:45 -04:00
package.json created by merging gadget-code and gadget-drone 2026-04-28 09:20:37 -04:00
pnpm-lock.yaml fix: ACE editor integration crash — React 19 compat, Vite ?url pattern, Error Boundary 2026-05-12 21:36:22 -04:00
pnpm-workspace.yaml feat: Implement FILES panel foundation with lazy-loading file tree 2026-05-12 15:12:18 -04:00
README.md agent, tools, toolbox, tool loop, AI environment 2026-05-07 00:10:57 -04:00
terms-of-service.md a pile of small fixes 2026-05-11 07:08:18 -04:00

Gadget Code

A self-hosted Agentic Engineering Platform (AEP) — an IDE that drives autonomous AI agents to perform software engineering work on your behalf, running in your own environment.

Quick Start

# Install dependencies
pnpm install

# Start backend (Terminal 1)
cd gadget-code
pnpm dev:backend

# Start frontend (Terminal 2)
cd gadget-code/frontend
pnpm dev

# Open browser to https://localhost:5174

Projects

Package Role
gadget-code Web service — agentic IDE, browser UI, API server
gadget-drone Worker process — runs the agentic workflow loop in workspace directories
@gadget/ai Shared AI API abstraction — Ollama and OpenAI
@gadget/api Shared TypeScript interfaces — common types across all packages

Architecture

┌──────────────┐     ┌──────────────┐     ┌──────────────┐
│  Browser IDE │────▶│  gadget-code │────▶│ gadget-drone │
│  (React 19)  │◀────│ (Express 5)  │◀────│  (Worker)    │
└──────────────┘     └──────────────┘     └──────────────┘
       │                    │                      │
       │ Socket.IO          │ MongoDB              │ Files
       │ JWT Auth           │ Redis                │ Git

How It Works

  1. User creates a project in the browser IDE
  2. User selects a drone instance to work on the project
  3. User enters a prompt in the Chat Session view
  4. Prompt flows IDE → Web → Drone via Socket.IO
  5. Drone executes the Agentic Workflow Loop (AWL)
  6. Streaming response flows back: thinking → response → tool calls
  7. Results persist in MongoDB as ChatTurn records

AI Provider Setup

Before using AI features, add a provider via CLI:

# Add Ollama provider (no API key needed)
cd gadget-code
pnpm cli provider add "Local Ollama" ollama http://localhost:11434

# Add OpenAI provider
pnpm cli provider add "OpenAI" openai https://api.openai.com $OPENAI_API_KEY

# List providers
pnpm cli provider ls

# Probe provider for models (discovers available models)
pnpm cli provider probe <provider-id>

User Management

# Add a user
pnpm cli user add user@example.com password123 "Display Name"

# Grant admin rights
pnpm cli admin grant user@example.com

# Reset password
pnpm cli user password user@example.com newpassword

Development

Prerequisites

  • Node.js 22+
  • pnpm 10+
  • MongoDB on localhost:27017
  • Redis on localhost:6379
  • SSL certificates in ssl/ directory (for dev servers)

Build

# Build all packages
pnpm -r build

# Build specific package
pnpm --filter @gadget/ai build
pnpm --filter gadget-drone build
pnpm --filter gadget-code build

Run Development Servers

# Backend (gadget-code directory)
cd gadget-code
pnpm dev:backend
# Runs on https://localhost:3443

# Frontend (gadget-code/frontend directory)
cd gadget-code/frontend
pnpm dev
# Runs on https://localhost:5174

# Drone worker (in a workspace directory)
cd ~/my-gadget-workspace
pnpm --filter gadget-drone dev

Testing

# Unit tests (gadget-code directory)
cd gadget-code
pnpm test

# E2E tests with Playwright (requires running dev servers)
npx playwright test tests/e2e/project-manager.test.ts
npx playwright test tests/e2e/chat-session.test.ts

# Seed test data for E2E tests
npx tsx scripts/seed-test-drones.ts

Key Features

Project Manager

  • Create and manage projects
  • Select available drones (filters out offline)
  • View chat session history
  • Create new chat sessions with provider/model selection

Chat Session View

  • Real-time streaming responses
  • Collapsible thinking content
  • Tool call summaries
  • Model/mode selection per session
  • Session statistics (tool calls, file ops, subagents)

Workspace Management

  • Each drone manages a workspace directory
  • Projects cloned into workspace by slug
  • Crash recovery via .gadget/ directory
  • Workspace persistence across restarts

AI API Abstraction

All AI calls route through @gadget/ai. No consumer code imports Ollama or OpenAI SDKs directly.

// Correct: Use the factory
import { createAiApi } from '@gadget/ai';
const ai = createAiApi(providerConfig);

// Incorrect: Don't import SDKs directly
import { Ollama } from 'ollama'; // ❌

See packages/ai/README.md for the full API reference.

Documentation

Monorepo Structure

gadget/
├── packages/ai/           # @gadget/ai — AI API abstraction
├── packages/api/          # @gadget/api — Shared interfaces
├── gadget-code/           # Web service + browser IDE
│   ├── src/               # Backend (Express, Socket.IO, Mongoose)
│   ├── frontend/          # Frontend (React, Vite, Tailwind)
│   └── tests/             # Unit + E2E tests
├── gadget-drone/          # Worker process
│   ├── src/               # Drone implementation
│   └── docs/              # Drone documentation
└── docs/                  # Architecture & protocol docs

License

Apache 2.0 — See LICENSE for details.


Status: Production-ready foundation with complete Chat Session UI
Last Updated: April 29, 2026