{ "openapi": "3.0.3", "info": { "title": "ollie-httpgw", "description": "HTTP gateway for ollie session management. Supports D-Bus (default) and 9P backend modes.", "version": "2.0.0" }, "servers": [ { "url": "http://localhost:8011", "description": "Default local gateway" } ], "paths": { "/sessions": { "get": { "tags": ["dbus"], "summary": "List sessions", "description": "Returns all active sessions with their id, state, model, and agent.", "responses": { "200": { "description": "Session list", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/SessionSummary" } } } } }, "502": { "$ref": "#/components/responses/Error" } } }, "post": { "tags": ["dbus"], "summary": "Create a new session", "requestBody": { "required": false, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateSessionRequest" } } } }, "responses": { "201": { "description": "Session created", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" } }, "required": ["id"] } } } }, "400": { "$ref": "#/components/responses/Error" }, "502": { "$ref": "#/components/responses/Error" } } } }, "/sessions/{id}": { "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }], "get": { "tags": ["dbus"], "summary": "Get session config/detail", "responses": { "200": { "description": "Session config as key-value object", "content": { "application/json": { "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } } }, "delete": { "tags": ["dbus"], "summary": "Kill session", "responses": { "204": { "description": "Session killed" }, "404": { "$ref": "#/components/responses/Error" } } }, "patch": { "tags": ["dbus"], "summary": "Rename session", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"] } } } }, "responses": { "204": { "description": "Renamed" }, "404": { "$ref": "#/components/responses/Error" } } } }, "/sessions/{id}/submit": { "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }], "post": { "tags": ["dbus"], "summary": "Submit a prompt to the session", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "prompt": { "type": "string" } }, "required": ["prompt"] } } } }, "responses": { "200": { "description": "Submitted", "content": { "application/json": { "schema": { "type": "object", "properties": { "submitted": { "type": "boolean" } } } } } }, "404": { "$ref": "#/components/responses/Error" } } } }, "/sessions/{id}/interrupt": { "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }], "post": { "tags": ["dbus"], "summary": "Interrupt the running session", "responses": { "200": { "description": "Interrupted", "content": { "application/json": { "schema": { "type": "object", "properties": { "interrupted": { "type": "boolean" } } } } } }, "404": { "$ref": "#/components/responses/Error" } } } }, "/sessions/{id}/state": { "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }], "get": { "tags": ["dbus"], "summary": "Get session state", "responses": { "200": { "description": "State", "content": { "application/json": { "schema": { "type": "object", "properties": { "state": { "type": "string" } } } } } } } } }, "/sessions/{id}/chat": { "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "offset", "in": "query", "required": false, "schema": { "type": "integer", "format": "int64", "default": 0 }, "description": "Byte offset to resume from" } ], "get": { "tags": ["dbus"], "summary": "Get chat transcript", "description": "Returns chat text from the given offset. The X-Chat-Offset response header contains the new offset for subsequent requests.", "responses": { "200": { "description": "Chat text", "headers": { "X-Chat-Offset": { "schema": { "type": "integer", "format": "int64" }, "description": "New byte offset for next poll" } }, "content": { "text/plain": { "schema": { "type": "string" } } } } } } }, "/sessions/{id}/usage": { "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }], "get": { "tags": ["dbus"], "summary": "Get token usage", "responses": { "200": { "description": "Usage string", "content": { "application/json": { "schema": { "type": "object", "properties": { "usage": { "type": "string" } } } } } } } } }, "/sessions/{id}/cost": { "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }], "get": { "tags": ["dbus"], "summary": "Get session cost", "responses": { "200": { "description": "Cost string", "content": { "application/json": { "schema": { "type": "object", "properties": { "cost": { "type": "string" } } } } } } } } }, "/sessions/{id}/config": { "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }], "get": { "tags": ["dbus"], "summary": "Get session config", "responses": { "200": { "description": "Config as key-value", "content": { "application/json": { "schema": { "type": "object", "additionalProperties": { "type": "string" } } } } } } }, "post": { "tags": ["dbus"], "summary": "Set a config value", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "key": { "type": "string" }, "value": { "type": "string" } }, "required": ["key", "value"] } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } } } } } }, "400": { "$ref": "#/components/responses/Error" } } } }, "/sessions/{id}/context": { "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }], "get": { "tags": ["dbus"], "summary": "Get message context (JSONL)", "responses": { "200": { "description": "JSONL messages", "content": { "application/x-ndjson": { "schema": { "type": "string" } } } } } } }, "/sessions/{id}/models": { "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }], "get": { "tags": ["dbus"], "summary": "List models for session's backend", "responses": { "200": { "description": "Model list", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "string" } } } } } } } }, "/sessions/{id}/peers": { "parameters": [{ "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }], "get": { "tags": ["dbus"], "summary": "List peers", "responses": { "200": { "description": "Peer IDs", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "string" } } } } } } }, "post": { "tags": ["dbus"], "summary": "Add a peer", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "peer_id": { "type": "string" } }, "required": ["peer_id"] } } } }, "responses": { "201": { "description": "Peer added" }, "400": { "$ref": "#/components/responses/Error" } } } }, "/sessions/{id}/peers/{peer_id}": { "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "peer_id", "in": "path", "required": true, "schema": { "type": "string" } } ], "delete": { "tags": ["dbus"], "summary": "Remove a peer", "responses": { "204": { "description": "Peer removed" }, "404": { "$ref": "#/components/responses/Error" } } } }, "/sessions/{id}/peers/{peer_id}/submit": { "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "peer_id", "in": "path", "required": true, "schema": { "type": "string" } } ], "post": { "tags": ["dbus"], "summary": "Submit prompt to a peer session", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "prompt": { "type": "string" } }, "required": ["prompt"] } } } }, "responses": { "200": { "description": "Submitted" }, "404": { "$ref": "#/components/responses/Error" } } } }, "/backends": { "get": { "tags": ["dbus"], "summary": "List available backends", "responses": { "200": { "description": "Backend names", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "string" } } } } } } } }, "/agents": { "get": { "tags": ["dbus"], "summary": "List available agents", "responses": { "200": { "description": "Agent names", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "string" } } } } } } } } }, "components": { "schemas": { "SessionSummary": { "type": "object", "properties": { "id": { "type": "string" }, "state": { "type": "string" }, "model": { "type": "string" }, "agent": { "type": "string" } }, "required": ["id", "state", "model", "agent"] }, "CreateSessionRequest": { "type": "object", "properties": { "cwd": { "type": "string", "description": "Working directory (defaults to $HOME)" }, "backend": { "type": "string", "description": "Backend name (e.g. ollama, anthropic)" }, "model": { "type": "string", "description": "Model name" }, "agent": { "type": "string", "description": "Agent name (default: 'default')" } } }, "Error": { "type": "object", "properties": { "error": { "type": "string" } }, "required": ["error"] } }, "responses": { "Error": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } } } } }