changedInput schema / additionalProperties
Previous value: -falseNew value: +{}
changedInput schema / properties / app_id / description
Previous value: -"existing app id to update, or null for new app"New value: +"MANDATORY: existing app id to update, or null for new app"
addedInput schema / properties / deletePaths / anyOf
Added value: +[
+ {
+ "items": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+]
changedInput schema / properties / deletePaths / description
Previous value: -"Paths to delete. ONLY for updates (app_id required). Cannot delete package.json or framework entry points."New value: +"Array of relative paths to delete. MUST be a JSON array, even for one path. Example value: [\"src/old-file.ts\"]. If upload_id is provided, do not also send files[] or deletePaths[]; the upload manifest owns all text changes, diffs, and delete operations."
removedInput schema / properties / deletePaths / items
Removed value: -{
- "minLength": 1,
- "type": "string"
-}
removedInput schema / properties / deletePaths / type
Removed value: -"array"
addedInput schema / properties / description / anyOf
Added value: +[
+ {
+ "minLength": 1,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+]
removedInput schema / properties / description / minLength
Removed value: -1
removedInput schema / properties / description / type
Removed value: -"string"
addedInput schema / properties / features
Added value: +{
+ "anyOf": [
+ {
+ "items": {
+ "enum": [
+ "api",
+ "realtime",
+ "auth",
+ "notifications",
+ "invites",
+ "database",
+ "storage",
+ "secrets",
+ "ai.generate",
+ "ai.extract",
+ "ai.ocr",
+ "ai.classify",
+ "ai.scrape",
+ "ai.run",
+ "ai.image",
+ "cron"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "default": [
+ "api",
+ "realtime",
+ "auth",
+ "notifications",
+ "invites",
+ "database",
+ "storage",
+ "secrets",
+ "ai.generate",
+ "ai.extract",
+ "ai.ocr",
+ "ai.classify",
+ "ai.scrape",
+ "ai.run",
+ "ai.image",
+ "cron"
+ ],
+ "description": "SDK features used (from get_appdeploy_sdk_reference). Pass on every deploy so the server applies diffs against the correct feature-composed baseline."
+}
addedInput schema / properties / files / anyOf
Added value: +[
+ {
+ "items": {
+ "additionalProperties": {},
+ "description": "One item inside files[]. Example with content: {\"filename\":\"src/App.tsx\",\"content\":\"...\"}. Example with diffs: {\"filename\":\"src/App.tsx\",\"diffs\":[{\"from\":\"old\",\"to\":\"new\"}]}. Use this shape for inline text edits and diffs, not for copying large existing local file contents into tool params.",
+ "properties": {
+ "content": {
+ "anyOf": [
+ {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "additionalProperties": {},
+ "propertyNames": {
+ "type": "string"
+ },
+ "type": "object"
+ }
+ ],
+ "description": "File contents. Use a string for text files; JSON object is allowed for .json files."
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Text file contents only. Use a string for text files; JSON object is allowed for .json files. Use upload_assets for binary assets/resources, or when direct upload is available and the source of truth already exists as local files or a local project tree."
+ },
+ "diffs": {
+ "anyOf": [
+ {
+ "description": "Non-empty array of diff replacements. Use instead of content.",
+ "items": {
+ "additionalProperties": {},
+ "description": "One diff replacement. Required fields: from, to. Optional field: multiple.",
+ "properties": {
+ "from": {
+ "anyOf": [
+ {
+ "minLength": 1,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Required text to find (exact match, non-empty). Must be unique unless multiple=true."
+ },
+ "multiple": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Optional. Replace all matches (default false). Verify 'from' appears only once; if it appears multiple times and you want to replace all, set multiple=true or the request fails."
+ },
+ "to": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Required replacement text (empty string deletes the match)."
+ }
+ },
+ "type": "object"
+ },
+ "minItems": 1,
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "filename": {
+ "anyOf": [
+ {
+ "description": "full relative path (e.g. 'public/index.html', 'src/main.tsx', 'backend/index.ts')",
+ "minLength": 1,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+]
changedInput schema / properties / files / description
Previous value: -"Files to write. NEW APPS: only custom files + diffs to template files. UPDATES: only changed files using diffs[]. At least one of files[] or deletePaths[] required."New value: +"Array of text file edit objects. MUST be a JSON array, even for one file. Never pass a bare string or a single object. Example value: [{\"filename\":\"src/App.tsx\",\"content\":\"...\"}]. Each item must include filename plus either content or diffs. Use files[] for inline text edits and diffs. If the source of truth already exists as local files or a local project tree, prefer upload_assets instead of copying those file contents into tool params. If upload_id is provided, do not also send files[] or deletePaths[]; the upload manifest owns all text changes, diffs, and delete operations. Use upload_assets for binary assets/resources or other client-supplied file assets."
removedInput schema / properties / files / items
Removed value: -{
- "properties": {
- "content": {
- "description": "Full file contents (string; JSON object allowed for .json files)"
- },
- "diffs": {
- "description": "Array of {from,to,multiple?} replacements (use instead of content)",
- "items": {
- "properties": {
- "from": {
- "description": "Text to find (exact match, non-empty). Must be unique unless multiple=true.",
- "minLength": 1,
- "type": "string"
- },
- "multiple": {
- "description": "Replace all matches (default false). Verify 'from' appears only once; if it appears multiple times and you want to replace all, set multiple=true or the request fails.",
- "type": "boolean"
- },
- "to": {
- "description": "Replacement text (empty string deletes the match)",
- "type": "string"
- }
- },
- "required": [
- "from",
- "to"
- ],
- "type": "object"
- },
- "type": "array"
- },
- "encoding": {
- "description": "'base64' for binary files, otherwise 'utf-8'",
- "enum": [
- "utf-8",
- "base64"
- ],
- "type": "string"
- },
- "file": {
- "description": "alias of filename",
- "minLength": 1,
- "type": "string"
- },
- "filename": {
- "description": "full relative path (e.g. 'public/index.html', 'src/main.tsx', 'backend/index.ts')",
- "minLength": 1,
- "type": "string"
- },
- "mimeType": {
- "description": "Optional MIME type hint (e.g., image/png)",
- "minLength": 1,
- "type": "string"
- },
- "name": {
- "description": "alias of filename",
- "minLength": 1,
- "type": "string"
- },
- "path": {
- "description": "alias of filename",
- "minLength": 1,
- "type": "string"
- }
- },
- "type": "object"
-}
removedInput schema / properties / files / type
Removed value: -"array"
addedInput schema / properties / initiator
Added value: +{
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Optional request initiator. Use 'user' when this call directly follows a user request. Use 'agent' when this call is part of autonomous agent work, such as retrying, fixing, or continuing without a new user request."
+}
addedInput schema / properties / intent / anyOf
Added value: +[
+ {
+ "minLength": 1,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+]
changedInput schema / properties / intent / description
Previous value: -"The intent of this deployment. User-initiated examples: 'initial app deploy', 'bugfix - ui is too noisy'. Agent-initiated examples: 'agent fixing deployment error', 'agent retry after lint failure'"New value: +"MANDATORY: one-line summary of what changed (e.g. 'Add dark mode toggle', 'Fix login redirect bug'). If no specific intent was given, use 'app deploy'."
removedInput schema / properties / intent / minLength
Removed value: -1
removedInput schema / properties / intent / type
Removed value: -"string"
addedInput schema / properties / model / anyOf
Added value: +[
+ {
+ "minLength": 1,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+]
changedInput schema / properties / model / description
Previous value: -"The coding agent model used for this deployment, to the best of your knowledge. Examples: 'codex-5.3', 'chatgpt', 'opus 4.6', 'claude-sonnet-4-5', 'gemini-2.5-pro'"New value: +"MANDATORY: LLM model name generating this deploy (e.g. 'claude-sonnet-4', 'gpt-4o'). If unavailable, use 'chat'."
removedInput schema / properties / model / minLength
Removed value: -1
removedInput schema / properties / model / type
Removed value: -"string"
addedInput schema / properties / resource_requirements
Added value: +{
+ "anyOf": [
+ {
+ "items": {
+ "properties": {
+ "accept": {
+ "anyOf": [
+ {
+ "minLength": 1,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Optional file picker accept filter (for example 'image/*' or 'application/pdf')."
+ },
+ "name": {
+ "description": "User-facing label for this requested resource (for widget slot UI).",
+ "minLength": 1,
+ "type": "string"
+ },
+ "required": {
+ "anyOf": [
+ {
+ "type": "boolean"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Whether this slot is required before upload. Defaults to true."
+ },
+ "target_path": {
+ "description": "App-relative placeholder path to reference in code. Use deterministic paths under 'public/resources/...'.",
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "target_path"
+ ],
+ "type": "object"
+ },
+ "maxItems": 20,
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Optional widget upload slot definitions for ChatGPT web/Claude web. Use this when users will provide large resources (images/PDF/media/fonts) after code generation. Code should reference these target_path placeholders so uploaded files resolve without further code edits."
+}
addedInput schema / properties / secret_entry_ids
Added value: +{
+ "anyOf": [
+ {
+ "items": {
+ "description": "Opaque one-time secret entry id.",
+ "minLength": 1,
+ "type": "string"
+ },
+ "type": "array"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Optional one-time secret entry ids to bind during a new-app deploy. Allowed only when app_id is omitted. For existing apps, use set_app_secrets instead."
+}
addedInput schema / properties / type
Added value: +{
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Optional deploy change type, for example 'fix', 'feature', 'refactor', 'performance', 'test', 'docs', 'chore', or 'style'."
+}
addedInput schema / properties / upload_id
Added value: +{
+ "anyOf": [
+ {
+ "minLength": 1,
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Opaque upload ID from upload_assets. When provided, omit files[] and deletePaths[]; the upload manifest carries all text changes, diffs, and delete operations."
+}
changedInput schema / required
Previous value: -[
- "app_id",
- "app_type",
- "app_name",
- "model",
- "intent"
-]New value: +[
+ "app_type",
+ "app_name"
+]