7cb7112ed6
- Remove duplicate 'prepare' key in package.json
- Allow default exports in rslib.config.ts
- Relax noExplicitAny and noNonNullAssertion in test files
- Auto-fix 17 files (imports, formatting)
小橘 🍊(NEKO Team)
@uncaged/nerve-daemon
The observation engine runtime for nerve — runs senses, routes signals, schedules reflexes, and manages workflows.
Architecture
| Module | Responsibility |
|---|---|
| Kernel | Top-level orchestrator — spawns workers, wires up signal bus, scheduler, and workflow manager. Supports hot reload and graceful shutdown. |
| Sense Runtime | Per-sense SQLite database (via node:sqlite + Drizzle ORM), migration runner, peer DB read access. |
| Sense Worker | Forked child process — one per sense group. Runs compute functions in isolation. |
| Signal Bus | In-memory pub/sub. Sense computes emit signals; reflexes and workflows subscribe. |
| Reflex Scheduler | Drives compute triggers — interval timers, signal-based events, throttle/coalesce logic. |
| Workflow Manager | Concurrency control (drop/queue), thread lifecycle, worker process management (RFC-002). |
| Log Store | Structured log storage in WAL-mode SQLite. Supports retention policies, archival to JSONL, and workflow run tracking. |
| Blob Store | Binary artifact storage for workflow outputs. |
| File Watcher | Watches nerve.yaml and sense files for hot reload. |
| Daemon IPC | Unix socket server for CLI ↔ daemon communication. |
Key Design Decisions
- One worker process per sense group — isolation between groups, shared compute within a group
node:sqlite(DatabaseSync) — zero native addons, WAL mode, built into Node.js ≥ 22.5- Throttle + coalesce — if compute is in-flight, at most one pending trigger is queued (no unbounded accumulation)
- Log ≠ Signal — logs are queryable data assets but cannot trigger reflexes (prevents feedback loops)
Usage
The daemon is typically started via the CLI (nerve daemon start), but can be used programmatically:
import { createKernel } from "@uncaged/nerve-daemon";
const kernel = await createKernel(nerveRoot);
await kernel.ready;
// Trigger a sense manually
kernel.triggerSense("cpu-usage");
// Check health
const health = kernel.getHealth();
// Graceful shutdown
await kernel.stop();
Install
pnpm add @uncaged/nerve-daemon
Requires Node.js ≥ 22.5 (for node:sqlite).
License
MIT