omnius 1.0.608 → 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.
Files changed (40) hide show
  1. package/.aiwg/addons/omnius-docs/README.md +3 -1
  2. package/.aiwg/addons/omnius-docs/manifest.json +4 -2
  3. package/.aiwg/addons/omnius-docs/skills/omnius-agent-onboarding/SKILL.md +70 -0
  4. package/.aiwg/addons/omnius-docs/skills/omnius-docs/SKILL.md +8 -4
  5. package/.aiwg/addons/omnius-rest-docs/README.md +2 -1
  6. package/.aiwg/addons/omnius-rest-docs/skills/omnius-rest-docs/SKILL.md +5 -3
  7. package/README.md +352 -108
  8. package/dist/discovery.d.ts +55 -2
  9. package/dist/index.js +8345 -6382
  10. package/dist/library.d.ts +2 -2
  11. package/dist/library.js +67 -7
  12. package/dist/scripts/vibevoice-asr-worker.py +195 -0
  13. package/dist/update-worker.js +211 -5
  14. package/docs/.vitepress/config.mts +3 -0
  15. package/docs/DISCOVERY.json +27446 -6695
  16. package/docs/DISCOVERY.md +437 -330
  17. package/docs/architecture/agent-system-map.md +176 -0
  18. package/docs/architecture/overview.md +5 -0
  19. package/docs/discovery/agent-map.json +119 -0
  20. package/docs/getting-started/install.md +1 -1
  21. package/docs/guides/agent-integration.md +69 -7
  22. package/docs/guides/dashboard.md +170 -0
  23. package/docs/guides/system-tray.md +28 -0
  24. package/docs/index.md +4 -1
  25. package/docs/reference/configuration.md +10 -0
  26. package/docs/reference/rest-api.md +161 -8
  27. package/docs/reference/slash-commands.md +31 -3
  28. package/docs/rest/INDEX.md +11 -10
  29. package/docs/rest/QUICKREF.md +39 -0
  30. package/docs/rest/endpoints/chat.md +24 -1
  31. package/docs/rest/endpoints/config.md +8 -1
  32. package/docs/rest/endpoints/discovery.md +21 -3
  33. package/docs/rest/endpoints/files.md +7 -2
  34. package/docs/rest/endpoints/memory.md +4 -0
  35. package/docs/rest/endpoints/run.md +17 -4
  36. package/docs/rest/endpoints/voice-vision.md +22 -5
  37. package/npm-shrinkwrap.json +2 -2
  38. package/package.json +6 -3
  39. package/templates/OMNIUS.md +29 -5
  40. package/voices/personaplex/quantize-weights.py +0 -167
@@ -0,0 +1,170 @@
1
+ # Web Dashboard
2
+
3
+ The Omnius daemon serves a zero-build, self-contained dashboard from the same
4
+ origin as the REST API. Start it with `omnius serve`, then open
5
+ `http://127.0.0.1:11435/`. The interface uses Omnius's compact NOCLIP-derived
6
+ style kit and shared responsive observability-card grids; the route registry in
7
+ `packages/cli/src/api/web-ui.ts` is the source of truth for pages and aliases.
8
+
9
+ ## Routes
10
+
11
+ | Route | Alias | Operational surface |
12
+ | --- | --- | --- |
13
+ | `/chat` | `/` | Stateful conversations, full history, active plan/context, attachments, files, and steering check-ins |
14
+ | `/agent` | - | One-shot agent task contract, persona/profile, isolation controls, run history, and event stream |
15
+ | `/voice` | - | Voicechat, exact TTS model selection, model options, ASR setup/activation/test, transcript, and TTS test |
16
+ | `/generate` | - | Image/video/audio/music generation, AV analysis, store relocation, model inventory, and global gallery |
17
+ | `/projects` | - | Workspace discovery, registration, activation, rename, removal, and current-context inspection |
18
+ | `/dashboard` | `/jobs` | System/GPU/resource state, processes, scheduler, services, usage, and update state |
19
+ | `/activity` | - | Run, tool, engine, memory, and server-event observability |
20
+ | `/discover` | - | Capability-catalog start points, intent search, and exact discovery-entry expansion |
21
+ | `/settings` | `/config` | Models, endpoints, voice, runtime behavior, access, keys, appearance, and service configuration |
22
+
23
+ The browser router and daemon HTML allow-list consume the same route registry,
24
+ so a page cannot be added in only one layer without a route test failing.
25
+
26
+ ## Workspace Scope
27
+
28
+ The active workspace is global daemon state and scopes project preferences,
29
+ browser chat organization, TUI session discovery, files, model/theme choices,
30
+ and agent forms. The clickable brand at the top of the sidebar opens a searchable
31
+ workspace dialog sourced from `GET /v1/projects`. Selecting an entry calls
32
+ `POST /v1/projects/switch`; **Manage workspaces** opens `/projects`.
33
+
34
+ Every normal TUI start registers its working directory. The Projects page can
35
+ also call `GET /v1/projects/scan`, explicitly register a root, rename it, make it
36
+ current, or unregister it. Per-project preferences are server-managed through
37
+ `/v1/projects/preferences`; the client cannot overwrite the preference schema
38
+ version or `updatedAt` fields.
39
+
40
+ ## Chats, TUI Sessions, And Agent Runs
41
+
42
+ Chats and agent runs are intentionally different records:
43
+
44
+ - A chat is a multi-turn conversation backed by the canonical daemon chat
45
+ store. It may have an active agent subprocess and a reactive partial reply.
46
+ - A TUI session is quality-filtered visual history imported from the selected
47
+ workspace. Its public id has a `tui:` prefix.
48
+ - An agent run is a one-shot execution record and form snapshot shown on the
49
+ Agent page; it is not inserted into the chat list.
50
+
51
+ The chat index calls `GET /v1/chat/sessions?root=<workspace>`. By default the
52
+ response combines persisted browser chats with importable TUI sessions. The
53
+ session-quality layer suppresses exit-only commands such as `/quit` and `/exit`,
54
+ manual-save placeholders, empty/noise-only transcripts, and duplicate normalized
55
+ TUI histories. Pass `include_tui=0` when an integration needs browser chats only.
56
+
57
+ Opening a chat calls `GET /v1/chat/sessions/{id}` and hydrates the complete
58
+ public message history, source transcript, token/timestamp metadata, and any
59
+ in-flight run. While a run is active, the page polls
60
+ `GET /v1/chat/sessions/{id}/status?since=<seq>` to restore unseen deltas rather
61
+ than rerunning the task. Summaries/titles and ghost-text follow-ups use the
62
+ dedicated summarize and suggest endpoints.
63
+
64
+ Search, pins, folders, folder open-state, and inline display renames are
65
+ workspace-scoped browser organization stored in local storage. They do not
66
+ rewrite the underlying daemon transcript. The current dashboard **del** and row
67
+ delete controls remove the browser-side organization entry only; a canonical
68
+ delete must use the admin-scoped `DELETE /v1/chat/sessions/{id}` endpoint. This
69
+ distinction prevents documentation from implying that hiding a row destroyed
70
+ server history.
71
+
72
+ During an active chat, typing can become a steering check-in. The raw user input
73
+ and its interpreted steering packet are persisted, rendered in the conversation,
74
+ and delivered to the runner at a turn boundary through `/v1/chat/check-in`.
75
+
76
+ ## Agent Command Center
77
+
78
+ The Agent page keeps task definition and runtime observability together. It
79
+ contains the task contract, working directory/workspace synchronization,
80
+ persona/profile, model and endpoint selection, tool and sandbox controls,
81
+ isolation settings, run submission, captured output, and event history. Submit
82
+ with `POST /v1/run`, query `/v1/runs` or `/v1/runs/{id}`, read captured output at
83
+ `/v1/runs/{id}/output`, and abort with `DELETE /v1/runs/{id}`.
84
+
85
+ ## Voice And ASR
86
+
87
+ The Voice page exposes the same control plane as the CLI and REST API:
88
+
89
+ 1. Read `/v1/voice/state` and `/v1/voice/models`.
90
+ 2. Switch an exact TTS model with `/v1/voice/models/switch`; starting or TTS
91
+ synthesis warms the selected engine instead of silently falling back.
92
+ 3. Read `/v1/asr/engines`, choose an engine/model, run managed setup when its
93
+ runtime or weights are absent, activate it, then upload a real audio sample to
94
+ `/v1/asr/test` with optional names/hotwords/context.
95
+ 4. Start `/v1/voicechat/ws` for full-duplex browser mic → ASR → agent text → TTS
96
+ audio. Transcript, partial/final state, agent text, synthesis boundaries, and
97
+ errors remain visible in the page.
98
+
99
+ TTS choices include GLaDOS, Overwatch, the packaged
100
+ `luxtts:announcer-testchamber03` reference, and enabled Voicebox models. ASR is
101
+ selected independently and includes Whisper, managed `transcribe-cli`, the
102
+ currently gated Nemotron adapter, and pinned Microsoft VibeVoice ASR. VibeVoice
103
+ is a completed-file backend (up to 60 minutes, with speakers/timestamps/context),
104
+ not an incremental PCM backend. On CUDA Jetson/ARM64, managed setup inherits the
105
+ host CUDA Torch build and hardware readiness uses `tegrastats` plus Torch CUDA
106
+ device properties; it never replaces the host build with generic PyPI Torch.
107
+
108
+ ## Generate And Media Store
109
+
110
+ Generate lists available model adapters, accepts image/video/audio/music jobs,
111
+ shows model and progress state, and reads the project-independent global gallery
112
+ under `~/.omnius/media`. It also exposes:
113
+
114
+ - AV analysis through `POST /v1/media/av/analyze`;
115
+ - store inspection/migration through `/v1/media/store` and `/v1/media/migrate`;
116
+ - store relocation with a dry-run or background job through
117
+ `/v1/media/relocate`, with progress from `/v1/media/relocate/status`;
118
+ - raw media streaming through `/v1/media/file`.
119
+
120
+ Heavy runtimes and weights remain in the unified Omnius model store; they are
121
+ not copied into each workspace or shipped in the npm package.
122
+
123
+ ## Dashboard, Activity, Discovery, And Settings
124
+
125
+ The Dashboard page combines resource metrics, GPU/VRAM placement, Ollama pool
126
+ state, process/run cards, scheduled work, user services, token usage, and update
127
+ progress. Activity consumes the SSE event stream and presents run/tool/memory/
128
+ engine state. Discover begins from `/v1/discovery/bootstrap`, searches the
129
+ machine catalog, and expands exact entries without requiring source inspection.
130
+ Settings groups model/endpoint, voice, runtime, access/key, appearance, and
131
+ service controls while preserving project scope.
132
+
133
+ ## Verified Updates
134
+
135
+ The dashboard polls `/v1/system` every 10 seconds. When its semver-safe registry
136
+ check reports `latest_version`, the normally hidden update controls become exact
137
+ version buttons. Clicking one:
138
+
139
+ 1. preflights the live daemon version;
140
+ 2. sends `POST /v1/update` with that exact semver;
141
+ 3. polls `GET /v1/update` every two seconds for the durable operation id, phase,
142
+ live subprocess output, failure remediation, and verification evidence;
143
+ 4. requires the installed package, resolved executable, restarted daemon,
144
+ installed package hash, daemon boot hash, and target version to agree;
145
+ 5. reconnects event/model/health views only after verification succeeds.
146
+
147
+ If the tray was running, the coordinator relaunches and verifies it. A failed or
148
+ timed-out update stays visibly failed and includes the update log path; it is not
149
+ reported as complete merely because an npm child exited.
150
+
151
+ ## Authentication And Remote Access
152
+
153
+ Loopback is the default and the safest dashboard deployment. If REST bearer keys
154
+ are configured, the browser stores the selected key locally and sends it through
155
+ the same scope policy as external clients (`read` < `run` < `admin`). Remote
156
+ access should use a tunnel or an authenticated share URL; changing
157
+ `/v1/admin/access` is loopback-only even when the current policy is `any`.
158
+
159
+ Useful diagnostics:
160
+
161
+ ```bash
162
+ curl -s http://127.0.0.1:11435/health
163
+ curl -s http://127.0.0.1:11435/version
164
+ curl -s http://127.0.0.1:11435/v1/routes
165
+ curl -s http://127.0.0.1:11435/v1/projects
166
+ curl -s http://127.0.0.1:11435/v1/update
167
+ ```
168
+
169
+ For the complete supported API use the [REST reference](../reference/rest-api.md),
170
+ and for bearer-key behavior use the [authentication map](../reference/auth-map.md).
@@ -46,6 +46,34 @@ version, dashboard and log shortcuts, service-manager-aware daemon controls,
46
46
  login-startup control, and **Quit indicator**. Daemon stop is a separate,
47
47
  explicit menu action.
48
48
 
49
+ ## Health And Updates
50
+
51
+ The indicator refreshes daemon health and update availability at startup and
52
+ every 10 seconds. Update discovery uses the same cached registry lookup and
53
+ semver comparator as the CLI and dashboard, so an older registry/cache value is
54
+ never presented as an upgrade.
55
+
56
+ The first menu row always shows the live daemon version and health. It is greyed
57
+ and non-clickable while that version is current. When a newer exact version is
58
+ available, the same row changes to **update to vX.Y.Z available** and becomes the
59
+ primary update button. While an update runs it displays the durable transaction
60
+ phase; if verification fails it stays clickable as a retry and its tooltip shows
61
+ the remediation/error instead of silently returning to the current state.
62
+
63
+ Clicking the row starts the same verified global update transaction as
64
+ `POST /v1/update` and `/update quick`. The coordinator:
65
+
66
+ 1. installs the exact target through the real global npm flow;
67
+ 2. verifies the installed package and resolved `omnius` executable;
68
+ 3. restarts the daemon and verifies the target runtime and boot/package hashes;
69
+ 4. relaunches and verifies the indicator because it was running when the update
70
+ started.
71
+
72
+ State persists in `~/.omnius/update-state.json` and detailed output in
73
+ `~/.omnius/update.log`, so a daemon or tray restart does not turn an incomplete
74
+ install into a false success. The dashboard can inspect the same operation with
75
+ `GET /v1/update`.
76
+
49
77
  ## Linux / Ubuntu
50
78
 
51
79
  GNOME needs a StatusNotifier/AppIndicator host. Ubuntu Desktop normally ships
package/docs/index.md CHANGED
@@ -7,10 +7,12 @@ Omnius is an autonomous local-first agent runtime with a TUI, REST daemon, P2P s
7
7
  - [Discovery Cascade](./DISCOVERY.md)
8
8
  - [Machine Discovery Catalog](./DISCOVERY.json)
9
9
  - [Agent And Service Integration](./guides/agent-integration.md)
10
+ - [Agent System Map](./architecture/agent-system-map.md)
10
11
 
11
12
  Agents should begin with `omnius discover "<need>"`, expand a result with
12
13
  `omnius show <id>`, and read only the referenced artifact needed for the
13
- current task.
14
+ current task. Small-context agents should expand one workflow; coding agents
15
+ should additionally expand the owning layer and module.
14
16
 
15
17
  ## Start Here
16
18
 
@@ -23,6 +25,7 @@ current task.
23
25
  ## Workflows
24
26
 
25
27
  - [TUI Workflows](./guides/tui-workflows.md)
28
+ - [Web Dashboard](./guides/dashboard.md)
26
29
  - [Sponsor And COHERE](./guides/sponsor-and-cohere.md)
27
30
  - [Realtime Conversation](./guides/realtime.md)
28
31
  - [Telegram](./guides/telegram.md)
@@ -18,6 +18,10 @@ Configuration is layered from environment, global user settings, project setting
18
18
  | `OMNIUS_DAEMON` | Start in daemon mode when set to `1` |
19
19
  | `OMNIUS_FORCE_NO_THINK` | Force `think: false` for Qwen-style backends |
20
20
  | `OMNIUS_THINK_AUTO` | Enable opt-in automatic thinking mode trigger |
21
+ | `OMNIUS_ASR_CUDA_VISIBLE_DEVICES` | Exact CUDA GPU index or UUID used for managed ASR activation; multi-device masks are rejected (Jetson's integrated GPU is `0`) |
22
+ | `OMNIUS_VIBEVOICE_PYTHON` | Host Python used to create the VibeVoice venv; its CUDA-enabled Torch is inherited with `--system-site-packages` |
23
+ | `OMNIUS_VIBEVOICE_ATTN` | VibeVoice attention implementation (`sdpa` by default; use a host-supported implementation) |
24
+ | `OMNIUS_VIBEVOICE_MAX_NEW_TOKENS` | Explicit VibeVoice structured-transcript generation ceiling (default `32768`) |
21
25
 
22
26
  ## Provider Key Precedence
23
27
 
@@ -61,6 +65,12 @@ Project runtime state:
61
65
 
62
66
  User-global state may live under `~/.omnius/`, including runtime API keys and voice clone references.
63
67
 
68
+ The persisted `asrEngine` and `asrModel` settings select one exact entry from
69
+ the canonical ASR registry. Selection is not readiness: clients should inspect
70
+ `GET /v1/asr/status` before treating a backend as active. Managed VibeVoice
71
+ runtime state is stored below `~/.omnius/runtimes/asr/`; its Hugging Face
72
+ weights use the unified model cache rather than the project or npm package.
73
+
64
74
  ## Auth Key Format
65
75
 
66
76
  ```text
@@ -1,6 +1,11 @@
1
1
  # REST API Reference
2
2
 
3
- This is the maintained human endpoint inventory for the Omnius daemon. The machine contract is generated by `packages/cli/src/api/openapi.ts` and served at `/openapi.json`.
3
+ This is the maintained human inventory for the supported Omnius daemon API. The
4
+ machine contract is generated by `packages/cli/src/api/openapi.ts` and served at
5
+ `/openapi.json`; every operation in that contract must appear here, and the
6
+ generated REST block in the root README must match this file byte-for-byte after
7
+ heading normalization. Browser HTML routes and implementation-only compatibility
8
+ bridges are documented separately and are not part of the stable REST contract.
4
9
 
5
10
  Run the drift check before publishing docs:
6
11
 
@@ -21,6 +26,12 @@ pnpm docs:check
21
26
  | `GET` | `/api-docs` | OpenAPI alias |
22
27
  | `GET` | `/swagger-ui` | Swagger UI alias |
23
28
  | `GET` | `/redoc` | ReDoc renderer |
29
+ | `GET` | `/` | HATEOAS API root when the client does not request HTML |
30
+ | `GET` | `/help` | Compact daemon integration help |
31
+ | `GET` | `/v1/routes` | Flat grep-friendly daemon route summary |
32
+ | `GET` | `/routes` | Route-summary compatibility alias |
33
+ | `GET` | `/asyncapi.json` | AsyncAPI 2.6 voicechat WebSocket contract |
34
+ | `GET` | `/asyncapi` | AsyncAPI compatibility alias |
24
35
 
25
36
  ## Health And Observability
26
37
 
@@ -41,7 +52,8 @@ pnpm docs:check
41
52
 
42
53
  | Method | Path | Purpose |
43
54
  | --- | --- | --- |
44
- | `GET` | `/v1/discovery` | Search or list the capability catalog |
55
+ | `GET` | `/v1/discovery/bootstrap` | Compact agent bootstrap and start-here map |
56
+ | `GET` | `/v1/discovery` | Search layers, workflows, runtimes, modules, stores, and capabilities |
45
57
  | `GET` | `/v1/discovery/{id}` | Expand one stable capability entry |
46
58
 
47
59
  ## Inference And Chat
@@ -57,11 +69,42 @@ pnpm docs:check
57
69
  | `POST` | `/v1/embeddings` | OpenAI-compatible embeddings |
58
70
  | `POST` | `/api/embed` | Ollama-compatible embeddings alias |
59
71
  | `GET` | `/api/tags` | Ollama-compatible model tags |
60
- | `GET` | `/v1/chat/sessions` | Active chat sessions |
72
+ | `POST` | `/realtime` | Text-only voice-adapter reply from a transcript |
73
+ | `POST` | `/v1/realtime` | Auth-scoped realtime adapter alias |
74
+ | `GET` | `/v1/chat/sessions` | Workspace-scoped persisted browser chats and importable TUI sessions |
75
+ | `GET` | `/v1/chat/sessions/{id}` | Hydrate full session history, transcript, and in-flight state |
76
+ | `DELETE` | `/v1/chat/sessions/{id}` | Permanently delete a canonical chat or TUI history session |
61
77
  | `POST` | `/v1/chat/sessions/{id}/summarize` | Generate + cache an inference-based session title/summary |
62
78
  | `POST` | `/v1/chat/suggest-followup` | Suggest one short next-message follow-up (ghost-text input) |
63
79
  | `GET` | `/v1/chat/sessions/{id}/status` | Reactive recall: live run status + unseen deltas (`?since=<seq>`) |
64
80
  | `POST` | `/v1/chat/check-in` | Steering check-in for active chat |
81
+ | `POST` | `/v1/chat/attachments` | Upload an attachment for a stateful chat |
82
+
83
+ ### Session History Contract
84
+
85
+ `GET /v1/chat/sessions` is a history index, not merely a list of processes that
86
+ are currently active. It returns canonical persisted browser chats for the
87
+ selected workspace and, by default, quality-filtered TUI visual sessions that
88
+ can be imported on demand. Pass `?root=/absolute/workspace` to scope the list and
89
+ `?include_tui=0` to omit TUI history. Exit-only inputs such as `/quit` and
90
+ `/exit`, manual-save noise, empty transcripts, and duplicate normalized TUI
91
+ sessions are rejected by the session-quality projection rather than presented as
92
+ chats.
93
+
94
+ Selecting a row should call `GET /v1/chat/sessions/{id}`. That response hydrates
95
+ the complete public message history (system prompts are intentionally omitted),
96
+ the original TUI transcript when applicable, token counts, timestamps, source
97
+ and project identity, and any in-flight run with a bounded partial-output tail.
98
+ Use the `status` endpoint with `?since=<seq>` for cheap reactive polling while a
99
+ run is active. `DELETE /v1/chat/sessions/{id}` is an admin operation and removes
100
+ the canonical record; deleting only a browser-side row does not remove daemon
101
+ history.
102
+
103
+ `POST /realtime` and `/v1/realtime` are text-only conversation adapters. They
104
+ accept transcript text through `message`, `text`, `recent_turn`, `asr_text`, or
105
+ `callerText`, optionally accept adapter-local `soul_md`, and can return plain
106
+ text with `Accept: text/plain` or `format: "text"`. ASR and TTS remain separate
107
+ operations.
65
108
 
66
109
  ## Agentic Runs
67
110
 
@@ -70,6 +113,7 @@ pnpm docs:check
70
113
  | `POST` | `/v1/run` | Submit agentic task |
71
114
  | `GET` | `/v1/runs` | List runs |
72
115
  | `GET` | `/v1/runs/{id}` | Get run details |
116
+ | `GET` | `/v1/runs/{id}/output` | Read captured run output and status |
73
117
  | `DELETE` | `/v1/runs/{id}` | Abort run |
74
118
  | `POST` | `/v1/todos` | Create or update todos for current session |
75
119
  | `GET` | `/v1/todos` | List sessions with todos |
@@ -109,6 +153,9 @@ pnpm docs:check
109
153
  | `GET` | `/v1/projects/preferences` | Read project preferences |
110
154
  | `PUT` | `/v1/projects/preferences` | Patch project preferences |
111
155
  | `DELETE` | `/v1/projects/preferences` | Reset project preferences |
156
+ | `GET` | `/v1/projects/scan` | Scan configured roots for discoverable workspaces |
157
+ | `GET` | `/v1/admin/access` | Read the daemon network access mode |
158
+ | `POST` | `/v1/admin/access` | Change and persist access mode from loopback only |
112
159
 
113
160
  ## Skills, Commands, Tools, MCP
114
161
 
@@ -132,6 +179,37 @@ pnpm docs:check
132
179
  | `GET` | `/v1/codegraph/snapshot` | Code graph snapshot |
133
180
  | `GET` | `/v1/codegraph/events` | Code graph SSE |
134
181
 
182
+ ### Registering Application-Specific Tools
183
+
184
+ Applications can register their own tools so Omnius agents can discover and
185
+ invoke them alongside built-ins. `transport.type` selects the bridge:
186
+
187
+ - `http` makes Omnius POST `{name, args, session_id}` to the application's
188
+ `callback_url` and relay the result.
189
+ - `mcp` proxies to a named tool on an MCP server and can auto-connect from the
190
+ supplied connection descriptor.
191
+
192
+ Registrations persist per workspace at `.omnius/external-tools.json`, appear in
193
+ `GET /v1/tools`, and use the same scope and off-device security gates as built-in
194
+ tools. Registration needs `run` scope; a non-loopback caller needs `admin`.
195
+
196
+ ```bash
197
+ curl -s -X POST localhost:11435/v1/tools/register -H 'content-type: application/json' -d '{
198
+ "name": "lookup_order",
199
+ "description": "Look up an order by id",
200
+ "parameters": {"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},
201
+ "security": {"requires_scope":"run","risk":"low"},
202
+ "transport": {"type":"http","callback_url":"https://app.internal/tools/lookup_order","auth_header":"Bearer …"}
203
+ }'
204
+ curl -s localhost:11435/v1/tools/lookup_order
205
+ curl -s -X POST localhost:11435/v1/tools/lookup_order/call -H 'content-type: application/json' -d '{"args":{"id":"A-1001"}}'
206
+ 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}}]}'
207
+ curl -s -X DELETE localhost:11435/v1/tools/lookup_order
208
+ ```
209
+
210
+ The MCP equivalent uses a transport such as
211
+ `{"type":"mcp","server":"acme","tool":"search","connect":{"url":"https://app.internal/mcp","transport":"streamable-http"}}`.
212
+
135
213
  ## AIWG
136
214
 
137
215
  | Method | Path | Purpose |
@@ -157,6 +235,10 @@ pnpm docs:check
157
235
  | `POST` | `/v1/memory/write` | Write memory |
158
236
  | `GET` | `/v1/memory/episodes` | List episodes |
159
237
  | `GET` | `/v1/memory/failures` | List failure records |
238
+ | `POST` | `/v1/memory/ingest` | Ingest content or files into memory |
239
+ | `GET` | `/v1/memory/entities` | List extracted memory entities |
240
+ | `POST` | `/v1/memory/jobs/run` | Run a named memory-maintenance job |
241
+ | `POST` | `/v1/memory/feedback` | Record relevance or quality feedback for a memory item |
160
242
  | `GET` | `/v1/sessions` | List task sessions |
161
243
  | `GET` | `/v1/sessions/{id}` | Get session history |
162
244
  | `GET` | `/v1/context` | Current context snapshot |
@@ -166,12 +248,22 @@ pnpm docs:check
166
248
  | `GET` | `/v1/context/restore` | Build restore prompt |
167
249
  | `POST` | `/v1/context/compact` | Request compaction |
168
250
 
251
+ Context-window dumps are written before backend inference for main agents,
252
+ sub-agents, internal runners, and adversary audits. Query
253
+ `GET /v1/context/window-dumps?agent_type=main` for summaries with signal/noise
254
+ metrics, or fetch a full payload by id. Dumps include focus-supervisor state when
255
+ a next-action contract is active. Set `OMNIUS_CONTEXT_WINDOW_DUMP_DIR` to move
256
+ the store, `OMNIUS_DISABLE_CONTEXT_WINDOW_DUMPS=1` to disable it, and
257
+ `OMNIUS_FOCUS_SUPERVISOR=off|auto|strict` to tune focus enforcement.
258
+
169
259
  ## Files, Nexus, Ollama Pool
170
260
 
171
261
  | Method | Path | Purpose |
172
262
  | --- | --- | --- |
173
263
  | `GET` | `/v1/files` | List workspace directory |
174
264
  | `POST` | `/v1/files/read` | Read workspace file |
265
+ | `GET` | `/v1/files/raw` | Stream raw workspace bytes with content type and range support |
266
+ | `HEAD` | `/v1/files/raw` | Inspect raw-file response metadata |
175
267
  | `GET` | `/v1/nexus/status` | Nexus peer state |
176
268
  | `GET` | `/v1/sponsors` | Sponsor directory cache |
177
269
  | `GET` | `/v1/ollama/pool/processes` | Ollama process inventory |
@@ -188,13 +280,20 @@ pnpm docs:check
188
280
  | `POST` | `/v1/voice/models/switch` | Switch and enable an exact TTS model by default |
189
281
  | `GET` | `/v1/voice/supertonic-settings` | Voice tuning settings |
190
282
  | `POST` | `/v1/voice/supertonic-settings` | Update voice tuning settings |
191
- | `GET` | `/v1/voice/asr-models` | ASR models |
192
- | `POST` | `/v1/voice/asr-models/switch` | Switch ASR model |
283
+ | `GET` | `/v1/asr/engines` | Canonical ASR engines/models, capabilities, readiness, and selection |
284
+ | `GET` | `/v1/asr/status` · `/v1/asr/selection` | Selected engine/model and runtime status |
285
+ | `PATCH` | `/v1/asr/selection` | Persist and activate an exact engine/model |
286
+ | `POST` | `/v1/asr/activate` | Activate and persist an exact engine/model |
287
+ | `POST` | `/v1/asr/engines/{engineId}/setup` | Install a managed runtime and pinned weights |
288
+ | `POST` | `/v1/asr/transcriptions` · `/v1/asr/test` | Transcribe/test using the real selected backend |
289
+ | `GET` | `/v1/voice/asr-models` | Compatibility registry alias |
290
+ | `POST` | `/v1/voice/asr-models/switch` | Compatibility activation alias |
193
291
  | `POST` | `/v1/voice/tts` | Synthesize speech |
194
292
  | `POST` | `/v1/audio/speech` | OpenAI-compatible TTS alias |
195
293
  | `POST` | `/v1/voice/transcribe` | Transcribe audio |
294
+ | `POST` | `/v1/voice/asr` | Legacy transcription alias |
196
295
  | `POST` | `/v1/audio/transcriptions` | OpenAI-compatible transcription alias |
197
- | `POST` | `/v1/voice/transcribe/stream` | Streaming transcription |
296
+ | `POST` | `/v1/voice/transcribe/stream` | Isolated final transcription over SSE (no shared mic state or fake partials) |
198
297
  | `POST` | `/v1/voice/clone-refs` | Upload voice clone reference |
199
298
  | `GET` | `/v1/voice/clone-refs` | List clone references |
200
299
  | `POST` | `/v1/voice/clone-refs/upload` | Upload clone reference |
@@ -205,6 +304,8 @@ pnpm docs:check
205
304
  | `POST` | `/v1/voice/speak` | Broadcast speech to voicechat clients |
206
305
  | `GET` | `/v1/voicechat/ws` | WebSocket upgrade for full-duplex voicechat |
207
306
  | `POST` | `/v1/vision/describe` | Vision describe placeholder |
307
+ | `POST` | `/v1/vision/embed` | Create a vision embedding from media |
308
+ | `POST` | `/v1/audio/embed` | Create an audio embedding from audio input |
208
309
 
209
310
  `POST /v1/voice/tts` and `/v1/audio/speech` automatically warm the daemon.
210
311
  An explicit model must render exactly or the request fails; Omnius does not
@@ -214,6 +315,19 @@ Overwatch, `luxtts:announcer-testchamber03`, and the selected Voicebox suite.
214
315
  Set `OMNIUS_VOICEBOX_MODELS=all` for every carried-in Voicebox model, leave it
215
316
  at `stable` for the default set, or provide a comma-separated subset.
216
317
 
318
+ ASR selection is independent from TTS selection. The registry currently exposes
319
+ OpenAI Whisper, managed `transcribe-cli`, NVIDIA Nemotron (reported unavailable
320
+ until its legacy bootstrap is migrated), and Microsoft VibeVoice ASR. VibeVoice
321
+ uses the exact pinned `microsoft/VibeVoice-ASR` checkpoint, reports setup and
322
+ activation separately, supports completed files up to 60 minutes with speakers,
323
+ timestamps, and `?context=` hotwords, and is deliberately not advertised as an
324
+ incremental PCM backend. Its managed setup inherits the host CUDA-enabled Torch
325
+ build (needed on Jetson/ARM64), never installs generic PyPI Torch, and activation
326
+ requires one explicit capable GPU. Discrete Linux uses `nvidia-smi` process/GPU
327
+ evidence; Jetson/L4T uses NVIDIA's documented `tegrastats` plus CUDA Torch device
328
+ properties because `nvidia-smi` is unavailable there. Model weights live under
329
+ the unified Omnius ASR cache and are not shipped in the npm package.
330
+
217
331
  ## Generative Media
218
332
 
219
333
  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}`.
@@ -239,13 +353,35 @@ All generation is backed by the unified `~/.omnius` model store and shared venvs
239
353
  | --- | --- | --- |
240
354
  | `GET` | `/v1/engines` | Long-running engine status |
241
355
  | `GET` | `/v1/scheduled` | List scheduled jobs |
242
- | `GET` | `/v1/scheduled/all` | List all scheduled jobs |
356
+ | `DELETE` | `/v1/scheduled/all` | Delete all tasks, timers, cron entries, and persisted sources |
243
357
  | `GET` | `/v1/scheduled/status` | Scheduler status |
358
+ | `POST` | `/v1/scheduled/{id}` | Enable or disable one scheduled task or user timer |
359
+ | `DELETE` | `/v1/scheduled/{id}` | Delete one scheduled task or user timer |
244
360
  | `POST` | `/v1/scheduled/kill` | Kill scheduled job |
245
361
  | `POST` | `/v1/scheduled/fixup` | Reconcile scheduled state |
246
- | `POST` | `/v1/scheduled/reconcile` | Force scheduled reconciliation |
362
+ | `GET` | `/v1/scheduled/reconcile` | Preview scheduled reconciliation |
363
+ | `POST` | `/v1/scheduled/reconcile` | Preview or apply scheduled reconciliation |
247
364
  | `GET` | `/v1/services/systemd` | Systemd service status |
365
+ | `POST` | `/v1/services/systemd/{unit}` | Act on one user-level systemd unit |
248
366
  | `GET` | `/v1/update` | Self-update status |
367
+ | `POST` | `/v1/update` | Start an exact-version verified global update transaction |
368
+
369
+ ### Verified Global Update Transaction
370
+
371
+ `POST /v1/update` is not a CLI-local package edit. It starts one durable
372
+ transaction that installs the requested exact npm version globally, verifies
373
+ the installed package and resolved `omnius` executable, restarts and verifies
374
+ the daemon, verifies package/hash/runtime agreement, and relaunches the tray if
375
+ it was running. The response is `202` with operation state; poll
376
+ `GET /v1/update` for live phase, subprocess output, verification evidence, and
377
+ the final success or failure. Concurrent transactions and requests with no
378
+ available target return `409`.
379
+
380
+ The web dashboard and native tray both use this same endpoint. Update discovery
381
+ is shared and semver-aware, so an older cached registry result cannot downgrade
382
+ or falsely present an update. A completed transaction means the global package,
383
+ executable, daemon, and tray runtime were all reconciled—not merely that `npm`
384
+ exited successfully.
249
385
 
250
386
  ## AIMS Governance
251
387
 
@@ -268,3 +404,20 @@ All generation is backed by the unified `~/.omnius` model store and shared venvs
268
404
  | `GET` | `/v1/aims/oversight` | Human oversight gates |
269
405
  | `GET` | `/v1/aims/decisions` | Consequential decision log |
270
406
  | `GET` | `/v1/aims/config-history` | Config change history |
407
+
408
+ ## Browser And Compatibility Surfaces
409
+
410
+ The dashboard HTML routes (`/`, `/chat`, `/agent`, `/voice`, `/generate`,
411
+ `/projects`, `/dashboard`, `/jobs`, `/activity`, `/discover`, `/settings`, and
412
+ `/config`) are documented in the [dashboard guide](../guides/dashboard.md). They
413
+ are pages, not JSON API operations; `/` returns the HATEOAS JSON root when the
414
+ client does not request HTML.
415
+
416
+ Swagger/ReDoc trailing-slash variants, `/api/docs/*` static assets, and
417
+ `/favicon.ico` exist for browsers. They are delivery details rather than stable
418
+ integration endpoints. The daemon also retains browser/legacy bridges at
419
+ `/v1/model`, `/v1/endpoint`, `/v1/theme`, `/v1/tor/*`, `/v1/remote-proxy`, and
420
+ `/v1/command`. New clients should prefer `/v1/config/model`,
421
+ `/v1/config/endpoint`, `/v1/config`, and `/v1/commands/{cmd}`. Compatibility
422
+ handlers may accept additional HTTP verbs for old dashboard bundles; only the
423
+ methods in the supported inventory above are contractual.
@@ -24,7 +24,7 @@ Command metadata drives the TUI, REST command proxy, gateway exposure, and agent
24
24
  | Tools And Skills | 6 |
25
25
  | External Gateways | 2 |
26
26
  | Secrets | 2 |
27
- | Interface | 9 |
27
+ | Interface | 10 |
28
28
  | Administration | 2 |
29
29
  | Planned | 8 |
30
30
 
@@ -1376,13 +1376,18 @@ Toggle TTS voice feedback
1376
1376
  | Safety | none |
1377
1377
  | Aliases | - |
1378
1378
  | Args | - |
1379
- | Subcommands | clone |
1379
+ | Subcommands | clone, asr |
1380
1380
 
1381
1381
  Signatures:
1382
1382
 
1383
1383
  - `/voice` - Toggle TTS voice feedback
1384
- - `/voice &lt;model&gt;` - Set and enable a voice: glados, overwatch, luxtts:announcer-testchamber03, kokoro, luxtts, misotts, supertonic, or a selected voicebox_* model
1384
+ - `/voice &lt;model&gt;` - Set voice: glados, overwatch, luxtts:announcer-testchamber03, kokoro, luxtts, misotts, supertonic, or a selected voicebox_* model
1385
1385
  - `/voice clone &lt;file&gt;` - Set voice clone reference audio (wav/mp3/ogg/flac)
1386
+ - `/voice asr` - Open ASR system and model selection
1387
+ - `/voice asr status` - Show selected ASR engine/model and activation state
1388
+ - `/voice asr list` - List ASR engines, models, and live/file capabilities
1389
+ - `/voice asr use &lt;engine&gt; [model]` - Select and activate an installed ASR engine/model
1390
+ - `/voice asr setup &lt;engine&gt; [model] [device=N]` - Install pinned ASR runtime/weights and activate on an exact CUDA device
1386
1391
  - `/voice clone glados` - Generate clone ref from GLaDOS for LuxTTS/MisoTTS voice cloning
1387
1392
  - `/voice clone overwatch` - Generate clone ref from Overwatch for LuxTTS/MisoTTS voice cloning
1388
1393
 
@@ -1957,6 +1962,29 @@ Signatures:
1957
1962
 
1958
1963
  - `/emojis` - Toggle emoji rendering in TUI messages
1959
1964
 
1965
+ ### /indicator
1966
+
1967
+ Start the native system indicator and report readiness
1968
+
1969
+ | Field | Value |
1970
+ | --- | --- |
1971
+ | Category | Interface |
1972
+ | Status | implemented |
1973
+ | Surfaces | tui |
1974
+ | Safety | userOnly |
1975
+ | Aliases | /tray |
1976
+ | Args | - |
1977
+ | Subcommands | start, status |
1978
+
1979
+ Signatures:
1980
+
1981
+ - `/indicator` - Start the native system indicator and report readiness
1982
+ - `/indicator start` - Start the native system indicator and report readiness
1983
+ - `/indicator status` - Report native system indicator readiness and daemon health
1984
+ - `/tray` - Alias for /indicator
1985
+ - `/tray start` - Alias for /indicator start
1986
+ - `/tray status` - Alias for /indicator status
1987
+
1960
1988
  ### /mouse
1961
1989
 
1962
1990
  Toggle terminal mouse tracking
@@ -3,7 +3,8 @@
3
3
  This directory is the human-readable REST API reference for Omnius. It is meant to be explored incrementally by agents and humans.
4
4
 
5
5
  For intent-first lookup, start with
6
- [Discovery](./endpoints/discovery.md), `GET /v1/discovery`, or the bundled
6
+ [Discovery](./endpoints/discovery.md), `GET /v1/discovery/bootstrap`,
7
+ `GET /v1/discovery`, or the bundled
7
8
  [`DISCOVERY.json`](../DISCOVERY.json). Use this index after the catalog points
8
9
  to an endpoint family.
9
10
 
@@ -94,29 +95,29 @@ Scopes:
94
95
  | Family | Representative endpoints |
95
96
  | --- | --- |
96
97
  | Health | `/health`, `/health/ready`, `/health/startup`, `/version`, `/metrics` |
97
- | Discovery | `/v1/discovery`, `/v1/discovery/{id}` |
98
- | Inference and chat | `/v1/models`, `/v1/chat/completions`, `/v1/embeddings`, `/v1/chat`, `/v1/generate`, `/api/generate`, `/v1/chat/sessions`, `/v1/chat/check-in` |
98
+ | Discovery | `/v1/discovery/bootstrap`, `/v1/discovery`, `/v1/discovery/{id}` |
99
+ | Inference and chat | `/v1/models`, `/v1/chat/completions`, `/v1/chat`, `/realtime`, `/v1/realtime`, `/v1/chat/sessions`, `/v1/chat/sessions/{id}`, `/v1/chat/check-in` |
99
100
  | AIWG | `/v1/aiwg`, `/v1/aiwg/frameworks`, `/v1/aiwg/skills`, `/v1/aiwg/use`, `/v1/aiwg/expand` |
100
- | Runs | `/v1/run`, `/v1/runs`, `/v1/runs/{id}`, `/v1/todos`, `/v1/todos/{session_id}` |
101
+ | Runs | `/v1/run`, `/v1/runs`, `/v1/runs/{id}`, `/v1/runs/{id}/output`, `/v1/todos`, `/v1/todos/{session_id}` |
101
102
  | Config | `/v1/config`, `/v1/config/model`, `/v1/config/endpoint`, `/v1/config/endpoint/test`, `/v1/config/endpoint/history`, `/v1/share/generate` |
102
103
  | Metering and audit | `/v1/usage`, `/v1/audit`, `/v1/cost`, `/v1/system` |
103
104
  | Runtime keys | `/v1/keys`, `/v1/keys/{prefix}` |
104
105
  | Profiles | `/v1/profiles`, `/v1/profiles/{name}` |
105
- | Files | `/v1/files`, `/v1/files/read` |
106
+ | Files | `/v1/files`, `/v1/files/read`, `/v1/files/raw` |
106
107
  | Skills and commands | `/v1/skills`, `/v1/skills/{name}`, `/v1/commands`, `/v1/commands/{cmd}` |
107
108
  | MCP | `/v1/mcps`, `/v1/mcps/{name}`, `/v1/mcps/{name}/call` |
108
109
  | Tools | `/v1/tools`, `/v1/tools/{name}`, `/v1/tools/{name}/call`, `/v1/hooks`, `/v1/agents` |
109
- | Memory | `/v1/memory`, `/v1/memory/search`, `/v1/memory/write`, `/v1/memory/episodes`, `/v1/memory/failures` |
110
+ | Memory | `/v1/memory`, `/v1/memory/search`, `/v1/memory/write`, `/v1/memory/ingest`, `/v1/memory/entities`, `/v1/memory/jobs/run`, `/v1/memory/feedback` |
110
111
  | Events | `/v1/events` |
111
112
  | Sessions and context | `/v1/sessions`, `/v1/sessions/{id}`, `/v1/context`, `/v1/context/window-dumps`, `/v1/context/window-dumps/{id}`, `/v1/context/save`, `/v1/context/restore`, `/v1/context/compact` |
112
113
  | Nexus | `/v1/nexus/status`, `/v1/sponsors` |
113
114
  | Ollama pool | `/v1/ollama/pool/processes`, `/v1/ollama/pool/cleanup` |
114
- | Voice and audio | `/v1/voice/state`, `/v1/voice/models`, `/v1/voice/tts`, `/v1/audio/speech`, `/v1/voice/transcribe`, `/v1/audio/transcriptions`, `/v1/voicechat/ws` |
115
- | Vision | `/v1/vision/describe` |
116
- | Projects | `/v1/projects`, `/v1/projects/current`, `/v1/projects/switch`, `/v1/projects/register`, `/v1/projects/rename`, `/v1/projects/preferences` |
115
+ | Voice and audio | `/v1/voice/state`, `/v1/voice/models`, `/v1/voice/tts`, `/v1/audio/speech`, `/v1/asr/engines`, `/v1/asr/selection`, `/v1/asr/activate`, `/v1/asr/transcriptions`, `/v1/asr/test`, `/v1/audio/transcriptions`, `/v1/voicechat/ws` |
116
+ | Vision/audio embeddings | `/v1/vision/describe`, `/v1/vision/embed`, `/v1/audio/embed` |
117
+ | Projects | `/v1/projects`, `/v1/projects/current`, `/v1/projects/switch`, `/v1/projects/register`, `/v1/projects/rename`, `/v1/projects/scan`, `/v1/projects/preferences` |
117
118
  | Code graph | `/v1/codegraph/snapshot`, `/v1/codegraph/events` |
118
119
  | Scheduled jobs | `/v1/scheduled`, `/v1/scheduled/all`, `/v1/scheduled/status`, `/v1/scheduled/kill`, `/v1/scheduled/fixup`, `/v1/scheduled/reconcile` |
119
- | Services and update | `/v1/services/systemd`, `/v1/update` |
120
+ | Services and update | `/v1/services/systemd`, `/v1/services/systemd/{unit}`, `/v1/update` |
120
121
  | AIMS | `/v1/aims`, `/v1/aims/policies`, `/v1/aims/roles`, `/v1/aims/resources`, `/v1/aims/impact-assessments`, `/v1/aims/lifecycle`, `/v1/aims/data-quality`, `/v1/aims/transparency`, `/v1/aims/usage`, `/v1/aims/suppliers`, `/v1/aims/incidents`, `/v1/aims/oversight`, `/v1/aims/decisions`, `/v1/aims/config-history` |
121
122
 
122
123
  ## Realtime REST Flag