211 lines
5.9 KiB
Markdown
211 lines
5.9 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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.
|
|
|
|
```typescript
|
|
// 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`](./packages/ai/README.md) for the full API reference.
|
|
|
|
## Documentation
|
|
|
|
- [Architecture Overview](./docs/architecture-stats.md)
|
|
- [Socket Protocol](./docs/socket-protocol.md)
|
|
- [Workspace Management](./docs/gadget-workspace.md)
|
|
- [Drone Documentation](./gadget-drone/docs/gadget-drone.md)
|
|
- [UI Design Guide](./gadget-code/docs/ui-design-guide.md)
|
|
|
|
## 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](./LICENSE) for details.
|
|
|
|
---
|
|
|
|
**Status:** Production-ready foundation with complete Chat Session UI
|
|
**Last Updated:** April 29, 2026
|