omnius 1.0.159 → 1.0.160

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 (51) hide show
  1. package/.aiwg/addons/omnius-docs/README.md +5 -0
  2. package/.aiwg/addons/omnius-docs/manifest.json +32 -0
  3. package/.aiwg/addons/omnius-docs/skills/omnius-docs/SKILL.md +48 -0
  4. package/.aiwg/addons/omnius-docs/skills/omnius-ops-docs/SKILL.md +32 -0
  5. package/.aiwg/addons/omnius-docs/skills/omnius-realtime-docs/SKILL.md +30 -0
  6. package/.aiwg/addons/omnius-docs/skills/omnius-sponsor-docs/SKILL.md +31 -0
  7. package/.aiwg/addons/omnius-docs/skills/omnius-telegram-docs/SKILL.md +30 -0
  8. package/.aiwg/addons/omnius-rest-docs/README.md +7 -0
  9. package/.aiwg/addons/omnius-rest-docs/manifest.json +24 -0
  10. package/.aiwg/addons/omnius-rest-docs/skills/omnius-rest-docs/SKILL.md +72 -0
  11. package/README.md +115 -5011
  12. package/dist/index.js +561 -74
  13. package/docs/.vitepress/config.mts +108 -0
  14. package/docs/agent-memory/INDEX.md +38 -0
  15. package/docs/agent-memory/index.md +14 -0
  16. package/docs/architecture/overview.md +30 -0
  17. package/docs/getting-started/first-run.md +38 -0
  18. package/docs/getting-started/install.md +58 -0
  19. package/docs/getting-started/model-providers.md +48 -0
  20. package/docs/guides/media-generation.md +88 -0
  21. package/docs/guides/realtime.md +138 -0
  22. package/docs/guides/sponsor-and-cohere.md +123 -0
  23. package/docs/guides/telegram.md +95 -0
  24. package/docs/guides/tui-workflows.md +48 -0
  25. package/docs/index.md +30 -0
  26. package/docs/operations/runtime-hygiene.md +75 -0
  27. package/docs/operations/security-and-remote-access.md +70 -0
  28. package/docs/reference/configuration.md +45 -0
  29. package/docs/reference/rest-api.md +225 -0
  30. package/docs/reference/slash-commands.md +2095 -0
  31. package/docs/rest/INDEX.md +129 -0
  32. package/docs/rest/QUICKREF.md +125 -0
  33. package/docs/rest/REST-DOCS-MANIFEST.json +27 -0
  34. package/docs/rest/auth-and-scopes.md +101 -0
  35. package/docs/rest/endpoints/aims.md +26 -0
  36. package/docs/rest/endpoints/aiwg.md +44 -0
  37. package/docs/rest/endpoints/chat.md +101 -0
  38. package/docs/rest/endpoints/config.md +53 -0
  39. package/docs/rest/endpoints/events.md +63 -0
  40. package/docs/rest/endpoints/files.md +18 -0
  41. package/docs/rest/endpoints/memory.md +42 -0
  42. package/docs/rest/endpoints/run.md +52 -0
  43. package/docs/rest/endpoints/skills.md +41 -0
  44. package/docs/rest/endpoints/tools.md +62 -0
  45. package/docs/rest/endpoints/voice-vision.md +80 -0
  46. package/docs/rest/errors-pagination-etags.md +84 -0
  47. package/docs/rest/examples/curl.md +84 -0
  48. package/docs/rest/examples/openai-sdk.md +59 -0
  49. package/docs/rest/openapi-source.md +36 -0
  50. package/npm-shrinkwrap.json +2 -2
  51. package/package.json +5 -2
@@ -0,0 +1,18 @@
1
+ # Files
2
+
3
+ ## Endpoint Summary
4
+
5
+ | Method | Path | Purpose |
6
+ | --- | --- | --- |
7
+ | `GET` | `/v1/files` | List a workspace directory |
8
+ | `GET` | `/v1/files/read` | Read a workspace file |
9
+
10
+ ## Directory Listing
11
+
12
+ `GET /v1/files?path=<relative-or-absolute>` returns directory entries for the active or requested workspace.
13
+
14
+ ## File Read
15
+
16
+ `GET /v1/files/read?path=<path>` reads file content where policy permits.
17
+
18
+ File operations are subject to workspace, auth, and profile restrictions. Remote clients should not assume arbitrary filesystem access.
@@ -0,0 +1,42 @@
1
+ # Memory, Sessions, And Context
2
+
3
+ ## Endpoint Summary
4
+
5
+ | Method | Path | Purpose |
6
+ | --- | --- | --- |
7
+ | `GET` | `/v1/memory` | Memory backend summary |
8
+ | `POST` | `/v1/memory/search` | Search memory |
9
+ | `POST` | `/v1/memory/write` | Write memory |
10
+ | `GET` | `/v1/memory/episodes` | List episodes |
11
+ | `GET` | `/v1/memory/failures` | List captured failures |
12
+ | `GET` | `/v1/sessions` | List Omnius task sessions |
13
+ | `GET` | `/v1/sessions/{id}` | Get session history |
14
+ | `GET` | `/v1/context` | Show current session context |
15
+ | `POST` | `/v1/context/save` | Save a context entry |
16
+ | `GET` | `/v1/context/restore` | Build a restore prompt |
17
+ | `POST` | `/v1/context/compact` | Request context compaction |
18
+
19
+ ## Memory Search
20
+
21
+ Use memory search for persistent knowledge, failures, prior decisions, and scoped context. Public connector surfaces such as Telegram should keep scope explicit so one chat does not pollute another.
22
+
23
+ ## Memory Write
24
+
25
+ Memory writes require run or admin scope where enforced. Prefer structured, scoped writes over dumping entire transcripts.
26
+
27
+ ## Failures
28
+
29
+ Failure records let the agent learn from raw observed outputs. The design goal is to pass failure output through as evidence, not convert platform-specific strings into hardcoded policy shortcuts.
30
+
31
+ ## Context
32
+
33
+ Context endpoints expose the TUI context stack:
34
+
35
+ - `GET /v1/context`: current context snapshot.
36
+ - `POST /v1/context/save`: persist a context entry.
37
+ - `GET /v1/context/restore`: build a restore prompt.
38
+ - `POST /v1/context/compact`: request compaction.
39
+
40
+ ## Sessions
41
+
42
+ Session endpoints expose archived task turns, which can be used by dashboards, replay tooling, or state restoration.
@@ -0,0 +1,52 @@
1
+ # Runs, Jobs, Todos, And Scheduled Work
2
+
3
+ ## Endpoint Summary
4
+
5
+ | Method | Path | Purpose |
6
+ | --- | --- | --- |
7
+ | `POST` | `/v1/run` | Submit an agentic task |
8
+ | `GET` | `/v1/runs` | List runs |
9
+ | `GET` | `/v1/runs/{id}` | Get run details |
10
+ | `DELETE` | `/v1/runs/{id}` | Abort a run |
11
+ | `GET` | `/v1/todos` | List sessions with todo lists |
12
+ | `GET` | `/v1/todos/{session_id}` | Get todos for a session |
13
+ | `POST` | `/v1/todos/{session_id}` | Replace or update todos for a session |
14
+ | `POST` | `/v1/evaluate` | Evaluate a run by ID |
15
+ | `POST` | `/v1/index` | Trigger repository indexing |
16
+ | `GET` | `/v1/scheduled` | List scheduled jobs |
17
+ | `GET` | `/v1/scheduled/all` | List all scheduled jobs |
18
+ | `GET` | `/v1/scheduled/status` | Scheduled runner status |
19
+ | `POST` | `/v1/scheduled/kill` | Kill a scheduled job |
20
+ | `POST` | `/v1/scheduled/fixup` | Reconcile scheduled job state |
21
+ | `POST` | `/v1/scheduled/reconcile` | Force reconciliation |
22
+
23
+ ## `/v1/run`
24
+
25
+ Submits a long-running task to the daemon and returns an accepted job record. Runs are tracked under `.omnius/jobs/`.
26
+
27
+ Common body fields:
28
+
29
+ | Field | Purpose |
30
+ | --- | --- |
31
+ | `task` | Natural language task |
32
+ | `repo` or `working_dir` | Workspace root |
33
+ | `model` | Optional model override |
34
+ | `sandbox` | Execution sandbox mode |
35
+ | `profile` | Tool profile |
36
+ | `timeout_s` | Wall-clock timeout |
37
+
38
+ ## Abort
39
+
40
+ `DELETE /v1/runs/{id}` aborts the job. The daemon signals the process group, escalates if needed, updates the job record, and decrements per-key active job counters.
41
+
42
+ ## Handoff And Adoption
43
+
44
+ When a daemon restarts gracefully, live child runs can be adopted from the handoff file. The daemon polls foreign PIDs, re-arms timeouts, and finalizes job records when those processes exit.
45
+
46
+ ## Todos
47
+
48
+ Todo endpoints expose the same checklist state the TUI and agent loop use. They are useful for dashboards and run supervision.
49
+
50
+ ## Scheduled Jobs
51
+
52
+ Scheduled endpoints report and repair the long-running scheduler state. Use admin-scoped controls for kill or reconciliation operations.
@@ -0,0 +1,41 @@
1
+ # Skills And Commands
2
+
3
+ ## Endpoint Summary
4
+
5
+ | Method | Path | Purpose |
6
+ | --- | --- | --- |
7
+ | `GET` | `/v1/skills` | List skills |
8
+ | `GET` | `/v1/skills/{name}` | Load skill content |
9
+ | `GET` | `/v1/commands` | List slash commands |
10
+ | `POST` | `/v1/commands/{cmd}` | Execute a slash command in an isolated subprocess |
11
+
12
+ ## Skills
13
+
14
+ Omnius discovers skills from:
15
+
16
+ - AIWG package frameworks, addons, and plugins.
17
+ - AIWG user data frameworks, addons, and plugins.
18
+ - Project `.aiwg/skills`.
19
+ - Project `.aiwg/commands`.
20
+ - Project-local AIWG bundles: `.aiwg/addons/*/skills`, `.aiwg/extensions/*/skills`, `.aiwg/frameworks/*/skills`, `.aiwg/plugins/*/skills`.
21
+ - Project `.omnius/skills`.
22
+
23
+ The REST docs bundle is available as:
24
+
25
+ ```text
26
+ omnius-rest-docs
27
+ ```
28
+
29
+ Use `/v1/skills/omnius-rest-docs` or the agent tool `skill_execute`.
30
+
31
+ ## Commands
32
+
33
+ Command execution is isolated in a subprocess and subject to command policy. Dangerous or denied commands require admin controls and may be blocked by profile policy.
34
+
35
+ ## Small-Context Pattern
36
+
37
+ For agents:
38
+
39
+ 1. Use `skill_list` or `/v1/skills` to find the skill.
40
+ 2. Load only the specific skill that matches the current task.
41
+ 3. Use `skill_extract` where available to pull targeted sections instead of full documents.
@@ -0,0 +1,62 @@
1
+ # Tools, MCP, Hooks, Agents, And Code Graph
2
+
3
+ ## Endpoint Summary
4
+
5
+ | Method | Path | Purpose |
6
+ | --- | --- | --- |
7
+ | `GET` | `/v1/tools` | List tool registry with security metadata |
8
+ | `GET` | `/v1/tools/{name}` | Get one tool definition |
9
+ | `POST` | `/v1/tools/{name}/call` | Invoke a tool |
10
+ | `GET` | `/v1/mcps` | List MCP servers |
11
+ | `GET` | `/v1/mcps/{name}` | Get MCP server details |
12
+ | `POST` | `/v1/mcps/{name}/call` | Invoke an MCP tool |
13
+ | `GET` | `/v1/hooks` | List hook types and counts |
14
+ | `GET` | `/v1/agents` | List agent types |
15
+ | `GET` | `/v1/codegraph/snapshot` | Code graph stats and recent events |
16
+ | `GET` | `/v1/codegraph/events` | Code graph live event stream |
17
+
18
+ ## Tool Metadata
19
+
20
+ `GET /v1/tools` returns each tool's:
21
+
22
+ - name
23
+ - class
24
+ - description
25
+ - JSON-schema parameters
26
+ - security categories
27
+ - risk
28
+ - required scope
29
+ - off-device allowance
30
+ - rationale
31
+
32
+ Filters include:
33
+
34
+ ```text
35
+ ?category=read|write|exec|network|hardware|agent|sensitive
36
+ ?scope=read|run|admin
37
+ ?risk=low|medium|high|critical
38
+ ?limit=200&offset=0
39
+ ```
40
+
41
+ ## Tool Calls
42
+
43
+ `POST /v1/tools/{name}/call` body:
44
+
45
+ ```json
46
+ {
47
+ "args": {},
48
+ "working_dir": "/path/to/repo"
49
+ }
50
+ ```
51
+
52
+ `args` is the canonical wrapper. The schema from `/v1/tools/{name}` describes the fields inside `args`.
53
+
54
+ Tool calls are gated by auth scope, tool policy, off-device policy, and profile restrictions.
55
+
56
+ ## MCP
57
+
58
+ MCP endpoints list connected Model Context Protocol servers and invoke tools through the daemon with the same auth and audit envelope.
59
+
60
+ ## Code Graph
61
+
62
+ Code graph endpoints expose repository indexing state and live graph events for GUI or dashboard clients.
@@ -0,0 +1,80 @@
1
+ # Voice, Audio, Vision, And Voicechat
2
+
3
+ ## Endpoint Summary
4
+
5
+ | Method | Path | Purpose |
6
+ | --- | --- | --- |
7
+ | `GET` | `/v1/voice/state` | Voice runtime status |
8
+ | `GET` | `/v1/voice/models` | List TTS voice models |
9
+ | `POST` | `/v1/voice/models/switch` | Switch active TTS model |
10
+ | `GET`/`PUT` | `/v1/voice/supertonic-settings` | Voice tuning settings |
11
+ | `GET` | `/v1/voice/asr-models` | List Whisper ASR models |
12
+ | `POST` | `/v1/voice/asr-models/switch` | Switch active ASR model |
13
+ | `POST` | `/v1/voice/tts` | Synthesize text |
14
+ | `POST` | `/v1/audio/speech` | OpenAI-compatible TTS alias |
15
+ | `POST` | `/v1/voice/transcribe` | Transcribe audio |
16
+ | `POST` | `/v1/audio/transcriptions` | OpenAI-compatible transcription alias |
17
+ | `POST` | `/v1/voice/transcribe/stream` | Streaming transcription |
18
+ | `GET` | `/v1/voice/clone-refs` | List clone references |
19
+ | `POST` | `/v1/voice/clone-refs/upload` | Upload clone reference |
20
+ | `POST` | `/v1/voice/clone-refs/from-url` | Fetch clone reference server-side |
21
+ | `POST` | `/v1/voice/clone-refs/{filename}/activate` | Activate clone reference |
22
+ | `POST` | `/v1/voice/clone-refs/{filename}/rename` | Rename clone reference |
23
+ | `DELETE` | `/v1/voice/clone-refs/{filename}` | Delete clone reference |
24
+ | `POST` | `/v1/voice/speak` | Synthesize and broadcast to voicechat clients |
25
+ | `WS` | `/v1/voicechat/ws` | Full-duplex voicechat WebSocket |
26
+ | `POST` | `/v1/vision/describe` | Vision describe placeholder/deferred endpoint |
27
+
28
+ ## TTS
29
+
30
+ `POST /v1/voice/tts` returns audio bytes. `format` can be `wav` or `pcm`. `X-Sample-Rate` reports the sample rate.
31
+
32
+ OpenAI-compatible alias:
33
+
34
+ ```text
35
+ POST /v1/audio/speech
36
+ ```
37
+
38
+ ## ASR
39
+
40
+ `POST /v1/voice/transcribe` transcribes uploaded audio. The OpenAI-compatible alias is:
41
+
42
+ ```text
43
+ POST /v1/audio/transcriptions
44
+ ```
45
+
46
+ ## Voicechat WebSocket
47
+
48
+ `/v1/voicechat/ws` supports full-duplex realtime voice.
49
+
50
+ Client to server:
51
+
52
+ - Binary PCM Int16 mono 16 kHz mic audio.
53
+ - JSON text frame `{ "type": "start" }`.
54
+ - JSON text frame `{ "type": "stop" }`.
55
+ - JSON text frame `{ "type": "speak", "text": "..." }`.
56
+ - JSON text frame `{ "type": "ping" }`.
57
+
58
+ Server to client:
59
+
60
+ - `hello`
61
+ - `loaded`
62
+ - `transcript`
63
+ - `agent_text`
64
+ - `tts_header`
65
+ - binary TTS PCM
66
+ - `tts_start`
67
+ - `tts_end`
68
+ - `state`
69
+ - `session_state`
70
+ - `error`
71
+ - `keepalive`
72
+ - `pong`
73
+ - `session_started`
74
+ - `session_stopped`
75
+
76
+ Each binary TTS batch is preceded by a `tts_header` frame that announces the sample rate.
77
+
78
+ ## Realtime REST Plus Voice
79
+
80
+ For ASR/TTS clients that do not use `/v1/voicechat/ws`, call `/v1/chat` with `realtime: true` and send the text transcript as `message`.
@@ -0,0 +1,84 @@
1
+ # Errors, Pagination, ETags, And Request IDs
2
+
3
+ ## Error Shape
4
+
5
+ The OpenAPI contract documents RFC 7807 Problem Details for common errors:
6
+
7
+ ```json
8
+ {
9
+ "type": "https://omnius.nexus/problems/not-found",
10
+ "title": "Resource not found",
11
+ "status": 404,
12
+ "detail": "Optional detail",
13
+ "instance": "request-id",
14
+ "aims:control": "Optional ISO/IEC 42001 control reference"
15
+ }
16
+ ```
17
+
18
+ Some legacy endpoints may still return simpler `{ "error": "..." }` shapes. Prefer the live `/openapi.json` and endpoint behavior when writing strict clients.
19
+
20
+ ## Common Status Codes
21
+
22
+ | Code | Meaning |
23
+ | --- | --- |
24
+ | `400` | Invalid request body or query |
25
+ | `401` | Missing or invalid bearer token |
26
+ | `403` | Authenticated but scope or tool policy is insufficient |
27
+ | `404` | Resource not found |
28
+ | `429` | Rate limit exceeded |
29
+ | `500` | Internal daemon error |
30
+ | `501` | Endpoint intentionally not implemented yet |
31
+
32
+ ## Pagination
33
+
34
+ List endpoints generally use:
35
+
36
+ ```json
37
+ {
38
+ "data": [],
39
+ "pagination": {
40
+ "limit": 50,
41
+ "offset": 0,
42
+ "total": 0,
43
+ "has_more": false
44
+ }
45
+ }
46
+ ```
47
+
48
+ Use:
49
+
50
+ ```text
51
+ ?limit=50&offset=0
52
+ ```
53
+
54
+ Some list endpoints support family-specific filters such as `status`, `category`, `scope`, `risk`, or `type`.
55
+
56
+ ## ETags
57
+
58
+ Cacheable GET endpoints may return an `ETag` header. Send it back with:
59
+
60
+ ```text
61
+ If-None-Match: "<etag>"
62
+ ```
63
+
64
+ When unchanged, the daemon can return `304 Not Modified`.
65
+
66
+ ## Request Correlation
67
+
68
+ Clients can send:
69
+
70
+ ```text
71
+ X-Request-ID: client-generated-id
72
+ ```
73
+
74
+ The daemon echoes the request ID where middleware applies and writes it into audit/event surfaces where available.
75
+
76
+ ## API Version Header
77
+
78
+ Responses carry:
79
+
80
+ ```text
81
+ X-API-Version: <semver>
82
+ ```
83
+
84
+ Use this for compatibility checks in dashboards and remote clients.
@@ -0,0 +1,84 @@
1
+ # Curl Examples
2
+
3
+ Set base:
4
+
5
+ ```bash
6
+ BASE=http://127.0.0.1:11435
7
+ ```
8
+
9
+ ## Health
10
+
11
+ ```bash
12
+ curl -s "$BASE/health"
13
+ ```
14
+
15
+ ## OpenAPI
16
+
17
+ ```bash
18
+ curl -s "$BASE/openapi.json" | jq '.info.title, .info.version'
19
+ ```
20
+
21
+ ## Chat
22
+
23
+ ```bash
24
+ curl -s "$BASE/v1/chat" \
25
+ -H 'content-type: application/json' \
26
+ -d '{"message":"What files define the REST API?","tools":true}'
27
+ ```
28
+
29
+ ## Realtime
30
+
31
+ ```bash
32
+ curl -s "$BASE/v1/chat" \
33
+ -H 'content-type: application/json' \
34
+ -d '{
35
+ "message": "Answer like this is a live voice call.",
36
+ "realtime": true,
37
+ "realtime_options": {
38
+ "max_history_messages": 8,
39
+ "max_tokens": 120
40
+ }
41
+ }'
42
+ ```
43
+
44
+ ## OpenAI-Compatible Chat
45
+
46
+ ```bash
47
+ curl -s "$BASE/v1/chat/completions" \
48
+ -H 'content-type: application/json' \
49
+ -d '{
50
+ "model": "qwen3:4b",
51
+ "messages": [
52
+ {"role": "user", "content": "Return one sentence."}
53
+ ]
54
+ }'
55
+ ```
56
+
57
+ ## Agentic Run
58
+
59
+ ```bash
60
+ curl -s -X POST "$BASE/v1/run" \
61
+ -H 'content-type: application/json' \
62
+ -d '{"task":"List the test files related to skill discovery."}'
63
+ ```
64
+
65
+ ## Events
66
+
67
+ ```bash
68
+ curl -N "$BASE/v1/events?type=run.*"
69
+ ```
70
+
71
+ ## Skill Docs
72
+
73
+ ```bash
74
+ curl -s "$BASE/v1/skills/omnius-rest-docs"
75
+ ```
76
+
77
+ ## Runtime Key
78
+
79
+ ```bash
80
+ curl -s -X POST "$BASE/v1/keys" \
81
+ -H 'authorization: Bearer admin-secret' \
82
+ -H 'content-type: application/json' \
83
+ -d '{"scope":"run","owner":"ci","rpm":60,"tpd":100000,"max_jobs":3}'
84
+ ```
@@ -0,0 +1,59 @@
1
+ # OpenAI SDK Examples
2
+
3
+ Omnius exposes an OpenAI-compatible chat-completions endpoint at `/v1/chat/completions`.
4
+
5
+ ## JavaScript
6
+
7
+ ```ts
8
+ import OpenAI from "openai";
9
+
10
+ const client = new OpenAI({
11
+ baseURL: "http://127.0.0.1:11435/v1",
12
+ apiKey: process.env.OMNIUS_API_KEY ?? "local-dev",
13
+ });
14
+
15
+ const response = await client.chat.completions.create({
16
+ model: "qwen3:4b",
17
+ messages: [
18
+ { role: "user", content: "Summarize the current project." },
19
+ ],
20
+ });
21
+
22
+ console.log(response.choices[0]?.message?.content);
23
+ ```
24
+
25
+ ## JavaScript Realtime Flag
26
+
27
+ The SDK may not know Omnius-specific fields. Pass them through with a typed escape hatch if needed:
28
+
29
+ ```ts
30
+ const response = await client.chat.completions.create({
31
+ model: "qwen3:4b",
32
+ messages: [
33
+ { role: "user", content: "Keep it short enough for TTS." },
34
+ ],
35
+ realtime: true,
36
+ realtime_options: {
37
+ max_history_messages: 8,
38
+ max_tokens: 120,
39
+ },
40
+ } as any);
41
+ ```
42
+
43
+ ## Python
44
+
45
+ ```py
46
+ from openai import OpenAI
47
+
48
+ client = OpenAI(
49
+ base_url="http://127.0.0.1:11435/v1",
50
+ api_key="local-dev",
51
+ )
52
+
53
+ response = client.chat.completions.create(
54
+ model="qwen3:4b",
55
+ messages=[{"role": "user", "content": "Return one sentence."}],
56
+ )
57
+
58
+ print(response.choices[0].message.content)
59
+ ```
@@ -0,0 +1,36 @@
1
+ # OpenAPI Source And Renderers
2
+
3
+ The canonical REST contract is generated by:
4
+
5
+ ```text
6
+ packages/cli/src/api/openapi.ts
7
+ ```
8
+
9
+ Runtime docs:
10
+
11
+ | Path | Purpose |
12
+ | --- | --- |
13
+ | `/openapi.json` | Canonical OpenAPI 3.0 JSON |
14
+ | `/openapi.yaml` | YAML form of the same spec |
15
+ | `/v3/api-docs` | OpenAPI alias |
16
+ | `/swagger.json` | Swagger-era alias |
17
+ | `/api-docs` | OpenAPI alias |
18
+ | `/docs` | Swagger UI |
19
+ | `/api/docs` | Swagger UI alias |
20
+ | `/swagger-ui` | Swagger UI alias |
21
+ | `/redoc` | ReDoc renderer |
22
+
23
+ Swagger UI attempts local assets first and can fall back to a CDN if available. Offline clients should prefer `/openapi.json`.
24
+
25
+ ## Contract Rule
26
+
27
+ When docs and behavior differ:
28
+
29
+ 1. Check the live daemon `/openapi.json`.
30
+ 2. Check `packages/cli/src/api/openapi.ts`.
31
+ 3. Check route implementation in `packages/cli/src/api/serve.ts` and `packages/cli/src/api/routes-v1.ts`.
32
+ 4. Patch this docs directory after the behavior is confirmed.
33
+
34
+ ## AsyncAPI
35
+
36
+ The voicechat WebSocket has an AsyncAPI description generated from the same schema definitions. See `docs/rest/endpoints/voice-vision.md`.
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "omnius",
3
- "version": "1.0.159",
3
+ "version": "1.0.160",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "omnius",
9
- "version": "1.0.159",
9
+ "version": "1.0.160",
10
10
  "bundleDependencies": [
11
11
  "image-to-ascii"
12
12
  ],