add resizing
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
# Server CLAUDE.md
|
||||
|
||||
Clojure backend for Spiceflow.
|
||||
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
clj -M:dev # REPL with dev tools
|
||||
clj -M:run # Production mode
|
||||
clj -M:test # Unit tests
|
||||
clj -M:test --focus ns # Specific namespace
|
||||
```
|
||||
|
||||
**REPL commands** (in `dev/user.clj`):
|
||||
```clojure
|
||||
(go) ; Start server + auto-reload
|
||||
(reset) ; Reload code + restart
|
||||
(stop) ; Stop server
|
||||
(reload) ; Reload code only
|
||||
(reload-all) ; Force reload all namespaces
|
||||
```
|
||||
|
||||
## Directory Structure
|
||||
|
||||
```
|
||||
server/
|
||||
├── src/spiceflow/
|
||||
│ ├── core.clj # Entry point, Mount states
|
||||
│ ├── config.clj # Configuration (aero)
|
||||
│ ├── db/ # Database layer
|
||||
│ ├── adapters/ # CLI integrations
|
||||
│ ├── api/ # HTTP & WebSocket
|
||||
│ ├── session/ # Session lifecycle
|
||||
│ ├── push/ # Push notifications
|
||||
│ └── terminal/ # Terminal diff caching
|
||||
├── dev/user.clj # REPL helpers
|
||||
├── test/ # Unit tests
|
||||
├── resources/config.edn # Configuration
|
||||
└── deps.edn # Dependencies
|
||||
```
|
||||
|
||||
## Mount States (start order)
|
||||
|
||||
1. `store` - SQLite database
|
||||
2. `push` - Push notification store
|
||||
3. `server` - Jetty HTTP server
|
||||
|
||||
## Namespaces
|
||||
|
||||
| Namespace | Purpose |
|
||||
|-----------|---------|
|
||||
| `spiceflow.core` | Entry point, Mount states |
|
||||
| `spiceflow.config` | Configuration |
|
||||
| `spiceflow.db.protocol` | DataStore protocol |
|
||||
| `spiceflow.db.sqlite` | SQLite implementation |
|
||||
| `spiceflow.db.memory` | In-memory (tests) |
|
||||
| `spiceflow.adapters.protocol` | AgentAdapter protocol |
|
||||
| `spiceflow.adapters.claude` | Claude Code CLI |
|
||||
| `spiceflow.adapters.opencode` | OpenCode CLI |
|
||||
| `spiceflow.adapters.tmux` | Tmux terminal |
|
||||
| `spiceflow.api.routes` | HTTP handlers |
|
||||
| `spiceflow.api.websocket` | WebSocket management |
|
||||
| `spiceflow.session.manager` | Session lifecycle |
|
||||
|
||||
## Configuration (aero)
|
||||
|
||||
```edn
|
||||
{:server {:port #long #or [#env SPICEFLOW_PORT 3000]
|
||||
:host #or [#env SPICEFLOW_HOST "0.0.0.0"]}
|
||||
:database {:type :sqlite
|
||||
:dbname #or [#env SPICEFLOW_DB "spiceflow.db"]}}
|
||||
```
|
||||
|
||||
Access: `(get-in config/config [:server :port])`
|
||||
|
||||
## Conventions
|
||||
|
||||
| Thing | Convention |
|
||||
|-------|------------|
|
||||
| Files | kebab-case |
|
||||
| Namespaces | kebab-case |
|
||||
| Functions | kebab-case |
|
||||
| Protocols | PascalCase |
|
||||
| Records | PascalCase |
|
||||
| Private vars | `^:private` |
|
||||
|
||||
Thread safety: `ConcurrentHashMap` for processes, `atom` for simpler state.
|
||||
Reference in New Issue
Block a user