NMQ Robot

Technical description

Node 20+, no dependencies. The gateway is a micro-router (`node:http`) with SSE; routes are declared as `{ method, path, auth, rate, requiredRole }`. Tenants, keys, budgets and policies live in `config/`, data in `data/`. The model is swappable (openai-compatible provider, fallback chain or mock).

How to run it

node scripts/serve.mjs                            # gateway (NMQ_PORT, default 8787)
NMQ_LLM_PROVIDER=mock node scripts/serve.mjs       # demo without an API key ($0)
node scripts/smoke.mjs                            # 40/42 in this environment (2 known: selfplay, swarm UDP)

curl -X POST http://127.0.0.1:8800/v1/agents/support/run \
  -H "content-type: application/json" -d '{"input":"Kako da resetujem lozinku?"}'

API

methodpathwhat it does
GET/landing (SR) — this demo
GET/watchthe live agent demo (widget + API)
GET/healthzliveness + version
GET/metricsPrometheus metrics
GET/v1/agentsagent catalogue
GET/v1/agents/:idone agent
POST/v1/agents/:id/runrun an agent
GET/v1/toolstools and risk levels
GET/v1/patternsorchestration patterns

Data

Limits — what this demo does not do

How it is deployed

One Node process behind nginx, a systemd unit, Let’s Encrypt, demo configuration from `demo-config/`. Recipe: E:\poslovi\DEMO-REGISTAR.md.

Smoke in this environment: 40/42 (selfplay and the swarm UDP test fail — known, unrelated to the demo).