init commit
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
# Spiceflow
|
||||
|
||||
AI Session Orchestration PWA for monitoring and interacting with Claude Code and OpenCode sessions.
|
||||
|
||||
> "The spice must flow."
|
||||
|
||||
## Architecture
|
||||
|
||||
```
|
||||
┌─────────────────┐ ┌─────────────────────────┐ ┌─────────────────┐
|
||||
│ Claude Code │◀───▶│ Spiceflow Server │◀───▶│ PWA Client │
|
||||
│ (CLI) │ │ (Clojure) │ │ (Svelte) │
|
||||
└─────────────────┘ │ │ └─────────────────┘
|
||||
│ ┌─────────────────┐ │
|
||||
┌─────────────────┐ │ │ SQLite + DB │ │
|
||||
│ OpenCode │◀───▶│ │ Abstraction │ │
|
||||
│ (CLI) │ │ │ WebSocket/SSE │ │
|
||||
└─────────────────┘ │ └─────────────────┘ │
|
||||
└─────────────────────────┘
|
||||
```
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Clojure CLI (deps.edn)
|
||||
- Node.js 18+ and pnpm
|
||||
- SQLite
|
||||
|
||||
### Server
|
||||
|
||||
```bash
|
||||
cd server
|
||||
clj -M:run
|
||||
```
|
||||
|
||||
The server will start on http://localhost:3000.
|
||||
|
||||
### Client
|
||||
|
||||
```bash
|
||||
cd client
|
||||
pnpm install
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
The client dev server will start on http://localhost:5173 with proxy to the API.
|
||||
|
||||
### Production Build
|
||||
|
||||
```bash
|
||||
# Build client
|
||||
cd client
|
||||
pnpm build
|
||||
|
||||
# Run server (serves static files from client/build)
|
||||
cd ../server
|
||||
clj -M:run
|
||||
```
|
||||
|
||||
## API Endpoints
|
||||
|
||||
| Method | Path | Description |
|
||||
|--------|------|-------------|
|
||||
| GET | `/api/health` | Health check |
|
||||
| GET | `/api/sessions` | List all tracked sessions |
|
||||
| POST | `/api/sessions` | Create/import a session |
|
||||
| GET | `/api/sessions/:id` | Get session with messages |
|
||||
| DELETE | `/api/sessions/:id` | Delete a session |
|
||||
| POST | `/api/sessions/:id/send` | Send message to session |
|
||||
| GET | `/api/discover/claude` | Discover Claude Code sessions |
|
||||
| GET | `/api/discover/opencode` | Discover OpenCode sessions |
|
||||
| POST | `/api/import` | Import a discovered session |
|
||||
| WS | `/api/ws` | WebSocket for real-time updates |
|
||||
|
||||
## Development
|
||||
|
||||
### Running Tests
|
||||
|
||||
```bash
|
||||
# Server tests
|
||||
cd server
|
||||
clj -M:test
|
||||
|
||||
# Client type checking
|
||||
cd client
|
||||
pnpm check
|
||||
```
|
||||
|
||||
### Project Structure
|
||||
|
||||
```
|
||||
spiceflow/
|
||||
├── server/ # Clojure backend
|
||||
│ ├── deps.edn
|
||||
│ ├── src/spiceflow/
|
||||
│ │ ├── core.clj # Entry point
|
||||
│ │ ├── config.clj # Configuration
|
||||
│ │ ├── db/
|
||||
│ │ │ ├── protocol.clj # DataStore protocol
|
||||
│ │ │ ├── sqlite.clj # SQLite implementation
|
||||
│ │ │ └── memory.clj # In-memory impl for tests
|
||||
│ │ ├── adapters/
|
||||
│ │ │ ├── protocol.clj # AgentAdapter protocol
|
||||
│ │ │ ├── claude.clj # Claude Code adapter
|
||||
│ │ │ └── opencode.clj # OpenCode adapter
|
||||
│ │ ├── api/
|
||||
│ │ │ ├── routes.clj # REST endpoints
|
||||
│ │ │ └── websocket.clj # WebSocket handlers
|
||||
│ │ └── session/
|
||||
│ │ └── manager.clj # Session lifecycle
|
||||
│ └── test/spiceflow/
|
||||
│
|
||||
├── client/ # SvelteKit PWA
|
||||
│ ├── src/
|
||||
│ │ ├── routes/ # SvelteKit routes
|
||||
│ │ └── lib/
|
||||
│ │ ├── api.ts # API client
|
||||
│ │ ├── stores/ # Svelte stores
|
||||
│ │ └── components/ # UI components
|
||||
│ └── static/ # PWA assets
|
||||
│
|
||||
└── README.md
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Server
|
||||
|
||||
Configuration via `resources/config.edn` or environment variables:
|
||||
|
||||
| Variable | Default | Description |
|
||||
|----------|---------|-------------|
|
||||
| `SPICEFLOW_PORT` | 3000 | Server port |
|
||||
| `SPICEFLOW_HOST` | 0.0.0.0 | Server host |
|
||||
| `SPICEFLOW_DB` | spiceflow.db | SQLite database path |
|
||||
| `CLAUDE_SESSIONS_DIR` | ~/.claude/projects | Claude sessions directory |
|
||||
| `OPENCODE_CMD` | opencode | OpenCode command |
|
||||
|
||||
### PWA Icons
|
||||
|
||||
Generate PWA icons from the SVG favicon:
|
||||
|
||||
```bash
|
||||
cd client/static
|
||||
# Use a tool like svg2png or imagemagick to generate:
|
||||
# - pwa-192x192.png
|
||||
# - pwa-512x512.png
|
||||
# - apple-touch-icon.png (180x180)
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
Reference in New Issue
Block a user