omnius 1.0.609 → 1.0.610

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -37,8 +37,10 @@ omnius tray install
37
37
  omnius tray status
38
38
  ```
39
39
 
40
- The per-login indicator observes the daemon over loopback and provides health,
41
- dashboard, logs, and explicit daemon controls. See the
40
+ The per-login indicator observes the daemon over loopback, checks health and npm
41
+ updates every 10 seconds, and provides dashboard, logs, and explicit daemon
42
+ controls. Its version row is passive when current and becomes a verified global
43
+ update action only when a newer exact semver is available. See the
42
44
  [system tray guide](docs/guides/system-tray.md), including Ubuntu/GNOME setup.
43
45
 
44
46
  ## Agent Discovery
@@ -95,7 +97,14 @@ omnius serve
95
97
  /help command help
96
98
  /model select or inspect the active model
97
99
  /endpoint select or configure local, cloud, sponsor, or peer endpoints
100
+ /title name the current session
98
101
  /realtime toggle short ASR/TTS-oriented conversation mode
102
+ /voice choose TTS, voice-clone, voicechat, and ASR controls
103
+ /voice asr select, set up, activate, or test an exact ASR engine/model
104
+ /indicator reconcile the daemon, then start the native tray indicator
105
+ /update check force an update availability check
106
+ /update quick run the verified global update with live TUI progress
107
+ /update full run the full clean/build/install/restart verification flow
99
108
  /broker inspect model broker, RAM/VRAM thresholds, and loaded models
100
109
  /sponsor expose local or upstream capacity to peers
101
110
  /cohere participate in distributed COHERE inference
@@ -115,9 +124,11 @@ omnius serve
115
124
  | Bring your own inference | [Provider protocols and keys](docs/guides/bring-your-own-inference.md) |
116
125
  | Tools and web search | [Tool discovery and invocation](docs/guides/tools-and-web-search.md) |
117
126
  | Terminal workflows | [TUI workflows](docs/guides/tui-workflows.md), [Slash commands](docs/reference/slash-commands.md) |
127
+ | Web dashboard | [All dashboard routes, workspaces, sessions, Voice, Generate, updates, and observability](docs/guides/dashboard.md) |
118
128
  | REST daemon | [REST reference](docs/reference/rest-api.md), [REST quickref](docs/rest/QUICKREF.md), [OpenAPI source](docs/rest/openapi-source.md) |
119
129
  | System tray | [Cross-platform tray and Ubuntu setup](docs/guides/system-tray.md) |
120
130
  | Realtime voice chat | [Realtime guide](docs/guides/realtime.md) |
131
+ | TTS and selectable ASR | [Voice/vision REST guide](docs/rest/endpoints/voice-vision.md), [Dashboard Voice page](docs/guides/dashboard.md#voice-and-asr) |
121
132
  | Sponsor and COHERE mesh | [Sponsor and COHERE guide](docs/guides/sponsor-and-cohere.md) |
122
133
  | Telegram bridge | [Telegram guide](docs/guides/telegram.md) |
123
134
  | Media generation | [Media guide](docs/guides/media-generation.md) |
@@ -126,6 +137,40 @@ omnius serve
126
137
  | Architecture | [Architecture overview](docs/architecture/overview.md) |
127
138
  | Agent-explorable docs | [Agent memory docs index](docs/agent-memory/INDEX.md) |
128
139
 
140
+ ## Web Dashboard
141
+
142
+ `omnius serve` exposes a self-contained operational dashboard at
143
+ `http://127.0.0.1:11435/`. All pages use the same compact NOCLIP-derived style
144
+ tokens and responsive observability-card grid, while keeping workspace, model,
145
+ session, run, service, and update state visible instead of hiding it behind
146
+ decorative pages.
147
+
148
+ | Route | Purpose |
149
+ | --- | --- |
150
+ | `/chat` (`/`) | Stateful browser and imported TUI chats, full-history hydration, live run recovery, attachments, files, plan/context, and steering check-ins |
151
+ | `/agent` | One-shot task contracts, personas/profiles, tool/isolation controls, run records, output, and events |
152
+ | `/voice` | Voicechat, exact TTS model/options, clone references, ASR engine/model setup and activation, real-file ASR testing, transcript, and TTS testing |
153
+ | `/generate` | Image/video/audio/music jobs, AV analysis, model/store controls, relocation progress, and global gallery |
154
+ | `/projects` | Scan, register, rename, activate, and remove workspaces |
155
+ | `/dashboard` (`/jobs`) | CPU/RAM/GPU/VRAM, processes, scheduler, services, usage, and verified updates |
156
+ | `/activity` | Live run/tool/memory/engine event observability |
157
+ | `/discover` | Agent bootstrap, capability intent search, and exact entry expansion |
158
+ | `/settings` (`/config`) | Models, endpoints, voice, runtime, access, keys, appearance, and services |
159
+
160
+ The clickable sidebar brand opens the registered-workspace picker. Workspace
161
+ selection scopes preferences, files, session history, chat pins/folders/search,
162
+ and agent defaults. Chats, TUI visual history, and one-shot agent runs are
163
+ distinct records: `/quit`, `/exit`, manual-save noise, empty histories, and
164
+ duplicate TUI transcripts are rejected from the chat projection; selecting a
165
+ valid session loads its full history and in-flight status from the daemon.
166
+
167
+ The dashboard checks for updates every 10 seconds. An update button appears only
168
+ for a newer exact semver and drives `POST /v1/update`, then polls the durable
169
+ transaction until the global npm package, resolved executable, restarted daemon,
170
+ package/boot hashes, and tray runtime are reconciled. See the
171
+ [complete dashboard guide](docs/guides/dashboard.md) for state ownership,
172
+ security, page-by-page behavior, and exact REST flows.
173
+
129
174
  ## Shared Media Dependencies
130
175
 
131
176
  Image, video, audio, and music generation share a **single, system-wide dependency store** instead of duplicating heavy runtimes per project or per Telegram group.
@@ -175,6 +220,11 @@ The same surface drives the **Generate** tab in the web UI (`http://127.0.0.1:11
175
220
 
176
221
  ## Recent Highlights
177
222
 
223
+ - The dashboard now has nine route-level operational surfaces with shared modular observability grids, a searchable workspace picker, and project-scoped navigation state.
224
+ - Chat history unifies persisted browser sessions with quality-filtered TUI transcripts, rejects command/noise sessions such as `/quit`, hydrates full history on selection, and exposes summaries, follow-up suggestions, reactive live deltas, and canonical deletion.
225
+ - `/indicator` reconciles daemon ownership and health before launching the tray; the tray polls every 10 seconds and turns its version row into a retryable verified-update action only when an update exists.
226
+ - Dashboard, tray, and TUI update actions now share an exact-version global transaction with live phase/output and package, executable, daemon, hash, restart, and tray verification.
227
+ - TTS exposes GLaDOS, Overwatch, `luxtts:announcer-testchamber03`, and configurable Voicebox models; ASR independently exposes Whisper, managed `transcribe-cli`, Nemotron readiness, and pinned Microsoft VibeVoice ASR with Jetson/ARM64 CUDA-aware setup.
178
228
  - `/realtime` and REST `realtime: true` provide short, natural, SOUL.md-aware conversation for ASR/TTS clients.
179
229
  - Endpoint setup and sponsor setup aggregate models from all enabled endpoints, including external OpenAI-compatible routers.
180
230
  - `/sponsor` can expose text inference and media generation for image, video, sound, and music with per-modality limits.
@@ -199,21 +249,42 @@ OMNIUS_REST_API_KEYS="read-key:read:grafana,run-key:run:ci:60:100000:3,admin-key
199
249
  # then: Authorization: Bearer <key>
200
250
  ```
201
251
 
202
- The complete endpoint inventory follows. It is kept in lockstep with the served OpenAPI spec by `pnpm docs:check`; the canonical machine contract is generated from [`packages/cli/src/api/openapi.ts`](packages/cli/src/api/openapi.ts) and mirrored in [`docs/reference/rest-api.md`](docs/reference/rest-api.md).
252
+ The complete supported endpoint inventory follows. The canonical machine
253
+ contract is generated from [`packages/cli/src/api/openapi.ts`](packages/cli/src/api/openapi.ts),
254
+ validated against [`docs/reference/rest-api.md`](docs/reference/rest-api.md),
255
+ and projected into the generated block below. `pnpm docs:check` now fails when
256
+ any of those three surfaces drift. Browser HTML pages, Swagger static assets,
257
+ and implementation-only compatibility bridges are intentionally outside this
258
+ stable REST contract.
203
259
 
204
- ### Docs and compatibility aliases
260
+ <!-- BEGIN GENERATED REST INVENTORY -->
261
+ ### Docs And Compatibility Aliases
205
262
 
206
263
  | Method | Path | Purpose |
207
264
  | --- | --- | --- |
208
- | `GET` | `/docs` · `/api/docs` · `/swagger-ui` | Swagger UI |
209
- | `GET` | `/openapi.json` · `/openapi.yaml` · `/v3/api-docs` · `/swagger.json` · `/api-docs` | OpenAPI spec (JSON/YAML + aliases) |
265
+ | `GET` | `/docs` | Swagger UI |
266
+ | `GET` | `/api/docs` | Swagger UI alias |
267
+ | `GET` | `/openapi.json` | OpenAPI JSON |
268
+ | `GET` | `/openapi.yaml` | OpenAPI YAML |
269
+ | `GET` | `/v3/api-docs` | OpenAPI alias |
270
+ | `GET` | `/swagger.json` | Swagger-era alias |
271
+ | `GET` | `/api-docs` | OpenAPI alias |
272
+ | `GET` | `/swagger-ui` | Swagger UI alias |
210
273
  | `GET` | `/redoc` | ReDoc renderer |
274
+ | `GET` | `/` | HATEOAS API root when the client does not request HTML |
275
+ | `GET` | `/help` | Compact daemon integration help |
276
+ | `GET` | `/v1/routes` | Flat grep-friendly daemon route summary |
277
+ | `GET` | `/routes` | Route-summary compatibility alias |
278
+ | `GET` | `/asyncapi.json` | AsyncAPI 2.6 voicechat WebSocket contract |
279
+ | `GET` | `/asyncapi` | AsyncAPI compatibility alias |
211
280
 
212
- ### Health and observability
281
+ ### Health And Observability
213
282
 
214
283
  | Method | Path | Purpose |
215
284
  | --- | --- | --- |
216
- | `GET` | `/health` · `/health/ready` · `/health/startup` | Liveness, backend readiness, startup probes |
285
+ | `GET` | `/health` | Liveness probe |
286
+ | `GET` | `/health/ready` | Backend readiness |
287
+ | `GET` | `/health/startup` | Startup probe |
217
288
  | `GET` | `/version` | Package version and platform |
218
289
  | `GET` | `/metrics` | Prometheus metrics |
219
290
  | `GET` | `/v1/events` | Server-sent event stream |
@@ -227,218 +298,375 @@ The complete endpoint inventory follows. It is kept in lockstep with the served
227
298
  | Method | Path | Purpose |
228
299
  | --- | --- | --- |
229
300
  | `GET` | `/v1/discovery/bootstrap` | Compact agent bootstrap and start-here map |
230
- | `GET` | `/v1/discovery` | Search or list the bundled capability catalog |
301
+ | `GET` | `/v1/discovery` | Search layers, workflows, runtimes, modules, stores, and capabilities |
231
302
  | `GET` | `/v1/discovery/{id}` | Expand one stable capability entry |
232
303
 
233
- ### Inference and chat
304
+ ### Inference And Chat
234
305
 
235
306
  | Method | Path | Purpose |
236
307
  | --- | --- | --- |
237
- | `GET` | `/v1/models` · `/api/tags` | Aggregated model list (OpenAI + Ollama tags) |
308
+ | `GET` | `/v1/models` | Aggregated model list |
238
309
  | `POST` | `/v1/chat/completions` | OpenAI-compatible chat completion |
239
310
  | `POST` | `/v1/chat` | Stateful Omnius chat |
240
311
  | `POST` | `/api/chat` | Ollama-compatible chat alias |
241
- | `POST` | `/v1/generate` · `/api/generate` | One-shot generation (Ollama-compatible) |
242
- | `POST` | `/v1/embeddings` · `/api/embed` | Embeddings (OpenAI + Ollama aliases) |
243
- | `GET` | `/v1/chat/sessions` | Active chat sessions |
312
+ | `POST` | `/v1/generate` | Ollama-compatible one-shot generation |
313
+ | `POST` | `/api/generate` | Ollama-compatible generate alias |
314
+ | `POST` | `/v1/embeddings` | OpenAI-compatible embeddings |
315
+ | `POST` | `/api/embed` | Ollama-compatible embeddings alias |
316
+ | `GET` | `/api/tags` | Ollama-compatible model tags |
317
+ | `POST` | `/realtime` | Text-only voice-adapter reply from a transcript |
318
+ | `POST` | `/v1/realtime` | Auth-scoped realtime adapter alias |
319
+ | `GET` | `/v1/chat/sessions` | Workspace-scoped persisted browser chats and importable TUI sessions |
320
+ | `GET` | `/v1/chat/sessions/{id}` | Hydrate full session history, transcript, and in-flight state |
321
+ | `DELETE` | `/v1/chat/sessions/{id}` | Permanently delete a canonical chat or TUI history session |
322
+ | `POST` | `/v1/chat/sessions/{id}/summarize` | Generate + cache an inference-based session title/summary |
323
+ | `POST` | `/v1/chat/suggest-followup` | Suggest one short next-message follow-up (ghost-text input) |
324
+ | `GET` | `/v1/chat/sessions/{id}/status` | Reactive recall: live run status + unseen deltas (`?since=<seq>`) |
244
325
  | `POST` | `/v1/chat/check-in` | Steering check-in for active chat |
245
-
246
- ### Agentic runs
326
+ | `POST` | `/v1/chat/attachments` | Upload an attachment for a stateful chat |
327
+
328
+ #### Session History Contract
329
+
330
+ `GET /v1/chat/sessions` is a history index, not merely a list of processes that
331
+ are currently active. It returns canonical persisted browser chats for the
332
+ selected workspace and, by default, quality-filtered TUI visual sessions that
333
+ can be imported on demand. Pass `?root=/absolute/workspace` to scope the list and
334
+ `?include_tui=0` to omit TUI history. Exit-only inputs such as `/quit` and
335
+ `/exit`, manual-save noise, empty transcripts, and duplicate normalized TUI
336
+ sessions are rejected by the session-quality projection rather than presented as
337
+ chats.
338
+
339
+ Selecting a row should call `GET /v1/chat/sessions/{id}`. That response hydrates
340
+ the complete public message history (system prompts are intentionally omitted),
341
+ the original TUI transcript when applicable, token counts, timestamps, source
342
+ and project identity, and any in-flight run with a bounded partial-output tail.
343
+ Use the `status` endpoint with `?since=<seq>` for cheap reactive polling while a
344
+ run is active. `DELETE /v1/chat/sessions/{id}` is an admin operation and removes
345
+ the canonical record; deleting only a browser-side row does not remove daemon
346
+ history.
347
+
348
+ `POST /realtime` and `/v1/realtime` are text-only conversation adapters. They
349
+ accept transcript text through `message`, `text`, `recent_turn`, `asr_text`, or
350
+ `callerText`, optionally accept adapter-local `soul_md`, and can return plain
351
+ text with `Accept: text/plain` or `format: "text"`. ASR and TTS remain separate
352
+ operations.
353
+
354
+ ### Agentic Runs
247
355
 
248
356
  | Method | Path | Purpose |
249
357
  | --- | --- | --- |
250
358
  | `POST` | `/v1/run` | Submit agentic task |
251
- | `GET` | `/v1/runs` · `/v1/runs/{id}` | List runs · get run details |
359
+ | `GET` | `/v1/runs` | List runs |
360
+ | `GET` | `/v1/runs/{id}` | Get run details |
361
+ | `GET` | `/v1/runs/{id}/output` | Read captured run output and status |
252
362
  | `DELETE` | `/v1/runs/{id}` | Abort run |
253
- | `POST`/`GET` | `/v1/todos` | Create/update · list sessions with todos |
254
- | `GET`/`DELETE` | `/v1/todos/{session_id}` | Get · delete session todos |
363
+ | `POST` | `/v1/todos` | Create or update todos for current session |
364
+ | `GET` | `/v1/todos` | List sessions with todos |
365
+ | `GET` | `/v1/todos/{session_id}` | Get session todos |
366
+ | `DELETE` | `/v1/todos/{session_id}` | Delete session todos |
255
367
  | `POST` | `/v1/evaluate` | Evaluate a run |
256
368
  | `POST` | `/v1/index` | Trigger repository indexing |
257
369
 
258
- ### Configuration, keys, profiles, projects
370
+ ### Configuration, Keys, Profiles, Projects
259
371
 
260
372
  | Method | Path | Purpose |
261
373
  | --- | --- | --- |
262
- | `GET`/`PATCH` | `/v1/config` | Read · update daemon config |
263
- | `GET`/`PUT` | `/v1/config/model` | Current model · switch model |
264
- | `POST` | `/v1/config/model/check` | Probe model readiness |
265
- | `GET`/`PUT` | `/v1/config/endpoint` | Current endpoint · switch endpoint |
374
+ | `GET` | `/v1/config` | Read daemon config |
375
+ | `PATCH` | `/v1/config` | Update daemon config |
376
+ | `GET` | `/v1/config/model` | Current model |
377
+ | `PUT` | `/v1/config/model` | Switch model |
378
+ | `POST` | `/v1/config/model/check` | Probe model readiness with non-empty text |
379
+ | `GET` | `/v1/config/endpoint` | Current endpoint |
380
+ | `PUT` | `/v1/config/endpoint` | Switch endpoint |
266
381
  | `POST` | `/v1/config/endpoint/test` | Probe endpoint |
267
- | `GET`/`DELETE` | `/v1/config/endpoint/history` | Endpoint history · remove item |
382
+ | `GET` | `/v1/config/endpoint/history` | Endpoint history |
383
+ | `DELETE` | `/v1/config/endpoint/history` | Remove endpoint history item |
268
384
  | `POST` | `/v1/share/generate` | Generate remote-access share URL |
269
- | `GET`/`POST` | `/v1/keys` | List · mint runtime API keys |
270
- | `DELETE` | `/v1/keys/{prefix}` | Revoke runtime keys by prefix |
271
- | `GET`/`POST` | `/v1/profiles` | List · create tool profiles |
272
- | `GET`/`DELETE` | `/v1/profiles/{name}` | Get · delete profile |
273
- | `GET`/`DELETE` | `/v1/projects` | List · unregister projects |
385
+ | `GET` | `/v1/keys` | List runtime API keys |
386
+ | `POST` | `/v1/keys` | Mint runtime API key |
387
+ | `DELETE` | `/v1/keys/{prefix}` | Revoke runtime API keys by prefix |
388
+ | `GET` | `/v1/profiles` | List tool profiles |
389
+ | `POST` | `/v1/profiles` | Create tool profile |
390
+ | `GET` | `/v1/profiles/{name}` | Get profile |
391
+ | `DELETE` | `/v1/profiles/{name}` | Delete profile |
392
+ | `GET` | `/v1/projects` | List known projects |
393
+ | `DELETE` | `/v1/projects` | Unregister a project |
274
394
  | `GET` | `/v1/projects/current` | Current project |
275
- | `POST` | `/v1/projects/switch` · `/v1/projects/register` · `/v1/projects/rename` | Switch · register · rename project |
276
- | `GET`/`PUT`/`DELETE` | `/v1/projects/preferences` | Read · patch · reset project preferences |
277
-
278
- ### Skills, commands, tools, MCP
395
+ | `POST` | `/v1/projects/switch` | Switch project |
396
+ | `POST` | `/v1/projects/register` | Register project |
397
+ | `POST` | `/v1/projects/rename` | Rename project |
398
+ | `GET` | `/v1/projects/preferences` | Read project preferences |
399
+ | `PUT` | `/v1/projects/preferences` | Patch project preferences |
400
+ | `DELETE` | `/v1/projects/preferences` | Reset project preferences |
401
+ | `GET` | `/v1/projects/scan` | Scan configured roots for discoverable workspaces |
402
+ | `GET` | `/v1/admin/access` | Read the daemon network access mode |
403
+ | `POST` | `/v1/admin/access` | Change and persist access mode from loopback only |
404
+
405
+ ### Skills, Commands, Tools, MCP
279
406
 
280
407
  | Method | Path | Purpose |
281
408
  | --- | --- | --- |
282
- | `GET` | `/v1/skills` · `/v1/skills/{name}` | List · load skill content |
409
+ | `GET` | `/v1/skills` | List skills |
410
+ | `GET` | `/v1/skills/{name}` | Load skill content |
283
411
  | `GET` | `/v1/commands` | List slash commands |
284
412
  | `POST` | `/v1/commands/{cmd}` | Execute slash command |
285
- | `GET` | `/v1/tools` · `/v1/tools/{name}` | List (built-in + external) · tool metadata |
413
+ | `GET` | `/v1/tools` | List tools (built-in + external) |
286
414
  | `POST` | `/v1/tools/register` | Register an application-specific external tool |
415
+ | `GET` | `/v1/tools/{name}` | Tool metadata |
287
416
  | `DELETE` | `/v1/tools/{name}` | Unregister an external tool |
288
417
  | `POST` | `/v1/tools/{name}/call` | Call tool |
289
418
  | `POST` | `/v1/tools/{name}/eval` | Evaluate an external tool against test cases |
290
- | `GET` | `/v1/mcps` · `/v1/mcps/{name}` | List · MCP server details |
419
+ | `GET` | `/v1/mcps` | List MCP servers |
420
+ | `GET` | `/v1/mcps/{name}` | MCP server details |
291
421
  | `POST` | `/v1/mcps/{name}/call` | Call MCP tool |
292
- | `GET` | `/v1/hooks` · `/v1/agents` | Hook registry · agent type registry |
293
- | `GET` | `/v1/codegraph/snapshot` · `/v1/codegraph/events` | Code graph snapshot · SSE |
422
+ | `GET` | `/v1/hooks` | Hook registry |
423
+ | `GET` | `/v1/agents` | Agent type registry |
424
+ | `GET` | `/v1/codegraph/snapshot` | Code graph snapshot |
425
+ | `GET` | `/v1/codegraph/events` | Code graph SSE |
294
426
 
295
- ### Registering application-specific tools
427
+ #### Registering Application-Specific Tools
296
428
 
297
- Agents integrating Omnius into their own stack can register tools at runtime so the Omnius agent loop can call them alongside built-ins. Registration is a single unified contract — `transport.type` selects how Omnius reaches the implementation:
429
+ Applications can register their own tools so Omnius agents can discover and
430
+ invoke them alongside built-ins. `transport.type` selects the bridge:
298
431
 
299
- - **`http`** Omnius POSTs `{name, args, session_id}` to a `callback_url` your app hosts and relays the response.
300
- - **`mcp`** the tool proxies to a named tool on an MCP server (auto-connected when you pass `connect`).
432
+ - `http` makes Omnius POST `{name, args, session_id}` to the application's
433
+ `callback_url` and relay the result.
434
+ - `mcp` proxies to a named tool on an MCP server and can auto-connect from the
435
+ supplied connection descriptor.
301
436
 
302
- Registered tools are persisted per working directory (`.omnius/external-tools.json`), surface in `GET /v1/tools`, and respect the same scope/off-device security gate as built-ins. Registration needs `run` scope (remote callers need `admin`).
437
+ Registrations persist per workspace at `.omnius/external-tools.json`, appear in
438
+ `GET /v1/tools`, and use the same scope and off-device security gates as built-in
439
+ tools. Registration needs `run` scope; a non-loopback caller needs `admin`.
303
440
 
304
441
  ```bash
305
- # Register an HTTP-backed tool
306
442
  curl -s -X POST localhost:11435/v1/tools/register -H 'content-type: application/json' -d '{
307
443
  "name": "lookup_order",
308
- "description": "Look up an order by id in the billing system",
444
+ "description": "Look up an order by id",
309
445
  "parameters": {"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},
310
446
  "security": {"requires_scope":"run","risk":"low"},
311
447
  "transport": {"type":"http","callback_url":"https://app.internal/tools/lookup_order","auth_header":"Bearer …"}
312
448
  }'
313
-
314
- # It now appears in the registry and is directly callable
315
449
  curl -s localhost:11435/v1/tools/lookup_order
316
450
  curl -s -X POST localhost:11435/v1/tools/lookup_order/call -H 'content-type: application/json' -d '{"args":{"id":"A-1001"}}'
317
-
318
- # Evaluate it against cases during development (pass/fail + metrics)
319
- curl -s -X POST localhost:11435/v1/tools/lookup_order/eval -H 'content-type: application/json' -d '{
320
- "cases": [
321
- {"name":"known order","args":{"id":"A-1001"},"expect":{"success":true,"output_contains":"A-1001"}},
322
- {"name":"missing order","args":{"id":"nope"},"expect":{"success":false}}
323
- ]
324
- }'
325
-
326
- # Unregister when done
451
+ curl -s -X POST localhost:11435/v1/tools/lookup_order/eval -H 'content-type: application/json' -d '{"cases":[{"name":"known","args":{"id":"A-1001"},"expect":{"success":true}}]}'
327
452
  curl -s -X DELETE localhost:11435/v1/tools/lookup_order
328
453
  ```
329
454
 
330
- The same registration accepts an MCP transport, e.g. `"transport":{"type":"mcp","server":"acme","tool":"search","connect":{"url":"https://app.internal/mcp","transport":"streamable-http"}}`.
455
+ The MCP equivalent uses a transport such as
456
+ `{"type":"mcp","server":"acme","tool":"search","connect":{"url":"https://app.internal/mcp","transport":"streamable-http"}}`.
331
457
 
332
458
  ### AIWG
333
459
 
334
460
  | Method | Path | Purpose |
335
461
  | --- | --- | --- |
336
462
  | `GET` | `/v1/aiwg` | AIWG root and control map |
337
- | `GET` | `/v1/aiwg/frameworks` · `/v1/aiwg/frameworks/{name}` · `/v1/aiwg/frameworks/{name}/content` | List · details · tier-aware content |
338
- | `GET` | `/v1/aiwg/skills` · `/v1/aiwg/skills/{name}` | List · load AIWG skill |
339
- | `GET` | `/v1/aiwg/agents` · `/v1/aiwg/agents/{name}` | List · load AIWG agent |
463
+ | `GET` | `/v1/aiwg/frameworks` | List frameworks |
464
+ | `GET` | `/v1/aiwg/frameworks/{name}` | Framework details |
465
+ | `GET` | `/v1/aiwg/frameworks/{name}/content` | Tier-aware content |
466
+ | `GET` | `/v1/aiwg/skills` | List AIWG skills |
467
+ | `GET` | `/v1/aiwg/skills/{name}` | Load AIWG skill |
468
+ | `GET` | `/v1/aiwg/agents` | List AIWG agents |
469
+ | `GET` | `/v1/aiwg/agents/{name}` | Load AIWG agent |
340
470
  | `GET` | `/v1/aiwg/addons` | List AIWG addons |
341
- | `POST` | `/v1/aiwg/use` · `/v1/aiwg/expand` | Activation bundle · expand item |
471
+ | `POST` | `/v1/aiwg/use` | Tier-sized activation bundle |
472
+ | `POST` | `/v1/aiwg/expand` | Expand matching AIWG item |
342
473
 
343
- ### Memory, sessions, context
474
+ ### Memory, Sessions, Context
344
475
 
345
476
  | Method | Path | Purpose |
346
477
  | --- | --- | --- |
347
478
  | `GET` | `/v1/memory` | Memory backend summary |
348
- | `POST` | `/v1/memory/search` · `/v1/memory/write` | Search · write memory |
349
- | `GET` | `/v1/memory/episodes` · `/v1/memory/failures` | List episodes · failures |
350
- | `GET` | `/v1/sessions` · `/v1/sessions/{id}` | List task sessions · get history |
479
+ | `POST` | `/v1/memory/search` | Search memory |
480
+ | `POST` | `/v1/memory/write` | Write memory |
481
+ | `GET` | `/v1/memory/episodes` | List episodes |
482
+ | `GET` | `/v1/memory/failures` | List failure records |
483
+ | `POST` | `/v1/memory/ingest` | Ingest content or files into memory |
484
+ | `GET` | `/v1/memory/entities` | List extracted memory entities |
485
+ | `POST` | `/v1/memory/jobs/run` | Run a named memory-maintenance job |
486
+ | `POST` | `/v1/memory/feedback` | Record relevance or quality feedback for a memory item |
487
+ | `GET` | `/v1/sessions` | List task sessions |
488
+ | `GET` | `/v1/sessions/{id}` | Get session history |
351
489
  | `GET` | `/v1/context` | Current context snapshot |
352
- | `GET` | `/v1/context/window-dumps` · `/v1/context/window-dumps/{id}` | List/fetch full outbound model context-window dumps |
353
- | `POST` | `/v1/context/save` · `/v1/context/compact` | Save entry · request compaction |
490
+ | `GET` | `/v1/context/window-dumps` | List persisted outbound model context-window dumps |
491
+ | `GET` | `/v1/context/window-dumps/{id}` | Fetch a full outbound model context-window dump |
492
+ | `POST` | `/v1/context/save` | Save context entry |
354
493
  | `GET` | `/v1/context/restore` | Build restore prompt |
494
+ | `POST` | `/v1/context/compact` | Request compaction |
355
495
 
356
- Context-window dumps are written for main agents, sub-agents, internal runners, and adversary audits before backend inference. Use `GET /v1/context/window-dumps?agent_type=main` for summaries with signal/noise metrics, or `GET /v1/context/window-dumps/latest` for the full request payload. Dumps include focus-supervisor state when the runner is enforcing a next-action contract. Set `OMNIUS_CONTEXT_WINDOW_DUMP_DIR` to relocate dumps, `OMNIUS_DISABLE_CONTEXT_WINDOW_DUMPS=1` to disable them, or `OMNIUS_FOCUS_SUPERVISOR=off|auto|strict` to tune small-model focus enforcement.
496
+ Context-window dumps are written before backend inference for main agents,
497
+ sub-agents, internal runners, and adversary audits. Query
498
+ `GET /v1/context/window-dumps?agent_type=main` for summaries with signal/noise
499
+ metrics, or fetch a full payload by id. Dumps include focus-supervisor state when
500
+ a next-action contract is active. Set `OMNIUS_CONTEXT_WINDOW_DUMP_DIR` to move
501
+ the store, `OMNIUS_DISABLE_CONTEXT_WINDOW_DUMPS=1` to disable it, and
502
+ `OMNIUS_FOCUS_SUPERVISOR=off|auto|strict` to tune focus enforcement.
357
503
 
358
- ### Files, nexus, ollama pool
504
+ ### Files, Nexus, Ollama Pool
359
505
 
360
506
  | Method | Path | Purpose |
361
507
  | --- | --- | --- |
362
508
  | `GET` | `/v1/files` | List workspace directory |
363
509
  | `POST` | `/v1/files/read` | Read workspace file |
510
+ | `GET` | `/v1/files/raw` | Stream raw workspace bytes with content type and range support |
511
+ | `HEAD` | `/v1/files/raw` | Inspect raw-file response metadata |
364
512
  | `GET` | `/v1/nexus/status` | Nexus peer state |
365
513
  | `GET` | `/v1/sponsors` | Sponsor directory cache |
366
514
  | `GET` | `/v1/ollama/pool/processes` | Ollama process inventory |
367
515
  | `POST` | `/v1/ollama/pool/cleanup` | Cleanup stale Ollama pool processes |
368
516
 
369
- ### Voice, audio, vision
517
+ ### Voice, Audio, Vision
370
518
 
371
519
  | Method | Path | Purpose |
372
520
  | --- | --- | --- |
373
521
  | `GET` | `/v1/voice/state` | Voice runtime status |
374
- | `POST` | `/v1/voice/start` · `/v1/voice/stop` | Enable/warm voice · pause voice input |
375
- | `GET`/`POST` | `/v1/voice/models` · `/v1/voice/models/switch` | List · switch and enable an exact TTS model |
376
- | `GET`/`POST` | `/v1/voice/supertonic-settings` | Read · update voice tuning |
377
- | `GET`/`PATCH` | `/v1/asr/engines` · `/v1/asr/selection` | List readiness/capabilities · select exact ASR engine/model |
378
- | `POST` | `/v1/asr/activate` · `/v1/asr/engines/{engineId}/setup` | Activate · install pinned ASR runtime/weights |
379
- | `POST` | `/v1/asr/transcriptions` · `/v1/asr/test` | Transcribe · test the selected ASR backend |
380
- | `POST` | `/v1/voice/tts` · `/v1/audio/speech` | Synthesize speech (+ OpenAI alias) |
381
- | `POST` | `/v1/voice/transcribe` · `/v1/audio/transcriptions` · `/v1/voice/transcribe/stream` | Transcribe (+ alias + isolated final SSE) |
382
- | `GET`/`POST` | `/v1/voice/clone-refs` | List · upload clone reference |
383
- | `POST` | `/v1/voice/clone-refs/upload` · `/v1/voice/clone-refs/from-url` | Upload · fetch clone reference |
384
- | `POST` | `/v1/voice/clone-refs/{filename}/activate` · `/v1/voice/clone-refs/{filename}/rename` | Activate · rename clone reference |
522
+ | `POST` | `/v1/voice/start` | Select an optional model, enable voice, and wait for readiness |
523
+ | `POST` | `/v1/voice/stop` | Pause daemon voice input while leaving TTS warm |
524
+ | `GET` | `/v1/voice/models` | TTS models |
525
+ | `POST` | `/v1/voice/models/switch` | Switch and enable an exact TTS model by default |
526
+ | `GET` | `/v1/voice/supertonic-settings` | Voice tuning settings |
527
+ | `POST` | `/v1/voice/supertonic-settings` | Update voice tuning settings |
528
+ | `GET` | `/v1/asr/engines` | Canonical ASR engines/models, capabilities, readiness, and selection |
529
+ | `GET` | `/v1/asr/status` · `/v1/asr/selection` | Selected engine/model and runtime status |
530
+ | `PATCH` | `/v1/asr/selection` | Persist and activate an exact engine/model |
531
+ | `POST` | `/v1/asr/activate` | Activate and persist an exact engine/model |
532
+ | `POST` | `/v1/asr/engines/{engineId}/setup` | Install a managed runtime and pinned weights |
533
+ | `POST` | `/v1/asr/transcriptions` · `/v1/asr/test` | Transcribe/test using the real selected backend |
534
+ | `GET` | `/v1/voice/asr-models` | Compatibility registry alias |
535
+ | `POST` | `/v1/voice/asr-models/switch` | Compatibility activation alias |
536
+ | `POST` | `/v1/voice/tts` | Synthesize speech |
537
+ | `POST` | `/v1/audio/speech` | OpenAI-compatible TTS alias |
538
+ | `POST` | `/v1/voice/transcribe` | Transcribe audio |
539
+ | `POST` | `/v1/voice/asr` | Legacy transcription alias |
540
+ | `POST` | `/v1/audio/transcriptions` | OpenAI-compatible transcription alias |
541
+ | `POST` | `/v1/voice/transcribe/stream` | Isolated final transcription over SSE (no shared mic state or fake partials) |
542
+ | `POST` | `/v1/voice/clone-refs` | Upload voice clone reference |
543
+ | `GET` | `/v1/voice/clone-refs` | List clone references |
544
+ | `POST` | `/v1/voice/clone-refs/upload` | Upload clone reference |
545
+ | `POST` | `/v1/voice/clone-refs/from-url` | Fetch clone reference |
546
+ | `POST` | `/v1/voice/clone-refs/{filename}/activate` | Activate clone reference |
547
+ | `POST` | `/v1/voice/clone-refs/{filename}/rename` | Rename clone reference |
385
548
  | `DELETE` | `/v1/voice/clone-refs/{filename}` | Delete clone reference |
386
549
  | `POST` | `/v1/voice/speak` | Broadcast speech to voicechat clients |
387
550
  | `GET` | `/v1/voicechat/ws` | WebSocket upgrade for full-duplex voicechat |
388
551
  | `POST` | `/v1/vision/describe` | Vision describe placeholder |
389
-
390
- TTS requests auto-warm the daemon and never silently fall back to a different
391
- voice. The built-in registry includes GLaDOS, Overwatch, and the packaged
392
- `luxtts:announcer-testchamber03` clone source. Voicebox defaults to its stable
393
- sub-model set; use `OMNIUS_VOICEBOX_MODELS=all` for the full suite or a
394
- comma-separated list of `voicebox_*` IDs for an explicit subset.
395
-
396
- ASR is a separate multi-engine registry: Whisper, managed transcribe-cli,
397
- Nemotron readiness, and pinned `microsoft/VibeVoice-ASR`. VibeVoice is a
398
- file/final backend (not incremental PCM) with up to 60-minute transcription,
399
- speaker diarization, timestamps, and optional context/hotwords. Its ~17.35 GB
400
- weights are installed into the unified ASR cache on demand and never bundled
401
- in npm; activation is CUDA-only and fails closed unless the exact GPU is
402
- verified through `nvidia-smi` (discrete Linux) or `tegrastats` plus CUDA Torch
403
- device properties (Jetson/L4T).
404
-
405
- ### Generative media
406
-
407
- Backed by the unified `~/.omnius` store and shared venvs (see [Shared Media Dependencies](#shared-media-dependencies)). Outputs land in the global gallery at `~/.omnius/media/{images,videos,audio,music}`.
552
+ | `POST` | `/v1/vision/embed` | Create a vision embedding from media |
553
+ | `POST` | `/v1/audio/embed` | Create an audio embedding from audio input |
554
+
555
+ `POST /v1/voice/tts` and `/v1/audio/speech` automatically warm the daemon.
556
+ An explicit model must render exactly or the request fails; Omnius does not
557
+ silently synthesize with another voice. Responses include `X-Voice-Model`,
558
+ `X-Voice-Backend`, and `X-Sample-Rate`. Available models include GLaDOS,
559
+ Overwatch, `luxtts:announcer-testchamber03`, and the selected Voicebox suite.
560
+ Set `OMNIUS_VOICEBOX_MODELS=all` for every carried-in Voicebox model, leave it
561
+ at `stable` for the default set, or provide a comma-separated subset.
562
+
563
+ ASR selection is independent from TTS selection. The registry currently exposes
564
+ OpenAI Whisper, managed `transcribe-cli`, NVIDIA Nemotron (reported unavailable
565
+ until its legacy bootstrap is migrated), and Microsoft VibeVoice ASR. VibeVoice
566
+ uses the exact pinned `microsoft/VibeVoice-ASR` checkpoint, reports setup and
567
+ activation separately, supports completed files up to 60 minutes with speakers,
568
+ timestamps, and `?context=` hotwords, and is deliberately not advertised as an
569
+ incremental PCM backend. Its managed setup inherits the host CUDA-enabled Torch
570
+ build (needed on Jetson/ARM64), never installs generic PyPI Torch, and activation
571
+ requires one explicit capable GPU. Discrete Linux uses `nvidia-smi` process/GPU
572
+ evidence; Jetson/L4T uses NVIDIA's documented `tegrastats` plus CUDA Torch device
573
+ properties because `nvidia-smi` is unavailable there. Model weights live under
574
+ the unified Omnius ASR cache and are not shipped in the npm package.
575
+
576
+ ### Generative Media
577
+
578
+ All generation is backed by the unified `~/.omnius` model store and shared venvs (single source of truth — no per-project duplication). Generated files are consolidated into the global gallery at `~/.omnius/media/{images,videos,audio,music}`.
408
579
 
409
580
  | Method | Path | Purpose |
410
581
  | --- | --- | --- |
411
582
  | `GET` | `/v1/media/models` | List available image/video/audio/music models |
412
583
  | `GET` | `/v1/media/store` | Unified store disk usage + reclaimable legacy caches |
413
584
  | `POST` | `/v1/media/migrate` | Dedup + migrate legacy per-group caches into the unified store |
414
- | `POST` | `/v1/media/image` · `/v1/media/video` · `/v1/media/audio` · `/v1/media/music` | Generate media (run scope) |
585
+ | `POST` | `/v1/media/relocate` | Relocate the whole media store (weights/venvs/gallery) to a chosen folder |
586
+ | `GET` | `/v1/media/relocate/status` | Status + progress of the media-store relocation job |
587
+ | `POST` | `/v1/media/av/analyze` | Analyze a media file into a grounded entity/event answer (AV comprehension) |
588
+ | `POST` | `/v1/media/image` | Generate an image |
589
+ | `POST` | `/v1/media/video` | Generate a video |
590
+ | `POST` | `/v1/media/audio` | Generate a sound effect |
591
+ | `POST` | `/v1/media/music` | Generate music |
415
592
  | `GET` | `/v1/media/gallery` | List previously generated media (global, newest first) |
416
593
  | `GET` | `/v1/media/file` | Stream one generated media file |
417
594
 
418
- ### Engines and scheduled jobs
595
+ ### Engines And Scheduled Jobs
419
596
 
420
597
  | Method | Path | Purpose |
421
598
  | --- | --- | --- |
422
599
  | `GET` | `/v1/engines` | Long-running engine status |
423
- | `GET` | `/v1/scheduled` · `/v1/scheduled/all` · `/v1/scheduled/status` | List · list all · scheduler status |
424
- | `POST` | `/v1/scheduled/kill` · `/v1/scheduled/fixup` · `/v1/scheduled/reconcile` | Kill · reconcile · force reconcile |
600
+ | `GET` | `/v1/scheduled` | List scheduled jobs |
601
+ | `DELETE` | `/v1/scheduled/all` | Delete all tasks, timers, cron entries, and persisted sources |
602
+ | `GET` | `/v1/scheduled/status` | Scheduler status |
603
+ | `POST` | `/v1/scheduled/{id}` | Enable or disable one scheduled task or user timer |
604
+ | `DELETE` | `/v1/scheduled/{id}` | Delete one scheduled task or user timer |
605
+ | `POST` | `/v1/scheduled/kill` | Kill scheduled job |
606
+ | `POST` | `/v1/scheduled/fixup` | Reconcile scheduled state |
607
+ | `GET` | `/v1/scheduled/reconcile` | Preview scheduled reconciliation |
608
+ | `POST` | `/v1/scheduled/reconcile` | Preview or apply scheduled reconciliation |
425
609
  | `GET` | `/v1/services/systemd` | Systemd service status |
610
+ | `POST` | `/v1/services/systemd/{unit}` | Act on one user-level systemd unit |
426
611
  | `GET` | `/v1/update` | Self-update status |
612
+ | `POST` | `/v1/update` | Start an exact-version verified global update transaction |
613
+
614
+ #### Verified Global Update Transaction
427
615
 
428
- ### AIMS governance (ISO/IEC 42001:2023)
616
+ `POST /v1/update` is not a CLI-local package edit. It starts one durable
617
+ transaction that installs the requested exact npm version globally, verifies
618
+ the installed package and resolved `omnius` executable, restarts and verifies
619
+ the daemon, verifies package/hash/runtime agreement, and relaunches the tray if
620
+ it was running. The response is `202` with operation state; poll
621
+ `GET /v1/update` for live phase, subprocess output, verification evidence, and
622
+ the final success or failure. Concurrent transactions and requests with no
623
+ available target return `409`.
624
+
625
+ The web dashboard and native tray both use this same endpoint. Update discovery
626
+ is shared and semver-aware, so an older cached registry result cannot downgrade
627
+ or falsely present an update. A completed transaction means the global package,
628
+ executable, daemon, and tray runtime were all reconciled—not merely that `npm`
629
+ exited successfully.
630
+
631
+ ### AIMS Governance
429
632
 
430
633
  | Method | Path | Purpose |
431
634
  | --- | --- | --- |
432
635
  | `GET` | `/v1/aims` | AIMS root and endpoint index |
433
- | `GET`/`PUT` | `/v1/aims/policies` | Policy register · replace |
434
- | `GET` | `/v1/aims/roles` · `/v1/aims/resources` | Roles · resource inventory |
435
- | `GET`/`POST` | `/v1/aims/impact-assessments` | List · file impact assessment |
436
- | `GET` | `/v1/aims/lifecycle` · `/v1/aims/data-quality` · `/v1/aims/transparency` · `/v1/aims/usage` · `/v1/aims/suppliers` | Lifecycle, data quality, transparency, usage, suppliers |
437
- | `GET`/`POST` | `/v1/aims/incidents` | List · file incident |
438
- | `GET` | `/v1/aims/oversight` · `/v1/aims/decisions` · `/v1/aims/config-history` | Oversight gates · decision log · config history |
439
-
440
- For per-endpoint schemas, parameters, and response shapes, see the served `/openapi.json` and the maintained inventory in [`docs/reference/rest-api.md`](docs/reference/rest-api.md).
441
-
636
+ | `GET` | `/v1/aims/policies` | Policy register |
637
+ | `PUT` | `/v1/aims/policies` | Replace policy register |
638
+ | `GET` | `/v1/aims/roles` | Roles and responsibilities |
639
+ | `GET` | `/v1/aims/resources` | Resource inventory |
640
+ | `GET` | `/v1/aims/impact-assessments` | Impact assessments |
641
+ | `POST` | `/v1/aims/impact-assessments` | File impact assessment |
642
+ | `GET` | `/v1/aims/lifecycle` | Lifecycle state |
643
+ | `GET` | `/v1/aims/data-quality` | Data quality controls |
644
+ | `GET` | `/v1/aims/transparency` | Model cards and transparency |
645
+ | `GET` | `/v1/aims/usage` | AIMS usage view |
646
+ | `GET` | `/v1/aims/suppliers` | Supplier inventory |
647
+ | `GET` | `/v1/aims/incidents` | Incident records |
648
+ | `POST` | `/v1/aims/incidents` | File incident |
649
+ | `GET` | `/v1/aims/oversight` | Human oversight gates |
650
+ | `GET` | `/v1/aims/decisions` | Consequential decision log |
651
+ | `GET` | `/v1/aims/config-history` | Config change history |
652
+
653
+ ### Browser And Compatibility Surfaces
654
+
655
+ The dashboard HTML routes (`/`, `/chat`, `/agent`, `/voice`, `/generate`,
656
+ `/projects`, `/dashboard`, `/jobs`, `/activity`, `/discover`, `/settings`, and
657
+ `/config`) are documented in the [dashboard guide](../guides/dashboard.md). They
658
+ are pages, not JSON API operations; `/` returns the HATEOAS JSON root when the
659
+ client does not request HTML.
660
+
661
+ Swagger/ReDoc trailing-slash variants, `/api/docs/*` static assets, and
662
+ `/favicon.ico` exist for browsers. They are delivery details rather than stable
663
+ integration endpoints. The daemon also retains browser/legacy bridges at
664
+ `/v1/model`, `/v1/endpoint`, `/v1/theme`, `/v1/tor/*`, `/v1/remote-proxy`, and
665
+ `/v1/command`. New clients should prefer `/v1/config/model`,
666
+ `/v1/config/endpoint`, `/v1/config`, and `/v1/commands/{cmd}`. Compatibility
667
+ handlers may accept additional HTTP verbs for old dashboard bundles; only the
668
+ methods in the supported inventory above are contractual.
669
+ <!-- END GENERATED REST INVENTORY -->
442
670
  ## Agent-Explorable Documentation
443
671
 
444
672
  Omnius discovers project-local docs skills from `.aiwg/addons/*/skills`. The docs bundles in this repo expose high-signal entrypoints for agents: