addedOutput schema / $defs
Added value: +{
+ "BinaryResult": {
+ "description": "Result model for Gopher binary responses.",
+ "properties": {
+ "bytes": {
+ "description": "Size of content in bytes",
+ "minimum": 0,
+ "title": "Bytes",
+ "type": "integer"
+ },
+ "cache_age_seconds": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "How old the cached copy was, in seconds, when this result was returned. If the user is asking about something that may have changed since then, fetch again with `refresh=true`. Null when `cached` is false.",
+ "title": "Cache Age Seconds"
+ },
+ "cached": {
+ "default": false,
+ "description": "True when this result was replayed from the local response cache instead of being fetched from the server during this call. Treat the content as a snapshot taken at `cached_at`, not as the current state of the resource.",
+ "title": "Cached",
+ "type": "boolean"
+ },
+ "cached_at": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "ISO-8601 UTC timestamp at which the cached copy was actually fetched from the server. Null when `cached` is false.",
+ "title": "Cached At"
+ },
+ "kind": {
+ "const": "binary",
+ "default": "binary",
+ "title": "Kind",
+ "type": "string"
+ },
+ "mime_type": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Guessed MIME type",
+ "title": "Mime Type"
+ },
+ "note": {
+ "default": "Binary content not returned to preserve context",
+ "description": "Note about binary handling",
+ "title": "Note",
+ "type": "string"
+ },
+ "request_info": {
+ "$ref": "#/$defs/RequestInfo",
+ "description": "What was actually requested, echoed back so an answer can be matched to its question -- which matters most in a batch, where several results arrive together"
+ }
+ },
+ "required": [
+ "bytes"
+ ],
+ "title": "BinaryResult",
+ "type": "object"
+ },
+ "ErrorResult": {
+ "description": "Result model for error responses, shared by both protocols.\n\n`error` always carries `code` and `message`; a Gemini failure adds the\nnumeric `status` and a boolean `temporary` saying whether retrying may help.",
+ "properties": {
+ "error": {
+ "additionalProperties": true,
+ "description": "Error information",
+ "title": "Error",
+ "type": "object"
+ },
+ "kind": {
+ "const": "error",
+ "default": "error",
+ "title": "Kind",
+ "type": "string"
+ },
+ "request_info": {
+ "$ref": "#/$defs/RequestInfo",
+ "description": "What was actually requested, echoed back so an answer can be matched to its question -- which matters most in a batch, where several results arrive together"
+ }
+ },
+ "required": [
+ "error"
+ ],
+ "title": "ErrorResult",
+ "type": "object"
+ },
+ "GopherMenuItem": {
+ "description": "Model for a single Gopher menu item.",
+ "properties": {
+ "host": {
+ "description": "Hostname where item resides",
+ "title": "Host",
+ "type": "string"
+ },
+ "next_url": {
+ "description": "Fully formed gopher:// URL for this item",
+ "title": "Next Url",
+ "type": "string"
+ },
+ "port": {
+ "description": "Port number (typically 70)",
+ "maximum": 65535,
+ "minimum": 0,
+ "title": "Port",
+ "type": "integer"
+ },
+ "selector": {
+ "description": "Selector string for this item",
+ "title": "Selector",
+ "type": "string"
+ },
+ "title": {
+ "description": "Human-readable item title",
+ "title": "Title",
+ "type": "string"
+ },
+ "type": {
+ "description": "Gopher item type (single character)",
+ "title": "Type",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "title",
+ "selector",
+ "host",
+ "port",
+ "next_url"
+ ],
+ "title": "GopherMenuItem",
+ "type": "object"
+ },
+ "MenuResult": {
+ "description": "Result model for Gopher menu responses.",
+ "properties": {
+ "cache_age_seconds": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "How old the cached copy was, in seconds, when this result was returned. If the user is asking about something that may have changed since then, fetch again with `refresh=true`. Null when `cached` is false.",
+ "title": "Cache Age Seconds"
+ },
+ "cached": {
+ "default": false,
+ "description": "True when this result was replayed from the local response cache instead of being fetched from the server during this call. Treat the content as a snapshot taken at `cached_at`, not as the current state of the resource.",
+ "title": "Cached",
+ "type": "boolean"
+ },
+ "cached_at": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "ISO-8601 UTC timestamp at which the cached copy was actually fetched from the server. Null when `cached` is false.",
+ "title": "Cached At"
+ },
+ "items": {
+ "description": "List of menu items",
+ "items": {
+ "$ref": "#/$defs/GopherMenuItem"
+ },
+ "title": "Items",
+ "type": "array"
+ },
+ "kind": {
+ "const": "menu",
+ "default": "menu",
+ "title": "Kind",
+ "type": "string"
+ },
+ "next_offset": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Where the part that was cut begins. Pass it back as `offset` to fetch the next window of the same resource. Null when nothing was cut and there is no more to fetch.",
+ "title": "Next Offset"
+ },
+ "request_info": {
+ "$ref": "#/$defs/RequestInfo",
+ "description": "What was actually requested, echoed back so an answer can be matched to its question -- which matters most in a batch, where several results arrive together"
+ },
+ "total_items": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "How many items the menu holds in total, before the render limit was applied. Null when the total was not counted.",
+ "title": "Total Items"
+ },
+ "truncated": {
+ "default": false,
+ "description": "True if the directory holds more items after this window. `next_offset` is where they start -- call again with `offset` set to it rather than treating `items` as the whole directory.",
+ "title": "Truncated",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "items"
+ ],
+ "title": "MenuResult",
+ "type": "object"
+ },
+ "RequestInfo": {
+ "additionalProperties": false,
+ "description": "What this result answers for: the request, echoed back.\n\nOnly the keys the request actually had are present, so a missing key means\n\"did not apply here\", not \"unknown\". `url` plus `timestamp` identify which\nquestion a result belongs to when several arrive together from a batch.",
+ "properties": {
+ "cert_fingerprint": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "SHA-256 fingerprint of the certificate the capsule presented, as `sha256:<hex>`. Null when none was available",
+ "title": "Cert Fingerprint"
+ },
+ "cipher": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "TLS cipher suite negotiated with the capsule. Null when the connection reported none",
+ "title": "Cipher"
+ },
+ "client_cert_warning": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Why the client identity that was presented may not have been usable. Present only when there is such a caveat",
+ "title": "Client Cert Warning"
+ },
+ "has_query": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Whether the request carried a query string. Reported as a flag rather than a value because the query holds the answer to a status-10/11 prompt, which may be sensitive",
+ "title": "Has Query"
+ },
+ "host": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Host that was contacted",
+ "title": "Host"
+ },
+ "path": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Path that was requested",
+ "title": "Path"
+ },
+ "port": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Port that was contacted, as it was named",
+ "title": "Port"
+ },
+ "search_ignored": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "True when the URL carried a search query that was NOT sent: RFC 1436 gives only type-7 items a query field, so a query on any other type is dropped. Absent when nothing was dropped",
+ "title": "Search Ignored"
+ },
+ "selector": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Gopher selector that was sent, rendered JSON-safe",
+ "title": "Selector"
+ },
+ "timestamp": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "ISO-8601 UTC instant at which this request was made. With `cached_at` it is what distinguishes 'fetched now' from 'replayed from cache'. Absent when the request was rejected before it was sent",
+ "title": "Timestamp"
+ },
+ "tls_version": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "TLS version negotiated with the capsule. Null when the connection reported none",
+ "title": "Tls Version"
+ },
+ "tofu_warning": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Why this connection's certificate is not the pinned one, when it is not. Null on a clean trust-on-first-use check",
+ "title": "Tofu Warning"
+ },
+ "type": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Gopher item type character the URL named (RFC 1436)",
+ "title": "Type"
+ },
+ "url": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "The resource this result answers for, as the server was asked for it. A Gemini URL never carries its query string here: the answer to a status-10/11 prompt travels in the query and may be a secret",
+ "title": "Url"
+ }
+ },
+ "title": "RequestInfo",
+ "type": "object"
+ },
+ "TextResult": {
+ "description": "Result model for Gopher text responses.",
+ "properties": {
+ "bytes": {
+ "description": "Size of content in bytes",
+ "minimum": 0,
+ "title": "Bytes",
+ "type": "integer"
+ },
+ "cache_age_seconds": {
+ "anyOf": [
+ {
+ "type": "number"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "How old the cached copy was, in seconds, when this result was returned. If the user is asking about something that may have changed since then, fetch again with `refresh=true`. Null when `cached` is false.",
+ "title": "Cache Age Seconds"
+ },
+ "cached": {
+ "default": false,
+ "description": "True when this result was replayed from the local response cache instead of being fetched from the server during this call. Treat the content as a snapshot taken at `cached_at`, not as the current state of the resource.",
+ "title": "Cached",
+ "type": "boolean"
+ },
+ "cached_at": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "ISO-8601 UTC timestamp at which the cached copy was actually fetched from the server. Null when `cached` is false.",
+ "title": "Cached At"
+ },
+ "charset": {
+ "default": "utf-8",
+ "description": "Character encoding",
+ "title": "Charset",
+ "type": "string"
+ },
+ "kind": {
+ "const": "text",
+ "default": "text",
+ "title": "Kind",
+ "type": "string"
+ },
+ "next_offset": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "Where the part that was cut begins. Pass it back as `offset` to fetch the next window of the same resource. Null when nothing was cut and there is no more to fetch.",
+ "title": "Next Offset"
+ },
+ "request_info": {
+ "$ref": "#/$defs/RequestInfo",
+ "description": "What was actually requested, echoed back so an answer can be matched to its question -- which matters most in a batch, where several results arrive together"
+ },
+ "text": {
+ "description": "Text content",
+ "title": "Text",
+ "type": "string"
+ },
+ "total_chars": {
+ "anyOf": [
+ {
+ "type": "integer"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": null,
+ "description": "How many characters the full body holds, before the render limit was applied. Null when the total was not counted.",
+ "title": "Total Chars"
+ },
+ "truncated": {
+ "default": false,
+ "description": "True if the body continues after this window. `next_offset` is where it continues; `bytes` still reports the full original size (in bytes, which is not the unit an offset counts in).",
+ "title": "Truncated",
+ "type": "boolean"
+ }
+ },
+ "required": [
+ "bytes",
+ "text"
+ ],
+ "title": "TextResult",
+ "type": "object"
+ }
+}