mirror of
https://github.com/openai/codex.git
synced 2026-04-25 07:05:38 +00:00
Similar to what @sayan-oai did in openai/codex#8956 for `config.schema.json`, this PR updates the repo so that it includes the output of `codex app-server generate-json-schema` and `codex app-server generate-ts` and adds a test to verify it is in sync with the current code. Motivation: - This makes any schema changes introduced by a PR transparent during code review. - In particular, this should help us catch PRs that would introduce a non-backwards-compatible change to the app schema (eventually, this should also be enforced by tooling). - Once https://github.com/openai/codex/pull/10231 is in to formalize the notion of "experimental" fields, we can work on ensuring the non-experimental bits are backwards-compatible. `codex-rs/app-server-protocol/tests/schema_fixtures.rs` was added as the test and `just write-app-server-schema` can be use to generate the vendored schema files. Incidentally, when I run: ``` rg _ codex-rs/app-server-protocol/schema/typescript/v2 ``` I see a number of `snake_case` names that should be `camelCase`.
379 lines
11 KiB
JSON
379 lines
11 KiB
JSON
{
|
||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||
"definitions": {
|
||
"AbsolutePathBuf": {
|
||
"description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.",
|
||
"type": "string"
|
||
},
|
||
"AskForApproval": {
|
||
"description": "Determines the conditions under which the user is consulted to approve running the command proposed by Codex.",
|
||
"oneOf": [
|
||
{
|
||
"description": "Under this policy, only \"known safe\" commands—as determined by `is_safe_command()`—that **only read files** are auto‑approved. Everything else will ask the user to approve.",
|
||
"enum": [
|
||
"untrusted"
|
||
],
|
||
"type": "string"
|
||
},
|
||
{
|
||
"description": "*All* commands are auto‑approved, but they are expected to run inside a sandbox where network access is disabled and writes are confined to a specific set of paths. If the command fails, it will be escalated to the user to approve execution without a sandbox.",
|
||
"enum": [
|
||
"on-failure"
|
||
],
|
||
"type": "string"
|
||
},
|
||
{
|
||
"description": "The model decides when to ask the user for approval.",
|
||
"enum": [
|
||
"on-request"
|
||
],
|
||
"type": "string"
|
||
},
|
||
{
|
||
"description": "Never ask the user to approve commands. Failures are immediately returned to the model, and never escalated to the user for approval.",
|
||
"enum": [
|
||
"never"
|
||
],
|
||
"type": "string"
|
||
}
|
||
]
|
||
},
|
||
"InputItem": {
|
||
"oneOf": [
|
||
{
|
||
"properties": {
|
||
"data": {
|
||
"properties": {
|
||
"text": {
|
||
"type": "string"
|
||
},
|
||
"text_elements": {
|
||
"default": [],
|
||
"description": "UI-defined spans within `text` used to render or persist special elements.",
|
||
"items": {
|
||
"$ref": "#/definitions/V1TextElement"
|
||
},
|
||
"type": "array"
|
||
}
|
||
},
|
||
"required": [
|
||
"text"
|
||
],
|
||
"type": "object"
|
||
},
|
||
"type": {
|
||
"enum": [
|
||
"text"
|
||
],
|
||
"title": "TextInputItemType",
|
||
"type": "string"
|
||
}
|
||
},
|
||
"required": [
|
||
"data",
|
||
"type"
|
||
],
|
||
"title": "TextInputItem",
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"data": {
|
||
"properties": {
|
||
"image_url": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
"required": [
|
||
"image_url"
|
||
],
|
||
"type": "object"
|
||
},
|
||
"type": {
|
||
"enum": [
|
||
"image"
|
||
],
|
||
"title": "ImageInputItemType",
|
||
"type": "string"
|
||
}
|
||
},
|
||
"required": [
|
||
"data",
|
||
"type"
|
||
],
|
||
"title": "ImageInputItem",
|
||
"type": "object"
|
||
},
|
||
{
|
||
"properties": {
|
||
"data": {
|
||
"properties": {
|
||
"path": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
"required": [
|
||
"path"
|
||
],
|
||
"type": "object"
|
||
},
|
||
"type": {
|
||
"enum": [
|
||
"localImage"
|
||
],
|
||
"title": "LocalImageInputItemType",
|
||
"type": "string"
|
||
}
|
||
},
|
||
"required": [
|
||
"data",
|
||
"type"
|
||
],
|
||
"title": "LocalImageInputItem",
|
||
"type": "object"
|
||
}
|
||
]
|
||
},
|
||
"NetworkAccess": {
|
||
"description": "Represents whether outbound network access is available to the agent.",
|
||
"enum": [
|
||
"restricted",
|
||
"enabled"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"ReasoningEffort": {
|
||
"description": "See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#get-started-with-reasoning",
|
||
"enum": [
|
||
"none",
|
||
"minimal",
|
||
"low",
|
||
"medium",
|
||
"high",
|
||
"xhigh"
|
||
],
|
||
"type": "string"
|
||
},
|
||
"ReasoningSummary": {
|
||
"description": "A summary of the reasoning performed by the model. This can be useful for debugging and understanding the model's reasoning process. See https://platform.openai.com/docs/guides/reasoning?api-mode=responses#reasoning-summaries",
|
||
"oneOf": [
|
||
{
|
||
"enum": [
|
||
"auto",
|
||
"concise",
|
||
"detailed"
|
||
],
|
||
"type": "string"
|
||
},
|
||
{
|
||
"description": "Option to disable reasoning summaries.",
|
||
"enum": [
|
||
"none"
|
||
],
|
||
"type": "string"
|
||
}
|
||
]
|
||
},
|
||
"SandboxPolicy": {
|
||
"description": "Determines execution restrictions for model shell commands.",
|
||
"oneOf": [
|
||
{
|
||
"description": "No restrictions whatsoever. Use with caution.",
|
||
"properties": {
|
||
"type": {
|
||
"enum": [
|
||
"danger-full-access"
|
||
],
|
||
"title": "DangerFullAccessSandboxPolicyType",
|
||
"type": "string"
|
||
}
|
||
},
|
||
"required": [
|
||
"type"
|
||
],
|
||
"title": "DangerFullAccessSandboxPolicy",
|
||
"type": "object"
|
||
},
|
||
{
|
||
"description": "Read-only access to the entire file-system.",
|
||
"properties": {
|
||
"type": {
|
||
"enum": [
|
||
"read-only"
|
||
],
|
||
"title": "ReadOnlySandboxPolicyType",
|
||
"type": "string"
|
||
}
|
||
},
|
||
"required": [
|
||
"type"
|
||
],
|
||
"title": "ReadOnlySandboxPolicy",
|
||
"type": "object"
|
||
},
|
||
{
|
||
"description": "Indicates the process is already in an external sandbox. Allows full disk access while honoring the provided network setting.",
|
||
"properties": {
|
||
"network_access": {
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/NetworkAccess"
|
||
}
|
||
],
|
||
"default": "restricted",
|
||
"description": "Whether the external sandbox permits outbound network traffic."
|
||
},
|
||
"type": {
|
||
"enum": [
|
||
"external-sandbox"
|
||
],
|
||
"title": "ExternalSandboxSandboxPolicyType",
|
||
"type": "string"
|
||
}
|
||
},
|
||
"required": [
|
||
"type"
|
||
],
|
||
"title": "ExternalSandboxSandboxPolicy",
|
||
"type": "object"
|
||
},
|
||
{
|
||
"description": "Same as `ReadOnly` but additionally grants write access to the current working directory (\"workspace\").",
|
||
"properties": {
|
||
"exclude_slash_tmp": {
|
||
"default": false,
|
||
"description": "When set to `true`, will NOT include the `/tmp` among the default writable roots on UNIX. Defaults to `false`.",
|
||
"type": "boolean"
|
||
},
|
||
"exclude_tmpdir_env_var": {
|
||
"default": false,
|
||
"description": "When set to `true`, will NOT include the per-user `TMPDIR` environment variable among the default writable roots. Defaults to `false`.",
|
||
"type": "boolean"
|
||
},
|
||
"network_access": {
|
||
"default": false,
|
||
"description": "When set to `true`, outbound network access is allowed. `false` by default.",
|
||
"type": "boolean"
|
||
},
|
||
"type": {
|
||
"enum": [
|
||
"workspace-write"
|
||
],
|
||
"title": "WorkspaceWriteSandboxPolicyType",
|
||
"type": "string"
|
||
},
|
||
"writable_roots": {
|
||
"description": "Additional folders (beyond cwd and possibly TMPDIR) that should be writable from within the sandbox.",
|
||
"items": {
|
||
"$ref": "#/definitions/AbsolutePathBuf"
|
||
},
|
||
"type": "array"
|
||
}
|
||
},
|
||
"required": [
|
||
"type"
|
||
],
|
||
"title": "WorkspaceWriteSandboxPolicy",
|
||
"type": "object"
|
||
}
|
||
]
|
||
},
|
||
"ThreadId": {
|
||
"type": "string"
|
||
},
|
||
"V1ByteRange": {
|
||
"properties": {
|
||
"end": {
|
||
"description": "End byte offset (exclusive) within the UTF-8 text buffer.",
|
||
"format": "uint",
|
||
"minimum": 0.0,
|
||
"type": "integer"
|
||
},
|
||
"start": {
|
||
"description": "Start byte offset (inclusive) within the UTF-8 text buffer.",
|
||
"format": "uint",
|
||
"minimum": 0.0,
|
||
"type": "integer"
|
||
}
|
||
},
|
||
"required": [
|
||
"end",
|
||
"start"
|
||
],
|
||
"type": "object"
|
||
},
|
||
"V1TextElement": {
|
||
"properties": {
|
||
"byteRange": {
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/definitions/V1ByteRange"
|
||
}
|
||
],
|
||
"description": "Byte range in the parent `text` buffer that this element occupies."
|
||
},
|
||
"placeholder": {
|
||
"description": "Optional human-readable placeholder for the element, displayed in the UI.",
|
||
"type": [
|
||
"string",
|
||
"null"
|
||
]
|
||
}
|
||
},
|
||
"required": [
|
||
"byteRange"
|
||
],
|
||
"type": "object"
|
||
}
|
||
},
|
||
"properties": {
|
||
"approvalPolicy": {
|
||
"$ref": "#/definitions/AskForApproval"
|
||
},
|
||
"conversationId": {
|
||
"$ref": "#/definitions/ThreadId"
|
||
},
|
||
"cwd": {
|
||
"type": "string"
|
||
},
|
||
"effort": {
|
||
"anyOf": [
|
||
{
|
||
"$ref": "#/definitions/ReasoningEffort"
|
||
},
|
||
{
|
||
"type": "null"
|
||
}
|
||
]
|
||
},
|
||
"items": {
|
||
"items": {
|
||
"$ref": "#/definitions/InputItem"
|
||
},
|
||
"type": "array"
|
||
},
|
||
"model": {
|
||
"type": "string"
|
||
},
|
||
"outputSchema": {
|
||
"description": "Optional JSON Schema used to constrain the final assistant message for this turn."
|
||
},
|
||
"sandboxPolicy": {
|
||
"$ref": "#/definitions/SandboxPolicy"
|
||
},
|
||
"summary": {
|
||
"$ref": "#/definitions/ReasoningSummary"
|
||
}
|
||
},
|
||
"required": [
|
||
"approvalPolicy",
|
||
"conversationId",
|
||
"cwd",
|
||
"items",
|
||
"model",
|
||
"sandboxPolicy",
|
||
"summary"
|
||
],
|
||
"title": "SendUserTurnParams",
|
||
"type": "object"
|
||
} |