{"_id":"@asmostans/daeva","_rev":"7-5f90ae54b70fd6807a4bd9acd16bdc12","name":"@asmostans/daeva","dist-tags":{"latest":"0.2.6"},"versions":{"0.2.0":{"name":"@asmostans/daeva","version":"0.2.0","keywords":["daeva","orchestrator","gpu","pod","ai","mcp","fastify","queue","comfyui","whisper","ocr"],"license":"MIT","_id":"@asmostans/daeva@0.2.0","maintainers":[{"name":"asmolebot","email":"stanme@asmo.bot"}],"homepage":"https://asmo.bot","bugs":{"url":"https://github.com/asmolebot/daeva/issues"},"bin":{"daeva":"dist/src/cli.js","daeva-mcp":"dist/src/mcp-cli.js"},"dist":{"shasum":"f692f7a3323347778c97c10317c39a6fa024d9a7","tarball":"https://registry.npmjs.org/@asmostans/daeva/-/daeva-0.2.0.tgz","fileCount":60,"integrity":"sha512-9JDtf5IzMJAXSNLUhO0HmCSyEJ/MfqDhjxfvodrOIQBGJfbXl2aC9E+AbSAuMf/C1iJZ2uwQNYkhQ5C+HLYeWw==","signatures":[{"sig":"MEQCIBb3lwHgvIKF6oT/IHBMxans1Dc+t6D1XDMNlLM/QvRmAiAlcp8sK16IeEW2M9YnyxGtnshVc80HC+qYSW4C+ImPKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":475730},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"cd9c9cc70b78d4666b8689f75f13c0ad59dfae11","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/src/cli.js","typecheck":"tsc --noEmit -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"asmolebot","email":"stanme@asmo.bot"},"repository":{"url":"git+https://github.com/asmolebot/daeva.git","type":"git"},"_npmVersion":"10.9.7","description":"Daeva — local GPU pod orchestrator for AI workloads","directories":{},"_nodeVersion":"22.22.2","dependencies":{"zod":"^3.24.2","fastify":"^5.2.1","better-sqlite3":"^12.8.0","@fastify/multipart":"^9.4.0","@fastify/rate-limit":"^10.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/daeva_0.2.0_1775678525112_0.8467456868977554","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@asmostans/daeva","version":"0.2.1","keywords":["daeva","orchestrator","gpu","pod","ai","mcp","fastify","queue","comfyui","whisper","ocr"],"license":"MIT","_id":"@asmostans/daeva@0.2.1","maintainers":[{"name":"asmolebot","email":"stanme@asmo.bot"}],"homepage":"https://asmo.bot","bugs":{"url":"https://github.com/asmolebot/daeva/issues"},"bin":{"daeva":"dist/src/cli.js","daeva-mcp":"dist/src/mcp-cli.js"},"dist":{"shasum":"d2d466ca4b6e195b11242cceb4caf6571f57d97a","tarball":"https://registry.npmjs.org/@asmostans/daeva/-/daeva-0.2.1.tgz","fileCount":60,"integrity":"sha512-Mnq1C9c7tAJ0wYDo5FXC6+jV7vsrvyu0z1S1POKdniuwe4mvq60K6eAXqP8HZJWm+bO9hZrGzDl8XcJCjVLm5A==","signatures":[{"sig":"MEYCIQDxAhj2rCK+JZC8Vut9sqoHHkqrOBzbVfphQEi48QJszwIhAK0l7T3KB5Hfr9nVdmq7UABJ4DkbABkOqsSHZsYZKMES","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@asmostans%2fdaeva@0.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":475730},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"e1680a64e93abbc2973f6c5cb520156c30ff3439","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/src/cli.js","typecheck":"tsc --noEmit -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5166d01-365e-4553-a18c-6c9d1469feb1"}},"repository":{"url":"git+https://github.com/asmolebot/daeva.git","type":"git"},"_npmVersion":"11.11.0","description":"Daeva — local GPU pod orchestrator for AI workloads","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.24.2","fastify":"^5.2.1","better-sqlite3":"^12.8.0","@fastify/multipart":"^9.4.0","@fastify/rate-limit":"^10.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/daeva_0.2.1_1775679787061_0.16994908903076755","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@asmostans/daeva","version":"0.2.2","keywords":["daeva","orchestrator","gpu","pod","ai","mcp","fastify","queue","comfyui","whisper","ocr"],"license":"MIT","_id":"@asmostans/daeva@0.2.2","maintainers":[{"name":"asmolebot","email":"stanme@asmo.bot"}],"homepage":"https://asmo.bot","bugs":{"url":"https://github.com/asmolebot/daeva/issues"},"bin":{"daeva":"dist/src/cli.js","daeva-mcp":"dist/src/mcp-cli.js"},"dist":{"shasum":"0f1e71a4a49b7bdef3113b35b60e44fa4340e01f","tarball":"https://registry.npmjs.org/@asmostans/daeva/-/daeva-0.2.2.tgz","fileCount":60,"integrity":"sha512-ZDT+IgZjY3U4YO9kk4CQ15P3PMJHcHjMyrgVmOeFgqXoCUaGjI4VY3Fsr/V+Lz1ccACW5xU44oY3rpeFr2bT6g==","signatures":[{"sig":"MEYCIQCkMw6NRm9EZZaGBpNu+4+L1vu1vWsbhJ5sJrendNi+jAIhAN+wYbCYIoD8Gpj5qeJ7io98eoR6R9g+j1qMnOCGM7US","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@asmostans%2fdaeva@0.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":475730},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"3a6a4d59eee2857ab09aec2bc3cbf077281bbc54","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/src/cli.js","typecheck":"tsc --noEmit -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5166d01-365e-4553-a18c-6c9d1469feb1"}},"repository":{"url":"git+https://github.com/asmolebot/daeva.git","type":"git"},"_npmVersion":"11.11.0","description":"Daeva — local GPU pod orchestrator for AI workloads","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.24.2","fastify":"^5.2.1","better-sqlite3":"^12.8.0","@fastify/multipart":"^9.4.0","@fastify/rate-limit":"^10.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/daeva_0.2.2_1775682223846_0.573986166047201","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@asmostans/daeva","version":"0.2.3","keywords":["daeva","orchestrator","gpu","pod","ai","mcp","fastify","queue","comfyui","whisper","ocr"],"license":"MIT","_id":"@asmostans/daeva@0.2.3","maintainers":[{"name":"asmolebot","email":"stanme@asmo.bot"}],"homepage":"https://asmo.bot","bugs":{"url":"https://github.com/asmolebot/daeva/issues"},"bin":{"daeva":"dist/src/cli.js","daeva-mcp":"dist/src/mcp-cli.js"},"dist":{"shasum":"464a79956e0666e8e27eb50b1b7679fc5aa1007c","tarball":"https://registry.npmjs.org/@asmostans/daeva/-/daeva-0.2.3.tgz","fileCount":60,"integrity":"sha512-lSA9Aoxg95bHdBB8mcsaTUQchBnmBkkRJZpXpQqhHtNhLz1izBEMrVH27qYS5INnCbjKjNHOTY2W3y2Dd8wgVQ==","signatures":[{"sig":"MEYCIQCSUO6vX/G9UsOnBjeNhBuPWrxWAjZ2r4w7dXe8K53NmgIhAMKXViCUGs0qGvEUCWoTrf50E9mvK+3fByU9gKkJShtn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@asmostans%2fdaeva@0.2.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":475730},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"4ac3602ff561071fc4d0509b30016fa9134a20f1","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/src/cli.js","typecheck":"tsc --noEmit -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5166d01-365e-4553-a18c-6c9d1469feb1"}},"repository":{"url":"git+https://github.com/asmolebot/daeva.git","type":"git"},"_npmVersion":"11.11.0","description":"Daeva — local GPU pod orchestrator for AI workloads","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.24.2","fastify":"^5.2.1","better-sqlite3":"^12.8.0","@fastify/multipart":"^9.4.0","@fastify/rate-limit":"^10.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/daeva_0.2.3_1775683099492_0.13857530710985877","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@asmostans/daeva","version":"0.2.4","keywords":["daeva","orchestrator","gpu","pod","ai","mcp","fastify","queue","comfyui","whisper","ocr"],"license":"MIT","_id":"@asmostans/daeva@0.2.4","maintainers":[{"name":"asmolebot","email":"stanme@asmo.bot"}],"homepage":"https://asmo.bot","bugs":{"url":"https://github.com/asmolebot/daeva/issues"},"bin":{"daeva":"dist/src/cli.js","daeva-mcp":"dist/src/mcp-cli.js"},"dist":{"shasum":"df9e17cb6c8eeeaa4068bcf89b0d17278b258611","tarball":"https://registry.npmjs.org/@asmostans/daeva/-/daeva-0.2.4.tgz","fileCount":60,"integrity":"sha512-fNRL+3Q9Fwu7hVFfWHaZZJWERwwXOvBwU9Ib6MAZTTcWGvCLgTsneIyoPM+5knVDL0Eee3S2AkXXpNf42HMjHQ==","signatures":[{"sig":"MEUCIQDYDLKNgvtNjrzrj8uskAkUIcDN35QrDSGROop/ZvWWpwIgBdBQgbQjlZgI2xBCDDqdCZ87Phr1Z87tVB6mlDp1iIQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@asmostans%2fdaeva@0.2.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":486189},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"045868bc1214db6b3b0bfd30d4113cdefc2aed6d","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/src/cli.js","typecheck":"tsc --noEmit -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5166d01-365e-4553-a18c-6c9d1469feb1"}},"repository":{"url":"git+https://github.com/asmolebot/daeva.git","type":"git"},"_npmVersion":"11.11.0","description":"Daeva — local GPU pod orchestrator for AI workloads","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.24.2","fastify":"^5.2.1","better-sqlite3":"^12.8.0","@fastify/multipart":"^9.4.0","@fastify/rate-limit":"^10.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/daeva_0.2.4_1775750070792_0.3711599268441699","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@asmostans/daeva","version":"0.2.5","keywords":["daeva","orchestrator","gpu","pod","ai","mcp","fastify","queue","comfyui","whisper","ocr"],"license":"MIT","_id":"@asmostans/daeva@0.2.5","maintainers":[{"name":"asmolebot","email":"stanme@asmo.bot"}],"homepage":"https://asmo.bot","bugs":{"url":"https://github.com/asmolebot/daeva/issues"},"bin":{"daeva":"dist/src/cli.js","daeva-mcp":"dist/src/mcp-cli.js"},"dist":{"shasum":"68c64318acc409536c034b927bc0325f22bab204","tarball":"https://registry.npmjs.org/@asmostans/daeva/-/daeva-0.2.5.tgz","fileCount":60,"integrity":"sha512-J0l1JdQQzrMOfJYJKt7SQXaaX8wSWGnFDfVxuAkdvqN1ClIqzHcG/r6bLyab/f1QI0h7AhgU11ZgIOHb4Z+XiQ==","signatures":[{"sig":"MEUCIHcEh8NiHkBazUEC61MSUT3HdWfRxnhbx60YEfsSdNBHAiEAxjlcMGc6MEjG/mj2oyV2TgL9WCM9XNhHoUKnnYa22z4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@asmostans%2fdaeva@0.2.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":486200},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","engines":{"node":">=20"},"gitHead":"288aadd6e38352f831638d3e03ee4bdcbe3c089a","scripts":{"dev":"tsx src/cli.ts","test":"vitest run","build":"tsc -p tsconfig.json","start":"node dist/src/cli.js","typecheck":"tsc --noEmit -p tsconfig.json","test:watch":"vitest"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5166d01-365e-4553-a18c-6c9d1469feb1"}},"repository":{"url":"git+https://github.com/asmolebot/daeva.git","type":"git"},"_npmVersion":"11.11.0","description":"Daeva — local GPU pod orchestrator for AI workloads","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^3.24.2","fastify":"^5.2.1","better-sqlite3":"^12.8.0","@fastify/multipart":"^9.4.0","@fastify/rate-limit":"^10.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.3","vitest":"^3.0.8","typescript":"^5.8.2","@types/node":"^22.13.10","@types/better-sqlite3":"^7.6.13"},"_npmOperationalInternal":{"tmp":"tmp/daeva_0.2.5_1775761336440_0.854490848796585","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@asmostans/daeva","version":"0.2.6","description":"Daeva — local GPU pod orchestrator for AI workloads","type":"module","main":"dist/src/index.js","types":"dist/src/index.d.ts","bin":{"daeva":"dist/src/cli.js","daeva-mcp":"dist/src/mcp-cli.js"},"repository":{"type":"git","url":"git+https://github.com/asmolebot/daeva.git"},"homepage":"https://asmo.bot","bugs":{"url":"https://github.com/asmolebot/daeva/issues"},"scripts":{"build":"tsc -p tsconfig.json","dev":"tsx src/cli.ts","start":"node dist/src/cli.js","test":"vitest run","test:watch":"vitest","typecheck":"tsc --noEmit -p tsconfig.json"},"keywords":["daeva","orchestrator","gpu","pod","ai","mcp","fastify","queue","comfyui","whisper","ocr"],"license":"MIT","engines":{"node":">=20"},"dependencies":{"@fastify/multipart":"^9.4.0","@fastify/rate-limit":"^10.3.0","better-sqlite3":"^12.8.0","fastify":"^5.2.1","zod":"^3.24.2"},"devDependencies":{"@types/better-sqlite3":"^7.6.13","@types/node":"^22.13.10","tsx":"^4.19.3","typescript":"^5.8.2","vitest":"^3.0.8"},"publishConfig":{"access":"public"},"gitHead":"fcc6faa183205d275d1d35f2d9121873ae1a3dab","_id":"@asmostans/daeva@0.2.6","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-oq2lqUW67S2Gf4mkpp4ZdAKS8UX9vazeZLyNyFefBp3wmX1kR94mdFkb9fhkXFM30dhVEsysBEoc4F+Q9rCt1A==","shasum":"2d02b52db86ea8036e8645a66f098cb21831387a","tarball":"https://registry.npmjs.org/@asmostans/daeva/-/daeva-0.2.6.tgz","fileCount":61,"unpackedSize":494634,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@asmostans%2fdaeva@0.2.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFcnfv76qwUtXpLGOj58xHQIeXturuNgKxZkRygAhMnUAiEAn2qTfsgheQDDqqEezLTUx2GhgueJQha56IE+fi0YCkA="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a5166d01-365e-4553-a18c-6c9d1469feb1"}},"directories":{},"maintainers":[{"name":"asmolebot","email":"stanme@asmo.bot"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/daeva_0.2.6_1775767242681_0.42932791418322047"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-08T20:02:04.993Z","modified":"2026-04-09T20:40:43.215Z","0.2.0":"2026-04-08T20:02:05.276Z","0.2.1":"2026-04-08T20:23:07.202Z","0.2.2":"2026-04-08T21:03:44.064Z","0.2.3":"2026-04-08T21:18:19.673Z","0.2.4":"2026-04-09T15:54:30.973Z","0.2.5":"2026-04-09T19:02:16.675Z","0.2.6":"2026-04-09T20:40:42.834Z"},"bugs":{"url":"https://github.com/asmolebot/daeva/issues"},"license":"MIT","homepage":"https://asmo.bot","keywords":["daeva","orchestrator","gpu","pod","ai","mcp","fastify","queue","comfyui","whisper","ocr"],"repository":{"type":"git","url":"git+https://github.com/asmolebot/daeva.git"},"description":"Daeva — local GPU pod orchestrator for AI workloads","maintainers":[{"name":"asmolebot","email":"stanme@asmo.bot"}],"readme":"# Daeva\n\nLocal 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.\n\n## Features\n\n- **Pod registry** — register and discover GPU-backed AI services\n- **Job queue** — submit async jobs, route them to capable pods, track results\n- **Exclusivity groups** — automatic stop/switch when pods contend for the same GPU\n- **Pod packages** — portable `pod-package.json` format for distributing pod definitions\n- **Package install** — materialize packages from local paths, Git repos, archives, or registries\n- **MCP server** — expose orchestrator capabilities to AI coding assistants via `daeva-mcp`\n- **Built-in pods** — bundled compatibility manifests for ComfyUI, Whisper, and OCR/Vision\n\n## Install\n\n```bash\nnpm install -g @asmostans/daeva\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/openclaw/daeva.git\ncd daeva\nnpm install\nnpm run build\n```\n\n### Platform installers\n\nPlatform-specific install scripts handle Node.js, Podman, and service setup:\n\n```bash\n# Linux (apt/dnf/pacman)\ncurl -fsSL https://asmo.bot/install-linux.sh | bash\n\n# macOS (Homebrew)\ncurl -fsSL https://asmo.bot/install-macos.sh | bash\n\n# Windows (PowerShell, winget/choco)\nirm https://asmo.bot/install-windows.ps1 | iex\n```\n\nAll scripts support `--dry-run`, `--skip-podman`, `--skip-service`, and more. Run with `--help` for details.\n\n## Quickstart\n\nStart the server:\n\n```bash\ndaeva\n# Listening on http://127.0.0.1:8787\n```\n\nSubmit a job:\n\n```bash\ncurl -X POST http://127.0.0.1:8787/jobs \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"type\": \"transcribe-audio\", \"files\": [{\"source\": \"path\", \"path\": \"/tmp/demo.wav\"}]}'\n```\n\nCheck status:\n\n```bash\ncurl http://127.0.0.1:8787/status\n```\n\nList pods:\n\n```bash\ncurl http://127.0.0.1:8787/pods\n```\n\nInstall a pod package:\n\n```bash\ncurl -X POST http://127.0.0.1:8787/pods/create \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"alias\": \"comfyapi\"}'\n```\n\nThen point Comfy clients at Daeva's proxy instead of raw port 8188:\n\n```bash\nexport DAEVA_BASE=http://127.0.0.1:8787\ncurl \"$DAEVA_BASE/proxy/comfyapi/system_stats\"\n```\n\n## MCP server\n\nDaeva ships a stdio-based MCP server binary for integration with AI coding assistants:\n\n```bash\ndaeva-mcp --base-url http://127.0.0.1:8787\n```\n\nAdd to your MCP client config:\n\n```json\n{\n  \"command\": \"daeva-mcp\",\n  \"args\": [\"--base-url\", \"http://127.0.0.1:8787\"]\n}\n```\n\n## Configuration\n\n| Env var    | CLI flag       | Default       | Description          |\n|------------|----------------|---------------|----------------------|\n| `PORT`     | `--port`       | `8787`        | HTTP listen port     |\n| `HOST`     | `--host`       | `0.0.0.0`     | HTTP listen address  |\n| `DATA_DIR` | `--data-dir`   | `.data`       | Data/storage path    |\n\n## REST API\n\n### Core endpoints\n\n| Method | Path                      | Description                          |\n|--------|---------------------------|--------------------------------------|\n| GET    | `/health`                 | Liveness probe                       |\n| GET    | `/pods`                   | List pods and runtime state          |\n| POST   | `/pods/register`          | Register a new pod manifest          |\n| POST   | `/pods/create`            | Install a pod package by alias       |\n| GET    | `/pods/aliases`           | List registry aliases                |\n| GET    | `/pods/installed`         | List installed packages              |\n| POST   | `/pods/:podId/activate`   | Start or activate a pod explicitly   |\n| POST   | `/pods/:podId/stop`       | Stop a pod explicitly                |\n| POST   | `/pods/swap`              | Swap to a target pod server-side     |\n| POST   | `/jobs`                   | Submit an async job                  |\n| GET    | `/jobs`                   | List jobs                            |\n| GET    | `/jobs/:id`               | Get job state                        |\n| GET    | `/jobs/:id/result`        | Get job result                       |\n\n### Observability\n\n| Method | Path                      | Description                          |\n|--------|---------------------------|--------------------------------------|\n| GET    | `/status`                 | Combined status snapshot             |\n| GET    | `/status/runtime`         | Pod runtime + container inspection   |\n| GET    | `/status/packages`        | Installed packages + registry state  |\n| GET    | `/status/scheduler`       | Queue depth + exclusivity groups     |\n| GET    | `/status/jobs/recent`     | Recent job history                   |\n\n## Pod packages\n\nDaeva uses a portable `pod-package.json` format. Minimal example:\n\n```json\n{\n  \"schemaVersion\": \"1\",\n  \"packageType\": \"pod-package\",\n  \"name\": \"daeva-whisper\",\n  \"version\": \"0.1.0\",\n  \"pod\": {\n    \"id\": \"whisper\",\n    \"nickname\": \"Whisper\",\n    \"description\": \"Speech-to-text pod\",\n    \"manifestVersion\": \"1\",\n    \"capabilities\": [\"speech-to-text\"],\n    \"runtime\": {\n      \"kind\": \"http-service\",\n      \"baseUrl\": \"http://127.0.0.1:8001\",\n      \"submitPath\": \"/transcribe\",\n      \"method\": \"POST\"\n    }\n  }\n}\n```\n\nSee `examples/whisper-pod-package/` for a complete example with Dockerfile, deploy scripts, and directory scaffolding.\n\n### Package sources\n\nPackages can be installed from:\n- **local-file** — local directory with a `pod-package.json`\n- **github-repo** — GitHub `owner/repo` with optional ref and subpath\n- **git-repo** — arbitrary Git URL\n- **uploaded-archive** — `.tar.gz` or `.zip` uploaded directly\n- **registry-index** — delegated lookup from a registry catalog\n\nDuring 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.\n\n## Built-in pods\n\n| Pod ID      | Capabilities                | Description                     |\n|-------------|-----------------------------|---------------------------------|\n| `comfyapi`  | image-generation, vision    | ComfyUI compatibility manifest, prefer the packaged `comfyapi` alias |\n| `whisper`   | speech-to-text              | Whisper transcription           |\n| `ocr-vision`| ocr, vision                 | OCR and visual analysis         |\n\n## Project layout\n\n```\nsrc/server.ts              Fastify app and routes\nsrc/cli.ts                 CLI entry point (daeva binary)\nsrc/mcp-cli.ts             MCP server entry point (daeva-mcp binary)\nsrc/job-manager.ts         Queue + job lifecycle\nsrc/router.ts              Job-to-pod routing\nsrc/pod-controller.ts      Runtime state + exclusivity switching\nsrc/registry.ts            Pod registry + alias resolution\nsrc/adapters.ts            Execution adapter abstraction\nsrc/schemas.ts             Zod schemas for manifests + validation\nsrc/manifests/builtin.ts   Bundled pod definitions\nexamples/                  Pod package examples\nscripts/                   Platform install scripts\n```\n\n## Development\n\n```bash\nnpm install\nnpm run dev          # dev server with tsx\nnpm test             # vitest\nnpm run typecheck    # tsc --noEmit\nnpm run build        # compile to dist/\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}