Package Exports
- @asmostans/daeva
- @asmostans/daeva/dist/src/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@asmostans/daeva) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Daeva
Local GPU pod orchestrator for AI workloads. One process to register, schedule, and manage containerized AI services (pods) on a single host with shared GPU resources.
Features
- Pod registry — register and discover GPU-backed AI services
- Job queue — submit async jobs, route them to capable pods, track results
- Exclusivity groups — automatic stop/switch when pods contend for the same GPU
- Pod packages — portable
pod-package.jsonformat for distributing pod definitions - Package install — materialize packages from local paths, Git repos, archives, or registries
- MCP server — expose orchestrator capabilities to AI coding assistants via
daeva-mcp - Built-in pods — sample definitions for ComfyUI, Whisper, and OCR/Vision
Install
npm install -g @asmostans/daevaOr from source:
git clone https://github.com/openclaw/daeva.git
cd daeva
npm install
npm run buildPlatform installers
Platform-specific install scripts handle Node.js, Podman, and service setup:
# Linux (apt/dnf/pacman)
curl -fsSL https://asmo.bot/install-linux.sh | bash
# macOS (Homebrew)
curl -fsSL https://asmo.bot/install-macos.sh | bash
# Windows (PowerShell, winget/choco)
irm https://asmo.bot/install-windows.ps1 | iexAll scripts support --dry-run, --skip-podman, --skip-service, and more. Run with --help for details.
Quickstart
Start the server:
daeva
# Listening on http://127.0.0.1:8787Submit a job:
curl -X POST http://127.0.0.1:8787/jobs \
-H 'Content-Type: application/json' \
-d '{"type": "transcribe-audio", "files": [{"source": "path", "path": "/tmp/demo.wav"}]}'Check status:
curl http://127.0.0.1:8787/statusList pods:
curl http://127.0.0.1:8787/podsInstall a pod package:
curl -X POST http://127.0.0.1:8787/pods/create \
-H 'Content-Type: application/json' \
-d '{"alias": "whisper"}'MCP server
Daeva ships a stdio-based MCP server binary for integration with AI coding assistants:
daeva-mcp --base-url http://127.0.0.1:8787Add to your MCP client config:
{
"command": "daeva-mcp",
"args": ["--base-url", "http://127.0.0.1:8787"]
}Configuration
| Env var | CLI flag | Default | Description |
|---|---|---|---|
PORT |
--port |
8787 |
HTTP listen port |
HOST |
--host |
0.0.0.0 |
HTTP listen address |
DATA_DIR |
--data-dir |
.data |
Data/storage path |
REST API
Core endpoints
| Method | Path | Description |
|---|---|---|
| GET | /health |
Liveness probe |
| GET | /pods |
List pods and runtime state |
| POST | /pods/register |
Register a new pod manifest |
| POST | /pods/create |
Install a pod package by alias |
| GET | /pods/aliases |
List registry aliases |
| GET | /pods/installed |
List installed packages |
| POST | /pods/:podId/activate |
Start or activate a pod explicitly |
| POST | /pods/:podId/stop |
Stop a pod explicitly |
| POST | /pods/swap |
Swap to a target pod server-side |
| POST | /jobs |
Submit an async job |
| GET | /jobs |
List jobs |
| GET | /jobs/:id |
Get job state |
| GET | /jobs/:id/result |
Get job result |
Observability
| Method | Path | Description |
|---|---|---|
| GET | /status |
Combined status snapshot |
| GET | /status/runtime |
Pod runtime + container inspection |
| GET | /status/packages |
Installed packages + registry state |
| GET | /status/scheduler |
Queue depth + exclusivity groups |
| GET | /status/jobs/recent |
Recent job history |
Pod packages
Daeva uses a portable pod-package.json format. Minimal example:
{
"schemaVersion": "1",
"packageType": "pod-package",
"name": "daeva-whisper",
"version": "0.1.0",
"pod": {
"id": "whisper",
"nickname": "Whisper",
"description": "Speech-to-text pod",
"manifestVersion": "1",
"capabilities": ["speech-to-text"],
"runtime": {
"kind": "http-service",
"baseUrl": "http://127.0.0.1:8001",
"submitPath": "/transcribe",
"method": "POST"
}
}
}See examples/whisper-pod-package/ for a complete example with Dockerfile, deploy scripts, and directory scaffolding.
Package sources
Packages can be installed from:
- local-file — local directory with a
pod-package.json - github-repo — GitHub
owner/repowith optional ref and subpath - git-repo — arbitrary Git URL
- uploaded-archive —
.tar.gzor.zipuploaded directly - registry-index — delegated lookup from a registry catalog
During install, Daeva now runs package install hooks, creates declared host directories, and persists resolved host-path template variables (for example MODELS_DIR, INPUT_DIR, HOST_DIR_1) alongside installed package metadata.
Built-in pods
| Pod ID | Capabilities | Description |
|---|---|---|
comfyapi |
image-generation, vision | ComfyUI/comfyapi backend |
whisper |
speech-to-text | Whisper transcription |
ocr-vision |
ocr, vision | OCR and visual analysis |
Project layout
src/server.ts Fastify app and routes
src/cli.ts CLI entry point (daeva binary)
src/mcp-cli.ts MCP server entry point (daeva-mcp binary)
src/job-manager.ts Queue + job lifecycle
src/router.ts Job-to-pod routing
src/pod-controller.ts Runtime state + exclusivity switching
src/registry.ts Pod registry + alias resolution
src/adapters.ts Execution adapter abstraction
src/schemas.ts Zod schemas for manifests + validation
src/manifests/builtin.ts Bundled pod definitions
examples/ Pod package examples
scripts/ Platform install scriptsDevelopment
npm install
npm run dev # dev server with tsx
npm test # vitest
npm run typecheck # tsc --noEmit
npm run build # compile to dist/License
MIT