From d07325cd31008aa70c65d4d515c98f0e69614aed Mon Sep 17 00:00:00 2001 From: m57 <41645758+Hy4ri@users.noreply.github.com> Date: Tue, 29 Sep 2026 14:37:46 +0300 Subject: [PATCH] ci(#1374): add gateway contract drift check (#1378) --- AGENTS.md | 1 + CONTRIBUTING.md | 9 + .../hermescontrol/data/ws/GatewayContract.kt | 93 + .../data/ws/GatewayContractFramesTest.kt | 146 + .../data/ws/GatewayContractTest.kt | 98 + .../test/resources/gateway-contract/SOURCE | 5 + .../resources/gateway-contract/openrpc.json | 40113 ++++++++++++++++ scripts/sync-gateway-contract.sh | 19 + 8 files changed, 40484 insertions(+) create mode 100644 app/src/test/java/com/m57/hermescontrol/data/ws/GatewayContract.kt create mode 100644 app/src/test/java/com/m57/hermescontrol/data/ws/GatewayContractFramesTest.kt create mode 100644 app/src/test/java/com/m57/hermescontrol/data/ws/GatewayContractTest.kt create mode 100644 app/src/test/resources/gateway-contract/SOURCE create mode 100644 app/src/test/resources/gateway-contract/openrpc.json create mode 100755 scripts/sync-gateway-contract.sh diff --git a/AGENTS.md b/AGENTS.md index d87443ad..d0f603b3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -311,6 +311,7 @@ com.m57.hermescontrol/ - [README.md](README.md) — human-facing overview, features, screenshots, tech stack - [DESIGN.md](DESIGN.md) — visual and interaction requirements, accessibility, and token source map - [THEMES.md](app/src/main/java/com/m57/hermescontrol/theme/THEMES.md) — theme template, dispatcher, and mode fallback implementation +- [Gateway contract test](CONTRIBUTING.md#gateway-contract-snapshot) — backend drift check; refresh with `scripts/sync-gateway-contract.sh` - [CONTRIBUTING.md](CONTRIBUTING.md) — contributor workflow, PR checklist, code style - [.github/workflows/android.yml](.github/workflows/android.yml) — CI pipeline source of truth - [.github/workflows/merge-conflict-detector.yml](.github/workflows/merge-conflict-detector.yml) — auto-labels conflicting PRs diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e70ef899..0748ef83 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -112,6 +112,15 @@ We enforce Kotlin coding conventions and Jetpack Compose best practices. - Mock time/dispatchers explicitly (`StandardTestDispatcher` + `Dispatchers.setMain`), restore `Dispatchers.Main` in teardown, and cancel test-owned scopes. Follow neighboring tests for the affected component. - For UI changes, exercise the changed flow on a device or emulator and record the behavior observed. A built or downloaded CI APK alone is not behavioral verification. If device verification is unavailable, state that gate explicitly rather than marking it passed. + +### Gateway contract snapshot + +`GatewayContractTest` checks `WsMethods`, handled server requests and literal param keys against a vendored copy of +hermes-agent's `gateway-contract.openrpc.json` (`app/src/test/resources/gateway-contract/`, provenance in `SOURCE`). +It is test-only. Refresh it with `scripts/sync-gateway-contract.sh [ref]`, then run +`./gradlew testDebugUnitTest --tests '*GatewayContract*'` and review the diff. Allowlist exceptions need a reason in +`GatewayContractAllowlist`. + --- ## Dependency & Build Hygiene diff --git a/app/src/test/java/com/m57/hermescontrol/data/ws/GatewayContract.kt b/app/src/test/java/com/m57/hermescontrol/data/ws/GatewayContract.kt new file mode 100644 index 00000000..7a4886ac --- /dev/null +++ b/app/src/test/java/com/m57/hermescontrol/data/ws/GatewayContract.kt @@ -0,0 +1,93 @@ +package com.m57.hermescontrol.data.ws + +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.boolean +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive + +/** + * Vendored snapshot of the backend's published gateway contract + * (`apps/shared/src/gateway-contract.openrpc.json` in hermes-agent), test-only. + * Refresh with `scripts/sync-gateway-contract.sh`; provenance is in `SOURCE`. + */ +object GatewayContract { + private val root: JsonObject by lazy { + val stream = + requireNotNull(GatewayContract::class.java.getResourceAsStream("/gateway-contract/openrpc.json")) { + "gateway-contract/openrpc.json missing from test resources" + } + Json.parseToJsonElement(stream.bufferedReader().use { it.readText() }).jsonObject + } + + private val schemas: JsonObject get() = root["components"]!!.jsonObject["schemas"]!!.jsonObject + + private fun names(key: String): Set = + (root[key] as JsonArray).map { it.jsonObject["name"]!!.jsonPrimitive.content }.toSet() + + val methods: Set by lazy { names("methods") } + + /** Server→client request methods (`x-server-requests`). */ + val serverRequests: Set by lazy { names("x-server-requests") } + + private fun paramsSchema(method: String): JsonObject { + val entry = + (root["methods"] as JsonArray) + .map { it.jsonObject } + .first { it["name"]!!.jsonPrimitive.content == method } + val ref = + entry["params"]!! + .jsonArray + .first() + .jsonObject["schema"]!! + .jsonObject["\$ref"]!! + .jsonPrimitive.content + return schemas[ref.substringAfterLast('/')]!!.jsonObject + } + + /** + * Keys the backend would reject for [method]: unknown keys when the params + * schema forbids extras, plus required keys that are absent. Empty means OK. + * Keys only; value types are not checked. + */ + fun paramKeyProblems( + method: String, + keys: Set, + ): List { + if (method !in methods) return listOf("$method is not a contract method") + val schema = paramsSchema(method) + val properties = schema["properties"]?.jsonObject?.keys.orEmpty() + val required = schema["required"]?.jsonArray?.map { it.jsonPrimitive.content }.orEmpty() + val strict = schema["additionalProperties"]?.jsonPrimitive?.boolean == false + val problems = mutableListOf() + if (strict) { + (keys - properties).sorted().forEach { + problems += "$method: unknown param '$it' (backend forbids extra keys; allowed: ${properties.sorted()})" + } + } + required.filter { it !in keys }.forEach { problems += "$method: missing required param '$it'" } + return problems + } +} + +/** + * WsMethods constants the backend contract does not list. Every entry needs a + * reason; the test fails if an entry appears in the contract or is no longer a + * WsMethods constant, so stale exceptions get removed. + */ +object GatewayContractAllowlist { + private const val LEGACY = "legacy fallback for gateways before srq request frames (#1119)" + + val entries: Map = + mapOf( + "gateway.ping" to "handled inline by the WS transport itself (tui_gateway/ws.py), not a contract method", + "clarify.respond" to LEGACY, + "sudo.respond" to LEGACY, + "secret.respond" to LEGACY, + "vault.unlock.respond" to LEGACY, + "vault.code.respond" to LEGACY, + "vault.save_login.respond" to LEGACY, + ) +} diff --git a/app/src/test/java/com/m57/hermescontrol/data/ws/GatewayContractFramesTest.kt b/app/src/test/java/com/m57/hermescontrol/data/ws/GatewayContractFramesTest.kt new file mode 100644 index 00000000..b92d4208 --- /dev/null +++ b/app/src/test/java/com/m57/hermescontrol/data/ws/GatewayContractFramesTest.kt @@ -0,0 +1,146 @@ +package com.m57.hermescontrol.data.ws + +import android.util.Log +import com.m57.hermescontrol.data.local.AuthManager +import com.m57.hermescontrol.data.remote.CookieManager +import com.m57.hermescontrol.data.remote.DashboardSessionTokenRefresher +import com.m57.hermescontrol.data.remote.OkHttpProvider +import com.m57.hermescontrol.data.remote.buildFakePersistentCookieJar +import io.mockk.coEvery +import io.mockk.every +import io.mockk.mockk +import io.mockk.mockkObject +import io.mockk.mockkStatic +import io.mockk.unmockkAll +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.withTimeout +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.JsonPrimitive +import okhttp3.Response +import okhttp3.WebSocket +import okhttp3.WebSocketListener +import okhttp3.mockwebserver.MockResponse +import okhttp3.mockwebserver.MockWebServer +import org.junit.After +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicReference + +/** + * Sends the client-owned RPCs through the real [HermesWsClient] and checks the + * exact frame on the wire against the vendored gateway contract (#1374). + */ +class GatewayContractFramesTest { + private lateinit var mockWebServer: MockWebServer + + @Before + fun setUp() { + mockkStatic(Log::class) + every { Log.d(any(), any()) } returns 0 + every { Log.i(any(), any()) } returns 0 + every { Log.w(any(), any()) } returns 0 + every { Log.w(any(), any(), any()) } returns 0 + every { Log.e(any(), any(), any()) } returns 0 + + mockWebServer = MockWebServer() + mockWebServer.start() + mockkObject(AuthManager) + every { AuthManager.wsUrl() } returns mockWebServer.url("/").toString().replace("http://", "ws://") + every { AuthManager.isAutoReconnect() } returns false + every { AuthManager.getSessionCookie() } returns null + every { AuthManager.serverStore } returns + mockk().also { + every { it.getLatestState() } returns + com.m57.hermescontrol.data.config + .ServerStoreState() + } + CookieManager.setJarForTest(buildFakePersistentCookieJar()) + mockkObject(DashboardSessionTokenRefresher) + coEvery { DashboardSessionTokenRefresher.refreshAsync() } returns null + every { DashboardSessionTokenRefresher.refresh() } returns null + + HermesWsClient.disconnect(clearPendingMessages = true) + HermesWsClient.releaseExternalActivityConnectionLease() + HermesWsClient.releaseBackgroundConnectionLease() + HermesWsClient.setAppForeground(true) + } + + @After + fun tearDown() { + HermesWsClient.releaseExternalActivityConnectionLease() + HermesWsClient.releaseBackgroundConnectionLease() + HermesWsClient.disconnect(clearPendingMessages = true) + runBlocking { + withTimeout(5000) { HermesWsClient.connectionStatus.first { it == ConnectionStatus.DISCONNECTED } } + } + runCatching { mockWebServer.shutdown() } + unmockkAll() + } + + /** Connect, run [trigger], and return the first frame the server sees for [method]. */ + private fun captureFrame( + method: String, + beforeConnect: () -> Unit = {}, + trigger: () -> Unit = {}, + ): JsonObject { + val opened = CountDownLatch(1) + val captured = CountDownLatch(1) + val frame = AtomicReference(null) + mockWebServer.enqueue( + MockResponse().withWebSocketUpgrade( + object : WebSocketListener() { + override fun onOpen( + webSocket: WebSocket, + response: Response, + ) = opened.countDown() + + override fun onMessage( + webSocket: WebSocket, + text: String, + ) { + val json = OkHttpProvider.json.parseToJsonElement(text) as? JsonObject ?: return + val name = (json["method"] as? JsonPrimitive)?.content + if (frame.get() == null && name == method) { + frame.set(json) + captured.countDown() + } + } + }, + ), + ) + beforeConnect() + HermesWsClient.connect() + runBlocking { + withTimeout(5000) { HermesWsClient.connectionStatus.first { it == ConnectionStatus.CONNECTED } } + } + assertTrue(opened.await(5, TimeUnit.SECONDS)) + trigger() + assertTrue("No '$method' frame reached the server", captured.await(5, TimeUnit.SECONDS)) + return requireNotNull(frame.get()) + } + + private fun assertMatchesContract(frame: JsonObject) { + val method = (frame["method"] as JsonPrimitive).content + val params = frame["params"] as JsonObject + val problems = GatewayContract.paramKeyProblems(method, params.keys) + assertTrue(problems.joinToString("\n"), problems.isEmpty()) + } + + @Test + fun promptSubmitFrameMatchesContract() { + assertMatchesContract( + captureFrame(WsMethods.PROMPT_SUBMIT) { HermesWsClient.sendMessage("s1", "hello", queued = true) }, + ) + } + + @Test + fun eventsSinceReplayFrameMatchesContract() { + assertMatchesContract( + captureFrame(WsMethods.SESSION_EVENTS_SINCE, beforeConnect = { HermesWsClient.setSeqWatermark("s1", 5) }), + ) + } +} diff --git a/app/src/test/java/com/m57/hermescontrol/data/ws/GatewayContractTest.kt b/app/src/test/java/com/m57/hermescontrol/data/ws/GatewayContractTest.kt new file mode 100644 index 00000000..033adc15 --- /dev/null +++ b/app/src/test/java/com/m57/hermescontrol/data/ws/GatewayContractTest.kt @@ -0,0 +1,98 @@ +package com.m57.hermescontrol.data.ws + +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test +import java.lang.reflect.Modifier + +/** Fails CI when the app drifts from the backend's published gateway contract (#1374). */ +class GatewayContractTest { + private val wsMethodConstants: Map = + WsMethods::class.java.declaredFields + .filter { Modifier.isStatic(it.modifiers) && it.type == String::class.java } + .associate { it.name to it.get(null) as String } + + @Test + fun everyWsMethodIsInTheContractOrAllowlisted() { + val unknown = + wsMethodConstants.filter { (_, method) -> + method !in GatewayContract.methods && method !in GatewayContractAllowlist.entries + } + assertTrue( + "WsMethods constants missing from the gateway contract (backend removed or renamed them?): " + + unknown.entries.joinToString { "${it.key}=\"${it.value}\"" } + + ". Fix the constant, or allowlist it with a reason in GatewayContractAllowlist.", + unknown.isEmpty(), + ) + } + + @Test + fun profileScopedMethodsAreContractMethods() { + val unknown = WsMethods.PROFILE_SCOPED_METHODS - GatewayContract.methods + assertTrue("PROFILE_SCOPED_METHODS not in the contract: $unknown", unknown.isEmpty()) + } + + @Test + fun allowlistEntriesHaveReasonsAndAreNotStale() { + val sent = wsMethodConstants.values.toSet() + GatewayContractAllowlist.entries.forEach { (method, reason) -> + assertTrue("Allowlist entry '$method' needs a reason", reason.isNotBlank()) + assertTrue( + "Allowlist entry '$method' is now in the contract; remove it from GatewayContractAllowlist", + method !in GatewayContract.methods, + ) + assertTrue( + "Allowlist entry '$method' is no longer a WsMethods constant; remove it", + method in sent, + ) + } + } + + @Test + fun handledServerRequestsExistInTheContract() { + val unknown = APP_HANDLED_SERVER_REQUESTS - GatewayContract.serverRequests + assertTrue("Handled server requests missing from the contract: $unknown", unknown.isEmpty()) + + // Informational: unsupported requests are already answered with -32601. + val unhandled = (GatewayContract.serverRequests - APP_HANDLED_SERVER_REQUESTS).sorted() + println("Contract server requests the app does not handle: $unhandled") + } + + @Test + fun paramKeyCheckRejectsTheRegressionsItExistsFor() { + // #1118: the backend forbids extra keys, so since_seq broke replay with error 4000. + val problems = GatewayContract.paramKeyProblems("session.events.since", setOf("session_id", "since_seq")) + assertEquals(1, problems.count { "since_seq" in it }) + assertTrue(GatewayContract.paramKeyProblems("session.events.since", setOf("session_id")).isEmpty()) + assertTrue(GatewayContract.paramKeyProblems("session.nope", emptySet()).isNotEmpty()) + } + + @Test + fun literalParamKeysAtCallSitesMatchTheContract() { + CALL_SITE_PARAM_KEYS.forEach { (method, keys) -> + val problems = GatewayContract.paramKeyProblems(method, keys) + assertTrue(problems.joinToString("\n"), problems.isEmpty()) + } + } + + private companion object { + /** Methods ChatViewModel.handleServerRequest routes; keep in sync with its `when`. */ + val APP_HANDLED_SERVER_REQUESTS = + setOf("approval", "clarify", "sudo", "secret", "vault.code", "vault.save_login", "vault.unlock_prompt") + + /** + * Union of literal param keys at production call sites (the two client-owned + * ones, prompt.submit and session.events.since, are checked against real frames + * in [GatewayContractFramesTest]). Update together with the call site. + */ + val CALL_SITE_PARAM_KEYS: Map> = + mapOf( + // ChatViewModel, GroupChatViewModel + "session.create" to setOf("profile", "title", "source", "hidden"), + // ChatViewModel.resumeSession, NotificationReplyReceiver + "session.resume" to setOf("session_id", "omit_messages"), + // ChatViewModel, GroupChatViewModel + "session.interrupt" to setOf("session_id"), + ) + } +} diff --git a/app/src/test/resources/gateway-contract/SOURCE b/app/src/test/resources/gateway-contract/SOURCE new file mode 100644 index 00000000..4b0fb58e --- /dev/null +++ b/app/src/test/resources/gateway-contract/SOURCE @@ -0,0 +1,5 @@ +repo: NousResearch/hermes-agent +ref: main +sha: ea114c3e98c3339e13004adfc6098cf28ed7d754 +date: 2026-09-29 +path: apps/shared/src/gateway-contract.openrpc.json diff --git a/app/src/test/resources/gateway-contract/openrpc.json b/app/src/test/resources/gateway-contract/openrpc.json new file mode 100644 index 00000000..7a63156f --- /dev/null +++ b/app/src/test/resources/gateway-contract/openrpc.json @@ -0,0 +1,40113 @@ +{ + "openrpc": "1.3.2", + "info": { + "title": "Hermes TUI/Desktop gateway", + "version": "1", + "description": "Generated from tui_gateway/contracts by scripts/gen_gateway_contracts.py." + }, + "methods": [ + { + "name": "agents.list", + "summary": "Registry-wide background process summary for ``/agents``.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/AgentsListParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/AgentsListResult" + } + } + }, + { + "name": "approval.pending", + "summary": "Replay the approvals still waiting on this session (reconnect / polling).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ApprovalPendingParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ApprovalPendingResult" + } + } + }, + { + "name": "approval.received", + "summary": "Tell the backend the card is on screen, so its timeout clock starts.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ApprovalReceivedParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ApprovalReceivedResult" + } + } + }, + { + "name": "approval.respond", + "summary": "Deliver the user's decision on a dangerous command (falls back to durable identity on a stale sid).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ApprovalRespondParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ApprovalRespondResult" + } + } + }, + { + "name": "billing.auto_reload", + "summary": "Enable/disable auto top-up with its threshold and reload amount (billing:manage).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/BillingAutoReloadParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/BillingMutationResult" + } + } + }, + { + "name": "billing.charge", + "summary": "Start a one-off top-up charge (billing:manage, idempotent).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/BillingChargeParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/BillingChargeResult" + } + } + }, + { + "name": "billing.charge_status", + "summary": "Poll one charge by id.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/BillingChargeStatusParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/BillingChargeStatusResult" + } + } + }, + { + "name": "billing.state", + "summary": "Read-only billing view (no scope); the Nous free tier is answered locally without a portal call.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/BillingStateResult" + } + } + }, + { + "name": "billing.step_up", + "summary": "Run the billing:manage device flow; the URL/code arrive via billing.step_up.verification.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/BillingStepUpParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/BillingStepUpResult" + } + } + }, + { + "name": "bot_relay.deliver", + "summary": "Deliver a relayed DM into a Bot Chat on this gateway and return the one-turn reply (blocking).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/BotRelayDeliverParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/BotRelayDeliverResult" + } + } + }, + { + "name": "bot_relay.outbox.drain", + "summary": "Atomically claim every pending cross-connection envelope queued on this gateway.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/BotRelayOutboxDrainParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/BotRelayOutboxDrainResult" + } + } + }, + { + "name": "bot_relay.reply", + "summary": "Write a relayed reply and/or typed error for an envelope so the sender-side waiter resolves.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/BotRelayReplyParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/OkResult" + } + } + }, + { + "name": "bot_relay.roster.sync", + "summary": "Replace this gateway's view of agents on other connections; answers the accepted row count.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/BotRelayRosterSyncParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/BotRelayRosterSyncResult" + } + } + }, + { + "name": "browser.controller.detach", + "summary": "Hard-detach only the controller owned by this authenticated transport.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/BrowserControllerParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/BrowserControllerDetachResult" + } + } + }, + { + "name": "browser.controller.heartbeat", + "summary": "Acknowledge a heartbeat only for this transport's own attached controller.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/BrowserControllerParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/OkResult" + } + } + }, + { + "name": "browser.controller.register", + "summary": "Attach this connection as the browser controller for one session; fails closed (4403).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/BrowserControllerRegisterParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/BrowserControllerRegisterResult" + } + } + }, + { + "name": "browser.controller.result", + "summary": "Deliver one command result to the broker; accepted is false for unknown or settled command ids.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/BrowserControllerResultParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/BrowserControllerResultResult" + } + } + }, + { + "name": "browser.manage", + "summary": "Inspect, attach to, or drop the CDP browser the tools use; ``messages`` narrate a connect.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/BrowserManageParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/BrowserManageResult" + } + } + }, + { + "name": "clarify.lock", + "summary": "Lock one answer of a batch clarify request (editable until every question is locked).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ClarifyLockParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ClarifyLockResult" + } + } + }, + { + "name": "cli.exec", + "summary": "Run ``hermes `` non-interactively and capture its output; ``blocked`` explains a refusal.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/CliExecParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/CliExecResult" + } + } + }, + { + "name": "client.capabilities", + "summary": "What the calling client handles, sent once per connection (after gateway.ready); returns the server\u2192client request methods this backend may send.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ClientCapabilitiesParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ClientCapabilitiesResult" + } + } + }, + { + "name": "clipboard.paste", + "summary": "Save the host clipboard image into the session and queue it for the next turn.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ClipboardPasteParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/AttachedImageResult" + } + } + }, + { + "name": "command.dispatch", + "summary": "Run a quick/plugin/bundle/skill/built-in slash command and answer a structured directive.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/CommandDispatchParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/CommandDispatchResult" + } + } + }, + { + "name": "command.resolve", + "summary": "Canonical registry command for a name or alias.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/CommandResolveParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/CommandResolveResult" + } + } + }, + { + "name": "commands.catalog", + "summary": "Categorized slash metadata (registry, quick, plugin, skill) for completion menus.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/CommandsCatalogParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/CommandsCatalogResult" + } + } + }, + { + "name": "complete.path", + "summary": "Path / @-reference completions for the composer (files, folders, profiles, plugin providers).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/CompletePathParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/CompletionItemsResult" + } + } + }, + { + "name": "complete.slash", + "summary": "Ranked slash-command / skill completions for a ``/`` token.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/CompleteSlashParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/CompleteSlashResult" + } + } + }, + { + "name": "config.get", + "summary": "Read one normalised config value (or the whole effective config) the way the UIs render it.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ConfigGetParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ConfigGetResult" + } + } + }, + { + "name": "config.set", + "summary": "Change one config key (persisted or session-scoped) and read back the normalised value.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ConfigSetParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ConfigSetResult" + } + } + }, + { + "name": "config.show", + "summary": "Masked, display-ready config summary (model / agent / environment rows).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ConfigShowParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ConfigShowResult" + } + } + }, + { + "name": "connection.respond", + "summary": "Per-target outcomes from the card, and an optional Continue.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ConnectionRespondParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ConnectionRespondResult" + } + } + }, + { + "name": "connectors.accounts", + "summary": "The scoped member's hosted connector accounts, optionally filtered by connector slug.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ConnectorAccountsParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ConnectorAccountsResult" + } + } + }, + { + "name": "connectors.accounts.remove", + "summary": "Remove one hosted connector account owned by the scoped member.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ConnectorAccountsRemoveParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ConnectorAccountsRemoveResult" + } + } + }, + { + "name": "connectors.catalog", + "summary": "The hosted connector catalog available to the scoped member.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ConnectorsCatalogResult" + } + } + }, + { + "name": "connectors.connect", + "summary": "Start or re-initiate authorization for named connectors on a session or account operation.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ConnectorsConnectParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ConnectorsConnectResult" + } + } + }, + { + "name": "connectors.list", + "summary": "Connector catalog + connection state for one session or profile account owner.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ConnectorsListParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ConnectorsListResult" + } + } + }, + { + "name": "connectors.operation.status", + "summary": "The current snapshot of one open session or account operation.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ConnectionOperationParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ConnectionOperationStatus" + } + } + }, + { + "name": "connectors.operation.wake", + "summary": "The browser leg came back (hermes://connections/done): read the accounts now, not at the next tick.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ConnectionOperationParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ConnectionWakeResult" + } + } + }, + { + "name": "connectors.policy.get", + "summary": "Policy layers for the scoped member, from organization to member scope.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ConnectorPolicyGetResult" + } + } + }, + { + "name": "connectors.policy.set", + "summary": "Apply one scoped member connector or tool-list policy change.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ConnectorPolicySetParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ConnectorPolicySetResult" + } + } + }, + { + "name": "connectors.tools", + "summary": "The scoped profile's cached or current tool list for one connector.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ConnectorToolsParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ConnectorToolsResult" + } + } + }, + { + "name": "cron.manage", + "summary": "List/add/remove/pause/resume cron jobs in the (optionally profile-scoped) cron store.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/CronManageParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/CronManageResult" + } + } + }, + { + "name": "delegation.pause", + "summary": "Block/unblock NEW spawns globally (active children keep running); returns the new state.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/DelegationPauseParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/DelegationPauseResult" + } + } + }, + { + "name": "delegation.status", + "summary": "Running subagent tree plus the spawn pause flag and limits.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/DelegationStatusResult" + } + } + }, + { + "name": "diagnostics.share_nous", + "summary": "Upload a force-redacted debug bundle to Nous-internal diagnostics storage.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/DiagnosticsShareNousParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/DiagnosticsShareNousResult" + } + } + }, + { + "name": "display.install", + "summary": "Run the distro package install on the gateway host; progress streams as display.install.log/.done.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/DisplayInstallResult" + } + } + }, + { + "name": "display.lease.acquire", + "summary": "Take over: the human named by a viewer id this connection minted controls the screen.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/DisplayLeaseAcquireParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/DisplayLeaseResult" + } + } + }, + { + "name": "display.lease.release", + "summary": "Hand back. Without a viewer id the release is refused while a human holds unless force.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/DisplayLeaseReleaseParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/DisplayLeaseResult" + } + } + }, + { + "name": "display.observe", + "summary": "Mint a single-use ticket for /api/display/ws and the server-minted viewer id for this connection.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/DisplayObserveParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/DisplayObserveResult" + } + } + }, + { + "name": "display.start", + "summary": "Start this profile's Xvnc + Xfce (idempotent); blocks until the display is published.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/DisplayStatus" + } + } + }, + { + "name": "display.status", + "summary": "Runtime + lease snapshot for this profile's screen.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/DisplayStatus" + } + } + }, + { + "name": "display.stop", + "summary": "Stop the screen. Refused (5300, code viewer_mismatch) while a human holds unless force.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/DisplayStopParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/DisplayStopResult" + } + } + }, + { + "name": "display.switchSandboxImage", + "summary": "Decide the pending default sandbox image switch for this profile; refused when none is pending.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/DisplaySwitchSandboxImageParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/DisplaySwitchSandboxImageResult" + } + } + }, + { + "name": "display.thumbnail", + "summary": "One JPEG grab of the bot's screen; read-only, never changes the lease.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/DisplayThumbnailResult" + } + } + }, + { + "name": "file.attach", + "summary": "Stage a non-image file into the session workspace and hand back its @file: ref.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/FileAttachParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/FileAttachResult" + } + } + }, + { + "name": "free_tier.ack_notice", + "summary": "Mark the one-time availability notice as shown on the free-tier identity.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/FreeTierAckNoticeResult" + } + } + }, + { + "name": "free_tier.provision", + "summary": "Explicit retry of the free-tier identity mint when the boot bootstrap could not create it.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/FreeTierProvisionResult" + } + } + }, + { + "name": "free_tier.status", + "summary": "Pure read of the focused profile's free-tier identity state (no network, no side effects).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/FreeTierStatusResult" + } + } + }, + { + "name": "gateway.capabilities", + "summary": "What THIS build enforces (a client withholds a feature unless advertised).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PingParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GatewayCapabilitiesResult" + } + } + }, + { + "name": "groups.approve", + "summary": "Resolve one exact pending approval raised by a local or peer room member.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsApproveParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsApproveResult" + } + } + }, + { + "name": "groups.capabilities", + "summary": "Describe the hosted-room protocol implemented by this gateway.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsCapabilitiesParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsCapabilitiesResult" + } + } + }, + { + "name": "groups.create", + "summary": "Create a hosted room idempotently; authority is this gateway's stable install identity.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsCreateParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsCreateResult" + } + } + }, + { + "name": "groups.demote", + "summary": "Fence this gateway's stale room authority against a proven newer epoch.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsDemoteParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsDemoteResult" + } + } + }, + { + "name": "groups.disband", + "summary": "Permanently tombstone a hosted room id after stopping its work and revoking peer routes.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsDisbandParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsDisbandResult" + } + } + }, + { + "name": "groups.list", + "summary": "List rooms hosted by this gateway, most recently changed first.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsListParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsListResult" + } + } + }, + { + "name": "groups.log", + "summary": "A monotonic room-log delta after since_seq, bounded by count and page bytes.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsLogParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsLogResult" + } + } + }, + { + "name": "groups.peer.invite", + "summary": "Mint one target-issued room/profile grant for a prospective room home.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsPeerInviteParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsPeerInviteResult" + } + } + }, + { + "name": "groups.peer.register", + "summary": "Register and probe one scoped peer route on the room home.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsPeerRegisterParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsPeerRegisterResult" + } + } + }, + { + "name": "groups.peer.revoke", + "summary": "Revoke one target-issued grant using its exact profile scope.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsPeerRevokeParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsPeerRevokeResult" + } + } + }, + { + "name": "groups.promote", + "summary": "Continue a replicated room on this gateway at epoch + 1; requires confirm=true.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsPromoteParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsPromoteResult" + } + } + }, + { + "name": "groups.rename", + "summary": "Rename one hosted room atomically with its replay event.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsRenameParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsRenameResult" + } + } + }, + { + "name": "groups.replica_state", + "summary": "The local replica's coverage and authority lineage for one room.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsReplicaStateParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsReplicaStateResult" + } + } + }, + { + "name": "groups.replicate", + "summary": "Persist one authority-stamped replay page into the local replica store; idempotent.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsReplicateParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsReplicateResult" + } + } + }, + { + "name": "groups.retry", + "summary": "Retry one indeterminate room task after explicit user confirmation.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsRetryParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsRetryResult" + } + } + }, + { + "name": "groups.send", + "summary": "Append one inert message.user event idempotently; the actor is server-owned.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsSendParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsSendResult" + } + } + }, + { + "name": "groups.state", + "summary": "One hosted room's replay cursor and fenced authority state, plus live driver status.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsStateParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsStateResult" + } + } + }, + { + "name": "groups.stop", + "summary": "Durably cancel queued or running work for one hosted room.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/GroupsStopParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/GroupsStopResult" + } + } + }, + { + "name": "handoff.fail", + "summary": "Fail a not-yet-claimed handoff (client poll timeout); CAS against the watcher.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/HandoffFailParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/HandoffFailResult" + } + } + }, + { + "name": "handoff.request", + "summary": "Queue a handoff to a messaging platform's home channel; the gateway watcher claims it.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/HandoffRequestParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/HandoffRequestResult" + } + } + }, + { + "name": "handoff.state", + "summary": "Poll the handoff row for this session.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/HandoffStateResult" + } + } + }, + { + "name": "i18n.catalog", + "summary": "Pack + overlay messages for one language and surface; the renderer merges them over its bundled catalog.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/I18nCatalogParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/I18nCatalogResult" + } + } + }, + { + "name": "i18n.languages", + "summary": "Every language some layer supplies (bundled \u222a user overlay \u222a plugin packs), en first.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/I18nLanguagesResult" + } + } + }, + { + "name": "image.attach", + "summary": "Queue a gateway-visible image file for the next turn.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ImageAttachParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/AttachedImageResult" + } + } + }, + { + "name": "image.attach_bytes", + "summary": "Queue an image uploaded as base64 (remote client); reply mirrors image.attach.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ImageAttachBytesParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/AttachedImageResult" + } + } + }, + { + "name": "image.detach", + "summary": "Drop a queued image before the turn is sent.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ImageDetachParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ImageDetachResult" + } + } + }, + { + "name": "image.generate", + "summary": "Generate an image through the tool's provider dispatcher and hand the renderer a data URL.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ImageGenerateParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ImageGenerateResult" + } + } + }, + { + "name": "input.detect_drop", + "summary": "Recognise a terminal file drop pasted into the composer and turn it into an attachment.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/InputDetectDropParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/InputDetectDropResult" + } + } + }, + { + "name": "insights.get", + "summary": "Session/message counts over the last ``days`` for the (optionally scoped) profile store.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/InsightsGetParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/InsightsGetResult" + } + } + }, + { + "name": "learning.delete", + "summary": "Archive a skill (restorable via curator) or remove a memory chunk.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/LearningNodeParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/LearningMutationResult" + } + } + }, + { + "name": "learning.detail", + "summary": "Node content (SKILL.md or memory chunk) for an edit prefill.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/LearningNodeParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/LearningDetailResult" + } + } + }, + { + "name": "learning.edit", + "summary": "Rewrite a node's content (SKILL.md or memory chunk).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/LearningEditParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/LearningMutationResult" + } + } + }, + { + "name": "learning.frames", + "summary": "Pre-render the /journey timeline (frames + legend/summary) so the TUI walks it locally.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/LearningFramesParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/LearningFramesResult" + } + } + }, + { + "name": "llm.oneshot", + "summary": "Stateless one-shot LLM completion (titles, ideas) on the session's or the task backend.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/LlmOneshotParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/LlmOneshotResult" + } + } + }, + { + "name": "mcp.catalog", + "summary": "Curated MCP presets with per-profile installed/enabled state and the env keys each needs.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/McpCatalogResult" + } + } + }, + { + "name": "mcp.servers.add", + "summary": "Add a server to the profile's config from a catalog preset and/or an explicit config.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/McpServersAddParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/McpServersAddResult" + } + } + }, + { + "name": "mcp.servers.list", + "summary": "Configured MCP servers for the (scoped) profile, secrets redacted to env-key names.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/McpServersListResult" + } + } + }, + { + "name": "mcp.servers.oauth.callback", + "summary": "Relay a client-captured redirect into a client_redirect_uri flow.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/McpOauthCallbackParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/McpOauthCallbackResult" + } + } + }, + { + "name": "mcp.servers.oauth.cancel", + "summary": "Cancel a flow owned by the resolved profile, waking its callback worker.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/McpOauthFlowParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/McpOauthCancelResult" + } + } + }, + { + "name": "mcp.servers.oauth.poll", + "summary": "Poll a flow; approved persists tokens for the profile and returns the probed tools.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/McpOauthFlowParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/McpOauthPollResult" + } + } + }, + { + "name": "mcp.servers.oauth.start", + "summary": "Begin a PKCE OAuth flow; the client opens auth_url and polls mcp.servers.oauth.poll.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/McpOauthStartParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/McpOauthStartResult" + } + } + }, + { + "name": "mcp.servers.remove", + "summary": "Drop a server from the profile's config.yaml.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/McpServerNameParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/McpServersRemoveResult" + } + } + }, + { + "name": "mcp.servers.set_api_key", + "summary": "Store a credential in the profile's .env and reference it from the server config (header or env).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/McpServersSetApiKeyParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/McpServersSetApiKeyResult" + } + } + }, + { + "name": "mcp.servers.status", + "summary": "Cached runtime state per configured server; never connects, probes, or starts auth.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/McpServersStatusResult" + } + } + }, + { + "name": "mcp.servers.test", + "summary": "Connect, list tools, disconnect \u2014 an OAuth server with no token on disk is reported as not ok.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/McpServerNameParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/McpServersTestResult" + } + } + }, + { + "name": "message.react", + "summary": "Set/clear one author's emoji reaction on a message; returns the row's full reaction list.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/MessageReactParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/MessageReactResult" + } + } + }, + { + "name": "model.disconnect", + "summary": "Remove every credential (env keys and OAuth state) for a provider.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ModelDisconnectParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ModelDisconnectResult" + } + } + }, + { + "name": "model.options", + "summary": "Provider/model inventory for the picker, layered over the session's live provider when given.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ModelOptionsParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ModelOptionsResult" + } + } + }, + { + "name": "model.save_key", + "summary": "Save an API key for a provider and return its refreshed inventory row.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ModelSaveKeyParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ModelSaveKeyResult" + } + } + }, + { + "name": "onboarding.ensure_setup_profile", + "summary": "Create-or-read the backend-owned setup profile; the backend picks the name and finds it by role.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/Params" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/OnboardingEnsureSetupProfileResult" + } + } + }, + { + "name": "onboarding.reset_setup_profile", + "summary": "Restore the setup profile to its created state in place (soul, memories, skills, sessions).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/Params" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/OnboardingResetSetupProfileResult" + } + } + }, + { + "name": "paste.collapse", + "summary": "Spill a large paste to a file and hand back the inline placeholder.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PasteCollapseParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PasteCollapseResult" + } + } + }, + { + "name": "pdf.attach", + "summary": "Render a PDF's pages to PNG and queue them as images for the next turn.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PdfAttachParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PdfAttachResult" + } + } + }, + { + "name": "pet.cancel", + "summary": "Stop an in-flight pet generate/hatch by token (idempotent).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PetCancelParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PetCancelResult" + } + } + }, + { + "name": "pet.cells", + "summary": "Half-block cell frames (or a kitty placement) for one pet state.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PetCellsParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PetCellsResult" + } + } + }, + { + "name": "pet.disable", + "summary": "Turn the pet display off from the desktop picker.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/OkResult" + } + } + }, + { + "name": "pet.export", + "summary": "Export an installed pet as a re-importable .zip.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PetSlugParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PetExportResult" + } + } + }, + { + "name": "pet.gallery", + "summary": "Petdex gallery + local install state (installed-only offline); localOnly skips the remote manifest.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PetGalleryParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PetGalleryResult" + } + } + }, + { + "name": "pet.generate", + "summary": "Candidate base looks for a new pet (draft step); drafts also stream via pet.generate.progress.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PetGenerateParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PetGenerateResult" + } + } + }, + { + "name": "pet.generate.status", + "summary": "Whether pet generation is possible (a reference-capable image backend) and which providers.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PetGenerateStatusResult" + } + } + }, + { + "name": "pet.hatch", + "summary": "Turn a base draft into a full spritesheet pet; progress streams via pet.hatch.progress.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PetHatchParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PetHatchResult" + } + } + }, + { + "name": "pet.info", + "summary": "Active pet for sprite renderers: spritesheet (base64) + frame geometry + state-row taxonomy.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PetInfoParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PetInfoResult" + } + } + }, + { + "name": "pet.info.meta", + "summary": "Cheap active-pet metadata used to avoid full payload refreshes.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PetInfoMetaResult" + } + } + }, + { + "name": "pet.remove", + "summary": "Uninstall a pet (delete its directory); if it was active, turn the display off.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PetSlugParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PetSlugResult" + } + } + }, + { + "name": "pet.rename", + "summary": "Rename a pet's display name + realign its slug/dir; follows the active slug in config.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PetRenameParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PetSlugResult" + } + } + }, + { + "name": "pet.scale", + "summary": "Persist display.pet.scale (clamped to engine bounds) from the desktop slider.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PetScaleParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PetScaleResult" + } + } + }, + { + "name": "pet.select", + "summary": "Adopt a pet: install (if needed) + activate; writes display.pet.* to config.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PetSlugParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PetSlugResult" + } + } + }, + { + "name": "pet.thumb", + "summary": "Idle-frame PNG data URI for the picker (desktop CSP breaks CDN ).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PetThumbParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PetThumbResult" + } + } + }, + { + "name": "ping", + "summary": "Cheapest liveness probe; answered on the WS reader thread even while every agent is mid-turn.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PingParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PingResult" + } + } + }, + { + "name": "plugins.list", + "summary": "Loaded plugin manager entries (legacy flat view); the Plugins Hub uses plugins.manage list.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PluginsListParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PluginsListResult" + } + } + }, + { + "name": "plugins.manage", + "summary": "Plugins Hub backend: list installed plugins, toggle, git-install, re-pin a catalog install, or remove a user install.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PluginsManageParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PluginsManageResult" + } + } + }, + { + "name": "preview.restart", + "summary": "Spawn a hidden agent that brings the desktop preview's dev server back up.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PreviewRestartParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/TaskIdResult" + } + } + }, + { + "name": "process.kill", + "summary": "Kill one background process the caller's session owns and return its output snapshot.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProcessKillParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProcessKillResult" + } + } + }, + { + "name": "process.list", + "summary": "Background processes owned by the caller's session (desktop status stack poll).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProcessListParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProcessListResult" + } + } + }, + { + "name": "process.stop", + "summary": "Kill every background process in the registry (``/stop``), answering the count killed.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProcessStopParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProcessStopResult" + } + } + }, + { + "name": "profiles.configure", + "summary": "Editor Save: apply any subset of a profile's sections and report each one.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfilesConfigureParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProfilesConfigureResult" + } + } + }, + { + "name": "profiles.create", + "summary": "Create a profile (ws twin of POST /api/profiles), mirroring launch credentials by default.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfilesCreateParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProfilesCreateResult" + } + } + }, + { + "name": "profiles.describe", + "summary": "Everything the profile editor shows: soul, model pin, skills, toolsets, MCP servers.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileNameParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProfilesDescribeResult" + } + } + }, + { + "name": "profiles.get_asset", + "summary": "A profile asset as a data URL.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfilesGetAssetParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProfilesGetAssetResult" + } + } + }, + { + "name": "profiles.list", + "summary": "Roster of profiles with previews so a client paints without N follow-up calls.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfilesListParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProfilesListResult" + } + } + }, + { + "name": "profiles.remember_onboarding", + "summary": "Write the onboarding facts into the default profile's user memory and confirm they landed.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfilesRememberOnboardingParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProfilesRememberOnboardingResult" + } + } + }, + { + "name": "profiles.set_asset", + "summary": "Store or clear a profile asset (avatar) atomically.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfilesSetAssetParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProfilesSetAssetResult" + } + } + }, + { + "name": "project.facts", + "summary": "Structured project facts for a cwd so UIs don't re-sniff the workspace.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectFactsParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProjectFactsResult" + } + } + }, + { + "name": "projects.add_folder", + "summary": "Attach a folder to a project (optionally as its primary path).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectsAddFolderParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProjectResult" + } + } + }, + { + "name": "projects.archive", + "summary": "Archive (or with ``restore`` un-archive) a project; answers the full listing.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectsArchiveParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProjectsPayload" + } + } + }, + { + "name": "projects.create", + "summary": "Create a project from a name + folders; duplicate primary paths are refused (5063).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectsCreateParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/OptionalProjectResult" + } + } + }, + { + "name": "projects.delete", + "summary": "Delete a project and its folders; answers the full listing.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectIdParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProjectsPayload" + } + } + }, + { + "name": "projects.discover_repos", + "summary": "Repos for the desktop overview: scanned-from-disk (cached) \u222a session-derived.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectsDiscoverReposParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProjectsDiscoverReposResult" + } + } + }, + { + "name": "projects.for_cwd", + "summary": "Which project (if any) owns a directory, plus the resolved cwd and its git branch.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectsForCwdParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProjectsForCwdResult" + } + } + }, + { + "name": "projects.get", + "summary": "One stored project with its folders.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectIdParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProjectResult" + } + } + }, + { + "name": "projects.list", + "summary": "Every project of the profile (archived included) plus which one is active.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProjectsPayload" + } + } + }, + { + "name": "projects.project_sessions", + "summary": "Fully hydrated lanes for one project, from the same grouping as projects.tree.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectsProjectSessionsParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProjectsProjectSessionsResult" + } + } + }, + { + "name": "projects.record_repos", + "summary": "Persist repo roots found by the client's (desktop-side) scan; return the merged list.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectsRecordReposParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProjectsRecordReposResult" + } + } + }, + { + "name": "projects.remove_folder", + "summary": "Detach a folder from a project.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectFolderParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProjectResult" + } + } + }, + { + "name": "projects.set_active", + "summary": "Switch (or clear) the active project for the profile.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectsSetActiveParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ActiveIdResult" + } + } + }, + { + "name": "projects.set_primary", + "summary": "Make one attached folder the project's primary path.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectFolderParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProjectResult" + } + } + }, + { + "name": "projects.tree", + "summary": "Project \u2192 repo \u2192 lane overview with counts and a few preview sessions per project.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectsTreeParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProjectsTreeResult" + } + } + }, + { + "name": "projects.update", + "summary": "Patch a project's display fields; answers the refreshed project.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProjectsUpdateParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ProjectResult" + } + } + }, + { + "name": "prompt.background", + "summary": "Run a task on a fresh agent in the background; the answer arrives as background.complete.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SideAgentParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/TaskIdResult" + } + } + }, + { + "name": "prompt.btw", + "summary": "Side question over a snapshot of the live conversation; the answer arrives as btw.complete.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SideAgentParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/TaskIdResult" + } + } + }, + { + "name": "prompt.submit", + "summary": "Send a user turn to a live session; busy sessions queue / steer / redirect instead of refusing.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PromptSubmitParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/PromptSubmitResult" + } + } + }, + { + "name": "reload.env", + "summary": "Re-read ~/.hermes/.env (CLI /reload parity); built agents keep their pool until /new.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ReloadEnvParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ReloadEnvResult" + } + } + }, + { + "name": "reload.mcp", + "summary": "Tear down and rediscover MCP servers for every live session (prompt cache is invalidated).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ReloadMcpParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ReloadMcpResult" + } + } + }, + { + "name": "request.answer", + "summary": "Answer an open server\u2192client request from a client that never received the frame.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/RequestAnswerParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/RequestAnswerResult" + } + } + }, + { + "name": "rollback.diff", + "summary": "Diff between a checkpoint and the working tree, with an ANSI rendering sized to the TUI.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/RollbackDiffParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/RollbackDiffResult" + } + } + }, + { + "name": "rollback.list", + "summary": "Checkpoints for the session's cwd; ``enabled: false`` when checkpointing is off.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/RollbackListParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/RollbackListResult" + } + } + }, + { + "name": "rollback.restore", + "summary": "Restore the working tree (or one file) to a checkpoint by hash or 1-based index.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/RollbackRestoreParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/RollbackRestoreResult" + } + } + }, + { + "name": "session.activate", + "summary": "Attach the frontend to a live session without closing the previously focused one.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionActivateParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionActivateResult" + } + } + }, + { + "name": "session.active_list", + "summary": "Live sessions in this process, insertion order (not a DB browser).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionActiveListParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionActiveListResult" + } + } + }, + { + "name": "session.archive", + "summary": "Set/clear archived (soft-hide, messages kept) on a session + lineage; Desktop PATCH parity.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionArchiveParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionArchiveResult" + } + } + }, + { + "name": "session.branch", + "summary": "Fork a live session into a new stored child that shares the parent's history so far.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionBranchParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionBranchResult" + } + } + }, + { + "name": "session.branch_stored", + "summary": "Whole-session branch of a stored parent: the owning backend reads and copies the transcript, which never crosses the wire (a separate method so an older gateway fails loudly, not with an empty branch).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionBranchStoredParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionBranchStoredResult" + } + } + }, + { + "name": "session.branch_whole", + "summary": "session.branch of the whole history without echoing the copied transcript back.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionBranchWholeParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionBranchWholeResult" + } + } + }, + { + "name": "session.close", + "summary": "Tear down a live session (its stored row stays resumable).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionCloseParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionCloseResult" + } + } + }, + { + "name": "session.compress", + "summary": "Manual /compress of an idle session, optionally focused on a topic.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionCompressParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionCompressResult" + } + } + }, + { + "name": "session.context_breakdown", + "summary": "Cursor-style split of the context window by category.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionContextBreakdownParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionContextBreakdownResult" + } + } + }, + { + "name": "session.control", + "summary": "Run one allowlisted goal / loop / subgoal / heartbeat action and return the exact resulting snapshot.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionControlParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionControlResult" + } + } + }, + { + "name": "session.control.read", + "summary": "Stable, allowlisted snapshot of one live session's goal / loop / heartbeat state.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionControlReadParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionControlReadResult" + } + } + }, + { + "name": "session.create", + "summary": "Mint a live session (agent builds after the reply); a DB row appears on the first prompt unless seeded.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionCreateParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionCreateResult" + } + } + }, + { + "name": "session.cwd.set", + "summary": "Change a live, idle session's working directory.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionCwdSetParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionCwdSetResult" + } + } + }, + { + "name": "session.delete", + "summary": "Delete a stored session + transcripts; refused while it is live here.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionDeleteParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionDeleteResult" + } + } + }, + { + "name": "session.events.since", + "summary": "Replay events after a seq watermark on WS reconnect; truncated means refetch state.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionEventsSinceParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionEventsSinceResult" + } + } + }, + { + "name": "session.events.stats", + "summary": "Replay-buffer occupancy telemetry (ops/debug).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionEventsStatsParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionEventsStatsResult" + } + } + }, + { + "name": "session.foreign.import", + "summary": "Import a foreign session into this profile's history (idempotent per origin).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionForeignIdParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionForeignImportResult" + } + } + }, + { + "name": "session.foreign.list", + "summary": "One page of Claude Code / Codex sessions found on the serving backend.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionForeignListParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionForeignListResult" + } + } + }, + { + "name": "session.foreign.preview", + "summary": "Preview a foreign session's tail before importing it.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionForeignIdParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionForeignPreviewResult" + } + } + }, + { + "name": "session.history", + "summary": "The durable display transcript (ancestors included, row ids attached).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionHistoryParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionHistoryResult" + } + } + }, + { + "name": "session.interrupt", + "summary": "Stop the running turn (and streaming TTS); retires the crash-recovery marker.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionInterruptParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionInterruptResult" + } + } + }, + { + "name": "session.list", + "summary": "Human-facing stored sessions, most recent first (sub-agent / kanban sources denied).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionListParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionListResult" + } + } + }, + { + "name": "session.most_recent", + "summary": "Most recent human-facing session; errors fold into a null session_id.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionMostRecentParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionMostRecentResult" + } + } + }, + { + "name": "session.redirect", + "summary": "Redirect the active turn (queued for the next turn while the agent is still building).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionCorrectionParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionCorrectionResult" + } + } + }, + { + "name": "session.resume", + "summary": "Attach to a stored session: reuse it if live here, else lazy / deferred / cold / eager rebuild.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionResumeParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionResumeResult" + } + } + }, + { + "name": "session.save", + "summary": "Export the transcript to ~/.hermes/sessions/saved (classic /save).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionSaveParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionSaveResult" + } + } + }, + { + "name": "session.set_hidden", + "summary": "Set/clear hidden (out of the default list, still resumable by its owner) on a session + lineage.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionSetHiddenParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionSetHiddenResult" + } + } + }, + { + "name": "session.status", + "summary": "Rendered /status text for the session.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionStatusParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionStatusResult" + } + } + }, + { + "name": "session.steer", + "summary": "Inject text into the next tool result without interrupting the turn.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionCorrectionParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionCorrectionResult" + } + } + }, + { + "name": "session.title", + "summary": "Read or set a live session's title; a title set before the row exists is queued.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionTitleParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionTitleResult" + } + } + }, + { + "name": "session.undo", + "summary": "Drop the last user turn (and everything after it) from an idle session.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionUndoParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionUndoResult" + } + } + }, + { + "name": "session.usage", + "summary": "Token / context / cost counters for the session (+ Nous credit lines when available).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionUsageParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionUsageResult" + } + } + }, + { + "name": "session.workspace.move", + "summary": "Re-home a stored session's workspace; git identity is replaced and a live agent follows.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionWorkspaceMoveParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SessionWorkspaceMoveResult" + } + } + }, + { + "name": "setup.runtime_check", + "summary": "Strict provider check through the same runtime resolution the agent uses on session creation.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SetupRuntimeCheckParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SetupRuntimeCheckResult" + } + } + }, + { + "name": "setup.status", + "summary": "Loose provider check: is ANY provider auth state discoverable for the (launch or named) profile.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SetupStatusResult" + } + } + }, + { + "name": "shared_metrics.desktop_daily", + "summary": "Record one finished Desktop day (mode use + button presses); recorded=false keeps it for a retry.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SharedMetricsDesktopDailyParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SharedMetricsDesktopDailyResult" + } + } + }, + { + "name": "shared_metrics.desktop_dislike", + "summary": "Count one Desktop dislike signal (fire-and-forget; capped per signal per day; a no-op unless on).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SharedMetricsDesktopDislikeParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/OkResult" + } + } + }, + { + "name": "shared_metrics.desktop_feature_use", + "summary": "Count one Desktop area used today (fire-and-forget; once per area per UTC day; a no-op unless on).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SharedMetricsDesktopFeatureUseParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/OkResult" + } + } + }, + { + "name": "shared_metrics.desktop_friction", + "summary": "Count one Desktop friction event (fire-and-forget; capped per day; a no-op unless on).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SharedMetricsDesktopFrictionParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/OkResult" + } + } + }, + { + "name": "shared_metrics.desktop_onboarding", + "summary": "Count one Desktop first-run step transition (fire-and-forget; once per step+event; a no-op unless on).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SharedMetricsDesktopOnboardingParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/OkResult" + } + } + }, + { + "name": "shared_metrics.set", + "summary": "Write both shared-metrics opt-ins at once (send requires collection) and reconcile consent windows.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SharedMetricsSetParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SharedMetricsConsentResult" + } + } + }, + { + "name": "shared_metrics.slash_command", + "summary": "Count one user-typed slash command (fire-and-forget; a no-op unless shared metrics are on).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SharedMetricsSlashCommandParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SharedMetricsSlashCommandResult" + } + } + }, + { + "name": "shared_metrics.startup_latency", + "summary": "Record one client launch-to-ready latency (fire-and-forget; a no-op unless shared metrics are on).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SharedMetricsStartupLatencyParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SharedMetricsStartupLatencyResult" + } + } + }, + { + "name": "shared_metrics.status", + "summary": "Pure read of the focused profile's shared-metrics opt-ins (collection, upload, answered).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SharedMetricsConsentResult" + } + } + }, + { + "name": "shared_metrics.update_run", + "summary": "Count one Desktop packaged self-update outcome (fire-and-forget; a no-op unless shared metrics are on).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SharedMetricsUpdateRunParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SharedMetricsUpdateRunResult" + } + } + }, + { + "name": "shell.exec", + "summary": "Run a safe (non-dangerous) shell command captured for ``!cmd`` / inline substitution.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ShellExecParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ShellExecResult" + } + } + }, + { + "name": "skills.manage", + "summary": "Skills hub backend: list the profile's skills or search / browse / inspect / install from the hub.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SkillsManageParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SkillsManageResult" + } + } + }, + { + "name": "skills.reload", + "summary": "Re-scan skill dirs; the pre-rendered ``output`` is what /reload-skills prints.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SkillsReloadParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SkillsReloadResult" + } + } + }, + { + "name": "slash.exec", + "summary": "Execute a slash command against the session's slash worker (or a live/plugin shortcut).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SlashExecParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SlashExecResult" + } + } + }, + { + "name": "spawn_tree.list", + "summary": "Saved spawn-tree snapshots, newest first.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SpawnTreeListParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SpawnTreeListResult" + } + } + }, + { + "name": "spawn_tree.load", + "summary": "Read one saved spawn-tree snapshot (path must be under the spawn-trees root).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SpawnTreeLoadParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SpawnTreeLoadResult" + } + } + }, + { + "name": "spawn_tree.save", + "summary": "Persist a finished delegation tree snapshot under the session's spawn-trees dir.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SpawnTreeSaveParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SpawnTreeSaveResult" + } + } + }, + { + "name": "subagent.interrupt", + "summary": "Hard-interrupt one owned child; ``found`` is false when it already finished.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SubagentIdParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SubagentInterruptResult" + } + } + }, + { + "name": "subagent.list", + "summary": "Live children owned by this session (other sessions' children never leak).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SessionParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SubagentListResult" + } + } + }, + { + "name": "subagent.steer", + "summary": "Queue steering text into a live delegated child owned by this session.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SubagentSteerParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SubagentSteerResult" + } + } + }, + { + "name": "subagent.tail", + "summary": "Last 16KB of an owned child's live transcript.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SubagentIdParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SubagentTailResult" + } + } + }, + { + "name": "subscription.change", + "summary": "Schedule a downgrade / same-price change or a period-end cancellation.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SubscriptionChangeParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/BillingPendingChangeResult" + } + } + }, + { + "name": "subscription.preview", + "summary": "Chargeless quote of what a plan change would do (billing:manage).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SubscriptionPreviewParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SubscriptionPreviewResult" + } + } + }, + { + "name": "subscription.resume", + "summary": "Clear a scheduled downgrade / cancellation (re-enables recurring spend).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/BillingPendingChangeResult" + } + } + }, + { + "name": "subscription.state", + "summary": "Current plan, tier catalog and usage for the picker; fail-open when logged out.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SubscriptionStateResult" + } + } + }, + { + "name": "subscription.upgrade", + "summary": "Prorate, charge and flip the plan (billing:manage, idempotent).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SubscriptionUpgradeParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SubscriptionUpgradeResult" + } + } + }, + { + "name": "system.battery", + "summary": "Host battery for the status bar; always resolves, ``available: false`` when unreadable.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SystemBatteryParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/SystemBatteryResult" + } + } + }, + { + "name": "terminal.resize", + "summary": "Record the client's column width for server-side rendering.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/TerminalResizeParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/TerminalResizeResult" + } + } + }, + { + "name": "tools.configure", + "summary": "Persist a toolset / MCP enable-disable change and rebuild the session agent so it takes effect now.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ToolsConfigureParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ToolsConfigureResult" + } + } + }, + { + "name": "tools.list", + "summary": "Every toolset with its resolved tool names, flagged against the session's (or config's) enabled set.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/_SessionScoped" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ToolsetsListResult" + } + } + }, + { + "name": "tools.show", + "summary": "The /tools listing grouped by toolset, including tools deferred behind the tool_search bridge.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/_SessionScoped" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ToolsShowResult" + } + } + }, + { + "name": "toolsets.list", + "summary": "Toolset summaries (no tool names) for the desktop Toolsets tab.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/_SessionScoped" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ToolsetsListResult" + } + } + }, + { + "name": "usage.bars", + "summary": "Two-bar dollar usage view shared by /usage, /topup and /subscription; fail-open to unavailable.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/UsageModel" + } + } + }, + { + "name": "vault.add", + "summary": "Add a login / payment / address item to the local vault.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/VaultAddParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/VaultAddResult" + } + } + }, + { + "name": "vault.list", + "summary": "Metadata-only listing across the local vault and every unlocked password manager.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/VaultListResult" + } + } + }, + { + "name": "vault.lock", + "summary": "Forget a manager's session token (every manager when no name is given).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/VaultLockParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/VaultLockResult" + } + } + }, + { + "name": "vault.remove", + "summary": "Remove a local vault item by id.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/VaultRemoveParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/VaultRemoveResult" + } + } + }, + { + "name": "vault.source.set", + "summary": "Enable or disable an external password manager (disabling also locks it).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/VaultSourceSetParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/VaultSourceSetResult" + } + } + }, + { + "name": "vault.sources", + "summary": "Status of every login source (local vault + detected password managers).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ProfileParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/VaultSourcesResult" + } + } + }, + { + "name": "vault.unlock", + "summary": "Unlock a password manager for this session with its master password.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/VaultUnlockParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/VaultUnlockResult" + } + } + }, + { + "name": "verification.status", + "summary": "Best known verification evidence for a cwd/session; read-only, never runs checks.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/VerificationStatusParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/VerificationStatusResult" + } + } + }, + { + "name": "voice.record", + "summary": "VAD-bounded push-to-talk; the transcript arrives as a voice.transcript event.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/VoiceRecordParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/VoiceRecordResult" + } + } + }, + { + "name": "voice.toggle", + "summary": "/voice parity: report, flip voice mode on/off, or toggle speech output.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/VoiceToggleParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/VoiceToggleResult" + } + } + }, + { + "name": "voice.tts", + "summary": "Speak text through the backend TTS engine (barge-in aware).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/VoiceTtsParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/VoiceTtsResult" + } + } + }, + { + "name": "wake.feed", + "summary": "Push client-captured PCM into the armed detector (mic-less remote backends).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/WakeFeedParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/WakeFeedResult" + } + } + }, + { + "name": "wake.pause", + "summary": "Release the mic (e.g. while the desktop's browser captures audio).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/WakeControlParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/WakePauseResult" + } + } + }, + { + "name": "wake.resume", + "summary": "Reclaim the mic after a pause; no-op if the listener isn't armed.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/WakeControlParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/WakeResumeResult" + } + } + }, + { + "name": "wake.start", + "summary": "Arm the wake-word listener for the calling surface; refusals explain why.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/WakeStartParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/WakeStartResult" + } + } + }, + { + "name": "wake.status", + "summary": "Everything a client needs to draw the wake-word state and decide whether to (re)arm.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/WakeStatusParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/WakeStatusResult" + } + } + }, + { + "name": "wake.stop", + "summary": "Stop this surface's listener; persist also writes wake_word.enabled: false.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/WakeStopParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/WakeStopResult" + } + } + } + ], + "components": { + "schemas": { + "AccountOwner": { + "additionalProperties": false, + "properties": { + "type": { + "const": "account", + "title": "Type", + "type": "string" + } + }, + "required": [ + "type" + ], + "title": "AccountOwner", + "type": "object" + }, + "ActiveIdResult": { + "additionalProperties": false, + "properties": { + "active_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Active Id" + } + }, + "title": "ActiveIdResult", + "type": "object" + }, + "ActiveSubagent": { + "additionalProperties": true, + "description": "One live child from ``tools/delegate_tool_registry.py::list_active_subagents`` (the record\nis extended by the child runner \u2014 ``missed_steer`` etc. \u2014 so it stays open).", + "properties": { + "subagent_id": { + "title": "Subagent Id", + "type": "string" + }, + "parent_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Parent Id" + }, + "depth": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Depth" + }, + "goal": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Goal" + }, + "delegation_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Delegation Id" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" + }, + "started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Started At" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" + }, + "tool_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tool Count" + }, + "owner_agent_session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Owner Agent Session Id" + } + }, + "required": [ + "subagent_id" + ], + "title": "ActiveSubagent", + "type": "object" + }, + "AgentPluginRow": { + "additionalProperties": false, + "description": "``methods_tools._plugin_rows`` + ``plugins_cmd_catalog.catalog_row_fields`` provenance.", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "key": { + "title": "Key", + "type": "string" + }, + "version": { + "title": "Version", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "source": { + "title": "Source", + "type": "string" + }, + "status": { + "title": "Status", + "type": "string" + }, + "portable": { + "title": "Portable", + "type": "boolean" + }, + "install_dir": { + "title": "Install Dir", + "type": "string" + }, + "has_desktop_half": { + "title": "Has Desktop Half", + "type": "boolean" + }, + "servers": { + "items": { + "$ref": "#/components/schemas/PluginServerRow" + }, + "title": "Servers", + "type": "array" + }, + "catalog_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Catalog Name" + }, + "catalog_tier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Catalog Tier" + }, + "installed_sha": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Installed Sha" + }, + "catalog_sha": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Catalog Sha" + }, + "catalog_version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Catalog Version" + }, + "update_available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Update Available" + }, + "pinned_sha": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pinned Sha" + }, + "settings_schema": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/PluginSettingField" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Settings Schema" + } + }, + "required": [ + "name", + "key", + "version", + "description", + "source", + "status", + "portable", + "install_dir", + "has_desktop_half", + "servers" + ], + "title": "AgentPluginRow", + "type": "object" + }, + "AgentProcessRow": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "command": { + "title": "Command", + "type": "string" + }, + "status": { + "title": "Status", + "type": "string" + }, + "uptime": { + "title": "Uptime", + "type": "integer" + } + }, + "required": [ + "session_id", + "command", + "status", + "uptime" + ], + "title": "AgentProcessRow", + "type": "object" + }, + "AgentsListParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "AgentsListParams", + "type": "object" + }, + "AgentsListResult": { + "additionalProperties": false, + "properties": { + "processes": { + "items": { + "$ref": "#/components/schemas/AgentProcessRow" + }, + "title": "Processes", + "type": "array" + } + }, + "title": "AgentsListResult", + "type": "object" + }, + "ApprovalChoice": { + "enum": [ + "once", + "session", + "always", + "deny" + ], + "title": "ApprovalChoice", + "type": "string" + }, + "ApprovalPendingParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id" + ], + "title": "ApprovalPendingParams", + "type": "object" + }, + "ApprovalPendingResult": { + "additionalProperties": false, + "properties": { + "approvals": { + "items": { + "$ref": "#/components/schemas/PendingApproval" + }, + "title": "Approvals", + "type": "array" + } + }, + "required": [ + "approvals" + ], + "title": "ApprovalPendingResult", + "type": "object" + }, + "ApprovalReceivedParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "request_id": { + "title": "Request Id", + "type": "string" + } + }, + "required": [ + "session_id", + "request_id" + ], + "title": "ApprovalReceivedParams", + "type": "object" + }, + "ApprovalReceivedResult": { + "additionalProperties": false, + "properties": { + "acknowledged": { + "title": "Acknowledged", + "type": "boolean" + } + }, + "required": [ + "acknowledged" + ], + "title": "ApprovalReceivedResult", + "type": "object" + }, + "ApprovalRequestParams": { + "additionalProperties": true, + "description": "``tui_gateway/server.py::_approval_request_payload`` \u2014 the command is redacted server-side.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "request_id": { + "title": "Request Id", + "type": "string" + }, + "command": { + "default": "", + "title": "Command", + "type": "string" + }, + "description": { + "default": "", + "title": "Description", + "type": "string" + }, + "choices": { + "items": { + "$ref": "#/components/schemas/ApprovalChoice" + }, + "title": "Choices", + "type": "array" + }, + "allow_permanent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Allow Permanent" + }, + "allow_session": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Allow Session" + }, + "smart_denied": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Smart Denied" + }, + "tool_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tool Name" + }, + "gateway_session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Gateway Session Id" + } + }, + "required": [ + "session_id", + "request_id" + ], + "title": "ApprovalRequestParams", + "type": "object" + }, + "ApprovalRespondParams": { + "additionalProperties": false, + "description": "``choice`` is one of the offered ``approval`` choices (once / session / always / deny); ``all``\nresolves every pending approval, ``request_id`` a specific one, neither the oldest.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "choice": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Choice" + }, + "all": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "All" + }, + "request_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Request Id" + } + }, + "required": [ + "session_id" + ], + "title": "ApprovalRespondParams", + "type": "object" + }, + "ApprovalRespondResult": { + "additionalProperties": false, + "properties": { + "resolved": { + "title": "Resolved", + "type": "integer" + } + }, + "required": [ + "resolved" + ], + "title": "ApprovalRespondResult", + "type": "object" + }, + "ApprovalResult": { + "additionalProperties": false, + "properties": { + "choice": { + "$ref": "#/components/schemas/ApprovalChoice" + }, + "all": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "All" + } + }, + "required": [ + "choice" + ], + "title": "ApprovalResult", + "type": "object" + }, + "ArgumentMode": { + "enum": [ + "options", + "text", + "mixed" + ], + "title": "ArgumentMode", + "type": "string" + }, + "AttachedImageResult": { + "additionalProperties": false, + "description": "``methods_prompt.py::_attached_image_result``: the image is queued for the next turn.", + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "width": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Width" + }, + "height": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Height" + }, + "token_estimate": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Token Estimate" + }, + "attached": { + "title": "Attached", + "type": "boolean" + }, + "path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Path" + }, + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Count" + }, + "remainder": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Remainder" + }, + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Text" + }, + "bytes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Bytes" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + } + }, + "required": [ + "attached" + ], + "title": "AttachedImageResult", + "type": "object" + }, + "AutoContinue": { + "additionalProperties": false, + "description": "A crash-interrupted turn was scheduled to continue right after this resume.", + "properties": { + "attempt": { + "title": "Attempt", + "type": "integer" + }, + "interrupted_at": { + "title": "Interrupted At", + "type": "number" + } + }, + "required": [ + "attempt", + "interrupted_at" + ], + "title": "AutoContinue", + "type": "object" + }, + "AutoReloadCardKind": { + "enum": [ + "canonical", + "distinct", + "none" + ], + "title": "AutoReloadCardKind", + "type": "string" + }, + "BatteryCategory": { + "description": "``agent/battery.py::battery_category`` colour bucket.", + "enum": [ + "good", + "warn", + "bad", + "critical", + "dim" + ], + "title": "BatteryCategory", + "type": "string" + }, + "BillingAutoReload": { + "additionalProperties": false, + "properties": { + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "threshold_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Threshold Usd" + }, + "threshold_display": { + "title": "Threshold Display", + "type": "string" + }, + "reload_to_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reload To Usd" + }, + "reload_to_display": { + "title": "Reload To Display", + "type": "string" + }, + "card": { + "anyOf": [ + { + "$ref": "#/components/schemas/BillingAutoReloadCard" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "enabled", + "threshold_display", + "reload_to_display" + ], + "title": "BillingAutoReload", + "type": "object" + }, + "BillingAutoReloadCard": { + "additionalProperties": false, + "description": "Only ``distinct`` carries the payment-method identity.", + "properties": { + "kind": { + "$ref": "#/components/schemas/AutoReloadCardKind" + }, + "payment_method_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Payment Method Id" + }, + "brand": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Brand" + }, + "last4": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last4" + } + }, + "required": [ + "kind" + ], + "title": "BillingAutoReloadCard", + "type": "object" + }, + "BillingAutoReloadParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "enabled": { + "default": false, + "title": "Enabled", + "type": "boolean" + }, + "threshold": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Threshold" + }, + "top_up_amount": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Top Up Amount" + } + }, + "title": "BillingAutoReloadParams", + "type": "object" + }, + "BillingBlock": { + "additionalProperties": false, + "description": "``agent/billing_links.py::BillingBlock.to_dict`` (+ ``unverified`` from conversation_loop).", + "properties": { + "provider": { + "title": "Provider", + "type": "string" + }, + "provider_label": { + "title": "Provider Label", + "type": "string" + }, + "model": { + "title": "Model", + "type": "string" + }, + "billing_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Billing Url" + }, + "is_nous": { + "title": "Is Nous", + "type": "boolean" + }, + "message": { + "title": "Message", + "type": "string" + }, + "unverified": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unverified" + } + }, + "required": [ + "provider", + "provider_label", + "model", + "billing_url", + "is_nous", + "message" + ], + "title": "BillingBlock", + "type": "object" + }, + "BillingCardInfo": { + "additionalProperties": false, + "properties": { + "brand": { + "title": "Brand", + "type": "string" + }, + "last4": { + "title": "Last4", + "type": "string" + }, + "masked": { + "title": "Masked", + "type": "string" + }, + "display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display" + }, + "resolved_via": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Resolved Via" + } + }, + "required": [ + "brand", + "last4", + "masked" + ], + "title": "BillingCardInfo", + "type": "object" + }, + "BillingChargeParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "amount_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Amount Usd" + }, + "idempotency_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Idempotency Key" + } + }, + "title": "BillingChargeParams", + "type": "object" + }, + "BillingChargeResult": { + "additionalProperties": false, + "description": "``202 {chargeId}`` \u2014 money is not confirmed yet; poll ``billing.charge_status``.", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + }, + "portal_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Portal Url" + }, + "retry_after": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retry After" + }, + "payload": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Payload" + }, + "actor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Actor" + }, + "code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Code" + }, + "recovery": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Recovery" + }, + "charge_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Charge Id" + }, + "idempotency_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Idempotency Key" + } + }, + "required": [ + "ok" + ], + "title": "BillingChargeResult", + "type": "object" + }, + "BillingChargeStatusParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "charge_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Charge Id" + } + }, + "title": "BillingChargeStatusParams", + "type": "object" + }, + "BillingChargeStatusResult": { + "additionalProperties": false, + "description": "Single status read (pending | settled | failed); the caller drives the poll cadence.", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + }, + "portal_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Portal Url" + }, + "retry_after": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retry After" + }, + "payload": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Payload" + }, + "actor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Actor" + }, + "code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Code" + }, + "recovery": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Recovery" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" + }, + "amount_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Amount Usd" + }, + "settled_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Settled At" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + } + }, + "required": [ + "ok" + ], + "title": "BillingChargeStatusResult", + "type": "object" + }, + "BillingMonthlyCap": { + "additionalProperties": false, + "properties": { + "limit_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Limit Usd" + }, + "limit_display": { + "title": "Limit Display", + "type": "string" + }, + "spent_this_month_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Spent This Month Usd" + }, + "spent_display": { + "title": "Spent Display", + "type": "string" + }, + "is_default_ceiling": { + "title": "Is Default Ceiling", + "type": "boolean" + } + }, + "required": [ + "limit_display", + "spent_display", + "is_default_ceiling" + ], + "title": "BillingMonthlyCap", + "type": "object" + }, + "BillingMutationResult": { + "additionalProperties": false, + "description": "A write with no success payload beyond ``ok``.", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + }, + "portal_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Portal Url" + }, + "retry_after": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retry After" + }, + "payload": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Payload" + }, + "actor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Actor" + }, + "code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Code" + }, + "recovery": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Recovery" + } + }, + "required": [ + "ok" + ], + "title": "BillingMutationResult", + "type": "object" + }, + "BillingPaymentMethod": { + "additionalProperties": false, + "description": "``_serialize_payment_method``: each kind emits only its own fields (a ``card`` never carries\n``email``; ``unknown`` carries what the server called it in ``raw_kind``).", + "properties": { + "kind": { + "$ref": "#/components/schemas/PaymentMethodKind" + }, + "brand": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Brand" + }, + "last4": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last4" + }, + "wallet": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Wallet" + }, + "email": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Email" + }, + "raw_kind": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Raw Kind" + }, + "resolved_via": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Resolved Via" + } + }, + "required": [ + "kind" + ], + "title": "BillingPaymentMethod", + "type": "object" + }, + "BillingPendingChangeResult": { + "additionalProperties": false, + "description": "``_billing_pending_change``: ``message`` + the raw NAS body in ``payload`` on success.", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + }, + "portal_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Portal Url" + }, + "retry_after": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retry After" + }, + "payload": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Payload" + }, + "actor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Actor" + }, + "code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Code" + }, + "recovery": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Recovery" + } + }, + "required": [ + "ok" + ], + "title": "BillingPendingChangeResult", + "type": "object" + }, + "BillingStateResult": { + "additionalProperties": false, + "description": "``_serialize_billing_state`` (money as strings); the ``except`` fallback emits only\n``ok / logged_in / free_tier_account / error``, so everything else is optional.", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "logged_in": { + "title": "Logged In", + "type": "boolean" + }, + "free_tier_account": { + "default": false, + "title": "Free Tier Account", + "type": "boolean" + }, + "free_tier_model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Free Tier Model" + }, + "org_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Org Name" + }, + "org_slug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Org Slug" + }, + "role": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Role" + }, + "is_admin": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Is Admin" + }, + "can_change_plan": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Can Change Plan" + }, + "can_charge": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Can Charge" + }, + "balance_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Balance Usd" + }, + "balance_display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Balance Display" + }, + "cli_billing_enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cli Billing Enabled" + }, + "charge_presets": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Charge Presets" + }, + "charge_presets_display": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Charge Presets Display" + }, + "min_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Min Usd" + }, + "max_usd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Max Usd" + }, + "card": { + "anyOf": [ + { + "$ref": "#/components/schemas/BillingCardInfo" + }, + { + "type": "null" + } + ], + "default": null + }, + "payment_method": { + "anyOf": [ + { + "$ref": "#/components/schemas/BillingPaymentMethod" + }, + { + "type": "null" + } + ], + "default": null + }, + "monthly_cap": { + "anyOf": [ + { + "$ref": "#/components/schemas/BillingMonthlyCap" + }, + { + "type": "null" + } + ], + "default": null + }, + "auto_reload": { + "anyOf": [ + { + "$ref": "#/components/schemas/BillingAutoReload" + }, + { + "type": "null" + } + ], + "default": null + }, + "portal_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Portal Url" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "usage": { + "anyOf": [ + { + "$ref": "#/components/schemas/UsageModel" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "ok", + "logged_in" + ], + "title": "BillingStateResult", + "type": "object" + }, + "BillingStepUpParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + } + }, + "title": "BillingStepUpParams", + "type": "object" + }, + "BillingStepUpResult": { + "additionalProperties": false, + "description": "``granted`` false when the server downscopes (also on every error envelope).", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + }, + "portal_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Portal Url" + }, + "retry_after": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retry After" + }, + "payload": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Payload" + }, + "actor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Actor" + }, + "code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Code" + }, + "recovery": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Recovery" + }, + "granted": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Granted" + } + }, + "required": [ + "ok" + ], + "title": "BillingStepUpResult", + "type": "object" + }, + "BillingStepUpVerificationPayload": { + "additionalProperties": false, + "description": "``methods_session`` billing.step_up on_verification.", + "properties": { + "verification_url": { + "title": "Verification Url", + "type": "string" + }, + "user_code": { + "title": "User Code", + "type": "string" + } + }, + "required": [ + "verification_url", + "user_code" + ], + "title": "BillingStepUpVerificationPayload", + "type": "object" + }, + "BotRelayDeliverParams": { + "additionalProperties": false, + "description": "``profile`` here is the TARGET profile on this gateway (also what the desktop route wrapper adds).", + "properties": { + "profile": { + "title": "Profile", + "type": "string" + }, + "message": { + "title": "Message", + "type": "string" + }, + "from_profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "From Profile" + }, + "from_handle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "From Handle" + }, + "from_connection": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "From Connection" + } + }, + "required": [ + "profile", + "message" + ], + "title": "BotRelayDeliverParams", + "type": "object" + }, + "BotRelayDeliverResult": { + "additionalProperties": false, + "properties": { + "reply": { + "title": "Reply", + "type": "string" + } + }, + "required": [ + "reply" + ], + "title": "BotRelayDeliverResult", + "type": "object" + }, + "BotRelayOutboxDrainParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "BotRelayOutboxDrainParams", + "type": "object" + }, + "BotRelayOutboxDrainResult": { + "additionalProperties": false, + "properties": { + "envelopes": { + "items": { + "$ref": "#/components/schemas/RelayEnvelope" + }, + "title": "Envelopes", + "type": "array" + } + }, + "required": [ + "envelopes" + ], + "title": "BotRelayOutboxDrainResult", + "type": "object" + }, + "BotRelayReplyParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "id": { + "title": "Id", + "type": "string" + }, + "reply": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reply" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + } + }, + "required": [ + "id" + ], + "title": "BotRelayReplyParams", + "type": "object" + }, + "BotRelayRosterSyncParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "agents": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/RelayAgentRow" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Agents" + } + }, + "title": "BotRelayRosterSyncParams", + "type": "object" + }, + "BotRelayRosterSyncResult": { + "additionalProperties": false, + "properties": { + "count": { + "title": "Count", + "type": "integer" + } + }, + "required": [ + "count" + ], + "title": "BotRelayRosterSyncResult", + "type": "object" + }, + "BrowserAction": { + "enum": [ + "status", + "connect", + "disconnect" + ], + "title": "BrowserAction", + "type": "string" + }, + "BrowserControllerCancelPayload": { + "additionalProperties": false, + "description": "``gateway/browser_control_broker.py::_cancel_frame``.", + "properties": { + "command_id": { + "title": "Command Id", + "type": "string" + }, + "tool_call_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tool Call Id" + } + }, + "required": [ + "command_id" + ], + "title": "BrowserControllerCancelPayload", + "type": "object" + }, + "BrowserControllerCommandPayload": { + "additionalProperties": false, + "description": "``gateway/browser_control_broker.py`` FRAME_COMMAND params.", + "properties": { + "command_id": { + "title": "Command Id", + "type": "string" + }, + "action": { + "title": "Action", + "type": "string" + }, + "arguments": { + "additionalProperties": true, + "title": "Arguments", + "type": "object" + }, + "controller_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Controller Id" + }, + "browser_profile_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Browser Profile Id" + }, + "tool_call_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tool Call Id" + } + }, + "required": [ + "command_id", + "action", + "arguments" + ], + "title": "BrowserControllerCommandPayload", + "type": "object" + }, + "BrowserControllerDetachResult": { + "additionalProperties": false, + "properties": { + "detached": { + "default": true, + "title": "Detached", + "type": "boolean" + } + }, + "title": "BrowserControllerDetachResult", + "type": "object" + }, + "BrowserControllerParams": { + "additionalProperties": false, + "description": "Every controller call names the session the controller is attached to.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + } + }, + "required": [ + "session_id" + ], + "title": "BrowserControllerParams", + "type": "object" + }, + "BrowserControllerRegisterParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "controller_id": { + "title": "Controller Id", + "type": "string" + }, + "browser_profile_id": { + "title": "Browser Profile Id", + "type": "string" + }, + "capabilities": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Capabilities" + }, + "protocol_version": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Protocol Version" + }, + "principal_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Principal Id" + } + }, + "required": [ + "session_id", + "controller_id", + "browser_profile_id" + ], + "title": "BrowserControllerRegisterParams", + "type": "object" + }, + "BrowserControllerRegisterResult": { + "additionalProperties": false, + "properties": { + "scope": { + "$ref": "#/components/schemas/ControllerScope" + } + }, + "required": [ + "scope" + ], + "title": "BrowserControllerRegisterResult", + "type": "object" + }, + "BrowserControllerResultParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "command_id": { + "title": "Command Id", + "type": "string" + }, + "ok": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Ok" + }, + "result": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Result" + }, + "error": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + } + }, + "required": [ + "session_id", + "command_id" + ], + "title": "BrowserControllerResultParams", + "type": "object" + }, + "BrowserControllerResultResult": { + "additionalProperties": false, + "properties": { + "accepted": { + "title": "Accepted", + "type": "boolean" + } + }, + "required": [ + "accepted" + ], + "title": "BrowserControllerResultResult", + "type": "object" + }, + "BrowserManageParams": { + "additionalProperties": false, + "properties": { + "action": { + "$ref": "#/components/schemas/BrowserAction", + "default": "status" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Url" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "BrowserManageParams", + "type": "object" + }, + "BrowserManageResult": { + "additionalProperties": false, + "properties": { + "connected": { + "title": "Connected", + "type": "boolean" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Url" + }, + "messages": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Messages" + } + }, + "required": [ + "connected" + ], + "title": "BrowserManageResult", + "type": "object" + }, + "BrowserProgressPayload": { + "additionalProperties": false, + "description": "``methods_browser`` announce(); ``level``: info | warn | error.", + "properties": { + "message": { + "title": "Message", + "type": "string" + }, + "level": { + "title": "Level", + "type": "string" + } + }, + "required": [ + "message", + "level" + ], + "title": "BrowserProgressPayload", + "type": "object" + }, + "CapabilityEntry": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "enabled": { + "default": true, + "title": "Enabled", + "type": "boolean" + } + }, + "required": [ + "name" + ], + "title": "CapabilityEntry", + "type": "object" + }, + "CatalogAppState": { + "description": "The desktop app a catalog plugin drives, from its ``hermes_platform`` declaration.", + "enum": [ + "present", + "missing_app", + "app_not_running", + "unknown" + ], + "title": "CatalogAppState", + "type": "string" + }, + "CatalogScan": { + "additionalProperties": false, + "description": "The catalog's security scan of the pinned commit; read-only on the card.", + "properties": { + "status": { + "$ref": "#/components/schemas/CatalogScanStatus" + }, + "summary": { + "title": "Summary", + "type": "string" + } + }, + "required": [ + "status", + "summary" + ], + "title": "CatalogScan", + "type": "object" + }, + "CatalogScanStatus": { + "enum": [ + "passed", + "warnings", + "failed" + ], + "title": "CatalogScanStatus", + "type": "string" + }, + "CatalogTier": { + "enum": [ + "official", + "community" + ], + "title": "CatalogTier", + "type": "string" + }, + "ChangeSignalPayload": { + "additionalProperties": true, + "description": "``change_watcher._CHANGE_WATCHES`` payload fn \u2014 ``{}`` for every watch except pet.changed.", + "properties": {}, + "title": "ChangeSignalPayload", + "type": "object" + }, + "ClarifyLockParams": { + "additionalProperties": false, + "properties": { + "request_id": { + "title": "Request Id", + "type": "string" + }, + "question_id": { + "title": "Question Id", + "type": "string" + }, + "answer": { + "default": "", + "title": "Answer" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "request_id", + "question_id" + ], + "title": "ClarifyLockParams", + "type": "object" + }, + "ClarifyLockResult": { + "additionalProperties": false, + "description": "``remaining`` lists the qids still unanswered; the lock that empties it resolves the request.\n``expired``: the wait already ended (timeout / cancel) \u2014 not an error.", + "properties": { + "status": { + "$ref": "#/components/schemas/ClarifyLockStatus" + }, + "remaining": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Remaining" + } + }, + "required": [ + "status" + ], + "title": "ClarifyLockResult", + "type": "object" + }, + "ClarifyLockStatus": { + "enum": [ + "ok", + "expired" + ], + "title": "ClarifyLockStatus", + "type": "string" + }, + "ClarifyQuestion": { + "additionalProperties": false, + "properties": { + "qid": { + "title": "Qid", + "type": "string" + }, + "question": { + "title": "Question", + "type": "string" + }, + "choices": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Choices" + }, + "multi_select": { + "default": false, + "title": "Multi Select", + "type": "boolean" + } + }, + "required": [ + "qid", + "question" + ], + "title": "ClarifyQuestion", + "type": "object" + }, + "ClarifyRequestParams": { + "additionalProperties": false, + "description": "Single question: ``question`` / ``choices`` (/ ``multi_select``); batch: ``questions``.\n``answers`` rides only on a reconnect replay (locks the server already accepted).", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "question": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Question" + }, + "choices": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Choices" + }, + "multi_select": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Multi Select" + }, + "questions": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ClarifyQuestion" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Questions" + }, + "answers": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Answers" + } + }, + "required": [ + "session_id" + ], + "title": "ClarifyRequestParams", + "type": "object" + }, + "ClarifyResult": { + "additionalProperties": false, + "description": "Single: ``{answer}`` ('' = skip). Batch: ``{answers}`` for the whole set (early locks go through\nthe ``clarify.lock`` RPC); a response with neither is cancel-all.", + "properties": { + "answer": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Answer" + }, + "answers": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Answers" + } + }, + "title": "ClarifyResult", + "type": "object" + }, + "CliExecParams": { + "additionalProperties": false, + "properties": { + "argv": { + "items": { + "type": "string" + }, + "title": "Argv", + "type": "array" + }, + "timeout": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Timeout" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "argv" + ], + "title": "CliExecParams", + "type": "object" + }, + "CliExecResult": { + "additionalProperties": false, + "properties": { + "blocked": { + "title": "Blocked", + "type": "boolean" + }, + "code": { + "title": "Code", + "type": "integer" + }, + "output": { + "title": "Output", + "type": "string" + }, + "hint": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Hint" + } + }, + "required": [ + "blocked", + "code", + "output" + ], + "title": "CliExecResult", + "type": "object" + }, + "ClientCapabilitiesParams": { + "additionalProperties": false, + "properties": { + "server_requests": { + "default": false, + "title": "Server Requests", + "type": "boolean" + } + }, + "title": "ClientCapabilitiesParams", + "type": "object" + }, + "ClientCapabilitiesResult": { + "additionalProperties": false, + "properties": { + "server_requests": { + "items": { + "type": "string" + }, + "title": "Server Requests", + "type": "array" + }, + "declines_not_shown": { + "default": false, + "title": "Declines Not Shown", + "type": "boolean" + } + }, + "required": [ + "server_requests" + ], + "title": "ClientCapabilitiesResult", + "type": "object" + }, + "ClipboardPasteParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id" + ], + "title": "ClipboardPasteParams", + "type": "object" + }, + "CommandCatalogMeta": { + "additionalProperties": false, + "properties": { + "argument_mode": { + "anyOf": [ + { + "$ref": "#/components/schemas/ArgumentMode" + }, + { + "type": "null" + } + ], + "default": null + }, + "desktop": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Desktop" + } + }, + "title": "CommandCatalogMeta", + "type": "object" + }, + "CommandCategory": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "pairs": { + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Pairs", + "type": "array" + } + }, + "required": [ + "name" + ], + "title": "CommandCategory", + "type": "object" + }, + "CommandDispatchParams": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "arg": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Arg" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "name" + ], + "title": "CommandDispatchParams", + "type": "object" + }, + "CommandDispatchResult": { + "additionalProperties": false, + "description": "One structured directive: ``exec``/``plugin`` carry ``output``; ``alias`` a ``target``;\n``send``/``prefill``/``skill`` a ``message`` (UIs render ``display``, never ``message``).", + "properties": { + "type": { + "$ref": "#/components/schemas/DispatchType" + }, + "output": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Output" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Target" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + }, + "notice": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Notice" + }, + "display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" + } + }, + "required": [ + "type" + ], + "title": "CommandDispatchResult", + "type": "object" + }, + "CommandResolveParams": { + "additionalProperties": false, + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "CommandResolveParams", + "type": "object" + }, + "CommandResolveResult": { + "additionalProperties": false, + "properties": { + "canonical": { + "title": "Canonical", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "category": { + "title": "Category", + "type": "string" + } + }, + "required": [ + "canonical", + "description", + "category" + ], + "title": "CommandResolveResult", + "type": "object" + }, + "CommandsCatalogParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "CommandsCatalogParams", + "type": "object" + }, + "CommandsCatalogResult": { + "additionalProperties": false, + "properties": { + "pairs": { + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Pairs", + "type": "array" + }, + "sub": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Sub", + "type": "object" + }, + "canon": { + "additionalProperties": { + "type": "string" + }, + "title": "Canon", + "type": "object" + }, + "commands": { + "additionalProperties": { + "$ref": "#/components/schemas/CommandCatalogMeta" + }, + "title": "Commands", + "type": "object" + }, + "categories": { + "items": { + "$ref": "#/components/schemas/CommandCategory" + }, + "title": "Categories", + "type": "array" + }, + "skills": { + "additionalProperties": { + "$ref": "#/components/schemas/SkillCatalogEntry" + }, + "title": "Skills", + "type": "object" + }, + "skill_count": { + "default": 0, + "title": "Skill Count", + "type": "integer" + }, + "warning": { + "default": "", + "title": "Warning", + "type": "string" + } + }, + "title": "CommandsCatalogResult", + "type": "object" + }, + "CompletePathParams": { + "additionalProperties": false, + "description": "``word`` is the token under the cursor (``@`` prefix = context reference); ``cwd`` /\n``session_id`` pick the directory the listing resolves against.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "word": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Word" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + } + }, + "title": "CompletePathParams", + "type": "object" + }, + "CompleteSlashParams": { + "additionalProperties": false, + "description": "``session_id`` binds skill completions to that session's profile and workspace (project skills);\n``profile`` scopes a session-less request (a new-chat draft).", + "properties": { + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Text" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "CompleteSlashParams", + "type": "object" + }, + "CompleteSlashResult": { + "additionalProperties": false, + "description": "``replace_from`` is the column the accepted item replaces from.", + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/CompletionItem" + }, + "title": "Items", + "type": "array" + }, + "replace_from": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Replace From" + } + }, + "title": "CompleteSlashResult", + "type": "object" + }, + "CompletionItem": { + "additionalProperties": false, + "description": "One popover row; ``kind`` rides only on slash completions (command vs skill).", + "properties": { + "text": { + "title": "Text", + "type": "string" + }, + "display": { + "default": "", + "title": "Display", + "type": "string" + }, + "meta": { + "default": "", + "title": "Meta", + "type": "string" + }, + "kind": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kind" + } + }, + "required": [ + "text" + ], + "title": "CompletionItem", + "type": "object" + }, + "CompletionItemsResult": { + "additionalProperties": false, + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/CompletionItem" + }, + "title": "Items", + "type": "array" + } + }, + "title": "CompletionItemsResult", + "type": "object" + }, + "CompressionSummary": { + "additionalProperties": true, + "description": "``agent.manual_compression_feedback.summarize_manual_compression``.", + "properties": { + "noop": { + "default": false, + "title": "Noop", + "type": "boolean" + }, + "aborted": { + "default": false, + "title": "Aborted", + "type": "boolean" + }, + "refused_would_grow": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Refused Would Grow" + }, + "fallback_used": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fallback Used" + }, + "headline": { + "default": "", + "title": "Headline", + "type": "string" + }, + "token_line": { + "default": "", + "title": "Token Line", + "type": "string" + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Note" + } + }, + "title": "CompressionSummary", + "type": "object" + }, + "ConfigGetParams": { + "additionalProperties": false, + "description": "``key`` selects one getter from ``_CONFIG_GETTERS``; ``cwd`` feeds the ``project`` getter,\n``session_id`` lets ``reasoning`` / ``fast`` answer with the session's live pin.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "key": { + "title": "Key", + "type": "string" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + } + }, + "required": [ + "key" + ], + "title": "ConfigGetParams", + "type": "object" + }, + "ConfigGetResult": { + "additionalProperties": false, + "description": "Union of every getter's payload: ``value`` for the simple words, ``config`` for ``full``,\n``mtime`` / ``mcp_rev`` for the poller, ``model`` / ``provider`` / ``providers`` for ``provider``,\n``home`` / ``display`` for ``profile``, ``cwd`` / ``branch`` for ``project``, ``prompt``.", + "properties": { + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Value" + }, + "display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display" + }, + "tool_progress": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tool Progress" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider" + }, + "providers": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ConfigProviderRef" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Providers" + }, + "home": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Home" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + }, + "branch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Branch" + }, + "config": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Config" + }, + "prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Prompt" + }, + "mtime": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Mtime" + }, + "mcp_rev": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Mcp Rev" + } + }, + "title": "ConfigGetResult", + "type": "object" + }, + "ConfigProviderRef": { + "additionalProperties": true, + "description": "``hermes_cli/models.py::list_available_providers`` row.", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + }, + "aliases": { + "items": { + "type": "string" + }, + "title": "Aliases", + "type": "array" + }, + "authenticated": { + "default": false, + "title": "Authenticated", + "type": "boolean" + } + }, + "required": [ + "id", + "label" + ], + "title": "ConfigProviderRef", + "type": "object" + }, + "ConfigSection": { + "additionalProperties": false, + "properties": { + "title": { + "title": "Title", + "type": "string" + }, + "rows": { + "items": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Rows", + "type": "array" + } + }, + "required": [ + "title" + ], + "title": "ConfigSection", + "type": "object" + }, + "ConfigSetParams": { + "additionalProperties": false, + "description": "``key`` picks the setter (``_CONFIG_SETTERS``, ``details_mode.
``, display toggles);\n``value`` is the raw word/string the setter normalises (falsy non-strings are reported back in\nthe error). ``scope`` applies to ``yolo`` / ``reasoning``; ``confirm_expensive_model`` to ``model``.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "key": { + "title": "Key", + "type": "string" + }, + "value": { + "default": "", + "title": "Value" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "scope": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Scope" + }, + "confirm_expensive_model": { + "default": false, + "title": "Confirm Expensive Model", + "type": "boolean" + } + }, + "required": [ + "key" + ], + "title": "ConfigSetParams", + "type": "object" + }, + "ConfigSetResult": { + "additionalProperties": false, + "description": "``{key, value}`` plus the setter's extras: model switches add ``warning`` /\n``confirm_required`` / ``confirm_message`` / ``scope`` / ``deferred``; ``focus`` adds\n``tool_progress``; ``cwd`` adds ``cwd`` / ``branch``; ``personality`` adds ``history_reset`` /\n``info``; ``yolo`` reports its ``scope``. ``value`` is a bool only for the display toggles.", + "properties": { + "key": { + "title": "Key", + "type": "string" + }, + "value": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Value" + }, + "warning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Warning" + }, + "confirm_required": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Confirm Required" + }, + "confirm_message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Confirm Message" + }, + "scope": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Scope" + }, + "deferred": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Deferred" + }, + "tool_progress": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tool Progress" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + }, + "branch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Branch" + }, + "history_reset": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "History Reset" + }, + "info": { + "anyOf": [ + { + "$ref": "#/components/schemas/SessionLiveInfo" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "key" + ], + "title": "ConfigSetResult", + "type": "object" + }, + "ConfigShowParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "ConfigShowParams", + "type": "object" + }, + "ConfigShowResult": { + "additionalProperties": true, + "properties": { + "sections": { + "items": { + "$ref": "#/components/schemas/ConfigSection" + }, + "title": "Sections", + "type": "array" + } + }, + "title": "ConfigShowResult", + "type": "object" + }, + "ConnectionActor": { + "description": "``tools/connectors/contract.py::Actor``.", + "enum": [ + "user", + "backend_watcher", + "clock" + ], + "title": "ConnectionActor", + "type": "string" + }, + "ConnectionAnswer": { + "additionalProperties": false, + "description": "The card's answer: per-target outcomes and an optional Continue\n(``settled_by: \"continue\"``). Settlement is derived from target states afterwards.", + "properties": { + "targets": { + "items": { + "$ref": "#/components/schemas/ConnectionAnswerTarget" + }, + "title": "Targets", + "type": "array" + }, + "settled_by": { + "anyOf": [ + { + "$ref": "#/components/schemas/ConnectionSettleReason" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "title": "ConnectionAnswer", + "type": "object" + }, + "ConnectionAnswerStatus": { + "description": "What the card says about one row: ``tools/connectors/mcp.py::apply_answer``.", + "enum": [ + "approved", + "skipped" + ], + "title": "ConnectionAnswerStatus", + "type": "string" + }, + "ConnectionAnswerTarget": { + "additionalProperties": false, + "description": "One row's answer from the card. ``env`` carries the credential values an install asked for\nthrough ``required_env``.", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/ConnectionAnswerStatus" + }, + "detail": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Detail" + }, + "env": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Env" + } + }, + "required": [ + "name", + "status" + ], + "title": "ConnectionAnswerTarget", + "type": "object" + }, + "ConnectionOperationParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "owner": { + "discriminator": { + "mapping": { + "account": "#/components/schemas/AccountOwner", + "session": "#/components/schemas/SessionOwner" + }, + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/SessionOwner" + }, + { + "$ref": "#/components/schemas/AccountOwner" + } + ], + "title": "Owner" + }, + "op_id": { + "title": "Op Id", + "type": "string" + } + }, + "required": [ + "owner", + "op_id" + ], + "title": "ConnectionOperationParams", + "type": "object" + }, + "ConnectionOperationStatus": { + "additionalProperties": false, + "description": "``methods_connectors._operation_view``: the operation's full snapshot.", + "properties": { + "op_id": { + "title": "Op Id", + "type": "string" + }, + "seq": { + "title": "Seq", + "type": "integer" + }, + "deadline_at": { + "title": "Deadline At", + "type": "number" + }, + "settled": { + "title": "Settled", + "type": "boolean" + }, + "settled_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Settled At" + }, + "settled_by": { + "anyOf": [ + { + "$ref": "#/components/schemas/ConnectionSettleReason" + }, + { + "type": "null" + } + ], + "default": null + }, + "targets": { + "items": { + "$ref": "#/components/schemas/ConnectionOperationTarget" + }, + "title": "Targets", + "type": "array" + } + }, + "required": [ + "op_id", + "seq", + "deadline_at", + "settled", + "targets" + ], + "title": "ConnectionOperationStatus", + "type": "object" + }, + "ConnectionOperationTarget": { + "additionalProperties": false, + "description": "``Target.snapshot``: the link minted up front rides here, never in the model result. ``extra``\nkeys a leg records (``tools``, ``hint``) are typed here as they appear.", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "kind": { + "$ref": "#/components/schemas/ConnectionTargetKind" + }, + "action": { + "$ref": "#/components/schemas/ConnectionTargetAction" + }, + "state": { + "$ref": "#/components/schemas/ConnectionTargetState" + }, + "detail": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Detail" + }, + "instructions": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instructions" + }, + "discovery_error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Discovery Error" + }, + "connect_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Connect Url" + }, + "connection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Connection Id" + }, + "attempt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Attempt" + }, + "required_env": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ConnectionTargetEnvField" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Required Env" + }, + "tools": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tools" + }, + "hint": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Hint" + }, + "display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Description" + }, + "tier": { + "anyOf": [ + { + "$ref": "#/components/schemas/CatalogTier" + }, + { + "type": "null" + } + ], + "default": null + }, + "platforms": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Platforms" + }, + "repo": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Repo" + }, + "sha": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sha" + }, + "subdir": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Subdir" + }, + "scan": { + "anyOf": [ + { + "$ref": "#/components/schemas/CatalogScan" + }, + { + "type": "null" + } + ], + "default": null + }, + "requirements": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Requirements" + }, + "has_desktop_half": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Has Desktop Half" + }, + "target_profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Target Profile" + }, + "app_state": { + "anyOf": [ + { + "$ref": "#/components/schemas/CatalogAppState" + }, + { + "type": "null" + } + ], + "default": null + }, + "skill": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Skill" + } + }, + "required": [ + "name", + "kind", + "action", + "state" + ], + "title": "ConnectionOperationTarget", + "type": "object" + }, + "ConnectionRequestPayload": { + "additionalProperties": false, + "description": "``ConnectionOperation.request_payload``: opens the card; also the ``pending_connection`` resume\nsnapshot so a client that missed the event restores the card with the server's deadline.", + "properties": { + "op_id": { + "title": "Op Id", + "type": "string" + }, + "seq": { + "title": "Seq", + "type": "integer" + }, + "deadline_at": { + "title": "Deadline At", + "type": "number" + }, + "timeout_seconds": { + "title": "Timeout Seconds", + "type": "number" + }, + "targets": { + "items": { + "$ref": "#/components/schemas/ConnectionOperationTarget" + }, + "title": "Targets", + "type": "array" + }, + "tool_call_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tool Call Id" + } + }, + "required": [ + "op_id", + "seq", + "deadline_at", + "timeout_seconds", + "targets" + ], + "title": "ConnectionRequestPayload", + "type": "object" + }, + "ConnectionRespondParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "owner": { + "discriminator": { + "mapping": { + "account": "#/components/schemas/AccountOwner", + "session": "#/components/schemas/SessionOwner" + }, + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/SessionOwner" + }, + { + "$ref": "#/components/schemas/AccountOwner" + } + ], + "title": "Owner" + }, + "op_id": { + "title": "Op Id", + "type": "string" + }, + "result": { + "$ref": "#/components/schemas/ConnectionAnswer" + } + }, + "required": [ + "owner", + "op_id", + "result" + ], + "title": "ConnectionRespondParams", + "type": "object" + }, + "ConnectionRespondResult": { + "additionalProperties": false, + "properties": { + "status": { + "const": "ok", + "title": "Status", + "type": "string" + }, + "settled": { + "title": "Settled", + "type": "boolean" + } + }, + "required": [ + "status", + "settled" + ], + "title": "ConnectionRespondResult", + "type": "object" + }, + "ConnectionSettleReason": { + "description": "``tools/connectors/contract.py::SettleReason``.", + "enum": [ + "all_resolved", + "continue", + "deadline", + "interrupt" + ], + "title": "ConnectionSettleReason", + "type": "string" + }, + "ConnectionTargetAction": { + "enum": [ + "authorize", + "connect", + "enable", + "install", + "reconnect" + ], + "title": "ConnectionTargetAction", + "type": "string" + }, + "ConnectionTargetEnvField": { + "additionalProperties": false, + "description": "One credential an MCP install still needs; the card renders a field per entry and sends the\nvalues back with the approval.", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "required": { + "title": "Required", + "type": "boolean" + }, + "secret": { + "title": "Secret", + "type": "boolean" + }, + "default": { + "type": "string", + "title": "Default" + }, + "prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Prompt" + } + }, + "required": [ + "name", + "required", + "secret", + "default" + ], + "title": "ConnectionTargetEnvField", + "type": "object" + }, + "ConnectionTargetKind": { + "enum": [ + "connector", + "mcp", + "plugin", + "skill" + ], + "title": "ConnectionTargetKind", + "type": "string" + }, + "ConnectionTargetState": { + "description": "``tools/connectors/contract.py::TargetState``.", + "enum": [ + "pending", + "initiated", + "connected", + "skipped", + "failed", + "expired", + "not_connected" + ], + "title": "ConnectionTargetState", + "type": "string" + }, + "ConnectionUpdatePayload": { + "additionalProperties": false, + "description": "``methods_connectors._connection_update``: one target transition (``target``/``from``/``to``/\n``actor``) or the settlement (none of those), with the full snapshot.", + "properties": { + "op_id": { + "title": "Op Id", + "type": "string" + }, + "seq": { + "title": "Seq", + "type": "integer" + }, + "deadline_at": { + "title": "Deadline At", + "type": "number" + }, + "settled": { + "title": "Settled", + "type": "boolean" + }, + "settled_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Settled At" + }, + "settled_by": { + "anyOf": [ + { + "$ref": "#/components/schemas/ConnectionSettleReason" + }, + { + "type": "null" + } + ], + "default": null + }, + "targets": { + "items": { + "$ref": "#/components/schemas/ConnectionOperationTarget" + }, + "title": "Targets", + "type": "array" + }, + "owner": { + "discriminator": { + "mapping": { + "account": "#/components/schemas/AccountOwner", + "session": "#/components/schemas/SessionOwner" + }, + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/SessionOwner" + }, + { + "$ref": "#/components/schemas/AccountOwner" + } + ], + "title": "Owner" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Target" + }, + "from": { + "anyOf": [ + { + "$ref": "#/components/schemas/ConnectionTargetState" + }, + { + "type": "null" + } + ], + "default": null + }, + "to": { + "anyOf": [ + { + "$ref": "#/components/schemas/ConnectionTargetState" + }, + { + "type": "null" + } + ], + "default": null + }, + "actor": { + "anyOf": [ + { + "$ref": "#/components/schemas/ConnectionActor" + }, + { + "type": "null" + } + ], + "default": null + }, + "detail": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Detail" + } + }, + "required": [ + "op_id", + "seq", + "deadline_at", + "settled", + "targets", + "owner" + ], + "title": "ConnectionUpdatePayload", + "type": "object" + }, + "ConnectionWakeResult": { + "additionalProperties": false, + "properties": { + "status": { + "const": "ok", + "title": "Status", + "type": "string" + } + }, + "required": [ + "status" + ], + "title": "ConnectionWakeResult", + "type": "object" + }, + "ConnectorAccountRow": { + "additionalProperties": false, + "properties": { + "connection_id": { + "title": "Connection Id", + "type": "string" + }, + "connector": { + "title": "Connector", + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/ConnectorAccountStatus" + }, + "status_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status Reason" + }, + "label": { + "title": "Label", + "type": "string" + }, + "alias": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Alias" + }, + "active": { + "title": "Active", + "type": "boolean" + }, + "created_at": { + "title": "Created At", + "type": "string" + }, + "updated_at": { + "title": "Updated At", + "type": "string" + } + }, + "required": [ + "connection_id", + "connector", + "status", + "label", + "active", + "created_at", + "updated_at" + ], + "title": "ConnectorAccountRow", + "type": "object" + }, + "ConnectorAccountStatus": { + "enum": [ + "pending", + "active", + "failed", + "expired", + "revoked", + "inactive" + ], + "title": "ConnectorAccountStatus", + "type": "string" + }, + "ConnectorAccountsParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "connector": { + "anyOf": [ + { + "pattern": "^[a-z0-9][a-z0-9_-]*$", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Connector" + } + }, + "title": "ConnectorAccountsParams", + "type": "object" + }, + "ConnectorAccountsRemoveParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "connection_id": { + "minLength": 1, + "title": "Connection Id", + "type": "string" + } + }, + "required": [ + "connection_id" + ], + "title": "ConnectorAccountsRemoveParams", + "type": "object" + }, + "ConnectorAccountsRemoveResult": { + "additionalProperties": false, + "properties": { + "connection_id": { + "title": "Connection Id", + "type": "string" + }, + "connector": { + "title": "Connector", + "type": "string" + }, + "status": { + "const": "removed", + "title": "Status", + "type": "string" + } + }, + "required": [ + "connection_id", + "connector", + "status" + ], + "title": "ConnectorAccountsRemoveResult", + "type": "object" + }, + "ConnectorAccountsResult": { + "additionalProperties": false, + "properties": { + "accounts": { + "items": { + "$ref": "#/components/schemas/ConnectorAccountRow" + }, + "title": "Accounts", + "type": "array" + } + }, + "required": [ + "accounts" + ], + "title": "ConnectorAccountsResult", + "type": "object" + }, + "ConnectorCatalogRow": { + "additionalProperties": false, + "properties": { + "slug": { + "title": "Slug", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "category": { + "title": "Category", + "type": "string" + }, + "logo_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Logo Url" + } + }, + "required": [ + "slug", + "name", + "description", + "category" + ], + "title": "ConnectorCatalogRow", + "type": "object" + }, + "ConnectorChange": { + "additionalProperties": false, + "properties": { + "type": { + "const": "connector", + "title": "Type", + "type": "string" + }, + "connector": { + "title": "Connector", + "type": "string" + }, + "enabled": { + "title": "Enabled", + "type": "boolean" + } + }, + "required": [ + "type", + "connector", + "enabled" + ], + "title": "ConnectorChange", + "type": "object" + }, + "ConnectorPolicyAllowBody": { + "additionalProperties": false, + "properties": { + "mode": { + "const": "allow", + "title": "Mode", + "type": "string" + }, + "connectors": { + "items": { + "type": "string" + }, + "title": "Connectors", + "type": "array" + }, + "tools": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Tools", + "type": "object" + }, + "tags": { + "anyOf": [ + { + "$ref": "#/components/schemas/ConnectorPolicyTags" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "mode", + "connectors", + "tools" + ], + "title": "ConnectorPolicyAllowBody", + "type": "object" + }, + "ConnectorPolicyDenyAllBody": { + "additionalProperties": false, + "properties": { + "mode": { + "const": "deny-all", + "title": "Mode", + "type": "string" + } + }, + "required": [ + "mode" + ], + "title": "ConnectorPolicyDenyAllBody", + "type": "object" + }, + "ConnectorPolicyDenyBody": { + "additionalProperties": false, + "properties": { + "mode": { + "const": "deny", + "title": "Mode", + "type": "string" + }, + "disabled_connectors": { + "items": { + "type": "string" + }, + "title": "Disabled Connectors", + "type": "array" + }, + "tools": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Tools", + "type": "object" + }, + "tags": { + "anyOf": [ + { + "$ref": "#/components/schemas/ConnectorPolicyTags" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "mode", + "disabled_connectors", + "tools" + ], + "title": "ConnectorPolicyDenyBody", + "type": "object" + }, + "ConnectorPolicyEffectiveAllow": { + "additionalProperties": false, + "properties": { + "version": { + "const": 1, + "title": "Version", + "type": "integer" + }, + "revision": { + "title": "Revision", + "type": "string" + }, + "issued_at_ms": { + "title": "Issued At Ms", + "type": "integer" + }, + "mode": { + "const": "allow", + "title": "Mode", + "type": "string" + }, + "connectors": { + "items": { + "type": "string" + }, + "title": "Connectors", + "type": "array" + }, + "tools": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Tools", + "type": "object" + }, + "tags": { + "anyOf": [ + { + "$ref": "#/components/schemas/ConnectorPolicyTags" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "version", + "revision", + "issued_at_ms", + "mode", + "connectors", + "tools" + ], + "title": "ConnectorPolicyEffectiveAllow", + "type": "object" + }, + "ConnectorPolicyEffectiveDeny": { + "additionalProperties": false, + "properties": { + "version": { + "const": 1, + "title": "Version", + "type": "integer" + }, + "revision": { + "title": "Revision", + "type": "string" + }, + "issued_at_ms": { + "title": "Issued At Ms", + "type": "integer" + }, + "mode": { + "const": "deny", + "title": "Mode", + "type": "string" + }, + "disabled_connectors": { + "items": { + "type": "string" + }, + "title": "Disabled Connectors", + "type": "array" + }, + "tools": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Tools", + "type": "object" + }, + "tags": { + "anyOf": [ + { + "$ref": "#/components/schemas/ConnectorPolicyTags" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "version", + "revision", + "issued_at_ms", + "mode", + "disabled_connectors", + "tools" + ], + "title": "ConnectorPolicyEffectiveDeny", + "type": "object" + }, + "ConnectorPolicyEffectiveDenyAll": { + "additionalProperties": false, + "properties": { + "version": { + "const": 1, + "title": "Version", + "type": "integer" + }, + "revision": { + "title": "Revision", + "type": "string" + }, + "issued_at_ms": { + "title": "Issued At Ms", + "type": "integer" + }, + "mode": { + "const": "deny-all", + "title": "Mode", + "type": "string" + } + }, + "required": [ + "version", + "revision", + "issued_at_ms", + "mode" + ], + "title": "ConnectorPolicyEffectiveDenyAll", + "type": "object" + }, + "ConnectorPolicyEffectiveUnrestricted": { + "additionalProperties": false, + "properties": { + "version": { + "const": 1, + "title": "Version", + "type": "integer" + }, + "revision": { + "title": "Revision", + "type": "string" + }, + "issued_at_ms": { + "title": "Issued At Ms", + "type": "integer" + }, + "mode": { + "const": "unrestricted", + "title": "Mode", + "type": "string" + } + }, + "required": [ + "version", + "revision", + "issued_at_ms", + "mode" + ], + "title": "ConnectorPolicyEffectiveUnrestricted", + "type": "object" + }, + "ConnectorPolicyGetResult": { + "additionalProperties": false, + "properties": { + "layers": { + "items": { + "$ref": "#/components/schemas/ConnectorPolicyLayer" + }, + "title": "Layers", + "type": "array" + }, + "effective": { + "discriminator": { + "mapping": { + "allow": "#/components/schemas/ConnectorPolicyEffectiveAllow", + "deny": "#/components/schemas/ConnectorPolicyEffectiveDeny", + "deny-all": "#/components/schemas/ConnectorPolicyEffectiveDenyAll", + "unrestricted": "#/components/schemas/ConnectorPolicyEffectiveUnrestricted" + }, + "propertyName": "mode" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/ConnectorPolicyEffectiveUnrestricted" + }, + { + "$ref": "#/components/schemas/ConnectorPolicyEffectiveDenyAll" + }, + { + "$ref": "#/components/schemas/ConnectorPolicyEffectiveAllow" + }, + { + "$ref": "#/components/schemas/ConnectorPolicyEffectiveDeny" + } + ], + "title": "Effective" + } + }, + "required": [ + "layers", + "effective" + ], + "title": "ConnectorPolicyGetResult", + "type": "object" + }, + "ConnectorPolicyLayer": { + "additionalProperties": false, + "properties": { + "kind": { + "$ref": "#/components/schemas/ConnectorPolicyLayerKind" + }, + "revision": { + "title": "Revision", + "type": "string" + }, + "body": { + "discriminator": { + "mapping": { + "allow": "#/components/schemas/ConnectorPolicyAllowBody", + "deny": "#/components/schemas/ConnectorPolicyDenyBody", + "deny-all": "#/components/schemas/ConnectorPolicyDenyAllBody", + "unrestricted": "#/components/schemas/ConnectorPolicyUnrestrictedBody" + }, + "propertyName": "mode" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/ConnectorPolicyUnrestrictedBody" + }, + { + "$ref": "#/components/schemas/ConnectorPolicyDenyAllBody" + }, + { + "$ref": "#/components/schemas/ConnectorPolicyAllowBody" + }, + { + "$ref": "#/components/schemas/ConnectorPolicyDenyBody" + } + ], + "title": "Body" + } + }, + "required": [ + "kind", + "revision", + "body" + ], + "title": "ConnectorPolicyLayer", + "type": "object" + }, + "ConnectorPolicyLayerKind": { + "enum": [ + "org", + "role", + "member" + ], + "title": "ConnectorPolicyLayerKind", + "type": "string" + }, + "ConnectorPolicySetParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "change": { + "discriminator": { + "mapping": { + "connector": "#/components/schemas/ConnectorChange", + "tools": "#/components/schemas/ToolsChange" + }, + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/ToolsChange" + }, + { + "$ref": "#/components/schemas/ConnectorChange" + } + ], + "title": "Change" + }, + "expected_revision": { + "pattern": "^[0-7][0-9A-HJKMNP-TV-Z]{25}$", + "title": "Expected Revision", + "type": "string" + } + }, + "required": [ + "change", + "expected_revision" + ], + "title": "ConnectorPolicySetParams", + "type": "object" + }, + "ConnectorPolicySetResult": { + "additionalProperties": false, + "properties": { + "revision": { + "title": "Revision", + "type": "string" + }, + "effective": { + "discriminator": { + "mapping": { + "allow": "#/components/schemas/ConnectorPolicyEffectiveAllow", + "deny": "#/components/schemas/ConnectorPolicyEffectiveDeny", + "deny-all": "#/components/schemas/ConnectorPolicyEffectiveDenyAll", + "unrestricted": "#/components/schemas/ConnectorPolicyEffectiveUnrestricted" + }, + "propertyName": "mode" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/ConnectorPolicyEffectiveUnrestricted" + }, + { + "$ref": "#/components/schemas/ConnectorPolicyEffectiveDenyAll" + }, + { + "$ref": "#/components/schemas/ConnectorPolicyEffectiveAllow" + }, + { + "$ref": "#/components/schemas/ConnectorPolicyEffectiveDeny" + } + ], + "title": "Effective" + } + }, + "required": [ + "revision", + "effective" + ], + "title": "ConnectorPolicySetResult", + "type": "object" + }, + "ConnectorPolicyTags": { + "additionalProperties": false, + "properties": { + "enable": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Enable" + }, + "disable": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Disable" + } + }, + "title": "ConnectorPolicyTags", + "type": "object" + }, + "ConnectorPolicyUnrestrictedBody": { + "additionalProperties": false, + "properties": { + "mode": { + "const": "unrestricted", + "title": "Mode", + "type": "string" + } + }, + "required": [ + "mode" + ], + "title": "ConnectorPolicyUnrestrictedBody", + "type": "object" + }, + "ConnectorRow": { + "additionalProperties": false, + "properties": { + "connector": { + "title": "Connector", + "type": "string" + }, + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "connected": { + "title": "Connected", + "type": "boolean" + }, + "connection_status": { + "anyOf": [ + { + "enum": [ + "pending", + "active", + "failed", + "expired", + "revoked", + "inactive" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Connection Status" + }, + "status_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Status Reason" + }, + "gateway_disabled_tools": { + "items": { + "type": "string" + }, + "title": "Gateway Disabled Tools", + "type": "array" + } + }, + "required": [ + "connector", + "enabled", + "connected", + "connection_status", + "status_reason", + "gateway_disabled_tools" + ], + "title": "ConnectorRow", + "type": "object" + }, + "ConnectorToolFacet": { + "enum": [ + "read", + "write", + "destructive", + "unclassified" + ], + "title": "ConnectorToolFacet", + "type": "string" + }, + "ConnectorToolRow": { + "additionalProperties": false, + "properties": { + "slug": { + "title": "Slug", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "facet": { + "$ref": "#/components/schemas/ConnectorToolFacet" + }, + "hints": { + "items": { + "type": "string" + }, + "title": "Hints", + "type": "array" + }, + "categories": { + "items": { + "type": "string" + }, + "title": "Categories", + "type": "array" + }, + "no_auth": { + "title": "No Auth", + "type": "boolean" + }, + "deprecated": { + "title": "Deprecated", + "type": "boolean" + } + }, + "required": [ + "slug", + "name", + "description", + "facet", + "hints", + "categories", + "no_auth", + "deprecated" + ], + "title": "ConnectorToolRow", + "type": "object" + }, + "ConnectorToolsParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "slug": { + "title": "Slug", + "type": "string" + }, + "refresh": { + "default": false, + "title": "Refresh", + "type": "boolean" + } + }, + "required": [ + "slug" + ], + "title": "ConnectorToolsParams", + "type": "object" + }, + "ConnectorToolsResult": { + "additionalProperties": false, + "properties": { + "connector": { + "title": "Connector", + "type": "string" + }, + "toolkit_version": { + "title": "Toolkit Version", + "type": "string" + }, + "etag": { + "title": "Etag", + "type": "string" + }, + "fetched_at": { + "title": "Fetched At", + "type": "number" + }, + "source": { + "$ref": "#/components/schemas/ConnectorToolsSource" + }, + "stale": { + "title": "Stale", + "type": "boolean" + }, + "tools": { + "items": { + "$ref": "#/components/schemas/ConnectorToolRow" + }, + "title": "Tools", + "type": "array" + } + }, + "required": [ + "connector", + "toolkit_version", + "etag", + "fetched_at", + "source", + "stale", + "tools" + ], + "title": "ConnectorToolsResult", + "type": "object" + }, + "ConnectorToolsSource": { + "enum": [ + "cache", + "network", + "revalidated" + ], + "title": "ConnectorToolsSource", + "type": "string" + }, + "ConnectorsCatalogResult": { + "additionalProperties": false, + "properties": { + "connectors": { + "items": { + "$ref": "#/components/schemas/ConnectorCatalogRow" + }, + "title": "Connectors", + "type": "array" + } + }, + "required": [ + "connectors" + ], + "title": "ConnectorsCatalogResult", + "type": "object" + }, + "ConnectorsConnectParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "owner": { + "discriminator": { + "mapping": { + "account": "#/components/schemas/AccountOwner", + "session": "#/components/schemas/SessionOwner" + }, + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/SessionOwner" + }, + { + "$ref": "#/components/schemas/AccountOwner" + } + ], + "title": "Owner" + }, + "connectors": { + "items": { + "pattern": "^[a-z0-9][a-z0-9_-]*$", + "type": "string" + }, + "minItems": 1, + "title": "Connectors", + "type": "array" + }, + "reconnect": { + "default": false, + "title": "Reconnect", + "type": "boolean" + } + }, + "required": [ + "owner", + "connectors" + ], + "title": "ConnectorsConnectParams", + "type": "object" + }, + "ConnectorsConnectResult": { + "additionalProperties": false, + "description": "``methods_connectors._reissue`` / ``managed._off_desktop_result``: the operation the connect opened; ``status``/``note`` ride along from the tool result.", + "properties": { + "op_id": { + "title": "Op Id", + "type": "string" + }, + "seq": { + "title": "Seq", + "type": "integer" + }, + "deadline_at": { + "title": "Deadline At", + "type": "number" + }, + "settled": { + "title": "Settled", + "type": "boolean" + }, + "settled_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Settled At" + }, + "settled_by": { + "anyOf": [ + { + "$ref": "#/components/schemas/ConnectionSettleReason" + }, + { + "type": "null" + } + ], + "default": null + }, + "targets": { + "items": { + "$ref": "#/components/schemas/ConnectionOperationTarget" + }, + "title": "Targets", + "type": "array" + }, + "status": { + "anyOf": [ + { + "enum": [ + "initiated", + "settled" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" + }, + "note": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Note" + } + }, + "required": [ + "op_id", + "seq", + "deadline_at", + "settled", + "targets" + ], + "title": "ConnectorsConnectResult", + "type": "object" + }, + "ConnectorsListParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "owner": { + "discriminator": { + "mapping": { + "account": "#/components/schemas/AccountOwner", + "session": "#/components/schemas/SessionOwner" + }, + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/SessionOwner" + }, + { + "$ref": "#/components/schemas/AccountOwner" + } + ], + "title": "Owner" + } + }, + "required": [ + "owner" + ], + "title": "ConnectorsListParams", + "type": "object" + }, + "ConnectorsListResult": { + "additionalProperties": false, + "properties": { + "available": { + "title": "Available", + "type": "boolean" + }, + "connectors": { + "items": { + "$ref": "#/components/schemas/ConnectorRow" + }, + "title": "Connectors", + "type": "array" + } + }, + "required": [ + "available", + "connectors" + ], + "title": "ConnectorsListResult", + "type": "object" + }, + "ContextCategory": { + "additionalProperties": false, + "properties": { + "color": { + "title": "Color", + "type": "string" + }, + "id": { + "title": "Id", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + }, + "tokens": { + "title": "Tokens", + "type": "integer" + } + }, + "required": [ + "color", + "id", + "label", + "tokens" + ], + "title": "ContextCategory", + "type": "object" + }, + "ContextFileSource": { + "additionalProperties": false, + "description": "One row of ``agent.context_file_sources.list_context_file_sources``.", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "path": { + "title": "Path", + "type": "string" + }, + "chars": { + "title": "Chars", + "type": "integer" + }, + "est_tokens": { + "title": "Est Tokens", + "type": "integer" + }, + "loaded": { + "title": "Loaded", + "type": "boolean" + }, + "status": { + "title": "Status", + "type": "string" + } + }, + "required": [ + "label", + "path", + "chars", + "est_tokens", + "loaded", + "status" + ], + "title": "ContextFileSource", + "type": "object" + }, + "ControllerScope": { + "additionalProperties": false, + "properties": { + "principal_id": { + "title": "Principal Id", + "type": "string" + }, + "profile_id": { + "title": "Profile Id", + "type": "string" + }, + "session_id": { + "title": "Session Id", + "type": "string" + }, + "controller_id": { + "title": "Controller Id", + "type": "string" + }, + "browser_profile_id": { + "title": "Browser Profile Id", + "type": "string" + }, + "transport_family": { + "title": "Transport Family", + "type": "string" + }, + "capabilities": { + "items": { + "type": "string" + }, + "title": "Capabilities", + "type": "array" + } + }, + "required": [ + "principal_id", + "profile_id", + "session_id", + "controller_id", + "browser_profile_id", + "transport_family", + "capabilities" + ], + "title": "ControllerScope", + "type": "object" + }, + "CorrectionStatus": { + "enum": [ + "queued", + "redirected", + "rejected" + ], + "title": "CorrectionStatus", + "type": "string" + }, + "CronAction": { + "enum": [ + "list", + "add", + "remove", + "pause", + "resume" + ], + "title": "CronAction", + "type": "string" + }, + "CronJobRow": { + "additionalProperties": true, + "description": "``tools/cronjob_job_args.py::_format_job``.", + "properties": { + "job_id": { + "title": "Job Id", + "type": "string" + }, + "name": { + "default": "", + "title": "Name", + "type": "string" + }, + "skill": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Skill" + }, + "skills": { + "items": { + "type": "string" + }, + "title": "Skills", + "type": "array" + }, + "prompt_preview": { + "default": "", + "title": "Prompt Preview", + "type": "string" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider" + }, + "base_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Base Url" + }, + "schedule": { + "default": "?", + "title": "Schedule", + "type": "string" + }, + "repeat": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Repeat" + }, + "deliver": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Deliver" + }, + "next_run_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Next Run At" + }, + "last_run_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Run At" + }, + "last_status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Status" + }, + "last_delivery_error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Delivery Error" + }, + "last_delivery_unverified": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Delivery Unverified" + }, + "last_fire_error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Fire Error" + }, + "last_error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Error" + }, + "enabled": { + "default": true, + "title": "Enabled", + "type": "boolean" + }, + "state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "State" + }, + "paused_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Paused At" + }, + "paused_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Paused Reason" + }, + "workdir": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Workdir" + }, + "script": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Script" + }, + "reasoning_effort": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reasoning Effort" + }, + "monitor_script": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Monitor Script" + }, + "monitor_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Monitor Url" + }, + "monitor_state": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Monitor State" + }, + "no_agent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "No Agent" + }, + "enabled_toolsets": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Enabled Toolsets" + }, + "continuity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Continuity" + }, + "context_from": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context From" + }, + "attach_to_session": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Attach To Session" + } + }, + "required": [ + "job_id" + ], + "title": "CronJobRow", + "type": "object" + }, + "CronManageParams": { + "additionalProperties": false, + "properties": { + "action": { + "$ref": "#/components/schemas/CronAction", + "default": "list" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "include_disabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Include Disabled" + }, + "schedule": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Schedule" + }, + "prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Prompt" + }, + "repeat": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Repeat" + }, + "continuity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Continuity" + }, + "deliver": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Deliver" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "CronManageParams", + "type": "object" + }, + "CronManageResult": { + "additionalProperties": true, + "description": "Pass-through of ``tools/cronjob_tools.py::cronjob`` JSON: ``list`` \u2192 ``jobs``/``count``\n(+ ``scoped`` when profile-scoped); ``add`` \u2192 the created job's summary + ``job``; ``remove`` \u2192\n``removed_job``; ``pause``/``resume`` \u2192 ``job``. A tool-level failure lands in ``error``.", + "properties": { + "success": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Success" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Count" + }, + "jobs": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/CronJobRow" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Jobs" + }, + "scoped": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Scoped" + }, + "gateway_running": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Gateway Running" + }, + "warning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Warning" + }, + "job_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Job Id" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "skill": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Skill" + }, + "skills": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Skills" + }, + "schedule": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Schedule" + }, + "repeat": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Repeat" + }, + "deliver": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Deliver" + }, + "next_run_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Next Run At" + }, + "job": { + "anyOf": [ + { + "$ref": "#/components/schemas/CronJobRow" + }, + { + "type": "null" + } + ], + "default": null + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + }, + "guidance": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Guidance" + }, + "removed_job": { + "anyOf": [ + { + "$ref": "#/components/schemas/CronRemovedJob" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "title": "CronManageResult", + "type": "object" + }, + "CronRemovedJob": { + "additionalProperties": false, + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "name": { + "default": "", + "title": "Name", + "type": "string" + }, + "schedule": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Schedule" + } + }, + "required": [ + "id" + ], + "title": "CronRemovedJob", + "type": "object" + }, + "CurrentSubscription": { + "additionalProperties": false, + "properties": { + "tier_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tier Id" + }, + "tier_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tier Name" + }, + "monthly_credits": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Monthly Credits" + }, + "credits_remaining": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Credits Remaining" + }, + "cycle_ends_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cycle Ends At" + }, + "pending_downgrade_tier_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pending Downgrade Tier Name" + }, + "pending_downgrade_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pending Downgrade At" + }, + "pending_downgrade_display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pending Downgrade Display" + }, + "cancel_at_period_end": { + "title": "Cancel At Period End", + "type": "boolean" + }, + "cancellation_effective_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cancellation Effective At" + }, + "cancellation_effective_display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cancellation Effective Display" + } + }, + "required": [ + "cancel_at_period_end" + ], + "title": "CurrentSubscription", + "type": "object" + }, + "DelegationPauseParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "paused": { + "default": true, + "title": "Paused", + "type": "boolean" + } + }, + "title": "DelegationPauseParams", + "type": "object" + }, + "DelegationPauseResult": { + "additionalProperties": false, + "properties": { + "paused": { + "title": "Paused", + "type": "boolean" + } + }, + "required": [ + "paused" + ], + "title": "DelegationPauseResult", + "type": "object" + }, + "DelegationStatusResult": { + "additionalProperties": false, + "properties": { + "active": { + "items": { + "$ref": "#/components/schemas/ActiveSubagent" + }, + "title": "Active", + "type": "array" + }, + "paused": { + "title": "Paused", + "type": "boolean" + }, + "max_spawn_depth": { + "title": "Max Spawn Depth", + "type": "integer" + }, + "max_concurrent_children": { + "title": "Max Concurrent Children", + "type": "integer" + } + }, + "required": [ + "active", + "paused", + "max_spawn_depth", + "max_concurrent_children" + ], + "title": "DelegationStatusResult", + "type": "object" + }, + "DiagnosticsShareNousParams": { + "additionalProperties": false, + "properties": { + "error_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error Context" + }, + "extra_files": { + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Extra Files" + }, + "log_lines": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Log Lines" + } + }, + "title": "DiagnosticsShareNousParams", + "type": "object" + }, + "DiagnosticsShareNousResult": { + "additionalProperties": false, + "description": "Structured envelope: ``ok=False`` + ``error`` renders inline instead of failing the RPC.", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "view_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "View Url" + }, + "upload_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Upload Id" + }, + "expires_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Expires At" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + } + }, + "required": [ + "ok" + ], + "title": "DiagnosticsShareNousResult", + "type": "object" + }, + "DiscoveredRepo": { + "additionalProperties": false, + "description": "``methods_projects._discover_repos_payload`` row: a git root with session totals.", + "properties": { + "root": { + "title": "Root", + "type": "string" + }, + "label": { + "default": "", + "title": "Label", + "type": "string" + }, + "sessions": { + "default": 0, + "title": "Sessions", + "type": "integer" + }, + "last_active": { + "default": 0.0, + "title": "Last Active", + "type": "number" + } + }, + "required": [ + "root" + ], + "title": "DiscoveredRepo", + "type": "object" + }, + "DispatchType": { + "description": "``apps/shared/src/slash.ts::parseCommandDispatch`` branches on this.", + "enum": [ + "exec", + "alias", + "plugin", + "send", + "skill", + "prefill" + ], + "title": "DispatchType", + "type": "string" + }, + "DisplayImageSwitch": { + "additionalProperties": false, + "description": "A persisted Docker sandbox kept on the previous default image; the user decides the switch.", + "properties": { + "current_image": { + "title": "Current Image", + "type": "string" + }, + "target_image": { + "title": "Target Image", + "type": "string" + }, + "containers": { + "title": "Containers", + "type": "integer" + } + }, + "required": [ + "current_image", + "target_image", + "containers" + ], + "title": "DisplayImageSwitch", + "type": "object" + }, + "DisplayInstallDonePayload": { + "additionalProperties": false, + "properties": { + "profile_key": { + "title": "Profile Key", + "type": "string" + }, + "code": { + "title": "Code", + "type": "integer" + }, + "status": { + "$ref": "#/components/schemas/DisplayStatus" + } + }, + "required": [ + "profile_key", + "code", + "status" + ], + "title": "DisplayInstallDonePayload", + "type": "object" + }, + "DisplayInstallLogPayload": { + "additionalProperties": false, + "properties": { + "profile_key": { + "title": "Profile Key", + "type": "string" + }, + "line": { + "title": "Line", + "type": "string" + } + }, + "required": [ + "profile_key", + "line" + ], + "title": "DisplayInstallLogPayload", + "type": "object" + }, + "DisplayInstallResult": { + "additionalProperties": false, + "properties": { + "started": { + "title": "Started", + "type": "boolean" + }, + "command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Command" + }, + "profile_key": { + "title": "Profile Key", + "type": "string" + } + }, + "required": [ + "started", + "profile_key" + ], + "title": "DisplayInstallResult", + "type": "object" + }, + "DisplayInstallSudoParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile_key": { + "title": "Profile Key", + "type": "string" + } + }, + "required": [ + "session_id", + "profile_key" + ], + "title": "DisplayInstallSudoParams", + "type": "object" + }, + "DisplayLease": { + "additionalProperties": false, + "description": "``tools/bot_desktop/lease.py::Lease`` as clients may see it: the holder's viewer id is a\ncapability and never leaves the gateway; ``viewer_hash`` lets the holder recognise itself.", + "properties": { + "holder": { + "$ref": "#/components/schemas/LeaseHolder" + }, + "viewer_id": { + "default": null, + "title": "Viewer Id", + "type": "null" + }, + "viewer_hash": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Viewer Hash" + }, + "since": { + "title": "Since", + "type": "number" + }, + "epoch": { + "title": "Epoch", + "type": "integer" + }, + "reason": { + "default": "", + "title": "Reason", + "type": "string" + } + }, + "required": [ + "holder", + "since", + "epoch" + ], + "title": "DisplayLease", + "type": "object" + }, + "DisplayLeaseAcquireParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "viewer_id": { + "title": "Viewer Id", + "type": "string" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + } + }, + "required": [ + "viewer_id" + ], + "title": "DisplayLeaseAcquireParams", + "type": "object" + }, + "DisplayLeasePayload": { + "additionalProperties": false, + "properties": { + "profile_key": { + "title": "Profile Key", + "type": "string" + }, + "lease": { + "$ref": "#/components/schemas/DisplayLease" + } + }, + "required": [ + "profile_key", + "lease" + ], + "title": "DisplayLeasePayload", + "type": "object" + }, + "DisplayLeaseReleaseParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "viewer_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Viewer Id" + }, + "force": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Force" + } + }, + "title": "DisplayLeaseReleaseParams", + "type": "object" + }, + "DisplayLeaseResult": { + "additionalProperties": false, + "properties": { + "lease": { + "$ref": "#/components/schemas/DisplayLease" + } + }, + "required": [ + "lease" + ], + "title": "DisplayLeaseResult", + "type": "object" + }, + "DisplayObserveParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "viewer_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Viewer Id" + } + }, + "title": "DisplayObserveParams", + "type": "object" + }, + "DisplayObserveResult": { + "additionalProperties": false, + "properties": { + "profile": { + "title": "Profile", + "type": "string" + }, + "supported": { + "title": "Supported", + "type": "boolean" + }, + "installed": { + "title": "Installed", + "type": "boolean" + }, + "missing": { + "items": { + "type": "string" + }, + "title": "Missing", + "type": "array" + }, + "running": { + "title": "Running", + "type": "boolean" + }, + "pid": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pid" + }, + "display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display" + }, + "socket": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Socket" + }, + "geometry": { + "title": "Geometry", + "type": "string" + }, + "install_command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Install Command" + }, + "browser": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Browser" + }, + "blocker": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Blocker" + }, + "memory_available_mb": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Memory Available Mb" + }, + "memory_limit_mb": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Memory Limit Mb" + }, + "placement": { + "default": "gateway", + "title": "Placement", + "type": "string" + }, + "image_switch": { + "anyOf": [ + { + "$ref": "#/components/schemas/DisplayImageSwitch" + }, + { + "type": "null" + } + ], + "default": null + }, + "lease": { + "$ref": "#/components/schemas/DisplayLease" + }, + "profile_key": { + "title": "Profile Key", + "type": "string" + }, + "ticket": { + "title": "Ticket", + "type": "string" + }, + "path": { + "title": "Path", + "type": "string" + }, + "viewer_id": { + "title": "Viewer Id", + "type": "string" + } + }, + "required": [ + "profile", + "supported", + "installed", + "missing", + "running", + "geometry", + "lease", + "profile_key", + "ticket", + "path", + "viewer_id" + ], + "title": "DisplayObserveResult", + "type": "object" + }, + "DisplayStatus": { + "additionalProperties": false, + "description": "``tools/bot_desktop/runtime.py::DesktopStatus`` plus the lease and the profile it speaks for.", + "properties": { + "profile": { + "title": "Profile", + "type": "string" + }, + "supported": { + "title": "Supported", + "type": "boolean" + }, + "installed": { + "title": "Installed", + "type": "boolean" + }, + "missing": { + "items": { + "type": "string" + }, + "title": "Missing", + "type": "array" + }, + "running": { + "title": "Running", + "type": "boolean" + }, + "pid": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pid" + }, + "display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display" + }, + "socket": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Socket" + }, + "geometry": { + "title": "Geometry", + "type": "string" + }, + "install_command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Install Command" + }, + "browser": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Browser" + }, + "blocker": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Blocker" + }, + "memory_available_mb": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Memory Available Mb" + }, + "memory_limit_mb": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Memory Limit Mb" + }, + "placement": { + "default": "gateway", + "title": "Placement", + "type": "string" + }, + "image_switch": { + "anyOf": [ + { + "$ref": "#/components/schemas/DisplayImageSwitch" + }, + { + "type": "null" + } + ], + "default": null + }, + "lease": { + "$ref": "#/components/schemas/DisplayLease" + }, + "profile_key": { + "title": "Profile Key", + "type": "string" + } + }, + "required": [ + "profile", + "supported", + "installed", + "missing", + "running", + "geometry", + "lease", + "profile_key" + ], + "title": "DisplayStatus", + "type": "object" + }, + "DisplayStatusPayload": { + "additionalProperties": false, + "properties": { + "profile": { + "title": "Profile", + "type": "string" + }, + "supported": { + "title": "Supported", + "type": "boolean" + }, + "installed": { + "title": "Installed", + "type": "boolean" + }, + "missing": { + "items": { + "type": "string" + }, + "title": "Missing", + "type": "array" + }, + "running": { + "title": "Running", + "type": "boolean" + }, + "pid": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pid" + }, + "display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display" + }, + "socket": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Socket" + }, + "geometry": { + "title": "Geometry", + "type": "string" + }, + "install_command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Install Command" + }, + "browser": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Browser" + }, + "blocker": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Blocker" + }, + "memory_available_mb": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Memory Available Mb" + }, + "memory_limit_mb": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Memory Limit Mb" + }, + "placement": { + "default": "gateway", + "title": "Placement", + "type": "string" + }, + "image_switch": { + "anyOf": [ + { + "$ref": "#/components/schemas/DisplayImageSwitch" + }, + { + "type": "null" + } + ], + "default": null + }, + "lease": { + "$ref": "#/components/schemas/DisplayLease" + }, + "profile_key": { + "title": "Profile Key", + "type": "string" + } + }, + "required": [ + "profile", + "supported", + "installed", + "missing", + "running", + "geometry", + "lease", + "profile_key" + ], + "title": "DisplayStatusPayload", + "type": "object" + }, + "DisplayStopParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "force": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Force" + } + }, + "title": "DisplayStopParams", + "type": "object" + }, + "DisplayStopResult": { + "additionalProperties": false, + "properties": { + "profile": { + "title": "Profile", + "type": "string" + }, + "supported": { + "title": "Supported", + "type": "boolean" + }, + "installed": { + "title": "Installed", + "type": "boolean" + }, + "missing": { + "items": { + "type": "string" + }, + "title": "Missing", + "type": "array" + }, + "running": { + "title": "Running", + "type": "boolean" + }, + "pid": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pid" + }, + "display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display" + }, + "socket": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Socket" + }, + "geometry": { + "title": "Geometry", + "type": "string" + }, + "install_command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Install Command" + }, + "browser": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Browser" + }, + "blocker": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Blocker" + }, + "memory_available_mb": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Memory Available Mb" + }, + "memory_limit_mb": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Memory Limit Mb" + }, + "placement": { + "default": "gateway", + "title": "Placement", + "type": "string" + }, + "image_switch": { + "anyOf": [ + { + "$ref": "#/components/schemas/DisplayImageSwitch" + }, + { + "type": "null" + } + ], + "default": null + }, + "lease": { + "$ref": "#/components/schemas/DisplayLease" + }, + "profile_key": { + "title": "Profile Key", + "type": "string" + }, + "stopped": { + "title": "Stopped", + "type": "boolean" + } + }, + "required": [ + "profile", + "supported", + "installed", + "missing", + "running", + "geometry", + "lease", + "profile_key", + "stopped" + ], + "title": "DisplayStopResult", + "type": "object" + }, + "DisplaySwitchSandboxImageParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "approve": { + "default": true, + "title": "Approve", + "type": "boolean" + } + }, + "title": "DisplaySwitchSandboxImageParams", + "type": "object" + }, + "DisplaySwitchSandboxImageResult": { + "additionalProperties": false, + "properties": { + "profile": { + "title": "Profile", + "type": "string" + }, + "supported": { + "title": "Supported", + "type": "boolean" + }, + "installed": { + "title": "Installed", + "type": "boolean" + }, + "missing": { + "items": { + "type": "string" + }, + "title": "Missing", + "type": "array" + }, + "running": { + "title": "Running", + "type": "boolean" + }, + "pid": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pid" + }, + "display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display" + }, + "socket": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Socket" + }, + "geometry": { + "title": "Geometry", + "type": "string" + }, + "install_command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Install Command" + }, + "browser": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Browser" + }, + "blocker": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Blocker" + }, + "memory_available_mb": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Memory Available Mb" + }, + "memory_limit_mb": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Memory Limit Mb" + }, + "placement": { + "default": "gateway", + "title": "Placement", + "type": "string" + }, + "image_switch": { + "anyOf": [ + { + "$ref": "#/components/schemas/DisplayImageSwitch" + }, + { + "type": "null" + } + ], + "default": null + }, + "lease": { + "$ref": "#/components/schemas/DisplayLease" + }, + "profile_key": { + "title": "Profile Key", + "type": "string" + }, + "docker_image": { + "title": "Docker Image", + "type": "string" + } + }, + "required": [ + "profile", + "supported", + "installed", + "missing", + "running", + "geometry", + "lease", + "profile_key", + "docker_image" + ], + "title": "DisplaySwitchSandboxImageResult", + "type": "object" + }, + "DisplayThumbnailResult": { + "additionalProperties": false, + "description": "``data_url`` is null while the screen is stopped or while a human holds the lease\n(``suppressed``): the frame may show what they are typing.", + "properties": { + "data_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Data Url" + }, + "suppressed": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Suppressed" + } + }, + "title": "DisplayThumbnailResult", + "type": "object" + }, + "EmptyRequestParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + } + }, + "required": [ + "session_id" + ], + "title": "EmptyRequestParams", + "type": "object" + }, + "ErrorPayload": { + "additionalProperties": false, + "description": "Every ``_emit(\"error\", \u2026)`` site sets exactly ``message``.", + "properties": { + "message": { + "title": "Message", + "type": "string" + } + }, + "required": [ + "message" + ], + "title": "ErrorPayload", + "type": "object" + }, + "ErrorSurface": { + "additionalProperties": true, + "description": "``agent/error_surface.py::_surface`` \u2014 advisory {layer, code, retryable} (+ identity, + auth hint,\n+ ``resets_at`` epoch seconds when the provider named when its limit lifts).", + "properties": { + "layer": { + "title": "Layer", + "type": "string" + }, + "code": { + "title": "Code", + "type": "string" + }, + "retryable": { + "title": "Retryable", + "type": "boolean" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" + }, + "resets_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Resets At" + } + }, + "required": [ + "layer", + "code", + "retryable" + ], + "title": "ErrorSurface", + "type": "object" + }, + "FailedDelegation": { + "additionalProperties": false, + "description": "``async_delegation.failed_delegations_for_session`` row: one failed task of an async delegation.", + "properties": { + "delegation_id": { + "title": "Delegation Id", + "type": "string" + }, + "task_index": { + "default": 0, + "title": "Task Index", + "type": "integer" + }, + "status": { + "title": "Status", + "type": "string" + }, + "goal": { + "default": "", + "title": "Goal", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "dispatched_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Dispatched At" + }, + "completed_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Completed At" + } + }, + "required": [ + "delegation_id", + "status" + ], + "title": "FailedDelegation", + "type": "object" + }, + "FileAttachParams": { + "additionalProperties": false, + "description": "``path`` when the file is gateway-visible, else ``data_url`` carries the bytes; ``name`` labels\nan uploaded file.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Path" + }, + "data_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Data Url" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + } + }, + "required": [ + "session_id" + ], + "title": "FileAttachParams", + "type": "object" + }, + "FileAttachResult": { + "additionalProperties": false, + "properties": { + "attached": { + "title": "Attached", + "type": "boolean" + }, + "name": { + "title": "Name", + "type": "string" + }, + "path": { + "title": "Path", + "type": "string" + }, + "ref_path": { + "title": "Ref Path", + "type": "string" + }, + "ref_text": { + "title": "Ref Text", + "type": "string" + }, + "uploaded": { + "title": "Uploaded", + "type": "boolean" + } + }, + "required": [ + "attached", + "name", + "path", + "ref_path", + "ref_text", + "uploaded" + ], + "title": "FileAttachResult", + "type": "object" + }, + "ForeignSessionRow": { + "additionalProperties": false, + "description": "``hermes_cli/foreign_sessions_browser.py::list_foreign_sessions`` \u2014 ``id`` is an opaque\nhandle, never a path.", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "source": { + "$ref": "#/components/schemas/ForeignSource" + }, + "label": { + "title": "Label", + "type": "string" + }, + "title": { + "default": "", + "title": "Title", + "type": "string" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + }, + "mtime": { + "title": "Mtime", + "type": "number" + }, + "turn_count": { + "default": 0, + "title": "Turn Count", + "type": "integer" + }, + "excerpt": { + "default": "", + "title": "Excerpt", + "type": "string" + } + }, + "required": [ + "id", + "source", + "label", + "mtime" + ], + "title": "ForeignSessionRow", + "type": "object" + }, + "ForeignSource": { + "enum": [ + "claude", + "codex" + ], + "title": "ForeignSource", + "type": "string" + }, + "ForeignTurn": { + "additionalProperties": false, + "properties": { + "role": { + "title": "Role", + "type": "string" + }, + "content": { + "title": "Content", + "type": "string" + } + }, + "required": [ + "role", + "content" + ], + "title": "ForeignTurn", + "type": "object" + }, + "FreeTierAckNoticeResult": { + "additionalProperties": false, + "properties": { + "acked": { + "title": "Acked", + "type": "boolean" + } + }, + "required": [ + "acked" + ], + "title": "FreeTierAckNoticeResult", + "type": "object" + }, + "FreeTierProvisionResult": { + "additionalProperties": false, + "properties": { + "has_guest": { + "title": "Has Guest", + "type": "boolean" + }, + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error Code" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retryable" + }, + "retry_after": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retry After" + } + }, + "required": [ + "has_guest", + "enabled" + ], + "title": "FreeTierProvisionResult", + "type": "object" + }, + "FreeTierStatusResult": { + "additionalProperties": false, + "description": "``available`` = an identity exists AND the tier is on; whether inference runs on it is\n``setup.runtime_check.free_tier_route``'s question.", + "properties": { + "has_guest": { + "title": "Has Guest", + "type": "boolean" + }, + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "available": { + "title": "Available", + "type": "boolean" + }, + "notice_pending": { + "title": "Notice Pending", + "type": "boolean" + }, + "model": { + "title": "Model", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error Code" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retryable" + }, + "retry_after": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retry After" + } + }, + "required": [ + "has_guest", + "enabled", + "available", + "notice_pending", + "model", + "label" + ], + "title": "FreeTierStatusResult", + "type": "object" + }, + "GatewayCapabilitiesResult": { + "additionalProperties": false, + "properties": { + "per_session_exclusive_submit": { + "title": "Per Session Exclusive Submit", + "type": "boolean" + } + }, + "required": [ + "per_session_exclusive_submit" + ], + "title": "GatewayCapabilitiesResult", + "type": "object" + }, + "GatewayReadyPayload": { + "additionalProperties": false, + "description": "``tui_gateway/entry.py`` (stdio) / ``tui_gateway/ws.py`` (WebSocket) first frame.", + "properties": { + "skin": { + "$ref": "#/components/schemas/SkinPayload" + }, + "change_events": { + "title": "Change Events", + "type": "boolean" + }, + "replay_epoch": { + "title": "Replay Epoch", + "type": "string" + }, + "heartbeat": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Heartbeat" + } + }, + "required": [ + "skin", + "change_events", + "replay_epoch" + ], + "title": "GatewayReadyPayload", + "type": "object" + }, + "GoalContractSnapshot": { + "additionalProperties": false, + "description": "``hermes_cli/goals.py::GoalContract.to_dict``.", + "properties": { + "outcome": { + "default": "", + "title": "Outcome", + "type": "string" + }, + "verification": { + "default": "", + "title": "Verification", + "type": "string" + }, + "constraints": { + "default": "", + "title": "Constraints", + "type": "string" + }, + "boundaries": { + "default": "", + "title": "Boundaries", + "type": "string" + }, + "stop_when": { + "default": "", + "title": "Stop When", + "type": "string" + } + }, + "title": "GoalContractSnapshot", + "type": "object" + }, + "GoalGateSnapshot": { + "additionalProperties": false, + "properties": { + "command": { + "title": "Command", + "type": "string" + }, + "timeout_seconds": { + "title": "Timeout Seconds", + "type": "integer" + }, + "max_retries": { + "title": "Max Retries", + "type": "integer" + }, + "attempts": { + "title": "Attempts", + "type": "integer" + }, + "last_exit_code": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Exit Code" + } + }, + "required": [ + "command", + "timeout_seconds", + "max_retries", + "attempts" + ], + "title": "GoalGateSnapshot", + "type": "object" + }, + "GoalSnapshot": { + "additionalProperties": false, + "description": "``methods_session_control.py::_safe_goal_snapshot`` \u2014 the frontend-safe GoalState subset.", + "properties": { + "title": { + "title": "Title", + "type": "string" + }, + "status": { + "title": "Status", + "type": "string" + }, + "turns_used": { + "title": "Turns Used", + "type": "integer" + }, + "max_turns": { + "title": "Max Turns", + "type": "integer" + }, + "contract": { + "$ref": "#/components/schemas/GoalContractSnapshot" + }, + "subgoals": { + "items": { + "type": "string" + }, + "title": "Subgoals", + "type": "array" + }, + "gates": { + "items": { + "$ref": "#/components/schemas/GoalGateSnapshot" + }, + "title": "Gates", + "type": "array" + }, + "created_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Created At" + }, + "updated_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Updated At" + }, + "paused_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Paused Reason" + }, + "last_verdict": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Verdict" + }, + "last_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Reason" + }, + "wait_barrier": { + "anyOf": [ + { + "discriminator": { + "mapping": { + "pid": "#/components/schemas/WaitBarrierTarget", + "session": "#/components/schemas/WaitBarrierTarget", + "until": "#/components/schemas/WaitBarrierUntil" + }, + "propertyName": "type" + }, + "oneOf": [ + { + "$ref": "#/components/schemas/WaitBarrierUntil" + }, + { + "$ref": "#/components/schemas/WaitBarrierTarget" + } + ] + }, + { + "type": "null" + } + ], + "default": null, + "title": "Wait Barrier" + } + }, + "required": [ + "title", + "status", + "turns_used", + "max_turns", + "contract", + "subgoals", + "gates" + ], + "title": "GoalSnapshot", + "type": "object" + }, + "GroupsApproveParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "title": "Room Id", + "type": "string" + }, + "member_id": { + "title": "Member Id", + "type": "string" + }, + "task_id": { + "title": "Task Id", + "type": "string" + }, + "execution_generation": { + "title": "Execution Generation", + "type": "integer" + }, + "choice": { + "$ref": "#/components/schemas/ApprovalChoice" + }, + "request_id": { + "title": "Request Id", + "type": "string" + } + }, + "required": [ + "room_id", + "member_id", + "task_id", + "execution_generation", + "choice", + "request_id" + ], + "title": "GroupsApproveParams", + "type": "object" + }, + "GroupsApproveResult": { + "additionalProperties": false, + "description": "``result`` is the local ``approval.respond`` answer or the peer's run-action receipt.", + "properties": { + "approved": { + "default": true, + "title": "Approved", + "type": "boolean" + }, + "result": { + "additionalProperties": true, + "title": "Result", + "type": "object" + } + }, + "required": [ + "result" + ], + "title": "GroupsApproveResult", + "type": "object" + }, + "GroupsCapabilitiesParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "GroupsCapabilitiesParams", + "type": "object" + }, + "GroupsCapabilitiesResult": { + "additionalProperties": false, + "properties": { + "protocol_version": { + "title": "Protocol Version", + "type": "integer" + }, + "driver": { + "title": "Driver", + "type": "boolean" + }, + "persistent_process": { + "title": "Persistent Process", + "type": "boolean" + }, + "authority_gateway_id": { + "title": "Authority Gateway Id", + "type": "string" + }, + "room_link": { + "$ref": "#/components/schemas/RoomLinkStatus" + }, + "features": { + "items": { + "type": "string" + }, + "title": "Features", + "type": "array" + }, + "methods": { + "items": { + "type": "string" + }, + "title": "Methods", + "type": "array" + }, + "max_log_limit": { + "title": "Max Log Limit", + "type": "integer" + } + }, + "required": [ + "protocol_version", + "driver", + "persistent_process", + "authority_gateway_id", + "room_link", + "features", + "methods", + "max_log_limit" + ], + "title": "GroupsCapabilitiesResult", + "type": "object" + }, + "GroupsCreateParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "title": "Room Id", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "members": { + "items": { + "$ref": "#/components/schemas/RoomMemberInput" + }, + "title": "Members", + "type": "array" + }, + "authority_gateway_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Authority Gateway Id" + } + }, + "required": [ + "room_id", + "name", + "members" + ], + "title": "GroupsCreateParams", + "type": "object" + }, + "GroupsCreateResult": { + "additionalProperties": false, + "properties": { + "room": { + "$ref": "#/components/schemas/Room" + } + }, + "required": [ + "room" + ], + "title": "GroupsCreateResult", + "type": "object" + }, + "GroupsDemoteParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "title": "Room Id", + "type": "string" + }, + "observed_gateway_id": { + "title": "Observed Gateway Id", + "type": "string" + }, + "observed_epoch": { + "title": "Observed Epoch", + "type": "integer" + } + }, + "required": [ + "room_id", + "observed_gateway_id", + "observed_epoch" + ], + "title": "GroupsDemoteParams", + "type": "object" + }, + "GroupsDemoteResult": { + "additionalProperties": false, + "properties": { + "room_id": { + "title": "Room Id", + "type": "string" + }, + "authority_gateway_id": { + "title": "Authority Gateway Id", + "type": "string" + }, + "authority_epoch": { + "title": "Authority Epoch", + "type": "integer" + }, + "idempotent": { + "title": "Idempotent", + "type": "boolean" + } + }, + "required": [ + "room_id", + "authority_gateway_id", + "authority_epoch", + "idempotent" + ], + "title": "GroupsDemoteResult", + "type": "object" + }, + "GroupsDisbandParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "title": "Room Id", + "type": "string" + }, + "cancel_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cancel Id" + } + }, + "required": [ + "room_id" + ], + "title": "GroupsDisbandParams", + "type": "object" + }, + "GroupsDisbandResult": { + "additionalProperties": false, + "properties": { + "tombstone": { + "$ref": "#/components/schemas/RoomTombstone" + } + }, + "required": [ + "tombstone" + ], + "title": "GroupsDisbandResult", + "type": "object" + }, + "GroupsListParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "include_disbanded": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Include Disbanded" + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Limit" + }, + "offset": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Offset" + } + }, + "title": "GroupsListParams", + "type": "object" + }, + "GroupsListResult": { + "additionalProperties": false, + "properties": { + "rooms": { + "items": { + "$ref": "#/components/schemas/Room" + }, + "title": "Rooms", + "type": "array" + }, + "next_offset": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Next Offset" + } + }, + "required": [ + "rooms" + ], + "title": "GroupsListResult", + "type": "object" + }, + "GroupsLogParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "title": "Room Id", + "type": "string" + }, + "since_seq": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Since Seq" + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Limit" + }, + "include_disbanded": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Include Disbanded" + } + }, + "required": [ + "room_id" + ], + "title": "GroupsLogParams", + "type": "object" + }, + "GroupsLogResult": { + "additionalProperties": false, + "description": "``gateway/hosted_rooms.py::read_events`` page \u2014 also the ``page`` ``groups.replicate`` ingests.", + "properties": { + "events": { + "items": { + "$ref": "#/components/schemas/RoomEvent" + }, + "title": "Events", + "type": "array" + }, + "cursor": { + "title": "Cursor", + "type": "integer" + }, + "latest_seq": { + "title": "Latest Seq", + "type": "integer" + }, + "has_more": { + "title": "Has More", + "type": "boolean" + }, + "authority": { + "$ref": "#/components/schemas/RoomAuthority" + } + }, + "required": [ + "events", + "cursor", + "latest_seq", + "has_more", + "authority" + ], + "title": "GroupsLogResult", + "type": "object" + }, + "GroupsPeerInviteParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Room Id" + }, + "home_install_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Home Install Id" + }, + "authority_gateway_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Authority Gateway Id" + }, + "authority_epoch": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Authority Epoch" + }, + "member_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Member Id" + }, + "grant_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Grant Id" + }, + "ttl_seconds": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ttl Seconds" + } + }, + "title": "GroupsPeerInviteParams", + "type": "object" + }, + "GroupsPeerInviteResult": { + "additionalProperties": false, + "properties": { + "grant": { + "title": "Grant", + "type": "string" + }, + "target_profile": { + "title": "Target Profile", + "type": "string" + }, + "catalog": { + "$ref": "#/components/schemas/RoomLinkCatalog" + }, + "endpoint": { + "$ref": "#/components/schemas/RoomLinkEndpoint" + } + }, + "required": [ + "grant", + "target_profile", + "catalog", + "endpoint" + ], + "title": "GroupsPeerInviteResult", + "type": "object" + }, + "GroupsPeerRegisterParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "title": "Room Id", + "type": "string" + }, + "member_id": { + "title": "Member Id", + "type": "string" + }, + "target_url": { + "title": "Target Url", + "type": "string" + }, + "target_profile": { + "title": "Target Profile", + "type": "string" + }, + "grant": { + "title": "Grant", + "type": "string" + }, + "catalog": { + "additionalProperties": true, + "title": "Catalog", + "type": "object" + }, + "cancellation_scope_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cancellation Scope Id" + }, + "trace_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Trace Id" + } + }, + "required": [ + "room_id", + "member_id", + "target_url", + "target_profile", + "grant", + "catalog" + ], + "title": "GroupsPeerRegisterParams", + "type": "object" + }, + "GroupsPeerRegisterResult": { + "additionalProperties": false, + "properties": { + "registered": { + "default": true, + "title": "Registered", + "type": "boolean" + }, + "mode": { + "title": "Mode", + "type": "string" + }, + "transport_security": { + "title": "Transport Security", + "type": "string" + }, + "target_install_id": { + "title": "Target Install Id", + "type": "string" + }, + "target_profile": { + "title": "Target Profile", + "type": "string" + } + }, + "required": [ + "mode", + "transport_security", + "target_install_id", + "target_profile" + ], + "title": "GroupsPeerRegisterResult", + "type": "object" + }, + "GroupsPeerRevokeParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "grant": { + "title": "Grant", + "type": "string" + } + }, + "required": [ + "grant" + ], + "title": "GroupsPeerRevokeParams", + "type": "object" + }, + "GroupsPeerRevokeResult": { + "additionalProperties": false, + "properties": { + "revoked": { + "default": true, + "title": "Revoked", + "type": "boolean" + } + }, + "title": "GroupsPeerRevokeResult", + "type": "object" + }, + "GroupsPromoteParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "title": "Room Id", + "type": "string" + }, + "confirm": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Confirm" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + } + }, + "required": [ + "room_id" + ], + "title": "GroupsPromoteParams", + "type": "object" + }, + "GroupsPromoteResult": { + "additionalProperties": false, + "properties": { + "room_id": { + "title": "Room Id", + "type": "string" + }, + "authority_gateway_id": { + "title": "Authority Gateway Id", + "type": "string" + }, + "authority_epoch": { + "title": "Authority Epoch", + "type": "integer" + }, + "previous_gateway_id": { + "title": "Previous Gateway Id", + "type": "string" + }, + "previous_epoch": { + "title": "Previous Epoch", + "type": "integer" + }, + "claim_seq": { + "title": "Claim Seq", + "type": "integer" + }, + "latest_seq": { + "title": "Latest Seq", + "type": "integer" + } + }, + "required": [ + "room_id", + "authority_gateway_id", + "authority_epoch", + "previous_gateway_id", + "previous_epoch", + "claim_seq", + "latest_seq" + ], + "title": "GroupsPromoteResult", + "type": "object" + }, + "GroupsRenameParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "title": "Room Id", + "type": "string" + }, + "event_id": { + "title": "Event Id", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + } + }, + "required": [ + "room_id", + "event_id", + "name" + ], + "title": "GroupsRenameParams", + "type": "object" + }, + "GroupsRenameResult": { + "additionalProperties": false, + "properties": { + "room": { + "$ref": "#/components/schemas/Room" + } + }, + "required": [ + "room" + ], + "title": "GroupsRenameResult", + "type": "object" + }, + "GroupsReplicaStateParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "title": "Room Id", + "type": "string" + } + }, + "required": [ + "room_id" + ], + "title": "GroupsReplicaStateParams", + "type": "object" + }, + "GroupsReplicaStateResult": { + "additionalProperties": false, + "properties": { + "room_id": { + "title": "Room Id", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "members": { + "items": { + "$ref": "#/components/schemas/RoomMember" + }, + "title": "Members", + "type": "array" + }, + "authority": { + "$ref": "#/components/schemas/RoomAuthority" + }, + "last_seq": { + "title": "Last Seq", + "type": "integer" + }, + "latest_seq": { + "title": "Latest Seq", + "type": "integer" + }, + "event_bytes": { + "title": "Event Bytes", + "type": "integer" + }, + "created_at": { + "title": "Created At", + "type": "number" + }, + "updated_at": { + "title": "Updated At", + "type": "number" + } + }, + "required": [ + "room_id", + "name", + "members", + "authority", + "last_seq", + "latest_seq", + "event_bytes", + "created_at", + "updated_at" + ], + "title": "GroupsReplicaStateResult", + "type": "object" + }, + "GroupsReplicateParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "title": "Room Id", + "type": "string" + }, + "room_name": { + "title": "Room Name", + "type": "string" + }, + "members": { + "items": { + "$ref": "#/components/schemas/RoomMemberInput" + }, + "title": "Members", + "type": "array" + }, + "page": { + "additionalProperties": true, + "title": "Page", + "type": "object" + } + }, + "required": [ + "room_id", + "room_name", + "members", + "page" + ], + "title": "GroupsReplicateParams", + "type": "object" + }, + "GroupsReplicateResult": { + "additionalProperties": false, + "properties": { + "room_id": { + "title": "Room Id", + "type": "string" + }, + "stored_seq": { + "title": "Stored Seq", + "type": "integer" + }, + "ingested": { + "title": "Ingested", + "type": "integer" + }, + "authority": { + "$ref": "#/components/schemas/RoomAuthority" + }, + "caught_up": { + "title": "Caught Up", + "type": "boolean" + } + }, + "required": [ + "room_id", + "stored_seq", + "ingested", + "authority", + "caught_up" + ], + "title": "GroupsReplicateResult", + "type": "object" + }, + "GroupsRetryParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "title": "Room Id", + "type": "string" + }, + "task_id": { + "title": "Task Id", + "type": "string" + } + }, + "required": [ + "room_id", + "task_id" + ], + "title": "GroupsRetryParams", + "type": "object" + }, + "GroupsRetryResult": { + "additionalProperties": false, + "properties": { + "retried": { + "default": true, + "title": "Retried", + "type": "boolean" + }, + "task": { + "$ref": "#/components/schemas/RoomTaskReceipt" + } + }, + "required": [ + "task" + ], + "title": "GroupsRetryResult", + "type": "object" + }, + "GroupsSendParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "title": "Room Id", + "type": "string" + }, + "event_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Event Id" + }, + "payload": { + "additionalProperties": true, + "title": "Payload", + "type": "object" + } + }, + "required": [ + "room_id", + "payload" + ], + "title": "GroupsSendParams", + "type": "object" + }, + "GroupsSendResult": { + "additionalProperties": false, + "properties": { + "event": { + "$ref": "#/components/schemas/RoomEvent" + }, + "client_event_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Client Event Id" + }, + "accepted": { + "default": true, + "title": "Accepted", + "type": "boolean" + }, + "driver_started": { + "default": true, + "title": "Driver Started", + "type": "boolean" + } + }, + "required": [ + "event" + ], + "title": "GroupsSendResult", + "type": "object" + }, + "GroupsStateParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "title": "Room Id", + "type": "string" + }, + "include_disbanded": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Include Disbanded" + } + }, + "required": [ + "room_id" + ], + "title": "GroupsStateParams", + "type": "object" + }, + "GroupsStateResult": { + "additionalProperties": false, + "properties": { + "room": { + "$ref": "#/components/schemas/Room" + }, + "driver_status": { + "anyOf": [ + { + "$ref": "#/components/schemas/RoomDriverStatus" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "room" + ], + "title": "GroupsStateResult", + "type": "object" + }, + "GroupsStopParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "room_id": { + "title": "Room Id", + "type": "string" + }, + "cancel_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cancel Id" + } + }, + "required": [ + "room_id" + ], + "title": "GroupsStopParams", + "type": "object" + }, + "GroupsStopResult": { + "additionalProperties": false, + "properties": { + "cancelled": { + "title": "Cancelled", + "type": "integer" + } + }, + "required": [ + "cancelled" + ], + "title": "GroupsStopResult", + "type": "object" + }, + "HandoffFailParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + } + }, + "required": [ + "session_id" + ], + "title": "HandoffFailParams", + "type": "object" + }, + "HandoffFailResult": { + "additionalProperties": false, + "description": "``failed`` false when the watcher already claimed the row; ``state`` is what it is now.", + "properties": { + "failed": { + "title": "Failed", + "type": "boolean" + }, + "state": { + "title": "State", + "type": "string" + } + }, + "required": [ + "failed", + "state" + ], + "title": "HandoffFailResult", + "type": "object" + }, + "HandoffRequestParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "platform": { + "title": "Platform", + "type": "string" + } + }, + "required": [ + "session_id", + "platform" + ], + "title": "HandoffRequestParams", + "type": "object" + }, + "HandoffRequestResult": { + "additionalProperties": false, + "properties": { + "queued": { + "title": "Queued", + "type": "boolean" + }, + "session_key": { + "title": "Session Key", + "type": "string" + }, + "platform": { + "title": "Platform", + "type": "string" + }, + "home_name": { + "title": "Home Name", + "type": "string" + } + }, + "required": [ + "queued", + "session_key", + "platform", + "home_name" + ], + "title": "HandoffRequestResult", + "type": "object" + }, + "HandoffStateResult": { + "additionalProperties": false, + "description": "``state`` is pending | running | completed | failed, or '' when nothing was requested.", + "properties": { + "state": { + "title": "State", + "type": "string" + }, + "platform": { + "title": "Platform", + "type": "string" + }, + "error": { + "title": "Error", + "type": "string" + } + }, + "required": [ + "state", + "platform", + "error" + ], + "title": "HandoffStateResult", + "type": "object" + }, + "HeartbeatSnapshot": { + "additionalProperties": false, + "properties": { + "prompt": { + "title": "Prompt", + "type": "string" + }, + "status": { + "title": "Status", + "type": "string" + }, + "interval_seconds": { + "title": "Interval Seconds", + "type": "integer" + }, + "created_at": { + "title": "Created At", + "type": "number" + }, + "last_fired_at": { + "title": "Last Fired At", + "type": "number" + }, + "fire_count": { + "title": "Fire Count", + "type": "integer" + } + }, + "required": [ + "prompt", + "status", + "interval_seconds", + "created_at", + "last_fired_at", + "fire_count" + ], + "title": "HeartbeatSnapshot", + "type": "object" + }, + "I18nCatalogParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "lang": { + "title": "Lang", + "type": "string" + }, + "surface": { + "$ref": "#/components/schemas/LocaleSurface", + "default": "core" + } + }, + "required": [ + "lang" + ], + "title": "I18nCatalogParams", + "type": "object" + }, + "I18nCatalogResult": { + "additionalProperties": false, + "description": "``messages`` is ONLY the pack + user-overlay layer for that surface (flat dotted keys); the\nclient merges it over its bundled ``en``/````. ``lang`` is the canonical id the request\nresolved to (``pt-BR`` \u2192 ``pt-br``; an unknown id resolves to ``en`` with an empty layer).", + "properties": { + "lang": { + "title": "Lang", + "type": "string" + }, + "surface": { + "$ref": "#/components/schemas/LocaleSurface" + }, + "messages": { + "additionalProperties": { + "type": "string" + }, + "title": "Messages", + "type": "object" + } + }, + "required": [ + "lang", + "surface", + "messages" + ], + "title": "I18nCatalogResult", + "type": "object" + }, + "I18nLanguagesResult": { + "additionalProperties": false, + "properties": { + "languages": { + "items": { + "$ref": "#/components/schemas/LanguageOption" + }, + "title": "Languages", + "type": "array" + } + }, + "required": [ + "languages" + ], + "title": "I18nLanguagesResult", + "type": "object" + }, + "ImageAttachBytesParams": { + "additionalProperties": false, + "description": "``content_base64`` (or the ``data`` alias) carries the bytes; ``filename`` / ``ext`` only hint\nthe extension \u2014 magic bytes decide.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "content_base64": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Content Base64" + }, + "data": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Data" + }, + "filename": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Filename" + }, + "ext": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ext" + } + }, + "required": [ + "session_id" + ], + "title": "ImageAttachBytesParams", + "type": "object" + }, + "ImageAttachParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "path": { + "title": "Path", + "type": "string" + } + }, + "required": [ + "session_id", + "path" + ], + "title": "ImageAttachParams", + "type": "object" + }, + "ImageDetachParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "path": { + "title": "Path", + "type": "string" + } + }, + "required": [ + "session_id", + "path" + ], + "title": "ImageDetachParams", + "type": "object" + }, + "ImageDetachResult": { + "additionalProperties": false, + "properties": { + "detached": { + "title": "Detached", + "type": "boolean" + }, + "count": { + "title": "Count", + "type": "integer" + } + }, + "required": [ + "detached", + "count" + ], + "title": "ImageDetachResult", + "type": "object" + }, + "ImageGenerateParams": { + "additionalProperties": false, + "properties": { + "prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Prompt" + }, + "aspect_ratio": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Aspect Ratio" + }, + "probe": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Probe" + }, + "max_bytes": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Max Bytes" + } + }, + "title": "ImageGenerateParams", + "type": "object" + }, + "ImageGenerateResult": { + "additionalProperties": false, + "description": "``probe`` answers ``{available}`` alone; ``image_data`` (data URL) is omitted when the\ndownload failed or exceeded ``max_bytes`` so callers fall back to ``image``.", + "properties": { + "available": { + "title": "Available", + "type": "boolean" + }, + "success": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Success" + }, + "image": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Image" + }, + "image_data": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Image Data" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + } + }, + "required": [ + "available" + ], + "title": "ImageGenerateResult", + "type": "object" + }, + "InflightTurn": { + "additionalProperties": false, + "description": "``session_auto_continue._inflight_snapshot``: the live (or retained failed) turn a reconnecting\nclient rebuilds its bubbles from.", + "properties": { + "assistant": { + "default": "", + "title": "Assistant", + "type": "string" + }, + "streaming": { + "default": false, + "title": "Streaming", + "type": "boolean" + }, + "user": { + "default": "", + "title": "User", + "type": "string" + }, + "display_kind": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display Kind" + }, + "display_metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display Metadata" + }, + "corrections": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Corrections" + }, + "correction_offsets": { + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Correction Offsets" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" + }, + "recoverable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Recoverable" + }, + "error_surface": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error Surface" + } + }, + "title": "InflightTurn", + "type": "object" + }, + "InputDetectDropParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Text" + } + }, + "required": [ + "session_id" + ], + "title": "InputDetectDropParams", + "type": "object" + }, + "InputDetectDropResult": { + "additionalProperties": false, + "description": "``matched: false`` alone when the text is not a drop; an image drop is queued immediately\n(``is_image`` + ``count``), a file drop only yields the ``text`` to insert.", + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "width": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Width" + }, + "height": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Height" + }, + "token_estimate": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Token Estimate" + }, + "matched": { + "title": "Matched", + "type": "boolean" + }, + "is_image": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Is Image" + }, + "path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Path" + }, + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Count" + }, + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Text" + } + }, + "required": [ + "matched" + ], + "title": "InputDetectDropResult", + "type": "object" + }, + "InsightsGetParams": { + "additionalProperties": false, + "properties": { + "days": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Days" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "InsightsGetParams", + "type": "object" + }, + "InsightsGetResult": { + "additionalProperties": false, + "properties": { + "days": { + "title": "Days", + "type": "integer" + }, + "sessions": { + "title": "Sessions", + "type": "integer" + }, + "messages": { + "title": "Messages", + "type": "integer" + } + }, + "required": [ + "days", + "sessions", + "messages" + ], + "title": "InsightsGetResult", + "type": "object" + }, + "InterruptStatus": { + "enum": [ + "interrupted", + "not_interrupted" + ], + "title": "InterruptStatus", + "type": "string" + }, + "LanguageOption": { + "additionalProperties": false, + "description": "``agent.i18n_languages.language_options`` row. ``source`` is ``bundled``, ``overlay`` or\n``plugin:`` \u2014 the highest layer that supplies the language.", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "endonym": { + "title": "Endonym", + "type": "string" + }, + "rtl": { + "title": "Rtl", + "type": "boolean" + }, + "source": { + "title": "Source", + "type": "string" + } + }, + "required": [ + "id", + "endonym", + "rtl", + "source" + ], + "title": "LanguageOption", + "type": "object" + }, + "LayoutApplyPayload": { + "additionalProperties": true, + "description": "``tools/apply_layout_tool.py``.", + "properties": { + "preset": { + "title": "Preset", + "type": "string" + } + }, + "required": [ + "preset" + ], + "title": "LayoutApplyPayload", + "type": "object" + }, + "LearningAxis": { + "additionalProperties": false, + "properties": { + "start": { + "title": "Start", + "type": "string" + }, + "end": { + "title": "End", + "type": "string" + } + }, + "required": [ + "start", + "end" + ], + "title": "LearningAxis", + "type": "object" + }, + "LearningBucketRow": { + "additionalProperties": false, + "properties": { + "index": { + "title": "Index", + "type": "integer" + }, + "label": { + "title": "Label", + "type": "string" + }, + "date": { + "title": "Date", + "type": "string" + }, + "skills": { + "title": "Skills", + "type": "integer" + }, + "memories": { + "title": "Memories", + "type": "integer" + }, + "total": { + "title": "Total", + "type": "integer" + }, + "category": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Category" + }, + "color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Color" + }, + "nodes": { + "items": { + "$ref": "#/components/schemas/LearningNodeRow" + }, + "title": "Nodes", + "type": "array" + } + }, + "required": [ + "index", + "label", + "date", + "skills", + "memories", + "total", + "nodes" + ], + "title": "LearningBucketRow", + "type": "object" + }, + "LearningDetailResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + }, + "kind": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kind" + }, + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Id" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Label" + }, + "content": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Content" + } + }, + "required": [ + "ok" + ], + "title": "LearningDetailResult", + "type": "object" + }, + "LearningEditParams": { + "additionalProperties": false, + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Id" + }, + "content": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Content" + } + }, + "title": "LearningEditParams", + "type": "object" + }, + "LearningFrame": { + "additionalProperties": false, + "description": "``agent.learning_graph_render.render_graph`` projection; ``grid`` rows are lists of\n``[text, styleKey, alpha?, hexOverride?]`` runs.", + "properties": { + "reveal": { + "title": "Reveal", + "type": "number" + }, + "date": { + "title": "Date", + "type": "string" + }, + "visible": { + "title": "Visible", + "type": "integer" + }, + "grid": { + "items": { + "items": {}, + "type": "array" + }, + "title": "Grid", + "type": "array" + }, + "labels": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Labels", + "type": "array" + } + }, + "required": [ + "reveal", + "date", + "visible", + "grid" + ], + "title": "LearningFrame", + "type": "object" + }, + "LearningFramesParams": { + "additionalProperties": false, + "properties": { + "cols": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cols" + }, + "rows": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Rows" + }, + "frames": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Frames" + } + }, + "title": "LearningFramesParams", + "type": "object" + }, + "LearningFramesResult": { + "additionalProperties": false, + "properties": { + "frames": { + "items": { + "$ref": "#/components/schemas/LearningFrame" + }, + "title": "Frames", + "type": "array" + }, + "legend": { + "items": { + "$ref": "#/components/schemas/LearningLegendItem" + }, + "title": "Legend", + "type": "array" + }, + "categories": { + "items": { + "$ref": "#/components/schemas/LearningLegendItem" + }, + "title": "Categories", + "type": "array" + }, + "buckets": { + "items": { + "$ref": "#/components/schemas/LearningBucketRow" + }, + "title": "Buckets", + "type": "array" + }, + "summary": { + "items": { + "type": "string" + }, + "title": "Summary", + "type": "array" + }, + "axis": { + "$ref": "#/components/schemas/LearningAxis" + }, + "count": { + "title": "Count", + "type": "integer" + }, + "cols": { + "title": "Cols", + "type": "integer" + }, + "rows": { + "title": "Rows", + "type": "integer" + } + }, + "required": [ + "frames", + "legend", + "categories", + "buckets", + "summary", + "axis", + "count", + "cols", + "rows" + ], + "title": "LearningFramesResult", + "type": "object" + }, + "LearningLegendItem": { + "additionalProperties": false, + "properties": { + "glyph": { + "title": "Glyph", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + }, + "style": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Style" + }, + "color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Color" + } + }, + "required": [ + "glyph", + "label" + ], + "title": "LearningLegendItem", + "type": "object" + }, + "LearningMutationResult": { + "additionalProperties": false, + "description": "``agent.learning_mutations`` \u2014 ``ok: false`` carries the reason in ``message``.", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + } + }, + "required": [ + "ok" + ], + "title": "LearningMutationResult", + "type": "object" + }, + "LearningNodeParams": { + "additionalProperties": false, + "properties": { + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Id" + } + }, + "title": "LearningNodeParams", + "type": "object" + }, + "LearningNodeRow": { + "additionalProperties": false, + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "glyph": { + "title": "Glyph", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + }, + "fullLabel": { + "title": "Fulllabel", + "type": "string" + }, + "meta": { + "title": "Meta", + "type": "string" + }, + "body": { + "title": "Body", + "type": "string" + }, + "style": { + "title": "Style", + "type": "string" + } + }, + "required": [ + "id", + "glyph", + "label", + "fullLabel", + "meta", + "body", + "style" + ], + "title": "LearningNodeRow", + "type": "object" + }, + "LeaseHolder": { + "enum": [ + "agent", + "human" + ], + "title": "LeaseHolder", + "type": "string" + }, + "LegacyPluginRow": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "version": { + "title": "Version", + "type": "string" + }, + "enabled": { + "title": "Enabled", + "type": "boolean" + } + }, + "required": [ + "name", + "version", + "enabled" + ], + "title": "LegacyPluginRow", + "type": "object" + }, + "LiveSessionStatus": { + "enum": [ + "idle", + "starting", + "waiting", + "working", + "streaming", + "resuming" + ], + "title": "LiveSessionStatus", + "type": "string" + }, + "LlmOneshotParams": { + "additionalProperties": false, + "description": "Needs a ``template`` or ``instructions`` / ``input``; a live ``session_id`` lends its model.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "template": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Template" + }, + "instructions": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Instructions" + }, + "input": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Input" + }, + "variables": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Variables" + }, + "task": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Task" + }, + "temperature": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Temperature" + }, + "max_tokens": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Max Tokens" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + } + }, + "title": "LlmOneshotParams", + "type": "object" + }, + "LlmOneshotResult": { + "additionalProperties": false, + "properties": { + "text": { + "title": "Text", + "type": "string" + } + }, + "required": [ + "text" + ], + "title": "LlmOneshotResult", + "type": "object" + }, + "LocaleSurface": { + "enum": [ + "core", + "tui", + "desktop" + ], + "title": "LocaleSurface", + "type": "string" + }, + "LoopSnapshot": { + "additionalProperties": false, + "description": "``_safe_loop_snapshot`` \u2014 persisted LoopState fields, never its route.", + "properties": { + "prompt": { + "title": "Prompt", + "type": "string" + }, + "status": { + "title": "Status", + "type": "string" + }, + "mode": { + "title": "Mode", + "type": "string" + }, + "interval_seconds": { + "title": "Interval Seconds", + "type": "number" + }, + "current_delay": { + "title": "Current Delay", + "type": "number" + }, + "times": { + "title": "Times", + "type": "integer" + }, + "until": { + "title": "Until", + "type": "string" + }, + "max_ticks": { + "title": "Max Ticks", + "type": "integer" + }, + "ticks_fired": { + "title": "Ticks Fired", + "type": "integer" + }, + "created_at": { + "title": "Created At", + "type": "number" + }, + "last_fired_at": { + "title": "Last Fired At", + "type": "number" + }, + "next_due_at": { + "title": "Next Due At", + "type": "number" + }, + "awaiting_response": { + "title": "Awaiting Response", + "type": "boolean" + }, + "deferred_by_goal": { + "title": "Deferred By Goal", + "type": "boolean" + }, + "paused_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Paused Reason" + }, + "last_stop_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Stop Reason" + } + }, + "required": [ + "prompt", + "status", + "mode", + "interval_seconds", + "current_delay", + "times", + "until", + "max_ticks", + "ticks_fired", + "created_at", + "last_fired_at", + "next_due_at", + "awaiting_response", + "deferred_by_goal" + ], + "title": "LoopSnapshot", + "type": "object" + }, + "McpCatalogEntry": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "connector_slug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Connector Slug" + }, + "installed": { + "title": "Installed", + "type": "boolean" + }, + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "requires": { + "items": { + "type": "string" + }, + "title": "Requires", + "type": "array" + }, + "transport": { + "title": "Transport", + "type": "string" + } + }, + "required": [ + "name", + "description", + "installed", + "enabled", + "requires", + "transport" + ], + "title": "McpCatalogEntry", + "type": "object" + }, + "McpCatalogResult": { + "additionalProperties": false, + "properties": { + "servers": { + "items": { + "$ref": "#/components/schemas/McpCatalogEntry" + }, + "title": "Servers", + "type": "array" + } + }, + "required": [ + "servers" + ], + "title": "McpCatalogResult", + "type": "object" + }, + "McpOauthCallbackParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "title": "Name", + "type": "string" + }, + "session_id": { + "title": "Session Id", + "type": "string" + }, + "code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Code" + }, + "state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "State" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "iss": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Iss" + } + }, + "required": [ + "name", + "session_id" + ], + "title": "McpOauthCallbackParams", + "type": "object" + }, + "McpOauthCallbackResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "error_message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error Message" + } + }, + "required": [ + "ok" + ], + "title": "McpOauthCallbackResult", + "type": "object" + }, + "McpOauthCancelResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" + }, + "error_message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error Message" + } + }, + "required": [ + "ok" + ], + "title": "McpOauthCancelResult", + "type": "object" + }, + "McpOauthFlowParams": { + "additionalProperties": false, + "description": "``session_id`` is the OAuth flow id returned by ``oauth.start`` (not a gateway session).", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "title": "Name", + "type": "string" + }, + "session_id": { + "title": "Session Id", + "type": "string" + } + }, + "required": [ + "name", + "session_id" + ], + "title": "McpOauthFlowParams", + "type": "object" + }, + "McpOauthPollResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "status": { + "$ref": "#/components/schemas/McpOauthPollStatus" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "error_message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error Message" + }, + "auth_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Auth Url" + }, + "tools": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/McpProbeTool" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tools" + } + }, + "required": [ + "ok", + "status" + ], + "title": "McpOauthPollResult", + "type": "object" + }, + "McpOauthPollStatus": { + "enum": [ + "pending", + "approved", + "error" + ], + "title": "McpOauthPollStatus", + "type": "string" + }, + "McpOauthStartParams": { + "additionalProperties": false, + "description": "With ``client_redirect_uri`` the CLIENT hosts the loopback and relays the code via\n``mcp.servers.oauth.callback``.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "title": "Name", + "type": "string" + }, + "client_redirect_uri": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Client Redirect Uri" + } + }, + "required": [ + "name" + ], + "title": "McpOauthStartParams", + "type": "object" + }, + "McpOauthStartResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "session_id": { + "title": "Session Id", + "type": "string" + }, + "auth_url": { + "title": "Auth Url", + "type": "string" + }, + "flow": { + "title": "Flow", + "type": "string" + } + }, + "required": [ + "ok", + "session_id", + "auth_url", + "flow" + ], + "title": "McpOauthStartResult", + "type": "object" + }, + "McpProbeTool": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "name", + "description" + ], + "title": "McpProbeTool", + "type": "object" + }, + "McpRuntimeStatus": { + "enum": [ + "connected", + "disabled", + "connecting", + "failed", + "lazy", + "configured" + ], + "title": "McpRuntimeStatus", + "type": "string" + }, + "McpServerEntry": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "enabled": { + "default": true, + "title": "Enabled", + "type": "boolean" + }, + "transport": { + "default": "stdio", + "title": "Transport", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "McpServerEntry", + "type": "object" + }, + "McpServerNameParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "title": "Name", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "McpServerNameParams", + "type": "object" + }, + "McpServerRuntimeRow": { + "additionalProperties": false, + "description": "Safe projection of ``tools.mcp_tool_discovery.get_mcp_status`` rows.", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "transport": { + "title": "Transport", + "type": "string" + }, + "tools": { + "title": "Tools", + "type": "integer" + }, + "connected": { + "title": "Connected", + "type": "boolean" + }, + "disabled": { + "title": "Disabled", + "type": "boolean" + }, + "status": { + "$ref": "#/components/schemas/McpRuntimeStatus" + }, + "source": { + "$ref": "#/components/schemas/McpServerSource" + }, + "plugin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Plugin" + } + }, + "required": [ + "name", + "transport", + "tools", + "connected", + "disabled", + "status", + "source" + ], + "title": "McpServerRuntimeRow", + "type": "object" + }, + "McpServerSource": { + "enum": [ + "config", + "plugin" + ], + "title": "McpServerSource", + "type": "string" + }, + "McpServerStatus": { + "additionalProperties": true, + "properties": { + "name": { + "default": "", + "title": "Name", + "type": "string" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" + }, + "tool_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tool Count" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + } + }, + "title": "McpServerStatus", + "type": "object" + }, + "McpServerSummary": { + "additionalProperties": false, + "description": "``tui_gateway/mcp_rpc_helpers.summarize_server`` \u2014 a server's config without secret values.", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "transport": { + "title": "Transport", + "type": "string" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Url" + }, + "command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Command" + }, + "args": { + "items": { + "type": "string" + }, + "title": "Args", + "type": "array" + }, + "env": { + "items": { + "type": "string" + }, + "title": "Env", + "type": "array" + }, + "auth": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Auth" + }, + "oauth_tokens_present": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Oauth Tokens Present" + }, + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "tools": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Tools" + }, + "source": { + "$ref": "#/components/schemas/McpServerSource" + }, + "plugin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Plugin" + } + }, + "required": [ + "name", + "transport", + "args", + "env", + "enabled", + "source" + ], + "title": "McpServerSummary", + "type": "object" + }, + "McpServersAddParams": { + "additionalProperties": false, + "description": "``preset`` (catalog id) and/or ``config`` (url/command/args/env/headers/auth/tools); a\n``bearer_token`` is written to the profile's .env, only the header template persists.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "title": "Name", + "type": "string" + }, + "preset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Preset" + }, + "config": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Config" + }, + "bearer_token": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Bearer Token" + } + }, + "required": [ + "name" + ], + "title": "McpServersAddParams", + "type": "object" + }, + "McpServersAddResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "name": { + "title": "Name", + "type": "string" + }, + "server": { + "$ref": "#/components/schemas/McpServerSummary" + } + }, + "required": [ + "ok", + "name", + "server" + ], + "title": "McpServersAddResult", + "type": "object" + }, + "McpServersListResult": { + "additionalProperties": false, + "properties": { + "servers": { + "items": { + "$ref": "#/components/schemas/McpServerSummary" + }, + "title": "Servers", + "type": "array" + } + }, + "required": [ + "servers" + ], + "title": "McpServersListResult", + "type": "object" + }, + "McpServersRemoveResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "removed": { + "title": "Removed", + "type": "boolean" + } + }, + "required": [ + "ok", + "removed" + ], + "title": "McpServersRemoveResult", + "type": "object" + }, + "McpServersSetApiKeyParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "title": "Name", + "type": "string" + }, + "value": { + "title": "Value", + "type": "string" + }, + "env_var": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Env Var" + } + }, + "required": [ + "name", + "value" + ], + "title": "McpServersSetApiKeyParams", + "type": "object" + }, + "McpServersSetApiKeyResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "name": { + "title": "Name", + "type": "string" + }, + "env_var": { + "title": "Env Var", + "type": "string" + }, + "server": { + "$ref": "#/components/schemas/McpServerSummary" + } + }, + "required": [ + "ok", + "name", + "env_var", + "server" + ], + "title": "McpServersSetApiKeyResult", + "type": "object" + }, + "McpServersStatusResult": { + "additionalProperties": false, + "properties": { + "servers": { + "items": { + "$ref": "#/components/schemas/McpServerRuntimeRow" + }, + "title": "Servers", + "type": "array" + }, + "checked_at": { + "title": "Checked At", + "type": "integer" + } + }, + "required": [ + "servers", + "checked_at" + ], + "title": "McpServersStatusResult", + "type": "object" + }, + "McpServersTestResult": { + "additionalProperties": false, + "description": "``ok: false`` carries ``error``; ``prompts`` / ``resources`` are only counted on success.", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "tools": { + "items": { + "$ref": "#/components/schemas/McpProbeTool" + }, + "title": "Tools", + "type": "array" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "prompts": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Prompts" + }, + "resources": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Resources" + }, + "oauth_needed": { + "title": "Oauth Needed", + "type": "boolean" + }, + "oauth_tokens_present": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Oauth Tokens Present" + } + }, + "required": [ + "ok", + "tools", + "oauth_needed" + ], + "title": "McpServersTestResult", + "type": "object" + }, + "MessageCompletePayload": { + "additionalProperties": false, + "description": "``prompt_turn._complete_turn_payload`` / ``session_auto_continue._emit_terminal_turn_error`` /\n``agent_callbacks._mirror_subagent_to_child`` (child watch mirror: ``text`` only) /\n``compute_host_bridge`` (``text`` + ``status``).", + "properties": { + "text": { + "anyOf": [ + { + "type": "string" + }, + {} + ], + "default": "", + "title": "Text" + }, + "usage": { + "anyOf": [ + { + "$ref": "#/components/schemas/Usage" + }, + { + "type": "null" + } + ], + "default": null + }, + "status": { + "anyOf": [ + { + "$ref": "#/components/schemas/TurnStatus" + }, + { + "type": "null" + } + ], + "default": null + }, + "reasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reasoning" + }, + "warning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Warning" + }, + "response_previewed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Response Previewed" + }, + "response_transformed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Response Transformed" + }, + "billing": { + "anyOf": [ + { + "$ref": "#/components/schemas/BillingBlock" + }, + { + "type": "null" + } + ], + "default": null + }, + "failure_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Failure Reason" + }, + "rendered": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Rendered" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "recoverable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Recoverable" + }, + "error_surface": { + "anyOf": [ + { + "$ref": "#/components/schemas/ErrorSurface" + }, + { + "type": "null" + } + ], + "default": null + }, + "partial": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Partial" + }, + "persisted_turn": { + "anyOf": [ + { + "$ref": "#/components/schemas/PersistedTurn" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "title": "MessageCompletePayload", + "type": "object" + }, + "MessageInterimPayload": { + "additionalProperties": false, + "description": "``prompt_turn._interim_assistant_cb`` / ``agent_callbacks`` interim_assistant_callback.", + "properties": { + "text": { + "title": "Text", + "type": "string" + }, + "already_streamed": { + "title": "Already Streamed", + "type": "boolean" + } + }, + "required": [ + "text", + "already_streamed" + ], + "title": "MessageInterimPayload", + "type": "object" + }, + "MessageReactParams": { + "additionalProperties": false, + "description": "``row_id`` is ``messages.id``; a not-yet-persisted live message names ``newest_role`` instead.\n``emoji`` null clears; the same emoji again retracts.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "row_id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Row Id" + }, + "newest_role": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Newest Role" + }, + "emoji": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Emoji" + }, + "author": { + "anyOf": [ + { + "$ref": "#/components/schemas/ReactionAuthor" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "session_id" + ], + "title": "MessageReactParams", + "type": "object" + }, + "MessageReactResult": { + "additionalProperties": false, + "properties": { + "row_id": { + "title": "Row Id", + "type": "integer" + }, + "reactions": { + "items": { + "$ref": "#/components/schemas/MessageReaction" + }, + "title": "Reactions", + "type": "array" + } + }, + "required": [ + "row_id", + "reactions" + ], + "title": "MessageReactResult", + "type": "object" + }, + "MessageReaction": { + "additionalProperties": true, + "description": "One persisted reaction row (``hermes_state_messages.set_message_reaction``); ``seen`` is\nstamped once announced.", + "properties": { + "emoji": { + "title": "Emoji", + "type": "string" + }, + "author": { + "title": "Author", + "type": "string" + }, + "at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "At" + }, + "seen": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Seen" + } + }, + "required": [ + "emoji", + "author" + ], + "title": "MessageReaction", + "type": "object" + }, + "MessageReactionPayload": { + "additionalProperties": false, + "description": "``tools/react_to_message_tool.py``.", + "properties": { + "row_id": { + "title": "Row Id", + "type": "integer" + }, + "reactions": { + "items": { + "$ref": "#/components/schemas/MessageReaction" + }, + "title": "Reactions", + "type": "array" + }, + "role": { + "title": "Role", + "type": "string" + } + }, + "required": [ + "row_id", + "reactions", + "role" + ], + "title": "MessageReactionPayload", + "type": "object" + }, + "MoaAggregatingPayload": { + "additionalProperties": false, + "properties": { + "aggregator": { + "title": "Aggregator", + "type": "string" + } + }, + "required": [ + "aggregator" + ], + "title": "MoaAggregatingPayload", + "type": "object" + }, + "MoaPhasePayload": { + "additionalProperties": false, + "properties": { + "phase": { + "title": "Phase", + "type": "string" + }, + "refs_done": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Refs Done" + }, + "refs_total": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Refs Total" + }, + "aggregator": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Aggregator" + } + }, + "required": [ + "phase" + ], + "title": "MoaPhasePayload", + "type": "object" + }, + "MoaProgressPayload": { + "additionalProperties": false, + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "refs_done": { + "title": "Refs Done", + "type": "integer" + }, + "refs_total": { + "title": "Refs Total", + "type": "integer" + } + }, + "required": [ + "label", + "refs_done", + "refs_total" + ], + "title": "MoaProgressPayload", + "type": "object" + }, + "MoaReferencePayload": { + "additionalProperties": false, + "description": "``tool_progress._progress_moa_reference``.", + "properties": { + "label": { + "title": "Label", + "type": "string" + }, + "text": { + "title": "Text", + "type": "string" + }, + "index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Index" + }, + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Count" + } + }, + "required": [ + "label", + "text" + ], + "title": "MoaReferencePayload", + "type": "object" + }, + "ModelCapabilities": { + "additionalProperties": false, + "description": "``hermes_cli/inventory.py::_apply_capabilities``.", + "properties": { + "fast": { + "title": "Fast", + "type": "boolean" + }, + "reasoning": { + "title": "Reasoning", + "type": "boolean" + }, + "can_disable_reasoning": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Can Disable Reasoning" + } + }, + "required": [ + "fast", + "reasoning" + ], + "title": "ModelCapabilities", + "type": "object" + }, + "ModelDisconnectParams": { + "additionalProperties": false, + "properties": { + "slug": { + "title": "Slug", + "type": "string" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + } + }, + "required": [ + "slug" + ], + "title": "ModelDisconnectParams", + "type": "object" + }, + "ModelDisconnectResult": { + "additionalProperties": false, + "properties": { + "slug": { + "title": "Slug", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "disconnected": { + "title": "Disconnected", + "type": "boolean" + } + }, + "required": [ + "slug", + "name", + "disconnected" + ], + "title": "ModelDisconnectResult", + "type": "object" + }, + "ModelOptionProvider": { + "additionalProperties": true, + "description": "One ``hermes_cli/inventory.py::build_models_payload`` provider row (the union of every field\nthe builder sets; ``pricing_pending`` / ``free_tier_pending`` mark the cached-only path).", + "properties": { + "slug": { + "title": "Slug", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "models": { + "items": { + "type": "string" + }, + "title": "Models", + "type": "array" + }, + "total_models": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Total Models" + }, + "is_current": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Is Current" + }, + "is_user_defined": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Is User Defined" + }, + "source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source" + }, + "aliases": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Aliases" + }, + "api_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Api Url" + }, + "auth_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Auth Type" + }, + "authenticated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Authenticated" + }, + "key_env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Key Env" + }, + "warning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Warning" + }, + "featured_models": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Featured Models" + }, + "capabilities": { + "anyOf": [ + { + "additionalProperties": { + "$ref": "#/components/schemas/ModelCapabilities" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Capabilities" + }, + "pricing": { + "anyOf": [ + { + "additionalProperties": { + "$ref": "#/components/schemas/ModelPricing" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pricing" + }, + "pricing_pending": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pricing Pending" + }, + "free_tier": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Free Tier" + }, + "free_tier_pending": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Free Tier Pending" + }, + "free_tier_row": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Free Tier Row" + }, + "unavailable_models": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unavailable Models" + } + }, + "required": [ + "slug", + "name" + ], + "title": "ModelOptionProvider", + "type": "object" + }, + "ModelOptionsParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "explicit_only": { + "default": false, + "title": "Explicit Only", + "type": "boolean" + }, + "include_unconfigured": { + "default": false, + "title": "Include Unconfigured", + "type": "boolean" + }, + "refresh": { + "default": false, + "title": "Refresh", + "type": "boolean" + } + }, + "title": "ModelOptionsParams", + "type": "object" + }, + "ModelOptionsResult": { + "additionalProperties": false, + "properties": { + "providers": { + "items": { + "$ref": "#/components/schemas/ModelOptionProvider" + }, + "title": "Providers", + "type": "array" + }, + "model": { + "default": "", + "title": "Model", + "type": "string" + }, + "provider": { + "default": "", + "title": "Provider", + "type": "string" + } + }, + "required": [ + "providers" + ], + "title": "ModelOptionsResult", + "type": "object" + }, + "ModelPricing": { + "additionalProperties": false, + "description": "``hermes_cli/inventory.py::_apply_pricing`` \u2014 formatted $/Mtok strings (``\"\"`` unknown,\n``\"free\"``); the sale fields are Nous Portal-only.", + "properties": { + "input": { + "title": "Input", + "type": "string" + }, + "output": { + "title": "Output", + "type": "string" + }, + "cache": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache" + }, + "free": { + "title": "Free", + "type": "boolean" + }, + "discount_percent": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Discount Percent" + }, + "was_input": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Was Input" + }, + "was_output": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Was Output" + } + }, + "required": [ + "input", + "output", + "free" + ], + "title": "ModelPricing", + "type": "object" + }, + "ModelSaveKeyParams": { + "additionalProperties": false, + "properties": { + "slug": { + "title": "Slug", + "type": "string" + }, + "api_key": { + "title": "Api Key", + "type": "string" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + } + }, + "required": [ + "slug", + "api_key" + ], + "title": "ModelSaveKeyParams", + "type": "object" + }, + "ModelSaveKeyResult": { + "additionalProperties": false, + "properties": { + "provider": { + "$ref": "#/components/schemas/ModelOptionProvider" + } + }, + "required": [ + "provider" + ], + "title": "ModelSaveKeyResult", + "type": "object" + }, + "NoticePayload": { + "additionalProperties": false, + "description": "``tui_gateway/model_switch.py`` capability-refresh notice.", + "properties": { + "message": { + "title": "Message", + "type": "string" + } + }, + "required": [ + "message" + ], + "title": "NoticePayload", + "type": "object" + }, + "NotificationClearPayload": { + "additionalProperties": false, + "properties": { + "key": { + "title": "Key", + "type": "string" + } + }, + "required": [ + "key" + ], + "title": "NotificationClearPayload", + "type": "object" + }, + "NotificationShowPayload": { + "additionalProperties": false, + "description": "``agent/credits_tracker.py::AgentNotice`` via notice_callback, and ``server._await_agent_ready``'s\nslow-build notice. ``level``: info | warn | error | success; ``kind``: sticky | ttl | agent.", + "properties": { + "text": { + "title": "Text", + "type": "string" + }, + "level": { + "title": "Level", + "type": "string" + }, + "kind": { + "title": "Kind", + "type": "string" + }, + "ttl_ms": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ttl Ms" + }, + "key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Key" + }, + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Id" + } + }, + "required": [ + "text", + "level", + "kind" + ], + "title": "NotificationShowPayload", + "type": "object" + }, + "OkResult": { + "additionalProperties": false, + "properties": { + "ok": { + "default": true, + "title": "Ok", + "type": "boolean" + } + }, + "title": "OkResult", + "type": "object" + }, + "OnboardingAnswers": { + "additionalProperties": true, + "description": "``tui_gateway/onboarding_personalization.py`` \u2014 the facts agreed during onboarding.", + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context" + }, + "theme": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Theme" + }, + "accent": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Accent" + }, + "layout": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Layout" + }, + "focus": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Focus" + }, + "connectors": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Connectors" + }, + "plugins": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Plugins" + } + }, + "title": "OnboardingAnswers", + "type": "object" + }, + "OnboardingCatalogPlugin": { + "additionalProperties": false, + "description": "A catalog plugin curated for the onboarding card (``onboarding: true``) that this OS runs.\n``app_state`` is the pinned ``plugin.json`` declaration judged on this host; ``sentence`` names what\nis missing (empty when present or unknown).", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "title": { + "title": "Title", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "tier": { + "$ref": "#/components/schemas/CatalogTier" + }, + "platforms": { + "items": { + "type": "string" + }, + "title": "Platforms", + "type": "array" + }, + "app_state": { + "$ref": "#/components/schemas/CatalogAppState" + }, + "sentence": { + "title": "Sentence", + "type": "string" + } + }, + "required": [ + "name", + "title", + "description", + "tier", + "platforms", + "app_state", + "sentence" + ], + "title": "OnboardingCatalogPlugin", + "type": "object" + }, + "OnboardingEnsureSetupProfileResult": { + "additionalProperties": false, + "description": "``created`` is false when an existing setup profile was found (and returned untouched).", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "path": { + "title": "Path", + "type": "string" + }, + "created": { + "title": "Created", + "type": "boolean" + }, + "role": { + "const": "setup", + "default": "setup", + "title": "Role", + "type": "string" + } + }, + "required": [ + "name", + "path", + "created" + ], + "title": "OnboardingEnsureSetupProfileResult", + "type": "object" + }, + "OnboardingResetSetupProfileResult": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "path": { + "title": "Path", + "type": "string" + }, + "reset": { + "default": true, + "title": "Reset", + "type": "boolean" + } + }, + "required": [ + "name", + "path" + ], + "title": "OnboardingResetSetupProfileResult", + "type": "object" + }, + "OpenRequestEntry": { + "additionalProperties": false, + "description": "One unanswered server\u2192client request (``server_requests.Request.snapshot``); the reconnecting\nclient re-delivers it to its request handlers.", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "method": { + "title": "Method", + "type": "string" + }, + "params": { + "additionalProperties": true, + "title": "Params", + "type": "object" + } + }, + "required": [ + "id", + "method", + "params" + ], + "title": "OpenRequestEntry", + "type": "object" + }, + "OptionalProjectResult": { + "additionalProperties": false, + "properties": { + "project": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProjectInfo" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "title": "OptionalProjectResult", + "type": "object" + }, + "PaneRevealPayload": { + "additionalProperties": true, + "description": "``tools/focus_pane_tool.py``.", + "properties": { + "pane": { + "title": "Pane", + "type": "string" + } + }, + "required": [ + "pane" + ], + "title": "PaneRevealPayload", + "type": "object" + }, + "Params": { + "additionalProperties": false, + "description": "Client\u2192server method params / server\u2192client request params. Unknown keys are rejected.", + "properties": {}, + "title": "Params", + "type": "object" + }, + "PasteCollapseParams": { + "additionalProperties": false, + "properties": { + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Text" + } + }, + "title": "PasteCollapseParams", + "type": "object" + }, + "PasteCollapseResult": { + "additionalProperties": false, + "properties": { + "placeholder": { + "title": "Placeholder", + "type": "string" + }, + "path": { + "title": "Path", + "type": "string" + }, + "lines": { + "title": "Lines", + "type": "integer" + } + }, + "required": [ + "placeholder", + "path", + "lines" + ], + "title": "PasteCollapseResult", + "type": "object" + }, + "PaymentMethodKind": { + "enum": [ + "card", + "link", + "unknown" + ], + "title": "PaymentMethodKind", + "type": "string" + }, + "PdfAttachParams": { + "additionalProperties": false, + "description": "Host ``path`` or base64 ``content_base64`` / ``data``; ``first_page`` / ``last_page`` bound the\nrender (per-call page cap enforced server-side).", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Path" + }, + "content_base64": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Content Base64" + }, + "data": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Data" + }, + "filename": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Filename" + }, + "first_page": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "First Page" + }, + "last_page": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Page" + } + }, + "required": [ + "session_id" + ], + "title": "PdfAttachParams", + "type": "object" + }, + "PdfAttachResult": { + "additionalProperties": false, + "properties": { + "attached": { + "title": "Attached", + "type": "boolean" + }, + "filename": { + "title": "Filename", + "type": "string" + }, + "pages_attached": { + "title": "Pages Attached", + "type": "integer" + }, + "pages": { + "items": { + "$ref": "#/components/schemas/PdfPage" + }, + "title": "Pages", + "type": "array" + }, + "count": { + "title": "Count", + "type": "integer" + }, + "text": { + "title": "Text", + "type": "string" + } + }, + "required": [ + "attached", + "filename", + "pages_attached", + "pages", + "count", + "text" + ], + "title": "PdfAttachResult", + "type": "object" + }, + "PdfPage": { + "additionalProperties": false, + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "width": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Width" + }, + "height": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Height" + }, + "token_estimate": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Token Estimate" + }, + "path": { + "title": "Path", + "type": "string" + }, + "page": { + "title": "Page", + "type": "integer" + } + }, + "required": [ + "path", + "page" + ], + "title": "PdfPage", + "type": "object" + }, + "PeerRouteStatus": { + "additionalProperties": false, + "properties": { + "room_id": { + "title": "Room Id", + "type": "string" + }, + "member_id": { + "title": "Member Id", + "type": "string" + }, + "status": { + "title": "Status", + "type": "string" + } + }, + "required": [ + "room_id", + "member_id", + "status" + ], + "title": "PeerRouteStatus", + "type": "object" + }, + "PendingApproval": { + "additionalProperties": true, + "description": "One unresolved ``tools/approval.py`` gateway queue entry as ``server._approval_request_payload``\nrenders it (command redacted; ``choices`` precomputed). The key set is owned by the approval tool.", + "properties": { + "request_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Request Id" + }, + "command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Command" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Description" + }, + "pattern_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pattern Key" + }, + "pattern_keys": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pattern Keys" + }, + "allow_permanent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Allow Permanent" + }, + "allow_session": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Allow Session" + }, + "smart_denied": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Smart Denied" + }, + "choices": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Choices" + }, + "tool_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tool Name" + } + }, + "title": "PendingApproval", + "type": "object" + }, + "PersistedTurn": { + "additionalProperties": false, + "description": "Committed SQLite row addresses for the agent's current-turn suffix. Missing ids are\nunproven, never negative acknowledgements. ``complete`` permits retiring the whole local\nturn only when the original turn boundary, every row and final body are still accounted\nfor; compaction, redirects and partial writes conservatively leave it false. Row ids are\nscoped to the owning profile's store, as in ``SessionMessage.row_id``.", + "properties": { + "row_ids": { + "items": { + "type": "integer" + }, + "title": "Row Ids", + "type": "array" + }, + "complete": { + "title": "Complete", + "type": "boolean" + }, + "user_row_id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Row Id" + }, + "final_assistant_row_id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Final Assistant Row Id" + } + }, + "required": [ + "row_ids", + "complete" + ], + "title": "PersistedTurn", + "type": "object" + }, + "PetCancelParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "token": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Token" + } + }, + "title": "PetCancelParams", + "type": "object" + }, + "PetCancelResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "title": "PetCancelResult", + "type": "object" + }, + "PetCellsParams": { + "additionalProperties": false, + "description": "``graphics`` opts into the kitty payload when the TTY speaks it; ``cols`` overrides the width.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "State" + }, + "cols": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cols" + }, + "graphics": { + "default": false, + "title": "Graphics", + "type": "boolean" + } + }, + "title": "PetCellsParams", + "type": "object" + }, + "PetCellsResult": { + "additionalProperties": false, + "description": "Unicode: ``frames`` is frame \u2192 row \u2192 cell ``[tr,tg,tb,ta, br,bg,bb,ba]``; kitty (``graphics``\nset): ``frames`` are transmit escapes and ``placeholder`` the text grid.", + "properties": { + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "slug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Slug" + }, + "displayName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Displayname" + }, + "state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "State" + }, + "cols": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cols" + }, + "frameMs": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Framems" + }, + "frames": { + "anyOf": [ + { + "items": { + "items": { + "items": { + "items": { + "type": "integer" + }, + "type": "array" + }, + "type": "array" + }, + "type": "array" + }, + "type": "array" + }, + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Frames" + }, + "scale": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Scale" + }, + "graphics": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Graphics" + }, + "imageId": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Imageid" + }, + "color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Color" + }, + "rows": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Rows" + }, + "placeholder": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Placeholder" + } + }, + "required": [ + "enabled" + ], + "title": "PetCellsResult", + "type": "object" + }, + "PetChangedPayload": { + "additionalProperties": true, + "description": "``change_watcher._pet_changed_payload`` \u2014 ``pet.info.meta``-shaped; ``{enabled: false}`` when off.", + "properties": { + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "slug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Slug" + }, + "displayName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Displayname" + }, + "scale": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Scale" + }, + "spritesheetRevision": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Spritesheetrevision" + } + }, + "required": [ + "enabled" + ], + "title": "PetChangedPayload", + "type": "object" + }, + "PetDraft": { + "additionalProperties": false, + "properties": { + "index": { + "title": "Index", + "type": "integer" + }, + "dataUri": { + "title": "Datauri", + "type": "string" + } + }, + "required": [ + "index", + "dataUri" + ], + "title": "PetDraft", + "type": "object" + }, + "PetExportResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "filename": { + "title": "Filename", + "type": "string" + }, + "zipBase64": { + "title": "Zipbase64", + "type": "string" + } + }, + "required": [ + "ok", + "filename", + "zipBase64" + ], + "title": "PetExportResult", + "type": "object" + }, + "PetGalleryEntry": { + "additionalProperties": false, + "properties": { + "slug": { + "title": "Slug", + "type": "string" + }, + "displayName": { + "title": "Displayname", + "type": "string" + }, + "installed": { + "title": "Installed", + "type": "boolean" + }, + "spritesheetUrl": { + "default": "", + "title": "Spritesheeturl", + "type": "string" + }, + "curated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Curated" + }, + "generated": { + "default": false, + "title": "Generated", + "type": "boolean" + } + }, + "required": [ + "slug", + "displayName", + "installed" + ], + "title": "PetGalleryEntry", + "type": "object" + }, + "PetGalleryParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "localOnly": { + "default": false, + "title": "Localonly", + "type": "boolean" + } + }, + "title": "PetGalleryParams", + "type": "object" + }, + "PetGalleryResult": { + "additionalProperties": false, + "properties": { + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "active": { + "default": "", + "title": "Active", + "type": "string" + }, + "pets": { + "items": { + "$ref": "#/components/schemas/PetGalleryEntry" + }, + "title": "Pets", + "type": "array" + } + }, + "required": [ + "enabled" + ], + "title": "PetGalleryResult", + "type": "object" + }, + "PetGenProvider": { + "additionalProperties": false, + "description": "``agent/pet/generate/imagegen.py::list_sprite_providers`` row.", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + }, + "default": { + "type": "boolean", + "title": "Default" + } + }, + "required": [ + "name", + "label", + "default" + ], + "title": "PetGenProvider", + "type": "object" + }, + "PetGenerateParams": { + "additionalProperties": false, + "description": "``prompt`` or a ``referenceImage`` data URL is required (the handler answers 4004 without one).", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Prompt" + }, + "referenceImage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Referenceimage" + }, + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Count" + }, + "style": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Style" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider" + } + }, + "title": "PetGenerateParams", + "type": "object" + }, + "PetGenerateProgressPayload": { + "additionalProperties": true, + "description": "``methods_session`` pet.generate: token-only init frame, then one per draft.", + "properties": { + "token": { + "title": "Token", + "type": "string" + }, + "count": { + "title": "Count", + "type": "integer" + }, + "index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Index" + }, + "dataUri": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Datauri" + } + }, + "required": [ + "token", + "count" + ], + "title": "PetGenerateProgressPayload", + "type": "object" + }, + "PetGenerateResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "token": { + "title": "Token", + "type": "string" + }, + "drafts": { + "items": { + "$ref": "#/components/schemas/PetDraft" + }, + "title": "Drafts", + "type": "array" + } + }, + "required": [ + "ok", + "token", + "drafts" + ], + "title": "PetGenerateResult", + "type": "object" + }, + "PetGenerateStatusResult": { + "additionalProperties": false, + "properties": { + "available": { + "title": "Available", + "type": "boolean" + }, + "providers": { + "items": { + "$ref": "#/components/schemas/PetGenProvider" + }, + "title": "Providers", + "type": "array" + } + }, + "required": [ + "available", + "providers" + ], + "title": "PetGenerateStatusResult", + "type": "object" + }, + "PetHatchParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "token": { + "title": "Token", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "cancelToken": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Canceltoken" + }, + "index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Index" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Description" + }, + "prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Prompt" + }, + "style": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Style" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider" + } + }, + "required": [ + "token", + "name" + ], + "title": "PetHatchParams", + "type": "object" + }, + "PetHatchProgressPayload": { + "additionalProperties": true, + "description": "``methods_session`` pet.hatch ``_on_progress``: ``{event, detail}`` or the parsed row form.", + "properties": { + "event": { + "title": "Event", + "type": "string" + }, + "detail": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Detail" + }, + "state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "State" + }, + "done": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Done" + }, + "total": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Total" + } + }, + "required": [ + "event" + ], + "title": "PetHatchProgressPayload", + "type": "object" + }, + "PetHatchResult": { + "additionalProperties": false, + "description": "The hatched pet is installed but NOT active (``pet.select`` adopts, ``pet.remove`` discards).", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "slug": { + "title": "Slug", + "type": "string" + }, + "displayName": { + "title": "Displayname", + "type": "string" + }, + "warnings": { + "items": {}, + "title": "Warnings", + "type": "array" + }, + "pet": { + "$ref": "#/components/schemas/PetSpritePayload" + } + }, + "required": [ + "ok", + "slug", + "displayName", + "pet" + ], + "title": "PetHatchResult", + "type": "object" + }, + "PetInfoMetaResult": { + "additionalProperties": false, + "properties": { + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "slug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Slug" + }, + "displayName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Displayname" + }, + "scale": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Scale" + }, + "spritesheetRevision": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Spritesheetrevision" + } + }, + "required": [ + "enabled" + ], + "title": "PetInfoMetaResult", + "type": "object" + }, + "PetInfoParams": { + "additionalProperties": false, + "description": "``knownRevision``: the spritesheet revision the caller already holds (send-once bytes).", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "knownRevision": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Knownrevision" + } + }, + "title": "PetInfoParams", + "type": "object" + }, + "PetInfoResult": { + "additionalProperties": true, + "description": "``server._pet_sprite_payload`` behind ``enabled``; every sprite field is absent when the pet\ndisplay is off, ``spritesheetBase64`` is elided when ``spritesheetUnchanged``.", + "properties": { + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "slug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Slug" + }, + "displayName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Displayname" + }, + "mime": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Mime" + }, + "spritesheetBase64": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Spritesheetbase64" + }, + "spritesheetRevision": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Spritesheetrevision" + }, + "spritesheetUnchanged": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Spritesheetunchanged" + }, + "frameW": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Framew" + }, + "frameH": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Frameh" + }, + "framesPerState": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Framesperstate" + }, + "framesByState": { + "anyOf": [ + { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Framesbystate" + }, + "framesByRow": { + "anyOf": [ + { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Framesbyrow" + }, + "loopMs": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Loopms" + }, + "scale": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Scale" + }, + "stateRows": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Staterows" + } + }, + "required": [ + "enabled" + ], + "title": "PetInfoResult", + "type": "object" + }, + "PetRenameParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "slug": { + "title": "Slug", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + } + }, + "required": [ + "slug", + "name" + ], + "title": "PetRenameParams", + "type": "object" + }, + "PetScaleParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "scale": { + "default": null, + "title": "Scale" + } + }, + "title": "PetScaleParams", + "type": "object" + }, + "PetScaleResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "scale": { + "title": "Scale", + "type": "number" + } + }, + "required": [ + "ok", + "scale" + ], + "title": "PetScaleResult", + "type": "object" + }, + "PetSlugParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "slug": { + "title": "Slug", + "type": "string" + } + }, + "required": [ + "slug" + ], + "title": "PetSlugParams", + "type": "object" + }, + "PetSlugResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "slug": { + "title": "Slug", + "type": "string" + }, + "displayName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Displayname" + } + }, + "required": [ + "ok", + "slug" + ], + "title": "PetSlugResult", + "type": "object" + }, + "PetSpritePayload": { + "additionalProperties": false, + "properties": { + "slug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Slug" + }, + "displayName": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Displayname" + }, + "mime": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Mime" + }, + "spritesheetBase64": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Spritesheetbase64" + }, + "spritesheetRevision": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Spritesheetrevision" + }, + "frameW": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Framew" + }, + "frameH": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Frameh" + }, + "framesPerState": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Framesperstate" + }, + "framesByState": { + "anyOf": [ + { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Framesbystate" + }, + "framesByRow": { + "anyOf": [ + { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Framesbyrow" + }, + "loopMs": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Loopms" + }, + "scale": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Scale" + }, + "stateRows": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Staterows" + } + }, + "title": "PetSpritePayload", + "type": "object" + }, + "PetThumbParams": { + "additionalProperties": false, + "description": "``url``: spritesheet source for a not-yet-installed pet.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "slug": { + "title": "Slug", + "type": "string" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Url" + } + }, + "required": [ + "slug" + ], + "title": "PetThumbParams", + "type": "object" + }, + "PetThumbResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "slug": { + "title": "Slug", + "type": "string" + }, + "dataUri": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Datauri" + } + }, + "required": [ + "ok", + "slug" + ], + "title": "PetThumbResult", + "type": "object" + }, + "PingParams": { + "additionalProperties": false, + "properties": {}, + "title": "PingParams", + "type": "object" + }, + "PingResult": { + "additionalProperties": false, + "properties": { + "pong": { + "title": "Pong", + "type": "boolean" + } + }, + "required": [ + "pong" + ], + "title": "PingResult", + "type": "object" + }, + "PluginActivation": { + "additionalProperties": false, + "description": "What a plugin loaded mid-run does NOW vs later (``hermes_cli.plugins_activation``). ``activated_now``\nkinds (``{kind: [names]}``): ``gateway_commands`` (slash names), ``locales`` (``.``\nlanguage-pack layers), ``gateway_transforms`` / ``hooks`` (hook\nnames), ``callbacks`` (platforms / ``slack:``) \u2014 live in the running gateway once it reloaded\n(``gateway_reloaded``). ``live_now``: the plugin's MCP servers (connected, with their tools, or the\nerror) and skills, usable in every open chat of the profile from its next turn \u2014 the chats also get a\nnote listing them. ``deferred`` kinds: ``tools`` (Python tool names) and ``prompt`` (section ids)\napply from the next session.", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "key": { + "title": "Key", + "type": "string" + }, + "activated_now": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Activated Now", + "type": "object" + }, + "live_now": { + "anyOf": [ + { + "$ref": "#/components/schemas/PluginLiveNow" + }, + { + "type": "null" + } + ], + "default": null + }, + "deferred": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Deferred", + "type": "object" + } + }, + "required": [ + "name", + "key" + ], + "title": "PluginActivation", + "type": "object" + }, + "PluginLiveNow": { + "additionalProperties": false, + "properties": { + "mcp_servers": { + "items": { + "$ref": "#/components/schemas/PluginLiveServer" + }, + "title": "Mcp Servers", + "type": "array" + }, + "skills": { + "items": { + "$ref": "#/components/schemas/PluginLiveSkill" + }, + "title": "Skills", + "type": "array" + } + }, + "title": "PluginLiveNow", + "type": "object" + }, + "PluginLiveServer": { + "additionalProperties": false, + "description": "One plugin MCP server connected at activation: its callable tool names, or the reason it did not connect.", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "connected": { + "title": "Connected", + "type": "boolean" + }, + "tools": { + "items": { + "type": "string" + }, + "title": "Tools", + "type": "array" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + } + }, + "required": [ + "name", + "connected" + ], + "title": "PluginLiveServer", + "type": "object" + }, + "PluginLiveSkill": { + "additionalProperties": false, + "description": "One plugin skill usable now through ``skill_view`` (qualified ``:``).", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "description": { + "default": "", + "title": "Description", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "PluginLiveSkill", + "type": "object" + }, + "PluginServerRow": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "state": { + "$ref": "#/components/schemas/PluginServerState" + }, + "sentence": { + "title": "Sentence", + "type": "string" + } + }, + "required": [ + "name", + "state", + "sentence" + ], + "title": "PluginServerRow", + "type": "object" + }, + "PluginServerState": { + "enum": [ + "connected", + "app_not_running", + "hermes_not_connected", + "endpoint_unavailable", + "no_interactive_session", + "version_too_old", + "missing_app", + "unknown" + ], + "title": "PluginServerState", + "type": "string" + }, + "PluginSettingField": { + "additionalProperties": false, + "description": "One ``config_schema`` key of a plugin manifest, rendered by the Plugins hub\n(``hermes_cli.plugins_settings.plugin_settings_fields``). ``secret`` fields carry no value: ``env``\nnames the ``.env`` variable and ``has_value`` whether it is set.", + "properties": { + "key": { + "title": "Key", + "type": "string" + }, + "type": { + "$ref": "#/components/schemas/PluginSettingFieldType" + }, + "label": { + "title": "Label", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "required": { + "title": "Required", + "type": "boolean" + }, + "value": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Value" + }, + "default": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Default" + }, + "choices": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Choices" + }, + "env": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Env" + }, + "has_value": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Has Value" + } + }, + "required": [ + "key", + "type", + "label", + "description", + "required" + ], + "title": "PluginSettingField", + "type": "object" + }, + "PluginSettingFieldType": { + "enum": [ + "string", + "number", + "boolean", + "enum", + "secret", + "json" + ], + "title": "PluginSettingFieldType", + "type": "string" + }, + "PluginsAction": { + "enum": [ + "list", + "toggle", + "install", + "update", + "remove", + "settings", + "onboarding" + ], + "title": "PluginsAction", + "type": "string" + }, + "PluginsListParams": { + "additionalProperties": false, + "properties": {}, + "title": "PluginsListParams", + "type": "object" + }, + "PluginsListResult": { + "additionalProperties": false, + "properties": { + "plugins": { + "items": { + "$ref": "#/components/schemas/LegacyPluginRow" + }, + "title": "Plugins", + "type": "array" + } + }, + "required": [ + "plugins" + ], + "title": "PluginsListResult", + "type": "object" + }, + "PluginsManageParams": { + "additionalProperties": false, + "description": "``toggle``: ``key``/``name`` + ``enable``; ``install``: ``identifier``/``repo`` or ``catalog_name``\n(+ ``force``, ``enable``, ``ref``); ``update``: ``name`` (+ ``accept_capabilities`` to apply a re-pin\nthat widened the plugin after the user confirmed the ``delta``); ``remove``: ``name`` (user installs only);\n``settings``: ``key`` + ``values`` (``{setting_key: value}``, non-secret schema keys only).", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "action": { + "$ref": "#/components/schemas/PluginsAction", + "default": "list" + }, + "key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Key" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "enable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Enable" + }, + "identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Identifier" + }, + "repo": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Repo" + }, + "catalog_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Catalog Name" + }, + "force": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Force" + }, + "ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ref" + }, + "accept_capabilities": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Accept Capabilities" + }, + "values": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Values" + } + }, + "title": "PluginsManageParams", + "type": "object" + }, + "PluginsManageResult": { + "additionalProperties": false, + "description": "``list`` \u2192 ``plugins`` + counts; ``toggle`` \u2192 ``ok``/``unchanged``/``restart_required``/``name``\n(the canonical key written)/``plugin``; ``install`` \u2192 ``hermes_cli.plugins_cmd.dashboard_install_plugin``'s\nok payload; ``toggle``/``install``/``update`` that loaded a plugin also carry ``gateway_reloaded`` (the\nrunning gateway picked it up and re-wired its handlers) and ``activation`` \u2014 the honest split of what is\nlive now vs deferred, so ``restart_required`` is True only when no gateway answered; ``update`` \u2192 ``ok``/``unchanged``/``sha``, or ``ok=false`` + ``consent_required`` with the\n``delta`` (``{surface: [added...]}``) / ``delta_lines`` a widened pin adds \u2014 nothing changed until the\nclient retries with ``accept_capabilities``; ``remove`` \u2192 ``ok``/``name`` plus\n``cleared_memory_provider`` when the removed plugin was the live ``memory.provider``.", + "properties": { + "plugins": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/AgentPluginRow" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Plugins" + }, + "user_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Count" + }, + "bundled_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Bundled Count" + }, + "ok": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ok" + }, + "unchanged": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unchanged" + }, + "restart_required": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Restart Required" + }, + "gateway_reloaded": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Gateway Reloaded" + }, + "activation": { + "anyOf": [ + { + "$ref": "#/components/schemas/PluginActivation" + }, + { + "type": "null" + } + ], + "default": null + }, + "cleared_memory_provider": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cleared Memory Provider" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "plugin": { + "anyOf": [ + { + "$ref": "#/components/schemas/AgentPluginRow" + }, + { + "type": "null" + } + ], + "default": null + }, + "plugin_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Plugin Name" + }, + "warnings": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Warnings" + }, + "missing_env": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Missing Env" + }, + "python_dependencies": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Python Dependencies" + }, + "known_issues": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Known Issues" + }, + "after_install_path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "After Install Path" + }, + "enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Enabled" + }, + "sha": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sha" + }, + "consent_required": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Consent Required" + }, + "delta": { + "anyOf": [ + { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Delta" + }, + "delta_lines": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Delta Lines" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "written": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Written" + }, + "onboarding": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/OnboardingCatalogPlugin" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Onboarding" + } + }, + "title": "PluginsManageResult", + "type": "object" + }, + "PreviewActRequestParams": { + "additionalProperties": false, + "description": "``tools/drive_preview_tool.py`` and ``tools/annotate_preview_tool.py`` field sets.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "action": { + "title": "Action", + "type": "string" + }, + "ref": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ref" + }, + "selector": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Selector" + }, + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Text" + }, + "key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Key" + }, + "submit": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Submit" + }, + "full": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Full" + }, + "to": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "To" + }, + "amount": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Amount" + }, + "max": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Max" + }, + "allow_shortcut": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Allow Shortcut" + } + }, + "required": [ + "session_id", + "action" + ], + "title": "PreviewActRequestParams", + "type": "object" + }, + "PreviewClosePayload": { + "additionalProperties": false, + "description": "``tools/preview_tool.py`` / ``tools/close_preview_tool.py``; ``url`` '' closes every tab.", + "properties": { + "url": { + "default": "", + "title": "Url", + "type": "string" + } + }, + "title": "PreviewClosePayload", + "type": "object" + }, + "PreviewOpenPayload": { + "additionalProperties": false, + "description": "``tools/open_preview_tool.py``.", + "properties": { + "url": { + "title": "Url", + "type": "string" + }, + "label": { + "default": "", + "title": "Label", + "type": "string" + } + }, + "required": [ + "url" + ], + "title": "PreviewOpenPayload", + "type": "object" + }, + "PreviewRestartParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "url": { + "title": "Url", + "type": "string" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + }, + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context" + } + }, + "required": [ + "session_id", + "url" + ], + "title": "PreviewRestartParams", + "type": "object" + }, + "PreviewRestartProgressPayload": { + "additionalProperties": false, + "description": "``methods_prompt`` restart body + ``agent_callbacks._preview_restart_callbacks``.", + "properties": { + "task_id": { + "title": "Task Id", + "type": "string" + }, + "text": { + "title": "Text", + "type": "string" + }, + "level": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Level" + } + }, + "required": [ + "task_id", + "text" + ], + "title": "PreviewRestartProgressPayload", + "type": "object" + }, + "ProcessEntry": { + "additionalProperties": true, + "description": "``tools/process_registry.py::list_sessions`` row plus the gateway's ``output_tail``.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "command": { + "default": "", + "title": "Command", + "type": "string" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + }, + "pid": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pid" + }, + "owner_task_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Owner Task Id" + }, + "started_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Started At" + }, + "uptime_seconds": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Uptime Seconds" + }, + "status": { + "default": "running", + "title": "Status", + "type": "string" + }, + "output_preview": { + "default": "", + "title": "Output Preview", + "type": "string" + }, + "output_tail": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Output Tail" + }, + "session_scoped": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Scoped" + }, + "watch_patterns": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Watch Patterns" + }, + "watch_hit": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Watch Hit" + }, + "notify_on_complete": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Notify On Complete" + }, + "exit_code": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Exit Code" + }, + "exited_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Exited At" + }, + "completion_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Completion Reason" + }, + "detached": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Detached" + } + }, + "required": [ + "session_id" + ], + "title": "ProcessEntry", + "type": "object" + }, + "ProcessKillParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "process_id": { + "title": "Process Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id", + "process_id" + ], + "title": "ProcessKillParams", + "type": "object" + }, + "ProcessKillResult": { + "additionalProperties": true, + "description": "``tools/process_registry.py::kill_process`` snapshot; ``error`` rides on the failure statuses.", + "properties": { + "status": { + "$ref": "#/components/schemas/ProcessKillStatus" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Command" + }, + "exit_code": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Exit Code" + }, + "completion_reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Completion Reason" + }, + "termination_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Termination Source" + }, + "output": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Output" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + } + }, + "required": [ + "status" + ], + "title": "ProcessKillResult", + "type": "object" + }, + "ProcessKillStatus": { + "enum": [ + "killed", + "already_exited", + "not_found", + "error" + ], + "title": "ProcessKillStatus", + "type": "string" + }, + "ProcessListParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id" + ], + "title": "ProcessListParams", + "type": "object" + }, + "ProcessListResult": { + "additionalProperties": false, + "properties": { + "processes": { + "items": { + "$ref": "#/components/schemas/ProcessEntry" + }, + "title": "Processes", + "type": "array" + } + }, + "title": "ProcessListResult", + "type": "object" + }, + "ProcessStopParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "ProcessStopParams", + "type": "object" + }, + "ProcessStopResult": { + "additionalProperties": false, + "properties": { + "killed": { + "title": "Killed", + "type": "integer" + } + }, + "required": [ + "killed" + ], + "title": "ProcessStopResult", + "type": "object" + }, + "ProfileCanonicalSession": { + "additionalProperties": false, + "description": "The profile's \"Bot Chat\" registry row; ``resolved_id`` is the live compression tip.", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "resolved_id": { + "title": "Resolved Id", + "type": "string" + }, + "root_title": { + "default": "", + "title": "Root Title", + "type": "string" + }, + "title": { + "default": "", + "title": "Title", + "type": "string" + }, + "preview": { + "default": "", + "title": "Preview", + "type": "string" + }, + "started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "integer" + } + ], + "default": 0, + "title": "Started At" + }, + "last_active": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "integer" + } + ], + "default": 0, + "title": "Last Active" + }, + "message_count": { + "default": 0, + "title": "Message Count", + "type": "integer" + } + }, + "required": [ + "id", + "resolved_id" + ], + "title": "ProfileCanonicalSession", + "type": "object" + }, + "ProfileMirrored": { + "additionalProperties": false, + "description": "What was copied from the launch profile; ``auth`` is ``\"shared\"`` under ``share_auth``.", + "properties": { + "env": { + "default": false, + "title": "Env", + "type": "boolean" + }, + "auth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "shared", + "type": "string" + } + ], + "default": false, + "title": "Auth" + }, + "model_inherited": { + "default": false, + "title": "Model Inherited", + "type": "boolean" + }, + "voice": { + "default": false, + "title": "Voice", + "type": "boolean" + } + }, + "title": "ProfileMirrored", + "type": "object" + }, + "ProfileModelPin": { + "additionalProperties": false, + "properties": { + "provider": { + "default": "", + "title": "Provider", + "type": "string" + }, + "default": { + "type": "string", + "default": "", + "title": "Default" + } + }, + "title": "ProfileModelPin", + "type": "object" + }, + "ProfileNameParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + } + }, + "title": "ProfileNameParams", + "type": "object" + }, + "ProfileParams": { + "additionalProperties": false, + "description": "Any method the desktop may route to a named profile (``requestGatewayForProfile`` adds ``profile``).", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "ProfileParams", + "type": "object" + }, + "ProfileRow": { + "additionalProperties": false, + "description": "One roster row; the session fields are present only with ``include_sessions``.", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "path": { + "title": "Path", + "type": "string" + }, + "is_default": { + "default": false, + "title": "Is Default", + "type": "boolean" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider" + }, + "description": { + "default": "", + "title": "Description", + "type": "string" + }, + "display_name": { + "default": "", + "title": "Display Name", + "type": "string" + }, + "skill_count": { + "default": 0, + "title": "Skill Count", + "type": "integer" + }, + "previous_names": { + "items": { + "type": "string" + }, + "title": "Previous Names", + "type": "array" + }, + "role": { + "anyOf": [ + { + "const": "setup", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Role" + }, + "last_session": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProfileSessionPreview" + }, + { + "type": "null" + } + ], + "default": null + }, + "worker_session": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProfileWorkerSession" + }, + { + "type": "null" + } + ], + "default": null + }, + "canonical_session": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProfileCanonicalSession" + }, + { + "type": "null" + } + ], + "default": null + }, + "ui_meta_revisions": { + "additionalProperties": { + "type": "integer" + }, + "title": "Ui Meta Revisions", + "type": "object" + }, + "ui_meta": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ui Meta" + }, + "has_avatar": { + "default": false, + "title": "Has Avatar", + "type": "boolean" + } + }, + "required": [ + "name", + "path" + ], + "title": "ProfileRow", + "type": "object" + }, + "ProfileSessionPreview": { + "additionalProperties": false, + "description": "Newest human-facing session of a profile (``_latest_profile_session_rows``).", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "title": { + "default": "", + "title": "Title", + "type": "string" + }, + "preview": { + "default": "", + "title": "Preview", + "type": "string" + }, + "started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "integer" + } + ], + "default": 0, + "title": "Started At" + }, + "last_active": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "integer" + } + ], + "default": 0, + "title": "Last Active" + }, + "message_count": { + "default": 0, + "title": "Message Count", + "type": "integer" + } + }, + "required": [ + "id" + ], + "title": "ProfileSessionPreview", + "type": "object" + }, + "ProfileWorkerSession": { + "additionalProperties": false, + "description": "Newest kanban/tool worker row, so rosters can show a profile as working.", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "source": { + "default": "", + "title": "Source", + "type": "string" + }, + "title": { + "default": "", + "title": "Title", + "type": "string" + }, + "last_active": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "integer" + } + ], + "default": 0, + "title": "Last Active" + } + }, + "required": [ + "id" + ], + "title": "ProfileWorkerSession", + "type": "object" + }, + "ProfilesConfigureApplied": { + "additionalProperties": false, + "description": "Per-section outcome; only the sections the request carried are present.", + "properties": { + "ui_meta": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ui Meta" + }, + "ui_meta_revisions": { + "anyOf": [ + { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ui Meta Revisions" + }, + "ui_meta_conflicts": { + "anyOf": [ + { + "additionalProperties": { + "$ref": "#/components/schemas/UiMetaConflict" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ui Meta Conflicts" + }, + "soul": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Soul" + }, + "description": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Description" + }, + "model": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" + }, + "skills": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Skills" + }, + "toolsets": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Toolsets" + }, + "mcp_servers": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Mcp Servers" + } + }, + "title": "ProfilesConfigureApplied", + "type": "object" + }, + "ProfilesConfigureParams": { + "additionalProperties": false, + "description": "Sections are independent; ``ui_meta_expected_revisions`` is a per-key compare-and-swap.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "ui_meta": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ui Meta" + }, + "ui_meta_expected_revisions": { + "anyOf": [ + { + "additionalProperties": { + "type": "integer" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ui Meta Expected Revisions" + }, + "soul": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Soul" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Description" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider" + }, + "confirm_expensive_model": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Confirm Expensive Model" + }, + "disabled_skills": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Disabled Skills" + }, + "enabled_toolsets": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Enabled Toolsets" + }, + "enabled_mcp_servers": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Enabled Mcp Servers" + } + }, + "title": "ProfilesConfigureParams", + "type": "object" + }, + "ProfilesConfigureResult": { + "additionalProperties": false, + "description": "``confirm_required`` mirrors ``config.set``: a guarded model pick wrote nothing yet.", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "applied": { + "$ref": "#/components/schemas/ProfilesConfigureApplied" + }, + "confirm_required": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Confirm Required" + }, + "confirm_message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Confirm Message" + } + }, + "required": [ + "ok", + "applied" + ], + "title": "ProfilesConfigureResult", + "type": "object" + }, + "ProfilesCreateParams": { + "additionalProperties": false, + "description": "``clone_from`` omitted = fresh profile + bundled skills; ``mirror_credentials`` defaults on\nso a headless bot has a provider.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "title": "Name", + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Description" + }, + "clone_from": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Clone From" + }, + "clone_all": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Clone All" + }, + "clone_channels": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Clone Channels" + }, + "no_skills": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "No Skills" + }, + "no_alias": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "No Alias" + }, + "soul": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Soul" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider" + }, + "share_auth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Share Auth" + }, + "mirror_credentials": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Mirror Credentials" + } + }, + "required": [ + "name" + ], + "title": "ProfilesCreateParams", + "type": "object" + }, + "ProfilesCreateResult": { + "additionalProperties": false, + "properties": { + "ok": { + "default": true, + "title": "Ok", + "type": "boolean" + }, + "name": { + "title": "Name", + "type": "string" + }, + "path": { + "title": "Path", + "type": "string" + }, + "soul_written": { + "default": false, + "title": "Soul Written", + "type": "boolean" + }, + "model_set": { + "default": false, + "title": "Model Set", + "type": "boolean" + }, + "mirrored": { + "$ref": "#/components/schemas/ProfileMirrored" + } + }, + "required": [ + "name", + "path", + "mirrored" + ], + "title": "ProfilesCreateResult", + "type": "object" + }, + "ProfilesDescribeResult": { + "additionalProperties": false, + "description": "Editor snapshot; ``toolsets_pinned`` says whether ``tools.enabled_toolsets`` is explicit.", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "description": { + "default": "", + "title": "Description", + "type": "string" + }, + "soul": { + "default": "", + "title": "Soul", + "type": "string" + }, + "model": { + "$ref": "#/components/schemas/ProfileModelPin" + }, + "skills": { + "items": { + "$ref": "#/components/schemas/CapabilityEntry" + }, + "title": "Skills", + "type": "array" + }, + "toolsets": { + "items": { + "$ref": "#/components/schemas/ToolsetEntry" + }, + "title": "Toolsets", + "type": "array" + }, + "toolsets_pinned": { + "default": false, + "title": "Toolsets Pinned", + "type": "boolean" + }, + "mcp_servers": { + "items": { + "$ref": "#/components/schemas/McpServerEntry" + }, + "title": "Mcp Servers", + "type": "array" + } + }, + "required": [ + "name", + "model" + ], + "title": "ProfilesDescribeResult", + "type": "object" + }, + "ProfilesGetAssetParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "asset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Asset" + } + }, + "title": "ProfilesGetAssetParams", + "type": "object" + }, + "ProfilesGetAssetResult": { + "additionalProperties": false, + "description": "Absent is ``found: false``, not an error.", + "properties": { + "found": { + "title": "Found", + "type": "boolean" + }, + "mime": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Mime" + }, + "size": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Size" + }, + "data": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Data" + } + }, + "required": [ + "found" + ], + "title": "ProfilesGetAssetResult", + "type": "object" + }, + "ProfilesListParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "include_sessions": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Include Sessions" + } + }, + "title": "ProfilesListParams", + "type": "object" + }, + "ProfilesListResult": { + "additionalProperties": false, + "description": "``bot_mode_protocol`` tells clients this backend injects the teammate protocol itself.", + "properties": { + "profiles": { + "items": { + "$ref": "#/components/schemas/ProfileRow" + }, + "title": "Profiles", + "type": "array" + }, + "bot_mode_protocol": { + "default": true, + "title": "Bot Mode Protocol", + "type": "boolean" + } + }, + "title": "ProfilesListResult", + "type": "object" + }, + "ProfilesRememberOnboardingParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "answers": { + "anyOf": [ + { + "$ref": "#/components/schemas/OnboardingAnswers" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "title": "ProfilesRememberOnboardingParams", + "type": "object" + }, + "ProfilesRememberOnboardingResult": { + "additionalProperties": false, + "properties": { + "saved": { + "default": true, + "title": "Saved", + "type": "boolean" + }, + "profile": { + "default": "default", + "title": "Profile", + "type": "string" + }, + "target": { + "default": "user", + "title": "Target", + "type": "string" + } + }, + "title": "ProfilesRememberOnboardingResult", + "type": "object" + }, + "ProfilesSetAssetParams": { + "additionalProperties": false, + "description": "``data`` is a data URL or bare base64 (PNG/JPEG/WebP, sniffed); ``clear`` deletes instead.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "asset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Asset" + }, + "data": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Data" + }, + "clear": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Clear" + } + }, + "title": "ProfilesSetAssetParams", + "type": "object" + }, + "ProfilesSetAssetResult": { + "additionalProperties": false, + "properties": { + "ok": { + "default": true, + "title": "Ok", + "type": "boolean" + }, + "asset": { + "title": "Asset", + "type": "string" + }, + "size": { + "default": 0, + "title": "Size", + "type": "integer" + }, + "removed": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Removed" + } + }, + "required": [ + "asset" + ], + "title": "ProfilesSetAssetResult", + "type": "object" + }, + "ProjectFacts": { + "additionalProperties": false, + "description": "``agent/coding_context.py::project_facts_for`` \u2014 the system prompt's coding-context detection.", + "properties": { + "root": { + "title": "Root", + "type": "string" + }, + "manifests": { + "items": { + "type": "string" + }, + "title": "Manifests", + "type": "array" + }, + "packageManagers": { + "items": { + "type": "string" + }, + "title": "Packagemanagers", + "type": "array" + }, + "verifyCommands": { + "items": { + "type": "string" + }, + "title": "Verifycommands", + "type": "array" + }, + "contextFiles": { + "items": { + "type": "string" + }, + "title": "Contextfiles", + "type": "array" + } + }, + "required": [ + "root", + "manifests", + "packageManagers", + "verifyCommands", + "contextFiles" + ], + "title": "ProjectFacts", + "type": "object" + }, + "ProjectFactsParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + } + }, + "title": "ProjectFactsParams", + "type": "object" + }, + "ProjectFactsResult": { + "additionalProperties": false, + "description": "``facts`` null outside a workspace (or when detection failed).", + "properties": { + "facts": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProjectFacts" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "title": "ProjectFactsResult", + "type": "object" + }, + "ProjectFolder": { + "additionalProperties": false, + "description": "``hermes_cli/projects_db.py::ProjectFolder.to_dict``.", + "properties": { + "path": { + "title": "Path", + "type": "string" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Label" + }, + "is_primary": { + "default": false, + "title": "Is Primary", + "type": "boolean" + }, + "added_at": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Added At" + } + }, + "required": [ + "path" + ], + "title": "ProjectFolder", + "type": "object" + }, + "ProjectFolderParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "id": { + "title": "Id", + "type": "string" + }, + "path": { + "title": "Path", + "type": "string" + } + }, + "required": [ + "id", + "path" + ], + "title": "ProjectFolderParams", + "type": "object" + }, + "ProjectIdParams": { + "additionalProperties": false, + "description": "Any method addressed at one stored project (``5062`` when the id resolves to nothing).", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "id": { + "title": "Id", + "type": "string" + } + }, + "required": [ + "id" + ], + "title": "ProjectIdParams", + "type": "object" + }, + "ProjectInfo": { + "additionalProperties": false, + "description": "``hermes_cli/projects_db.py::Project.to_dict`` \u2014 one stored project with its folders.", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "slug": { + "title": "Slug", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Description" + }, + "icon": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Icon" + }, + "color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Color" + }, + "board_slug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Board Slug" + }, + "primary_path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Primary Path" + }, + "archived": { + "default": false, + "title": "Archived", + "type": "boolean" + }, + "created_at": { + "title": "Created At", + "type": "integer" + }, + "folders": { + "items": { + "$ref": "#/components/schemas/ProjectFolder" + }, + "title": "Folders", + "type": "array" + } + }, + "required": [ + "id", + "slug", + "name", + "created_at" + ], + "title": "ProjectInfo", + "type": "object" + }, + "ProjectRef": { + "additionalProperties": false, + "description": "``tui_gateway/server.py::_project_info_for_cwd``.", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "slug": { + "title": "Slug", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "primary_path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Primary Path" + } + }, + "required": [ + "id", + "slug", + "name" + ], + "title": "ProjectRef", + "type": "object" + }, + "ProjectResult": { + "additionalProperties": false, + "properties": { + "project": { + "$ref": "#/components/schemas/ProjectInfo" + } + }, + "required": [ + "project" + ], + "title": "ProjectResult", + "type": "object" + }, + "ProjectTreeLane": { + "additionalProperties": false, + "description": "One branch / worktree / kanban lane inside a repo; ``sessions`` is empty unless hydrated.", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + }, + "path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Path" + }, + "isMain": { + "default": false, + "title": "Ismain", + "type": "boolean" + }, + "isKanban": { + "default": false, + "title": "Iskanban", + "type": "boolean" + }, + "isGit": { + "default": true, + "title": "Isgit", + "type": "boolean" + }, + "sessions": { + "items": { + "$ref": "#/components/schemas/ProjectTreeSession" + }, + "title": "Sessions", + "type": "array" + } + }, + "required": [ + "id", + "label" + ], + "title": "ProjectTreeLane", + "type": "object" + }, + "ProjectTreeNode": { + "additionalProperties": false, + "description": "``project_tree._project_node`` \u2014 explicit, auto (git root) or the synthetic Home bucket.", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + }, + "path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Path" + }, + "color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Color" + }, + "icon": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Icon" + }, + "isAuto": { + "default": false, + "title": "Isauto", + "type": "boolean" + }, + "isNoProject": { + "default": false, + "title": "Isnoproject", + "type": "boolean" + }, + "sessionCount": { + "default": 0, + "title": "Sessioncount", + "type": "integer" + }, + "lastActive": { + "default": 0.0, + "title": "Lastactive", + "type": "number" + }, + "totalTokens": { + "default": 0, + "title": "Totaltokens", + "type": "integer" + }, + "totalCostUsd": { + "default": 0.0, + "title": "Totalcostusd", + "type": "number" + }, + "repos": { + "items": { + "$ref": "#/components/schemas/ProjectTreeRepo" + }, + "title": "Repos", + "type": "array" + }, + "previewSessions": { + "items": { + "$ref": "#/components/schemas/ProjectTreeSession" + }, + "title": "Previewsessions", + "type": "array" + }, + "sessionIds": { + "items": { + "type": "string" + }, + "title": "Sessionids", + "type": "array" + } + }, + "required": [ + "id", + "label" + ], + "title": "ProjectTreeNode", + "type": "object" + }, + "ProjectTreeRepo": { + "additionalProperties": false, + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + }, + "path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Path" + }, + "groups": { + "items": { + "$ref": "#/components/schemas/ProjectTreeLane" + }, + "title": "Groups", + "type": "array" + }, + "sessionCount": { + "default": 0, + "title": "Sessioncount", + "type": "integer" + } + }, + "required": [ + "id", + "label" + ], + "title": "ProjectTreeRepo", + "type": "object" + }, + "ProjectTreeSession": { + "additionalProperties": true, + "description": "``methods_projects._project_tree_row`` + ``project_tree.stamp_profile``: the minimal row the\nsidebar renders, stamped with the profile it belongs to.", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Title" + }, + "preview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Preview" + }, + "source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" + }, + "started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Started At" + }, + "ended_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ended At" + }, + "last_active": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Active" + }, + "message_count": { + "default": 0, + "title": "Message Count", + "type": "integer" + }, + "tool_call_count": { + "default": 0, + "title": "Tool Call Count", + "type": "integer" + }, + "input_tokens": { + "default": 0, + "title": "Input Tokens", + "type": "integer" + }, + "output_tokens": { + "default": 0, + "title": "Output Tokens", + "type": "integer" + }, + "is_active": { + "default": false, + "title": "Is Active", + "type": "boolean" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + }, + "git_branch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Git Branch" + }, + "git_repo_root": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Git Repo Root" + }, + "parent_session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Parent Session Id" + }, + "pinned": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pinned" + }, + "unread": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Unread" + }, + "archived": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Archived" + }, + "actual_cost_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Actual Cost Usd" + }, + "estimated_cost_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Estimated Cost Usd" + }, + "handoff_platform": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Handoff Platform" + }, + "handoff_state": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Handoff State" + }, + "_lineage_root_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Lineage Root Id" + }, + "_lineage_ids": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Lineage Ids" + }, + "continuation_kind": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Continuation Kind" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "id" + ], + "title": "ProjectTreeSession", + "type": "object" + }, + "ProjectsAddFolderParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "id": { + "title": "Id", + "type": "string" + }, + "path": { + "title": "Path", + "type": "string" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Label" + }, + "is_primary": { + "default": false, + "title": "Is Primary", + "type": "boolean" + } + }, + "required": [ + "id", + "path" + ], + "title": "ProjectsAddFolderParams", + "type": "object" + }, + "ProjectsArchiveParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "id": { + "title": "Id", + "type": "string" + }, + "restore": { + "default": false, + "title": "Restore", + "type": "boolean" + } + }, + "required": [ + "id" + ], + "title": "ProjectsArchiveParams", + "type": "object" + }, + "ProjectsCreateParams": { + "additionalProperties": false, + "description": "``use`` also activates the new project.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "title": "Name", + "type": "string" + }, + "folders": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Folders" + }, + "slug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Slug" + }, + "primary_path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Primary Path" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Description" + }, + "icon": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Icon" + }, + "color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Color" + }, + "board_slug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Board Slug" + }, + "use": { + "default": false, + "title": "Use", + "type": "boolean" + } + }, + "required": [ + "name" + ], + "title": "ProjectsCreateParams", + "type": "object" + }, + "ProjectsDiscoverReposParams": { + "additionalProperties": false, + "description": "``scan`` asks the host to walk the policy roots itself (remote-gateway desktop).", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "scan": { + "default": false, + "title": "Scan", + "type": "boolean" + } + }, + "title": "ProjectsDiscoverReposParams", + "type": "object" + }, + "ProjectsDiscoverReposResult": { + "additionalProperties": false, + "properties": { + "repos": { + "items": { + "$ref": "#/components/schemas/DiscoveredRepo" + }, + "title": "Repos", + "type": "array" + }, + "discovery_policy": { + "anyOf": [ + { + "$ref": "#/components/schemas/RepoDiscoveryPolicy" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "repos" + ], + "title": "ProjectsDiscoverReposResult", + "type": "object" + }, + "ProjectsForCwdParams": { + "additionalProperties": false, + "description": "Absent ``cwd`` resolves the gateway's default completion cwd.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + } + }, + "title": "ProjectsForCwdParams", + "type": "object" + }, + "ProjectsForCwdResult": { + "additionalProperties": false, + "properties": { + "project": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProjectInfo" + }, + { + "type": "null" + } + ], + "default": null + }, + "cwd": { + "title": "Cwd", + "type": "string" + }, + "branch": { + "default": "", + "title": "Branch", + "type": "string" + } + }, + "required": [ + "cwd" + ], + "title": "ProjectsForCwdResult", + "type": "object" + }, + "ProjectsPayload": { + "additionalProperties": false, + "description": "``methods_projects._projects_payload``: every project (archived included) + the active id.", + "properties": { + "projects": { + "items": { + "$ref": "#/components/schemas/ProjectInfo" + }, + "title": "Projects", + "type": "array" + }, + "active_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Active Id" + } + }, + "required": [ + "projects" + ], + "title": "ProjectsPayload", + "type": "object" + }, + "ProjectsProjectSessionsParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "project_id": { + "title": "Project Id", + "type": "string" + }, + "session_limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Limit" + } + }, + "required": [ + "project_id" + ], + "title": "ProjectsProjectSessionsParams", + "type": "object" + }, + "ProjectsProjectSessionsResult": { + "additionalProperties": false, + "properties": { + "project": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProjectTreeNode" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "title": "ProjectsProjectSessionsResult", + "type": "object" + }, + "ProjectsRecordReposParams": { + "additionalProperties": false, + "description": "Repos as ``{root, label}`` objects or bare root strings; entries without a root are skipped.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "repos": { + "anyOf": [ + { + "items": { + "anyOf": [ + { + "$ref": "#/components/schemas/RecordRepoItem" + }, + { + "type": "string" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Repos" + }, + "discovery_policy": { + "anyOf": [ + { + "$ref": "#/components/schemas/RepoDiscoveryPolicyParams" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "title": "ProjectsRecordReposParams", + "type": "object" + }, + "ProjectsRecordReposResult": { + "additionalProperties": false, + "properties": { + "repos": { + "items": { + "$ref": "#/components/schemas/DiscoveredRepo" + }, + "title": "Repos", + "type": "array" + }, + "discovery_policy": { + "anyOf": [ + { + "$ref": "#/components/schemas/RepoDiscoveryPolicy" + }, + { + "type": "null" + } + ], + "default": null + }, + "accepted": { + "title": "Accepted", + "type": "boolean" + } + }, + "required": [ + "repos", + "accepted" + ], + "title": "ProjectsRecordReposResult", + "type": "object" + }, + "ProjectsSetActiveParams": { + "additionalProperties": false, + "description": "No ``id`` (or null) clears the active project.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Id" + } + }, + "title": "ProjectsSetActiveParams", + "type": "object" + }, + "ProjectsTreeParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "preview_limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Preview Limit" + }, + "session_limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Limit" + } + }, + "title": "ProjectsTreeParams", + "type": "object" + }, + "ProjectsTreeResult": { + "additionalProperties": false, + "properties": { + "projects": { + "items": { + "$ref": "#/components/schemas/ProjectTreeNode" + }, + "title": "Projects", + "type": "array" + }, + "active_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Active Id" + }, + "scoped_session_ids": { + "items": { + "type": "string" + }, + "title": "Scoped Session Ids", + "type": "array" + } + }, + "required": [ + "projects" + ], + "title": "ProjectsTreeResult", + "type": "object" + }, + "ProjectsUpdateParams": { + "additionalProperties": false, + "description": "Absent keys are left untouched; ``''`` clears ``color`` / ``icon``.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "id": { + "title": "Id", + "type": "string" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Description" + }, + "icon": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Icon" + }, + "color": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Color" + }, + "board_slug": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Board Slug" + } + }, + "required": [ + "id" + ], + "title": "ProjectsUpdateParams", + "type": "object" + }, + "PromptSubmitParams": { + "additionalProperties": false, + "description": "``text`` is normally a string; the relay / hosted paths may hand a structured (parts list)\npayload, and the busy path renders it. Truncation (rewind / edit / regenerate) needs explicit\nconsent: ``confirm_truncate`` plus one durable target (``truncate_before_row_id`` preferred,\n``truncate_before_message_id``, or the legacy ``truncate_before_user_ordinal``).", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "text": { + "default": "", + "title": "Text" + }, + "display_kind": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display Kind" + }, + "interrupted": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Interrupted" + }, + "queued": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Queued" + }, + "surface": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Surface" + }, + "voice_context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Voice Context" + }, + "title_preview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Title Preview" + }, + "truncate_before_user_ordinal": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Truncate Before User Ordinal" + }, + "truncate_before_row_id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Truncate Before Row Id" + }, + "truncate_before_message_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Truncate Before Message Id" + }, + "confirm_truncate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Confirm Truncate" + }, + "confirm_empty_truncate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Confirm Empty Truncate" + }, + "rebind_survivor_row_ids": { + "anyOf": [ + { + "items": { + "type": "integer" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Rebind Survivor Row Ids" + } + }, + "required": [ + "session_id" + ], + "title": "PromptSubmitParams", + "type": "object" + }, + "PromptSubmitResult": { + "additionalProperties": false, + "description": "``status`` is absent only on the typed-stop-phrase reply (``voice_stopped``). After a\ntruncation the survivor row ids let the client rebind its cached ``rowId``s (``None`` map\nentries: drop the cached id). ``turn_isolation`` marks a compute-host dispatch.", + "properties": { + "status": { + "anyOf": [ + { + "$ref": "#/components/schemas/PromptSubmitStatus" + }, + { + "type": "null" + } + ], + "default": null + }, + "voice_stopped": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Voice Stopped" + }, + "user_row_id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "User Row Id" + }, + "survivor_user_row_ids": { + "anyOf": [ + { + "items": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Survivor User Row Ids" + }, + "survivor_row_id_map": { + "anyOf": [ + { + "additionalProperties": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ] + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Survivor Row Id Map" + }, + "turn_isolation": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Turn Isolation" + } + }, + "title": "PromptSubmitResult", + "type": "object" + }, + "PromptSubmitStatus": { + "enum": [ + "streaming", + "queued", + "steered", + "redirected" + ], + "title": "PromptSubmitStatus", + "type": "string" + }, + "QueuedPrompt": { + "additionalProperties": false, + "properties": { + "user": { + "title": "User", + "type": "string" + } + }, + "required": [ + "user" + ], + "title": "QueuedPrompt", + "type": "object" + }, + "ReactionAuthor": { + "enum": [ + "user", + "agent" + ], + "title": "ReactionAuthor", + "type": "string" + }, + "ReactionPayload": { + "additionalProperties": false, + "description": "``agent_callbacks`` reaction_callback.", + "properties": { + "kind": { + "title": "Kind", + "type": "string" + } + }, + "required": [ + "kind" + ], + "title": "ReactionPayload", + "type": "object" + }, + "ReadRangeRequestParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "start": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Start" + }, + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Count" + } + }, + "required": [ + "session_id" + ], + "title": "ReadRangeRequestParams", + "type": "object" + }, + "RecordRepoItem": { + "additionalProperties": false, + "properties": { + "root": { + "title": "Root", + "type": "string" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Label" + } + }, + "required": [ + "root" + ], + "title": "RecordRepoItem", + "type": "object" + }, + "RelayAgentRow": { + "additionalProperties": true, + "description": "A roster row the Desktop pushes (``tools/bot_relay.py::_normalize_roster_row``); invalid\nrows are dropped server-side, so the shape stays open.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "handle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Handle" + }, + "connection_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Connection Id" + }, + "connection_label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Connection Label" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Title" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Description" + }, + "online": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Online" + } + }, + "title": "RelayAgentRow", + "type": "object" + }, + "RelayEnvelope": { + "additionalProperties": true, + "description": "``tools/bot_relay.py::enqueue_envelope``.", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "created_at": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + } + ], + "title": "Created At" + }, + "from_profile": { + "title": "From Profile", + "type": "string" + }, + "from_handle": { + "title": "From Handle", + "type": "string" + }, + "target_connection": { + "title": "Target Connection", + "type": "string" + }, + "target_profile": { + "title": "Target Profile", + "type": "string" + }, + "target_handle": { + "title": "Target Handle", + "type": "string" + }, + "message": { + "title": "Message", + "type": "string" + } + }, + "required": [ + "id", + "created_at", + "from_profile", + "from_handle", + "target_connection", + "target_profile", + "target_handle", + "message" + ], + "title": "RelayEnvelope", + "type": "object" + }, + "ReloadEnvParams": { + "additionalProperties": false, + "properties": {}, + "title": "ReloadEnvParams", + "type": "object" + }, + "ReloadEnvResult": { + "additionalProperties": false, + "properties": { + "updated": { + "title": "Updated", + "type": "integer" + } + }, + "required": [ + "updated" + ], + "title": "ReloadEnvResult", + "type": "object" + }, + "ReloadMcpParams": { + "additionalProperties": false, + "description": "Without ``confirm`` the handler may answer ``confirm_required`` (per ``approvals.mcp_reload_confirm``);\n``always`` persists the opt-out; ``rev`` is the config revision the caller wants loaded (coalescing).", + "properties": { + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "confirm": { + "default": false, + "title": "Confirm", + "type": "boolean" + }, + "always": { + "default": false, + "title": "Always", + "type": "boolean" + }, + "rev": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Rev" + } + }, + "title": "ReloadMcpParams", + "type": "object" + }, + "ReloadMcpResult": { + "additionalProperties": false, + "properties": { + "status": { + "$ref": "#/components/schemas/ReloadMcpStatus" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + }, + "loaded_rev": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Loaded Rev" + }, + "coalesced": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Coalesced" + }, + "turn_isolation": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Turn Isolation" + }, + "host_ack": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Host Ack" + } + }, + "required": [ + "status" + ], + "title": "ReloadMcpResult", + "type": "object" + }, + "ReloadMcpStatus": { + "enum": [ + "confirm_required", + "reloaded" + ], + "title": "ReloadMcpStatus", + "type": "string" + }, + "RepoDiscoveryPolicy": { + "additionalProperties": false, + "description": "``methods_projects._repo_discovery_policy`` \u2014 the effective ``desktop.repo_scan_*`` config.", + "properties": { + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "roots": { + "items": { + "type": "string" + }, + "title": "Roots", + "type": "array" + }, + "exclude_paths": { + "items": { + "type": "string" + }, + "title": "Exclude Paths", + "type": "array" + } + }, + "required": [ + "enabled", + "roots", + "exclude_paths" + ], + "title": "RepoDiscoveryPolicy", + "type": "object" + }, + "RepoDiscoveryPolicyParams": { + "additionalProperties": false, + "description": "The policy the desktop scanned under (short or ``repo_scan_*`` long keys both accepted).", + "properties": { + "enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Enabled" + }, + "roots": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Roots" + }, + "exclude_paths": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Exclude Paths" + }, + "repo_scan_enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Repo Scan Enabled" + }, + "repo_scan_roots": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Repo Scan Roots" + }, + "repo_scan_exclude_paths": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Repo Scan Exclude Paths" + } + }, + "title": "RepoDiscoveryPolicyParams", + "type": "object" + }, + "RequestAnswerParams": { + "additionalProperties": false, + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "result": { + "additionalProperties": true, + "title": "Result", + "type": "object" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "id", + "result" + ], + "title": "RequestAnswerParams", + "type": "object" + }, + "RequestAnswerResult": { + "additionalProperties": false, + "properties": { + "status": { + "$ref": "#/components/schemas/ClarifyLockStatus" + } + }, + "required": [ + "status" + ], + "title": "RequestAnswerResult", + "type": "object" + }, + "RequestCancelPayload": { + "additionalProperties": false, + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "method": { + "title": "Method", + "type": "string" + }, + "reason": { + "title": "Reason", + "type": "string" + } + }, + "required": [ + "id", + "method", + "reason" + ], + "title": "RequestCancelPayload", + "type": "object" + }, + "ResumePhaseStatus": { + "enum": [ + "loading", + "complete", + "failed" + ], + "title": "ResumePhaseStatus", + "type": "string" + }, + "ReviewSummaryPayload": { + "additionalProperties": false, + "description": "``server`` background_review_callback.", + "properties": { + "text": { + "title": "Text", + "type": "string" + } + }, + "required": [ + "text" + ], + "title": "ReviewSummaryPayload", + "type": "object" + }, + "RollbackCheckpoint": { + "additionalProperties": false, + "properties": { + "hash": { + "default": "", + "title": "Hash", + "type": "string" + }, + "timestamp": { + "default": "", + "title": "Timestamp", + "type": "string" + }, + "message": { + "default": "", + "title": "Message", + "type": "string" + } + }, + "title": "RollbackCheckpoint", + "type": "object" + }, + "RollbackDiffParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "hash": { + "title": "Hash", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id", + "hash" + ], + "title": "RollbackDiffParams", + "type": "object" + }, + "RollbackDiffResult": { + "additionalProperties": false, + "properties": { + "stat": { + "default": "", + "title": "Stat", + "type": "string" + }, + "diff": { + "default": "", + "title": "Diff", + "type": "string" + }, + "rendered": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Rendered" + } + }, + "title": "RollbackDiffResult", + "type": "object" + }, + "RollbackListParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id" + ], + "title": "RollbackListParams", + "type": "object" + }, + "RollbackListResult": { + "additionalProperties": false, + "properties": { + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "checkpoints": { + "items": { + "$ref": "#/components/schemas/RollbackCheckpoint" + }, + "title": "Checkpoints", + "type": "array" + } + }, + "required": [ + "enabled" + ], + "title": "RollbackListResult", + "type": "object" + }, + "RollbackRestoreParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "hash": { + "title": "Hash", + "type": "string" + }, + "file_path": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "File Path" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id", + "hash" + ], + "title": "RollbackRestoreParams", + "type": "object" + }, + "RollbackRestoreResult": { + "additionalProperties": true, + "description": "``tools/checkpoint_manager.py::restore`` outcome; ``history_removed`` is added for a full\n(non-file) restore that also rewound the live transcript.", + "properties": { + "success": { + "title": "Success", + "type": "boolean" + }, + "restored_to": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Restored To" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + }, + "directory": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Directory" + }, + "file": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "File" + }, + "restored_files": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Restored Files" + }, + "skipped_user_edits": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Skipped User Edits" + }, + "skipped_oversize": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Skipped Oversize" + }, + "failed_deletes": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Failed Deletes" + }, + "history_removed": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "History Removed" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "debug": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Debug" + } + }, + "required": [ + "success" + ], + "title": "RollbackRestoreResult", + "type": "object" + }, + "Room": { + "additionalProperties": false, + "description": "``gateway/hosted_rooms.py::_room_from_row`` plus the branch-only keys ``create`` (legacy\nadoption), ``state`` (``authority_claim``) and ``rename`` (``event``) add.", + "properties": { + "room_id": { + "title": "Room Id", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "members": { + "items": { + "$ref": "#/components/schemas/RoomMember" + }, + "title": "Members", + "type": "array" + }, + "authority_gateway_id": { + "title": "Authority Gateway Id", + "type": "string" + }, + "authority_epoch": { + "title": "Authority Epoch", + "type": "integer" + }, + "revision": { + "title": "Revision", + "type": "integer" + }, + "created_at": { + "title": "Created At", + "type": "number" + }, + "updated_at": { + "title": "Updated At", + "type": "number" + }, + "idempotent": { + "default": false, + "title": "Idempotent", + "type": "boolean" + }, + "disbanded_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Disbanded At" + }, + "latest_seq": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Latest Seq" + }, + "adopted": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Adopted" + }, + "claim_event": { + "anyOf": [ + { + "$ref": "#/components/schemas/RoomEvent" + }, + { + "type": "null" + } + ], + "default": null + }, + "authority_claim": { + "anyOf": [ + { + "$ref": "#/components/schemas/RoomEvent" + }, + { + "type": "null" + } + ], + "default": null + }, + "event": { + "anyOf": [ + { + "$ref": "#/components/schemas/RoomEvent" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "room_id", + "name", + "members", + "authority_gateway_id", + "authority_epoch", + "revision", + "created_at", + "updated_at" + ], + "title": "Room", + "type": "object" + }, + "RoomActor": { + "additionalProperties": false, + "properties": { + "kind": { + "title": "Kind", + "type": "string" + }, + "id": { + "title": "Id", + "type": "string" + } + }, + "required": [ + "kind", + "id" + ], + "title": "RoomActor", + "type": "object" + }, + "RoomAuthority": { + "additionalProperties": false, + "properties": { + "gateway_id": { + "title": "Gateway Id", + "type": "string" + }, + "epoch": { + "title": "Epoch", + "type": "integer" + } + }, + "required": [ + "gateway_id", + "epoch" + ], + "title": "RoomAuthority", + "type": "object" + }, + "RoomDriverStatus": { + "additionalProperties": false, + "description": "``HostedRoomService.status(room_id)``; ``pending_actions`` rows are ``{kind: retry, task_id}``\nor the driver's approval action (``kind: approval`` + run/session/approval context).", + "properties": { + "running": { + "title": "Running", + "type": "boolean" + }, + "working": { + "title": "Working", + "type": "boolean" + }, + "blocked": { + "title": "Blocked", + "type": "boolean" + }, + "counts": { + "additionalProperties": { + "type": "integer" + }, + "title": "Counts", + "type": "object" + }, + "pending_actions": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Pending Actions", + "type": "array" + }, + "peer_routes": { + "items": { + "$ref": "#/components/schemas/PeerRouteStatus" + }, + "title": "Peer Routes", + "type": "array" + } + }, + "required": [ + "running", + "working", + "blocked", + "counts", + "pending_actions", + "peer_routes" + ], + "title": "RoomDriverStatus", + "type": "object" + }, + "RoomEvent": { + "additionalProperties": false, + "description": "``gateway/hosted_rooms.py::_event_from_row``.", + "properties": { + "room_id": { + "title": "Room Id", + "type": "string" + }, + "seq": { + "title": "Seq", + "type": "integer" + }, + "event_id": { + "title": "Event Id", + "type": "string" + }, + "kind": { + "title": "Kind", + "type": "string" + }, + "actor": { + "$ref": "#/components/schemas/RoomActor" + }, + "authority_epoch": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Authority Epoch" + }, + "payload": { + "additionalProperties": true, + "title": "Payload", + "type": "object" + }, + "created_at": { + "title": "Created At", + "type": "number" + }, + "idempotent": { + "default": false, + "title": "Idempotent", + "type": "boolean" + } + }, + "required": [ + "room_id", + "seq", + "event_id", + "kind", + "actor", + "payload", + "created_at" + ], + "title": "RoomEvent", + "type": "object" + }, + "RoomExecutionPolicy": { + "additionalProperties": false, + "description": "``gateway/hosted_room_execution_policy.py::execution_policy_mapping``.", + "properties": { + "version": { + "title": "Version", + "type": "integer" + }, + "target_profile": { + "title": "Target Profile", + "type": "string" + }, + "enabled_toolsets": { + "items": { + "type": "string" + }, + "title": "Enabled Toolsets", + "type": "array" + }, + "approval_mode": { + "title": "Approval Mode", + "type": "string" + }, + "max_iterations": { + "title": "Max Iterations", + "type": "integer" + }, + "policy_digest": { + "title": "Policy Digest", + "type": "string" + } + }, + "required": [ + "version", + "target_profile", + "enabled_toolsets", + "approval_mode", + "max_iterations", + "policy_digest" + ], + "title": "RoomExecutionPolicy", + "type": "object" + }, + "RoomLinkCatalog": { + "additionalProperties": false, + "description": "``gateway/hosted_room_peer.py::GatewayRoomCatalog.as_mapping``.", + "properties": { + "installation_id": { + "title": "Installation Id", + "type": "string" + }, + "protocol_versions": { + "items": { + "type": "integer" + }, + "title": "Protocol Versions", + "type": "array" + }, + "link_modes": { + "items": { + "type": "string" + }, + "title": "Link Modes", + "type": "array" + }, + "persistent_process": { + "title": "Persistent Process", + "type": "boolean" + }, + "text": { + "title": "Text", + "type": "boolean" + }, + "attachments": { + "title": "Attachments", + "type": "boolean" + }, + "execution_policy": { + "$ref": "#/components/schemas/RoomExecutionPolicy" + }, + "catalog_digest": { + "title": "Catalog Digest", + "type": "string" + }, + "endpoint": { + "anyOf": [ + { + "$ref": "#/components/schemas/RoomLinkEndpoint" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "installation_id", + "protocol_versions", + "link_modes", + "persistent_process", + "text", + "attachments", + "execution_policy", + "catalog_digest" + ], + "title": "RoomLinkCatalog", + "type": "object" + }, + "RoomLinkEndpoint": { + "additionalProperties": false, + "description": "``GatewayRoomCatalog.endpoint_mapping``: ``url``/``transport_security`` when available,\n``reason`` when not.", + "properties": { + "available": { + "title": "Available", + "type": "boolean" + }, + "url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Url" + }, + "transport_security": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Transport Security" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + } + }, + "required": [ + "available" + ], + "title": "RoomLinkEndpoint", + "type": "object" + }, + "RoomLinkStatus": { + "additionalProperties": false, + "description": "``enabled`` with ``profile``/``catalog``/``endpoint``, or disabled with a ``reason``.", + "properties": { + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "catalog": { + "anyOf": [ + { + "$ref": "#/components/schemas/RoomLinkCatalog" + }, + { + "type": "null" + } + ], + "default": null + }, + "endpoint": { + "anyOf": [ + { + "$ref": "#/components/schemas/RoomLinkEndpoint" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + } + }, + "required": [ + "enabled" + ], + "title": "RoomLinkStatus", + "type": "object" + }, + "RoomMember": { + "additionalProperties": true, + "description": "One roster row (``hosted_room_discussion.validate_roster``); legacy rooms may carry\npre-normalisation rows, so the set stays open.", + "properties": { + "member_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Member Id" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "handle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Handle" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display Name" + }, + "target": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Target" + } + }, + "title": "RoomMember", + "type": "object" + }, + "RoomMemberInput": { + "additionalProperties": true, + "description": "A roster row as the client proposes it; ``validate_roster`` owns the exact rules.", + "properties": { + "member_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Member Id" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "handle": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Handle" + }, + "display_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display Name" + }, + "target": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Target" + } + }, + "title": "RoomMemberInput", + "type": "object" + }, + "RoomTaskReceipt": { + "additionalProperties": false, + "properties": { + "room_id": { + "title": "Room Id", + "type": "string" + }, + "task_id": { + "title": "Task Id", + "type": "string" + }, + "thread_id": { + "title": "Thread Id", + "type": "string" + }, + "turn_id": { + "title": "Turn Id", + "type": "string" + }, + "status": { + "title": "Status", + "type": "string" + }, + "execution_generation": { + "title": "Execution Generation", + "type": "integer" + }, + "cancel_generation": { + "title": "Cancel Generation", + "type": "integer" + } + }, + "required": [ + "room_id", + "task_id", + "thread_id", + "turn_id", + "status", + "execution_generation", + "cancel_generation" + ], + "title": "RoomTaskReceipt", + "type": "object" + }, + "RoomTombstone": { + "additionalProperties": false, + "properties": { + "room_id": { + "title": "Room Id", + "type": "string" + }, + "disbanded_at": { + "title": "Disbanded At", + "type": "number" + }, + "idempotent": { + "title": "Idempotent", + "type": "boolean" + }, + "history_expired": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "History Expired" + }, + "event": { + "anyOf": [ + { + "$ref": "#/components/schemas/RoomEvent" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "room_id", + "disbanded_at", + "idempotent" + ], + "title": "RoomTombstone", + "type": "object" + }, + "SecretRequestParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "env_var": { + "title": "Env Var", + "type": "string" + }, + "prompt": { + "title": "Prompt", + "type": "string" + }, + "metadata": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Metadata" + } + }, + "required": [ + "session_id", + "env_var", + "prompt" + ], + "title": "SecretRequestParams", + "type": "object" + }, + "SeedMessage": { + "additionalProperties": true, + "description": "One create-time transcript row (``session_history._coerce_seed_history``); ``text`` is the\nlegacy alias of ``content``; only ``display_kind: \"hidden\"`` is accepted from the wire. Clients\nforward stored rows verbatim (``_row_id``, ``timestamp``, \u2026) and the coercer drops what it does\nnot use, so the row stays open.", + "properties": { + "role": { + "title": "Role", + "type": "string" + }, + "content": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Content" + }, + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Text" + }, + "display_kind": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display Kind" + } + }, + "required": [ + "role" + ], + "title": "SeedMessage", + "type": "object" + }, + "SessionActivateParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "cols": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cols" + }, + "omit_messages": { + "default": false, + "title": "Omit Messages", + "type": "boolean" + } + }, + "required": [ + "session_id" + ], + "title": "SessionActivateParams", + "type": "object" + }, + "SessionActivateResult": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "message_count": { + "title": "Message Count", + "type": "integer" + }, + "messages": { + "items": { + "$ref": "#/components/schemas/TranscriptMessage" + }, + "title": "Messages", + "type": "array" + }, + "info": { + "$ref": "#/components/schemas/SessionLiveInfo" + }, + "stored_session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Stored Session Id" + }, + "resumed": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Resumed" + }, + "session_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Key" + }, + "messages_omitted": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Messages Omitted" + }, + "hydrating": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Hydrating" + }, + "running": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Running" + }, + "turn_started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Turn Started At" + }, + "started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Started At" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" + }, + "inflight": { + "anyOf": [ + { + "$ref": "#/components/schemas/InflightTurn" + }, + { + "type": "null" + } + ], + "default": null + }, + "queued": { + "anyOf": [ + { + "$ref": "#/components/schemas/QueuedPrompt" + }, + { + "type": "null" + } + ], + "default": null + }, + "pending_approval": { + "anyOf": [ + { + "$ref": "#/components/schemas/PendingApproval" + }, + { + "type": "null" + } + ], + "default": null + }, + "open_requests": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/OpenRequestEntry" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Open Requests" + }, + "pending_connection": { + "anyOf": [ + { + "$ref": "#/components/schemas/ConnectionRequestPayload" + }, + { + "type": "null" + } + ], + "default": null + }, + "todo_state": { + "anyOf": [ + { + "$ref": "#/components/schemas/TodoState" + }, + { + "type": "null" + } + ], + "default": null + }, + "auto_continue": { + "anyOf": [ + { + "$ref": "#/components/schemas/AutoContinue" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "session_id", + "message_count", + "messages", + "info" + ], + "title": "SessionActivateResult", + "type": "object" + }, + "SessionActiveItem": { + "additionalProperties": false, + "description": "``server._session_live_item``.", + "properties": { + "current": { + "title": "Current", + "type": "boolean" + }, + "id": { + "title": "Id", + "type": "string" + }, + "last_active": { + "title": "Last Active", + "type": "number" + }, + "message_count": { + "title": "Message Count", + "type": "integer" + }, + "model": { + "title": "Model", + "type": "string" + }, + "preview": { + "title": "Preview", + "type": "string" + }, + "session_key": { + "title": "Session Key", + "type": "string" + }, + "started_at": { + "title": "Started At", + "type": "number" + }, + "status": { + "$ref": "#/components/schemas/LiveSessionStatus" + }, + "title": { + "title": "Title", + "type": "string" + } + }, + "required": [ + "current", + "id", + "last_active", + "message_count", + "model", + "preview", + "session_key", + "started_at", + "status", + "title" + ], + "title": "SessionActiveItem", + "type": "object" + }, + "SessionActiveListParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "current_session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Current Session Id" + } + }, + "title": "SessionActiveListParams", + "type": "object" + }, + "SessionActiveListResult": { + "additionalProperties": false, + "properties": { + "sessions": { + "items": { + "$ref": "#/components/schemas/SessionActiveItem" + }, + "title": "Sessions", + "type": "array" + } + }, + "required": [ + "sessions" + ], + "title": "SessionActiveListResult", + "type": "object" + }, + "SessionArchiveParams": { + "additionalProperties": false, + "description": "``session_id`` (or its ``session_key`` alias) is a live runtime id first, else a stored id / key / title.", + "properties": { + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "session_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Key" + }, + "archived": { + "default": true, + "title": "Archived", + "type": "boolean" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "SessionArchiveParams", + "type": "object" + }, + "SessionArchiveResult": { + "additionalProperties": false, + "properties": { + "archived": { + "title": "Archived", + "type": "boolean" + }, + "session_key": { + "title": "Session Key", + "type": "string" + } + }, + "required": [ + "archived", + "session_key" + ], + "title": "SessionArchiveResult", + "type": "object" + }, + "SessionBranchParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Count" + } + }, + "required": [ + "session_id" + ], + "title": "SessionBranchParams", + "type": "object" + }, + "SessionBranchResult": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "stored_session_id": { + "title": "Stored Session Id", + "type": "string" + }, + "title": { + "title": "Title", + "type": "string" + }, + "parent": { + "title": "Parent", + "type": "string" + }, + "message_count": { + "title": "Message Count", + "type": "integer" + }, + "messages": { + "items": { + "$ref": "#/components/schemas/TranscriptMessage" + }, + "title": "Messages", + "type": "array" + }, + "info": { + "$ref": "#/components/schemas/SessionLiveInfo" + } + }, + "required": [ + "session_id", + "stored_session_id", + "title", + "parent", + "message_count", + "messages", + "info" + ], + "title": "SessionBranchResult", + "type": "object" + }, + "SessionBranchStoredParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "parent_session_id": { + "minLength": 1, + "title": "Parent Session Id", + "type": "string" + }, + "cols": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cols" + }, + "source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + } + }, + "required": [ + "parent_session_id" + ], + "title": "SessionBranchStoredParams", + "type": "object" + }, + "SessionBranchStoredResult": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "stored_session_id": { + "title": "Stored Session Id", + "type": "string" + }, + "message_count": { + "title": "Message Count", + "type": "integer" + }, + "messages_omitted": { + "title": "Messages Omitted", + "type": "boolean" + }, + "info": { + "$ref": "#/components/schemas/SessionLiveInfo" + } + }, + "required": [ + "session_id", + "stored_session_id", + "message_count", + "messages_omitted", + "info" + ], + "title": "SessionBranchStoredResult", + "type": "object" + }, + "SessionBranchWholeParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + } + }, + "required": [ + "session_id" + ], + "title": "SessionBranchWholeParams", + "type": "object" + }, + "SessionBranchWholeResult": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "stored_session_id": { + "title": "Stored Session Id", + "type": "string" + }, + "title": { + "title": "Title", + "type": "string" + }, + "parent": { + "title": "Parent", + "type": "string" + }, + "message_count": { + "title": "Message Count", + "type": "integer" + }, + "messages_omitted": { + "title": "Messages Omitted", + "type": "boolean" + }, + "info": { + "$ref": "#/components/schemas/SessionLiveInfo" + } + }, + "required": [ + "session_id", + "stored_session_id", + "title", + "parent", + "message_count", + "messages_omitted", + "info" + ], + "title": "SessionBranchWholeResult", + "type": "object" + }, + "SessionCloseParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id" + ], + "title": "SessionCloseParams", + "type": "object" + }, + "SessionCloseResult": { + "additionalProperties": false, + "properties": { + "closed": { + "title": "Closed", + "type": "boolean" + } + }, + "required": [ + "closed" + ], + "title": "SessionCloseResult", + "type": "object" + }, + "SessionCompressParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "focus_topic": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Focus Topic" + } + }, + "required": [ + "session_id" + ], + "title": "SessionCompressParams", + "type": "object" + }, + "SessionCompressResult": { + "additionalProperties": true, + "description": "In-process: the before/after summary + replacement transcript. Compute host: its result passes\nthrough (hence open) with ``turn_isolation``; a lock held elsewhere answers ``compressed: false``.", + "properties": { + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" + }, + "removed": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Removed" + }, + "before_messages": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Before Messages" + }, + "after_messages": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "After Messages" + }, + "before_tokens": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Before Tokens" + }, + "after_tokens": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "After Tokens" + }, + "summary": { + "anyOf": [ + { + "$ref": "#/components/schemas/CompressionSummary" + }, + { + "type": "null" + } + ], + "default": null + }, + "usage": { + "anyOf": [ + { + "$ref": "#/components/schemas/Usage" + }, + { + "type": "null" + } + ], + "default": null + }, + "info": { + "anyOf": [ + { + "$ref": "#/components/schemas/SessionLiveInfo" + }, + { + "type": "null" + } + ], + "default": null + }, + "messages": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/TranscriptMessage" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Messages" + }, + "compressed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Compressed" + }, + "lock_held": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Lock Held" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + }, + "turn_isolation": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Turn Isolation" + }, + "host_ack": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Host Ack" + } + }, + "title": "SessionCompressResult", + "type": "object" + }, + "SessionContextBreakdownParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id" + ], + "title": "SessionContextBreakdownParams", + "type": "object" + }, + "SessionContextBreakdownResult": { + "additionalProperties": false, + "description": "``agent.context_breakdown.compute_session_context_breakdown`` (empty categories before the agent builds)\nplus the per-file context manifest (empty until the agent exists).", + "properties": { + "categories": { + "items": { + "$ref": "#/components/schemas/ContextCategory" + }, + "title": "Categories", + "type": "array" + }, + "context_max": { + "title": "Context Max", + "type": "integer" + }, + "context_percent": { + "title": "Context Percent", + "type": "integer" + }, + "context_used": { + "title": "Context Used", + "type": "integer" + }, + "estimated_total": { + "title": "Estimated Total", + "type": "integer" + }, + "context_estimated": { + "title": "Context Estimated", + "type": "boolean" + }, + "context_source": { + "title": "Context Source", + "type": "string" + }, + "model": { + "title": "Model", + "type": "string" + }, + "context_files": { + "default": [], + "items": { + "$ref": "#/components/schemas/ContextFileSource" + }, + "title": "Context Files", + "type": "array" + } + }, + "required": [ + "categories", + "context_max", + "context_percent", + "context_used", + "estimated_total", + "context_estimated", + "context_source", + "model" + ], + "title": "SessionContextBreakdownResult", + "type": "object" + }, + "SessionControlArgs": { + "additionalProperties": false, + "description": "``subgoal.add`` reads ``text``; ``subgoal.remove`` reads the 1-based ``index``.", + "properties": { + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Text" + }, + "index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Index" + } + }, + "title": "SessionControlArgs", + "type": "object" + }, + "SessionControlDispatch": { + "additionalProperties": false, + "description": "``_dispatch_envelope`` \u2014 the command result's user-visible envelope, every key always present.", + "properties": { + "type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Type" + }, + "output": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Output" + }, + "notice": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Notice" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Message" + }, + "display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Display" + } + }, + "required": [ + "type", + "output", + "notice", + "message", + "display" + ], + "title": "SessionControlDispatch", + "type": "object" + }, + "SessionControlParams": { + "additionalProperties": false, + "description": "``action`` is validated by the handler (unknown / gate actions answer ``4004``), so it stays a\nstring on the wire; ``SessionControlAction`` lists the accepted set.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "session_id": { + "title": "Session Id", + "type": "string" + }, + "action": { + "title": "Action", + "type": "string" + }, + "args": { + "anyOf": [ + { + "$ref": "#/components/schemas/SessionControlArgs" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "session_id", + "action" + ], + "title": "SessionControlParams", + "type": "object" + }, + "SessionControlReadParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "session_id": { + "title": "Session Id", + "type": "string" + } + }, + "required": [ + "session_id" + ], + "title": "SessionControlReadParams", + "type": "object" + }, + "SessionControlReadResult": { + "additionalProperties": false, + "properties": { + "control": { + "$ref": "#/components/schemas/SessionControlSnapshot" + } + }, + "required": [ + "control" + ], + "title": "SessionControlReadResult", + "type": "object" + }, + "SessionControlResult": { + "additionalProperties": false, + "properties": { + "control": { + "$ref": "#/components/schemas/SessionControlSnapshot" + }, + "dispatch": { + "$ref": "#/components/schemas/SessionControlDispatch" + } + }, + "required": [ + "control", + "dispatch" + ], + "title": "SessionControlResult", + "type": "object" + }, + "SessionControlSnapshot": { + "additionalProperties": false, + "description": "``_snapshot_control`` \u2014 ``revision`` is a hash of the visible state (``\"\"`` when empty);\n``updated_at`` is the newest persisted timestamp (``0`` when none).", + "properties": { + "goal": { + "anyOf": [ + { + "$ref": "#/components/schemas/GoalSnapshot" + }, + { + "type": "null" + } + ] + }, + "loop": { + "anyOf": [ + { + "$ref": "#/components/schemas/LoopSnapshot" + }, + { + "type": "null" + } + ] + }, + "heartbeat": { + "anyOf": [ + { + "$ref": "#/components/schemas/HeartbeatSnapshot" + }, + { + "type": "null" + } + ] + }, + "revision": { + "title": "Revision", + "type": "string" + }, + "updated_at": { + "title": "Updated At", + "type": "number" + } + }, + "required": [ + "goal", + "loop", + "heartbeat", + "revision", + "updated_at" + ], + "title": "SessionControlSnapshot", + "type": "object" + }, + "SessionControlUpdatePayload": { + "additionalProperties": false, + "properties": { + "control": { + "$ref": "#/components/schemas/SessionControlSnapshot" + } + }, + "required": [ + "control" + ], + "title": "SessionControlUpdatePayload", + "type": "object" + }, + "SessionCorrectionParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "text": { + "title": "Text", + "type": "string" + } + }, + "required": [ + "session_id", + "text" + ], + "title": "SessionCorrectionParams", + "type": "object" + }, + "SessionCorrectionResult": { + "additionalProperties": false, + "properties": { + "status": { + "$ref": "#/components/schemas/CorrectionStatus" + }, + "text": { + "title": "Text", + "type": "string" + } + }, + "required": [ + "status", + "text" + ], + "title": "SessionCorrectionResult", + "type": "object" + }, + "SessionCreateParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "cols": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cols" + }, + "source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + }, + "cwd_explicit": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd Explicit" + }, + "messages": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SeedMessage" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Messages" + }, + "parent_session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Parent Session Id" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Title" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider" + }, + "reasoning_effort": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reasoning Effort" + }, + "fast": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Fast" + }, + "close_on_disconnect": { + "default": false, + "title": "Close On Disconnect", + "type": "boolean" + }, + "hidden": { + "default": false, + "title": "Hidden", + "type": "boolean" + }, + "room_plumbing": { + "default": false, + "title": "Room Plumbing", + "type": "boolean" + }, + "follow_profile_config": { + "default": false, + "title": "Follow Profile Config", + "type": "boolean" + } + }, + "title": "SessionCreateParams", + "type": "object" + }, + "SessionCreateResult": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "stored_session_id": { + "title": "Stored Session Id", + "type": "string" + }, + "message_count": { + "title": "Message Count", + "type": "integer" + }, + "messages": { + "items": { + "$ref": "#/components/schemas/TranscriptMessage" + }, + "title": "Messages", + "type": "array" + }, + "info": { + "$ref": "#/components/schemas/SessionLiveInfo" + } + }, + "required": [ + "session_id", + "stored_session_id", + "message_count", + "messages", + "info" + ], + "title": "SessionCreateResult", + "type": "object" + }, + "SessionCwdSetParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "cwd": { + "title": "Cwd", + "type": "string" + } + }, + "required": [ + "session_id", + "cwd" + ], + "title": "SessionCwdSetParams", + "type": "object" + }, + "SessionCwdSetResult": { + "additionalProperties": true, + "description": "The refreshed ``session.info`` view (full agent view, or the lazy shape).", + "properties": { + "model": { + "default": "", + "title": "Model", + "type": "string" + }, + "provider": { + "default": "", + "title": "Provider", + "type": "string" + }, + "reasoning_effort": { + "default": "", + "title": "Reasoning Effort", + "type": "string" + }, + "reasoning_effort_wire": { + "default": "", + "title": "Reasoning Effort Wire", + "type": "string" + }, + "service_tier": { + "default": "", + "title": "Service Tier", + "type": "string" + }, + "fast": { + "default": false, + "title": "Fast", + "type": "boolean" + }, + "yolo": { + "default": false, + "title": "Yolo", + "type": "boolean" + }, + "approval_mode": { + "default": "manual", + "title": "Approval Mode", + "type": "string" + }, + "tools": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Tools", + "type": "object" + }, + "skills": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Skills", + "type": "object" + }, + "cwd": { + "default": "", + "title": "Cwd", + "type": "string" + }, + "branch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Branch" + }, + "project": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProjectRef" + }, + { + "type": "null" + } + ], + "default": null + }, + "terminal_backend": { + "default": "", + "title": "Terminal Backend", + "type": "string" + }, + "personality": { + "default": "", + "title": "Personality", + "type": "string" + }, + "running": { + "default": false, + "title": "Running", + "type": "boolean" + }, + "turn_started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Turn Started At" + }, + "title": { + "default": "", + "title": "Title", + "type": "string" + }, + "stored_session_id": { + "default": "", + "title": "Stored Session Id", + "type": "string" + }, + "desktop_contract": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Desktop Contract" + }, + "version": { + "default": "", + "title": "Version", + "type": "string" + }, + "release_date": { + "default": "", + "title": "Release Date", + "type": "string" + }, + "update_behind": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Update Behind" + }, + "update_command": { + "default": "", + "title": "Update Command", + "type": "string" + }, + "usage": { + "anyOf": [ + { + "$ref": "#/components/schemas/Usage" + }, + { + "type": "null" + } + ], + "default": null + }, + "profile_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile Name" + }, + "mcp_servers": { + "items": { + "$ref": "#/components/schemas/McpServerStatus" + }, + "title": "Mcp Servers", + "type": "array" + }, + "system_prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "System Prompt" + }, + "credential_warning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Credential Warning" + }, + "lazy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Lazy" + } + }, + "title": "SessionCwdSetResult", + "type": "object" + }, + "SessionDeleteParams": { + "additionalProperties": false, + "description": "``session_id`` is the STORED id.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id" + ], + "title": "SessionDeleteParams", + "type": "object" + }, + "SessionDeleteResult": { + "additionalProperties": false, + "properties": { + "deleted": { + "title": "Deleted", + "type": "string" + } + }, + "required": [ + "deleted" + ], + "title": "SessionDeleteResult", + "type": "object" + }, + "SessionEventsSinceParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "last_seen": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Seen" + } + }, + "required": [ + "session_id" + ], + "title": "SessionEventsSinceParams", + "type": "object" + }, + "SessionEventsSinceResult": { + "additionalProperties": false, + "properties": { + "events": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Events", + "type": "array" + }, + "latest_seq": { + "title": "Latest Seq", + "type": "integer" + }, + "truncated": { + "title": "Truncated", + "type": "boolean" + }, + "count": { + "title": "Count", + "type": "integer" + }, + "epoch": { + "title": "Epoch", + "type": "string" + }, + "open_requests": { + "items": { + "$ref": "#/components/schemas/OpenRequestEntry" + }, + "title": "Open Requests", + "type": "array" + } + }, + "required": [ + "events", + "latest_seq", + "truncated", + "count", + "epoch", + "open_requests" + ], + "title": "SessionEventsSinceResult", + "type": "object" + }, + "SessionEventsStatsParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "SessionEventsStatsParams", + "type": "object" + }, + "SessionEventsStatsResult": { + "additionalProperties": false, + "description": "``event_replay.replay_stats``.", + "properties": { + "sessions": { + "title": "Sessions", + "type": "integer" + }, + "events": { + "title": "Events", + "type": "integer" + }, + "bytes": { + "title": "Bytes", + "type": "integer" + }, + "max_per_session": { + "title": "Max Per Session", + "type": "integer" + }, + "max_bytes_per_session": { + "title": "Max Bytes Per Session", + "type": "integer" + }, + "max_bytes_process": { + "title": "Max Bytes Process", + "type": "integer" + } + }, + "required": [ + "sessions", + "events", + "bytes", + "max_per_session", + "max_bytes_per_session", + "max_bytes_process" + ], + "title": "SessionEventsStatsResult", + "type": "object" + }, + "SessionForeignIdParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Id" + } + }, + "title": "SessionForeignIdParams", + "type": "object" + }, + "SessionForeignImportResult": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "already_imported": { + "default": false, + "title": "Already Imported", + "type": "boolean" + } + }, + "required": [ + "session_id" + ], + "title": "SessionForeignImportResult", + "type": "object" + }, + "SessionForeignListParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "source": { + "anyOf": [ + { + "$ref": "#/components/schemas/ForeignSource" + }, + { + "type": "null" + } + ], + "default": null + }, + "offset": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Offset" + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Limit" + } + }, + "title": "SessionForeignListParams", + "type": "object" + }, + "SessionForeignListResult": { + "additionalProperties": false, + "description": "``unreadable`` counts logs on this page that failed to parse.", + "properties": { + "sessions": { + "items": { + "$ref": "#/components/schemas/ForeignSessionRow" + }, + "title": "Sessions", + "type": "array" + }, + "next_offset": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Next Offset" + }, + "host": { + "title": "Host", + "type": "string" + }, + "unreadable": { + "default": 0, + "title": "Unreadable", + "type": "integer" + } + }, + "required": [ + "host" + ], + "title": "SessionForeignListResult", + "type": "object" + }, + "SessionForeignPreviewResult": { + "additionalProperties": false, + "description": "Bounded to the last 40 turns / 8000 chars each; ``already_imported`` is the local id.", + "properties": { + "messages": { + "items": { + "$ref": "#/components/schemas/ForeignTurn" + }, + "title": "Messages", + "type": "array" + }, + "total": { + "default": 0, + "title": "Total", + "type": "integer" + }, + "truncated": { + "default": false, + "title": "Truncated", + "type": "boolean" + }, + "already_imported": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Already Imported" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + } + }, + "title": "SessionForeignPreviewResult", + "type": "object" + }, + "SessionHistoryParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id" + ], + "title": "SessionHistoryParams", + "type": "object" + }, + "SessionHistoryResult": { + "additionalProperties": false, + "properties": { + "count": { + "title": "Count", + "type": "integer" + }, + "messages": { + "items": { + "$ref": "#/components/schemas/TranscriptMessage" + }, + "title": "Messages", + "type": "array" + } + }, + "required": [ + "count", + "messages" + ], + "title": "SessionHistoryResult", + "type": "object" + }, + "SessionInterruptParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "expected_hosted_task_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Expected Hosted Task Id" + } + }, + "required": [ + "session_id" + ], + "title": "SessionInterruptParams", + "type": "object" + }, + "SessionInterruptResult": { + "additionalProperties": false, + "properties": { + "status": { + "$ref": "#/components/schemas/InterruptStatus" + }, + "interrupted": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Interrupted" + }, + "turn_isolation": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Turn Isolation" + } + }, + "required": [ + "status" + ], + "title": "SessionInterruptResult", + "type": "object" + }, + "SessionListParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Title" + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Limit" + }, + "include_hidden": { + "default": false, + "title": "Include Hidden", + "type": "boolean" + } + }, + "title": "SessionListParams", + "type": "object" + }, + "SessionListResult": { + "additionalProperties": false, + "properties": { + "sessions": { + "items": { + "$ref": "#/components/schemas/SessionListRow" + }, + "title": "Sessions", + "type": "array" + } + }, + "required": [ + "sessions" + ], + "title": "SessionListResult", + "type": "object" + }, + "SessionListRow": { + "additionalProperties": false, + "description": "``methods_session._session_row_summary``; ``resolved_id`` only on a title lookup that followed a\ncompression lineage to its tip.", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "resolved_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Resolved Id" + }, + "title": { + "default": "", + "title": "Title", + "type": "string" + }, + "preview": { + "default": "", + "title": "Preview", + "type": "string" + }, + "started_at": { + "default": 0, + "title": "Started At", + "type": "number" + }, + "message_count": { + "default": 0, + "title": "Message Count", + "type": "integer" + }, + "source": { + "default": "", + "title": "Source", + "type": "string" + } + }, + "required": [ + "id" + ], + "title": "SessionListRow", + "type": "object" + }, + "SessionLiveInfo": { + "additionalProperties": true, + "description": "``tui_gateway/server.py::_session_info`` \u2014 the ``session.info`` event and the ``info`` field of\n``session.create`` / ``session.resume`` / ``session.activate`` results.", + "properties": { + "model": { + "default": "", + "title": "Model", + "type": "string" + }, + "provider": { + "default": "", + "title": "Provider", + "type": "string" + }, + "reasoning_effort": { + "default": "", + "title": "Reasoning Effort", + "type": "string" + }, + "reasoning_effort_wire": { + "default": "", + "title": "Reasoning Effort Wire", + "type": "string" + }, + "service_tier": { + "default": "", + "title": "Service Tier", + "type": "string" + }, + "fast": { + "default": false, + "title": "Fast", + "type": "boolean" + }, + "yolo": { + "default": false, + "title": "Yolo", + "type": "boolean" + }, + "approval_mode": { + "default": "manual", + "title": "Approval Mode", + "type": "string" + }, + "tools": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Tools", + "type": "object" + }, + "skills": { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "title": "Skills", + "type": "object" + }, + "cwd": { + "default": "", + "title": "Cwd", + "type": "string" + }, + "branch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Branch" + }, + "project": { + "anyOf": [ + { + "$ref": "#/components/schemas/ProjectRef" + }, + { + "type": "null" + } + ], + "default": null + }, + "terminal_backend": { + "default": "", + "title": "Terminal Backend", + "type": "string" + }, + "personality": { + "default": "", + "title": "Personality", + "type": "string" + }, + "running": { + "default": false, + "title": "Running", + "type": "boolean" + }, + "turn_started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Turn Started At" + }, + "title": { + "default": "", + "title": "Title", + "type": "string" + }, + "stored_session_id": { + "default": "", + "title": "Stored Session Id", + "type": "string" + }, + "desktop_contract": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Desktop Contract" + }, + "version": { + "default": "", + "title": "Version", + "type": "string" + }, + "release_date": { + "default": "", + "title": "Release Date", + "type": "string" + }, + "update_behind": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Update Behind" + }, + "update_command": { + "default": "", + "title": "Update Command", + "type": "string" + }, + "usage": { + "anyOf": [ + { + "$ref": "#/components/schemas/Usage" + }, + { + "type": "null" + } + ], + "default": null + }, + "profile_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile Name" + }, + "mcp_servers": { + "items": { + "$ref": "#/components/schemas/McpServerStatus" + }, + "title": "Mcp Servers", + "type": "array" + }, + "system_prompt": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "System Prompt" + }, + "credential_warning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Credential Warning" + }, + "lazy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Lazy" + } + }, + "title": "SessionLiveInfo", + "type": "object" + }, + "SessionMostRecentParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "SessionMostRecentParams", + "type": "object" + }, + "SessionMostRecentResult": { + "additionalProperties": false, + "properties": { + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Session Id" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Title" + }, + "started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Started At" + }, + "source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source" + } + }, + "required": [ + "session_id" + ], + "title": "SessionMostRecentResult", + "type": "object" + }, + "SessionOwner": { + "additionalProperties": false, + "properties": { + "type": { + "const": "session", + "title": "Type", + "type": "string" + }, + "session_id": { + "minLength": 1, + "title": "Session Id", + "type": "string" + } + }, + "required": [ + "type", + "session_id" + ], + "title": "SessionOwner", + "type": "object" + }, + "SessionParams": { + "additionalProperties": false, + "description": "Any method addressed at one live session.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id" + ], + "title": "SessionParams", + "type": "object" + }, + "SessionReclaimedPayload": { + "additionalProperties": false, + "description": "``session_lifecycle._announce_session_reclaimed`` (broadcast).", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "stored_session_id": { + "title": "Stored Session Id", + "type": "string" + }, + "reason": { + "title": "Reason", + "type": "string" + } + }, + "required": [ + "session_id", + "stored_session_id", + "reason" + ], + "title": "SessionReclaimedPayload", + "type": "object" + }, + "SessionResumeParams": { + "additionalProperties": false, + "description": "``session_id`` is the STORED id (or an exact title); the reply's ``session_id`` is the runtime id.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "cols": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cols" + }, + "source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source" + }, + "lazy": { + "default": false, + "title": "Lazy", + "type": "boolean" + }, + "defer_history": { + "default": false, + "title": "Defer History", + "type": "boolean" + }, + "omit_messages": { + "default": false, + "title": "Omit Messages", + "type": "boolean" + }, + "eager_build": { + "default": false, + "title": "Eager Build", + "type": "boolean" + }, + "close_on_disconnect": { + "default": false, + "title": "Close On Disconnect", + "type": "boolean" + }, + "inline_images": { + "default": true, + "title": "Inline Images", + "type": "boolean" + } + }, + "required": [ + "session_id" + ], + "title": "SessionResumeParams", + "type": "object" + }, + "SessionResumeProgressPayload": { + "additionalProperties": false, + "description": "``server._hydrate_resume_history``.", + "properties": { + "phase": { + "title": "Phase", + "type": "string" + }, + "status": { + "$ref": "#/components/schemas/ResumePhaseStatus" + }, + "message_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message Count" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + } + }, + "required": [ + "phase", + "status" + ], + "title": "SessionResumeProgressPayload", + "type": "object" + }, + "SessionResumeResult": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "message_count": { + "title": "Message Count", + "type": "integer" + }, + "messages": { + "items": { + "$ref": "#/components/schemas/TranscriptMessage" + }, + "title": "Messages", + "type": "array" + }, + "info": { + "$ref": "#/components/schemas/SessionLiveInfo" + }, + "stored_session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Stored Session Id" + }, + "resumed": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Resumed" + }, + "session_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Key" + }, + "messages_omitted": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Messages Omitted" + }, + "hydrating": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Hydrating" + }, + "running": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Running" + }, + "turn_started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Turn Started At" + }, + "started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Started At" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" + }, + "inflight": { + "anyOf": [ + { + "$ref": "#/components/schemas/InflightTurn" + }, + { + "type": "null" + } + ], + "default": null + }, + "queued": { + "anyOf": [ + { + "$ref": "#/components/schemas/QueuedPrompt" + }, + { + "type": "null" + } + ], + "default": null + }, + "pending_approval": { + "anyOf": [ + { + "$ref": "#/components/schemas/PendingApproval" + }, + { + "type": "null" + } + ], + "default": null + }, + "open_requests": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/OpenRequestEntry" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Open Requests" + }, + "pending_connection": { + "anyOf": [ + { + "$ref": "#/components/schemas/ConnectionRequestPayload" + }, + { + "type": "null" + } + ], + "default": null + }, + "todo_state": { + "anyOf": [ + { + "$ref": "#/components/schemas/TodoState" + }, + { + "type": "null" + } + ], + "default": null + }, + "auto_continue": { + "anyOf": [ + { + "$ref": "#/components/schemas/AutoContinue" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "session_id", + "message_count", + "messages", + "info" + ], + "title": "SessionResumeResult", + "type": "object" + }, + "SessionSaveParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id" + ], + "title": "SessionSaveParams", + "type": "object" + }, + "SessionSaveResult": { + "additionalProperties": true, + "description": "Under turn isolation the compute host's result passes through verbatim.", + "properties": { + "file": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "File" + } + }, + "title": "SessionSaveResult", + "type": "object" + }, + "SessionSetHiddenParams": { + "additionalProperties": false, + "description": "``session_id`` is a live runtime id first, else a stored id / key / title.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "hidden": { + "title": "Hidden", + "type": "boolean" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id", + "hidden" + ], + "title": "SessionSetHiddenParams", + "type": "object" + }, + "SessionSetHiddenResult": { + "additionalProperties": false, + "properties": { + "hidden": { + "title": "Hidden", + "type": "boolean" + }, + "session_key": { + "title": "Session Key", + "type": "string" + } + }, + "required": [ + "hidden", + "session_key" + ], + "title": "SessionSetHiddenResult", + "type": "object" + }, + "SessionStatusParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id" + ], + "title": "SessionStatusParams", + "type": "object" + }, + "SessionStatusResult": { + "additionalProperties": false, + "properties": { + "output": { + "title": "Output", + "type": "string" + } + }, + "required": [ + "output" + ], + "title": "SessionStatusResult", + "type": "object" + }, + "SessionTitleParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Title" + } + }, + "required": [ + "session_id" + ], + "title": "SessionTitleParams", + "type": "object" + }, + "SessionTitlePayload": { + "additionalProperties": false, + "description": "``prompt_turn._invoke_agent`` ``_on_session_title`` hook.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "title": { + "title": "Title", + "type": "string" + } + }, + "required": [ + "session_id", + "title" + ], + "title": "SessionTitlePayload", + "type": "object" + }, + "SessionTitleResult": { + "additionalProperties": false, + "properties": { + "title": { + "title": "Title", + "type": "string" + }, + "session_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Key" + }, + "pending": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pending" + } + }, + "required": [ + "title" + ], + "title": "SessionTitleResult", + "type": "object" + }, + "SessionUndoParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "intent": { + "anyOf": [ + { + "$ref": "#/components/schemas/UndoIntent" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "session_id" + ], + "title": "SessionUndoParams", + "type": "object" + }, + "SessionUndoResult": { + "additionalProperties": false, + "properties": { + "removed": { + "title": "Removed", + "type": "integer" + } + }, + "required": [ + "removed" + ], + "title": "SessionUndoResult", + "type": "object" + }, + "SessionUsageParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id" + ], + "title": "SessionUsageParams", + "type": "object" + }, + "SessionUsagePayload": { + "additionalProperties": false, + "description": "``server._start_usage_ticker``.", + "properties": { + "usage": { + "$ref": "#/components/schemas/Usage" + } + }, + "required": [ + "usage" + ], + "title": "SessionUsagePayload", + "type": "object" + }, + "SessionUsageResult": { + "additionalProperties": true, + "properties": { + "model": { + "default": "", + "title": "Model", + "type": "string" + }, + "input": { + "default": 0, + "title": "Input", + "type": "integer" + }, + "output": { + "default": 0, + "title": "Output", + "type": "integer" + }, + "reasoning": { + "default": 0, + "title": "Reasoning", + "type": "integer" + }, + "prompt": { + "default": 0, + "title": "Prompt", + "type": "integer" + }, + "completion": { + "default": 0, + "title": "Completion", + "type": "integer" + }, + "total": { + "default": 0, + "title": "Total", + "type": "integer" + }, + "calls": { + "default": 0, + "title": "Calls", + "type": "integer" + }, + "compressions": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Compressions" + }, + "context_used": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context Used" + }, + "context_max": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context Max" + }, + "context_percent": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context Percent" + }, + "context_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context Source" + }, + "context_estimated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context Estimated" + }, + "cache_hit_pct": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache Hit Pct" + }, + "cache_read": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache Read" + }, + "cache_write": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache Write" + }, + "avg_latency_s": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Avg Latency S" + }, + "avg_tps": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Avg Tps" + }, + "active_subagents": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Active Subagents" + }, + "dev_credits_spent_micros": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Dev Credits Spent Micros" + }, + "cost_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cost Usd" + }, + "cost_status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cost Status" + }, + "credits_lines": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Credits Lines" + } + }, + "title": "SessionUsageResult", + "type": "object" + }, + "SessionWorkspaceMoveParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "session_key": { + "title": "Session Key", + "type": "string" + }, + "cwd": { + "title": "Cwd", + "type": "string" + } + }, + "required": [ + "session_key", + "cwd" + ], + "title": "SessionWorkspaceMoveParams", + "type": "object" + }, + "SessionWorkspaceMoveResult": { + "additionalProperties": false, + "properties": { + "cwd": { + "title": "Cwd", + "type": "string" + }, + "branch": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Branch" + }, + "git_repo_root": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Git Repo Root" + } + }, + "required": [ + "cwd" + ], + "title": "SessionWorkspaceMoveResult", + "type": "object" + }, + "SetupReadyPayload": { + "additionalProperties": true, + "description": "``hermes_cli/free_tier_bootstrap.py::SetupRecord.as_payload``.", + "properties": { + "provider_configured": { + "title": "Provider Configured", + "type": "boolean" + }, + "inference_provider": { + "title": "Inference Provider", + "type": "string" + }, + "free_tier_account": { + "title": "Free Tier Account", + "type": "boolean" + }, + "free_tier_route": { + "title": "Free Tier Route", + "type": "boolean" + }, + "has_identity": { + "title": "Has Identity", + "type": "boolean" + }, + "other_providers": { + "title": "Other Providers", + "type": "boolean" + }, + "error": { + "default": "", + "title": "Error", + "type": "string" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error Code" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retryable" + }, + "retry_after": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retry After" + }, + "finished_at": { + "title": "Finished At", + "type": "number" + } + }, + "required": [ + "provider_configured", + "inference_provider", + "free_tier_account", + "free_tier_route", + "has_identity", + "other_providers", + "finished_at" + ], + "title": "SetupReadyPayload", + "type": "object" + }, + "SetupRuntimeCheckParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider" + } + }, + "title": "SetupRuntimeCheckParams", + "type": "object" + }, + "SetupRuntimeCheckResult": { + "additionalProperties": false, + "description": "``ok=False`` + ``error`` when the resolved model can't be served; ``free_tier_route`` says the\nselected route is the welcome host.", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" + }, + "source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "free_tier_route": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Free Tier Route" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "ok" + ], + "title": "SetupRuntimeCheckResult", + "type": "object" + }, + "SetupStatusResult": { + "additionalProperties": false, + "description": "``provider_configured`` is the loose answer; the boot record's fields (``ready``,\n``free_tier_account``, ``free_tier_route``, ``other_providers``, ``inference_provider``) ride along\non the launch profile. An unknown ``profile`` answers ``ok=False`` + ``error``.", + "properties": { + "provider_configured": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider Configured" + }, + "ready": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ready" + }, + "free_tier_account": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Free Tier Account" + }, + "free_tier_route": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Free Tier Route" + }, + "other_providers": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Other Providers" + }, + "inference_provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Inference Provider" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "ok": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ok" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "error_code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error Code" + }, + "retryable": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retryable" + }, + "retry_after": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retry After" + } + }, + "title": "SetupStatusResult", + "type": "object" + }, + "SharedMetricsConsentResult": { + "additionalProperties": false, + "description": "The focused profile's ``telemetry.shared_metrics`` opt-ins. ``send`` is never true while\n``enabled`` is false; ``decided`` = either key is written in config.yaml (the shipped defaults\nare not an answer).", + "properties": { + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "send": { + "title": "Send", + "type": "boolean" + }, + "decided": { + "title": "Decided", + "type": "boolean" + } + }, + "required": [ + "enabled", + "send", + "decided" + ], + "title": "SharedMetricsConsentResult", + "type": "object" + }, + "SharedMetricsDesktopActionDay": { + "additionalProperties": false, + "properties": { + "action": { + "title": "Action", + "type": "string" + }, + "via": { + "enum": [ + "click", + "menu", + "palette", + "shortcut" + ], + "title": "Via", + "type": "string" + }, + "count": { + "title": "Count", + "type": "integer" + } + }, + "required": [ + "action", + "via", + "count" + ], + "title": "SharedMetricsDesktopActionDay", + "type": "object" + }, + "SharedMetricsDesktopDailyParams": { + "additionalProperties": false, + "description": "One finished UTC day of Desktop use, aggregated on the client. ``day`` (YYYY-MM-DD) only latches\na resend and is never recorded; the raw counts are bucketed by the backend.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "day": { + "title": "Day", + "type": "string" + }, + "bot_count": { + "default": 0, + "title": "Bot Count", + "type": "integer" + }, + "modes": { + "items": { + "$ref": "#/components/schemas/SharedMetricsDesktopModeDay" + }, + "title": "Modes", + "type": "array" + }, + "actions": { + "items": { + "$ref": "#/components/schemas/SharedMetricsDesktopActionDay" + }, + "title": "Actions", + "type": "array" + } + }, + "required": [ + "day" + ], + "title": "SharedMetricsDesktopDailyParams", + "type": "object" + }, + "SharedMetricsDesktopDailyResult": { + "additionalProperties": false, + "properties": { + "recorded": { + "title": "Recorded", + "type": "boolean" + } + }, + "required": [ + "recorded" + ], + "title": "SharedMetricsDesktopDailyResult", + "type": "object" + }, + "SharedMetricsDesktopDislikeParams": { + "additionalProperties": false, + "description": "``signal`` quick_close|cancelled|setting_off_default|rage_click|undo|feature_disabled; ``target`` a\nclosed code-defined id for that signal (area, flow, action, undo path, feature toggle); ``setting`` a\nconfig key for setting_off_default only (the value is never sent \u2014 the backend compares it to the\ndefault).", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "signal": { + "title": "Signal", + "type": "string" + }, + "target": { + "default": "", + "title": "Target", + "type": "string" + }, + "setting": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Setting" + } + }, + "required": [ + "signal" + ], + "title": "SharedMetricsDesktopDislikeParams", + "type": "object" + }, + "SharedMetricsDesktopFeatureUseParams": { + "additionalProperties": false, + "description": "``area`` is a Desktop surface id (``command_palette``, ``terminal_pane``, ``settings_`` \u2026);\nthe backend collapses anything outside its closed set to ``other``.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "area": { + "title": "Area", + "type": "string" + } + }, + "required": [ + "area" + ], + "title": "SharedMetricsDesktopFeatureUseParams", + "type": "object" + }, + "SharedMetricsDesktopFrictionParams": { + "additionalProperties": false, + "description": "``kind`` notice_dismissed|error_toast|renderer_crash|backend_disconnect|slow_frame; ``detail`` a\nclosed code-defined word for that kind (notice id, error category, crash reason, drop reason, frame\nduration bucket), never message text.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "kind": { + "title": "Kind", + "type": "string" + }, + "detail": { + "title": "Detail", + "type": "string" + } + }, + "required": [ + "kind", + "detail" + ], + "title": "SharedMetricsDesktopFrictionParams", + "type": "object" + }, + "SharedMetricsDesktopModeDay": { + "additionalProperties": false, + "properties": { + "mode": { + "enum": [ + "bots", + "sessions" + ], + "title": "Mode", + "type": "string" + }, + "active_ms": { + "default": 0, + "title": "Active Ms", + "type": "number" + }, + "messages_sent": { + "default": 0, + "title": "Messages Sent", + "type": "integer" + } + }, + "required": [ + "mode" + ], + "title": "SharedMetricsDesktopModeDay", + "type": "object" + }, + "SharedMetricsDesktopOnboardingParams": { + "additionalProperties": false, + "description": "``step`` a Desktop first-run step id; ``event`` reached|completed|abandoned.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "step": { + "title": "Step", + "type": "string" + }, + "event": { + "title": "Event", + "type": "string" + } + }, + "required": [ + "step", + "event" + ], + "title": "SharedMetricsDesktopOnboardingParams", + "type": "object" + }, + "SharedMetricsSetParams": { + "additionalProperties": false, + "description": "``send`` is ignored unless ``enabled``; ``first_run`` marks the Desktop first-run answer.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "send": { + "default": false, + "title": "Send", + "type": "boolean" + }, + "first_run": { + "default": false, + "title": "First Run", + "type": "boolean" + } + }, + "required": [ + "enabled" + ], + "title": "SharedMetricsSetParams", + "type": "object" + }, + "SharedMetricsSlashCommandParams": { + "additionalProperties": false, + "description": "``command`` is the raw typed name (no leading ``/``, no args); the backend canonicalizes it\nagainst the published registry. ``session_id`` scopes the count to that session's profile.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "command": { + "title": "Command", + "type": "string" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + } + }, + "required": [ + "command" + ], + "title": "SharedMetricsSlashCommandParams", + "type": "object" + }, + "SharedMetricsSlashCommandResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "title": "SharedMetricsSlashCommandResult", + "type": "object" + }, + "SharedMetricsStartupLatencyParams": { + "additionalProperties": false, + "description": "``elapsed_ms`` = the client's own launch (TUI process start / Desktop app start) to ready\n(TUI gateway ready / Desktop backend attached), measured once per launch by the client. The\nclient names its surface because a Desktop may attach to a URL/cloud backend where\n``HERMES_DESKTOP`` is unset; without it the backend falls back to its own client detection.\n``launch_id`` is an opaque per-launch token the backend latches on (never recorded), so a\nreconnect re-sending the same launch counts once while a new launch counts again.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "elapsed_ms": { + "title": "Elapsed Ms", + "type": "number" + }, + "surface": { + "anyOf": [ + { + "enum": [ + "desktop_attach", + "tui" + ], + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Surface" + }, + "launch_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Launch Id" + } + }, + "required": [ + "elapsed_ms" + ], + "title": "SharedMetricsStartupLatencyParams", + "type": "object" + }, + "SharedMetricsStartupLatencyResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "title": "SharedMetricsStartupLatencyResult", + "type": "object" + }, + "SharedMetricsUpdateRunParams": { + "additionalProperties": false, + "description": "One Desktop PACKAGED self-update (electron-updater / App Installer / Store). Source-checkout\nhand-offs run ``hermes update`` and are counted from its receipt, never here. Raw words; the\nbackend buckets them: ``outcome`` success|failed|noop|refused, ``failed_stage``\ndownload|verify|apply|restart, ``mechanism`` the updater strategy kind, ``duration_ms`` wall\ntime, ``from_commit_date`` the updated-from build's commit time (epoch seconds) when known.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "outcome": { + "title": "Outcome", + "type": "string" + }, + "failed_stage": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Failed Stage" + }, + "mechanism": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Mechanism" + }, + "duration_ms": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Duration Ms" + }, + "from_commit_date": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "From Commit Date" + } + }, + "required": [ + "outcome" + ], + "title": "SharedMetricsUpdateRunParams", + "type": "object" + }, + "SharedMetricsUpdateRunResult": { + "additionalProperties": false, + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + } + }, + "required": [ + "ok" + ], + "title": "SharedMetricsUpdateRunResult", + "type": "object" + }, + "ShellExecParams": { + "additionalProperties": false, + "properties": { + "command": { + "title": "Command", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "command" + ], + "title": "ShellExecParams", + "type": "object" + }, + "ShellExecResult": { + "additionalProperties": false, + "properties": { + "stdout": { + "title": "Stdout", + "type": "string" + }, + "stderr": { + "title": "Stderr", + "type": "string" + }, + "code": { + "title": "Code", + "type": "integer" + } + }, + "required": [ + "stdout", + "stderr", + "code" + ], + "title": "ShellExecResult", + "type": "object" + }, + "SideAgentCompletePayload": { + "additionalProperties": false, + "description": "``methods_prompt._spawn_side_agent``: ``{task_id, **extra, text}``; btw adds ``question``.", + "properties": { + "task_id": { + "title": "Task Id", + "type": "string" + }, + "text": { + "title": "Text", + "type": "string" + }, + "question": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Question" + } + }, + "required": [ + "task_id", + "text" + ], + "title": "SideAgentCompletePayload", + "type": "object" + }, + "SideAgentParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "text": { + "title": "Text", + "type": "string" + } + }, + "required": [ + "session_id", + "text" + ], + "title": "SideAgentParams", + "type": "object" + }, + "SkillBrowseItem": { + "additionalProperties": true, + "description": "``hermes_cli.skills_hub.browse_skills`` row.", + "properties": { + "name": { + "default": "", + "title": "Name", + "type": "string" + }, + "description": { + "default": "", + "title": "Description", + "type": "string" + }, + "source": { + "default": "", + "title": "Source", + "type": "string" + }, + "trust": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Trust" + }, + "identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Identifier" + } + }, + "title": "SkillBrowseItem", + "type": "object" + }, + "SkillCatalogEntry": { + "additionalProperties": false, + "properties": { + "usage": { + "default": 0, + "title": "Usage", + "type": "integer" + }, + "origin": { + "default": "local", + "title": "Origin", + "type": "string" + } + }, + "title": "SkillCatalogEntry", + "type": "object" + }, + "SkillCommandRef": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "description": { + "default": "", + "title": "Description", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "SkillCommandRef", + "type": "object" + }, + "SkillHubHit": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "name", + "description" + ], + "title": "SkillHubHit", + "type": "object" + }, + "SkillInspectInfo": { + "additionalProperties": true, + "description": "``hermes_cli.skills_hub.inspect_skill``; ``{}`` when the identifier resolves nowhere.", + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "description": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Description" + }, + "source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Source" + }, + "identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Identifier" + }, + "tags": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tags" + }, + "skill_md_preview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Skill Md Preview" + } + }, + "title": "SkillInspectInfo", + "type": "object" + }, + "SkillsAction": { + "enum": [ + "list", + "search", + "install", + "browse", + "inspect" + ], + "title": "SkillsAction", + "type": "string" + }, + "SkillsManageParams": { + "additionalProperties": false, + "description": "``query`` is the search text / hub identifier / browse page (digits); ``page`` / ``page_size``\napply to ``browse``.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "action": { + "$ref": "#/components/schemas/SkillsAction", + "default": "list" + }, + "query": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Query" + }, + "page": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Page" + }, + "page_size": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Page Size" + } + }, + "title": "SkillsManageParams", + "type": "object" + }, + "SkillsManageResult": { + "additionalProperties": false, + "description": "Shape follows the action: ``list`` \u2192 ``skills`` (category \u2192 names); ``search`` \u2192 ``results``;\n``install`` \u2192 ``installed`` + ``name``; ``browse`` \u2192 ``items`` + paging; ``inspect`` \u2192 ``info``.", + "properties": { + "skills": { + "anyOf": [ + { + "additionalProperties": { + "items": { + "type": "string" + }, + "type": "array" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Skills" + }, + "results": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SkillHubHit" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Results" + }, + "installed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Installed" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "items": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SkillBrowseItem" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Items" + }, + "page": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Page" + }, + "total_pages": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Total Pages" + }, + "total": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Total" + }, + "info": { + "anyOf": [ + { + "$ref": "#/components/schemas/SkillInspectInfo" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "title": "SkillsManageResult", + "type": "object" + }, + "SkillsReloadDiff": { + "additionalProperties": true, + "description": "``agent.skill_commands.reload_skills``.", + "properties": { + "added": { + "items": { + "$ref": "#/components/schemas/SkillCommandRef" + }, + "title": "Added", + "type": "array" + }, + "removed": { + "items": { + "$ref": "#/components/schemas/SkillCommandRef" + }, + "title": "Removed", + "type": "array" + }, + "unchanged": { + "items": { + "type": "string" + }, + "title": "Unchanged", + "type": "array" + }, + "total": { + "default": 0, + "title": "Total", + "type": "integer" + }, + "commands": { + "default": 0, + "title": "Commands", + "type": "integer" + } + }, + "title": "SkillsReloadDiff", + "type": "object" + }, + "SkillsReloadParams": { + "additionalProperties": false, + "description": "``session_id`` binds the rescan to that session's profile and workspace (project skills);\n``profile`` scopes a session-less rescan.", + "properties": { + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "SkillsReloadParams", + "type": "object" + }, + "SkillsReloadResult": { + "additionalProperties": false, + "properties": { + "output": { + "title": "Output", + "type": "string" + }, + "result": { + "$ref": "#/components/schemas/SkillsReloadDiff" + } + }, + "required": [ + "output", + "result" + ], + "title": "SkillsReloadResult", + "type": "object" + }, + "SkinPayload": { + "additionalProperties": true, + "description": "``tui_gateway/change_watcher.py::resolve_skin`` \u2014 the resolved active skin (``HermesSkin``).\n``{}`` when the skin engine failed to load. Colour maps are token \u2192 colour string.", + "properties": { + "name": { + "default": "", + "title": "Name", + "type": "string" + }, + "description": { + "default": "", + "title": "Description", + "type": "string" + }, + "colors": { + "additionalProperties": { + "type": "string" + }, + "title": "Colors", + "type": "object" + }, + "light_colors": { + "additionalProperties": { + "type": "string" + }, + "title": "Light Colors", + "type": "object" + }, + "dark_colors": { + "additionalProperties": { + "type": "string" + }, + "title": "Dark Colors", + "type": "object" + }, + "branding": { + "additionalProperties": { + "type": "string" + }, + "title": "Branding", + "type": "object" + }, + "banner_logo": { + "default": "", + "title": "Banner Logo", + "type": "string" + }, + "banner_hero": { + "default": "", + "title": "Banner Hero", + "type": "string" + }, + "tool_prefix": { + "default": "", + "title": "Tool Prefix", + "type": "string" + }, + "help_header": { + "default": "", + "title": "Help Header", + "type": "string" + } + }, + "title": "SkinPayload", + "type": "object" + }, + "SlashExecParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "command": { + "title": "Command", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "session_id", + "command" + ], + "title": "SlashExecParams", + "type": "object" + }, + "SlashExecResult": { + "additionalProperties": false, + "description": "Plain worker/plugin text in ``output`` (+ ``warning``), or \u2014 when the command was rerouted to\n``command.dispatch`` \u2014 that method's directive fields with ``type`` set.", + "properties": { + "output": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Output" + }, + "warning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Warning" + }, + "type": { + "anyOf": [ + { + "$ref": "#/components/schemas/DispatchType" + }, + { + "type": "null" + } + ], + "default": null + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Target" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + }, + "notice": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Notice" + }, + "display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" + } + }, + "title": "SlashExecResult", + "type": "object" + }, + "SpawnTreeEntry": { + "additionalProperties": true, + "description": "Index row (``server._append_spawn_tree_index``) or a legacy file scan.", + "properties": { + "path": { + "title": "Path", + "type": "string" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Started At" + }, + "finished_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Finished At" + }, + "label": { + "default": "", + "title": "Label", + "type": "string" + }, + "count": { + "default": 0, + "title": "Count", + "type": "integer" + } + }, + "required": [ + "path" + ], + "title": "SpawnTreeEntry", + "type": "object" + }, + "SpawnTreeListParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "cross_session": { + "default": false, + "title": "Cross Session", + "type": "boolean" + }, + "limit": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Limit" + } + }, + "title": "SpawnTreeListParams", + "type": "object" + }, + "SpawnTreeListResult": { + "additionalProperties": false, + "properties": { + "entries": { + "items": { + "$ref": "#/components/schemas/SpawnTreeEntry" + }, + "title": "Entries", + "type": "array" + } + }, + "required": [ + "entries" + ], + "title": "SpawnTreeListResult", + "type": "object" + }, + "SpawnTreeLoadParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "path": { + "title": "Path", + "type": "string" + } + }, + "required": [ + "path" + ], + "title": "SpawnTreeLoadParams", + "type": "object" + }, + "SpawnTreeLoadResult": { + "additionalProperties": true, + "description": "The snapshot file as written by ``spawn_tree.save`` (open: the file is the contract).", + "properties": { + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Started At" + }, + "finished_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Finished At" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Label" + }, + "subagents": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Subagents", + "type": "array" + } + }, + "title": "SpawnTreeLoadResult", + "type": "object" + }, + "SpawnTreeSaveParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "subagents": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Subagents", + "type": "array" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Started At" + }, + "finished_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Finished At" + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Label" + } + }, + "required": [ + "subagents" + ], + "title": "SpawnTreeSaveParams", + "type": "object" + }, + "SpawnTreeSaveResult": { + "additionalProperties": false, + "properties": { + "path": { + "title": "Path", + "type": "string" + }, + "session_id": { + "title": "Session Id", + "type": "string" + } + }, + "required": [ + "path", + "session_id" + ], + "title": "SpawnTreeSaveResult", + "type": "object" + }, + "StatusUpdatePayload": { + "additionalProperties": false, + "description": "``server._status_update`` and the direct emitters (goal / loop / heartbeat / process).", + "properties": { + "kind": { + "title": "Kind", + "type": "string" + }, + "text": { + "title": "Text", + "type": "string" + } + }, + "required": [ + "kind", + "text" + ], + "title": "StatusUpdatePayload", + "type": "object" + }, + "SteerStatus": { + "enum": [ + "queued", + "rejected" + ], + "title": "SteerStatus", + "type": "string" + }, + "StreamDeltaPayload": { + "additionalProperties": false, + "description": "``prompt_turn._invoke_agent._stream`` (message.delta: ``text`` + optional ``rendered``),\n``agent_callbacks._agent_cbs`` (reasoning.delta / thinking.delta), ``tool_progress._progress_reasoning``\n(reasoning.available). ``verbose`` rides only when the session's verbose reasoning mode is on.", + "properties": { + "text": { + "title": "Text", + "type": "string" + }, + "rendered": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Rendered" + }, + "verbose": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Verbose" + } + }, + "required": [ + "text" + ], + "title": "StreamDeltaPayload", + "type": "object" + }, + "SubagentEventPayload": { + "additionalProperties": false, + "description": "``tool_progress._progress_subagent`` \u2014 every ``subagent.*`` frame; identity fields are optional\nbecause older emitters omit them and the TUI spawn tree falls back to flat rendering.", + "properties": { + "goal": { + "title": "Goal", + "type": "string" + }, + "task_count": { + "title": "Task Count", + "type": "integer" + }, + "task_index": { + "title": "Task Index", + "type": "integer" + }, + "subagent_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Subagent Id" + }, + "parent_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Parent Id" + }, + "child_session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Child Session Id" + }, + "delegation_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Delegation Id" + }, + "depth": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Depth" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" + }, + "tool_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tool Count" + }, + "toolsets": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Toolsets" + }, + "input_tokens": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Input Tokens" + }, + "output_tokens": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Output Tokens" + }, + "reasoning_tokens": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reasoning Tokens" + }, + "api_calls": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Api Calls" + }, + "files_read": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Files Read" + }, + "files_written": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Files Written" + }, + "output_tail": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SubagentOutputTailEntry" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Output Tail" + }, + "tool_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tool Name" + }, + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Text" + }, + "status": { + "anyOf": [ + { + "$ref": "#/components/schemas/SubagentStatus" + }, + { + "type": "null" + } + ], + "default": null + }, + "summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Summary" + }, + "duration_seconds": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Duration Seconds" + }, + "tool_preview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tool Preview" + } + }, + "required": [ + "goal", + "task_count", + "task_index" + ], + "title": "SubagentEventPayload", + "type": "object" + }, + "SubagentIdParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "subagent_id": { + "title": "Subagent Id", + "type": "string" + } + }, + "required": [ + "session_id", + "subagent_id" + ], + "title": "SubagentIdParams", + "type": "object" + }, + "SubagentInterruptResult": { + "additionalProperties": false, + "properties": { + "found": { + "title": "Found", + "type": "boolean" + }, + "subagent_id": { + "title": "Subagent Id", + "type": "string" + } + }, + "required": [ + "found", + "subagent_id" + ], + "title": "SubagentInterruptResult", + "type": "object" + }, + "SubagentListResult": { + "additionalProperties": false, + "description": "``delegations``: recently failed async delegation tasks for the session (durable store), newest first.", + "properties": { + "subagents": { + "items": { + "$ref": "#/components/schemas/SubagentSnapshot" + }, + "title": "Subagents", + "type": "array" + }, + "delegations": { + "items": { + "$ref": "#/components/schemas/FailedDelegation" + }, + "title": "Delegations", + "type": "array" + } + }, + "title": "SubagentListResult", + "type": "object" + }, + "SubagentOutputTailEntry": { + "additionalProperties": false, + "description": "``tools/delegate_tool_results.py::_extract_output_tail`` row.", + "properties": { + "tool": { + "title": "Tool", + "type": "string" + }, + "preview": { + "title": "Preview", + "type": "string" + }, + "is_error": { + "title": "Is Error", + "type": "boolean" + } + }, + "required": [ + "tool", + "preview", + "is_error" + ], + "title": "SubagentOutputTailEntry", + "type": "object" + }, + "SubagentSnapshot": { + "additionalProperties": false, + "description": "``methods_subagents._SUBAGENT_SNAPSHOT_FIELDS`` projection of one live child record.", + "properties": { + "subagent_id": { + "title": "Subagent Id", + "type": "string" + }, + "parent_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Parent Id" + }, + "depth": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Depth" + }, + "goal": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Goal" + }, + "delegation_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Delegation Id" + }, + "model": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Model" + }, + "started_at": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Started At" + }, + "status": { + "anyOf": [ + { + "$ref": "#/components/schemas/SubagentStatus" + }, + { + "type": "null" + } + ], + "default": null + }, + "tool_count": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tool Count" + }, + "last_tool": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Last Tool" + }, + "accepting_steer": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Accepting Steer" + } + }, + "required": [ + "subagent_id" + ], + "title": "SubagentSnapshot", + "type": "object" + }, + "SubagentStatus": { + "description": "Lifecycle of one delegated child (``tools/delegate_tool_child_run.py``); ``failed`` /\n``error`` / ``timeout`` / ``interrupted`` / ``completed`` are terminal.", + "enum": [ + "queued", + "running", + "completed", + "failed", + "error", + "timeout", + "interrupted" + ], + "title": "SubagentStatus", + "type": "string" + }, + "SubagentSteerParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "subagent_id": { + "title": "Subagent Id", + "type": "string" + }, + "text": { + "title": "Text", + "type": "string" + } + }, + "required": [ + "session_id", + "subagent_id", + "text" + ], + "title": "SubagentSteerParams", + "type": "object" + }, + "SubagentSteerResult": { + "additionalProperties": false, + "description": "``queued`` is not ``delivered``: a child past its final tool batch surfaces ``missed_steer``.", + "properties": { + "status": { + "$ref": "#/components/schemas/SteerStatus" + }, + "subagent_id": { + "title": "Subagent Id", + "type": "string" + }, + "text": { + "title": "Text", + "type": "string" + } + }, + "required": [ + "status", + "subagent_id", + "text" + ], + "title": "SubagentSteerResult", + "type": "object" + }, + "SubagentTailResult": { + "additionalProperties": false, + "description": "``available`` is false while the child has no live transcript yet (or it was cleaned up).", + "properties": { + "subagent_id": { + "title": "Subagent Id", + "type": "string" + }, + "available": { + "default": false, + "title": "Available", + "type": "boolean" + }, + "text": { + "default": "", + "title": "Text", + "type": "string" + }, + "truncated": { + "default": false, + "title": "Truncated", + "type": "boolean" + } + }, + "required": [ + "subagent_id" + ], + "title": "SubagentTailResult", + "type": "object" + }, + "SubscriptionChangeEffect": { + "enum": [ + "charge_now", + "scheduled", + "no_op", + "blocked" + ], + "title": "SubscriptionChangeEffect", + "type": "string" + }, + "SubscriptionChangeParams": { + "additionalProperties": false, + "description": "Either a target tier (downgrade / same-price change) or ``cancel`` (period-end cancellation).", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "subscription_type_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Subscription Type Id" + }, + "cancel": { + "default": false, + "title": "Cancel", + "type": "boolean" + } + }, + "title": "SubscriptionChangeParams", + "type": "object" + }, + "SubscriptionContext": { + "enum": [ + "personal", + "team" + ], + "title": "SubscriptionContext", + "type": "string" + }, + "SubscriptionPreviewParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "subscription_type_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Subscription Type Id" + } + }, + "title": "SubscriptionPreviewParams", + "type": "object" + }, + "SubscriptionPreviewResult": { + "additionalProperties": false, + "description": "``_serialize_subscription_preview`` on success; ``effect`` drives the confirm copy.", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + }, + "portal_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Portal Url" + }, + "retry_after": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retry After" + }, + "payload": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Payload" + }, + "actor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Actor" + }, + "code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Code" + }, + "recovery": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Recovery" + }, + "effect": { + "anyOf": [ + { + "$ref": "#/components/schemas/SubscriptionChangeEffect" + }, + { + "type": "null" + } + ], + "default": null + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + }, + "current_tier_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Current Tier Id" + }, + "current_tier_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Current Tier Name" + }, + "target_tier_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Target Tier Id" + }, + "target_tier_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Target Tier Name" + }, + "monthly_credits_delta": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Monthly Credits Delta" + }, + "amount_due_now_cents": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Amount Due Now Cents" + }, + "effective_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Effective At" + } + }, + "required": [ + "ok" + ], + "title": "SubscriptionPreviewResult", + "type": "object" + }, + "SubscriptionStateResult": { + "additionalProperties": false, + "description": "``_serialize_subscription_state``; the view's fallback emits only ``ok / logged_in / error``.", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "logged_in": { + "title": "Logged In", + "type": "boolean" + }, + "is_admin": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Is Admin" + }, + "can_change_plan": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Can Change Plan" + }, + "org_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Org Name" + }, + "org_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Org Id" + }, + "role": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Role" + }, + "context": { + "anyOf": [ + { + "$ref": "#/components/schemas/SubscriptionContext" + }, + { + "type": "null" + } + ], + "default": null + }, + "current": { + "anyOf": [ + { + "$ref": "#/components/schemas/CurrentSubscription" + }, + { + "type": "null" + } + ], + "default": null + }, + "tiers": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/SubscriptionTierOption" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tiers" + }, + "portal_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Portal Url" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "usage": { + "anyOf": [ + { + "$ref": "#/components/schemas/UsageModel" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "ok", + "logged_in" + ], + "title": "SubscriptionStateResult", + "type": "object" + }, + "SubscriptionTierOption": { + "additionalProperties": false, + "properties": { + "tier_id": { + "title": "Tier Id", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "tier_order": { + "title": "Tier Order", + "type": "integer" + }, + "dollars_per_month_display": { + "title": "Dollars Per Month Display", + "type": "string" + }, + "monthly_credits": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Monthly Credits" + }, + "is_current": { + "title": "Is Current", + "type": "boolean" + }, + "is_enabled": { + "title": "Is Enabled", + "type": "boolean" + } + }, + "required": [ + "tier_id", + "name", + "tier_order", + "dollars_per_month_display", + "is_current", + "is_enabled" + ], + "title": "SubscriptionTierOption", + "type": "object" + }, + "SubscriptionUpgradeParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "subscription_type_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Subscription Type Id" + }, + "idempotency_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Idempotency Key" + } + }, + "title": "SubscriptionUpgradeParams", + "type": "object" + }, + "SubscriptionUpgradeResult": { + "additionalProperties": false, + "description": "The money route: ``status`` separates a completed upgrade from an SCA / decline that must\nfinish in the portal at ``recovery_url``; ``idempotency_key`` is echoed (also on error) so a\nretry reuses it.", + "properties": { + "ok": { + "title": "Ok", + "type": "boolean" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "message": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Message" + }, + "portal_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Portal Url" + }, + "retry_after": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Retry After" + }, + "payload": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Payload" + }, + "actor": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Actor" + }, + "code": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Code" + }, + "recovery": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Recovery" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" + }, + "target_tier_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Target Tier Name" + }, + "recovery_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Recovery Url" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + }, + "idempotency_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Idempotency Key" + } + }, + "required": [ + "ok" + ], + "title": "SubscriptionUpgradeResult", + "type": "object" + }, + "SudoRequestParams": { + "additionalProperties": false, + "description": "Original command, redacted server-side before any password-injection rewrite.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "command": { + "default": "", + "title": "Command", + "type": "string" + } + }, + "required": [ + "session_id" + ], + "title": "SudoRequestParams", + "type": "object" + }, + "SystemBatteryParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "SystemBatteryParams", + "type": "object" + }, + "SystemBatteryResult": { + "additionalProperties": false, + "properties": { + "available": { + "title": "Available", + "type": "boolean" + }, + "percent": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Percent" + }, + "plugged": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Plugged" + }, + "category": { + "$ref": "#/components/schemas/BatteryCategory", + "default": "dim" + } + }, + "required": [ + "available" + ], + "title": "SystemBatteryResult", + "type": "object" + }, + "TaskIdResult": { + "additionalProperties": false, + "description": "The side agent runs detached; its answer lands on the parent session as an event carrying\nthis ``task_id``.", + "properties": { + "task_id": { + "title": "Task Id", + "type": "string" + } + }, + "required": [ + "task_id" + ], + "title": "TaskIdResult", + "type": "object" + }, + "TerminalClosePayload": { + "additionalProperties": false, + "properties": { + "process_id": { + "title": "Process Id", + "type": "string" + } + }, + "required": [ + "process_id" + ], + "title": "TerminalClosePayload", + "type": "object" + }, + "TerminalOutputPayload": { + "additionalProperties": false, + "description": "``session_notifications`` process_registry.on_output.", + "properties": { + "process_id": { + "title": "Process Id", + "type": "string" + }, + "chunk": { + "title": "Chunk", + "type": "string" + } + }, + "required": [ + "process_id", + "chunk" + ], + "title": "TerminalOutputPayload", + "type": "object" + }, + "TerminalResizeParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "cols": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cols" + } + }, + "required": [ + "session_id" + ], + "title": "TerminalResizeParams", + "type": "object" + }, + "TerminalResizeResult": { + "additionalProperties": false, + "properties": { + "cols": { + "title": "Cols", + "type": "integer" + } + }, + "required": [ + "cols" + ], + "title": "TerminalResizeResult", + "type": "object" + }, + "TipShowPayload": { + "additionalProperties": false, + "description": "``tools/tip_tool.py``.", + "properties": { + "selector": { + "title": "Selector", + "type": "string" + }, + "text": { + "title": "Text", + "type": "string" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Title" + }, + "side": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Side" + } + }, + "required": [ + "selector", + "text" + ], + "title": "TipShowPayload", + "type": "object" + }, + "TodoState": { + "additionalProperties": false, + "description": "``tool_progress._normalize_todo_state``: the authoritative todo snapshot.", + "properties": { + "todos": { + "items": { + "additionalProperties": true, + "type": "object" + }, + "title": "Todos", + "type": "array" + }, + "revision": { + "title": "Revision", + "type": "integer" + } + }, + "required": [ + "todos", + "revision" + ], + "title": "TodoState", + "type": "object" + }, + "TodoUpdatedPayload": { + "additionalProperties": false, + "description": "``tool_progress._normalize_todo_state`` \u2014 full task snapshot.", + "properties": { + "todos": { + "items": {}, + "title": "Todos", + "type": "array" + }, + "revision": { + "title": "Revision", + "type": "integer" + } + }, + "required": [ + "todos", + "revision" + ], + "title": "TodoUpdatedPayload", + "type": "object" + }, + "ToolCompletePayload": { + "additionalProperties": false, + "description": "``tool_progress._on_tool_complete``; ``todos``/``revision`` merged in for the todo tools.", + "properties": { + "tool_id": { + "title": "Tool Id", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "args": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Args" + }, + "duration_s": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Duration S" + }, + "result": { + "default": null, + "title": "Result" + }, + "summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Summary" + }, + "result_text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Result Text" + }, + "inline_diff": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Inline Diff" + }, + "todos": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Todos" + }, + "revision": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Revision" + }, + "labels": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ToolLabel" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Labels" + } + }, + "required": [ + "tool_id", + "name" + ], + "title": "ToolCompletePayload", + "type": "object" + }, + "ToolGeneratingPayload": { + "additionalProperties": false, + "description": "``agent_callbacks`` tool_gen_callback.", + "properties": { + "name": { + "title": "Name", + "type": "string" + } + }, + "required": [ + "name" + ], + "title": "ToolGeneratingPayload", + "type": "object" + }, + "ToolLabel": { + "additionalProperties": false, + "description": "``tools.tool_labels.ToolLabel`` \u2014 what one call executed through the tool_search bridge is,\nin words. Clients render ``text`` (or ``app``/``action`` in their own columns) and never parse\nthe tool name themselves.", + "properties": { + "kind": { + "$ref": "#/components/schemas/ToolLabelKind" + }, + "app": { + "title": "App", + "type": "string" + }, + "action": { + "title": "Action", + "type": "string" + }, + "emoji": { + "title": "Emoji", + "type": "string" + }, + "text": { + "title": "Text", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "preview": { + "default": "", + "title": "Preview", + "type": "string" + } + }, + "required": [ + "kind", + "app", + "action", + "emoji", + "text", + "name" + ], + "title": "ToolLabel", + "type": "object" + }, + "ToolLabelKind": { + "description": "Which surface one inner call of a bridged ``tool_call`` runs on.", + "enum": [ + "connector", + "mcp", + "tool" + ], + "title": "ToolLabelKind", + "type": "string" + }, + "ToolOutputRiskPayload": { + "additionalProperties": false, + "description": "``tool_progress._progress_output_risk``.", + "properties": { + "tool_id": { + "title": "Tool Id", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "risk": { + "title": "Risk", + "type": "string" + }, + "findings": { + "items": { + "type": "string" + }, + "title": "Findings", + "type": "array" + }, + "redacted": { + "title": "Redacted", + "type": "boolean" + } + }, + "required": [ + "tool_id", + "name", + "risk", + "findings", + "redacted" + ], + "title": "ToolOutputRiskPayload", + "type": "object" + }, + "ToolShowRow": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + } + }, + "required": [ + "name", + "description" + ], + "title": "ToolShowRow", + "type": "object" + }, + "ToolShowSection": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "tools": { + "items": { + "$ref": "#/components/schemas/ToolShowRow" + }, + "title": "Tools", + "type": "array" + } + }, + "required": [ + "name", + "tools" + ], + "title": "ToolShowSection", + "type": "object" + }, + "ToolStartPayload": { + "additionalProperties": false, + "description": "``tool_progress._on_tool_start`` (+ ``agent_callbacks._mirror_subagent_to_child`` rows with\n``preview`` and empty ``args``). ``todos``/``revision`` are NOT set by the emitter; kept optional\nbecause tool.start rows may pass through connector redaction unchanged.", + "properties": { + "tool_id": { + "title": "Tool Id", + "type": "string" + }, + "name": { + "title": "Name", + "type": "string" + }, + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context" + }, + "args": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Args" + }, + "args_text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Args Text" + }, + "preview": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Preview" + }, + "labels": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ToolLabel" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Labels" + } + }, + "required": [ + "tool_id", + "name" + ], + "title": "ToolStartPayload", + "type": "object" + }, + "ToolsAction": { + "enum": [ + "enable", + "disable" + ], + "title": "ToolsAction", + "type": "string" + }, + "ToolsChange": { + "additionalProperties": false, + "properties": { + "type": { + "const": "tools", + "title": "Type", + "type": "string" + }, + "connector": { + "title": "Connector", + "type": "string" + }, + "disabled_tools": { + "items": { + "type": "string" + }, + "maxItems": 2000, + "title": "Disabled Tools", + "type": "array" + } + }, + "required": [ + "type", + "connector", + "disabled_tools" + ], + "title": "ToolsChange", + "type": "object" + }, + "ToolsConfigureParams": { + "additionalProperties": false, + "description": "``names`` are toolset keys or ``server:tool`` MCP targets; with ``session_id`` the live session's\nprofile is authoritative and its agent is rebuilt.", + "properties": { + "action": { + "$ref": "#/components/schemas/ToolsAction" + }, + "names": { + "items": { + "type": "string" + }, + "title": "Names", + "type": "array" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "action", + "names" + ], + "title": "ToolsConfigureParams", + "type": "object" + }, + "ToolsConfigureResult": { + "additionalProperties": false, + "properties": { + "changed": { + "items": { + "type": "string" + }, + "title": "Changed", + "type": "array" + }, + "enabled_toolsets": { + "items": { + "type": "string" + }, + "title": "Enabled Toolsets", + "type": "array" + }, + "info": { + "anyOf": [ + { + "$ref": "#/components/schemas/SessionLiveInfo" + }, + { + "type": "null" + } + ], + "default": null + }, + "missing_servers": { + "items": { + "type": "string" + }, + "title": "Missing Servers", + "type": "array" + }, + "reset": { + "title": "Reset", + "type": "boolean" + }, + "unknown": { + "items": { + "type": "string" + }, + "title": "Unknown", + "type": "array" + } + }, + "required": [ + "changed", + "enabled_toolsets", + "missing_servers", + "reset", + "unknown" + ], + "title": "ToolsConfigureResult", + "type": "object" + }, + "ToolsShowResult": { + "additionalProperties": false, + "properties": { + "sections": { + "items": { + "$ref": "#/components/schemas/ToolShowSection" + }, + "title": "Sections", + "type": "array" + }, + "total": { + "title": "Total", + "type": "integer" + } + }, + "required": [ + "sections", + "total" + ], + "title": "ToolsShowResult", + "type": "object" + }, + "ToolsetEntry": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "enabled": { + "default": true, + "title": "Enabled", + "type": "boolean" + }, + "label": { + "default": "", + "title": "Label", + "type": "string" + }, + "description": { + "default": "", + "title": "Description", + "type": "string" + }, + "tool_count": { + "default": 0, + "title": "Tool Count", + "type": "integer" + } + }, + "required": [ + "name" + ], + "title": "ToolsetEntry", + "type": "object" + }, + "ToolsetRow": { + "additionalProperties": false, + "description": "One row of ``methods_tools._toolset_rows``; ``tools`` only when the caller asked for them\n(``tools.list``).", + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "description": { + "title": "Description", + "type": "string" + }, + "tool_count": { + "title": "Tool Count", + "type": "integer" + }, + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "tools": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tools" + } + }, + "required": [ + "name", + "description", + "tool_count", + "enabled" + ], + "title": "ToolsetRow", + "type": "object" + }, + "ToolsetsListResult": { + "additionalProperties": false, + "properties": { + "toolsets": { + "items": { + "$ref": "#/components/schemas/ToolsetRow" + }, + "title": "Toolsets", + "type": "array" + } + }, + "required": [ + "toolsets" + ], + "title": "ToolsetsListResult", + "type": "object" + }, + "TourRequestParams": { + "additionalProperties": false, + "description": "``tools/tour_tool.py`` field set.", + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "action": { + "title": "Action", + "type": "string" + }, + "surface": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Surface" + }, + "selector": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Selector" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Title" + }, + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Text" + }, + "side": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Side" + }, + "steps": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/TourStep" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Steps" + }, + "step_index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Step Index" + } + }, + "required": [ + "session_id", + "action" + ], + "title": "TourRequestParams", + "type": "object" + }, + "TourStep": { + "additionalProperties": true, + "properties": { + "selector": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Selector" + }, + "title": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Title" + }, + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Text" + }, + "side": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Side" + } + }, + "title": "TourStep", + "type": "object" + }, + "TranscriptMessage": { + "additionalProperties": true, + "description": "One transcript row as the gateway PROJECTS it for renderers (``session_history._project_history``):\n``text``, display-only ``timestamp`` / ``display_kind`` / ``display_metadata``, the durable ``row_id``\nrewind targets, and for tool rows raw ``content``, ``tool_call_id``, ``name``, ``context`` and ``args``.\nAssistant detail sidecars (``reasoning``, \u2026) ride as extra keys.", + "properties": { + "role": { + "title": "Role", + "type": "string" + }, + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Text" + }, + "content": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Content" + }, + "tool_call_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Tool Call Id" + }, + "timestamp": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Timestamp" + }, + "row_id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Row Id" + }, + "display_kind": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Display Kind" + }, + "display_metadata": { + "anyOf": [ + {}, + { + "type": "null" + } + ], + "default": null, + "title": "Display Metadata" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "context": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context" + }, + "args": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Args" + }, + "labels": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/ToolLabel" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Labels" + }, + "reasoning": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reasoning" + } + }, + "required": [ + "role" + ], + "title": "TranscriptMessage", + "type": "object" + }, + "TurnStatus": { + "description": "``prompt_turn._result_status``.", + "enum": [ + "complete", + "error", + "interrupted" + ], + "title": "TurnStatus", + "type": "string" + }, + "UiMetaConflict": { + "additionalProperties": false, + "properties": { + "expected": { + "default": null, + "title": "Expected" + }, + "actual": { + "default": 0, + "title": "Actual", + "type": "integer" + } + }, + "title": "UiMetaConflict", + "type": "object" + }, + "UndoIntent": { + "enum": [ + "retry", + "undo" + ], + "title": "UndoIntent", + "type": "string" + }, + "Usage": { + "additionalProperties": true, + "description": "``tui_gateway/server.py::_get_usage`` + ``agent/context_breakdown.py::context_usage_fields``.", + "properties": { + "model": { + "default": "", + "title": "Model", + "type": "string" + }, + "input": { + "default": 0, + "title": "Input", + "type": "integer" + }, + "output": { + "default": 0, + "title": "Output", + "type": "integer" + }, + "reasoning": { + "default": 0, + "title": "Reasoning", + "type": "integer" + }, + "prompt": { + "default": 0, + "title": "Prompt", + "type": "integer" + }, + "completion": { + "default": 0, + "title": "Completion", + "type": "integer" + }, + "total": { + "default": 0, + "title": "Total", + "type": "integer" + }, + "calls": { + "default": 0, + "title": "Calls", + "type": "integer" + }, + "compressions": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Compressions" + }, + "context_used": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context Used" + }, + "context_max": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context Max" + }, + "context_percent": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context Percent" + }, + "context_source": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context Source" + }, + "context_estimated": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Context Estimated" + }, + "cache_hit_pct": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache Hit Pct" + }, + "cache_read": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache Read" + }, + "cache_write": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cache Write" + }, + "avg_latency_s": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Avg Latency S" + }, + "avg_tps": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Avg Tps" + }, + "active_subagents": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Active Subagents" + }, + "dev_credits_spent_micros": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Dev Credits Spent Micros" + }, + "cost_usd": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cost Usd" + }, + "cost_status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cost Status" + } + }, + "title": "Usage", + "type": "object" + }, + "UsageBar": { + "additionalProperties": false, + "description": "``_serialize_usage_bar``: one bar, magnitudes pre-formatted; ``pct_used`` only for ``plan``.", + "properties": { + "kind": { + "$ref": "#/components/schemas/UsageBarKind" + }, + "remaining_display": { + "title": "Remaining Display", + "type": "string" + }, + "total_display": { + "title": "Total Display", + "type": "string" + }, + "spent_display": { + "title": "Spent Display", + "type": "string" + }, + "pct_used": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pct Used" + }, + "fill_fraction": { + "title": "Fill Fraction", + "type": "number" + } + }, + "required": [ + "kind", + "remaining_display", + "total_display", + "spent_display", + "fill_fraction" + ], + "title": "UsageBar", + "type": "object" + }, + "UsageBarKind": { + "enum": [ + "plan", + "topup" + ], + "title": "UsageBarKind", + "type": "string" + }, + "UsageModel": { + "additionalProperties": false, + "description": "``_serialize_usage_model`` \u2014 also embedded as ``usage`` in the billing / subscription states,\nwhere the fail-open form is a bare ``{available: false}`` (no ``ok``).", + "properties": { + "ok": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Ok" + }, + "available": { + "title": "Available", + "type": "boolean" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" + }, + "plan_name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Plan Name" + }, + "renews_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Renews At" + }, + "renews_display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Renews Display" + }, + "subscription_remaining_display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Subscription Remaining Display" + }, + "topup_remaining_display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Topup Remaining Display" + }, + "total_spendable_display": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Total Spendable Display" + }, + "has_topup": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Has Topup" + }, + "plan_bar": { + "anyOf": [ + { + "$ref": "#/components/schemas/UsageBar" + }, + { + "type": "null" + } + ], + "default": null + }, + "topup_bar": { + "anyOf": [ + { + "$ref": "#/components/schemas/UsageBar" + }, + { + "type": "null" + } + ], + "default": null + } + }, + "required": [ + "available" + ], + "title": "UsageModel", + "type": "object" + }, + "ValueResult": { + "additionalProperties": false, + "description": "The answer to any one-string prompt (sudo, secret, vault prompts, desktop bridges):\n``''`` means skipped / declined.", + "properties": { + "value": { + "title": "Value", + "type": "string" + } + }, + "required": [ + "value" + ], + "title": "ValueResult", + "type": "object" + }, + "VaultAddParams": { + "additionalProperties": false, + "description": "``secret`` goes straight into the encrypted store; the result carries only the new id.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "kind": { + "anyOf": [ + { + "$ref": "#/components/schemas/VaultKind" + }, + { + "type": "null" + } + ], + "default": null + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Label" + }, + "origin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Origin" + }, + "secret": { + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Secret" + } + }, + "title": "VaultAddParams", + "type": "object" + }, + "VaultAddResult": { + "additionalProperties": false, + "properties": { + "id": { + "title": "Id", + "type": "string" + } + }, + "required": [ + "id" + ], + "title": "VaultAddResult", + "type": "object" + }, + "VaultCodeRequestParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "site": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Site" + }, + "hint": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Hint" + } + }, + "required": [ + "session_id" + ], + "title": "VaultCodeRequestParams", + "type": "object" + }, + "VaultItem": { + "additionalProperties": false, + "description": "Metadata-only view (``VaultItemMeta.to_dict`` + ``backend``); never a secret.", + "properties": { + "id": { + "title": "Id", + "type": "string" + }, + "kind": { + "title": "Kind", + "type": "string" + }, + "label": { + "title": "Label", + "type": "string" + }, + "origin": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Origin" + }, + "created_at": { + "default": "", + "title": "Created At", + "type": "string" + }, + "identifier": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Identifier" + }, + "identifier_type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Identifier Type" + }, + "has_otp": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Has Otp" + }, + "backend": { + "title": "Backend", + "type": "string" + } + }, + "required": [ + "id", + "kind", + "label", + "backend" + ], + "title": "VaultItem", + "type": "object" + }, + "VaultKind": { + "enum": [ + "login", + "payment", + "address" + ], + "title": "VaultKind", + "type": "string" + }, + "VaultListResult": { + "additionalProperties": false, + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/VaultItem" + }, + "title": "Items", + "type": "array" + } + }, + "title": "VaultListResult", + "type": "object" + }, + "VaultLockParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + } + }, + "title": "VaultLockParams", + "type": "object" + }, + "VaultLockResult": { + "additionalProperties": false, + "properties": { + "locked": { + "default": true, + "title": "Locked", + "type": "boolean" + } + }, + "title": "VaultLockResult", + "type": "object" + }, + "VaultRemoveParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Id" + } + }, + "title": "VaultRemoveParams", + "type": "object" + }, + "VaultRemoveResult": { + "additionalProperties": false, + "properties": { + "removed": { + "title": "Removed", + "type": "boolean" + } + }, + "required": [ + "removed" + ], + "title": "VaultRemoveResult", + "type": "object" + }, + "VaultSaveLoginRequestParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "origin": { + "title": "Origin", + "type": "string" + }, + "site": { + "title": "Site", + "type": "string" + } + }, + "required": [ + "session_id", + "origin", + "site" + ], + "title": "VaultSaveLoginRequestParams", + "type": "object" + }, + "VaultSource": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "display_name": { + "title": "Display Name", + "type": "string" + }, + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "needs_unlock": { + "title": "Needs Unlock", + "type": "boolean" + }, + "unlocked": { + "title": "Unlocked", + "type": "boolean" + }, + "installed": { + "title": "Installed", + "type": "boolean" + } + }, + "required": [ + "name", + "display_name", + "enabled", + "needs_unlock", + "unlocked", + "installed" + ], + "title": "VaultSource", + "type": "object" + }, + "VaultSourceSetParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "enabled": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Enabled" + } + }, + "title": "VaultSourceSetParams", + "type": "object" + }, + "VaultSourceSetResult": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "enabled": { + "title": "Enabled", + "type": "boolean" + } + }, + "required": [ + "name", + "enabled" + ], + "title": "VaultSourceSetResult", + "type": "object" + }, + "VaultSourcesResult": { + "additionalProperties": false, + "properties": { + "sources": { + "items": { + "$ref": "#/components/schemas/VaultSource" + }, + "title": "Sources", + "type": "array" + } + }, + "title": "VaultSourcesResult", + "type": "object" + }, + "VaultUnlockParams": { + "additionalProperties": false, + "description": "The master password is consumed by the manager CLI and never stored or logged.", + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "password": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Password" + } + }, + "title": "VaultUnlockParams", + "type": "object" + }, + "VaultUnlockRequestParams": { + "additionalProperties": false, + "properties": { + "session_id": { + "title": "Session Id", + "type": "string" + }, + "backend": { + "title": "Backend", + "type": "string" + }, + "display_name": { + "title": "Display Name", + "type": "string" + } + }, + "required": [ + "session_id", + "backend", + "display_name" + ], + "title": "VaultUnlockRequestParams", + "type": "object" + }, + "VaultUnlockResult": { + "additionalProperties": false, + "properties": { + "name": { + "title": "Name", + "type": "string" + }, + "unlocked": { + "default": true, + "title": "Unlocked", + "type": "boolean" + } + }, + "required": [ + "name" + ], + "title": "VaultUnlockResult", + "type": "object" + }, + "VerificationEvidenceRow": { + "additionalProperties": true, + "description": "One ``verification_events`` row (``agent/verification_evidence.py``).", + "properties": { + "id": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Id" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Created At" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + }, + "root": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Root" + }, + "command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Command" + }, + "canonical_command": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Canonical Command" + }, + "kind": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Kind" + }, + "scope": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Scope" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Status" + }, + "exit_code": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Exit Code" + }, + "output_summary": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Output Summary" + } + }, + "title": "VerificationEvidenceRow", + "type": "object" + }, + "VerificationStatusInfo": { + "additionalProperties": false, + "description": "``verification_status()``: ``disabled`` / ``not_applicable`` / ``unverified`` / ``stale`` or the\nlatest event's own status; ``root`` and friends only once a workspace was identified.", + "properties": { + "status": { + "title": "Status", + "type": "string" + }, + "evidence": { + "anyOf": [ + { + "$ref": "#/components/schemas/VerificationEvidenceRow" + }, + { + "type": "null" + } + ], + "default": null + }, + "root": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Root" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "changed_paths": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Changed Paths" + } + }, + "required": [ + "status" + ], + "title": "VerificationStatusInfo", + "type": "object" + }, + "VerificationStatusParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "session_key": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Key" + }, + "cwd": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Cwd" + } + }, + "title": "VerificationStatusParams", + "type": "object" + }, + "VerificationStatusResult": { + "additionalProperties": false, + "properties": { + "verification": { + "$ref": "#/components/schemas/VerificationStatusInfo" + } + }, + "required": [ + "verification" + ], + "title": "VerificationStatusResult", + "type": "object" + }, + "VoiceRecordAction": { + "enum": [ + "start", + "stop" + ], + "title": "VoiceRecordAction", + "type": "string" + }, + "VoiceRecordParams": { + "additionalProperties": false, + "properties": { + "action": { + "$ref": "#/components/schemas/VoiceRecordAction", + "default": "start" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "VoiceRecordParams", + "type": "object" + }, + "VoiceRecordResult": { + "additionalProperties": false, + "properties": { + "status": { + "$ref": "#/components/schemas/VoiceRecordStatus" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + } + }, + "required": [ + "status" + ], + "title": "VoiceRecordResult", + "type": "object" + }, + "VoiceRecordStatus": { + "enum": [ + "recording", + "stopped", + "busy" + ], + "title": "VoiceRecordStatus", + "type": "string" + }, + "VoiceStatusPayload": { + "additionalProperties": false, + "description": "``methods_voice._vr_on_status``; states come from the recorder (idle / listening / transcribing \u2026).", + "properties": { + "state": { + "title": "State", + "type": "string" + } + }, + "required": [ + "state" + ], + "title": "VoiceStatusPayload", + "type": "object" + }, + "VoiceToggleAction": { + "enum": [ + "status", + "on", + "off", + "tts" + ], + "title": "VoiceToggleAction", + "type": "string" + }, + "VoiceToggleParams": { + "additionalProperties": false, + "properties": { + "action": { + "$ref": "#/components/schemas/VoiceToggleAction", + "default": "status" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "VoiceToggleParams", + "type": "object" + }, + "VoiceToggleResult": { + "additionalProperties": false, + "description": "``methods_voice.py::_voice_status_payload`` (+ the requirements probe on ``status``, the spoken\nstop hint on ``on``).", + "properties": { + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "record_key": { + "title": "Record Key", + "type": "string" + }, + "tts": { + "title": "Tts", + "type": "boolean" + }, + "stop_hint": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Stop Hint" + }, + "available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Available" + }, + "audio_available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Audio Available" + }, + "stt_available": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Stt Available" + }, + "details": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Details" + } + }, + "required": [ + "enabled", + "record_key", + "tts" + ], + "title": "VoiceToggleResult", + "type": "object" + }, + "VoiceTranscriptPayload": { + "additionalProperties": false, + "description": "``methods_voice._vr_transcript`` / ``_deliver_fd_transcript`` / typed stop phrase in methods_prompt.", + "properties": { + "text": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Text" + }, + "stop_phrase": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Stop Phrase" + }, + "typed": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Typed" + }, + "no_speech_limit": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "No Speech Limit" + } + }, + "title": "VoiceTranscriptPayload", + "type": "object" + }, + "VoiceTtsParams": { + "additionalProperties": false, + "properties": { + "text": { + "title": "Text", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "required": [ + "text" + ], + "title": "VoiceTtsParams", + "type": "object" + }, + "VoiceTtsResult": { + "additionalProperties": false, + "properties": { + "status": { + "title": "Status", + "type": "string" + } + }, + "required": [ + "status" + ], + "title": "VoiceTtsResult", + "type": "object" + }, + "WaitBarrierTarget": { + "additionalProperties": false, + "properties": { + "type": { + "enum": [ + "session", + "pid" + ], + "title": "Type", + "type": "string" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "integer" + } + ], + "title": "Target" + }, + "reason": { + "default": "", + "title": "Reason", + "type": "string" + } + }, + "required": [ + "type", + "target" + ], + "title": "WaitBarrierTarget", + "type": "object" + }, + "WaitBarrierUntil": { + "additionalProperties": false, + "properties": { + "type": { + "const": "until", + "title": "Type", + "type": "string" + }, + "until_at": { + "title": "Until At", + "type": "number" + }, + "reason": { + "default": "", + "title": "Reason", + "type": "string" + } + }, + "required": [ + "type", + "until_at" + ], + "title": "WaitBarrierUntil", + "type": "object" + }, + "WakeControlParams": { + "additionalProperties": false, + "properties": { + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "WakeControlParams", + "type": "object" + }, + "WakeDetectedPayload": { + "additionalProperties": false, + "description": "``methods_voice`` wake detector ``_on_detect``.", + "properties": { + "phrase": { + "title": "Phrase", + "type": "string" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + }, + "start_new_session": { + "title": "Start New Session", + "type": "boolean" + } + }, + "required": [ + "phrase", + "start_new_session" + ], + "title": "WakeDetectedPayload", + "type": "object" + }, + "WakeFeedParams": { + "additionalProperties": false, + "description": "``pcm`` (or the ``pcm_b64`` alias): base64 int16 mono little-endian, 16 kHz only.", + "properties": { + "pcm": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pcm" + }, + "pcm_b64": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Pcm B64" + }, + "sample_rate": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sample Rate" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "WakeFeedParams", + "type": "object" + }, + "WakeFeedResult": { + "additionalProperties": false, + "properties": { + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + }, + "fed": { + "title": "Fed", + "type": "boolean" + } + }, + "required": [ + "fed" + ], + "title": "WakeFeedResult", + "type": "object" + }, + "WakeInputDevice": { + "additionalProperties": true, + "description": "``tools/wake_word.py::_describe_input_device`` \u2014 PortAudio diagnostics for the configured mic.", + "properties": { + "selector": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Selector" + }, + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Name" + }, + "error": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Error" + }, + "max_input_channels": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Max Input Channels" + }, + "default_samplerate": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Default Samplerate" + }, + "hostapi_index": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Hostapi Index" + }, + "hostapi": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Hostapi" + } + }, + "title": "WakeInputDevice", + "type": "object" + }, + "WakePauseResult": { + "additionalProperties": false, + "properties": { + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + }, + "paused": { + "title": "Paused", + "type": "boolean" + } + }, + "required": [ + "paused" + ], + "title": "WakePauseResult", + "type": "object" + }, + "WakeResumeResult": { + "additionalProperties": false, + "properties": { + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + }, + "resumed": { + "title": "Resumed", + "type": "boolean" + } + }, + "required": [ + "resumed" + ], + "title": "WakeResumeResult", + "type": "object" + }, + "WakeStartParams": { + "additionalProperties": false, + "description": "``surface`` names the caller (\"tui\" | \"gui\"); ``persist`` is the explicit gesture that also\nflips ``wake_word.enabled`` on; ``client_capture`` asks for PCM streamed via wake.feed.", + "properties": { + "surface": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Surface" + }, + "persist": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Persist" + }, + "client_capture": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Client Capture" + }, + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "WakeStartParams", + "type": "object" + }, + "WakeStartResult": { + "additionalProperties": false, + "description": "``started: false`` carries ``reason`` (unavailable / disabled / disabled_for_surface / owned);\n``sample_rate`` / ``frame_length`` describe the PCM frames the armed detector expects.", + "properties": { + "started": { + "title": "Started", + "type": "boolean" + }, + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + }, + "hint": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Hint" + }, + "phrase": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Phrase" + }, + "provider": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Provider" + }, + "owner_surface": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Owner Surface" + }, + "enabled_persisted": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Enabled Persisted" + }, + "capture": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Capture" + }, + "sample_rate": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Sample Rate" + }, + "frame_length": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Frame Length" + } + }, + "required": [ + "started" + ], + "title": "WakeStartResult", + "type": "object" + }, + "WakeStatusParams": { + "additionalProperties": false, + "properties": { + "surface": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Surface" + }, + "client_capture": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Client Capture" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "WakeStatusParams", + "type": "object" + }, + "WakeStatusResult": { + "additionalProperties": false, + "description": "``enabled`` is config truth; ``listening`` is this caller's armed detector; ``audio_silent``\nmeans armed but deaf (see ``hint``).", + "properties": { + "listening": { + "title": "Listening", + "type": "boolean" + }, + "owned_by_caller": { + "title": "Owned By Caller", + "type": "boolean" + }, + "owner_surface": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Owner Surface" + }, + "phrase": { + "title": "Phrase", + "type": "string" + }, + "provider": { + "title": "Provider", + "type": "string" + }, + "configured_surface": { + "title": "Configured Surface", + "type": "string" + }, + "input_device": { + "$ref": "#/components/schemas/WakeInputDevice" + }, + "available": { + "title": "Available", + "type": "boolean" + }, + "hint": { + "title": "Hint", + "type": "string" + }, + "enabled": { + "title": "Enabled", + "type": "boolean" + }, + "audio_silent": { + "title": "Audio Silent", + "type": "boolean" + }, + "capture": { + "title": "Capture", + "type": "string" + }, + "local_input_available": { + "title": "Local Input Available", + "type": "boolean" + }, + "sample_rate": { + "title": "Sample Rate", + "type": "integer" + }, + "frame_length": { + "title": "Frame Length", + "type": "integer" + } + }, + "required": [ + "listening", + "owned_by_caller", + "phrase", + "provider", + "configured_surface", + "input_device", + "available", + "hint", + "enabled", + "audio_silent", + "capture", + "local_input_available", + "sample_rate", + "frame_length" + ], + "title": "WakeStatusResult", + "type": "object" + }, + "WakeStopParams": { + "additionalProperties": false, + "properties": { + "persist": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Persist" + }, + "profile": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Profile" + } + }, + "title": "WakeStopParams", + "type": "object" + }, + "WakeStopResult": { + "additionalProperties": false, + "properties": { + "reason": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Reason" + }, + "stopped": { + "title": "Stopped", + "type": "boolean" + }, + "disabled_persisted": { + "title": "Disabled Persisted", + "type": "boolean" + } + }, + "required": [ + "stopped", + "disabled_persisted" + ], + "title": "WakeStopResult", + "type": "object" + }, + "_SessionScoped": { + "additionalProperties": false, + "description": "Handlers that look a live session up with ``_sessions.get(params.get(\"session_id\"))``: an\nabsent / unknown id falls back to the launch profile's config, so it is never required.", + "properties": { + "session_id": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "title": "Session Id" + } + }, + "title": "_SessionScoped", + "type": "object" + }, + "ConnectorErrorReason": { + "type": "string", + "enum": [ + "INVALID_PARAMS", + "NOT_OWNER", + "UNSUPPORTED_RUNTIME", + "CONNECTOR_REQUEST_FAILED", + "INVALID_CONNECTOR_RESPONSE", + "UNKNOWN_TARGET", + "LINK_STILL_VALID", + "REISSUE_REFUSED", + "UNKNOWN_OPERATION", + "INVALID_ANSWER", + "NEEDS_NOUS_AUTH", + "CONNECTOR_NOT_FOUND", + "TOOLS_UNAVAILABLE", + "CONNECTORS_UNAVAILABLE", + "CATALOG_UNAVAILABLE", + "ACCOUNTS_UNAVAILABLE", + "CONNECTION_NOT_FOUND", + "POLICY_UNAVAILABLE", + "POLICY_CONFLICT", + "FORBIDDEN_SCOPE", + "ORG_REQUIRED", + "ORG_ACCESS_DENIED", + "INVALID_POLICY" + ] + } + } + }, + "x-server-requests": [ + { + "name": "approval", + "summary": "A dangerous command awaits the user's decision.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ApprovalRequestParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ApprovalResult" + } + } + }, + { + "name": "clarify", + "summary": "The clarify tool: ask the user one question or a batch.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ClarifyRequestParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ClarifyResult" + } + } + }, + { + "name": "display.install.sudo", + "summary": "Masked sudo password for the Bot Screen package install; app-level (empty session).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/DisplayInstallSudoParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ValueResult" + } + } + }, + { + "name": "preview.act", + "summary": "Click / type / scroll / annotate inside the in-app browser preview.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/PreviewActRequestParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ValueResult" + } + } + }, + { + "name": "preview.read", + "summary": "Read the in-app browser preview's text (JSON text answer).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ReadRangeRequestParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ValueResult" + } + } + }, + { + "name": "secret", + "summary": "Masked value for a named env var (skills / setup flows).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SecretRequestParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ValueResult" + } + } + }, + { + "name": "sudo", + "summary": "Masked sudo password for the terminal tool.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/SudoRequestParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ValueResult" + } + } + }, + { + "name": "terminal.read", + "summary": "Read the visible in-app terminal buffer (JSON text answer).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/ReadRangeRequestParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ValueResult" + } + } + }, + { + "name": "tour", + "summary": "Drive a guided tour highlight in the desktop renderer.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/TourRequestParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ValueResult" + } + } + }, + { + "name": "vault.code", + "summary": "A one-time / 2FA code the user reads from their device.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/VaultCodeRequestParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ValueResult" + } + } + }, + { + "name": "vault.save_login", + "summary": "Save a login for a site the agent is about to fill; the answer is JSON {identifier, password}.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/VaultSaveLoginRequestParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ValueResult" + } + } + }, + { + "name": "vault.unlock_prompt", + "summary": "Master password to unlock an external password manager for this session.", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/VaultUnlockRequestParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ValueResult" + } + } + }, + { + "name": "window.read", + "summary": "Enumerate the native window below the app (JSON text answer).", + "params": [ + { + "name": "params", + "schema": { + "$ref": "#/components/schemas/EmptyRequestParams" + } + } + ], + "result": { + "name": "result", + "schema": { + "$ref": "#/components/schemas/ValueResult" + } + } + } + ], + "x-notifications": [ + { + "name": "agent.terminal.output", + "summary": "Output chunk from an agent-owned background process.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/TerminalOutputPayload" + } + } + ] + }, + { + "name": "background.complete", + "summary": "A /background side agent finished.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SideAgentCompletePayload" + } + } + ] + }, + { + "name": "billing.step_up.verification", + "summary": "Device-flow URL + code for the billing scope step-up; the client opens the browser.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/BillingStepUpVerificationPayload" + } + } + ] + }, + { + "name": "bot_relay.outbox.pending", + "summary": "A bot-relay outbox envelope is queued; drain it.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ChangeSignalPayload" + } + } + ] + }, + { + "name": "browser.controller.cancel", + "summary": "Withdraw a pending controller command.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/BrowserControllerCancelPayload" + } + } + ] + }, + { + "name": "browser.controller.command", + "summary": "Dispatch one browser action to the attached controller.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/BrowserControllerCommandPayload" + } + } + ] + }, + { + "name": "browser.progress", + "summary": "Browser (CDP) connect / install progress line.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/BrowserProgressPayload" + } + } + ] + }, + { + "name": "btw.complete", + "summary": "A /btw side question was answered.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SideAgentCompletePayload" + } + } + ] + }, + { + "name": "connection.request", + "summary": "A connection operation opened on this session; the desktop renders its card.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ConnectionRequestPayload" + } + } + ] + }, + { + "name": "connection.update", + "summary": "One transition or the settlement of an open connection operation.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ConnectionUpdatePayload" + } + } + ] + }, + { + "name": "cron.changed", + "summary": "cron/jobs.json moved; refetch the cron list.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ChangeSignalPayload" + } + } + ] + }, + { + "name": "display.install.done", + "summary": "The install ended (0 ok, -1 cancelled, -2 no sudo: the command to run by hand was streamed).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/DisplayInstallDonePayload" + } + } + ] + }, + { + "name": "display.install.log", + "summary": "One line of package-manager output.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/DisplayInstallLogPayload" + } + } + ] + }, + { + "name": "display.lease", + "summary": "The takeover lease changed hands; every client repaints.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/DisplayLeasePayload" + } + } + ] + }, + { + "name": "display.status", + "summary": "This profile's screen started or stopped (also for transitions made outside hermes serve).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/DisplayStatusPayload" + } + } + ] + }, + { + "name": "error", + "summary": "A session-level failure outside a turn (agent init, model switch, compression, resume).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ErrorPayload" + } + } + ] + }, + { + "name": "gateway.ready", + "summary": "First frame of a connection: the resolved skin, the change-event capability and the replay epoch.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/GatewayReadyPayload" + } + } + ] + }, + { + "name": "layout.apply", + "summary": "Apply a named desktop layout preset.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/LayoutApplyPayload" + } + } + ] + }, + { + "name": "message.complete", + "summary": "The turn ended: final text, usage and outcome.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/MessageCompletePayload" + } + } + ] + }, + { + "name": "message.delta", + "summary": "One streamed chunk of the assistant reply.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/StreamDeltaPayload" + } + } + ] + }, + { + "name": "message.interim", + "summary": "Interim assistant commentary (text beside tool calls) sealed as its own segment.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/MessageInterimPayload" + } + } + ] + }, + { + "name": "message.reaction", + "summary": "The agent reacted to a message; paint it live.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/MessageReactionPayload" + } + } + ] + }, + { + "name": "message.start", + "summary": "A turn began streaming; no payload.", + "params": [ + { + "name": "payload", + "schema": { + "type": "object", + "additionalProperties": false + } + } + ] + }, + { + "name": "moa.aggregating", + "summary": "The MoA aggregator started.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/MoaAggregatingPayload" + } + } + ] + }, + { + "name": "moa.phase", + "summary": "MoA phase transition (currently only ``aggregator``).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/MoaPhasePayload" + } + } + ] + }, + { + "name": "moa.progress", + "summary": "MoA reference fan-out progress (n/total).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/MoaProgressPayload" + } + } + ] + }, + { + "name": "moa.reference", + "summary": "One MoA reference model's output.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/MoaReferencePayload" + } + } + ] + }, + { + "name": "notice", + "summary": "Informational one-liner for the session (capabilities refreshed).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/NoticePayload" + } + } + ] + }, + { + "name": "notification.clear", + "summary": "Withdraw the notice with this key.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/NotificationClearPayload" + } + } + ] + }, + { + "name": "notification.show", + "summary": "Show / replace a keyed out-of-band notice (toast or status bar).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/NotificationShowPayload" + } + } + ] + }, + { + "name": "pairing.changed", + "summary": "Pairing state moved; refetch pairing.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ChangeSignalPayload" + } + } + ] + }, + { + "name": "pane.reveal", + "summary": "Focus / reveal a named desktop pane.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/PaneRevealPayload" + } + } + ] + }, + { + "name": "pet.changed", + "summary": "The active pet / its spritesheet changed (watcher).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/PetChangedPayload" + } + } + ] + }, + { + "name": "pet.generate.progress", + "summary": "Pet base-draft generation progress.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/PetGenerateProgressPayload" + } + } + ] + }, + { + "name": "pet.hatch.progress", + "summary": "Pet hatch (row drawing) progress.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/PetHatchProgressPayload" + } + } + ] + }, + { + "name": "platforms.changed", + "summary": "gateway_state.json moved; refetch platform status.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ChangeSignalPayload" + } + } + ] + }, + { + "name": "preview.close", + "summary": "Close the preview pane or one tab.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/PreviewClosePayload" + } + } + ] + }, + { + "name": "preview.open", + "summary": "Open a URL / file in the desktop preview pane.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/PreviewOpenPayload" + } + } + ] + }, + { + "name": "preview.restart.complete", + "summary": "The hidden preview-restart agent finished.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SideAgentCompletePayload" + } + } + ] + }, + { + "name": "preview.restart.progress", + "summary": "Progress line from the preview-restart agent.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/PreviewRestartProgressPayload" + } + } + ] + }, + { + "name": "projects.changed", + "summary": "projects.db moved; refetch the project list + tree.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ChangeSignalPayload" + } + } + ] + }, + { + "name": "reaction", + "summary": "Affection reaction detected in the user's message (hearts etc.).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ReactionPayload" + } + } + ] + }, + { + "name": "reasoning.available", + "summary": "A completed reasoning block (non-streaming providers).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/StreamDeltaPayload" + } + } + ] + }, + { + "name": "reasoning.delta", + "summary": "One streamed chunk of the model's reasoning.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/StreamDeltaPayload" + } + } + ] + }, + { + "name": "request.cancel", + "summary": "The backend withdrew an open server\u2192client request; clear the matching card only.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/RequestCancelPayload" + } + } + ] + }, + { + "name": "review.summary", + "summary": "Background review of the last turn finished.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ReviewSummaryPayload" + } + } + ] + }, + { + "name": "session.control.update", + "summary": "Persisted goal / loop / heartbeat state changed.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SessionControlUpdatePayload" + } + } + ] + }, + { + "name": "session.info", + "summary": "Live session settings snapshot (``server._session_info``); also the ``info`` of create/resume/activate.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SessionLiveInfo" + } + } + ] + }, + { + "name": "session.reclaimed", + "summary": "The backend reclaimed a live session out from under its clients.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SessionReclaimedPayload" + } + } + ] + }, + { + "name": "session.resume_progress", + "summary": "Deferred resume hydration progress.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SessionResumeProgressPayload" + } + } + ] + }, + { + "name": "session.title", + "summary": "Auto-titling renamed the session (``session_id`` is the stored key).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SessionTitlePayload" + } + } + ] + }, + { + "name": "session.usage", + "summary": "Mid-turn usage tick; message.complete carries the authoritative final usage.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SessionUsagePayload" + } + } + ] + }, + { + "name": "sessions.changed", + "summary": "state.db moved; refetch the session list.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ChangeSignalPayload" + } + } + ] + }, + { + "name": "setup.ready", + "summary": "The free-tier bootstrap finished (broadcast); the desktop's setup gate reads the record.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SetupReadyPayload" + } + } + ] + }, + { + "name": "skin.changed", + "summary": "The active skin moved (name switch or live colour edit); repaint from this palette.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SkinPayload" + } + } + ] + }, + { + "name": "status.update", + "summary": "Transient status line (kind: status, lifecycle, compacting, goal, loop, heartbeat, process, \u2026).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/StatusUpdatePayload" + } + } + ] + }, + { + "name": "subagent.complete", + "summary": "A child finished (status + observability rollup).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SubagentEventPayload" + } + } + ] + }, + { + "name": "subagent.progress", + "summary": "Batched tool-name progress from a child.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SubagentEventPayload" + } + } + ] + }, + { + "name": "subagent.spawn_requested", + "summary": "delegate_task accepted a child goal (before the child starts).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SubagentEventPayload" + } + } + ] + }, + { + "name": "subagent.start", + "summary": "A delegated child started running.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SubagentEventPayload" + } + } + ] + }, + { + "name": "subagent.thinking", + "summary": "A child's reasoning chunk.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SubagentEventPayload" + } + } + ] + }, + { + "name": "subagent.tool", + "summary": "A child called a tool.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/SubagentEventPayload" + } + } + ] + }, + { + "name": "terminal.close", + "summary": "An agent-owned background process closed.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/TerminalClosePayload" + } + } + ] + }, + { + "name": "thinking.delta", + "summary": "Legacy thinking-text chunk (thinking_callback).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/StreamDeltaPayload" + } + } + ] + }, + { + "name": "tip.show", + "summary": "Point at a desktop element with a one-line tip bubble.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/TipShowPayload" + } + } + ] + }, + { + "name": "todo.updated", + "summary": "Full todo snapshot after a todo tool ran.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/TodoUpdatedPayload" + } + } + ] + }, + { + "name": "tool.complete", + "summary": "A tool call finished: parsed result, summary, optional diff / todo snapshot.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ToolCompletePayload" + } + } + ] + }, + { + "name": "tool.generating", + "summary": "The model is emitting a tool call's arguments.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ToolGeneratingPayload" + } + } + ] + }, + { + "name": "tool.output_risk", + "summary": "Tool output was classified as risky (prompt-injection / secret findings).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ToolOutputRiskPayload" + } + } + ] + }, + { + "name": "tool.start", + "summary": "A tool call began (stable id + full args).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/ToolStartPayload" + } + } + ] + }, + { + "name": "voice.interrupted", + "summary": "Barge-in: the spoken interjection interrupted the turn; no payload.", + "params": [ + { + "name": "payload", + "schema": { + "type": "object", + "additionalProperties": false + } + } + ] + }, + { + "name": "voice.status", + "summary": "Voice recorder state changed.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/VoiceStatusPayload" + } + } + ] + }, + { + "name": "voice.transcript", + "summary": "A voice capture produced text (or a stop phrase / silence limit).", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/VoiceTranscriptPayload" + } + } + ] + }, + { + "name": "wake.detected", + "summary": "A wake phrase fired.", + "params": [ + { + "name": "payload", + "schema": { + "$ref": "#/components/schemas/WakeDetectedPayload" + } + } + ] + } + ] +} diff --git a/scripts/sync-gateway-contract.sh b/scripts/sync-gateway-contract.sh new file mode 100755 index 00000000..f7e0b3fc --- /dev/null +++ b/scripts/sync-gateway-contract.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +# Refresh the vendored gateway contract snapshot from hermes-agent (#1374). +# Usage: scripts/sync-gateway-contract.sh [ref] (default: main) +set -euo pipefail + +REF="${1:-main}" +REPO="NousResearch/hermes-agent" +CONTRACT_PATH="apps/shared/src/gateway-contract.openrpc.json" +DEST="$(cd "$(dirname "$0")/.." && pwd)/app/src/test/resources/gateway-contract" + +SHA="$(gh api "repos/$REPO/commits/$REF" --jq .sha)" +DATE="$(gh api "repos/$REPO/commits/$SHA" --jq .commit.committer.date)" + +mkdir -p "$DEST" +gh api -H "Accept: application/vnd.github.raw" "repos/$REPO/contents/$CONTRACT_PATH?ref=$SHA" > "$DEST/openrpc.json" +jq -e '.methods | length > 0' "$DEST/openrpc.json" > /dev/null + +printf 'repo: %s\nref: %s\nsha: %s\ndate: %s\npath: %s\n' "$REPO" "$REF" "$SHA" "${DATE%%T*}" "$CONTRACT_PATH" > "$DEST/SOURCE" +echo "Vendored $REPO@$SHA. Run ./gradlew testDebugUnitTest --tests '*GatewayContract*' and review the diff."