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/docs/DISCOVERY.md CHANGED
@@ -46,14 +46,20 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
46
46
 
47
47
  | ID | Title | Summary |
48
48
  | --- | --- | --- |
49
+ | `api.` | / | HATEOAS API root when the client does not request HTML |
50
+ | `api.asyncapi` | /asyncapi | Compatibility alias for the AsyncAPI contract |
49
51
  | `api.discovery` | Discovery API | Search the Omnius capability catalog and expand a stable entry over REST. |
50
52
  | `api.health` | /health | Liveness probe |
51
53
  | `api.health-ready` | /health/ready | Readiness probe |
52
54
  | `api.health-startup` | /health/startup | Startup complete |
55
+ | `api.help` | /help | Compact daemon help and integration entrypoints |
53
56
  | `api.metrics` | /metrics | Prometheus metrics |
54
57
  | `api.openapi` | OpenAPI contract | The live machine-readable REST contract for the running Omnius daemon. |
58
+ | `api.realtime` | /realtime | Generate one short text reply for a voice-adapter transcript |
59
+ | `api.routes` | /routes | Compatibility alias for the daemon route summary |
55
60
  | `api.skills` | Skills API | List and load Omnius and project skills incrementally. |
56
61
  | `api.tools` | Tools API | Inspect live tool schemas and invocation metadata, register external tools, and call only tools marked direct-callable. |
62
+ | `api.v1-admin-access` | /v1/admin/access | Read the daemon network access mode; Change and persist the daemon network access mode from loopback |
57
63
  | `api.v1-agents` | /v1/agents | List agent types |
58
64
  | `api.v1-aims` | /v1/aims | AIMS root — control map and endpoint index |
59
65
  | `api.v1-aims-config-history` | /v1/aims/config-history | Configuration change history (A.6.2.8) |
@@ -87,13 +93,16 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
87
93
  | `api.v1-asr-status` | /v1/asr/status | Read the selected ASR engine/model and runtime status |
88
94
  | `api.v1-asr-test` | /v1/asr/test | Test the selected ASR engine using an uploaded audio sample |
89
95
  | `api.v1-asr-transcriptions` | /v1/asr/transcriptions | Transcribe audio with the selected ASR engine |
96
+ | `api.v1-audio-embed` | /v1/audio/embed | Create an audio embedding for uploaded or referenced audio |
90
97
  | `api.v1-audio-speech` | /v1/audio/speech | OpenAI-compatible alias of /v1/voice/tts (input/voice/response_format names) |
91
98
  | `api.v1-audio-transcriptions` | /v1/audio/transcriptions | OpenAI-compatible alias of /v1/asr/transcriptions |
92
99
  | `api.v1-audit` | /v1/audit | Query audit log |
93
100
  | `api.v1-chat` | /v1/chat | Stateful chat session with full agent tool access (OpenAI-compatible response shape) |
101
+ | `api.v1-chat-attachments` | /v1/chat/attachments | Upload an attachment for a stateful chat |
94
102
  | `api.v1-chat-check-in` | /v1/chat/check-in | Send a steering check-in to the active chat session — returns model inference + queued steering_packet |
95
103
  | `api.v1-chat-completions` | /v1/chat/completions | OpenAI-compatible chat completion (with optional server-side agent loop) |
96
- | `api.v1-chat-sessions` | /v1/chat/sessions | List active chat sessions |
104
+ | `api.v1-chat-sessions` | /v1/chat/sessions | List persisted browser chats and importable TUI sessions for a workspace |
105
+ | `api.v1-chat-sessions-id` | /v1/chat/sessions/{id} | Hydrate one chat or imported TUI session with full history and live-run state; Permanently delete a canonical chat or TUI history session |
97
106
  | `api.v1-chat-sessions-id-status` | /v1/chat/sessions/{id}/status | Reactive recall: is this session running right now + unseen deltas since ?since=&lt;seq&gt; (running, phase, seq, partial, deltas[]) |
98
107
  | `api.v1-chat-sessions-id-summarize` | /v1/chat/sessions/{id}/summarize | Generate + cache an inference-based title/summary for a session — body {force?, root?} |
99
108
  | `api.v1-chat-suggest-followup` | /v1/chat/suggest-followup | Suggest one short next-message follow-up for a session (ghost-text input) — body {session_id} |
@@ -121,6 +130,7 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
121
130
  | `api.v1-evaluate` | /v1/evaluate | Evaluate a run by ID |
122
131
  | `api.v1-events` | /v1/events | Subscribe to the event bus (PT-06) |
123
132
  | `api.v1-files` | /v1/files | List workspace directory |
133
+ | `api.v1-files-raw` | /v1/files/raw | Stream raw workspace file bytes for browser previews; Inspect raw workspace file response metadata |
124
134
  | `api.v1-files-read` | /v1/files/read | Read file content (PT-05) |
125
135
  | `api.v1-hooks` | /v1/hooks | List hook types and counts |
126
136
  | `api.v1-index` | /v1/index | Trigger repository indexing |
@@ -142,8 +152,12 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
142
152
  | `api.v1-media-store` | /v1/media/store | Media-store root + disk usage plus any legacy per-group caches still reclaimable |
143
153
  | `api.v1-media-video` | /v1/media/video | Generate a video — body {prompt, model?, backend?, num_frames?, fps?, width?, height?, steps?, guidance?, seed?} |
144
154
  | `api.v1-memory` | /v1/memory | Memory backends summary (PT-04) |
155
+ | `api.v1-memory-entities` | /v1/memory/entities | List extracted memory entities |
145
156
  | `api.v1-memory-episodes` | /v1/memory/episodes | List episodes |
146
157
  | `api.v1-memory-failures` | /v1/memory/failures | List failures |
158
+ | `api.v1-memory-feedback` | /v1/memory/feedback | Record relevance or quality feedback for a memory item |
159
+ | `api.v1-memory-ingest` | /v1/memory/ingest | Ingest content or files into Omnius memory |
160
+ | `api.v1-memory-jobs-run` | /v1/memory/jobs/run | Run a named memory maintenance job |
147
161
  | `api.v1-memory-search` | /v1/memory/search | Search memory stores (PT-04) |
148
162
  | `api.v1-memory-write` | /v1/memory/write | Write a memory entry (PT-04) |
149
163
  | `api.v1-models` | /v1/models | List aggregated models |
@@ -157,17 +171,23 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
157
171
  | `api.v1-projects-preferences` | /v1/projects/preferences | Get per-project UI preferences (model, theme, current chat session id, current agent run id, recent indexes); Patch preferences (server-managed v + updatedAt are stripped from client patches); Reset preferences to default |
158
172
  | `api.v1-projects-register` | /v1/projects/register | Register a project root — body {root, pid?} |
159
173
  | `api.v1-projects-rename` | /v1/projects/rename | Rename a project — body {root, name} |
174
+ | `api.v1-projects-scan` | /v1/projects/scan | Scan configured roots for discoverable project workspaces |
160
175
  | `api.v1-projects-switch` | /v1/projects/switch | Set the active project — body {root, registerIfMissing?} |
176
+ | `api.v1-realtime` | /v1/realtime | Auth-scoped alias for the text-only realtime voice adapter |
177
+ | `api.v1-routes` | /v1/routes | Flat grep-friendly daemon route summary |
161
178
  | `api.v1-run` | /v1/run | Submit agentic task |
162
179
  | `api.v1-runs` | /v1/runs | List runs |
163
180
  | `api.v1-runs-id` | /v1/runs/{id} | Get run details; Abort run |
181
+ | `api.v1-runs-id-output` | /v1/runs/{id}/output | Read the captured output for one agentic run |
164
182
  | `api.v1-scheduled` | /v1/scheduled | List scheduled jobs |
165
- | `api.v1-scheduled-all` | /v1/scheduled/all | List all scheduled jobs (all queues) |
183
+ | `api.v1-scheduled-all` | /v1/scheduled/all | Delete all scheduled tasks, timers, cron entries, and persisted sources |
166
184
  | `api.v1-scheduled-fixup` | /v1/scheduled/fixup | Reconcile scheduled job state |
185
+ | `api.v1-scheduled-id` | /v1/scheduled/{id} | Enable or disable one scheduled task or user timer; Delete one scheduled task or user timer |
167
186
  | `api.v1-scheduled-kill` | /v1/scheduled/kill | Kill a running scheduled job |
168
- | `api.v1-scheduled-reconcile` | /v1/scheduled/reconcile | Force-reconcile scheduled jobs against persisted state |
187
+ | `api.v1-scheduled-reconcile` | /v1/scheduled/reconcile | Preview reconciliation of persisted and legacy scheduled jobs; Preview or apply scheduled-job reconciliation |
169
188
  | `api.v1-scheduled-status` | /v1/scheduled/status | Status of scheduled job runner |
170
189
  | `api.v1-services-systemd` | /v1/services/systemd | Systemd service status (where supported) |
190
+ | `api.v1-services-systemd-unit` | /v1/services/systemd/{unit} | Perform an action on one user-level systemd unit |
171
191
  | `api.v1-sessions` | /v1/sessions | List Omnius task sessions |
172
192
  | `api.v1-sessions-id` | /v1/sessions/{id} | Get session history |
173
193
  | `api.v1-skills` | /v1/skills | List AIWG skills (PT-02) |
@@ -184,6 +204,7 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
184
204
  | `api.v1-update` | /v1/update | Global Omnius update transaction status; Start an exact-version global Omnius update |
185
205
  | `api.v1-usage` | /v1/usage | Token usage and rate limits |
186
206
  | `api.v1-vision-describe` | /v1/vision/describe | Vision describe (deferred to PT-07) |
207
+ | `api.v1-vision-embed` | /v1/vision/embed | Create a vision embedding for uploaded or referenced media |
187
208
  | `api.v1-voice-asr` | /v1/voice/asr | Legacy alias of /v1/asr/transcriptions |
188
209
  | `api.v1-voice-asr-models` | /v1/voice/asr-models | Compatibility alias of GET /v1/asr/engines |
189
210
  | `api.v1-voice-asr-models-switch` | /v1/voice/asr-models/switch | Compatibility alias of POST /v1/asr/activate |
@@ -374,6 +395,7 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
374
395
  | `guide.getting-started-model-providers` | Model Providers And Endpoints | Omnius routes model requests through a provider abstraction instead of treating local Ollama as the only source of models. |
375
396
  | `guide.guides-agent-integration` | Agent And Service Integration | An integration should discover Omnius at runtime instead of encoding a partial provider or tool list. |
376
397
  | `guide.guides-bring-your-own-inference` | Bring Your Own Inference | Omnius routes local and hosted models through an explicit provider descriptor. The descriptor determines the wire protocol, URL paths, authentication headers, and supported operations. It is the source of truth used by setup, model discovery, TUI runs, REST chat, summaries, voice, Telegram, sponsors, and endpoint probes. |
398
+ | `guide.guides-dashboard` | Web Dashboard | The Omnius daemon serves a zero-build, self-contained dashboard from the same origin as the REST API. Start it with omnius serve, then open http://127.0.0.1:11435/. The interface uses Omnius's compact NOCLIP-derived style kit and shared responsive observability-card grids; the route registry in packages/cli/src/api/web-ui.ts is the source of truth for pages |
377
399
  | `guide.guides-media-generation` | Media Generation | Omnius exposes media generation through TUI commands, tools, Telegram creative workflows, and sponsor media endpoints. |
378
400
  | `guide.guides-osint-research` | Categorized OSINT research | Omnius ships a local, searchable snapshot of the OSINT4ALL Start.me page. It uses the same compact discovery pattern as AIWG skills: |
379
401
  | `guide.guides-realtime` | Realtime Conversations | Realtime mode is for short, natural, back-and-forth spoken conversation behind ASR and TTS. |
@@ -403,7 +425,7 @@ Daemon equivalents are `GET /v1/discovery/bootstrap`, `GET /v1/discovery?q=<inte
403
425
  | `guide.proposals-opencode-modules-runner` | Runner | Bundled Omnius documentation artifact: docs/proposals/opencode-modules/runner.ts. |
404
426
  | `guide.reference-auth-map` | Authentication And Authorization Map | Omnius has two separate credential boundaries: |
405
427
  | `guide.reference-configuration` | Configuration Reference | Configuration is layered from environment, global user settings, project settings, and active TUI state. |
406
- | `guide.reference-rest-api` | REST API Reference | 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. |
428
+ | `guide.reference-rest-api` | REST API Reference | This is the maintained human inventory for the supported Omnius daemon API. The machine contract is generated by packages/cli/src/api/openapi.ts and served at /openapi.json; every operation in that contract must appear here, and the generated REST block in the root README must match this file byte-for-byte after heading normalization. Browser HTML routes and |
407
429
  | `guide.reference-slash-commands` | Slash Commands | This file is generated from packages/cli/src/tui/command-registry.ts. |
408
430
  | `guide.research-archived-context-window-attention-model` | Context Window Attention Model | Bundled Omnius documentation artifact: docs/research/_archived/context_window_attention_model.py. |
409
431
  | `guide.research-archived-context-window-attention-spec` | Context Window Attention-Weighted Optimization Spec | The context window treats all items (system prompt, memory cards, chat history, voice transcriptions, reflection notes) at roughly equal attention weight (~1.0). This causes: |
@@ -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
@@ -25,6 +25,7 @@ should additionally expand the owning layer and module.
25
25
  ## Workflows
26
26
 
27
27
  - [TUI Workflows](./guides/tui-workflows.md)
28
+ - [Web Dashboard](./guides/dashboard.md)
28
29
  - [Sponsor And COHERE](./guides/sponsor-and-cohere.md)
29
30
  - [Realtime Conversation](./guides/realtime.md)
30
31
  - [Telegram](./guides/telegram.md)
@@ -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
 
@@ -58,11 +69,42 @@ pnpm docs:check
58
69
  | `POST` | `/v1/embeddings` | OpenAI-compatible embeddings |
59
70
  | `POST` | `/api/embed` | Ollama-compatible embeddings alias |
60
71
  | `GET` | `/api/tags` | Ollama-compatible model tags |
61
- | `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 |
62
77
  | `POST` | `/v1/chat/sessions/{id}/summarize` | Generate + cache an inference-based session title/summary |
63
78
  | `POST` | `/v1/chat/suggest-followup` | Suggest one short next-message follow-up (ghost-text input) |
64
79
  | `GET` | `/v1/chat/sessions/{id}/status` | Reactive recall: live run status + unseen deltas (`?since=<seq>`) |
65
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.
66
108
 
67
109
  ## Agentic Runs
68
110
 
@@ -71,6 +113,7 @@ pnpm docs:check
71
113
  | `POST` | `/v1/run` | Submit agentic task |
72
114
  | `GET` | `/v1/runs` | List runs |
73
115
  | `GET` | `/v1/runs/{id}` | Get run details |
116
+ | `GET` | `/v1/runs/{id}/output` | Read captured run output and status |
74
117
  | `DELETE` | `/v1/runs/{id}` | Abort run |
75
118
  | `POST` | `/v1/todos` | Create or update todos for current session |
76
119
  | `GET` | `/v1/todos` | List sessions with todos |
@@ -110,6 +153,9 @@ pnpm docs:check
110
153
  | `GET` | `/v1/projects/preferences` | Read project preferences |
111
154
  | `PUT` | `/v1/projects/preferences` | Patch project preferences |
112
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 |
113
159
 
114
160
  ## Skills, Commands, Tools, MCP
115
161
 
@@ -133,6 +179,37 @@ pnpm docs:check
133
179
  | `GET` | `/v1/codegraph/snapshot` | Code graph snapshot |
134
180
  | `GET` | `/v1/codegraph/events` | Code graph SSE |
135
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
+
136
213
  ## AIWG
137
214
 
138
215
  | Method | Path | Purpose |
@@ -158,6 +235,10 @@ pnpm docs:check
158
235
  | `POST` | `/v1/memory/write` | Write memory |
159
236
  | `GET` | `/v1/memory/episodes` | List episodes |
160
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 |
161
242
  | `GET` | `/v1/sessions` | List task sessions |
162
243
  | `GET` | `/v1/sessions/{id}` | Get session history |
163
244
  | `GET` | `/v1/context` | Current context snapshot |
@@ -167,12 +248,22 @@ pnpm docs:check
167
248
  | `GET` | `/v1/context/restore` | Build restore prompt |
168
249
  | `POST` | `/v1/context/compact` | Request compaction |
169
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
+
170
259
  ## Files, Nexus, Ollama Pool
171
260
 
172
261
  | Method | Path | Purpose |
173
262
  | --- | --- | --- |
174
263
  | `GET` | `/v1/files` | List workspace directory |
175
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 |
176
267
  | `GET` | `/v1/nexus/status` | Nexus peer state |
177
268
  | `GET` | `/v1/sponsors` | Sponsor directory cache |
178
269
  | `GET` | `/v1/ollama/pool/processes` | Ollama process inventory |
@@ -213,6 +304,8 @@ pnpm docs:check
213
304
  | `POST` | `/v1/voice/speak` | Broadcast speech to voicechat clients |
214
305
  | `GET` | `/v1/voicechat/ws` | WebSocket upgrade for full-duplex voicechat |
215
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 |
216
309
 
217
310
  `POST /v1/voice/tts` and `/v1/audio/speech` automatically warm the daemon.
218
311
  An explicit model must render exactly or the request fails; Omnius does not
@@ -260,14 +353,35 @@ All generation is backed by the unified `~/.omnius` model store and shared venvs
260
353
  | --- | --- | --- |
261
354
  | `GET` | `/v1/engines` | Long-running engine status |
262
355
  | `GET` | `/v1/scheduled` | List scheduled jobs |
263
- | `GET` | `/v1/scheduled/all` | List all scheduled jobs |
356
+ | `DELETE` | `/v1/scheduled/all` | Delete all tasks, timers, cron entries, and persisted sources |
264
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 |
265
360
  | `POST` | `/v1/scheduled/kill` | Kill scheduled job |
266
361
  | `POST` | `/v1/scheduled/fixup` | Reconcile scheduled state |
267
- | `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 |
268
364
  | `GET` | `/v1/services/systemd` | Systemd service status |
365
+ | `POST` | `/v1/services/systemd/{unit}` | Act on one user-level systemd unit |
269
366
  | `GET` | `/v1/update` | Self-update status |
270
- | `POST` | `/v1/update` | Queue or run the package update flow |
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.
271
385
 
272
386
  ## AIMS Governance
273
387
 
@@ -290,3 +404,20 @@ All generation is backed by the unified `~/.omnius` model store and shared venvs
290
404
  | `GET` | `/v1/aims/oversight` | Human oversight gates |
291
405
  | `GET` | `/v1/aims/decisions` | Consequential decision log |
292
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.
@@ -96,28 +96,28 @@ Scopes:
96
96
  | --- | --- |
97
97
  | Health | `/health`, `/health/ready`, `/health/startup`, `/version`, `/metrics` |
98
98
  | Discovery | `/v1/discovery/bootstrap`, `/v1/discovery`, `/v1/discovery/{id}` |
99
- | Inference and chat | `/v1/models`, `/v1/chat/completions`, `/v1/embeddings`, `/v1/chat`, `/v1/generate`, `/api/generate`, `/v1/chat/sessions`, `/v1/chat/check-in` |
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` |
100
100
  | AIWG | `/v1/aiwg`, `/v1/aiwg/frameworks`, `/v1/aiwg/skills`, `/v1/aiwg/use`, `/v1/aiwg/expand` |
101
- | 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}` |
102
102
  | Config | `/v1/config`, `/v1/config/model`, `/v1/config/endpoint`, `/v1/config/endpoint/test`, `/v1/config/endpoint/history`, `/v1/share/generate` |
103
103
  | Metering and audit | `/v1/usage`, `/v1/audit`, `/v1/cost`, `/v1/system` |
104
104
  | Runtime keys | `/v1/keys`, `/v1/keys/{prefix}` |
105
105
  | Profiles | `/v1/profiles`, `/v1/profiles/{name}` |
106
- | Files | `/v1/files`, `/v1/files/read` |
106
+ | Files | `/v1/files`, `/v1/files/read`, `/v1/files/raw` |
107
107
  | Skills and commands | `/v1/skills`, `/v1/skills/{name}`, `/v1/commands`, `/v1/commands/{cmd}` |
108
108
  | MCP | `/v1/mcps`, `/v1/mcps/{name}`, `/v1/mcps/{name}/call` |
109
109
  | Tools | `/v1/tools`, `/v1/tools/{name}`, `/v1/tools/{name}/call`, `/v1/hooks`, `/v1/agents` |
110
- | 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` |
111
111
  | Events | `/v1/events` |
112
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` |
113
113
  | Nexus | `/v1/nexus/status`, `/v1/sponsors` |
114
114
  | Ollama pool | `/v1/ollama/pool/processes`, `/v1/ollama/pool/cleanup` |
115
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 | `/v1/vision/describe` |
117
- | Projects | `/v1/projects`, `/v1/projects/current`, `/v1/projects/switch`, `/v1/projects/register`, `/v1/projects/rename`, `/v1/projects/preferences` |
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` |
118
118
  | Code graph | `/v1/codegraph/snapshot`, `/v1/codegraph/events` |
119
119
  | Scheduled jobs | `/v1/scheduled`, `/v1/scheduled/all`, `/v1/scheduled/status`, `/v1/scheduled/kill`, `/v1/scheduled/fixup`, `/v1/scheduled/reconcile` |
120
- | Services and update | `/v1/services/systemd`, `/v1/update` |
120
+ | Services and update | `/v1/services/systemd`, `/v1/services/systemd/{unit}`, `/v1/update` |
121
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` |
122
122
 
123
123
  ## Realtime REST Flag