Skip to main content
Glama
iPocket-APP

PocketDraft MCP

Official
by iPocket-APP

PocketDraft MCP

Control the PocketDraft browser editor from an MCP agent. Edits appear in the paired tab, remain editable by hand, and support Undo. No Chromium installation, native rendering library, browser automation or hosted MCP service is required.

Install and connect

Requires Node.js 22 or later and an MCP client that supports stdio. Install the versioned package from GitHub Releases in a directory of your choice:

mkdir pocketdraft-agent
cd pocketdraft-agent
npm install https://github.com/iPocket-APP/pocketdraft-mcp/releases/download/v4.1.0/pocketdraft-mcp-4.1.0.tgz

Or build directly from source:

git clone https://github.com/iPocket-APP/pocketdraft-mcp.git
cd pocketdraft-mcp
npm ci
npm run check
npm pack

npm ci runs the prepare script to build dist/index.mjs. The generated tarball can be installed elsewhere with npm install /absolute/path/pocketdraft-mcp-4.1.0.tgz. This release is distributed through GitHub; it is not an npm registry publication.

Configure your MCP client using absolute paths:

{
  "mcpServers": {
    "pocketdraft": {
      "command": "node",
      "args": [
        "/absolute/install/directory/node_modules/pocketdraft-mcp/dist/index.mjs",
        "--workspace", "/absolute/path/to/screenshots-and-exports"
      ]
    }
  }
}

The workspace directory must exist. Ask the agent to call pocketdraft_connection. Open https://tools.ipocket.xyz/zh/tools/pocket-draft (or the English editor), click Connect MCP / 连接 MCP, and paste the complete pairing code. If your browser requests local network access for this connection, allow it. Keep the page open. Use the same browser profile as your existing projects.

The code is scoped to one MCP process. One process pairs with one tab at a time; disconnect before pairing a different tab. Reloading or closing the page ends the connection. Reconnect explicitly; pairing credentials are not persisted. Multiple MCP processes use separate random loopback ports. Use --port only if a fixed port is necessary.

For a development editor, add --origin http://localhost:3010. Only that exact origin will be accepted. The default is https://tools.ipocket.xyz. Browsers or enterprise policies that block loopback access cannot use the bridge; run the local editor if permitted, rather than weakening browser security settings.

Related MCP server: AgentMesh MCP

Version compatibility

Version 4.1 uses bridge protocol 3 and requires the app-store-assets capability. Update the editor and this package together. Older editors/packages are rejected during pairing, before any project changes. Document/package formats remain unchanged. For local development use the matching editor checkout with --origin http://localhost:3010. The public website is deployed separately; publishing this repository or installing this package does not update the website. If pairing reports a version mismatch, update both the editor and package to a version with the app-store-assets capability.

Tools

  • pocketdraft_connection: connection state, pairing code, workspace, capabilities and recent operation IDs.

  • pocketdraft_list_catalog, pocketdraft_get_catalog: templates, devices and styles.

  • pocketdraft_inspect_project: latest project revision and history, filtered ordered layers with complete styles and browser-measured pixel geometry; optional full project. Existing image bytes do not cross the bridge, so inspecting/editing large browser projects is independent of package image limits.

  • pocketdraft_batch_mutation: 35 typed commands, applied as one browser edit. Required projectId and revision come from inspect. A first projects.create or projects.import creates a new project instead of replacing the current one.

  • pocketdraft_attach_file: local screenshot/image/background attachment, scoped to the workspace.

  • pocketdraft_preview: browser-rendered preview, optionally cropped to a logical-pixel region and enlarged with scale, with showBounds overlays; returned as an MCP image.

  • pocketdraft_export: one canvas as PNG/JPEG, optional panorama slices, or the whole editable .pocketdraft package. Use canvasIds for a selected set, allCanvases: true for a complete set, or canvasId for one canvas. The manifest maps every path to its canvas, slice and pixel dimensions. Packages always contain the full project. JPEG quality and PNG transparent backgrounds are configurable. Files are written to a new exports/<id>/ directory, never overwritten.

  • pocketdraft_validate_project: missing assets, out-of-canvas bounds, invalid crop and text-fit checks. Overlap alone is allowed. Optional layoutSync preflights an explicit synchronization without modifying the project.

  • pocketdraft_history: guarded Undo/Redo. Pass action, the current project ID/revision, and the exact entryId from inspect history. Saves successfully before moving history.

  • pocketdraft_operation_status: lookup an operation ID or list recent operations. A completed receipt can resolve a write whose final reply crossed a cancellation. Receipts live in process memory for up to ten minutes, bounded to 100 operations. Restarting the process loses them.

Command schemas and examples are exposed through pocketdraft://schema/v1/commands/<command> resources. Finish active text editing before asking the agent to change the project. After a revision conflict, inspect again and reconsider the requested edit. After a timeout or cancellation, inspect the operation status and project before retrying: a transaction may already have committed. Cancellation removes queued work, aborts requests/preparation/storage where possible and never blindly retries a write. Disconnection never triggers an automatic retry.

Precision editing and migration from v3

Version 4 rejects wrong-kind properties, conflicting flat/nested content, unknown device frames, out-of-range numbers, locked mutations and incompatible requested sync targets. These previously could appear successful without fulfilling the request. Tool errors include command index, field paths, object ID where available, and a correction hint. Read-only catalog resources and document/package formats keep their existing IDs.

inspect_project supports canvasIds, layerIds, kind, name, text, and exact. Layer index increases from background to front. Geometry contains center, unrotated frame, rotated bounds, degrees and text layout; device crop offsets are also reported in logical pixels. Search only finds candidates: subsequent writes use IDs or batch-local aliases. Assets are listed once per reference.

All new placement/dimension/gap/crop offset inputs use canvas logical pixels; rotation commands use degrees. Legacy layers.update.transform retains normalized centers, unitless scale and radians. Legacy screenshotOffset retains screen-relative fractions. Text style values (fontSize, lineSpacing, kerning, boxWidth and effect padding) are unscaled local pixels. layers.resize scales the entire layer with its aspect ratio; texts.reflow changes wrapping without changing glyph size. texts.fit fits the unrotated box (including pill padding) with real browser fonts and preserves the copy. Align/distribute use rotated bounds including pills, excluding shadows.

Text creation and updates accept complete stroke, shadow, pill objects and spacing/width. Use null to clear an effect or explicit box width. layers.duplicate copies within/across canvases and returns a copy map; canvases.duplicate takes the source ID, and canvases.reorder takes every canvas ID exactly once. assets.reuse attaches an existing project asset by reference. Screenshot replacement preserves device position/size/orientation and resets crop; use cropPolicy: "preserve" explicitly to retain a valid crop. devices.clearScreenshot also resets crop.

Locked layers require a separate preceding unlock before editing content, moving/resizing, deleting or reordering. Visibility/lock-only updates remain allowed. layout.sync requires target IDs, supports explicit layer mapping and selective scope/fields, and fails the entire batch on any incompatible requested target. Its foreground style sync preserves target copy and assets; size/background follow their scope switches.

A composable batch (substitute the project ID/revision returned by inspect):

{
  "projectId": "CURRENT_PROJECT_ID",
  "revision": "CURRENT_REVISION",
  "dryRun": true,
  "preview": { "showBounds": true },
  "commands": [
    { "command": "layers.addText", "as": "title", "input": { "string": "精细排版 PocketDraft", "fontName": "dm-sans", "fontSize": 60 } },
    { "command": "texts.fit", "input": { "layerId": { "ref": "title" }, "width": 600, "height": 160, "minFontSize": 24, "maxFontSize": 60, "maxLines": 2 } },
    { "command": "layers.move", "input": { "layerId": { "ref": "title" }, "dx": 0, "dy": -12 } }
  ]
}

dryRun uses the same validation, browser geometry, image collision checks and optional rendering without writing IndexedDB or history. Trial IDs are temporary. Re-run against the still-current revision with dryRun: false to commit. Each step reports created IDs, copy maps, affected objects and changed fields. Setting identical values returns changed: false; an entirely unchanged batch does not commit. The final committed summary/revision reflects the browser's saved state.

Architecture and data

Agent → local stdio MCP → authenticated loopback HTTP bridge → paired web editor.

The browser is the project authority and retains normal IndexedDB auto-save. Routine snapshots transfer project structure and an image manifest. Edits send only newly attached/imported images. The browser validates and commits project, new assets and active selection in one IndexedDB transaction, then updates the visible editor and Undo history. Existing assets remain in the browser. A bounded image cache reuses renders within a paired session. Routine MCP responses contain summaries and structured results. Requested previews, text, and project details are returned to the agent and are subject to its provider's data handling. Local MCP does not upload projects to a hosted PocketDraft MCP service. Explicit remote asset URLs still require network access and retain the existing URL/image validation.

The website continues to provide editor code, fonts and frames, and performs image rendering. This is not a fully offline renderer. The installed package is independently runnable, but editing and rendering require a paired browser tab. Web and MCP versions must have compatible document schemas; an unsupported version fails validation.

Website relationship

This repository contains the local MCP server and the shared PocketDraft protocol/domain modules. It does not deploy an MCP endpoint or the editor website. Edits and rendered previews appear in the explicitly paired browser tab. The website and this package must be released with compatible bridge versions.

Limits and diagnostics

New images support PNG/JPEG/GIF/WebP, up to 8 MiB each and 32 MiB per call. Editable packages use the same limits as import; export fails explicitly on missing/invalid/oversized assets. These package limits do not prevent inspecting or making text/layout edits to larger existing browser projects. Exports are published as complete directories; failed partial directories are removed.

The bridge binds only to 127.0.0.1 and requires the configured Origin, a random bearer token and session ID. File reads resolve workspace boundaries, reject directories and enforce bounded reads. Windows path containment is covered by tests; native Windows browser acceptance still needs platform testing.

Set POCKETDRAFT_MCP_DEBUG=1 in your MCP client environment for JSON diagnostics on stderr (tool, duration and error code only). stdout remains MCP protocol output. The editor queue is bounded; local catalog/status reads bypass it. Late operation replies do not disconnect the session. Reloading/closing the editor still requires explicit re-pairing.

App Store creative assets

Use pocketdraft_list_catalog with entity: "aspects" to discover appStoreHeader, appStoreSearch, appStoreUniversal, appStoreEventCard, and appStoreEventDetails. Each entry includes the allowed dimensions, formats, opacity requirements, official artwork safe area when available, and Apple source links. Canvas settings accept edges from 64 to 5244 pixels. Existing larger panorama projects can still be read.

Create with projects.create and an asset aspect, or change an existing canvas with canvases.setAspect. templates.apply supports asset-blank-<aspect> and asset-hero-<aspect> (header/search/universal). templates.applySet with asset-event-pair appends two matching image-only event canvases; it never overwrites existing canvases and needs two available slots. Hero and event-pair templates reuse the active canvas's image when available; blank templates clear the current canvas.

Header (3840×1646) and universal (5244×2950) exports require PNG at their exact size. Search (3:2), event card (16:9), and event detail (9:16) support PNG/JPEG within the catalog's resolution range; default canvases offer scales 0.5 and 1. Header/search/universal PNGs are encoded as RGB with no alpha channel. Full-image export rejects transparency for these placements, as well as cropped regions, debug bounds and panorama slices. Preview supports cropped regions without applying upload constraints. pocketdraft_validate_project reports dimensions as errors and text/device safe-area overflow as warnings. Successful pocketdraft_export results also include a warnings array for the selected canvases; composition warnings do not block file creation.

The browser and MCP use original images for final export; previews use bounded bitmaps. Files above the existing 32 MiB bridge export limit require the browser's local download. Fixed-size artwork is never silently downscaled. Project schema 2 and package version 1 remain unchanged. No App Store Connect upload or publication is performed.

Development and release checks

npm ci
npm run check
npm run verify:package

The source is self-contained: no checkout of ipocket-tools, pnpm workspace, Next.js, Chromium, fonts or native Canvas installation is needed to build the server. The checked-in npm lockfile pins dependencies. src/ contains the Node stdio server, authenticated loopback bridge and workspace file handling. lib/pocket-draft/ contains the shared protocol, catalog, document/mutation logic and browser helpers used by the compatibility regression tests. Runtime browser rendering still happens in the paired website, not this Node process.

Tests cover the real stdio subprocess and simulated browser replies, bridge authentication, cancellation, queue limits, workspace containment, strict mutations, batch references, geometry operations, history and IndexedDB failure handling. They do not replace visual acceptance against the matching live editor. verify:package builds and packs an allowlisted tarball, installs it with production dependencies in a temporary directory outside the checkout, and checks MCP initialization, tool discovery, catalog access and disconnected-editor errors over actual stdio. GitHub Actions runs both checks for pushes and pull requests.

Protocol/domain changes should be coordinated with the editor. Bump the shared LOCAL_MCP_VERSION and package.json together; increase the bridge protocol when compatibility changes. Do not add browser fallbacks that silently approximate fonts or cropping in Node.

.gitignore excludes dependencies, build output, local credentials, editor metadata, workspace assets, .pocketdraft projects, logs, tarballs and exports. The npm files allowlist ships only the bundled executable, README and license notices. Packaged releases are attached to GitHub Releases instead of committed to source control.

Third-party notices

See THIRD_PARTY_NOTICES.md for the adapted Goldie layouts and separately installed dependencies.

License

The original PocketDraft code currently reserves all rights; no open-source license is granted. See LICENSE. Third-party portions retain their own notices and terms.

Available Tools

11 tools
pocketdraft_attach_fileC
Destructive

Attach a local screenshot/image/background within --workspace. Changes are committed to the paired editor.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYes
targetYes
layerIdNo
canvasIdNo
revisionYes
projectIdYes
cropPolicyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds one useful behavioral fact beyond them – that changes are committed to the paired editor – but never says what the destructive attach overwrites (existing layer/canvas content, interaction with cropPolicy) or what auth/state is required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and target, with no filler. The odd '--workspace' fragment is the only structural blemish.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, but for a 7-parameter destructive mutation with 0% schema coverage the description is far too thin. It omits what cropPolicy reset/preserve does, what layerId/canvasId select, and what revision's 64-hex hash is for.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 7 parameters, and the description only echoes the three 'target' enum values while leaving file, projectId, revision, layerId, canvasId and cropPolicy entirely unexplained in both schema and prose. The stray '--workspace' token does not map to any documented parameter, so it cannot compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Attach') and resource ('local screenshot/image/background'), and names the destination ('within --workspace ... paired editor'). It is clearly distinguishable from siblings like pocketdraft_batch_mutation or pocketdraft_export, though it never explicitly contrasts itself with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus alternatives (e.g. batch_mutation, preview), nor any prerequisites such as whether the project must be open in the paired editor first. Usage is only loosely implied by 'within --workspace'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pocketdraft_batch_mutationA
Destructive

Apply 1–50 commands as one durable browser edit and one Undo step. Create/import must be first. Only new images cross the bridge. Pixel geometry runs in the browser. dryRun validates without saving; optional preview renders the candidate. Alias creations with as and reference them using {ref: alias}. Read command resources first.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNo
previewNo
commandsYes
revisionYes
projectIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructive=true, idempotent=false and openWorld=true, so the bar is lower, yet the description adds non-obvious traits: the whole batch collapses into a single Undo step, only NEW images cross the bridge, pixel geometry executes in the browser, and dryRun does not persist. The single-Undo and create-import-ordering facts are genuinely beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core behavior, then six tight clauses that each encode a distinct rule (scope, ordering, image bridging, browser-side geometry, dryRun/preview, aliasing). No filler or repetition; size is proportionate to a 50-command batch tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the description covers ordering, atomic undo, dryRun validation, aliasing and the browser-side execution model. It leaves the revision/projectId contract and per-command payload variety unaddressed, which are the remaining gaps for a tool this complex.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden and it delivers the highest-value semantics: how to alias a creation with 'as' and reference it via '{ref: alias}', plus the meaning of dryRun and preview. projectId and revision are never explained, and the per-command input shapes (49 variants) are left entirely to the schema, keeping it below a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Apply 1–50 commands as one durable browser edit') with an explicit scope cap and atomicity claim, which is enough to identify it as the batch-mutation entry point. It does not name any sibling (e.g. pocketdraft_preview) to sharpen the boundary, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real usage rules: 'Read command resources first', 'Create/import must be first', and 'dryRun validates without saving' as a pre-flight mode. It does not say when to prefer this over pocketdraft_preview or the other mutation-adjacent siblings, so it lacks the explicit alternatives that would earn a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pocketdraft_connectionA
Read-onlyIdempotent

Get connection state, recent operation IDs and pairing code. Paste the code only into the PocketDraft editor.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds that the response includes a pairing code and warns to paste it only into the editor, which is useful handling context, but it says nothing about staleness of the connection state or whether the code expires.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with what is returned followed by the one handling constraint. No filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description need not enumerate return fields, and it correctly names the notable ones. For a no-argument read tool this is close to complete; only the meaning of 'recent' and pairing-code lifetime are left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate beyond what the empty schema already shows. Baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource (get connection state) and enumerates the payload (recent operation IDs, pairing code). It is distinguishable from catalog/export siblings, though it does not explicitly contrast itself with the closest sibling, pocketdraft_operation_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent must infer that this is the tool to call to check whether PocketDraft is connected or to obtain a pairing code. No explicit when-to-use or when-not-to-use is given, and no sibling alternative is named despite operation_status covering a related area.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pocketdraft_exportB

Export PNG/JPEG or an editable project package into a new workspace/exports directory. Missing images fail. Use allCanvases for a set; package limits remain 8 MiB/image, 32 MiB total.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoimage
scaleNo
formatNopng
slicesNo
qualityNo
canvasIdNo
revisionNo
canvasIdsNo
projectIdYes
allCanvasesNo
transparentBackgroundNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a non-read-only, non-idempotent, non-destructive write; the description adds substantive context beyond that: exports land in a workspace/exports directory, missing images cause failure, and package output is capped at 8 MiB/image and 32 MiB total. Those limits and failure semantics are not derivable from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the action and destination, then failure behavior, then the allCanvases hint and limits. No filler, though the terseness works against a schema this large.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be described, but for an 11-parameter export tool with 0% schema coverage the description leaves most knobs (kind, slices, quality, canvas scope selection) unexplained. It covers failure and size limits but not enough to invoke the tool confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 11 parameters, so the description carries the full burden, yet it only touches allCanvases and the png/jpeg format choice. Nothing is said about kind, scale, slices, quality, canvasId vs canvasIds, revision, transparentBackground, or size/total-limit interactions with those flags.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Export) plus the resources produced (PNG/JPEG image or editable project package) and the destination (a new workspace/exports directory). It is easy to tell apart from preview or inspect_project by the file-producing outcome, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Offers one routing hint — 'Use allCanvases for a set' — and notes the failure mode for missing images, which implies when the call will not succeed. There is still no explicit when-to-use/when-not guidance relative to pocketdraft_preview or pocketdraft_validate_project.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pocketdraft_get_catalogB
Read-onlyIdempotent

Get one catalog item without waiting for browser work.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
entityYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed-world scope, so safety is covered. The description adds one behavioral trait beyond them — that the call avoids browser rendering latency — but leaves ambiguous whether the returned item could be stale or whether it errors when the item is absent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence, front-loaded with the verb and resource, with no filler. It is arguably under-specified rather than verbose, but nothing in it is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. What is missing is the usage context an agent needs to pick this over its siblings and any note on error behavior when the id is unknown.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining the two required parameters and it explains neither. The 'entity' enum of seven catalog types and the 'id' string are left entirely to the raw schema, with no added meaning about valid id formats or entity semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (one catalog item), and the singular framing implicitly distinguishes it from the sibling pocketdraft_list_catalog. The trailing phrase 'without waiting for browser work' is cryptic but does not obscure what the tool fetches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this versus pocketdraft_list_catalog or pocketdraft_operation_status. The 'without waiting for browser work' clause hints at a fast/cached path but never states the condition that selects this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pocketdraft_historyA
Destructive

Undo/redo exactly the history entry returned by inspect. Requires its entryId and current revision; saves atomically before moving history.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
entryIdYes
revisionYes
projectIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=false and openWorld, so the safety profile is covered. The description does add one valuable non-annotation trait ('saves atomically before moving history') plus the revision-as-concurrency-guard precondition, but it omits what the destructive undo does to the redo stack or how a stale revision is rejected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler; the operation and its source entry are front-loaded, followed immediately by the required inputs and the atomic-save behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the atomic-save and precondition notes help. However, for a destructive, non-idempotent mutation with four required 0%-documented parameters, it leaves gaps around stale-revision errors, projectId's role, and the effects of undo on subsequent history.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explains entryId provenance (returned by inspect) and that revision must be current, which is real added meaning, but it says nothing about projectId and only implies the action enum. Two of four required parameters remain undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (undo/redo) and resource (history entry), and ties it to the inspect tool that produces the target entry, which separates it from list/inspect siblings. It falls short of 5 only because the referenced sibling is named generically as 'inspect' while the actual sibling is pocketdraft_inspect_project.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition for use: the entry must be exactly the one returned by inspect, and it must be driven by that entry's entryId plus the current revision. No explicit when-not-to-use or exclusions (e.g. stale revision behavior) are stated, so it stops at 4.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pocketdraft_inspect_projectB
Read-onlyIdempotent

Read current revision, history entries and ordered layers with full styles and browser-measured pixel bounds. Filter by canvasIds/layerIds/kind/name/text; names/text only find candidates. No image bytes. Full project optional.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
nameNo
textNo
exactNo
geometryNo
layerIdsNo
canvasIdsNo
includeProjectNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world, so the safety profile is covered structurally. The description does add real behavioral context: 'No image bytes' (a return-content limit an agent would otherwise assume wrongly), 'browser-measured pixel bounds' (provenance of the geometry), and that name/text matches are candidates rather than definitive hits. It says nothing about pagination, result size limits, or what happens with a large project.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact clauses, front-loaded with what the tool returns, then filters, then the two critical caveats. Nearly every clause carries information. The telegraphic style is efficient but slightly at the cost of readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and annotations cover the read-only safety profile. The description supplies the filter surface, the no-image-bytes constraint, and the optional full-project toggle. The only real gap is undocumented `exact` and `geometry` parameters, which is minor against an otherwise complete picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load. It names most filter parameters (canvasIds, layerIds, kind, name, text) and implies includeProject via 'Full project optional', but never explains `exact` or `geometry`, and the 'candidates' note hints at the exact-match semantics without stating it. Useful but incomplete for an 8-parameter tool with no schema docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb ('Read') and enumerates exactly what comes back: current revision, history entries, ordered layers with full styles and browser-measured pixel bounds. That is specific and distinguishable from a plain metadata read. It stops short of naming how it differs from siblings like pocketdraft_history or pocketdraft_preview, so it is clear but not sibling-differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use or when-not-to-use guidance and no alternative tool is named, even though pocketdraft_history and pocketdraft_preview overlap on similar data. The one caveat ('names/text only find candidates') is a hint about filter behavior rather than routing guidance. Usage is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pocketdraft_list_catalogC
Read-onlyIdempotent

List templates, devices, frames, fonts, aspects, themes or gradients.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
entityYes
offsetNo
platformNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint false, so the safety profile is covered. The description adds no behavioral context such as pagination, filtering, or whether the list is exhaustive; it simply restates entity types. Not a contradiction, but little added value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with no filler. It is efficient, though arguably too terse for a five-parameter tool and offers no structural grouping of filters versus pagination.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need not be explained, and annotations cover safety. However, with five input parameters and 0% schema descriptions, the description leaves critical input semantics and sibling selection unresolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate. It names the entity enum values but gives no meaning for query, limit, offset, or platform, leaving four of five parameters undocumented in either schema or description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb 'List' and enumerates the catalog entity types, so an agent can see it is a catalog-listing tool. It does not differentiate itself from sibling pocketdraft_get_catalog or explain scope, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance or alternatives are provided. The sentence merely describes output contents; it does not say when to call this versus get_catalog or other siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pocketdraft_operation_statusA
Read-onlyIdempotent

Read a recent browser operation receipt after a timeout/cancellation. No automatic retry. Receipts are bounded to 100 operations / ten minutes while the process runs.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationIdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false. The description adds two meaningful behavioral facts beyond those: receipts are bounded to 100 operations / ten minutes while the process runs, and there is no automatic retry. That is useful availability and retry-policy context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short clauses, front-loaded with the core action and timing context. Nothing repeats the title or annotations, and every sentence adds operational meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations already cover the safety profile. The description covers purpose, timing, retention bounds, and retry policy; the one remaining gap is the optional operationId semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single operationId parameter. The description never names operationId, explains whether it is optional, or states what happens when it is omitted. It fails to compensate for the undocumented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Read') and resource ('browser operation receipt'), scoped to the after-timeout/cancellation context. It distinguishes itself from siblings like pocketdraft_history by focusing on operation receipts, though it does not explicitly name a sibling alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the usage context: after a timeout or cancellation. The 'No automatic retry' line adds a behavioral constraint on when not to retry, but no alternative tool is named, so it falls short of a full when/when-not/alternatives statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pocketdraft_previewB
Read-onlyIdempotent

Render the paired canvas, optionally a region in logical pixels at a chosen scale and geometric bounds overlay. Returns an MCP image and dimensions.

ParametersJSON Schema
NameRequiredDescriptionDefault
scaleNo
regionNo
canvasIdNo
revisionNo
projectIdYes
showBoundsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful non-annotation context by stating the return type ('an MCP image and dimensions') and the fact that scaling and bounds overlay are controlled by the caller. It does not mention whether rendering is expensive, cached, or subject to a size limit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tightly packed sentence with no filler; the core action leads. The optional clauses stack awkwardly ('optionally a region in logical pixels at a chosen scale and geometric bounds overlay'), which slightly obscures which parts are independent options.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, and the description still summarizes them. However, for a six-parameter tool with a nested region object and zero schema coverage, an agent still lacks guidance on canvasId vs projectId, on the revision hash, and on when to prefer this over pocketdraft_export.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden. It does explain scale, region ('logical pixels') and showBounds ('geometric bounds overlay'), but says nothing about canvasId, revision, or projectId, leaving half of the six parameters undocumented anywhere. Partial compensation, hence a middle score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Render) and resource (the paired canvas) and notes the optional narrowing to a region with scale and bounds overlay. It is clear what the tool produces, though it never names a sibling (e.g. pocketdraft_export) to disambiguate the rendering-vs-export boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to call this rather than pocketdraft_export, pocketdraft_inspect_project, or pocketdraft_get_catalog, nor any precondition (does the project need to be validated first? does a revision need to exist?). The word 'optionally' signals degrees of usage but gives no criteria for choosing them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

pocketdraft_validate_projectB
Read-onlyIdempotent

Check missing assets, bounds, crop and text layout with browser fonts. Overlaps are allowed. Optionally preflight an explicit layout.sync without changing the project.

ParametersJSON Schema
NameRequiredDescriptionDefault
revisionNo
projectIdYes
layoutSyncNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is carried for free. The description adds real behavioral content beyond that: the validation rules applied (missing assets, bounds, crop, browser-font text layout), the explicit exception that overlaps are allowed rather than errors, and the dry-run mode for layout.sync. Only the response payload shape and any error/threshold behavior are left unstated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with what is checked before the optional mode is mentioned; no filler. The only blemish is the unexplained dotted token 'layout.sync', which is concise but slightly opaque to an agent that has not seen that vocabulary elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values needn't be documented, and the mandatory path (projectId only) is adequately covered by the validation-rule sentence. The gap is the optional layoutSync preflight: a deeply nested object with zero parameter documentation and only a one-clause mention in prose, which is thin for a tool whose main differentiator is that mode.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description shoulders the full burden, yet it only gestures at layout.sync as a named concept without explaining projectId, revision, or any of layoutSync's nested structure (targetCanvasIds, scope, fields, mapping, locale). Given the single optional parameter is a deep nested object, this leaves a calling agent with no semantic guidance for the most complex part of the contract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete verb (Check) and enumerates the exact resources validated: missing assets, bounds, crop, and text layout with browser fonts. An agent knows precisely what the tool returns information about. However, it never distinguishes itself from the similarly-named sibling pocketdraft_inspect_project, so the boundary between 'validate' and 'inspect' is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second half of the description does imply a usage mode: optionally preflight a layout.sync without mutating the project, i.e. dry-run semantics. But there is no explicit when-to-use or when-not-to-use guidance, and no sibling alternatives (inspect_project, preview, export) are named. This is implied usage rather than stated guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv4.1.0
    • Changedpocketdraft_batch_mutation1 field changed
      • changedInput schema / properties / commands / items / oneOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "projects.create",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "aspect": {
        -            "enum": [
        -              "square",
        -              "portrait45",
        -              "portrait34",
        -              "portrait23",
        -              "story916",
        -              "landscape43",
        -              "landscape32",
        -              "landscape169",
        -              "appStore69",
        -              "appStore65",
        -              "macAppStore",
        -              "custom"
        -            ],
        -            "type": "string"
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "name": {
        -            "maxLength": 1000,
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "projects.rename",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "name": {
        -            "maxLength": 1000,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "name"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "projects.import",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "package": {
        -            "additionalProperties": {},
        -            "propertyNames": {
        -              "type": "string"
        -            },
        -            "type": "object"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "canvases.add",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "duplicate": {
        -            "type": "boolean"
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "name": {
        -            "maxLength": 1000,
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "canvases.delete",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "canvasId"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "canvases.rename",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "name": {
        -            "maxLength": 1000,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "canvasId",
        -          "name"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "canvases.switch",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "canvasId"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "canvases.setAspect",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "aspect": {
        -            "enum": [
        -              "square",
        -              "portrait45",
        -              "portrait34",
        -              "portrait23",
        -              "story916",
        -              "landscape43",
        -              "landscape32",
        -              "landscape169",
        -              "appStore69",
        -              "appStore65",
        -              "macAppStore",
        -              "custom"
        -            ],
        -            "type": "string"
        -          },
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "height": {
        -            "maximum": 4096,
        -            "minimum": 64,
        -            "type": "integer"
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "width": {
        -            "maximum": 4096,
        -            "minimum": 64,
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "aspect"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "templates.apply",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "display": {
        -            "enum": [
        -              "65",
        -              "69"
        -            ],
        -            "type": "string"
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "templateId": {
        -            "maxLength": 256,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "themeId": {
        -            "maxLength": 256,
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "templateId"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "templates.applySet",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "display": {
        -            "enum": [
        -              "65",
        -              "69"
        -            ],
        -            "type": "string"
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "templateId": {
        -            "maxLength": 256,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "themeId": {
        -            "maxLength": 256,
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "templateId"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.addDevice",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "deviceId": {
        -            "maxLength": 256,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "frameId": {
        -            "maxLength": 256,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "name": {
        -            "maxLength": 1000,
        -            "type": "string"
        -          },
        -          "orientation": {
        -            "enum": [
        -              "portrait",
        -              "landscape"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "transform": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "center": {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "x": {
        -                    "type": "number"
        -                  },
        -                  "y": {
        -                    "type": "number"
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              "rotation": {
        -                "type": "number"
        -              },
        -              "scale": {
        -                "maximum": 8,
        -                "minimum": 0.1,
        -                "type": "number"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "url": {
        -            "maxLength": 12582912,
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.addText",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "alignment": {
        -            "enum": [
        -              "leading",
        -              "center",
        -              "trailing"
        -            ],
        -            "type": "string"
        -          },
        -          "boxWidth": {
        -            "anyOf": [
        -              {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          },
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "color": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "a": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "b": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "g": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "r": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  }
        -                },
        -                "required": [
        -                  "r",
        -                  "g",
        -                  "b",
        -                  "a"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        -                "type": "string"
        -              }
        -            ]
        -          },
        -          "fontName": {
        -            "maxLength": 1000,
        -            "type": "string"
        -          },
        -          "fontSize": {
        -            "maximum": 8192,
        -            "minimum": 8,
        -            "type": "number"
        -          },
        -          "kerning": {
        -            "type": "number"
        -          },
        -          "lineSpacing": {
        -            "type": "number"
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "name": {
        -            "maxLength": 1000,
        -            "type": "string"
        -          },
        -          "pill": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "color": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "a": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "b": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "g": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "r": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          }
        -                        },
        -                        "required": [
        -                          "r",
        -                          "g",
        -                          "b",
        -                          "a"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      {
        -                        "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        -                        "type": "string"
        -                      }
        -                    ]
        -                  },
        -                  "cornerRadius": {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "paddingX": {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "paddingY": {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  }
        -                },
        -                "required": [
        -                  "color",
        -                  "paddingX",
        -                  "paddingY",
        -                  "cornerRadius"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "shadow": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "color": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "a": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "b": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "g": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "r": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          }
        -                        },
        -                        "required": [
        -                          "r",
        -                          "g",
        -                          "b",
        -                          "a"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      {
        -                        "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        -                        "type": "string"
        -                      }
        -                    ]
        -                  },
        -                  "offsetX": {
        -                    "type": "number"
        -                  },
        -                  "offsetY": {
        -                    "type": "number"
        -                  },
        -                  "radius": {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  }
        -                },
        -                "required": [
        -                  "color",
        -                  "radius",
        -                  "offsetX",
        -                  "offsetY"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          },
        -          "string": {
        -            "maxLength": 100000,
        -            "type": "string"
        -          },
        -          "stroke": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "color": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "a": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "b": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "g": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "r": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          }
        -                        },
        -                        "required": [
        -                          "r",
        -                          "g",
        -                          "b",
        -                          "a"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      {
        -                        "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        -                        "type": "string"
        -                      }
        -                    ]
        -                  },
        -                  "width": {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  }
        -                },
        -                "required": [
        -                  "color",
        -                  "width"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          },
        -          "transform": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "center": {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "x": {
        -                    "type": "number"
        -                  },
        -                  "y": {
        -                    "type": "number"
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              "rotation": {
        -                "type": "number"
        -              },
        -              "scale": {
        -                "maximum": 8,
        -                "minimum": 0.1,
        -                "type": "number"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "weight": {
        -            "enum": [
        -              "regular",
        -              "medium",
        -              "semibold",
        -              "bold"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.addImage",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "cornerRadius": {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "name": {
        -            "maxLength": 1000,
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "transform": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "center": {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "x": {
        -                    "type": "number"
        -                  },
        -                  "y": {
        -                    "type": "number"
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              "rotation": {
        -                "type": "number"
        -              },
        -              "scale": {
        -                "maximum": 8,
        -                "minimum": 0.1,
        -                "type": "number"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "url": {
        -            "maxLength": 12582912,
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "url"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.update",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "alignment": {
        -            "enum": [
        -              "leading",
        -              "center",
        -              "trailing"
        -            ],
        -            "type": "string"
        -          },
        -          "aspectRatio": {
        -            "exclusiveMinimum": 0,
        -            "type": "number"
        -          },
        -          "boxWidth": {
        -            "anyOf": [
        -              {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          },
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "color": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "a": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "b": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "g": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "r": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  }
        -                },
        -                "required": [
        -                  "r",
        -                  "g",
        -                  "b",
        -                  "a"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        -                "type": "string"
        -              }
        -            ]
        -          },
        -          "content": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "alignment": {
        -                "enum": [
        -                  "leading",
        -                  "center",
        -                  "trailing"
        -                ],
        -                "type": "string"
        -              },
        -              "aspectRatio": {
        -                "exclusiveMinimum": 0,
        -                "type": "number"
        -              },
        -              "boxWidth": {
        -                "anyOf": [
        -                  {
        -                    "exclusiveMinimum": 0,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "color": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": false,
        -                    "properties": {
        -                      "a": {
        -                        "maximum": 1,
        -                        "minimum": 0,
        -                        "type": "number"
        -                      },
        -                      "b": {
        -                        "maximum": 1,
        -                        "minimum": 0,
        -                        "type": "number"
        -                      },
        -                      "g": {
        -                        "maximum": 1,
        -                        "minimum": 0,
        -                        "type": "number"
        -                      },
        -                      "r": {
        -                        "maximum": 1,
        -                        "minimum": 0,
        -                        "type": "number"
        -                      }
        -                    },
        -                    "required": [
        -                      "r",
        -                      "g",
        -                      "b",
        -                      "a"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  {
        -                    "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        -                    "type": "string"
        -                  }
        -                ]
        -              },
        -              "cornerRadius": {
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "deviceId": {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "fontName": {
        -                "maxLength": 1000,
        -                "type": "string"
        -              },
        -              "fontSize": {
        -                "maximum": 8192,
        -                "minimum": 8,
        -                "type": "number"
        -              },
        -              "frameId": {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              "kerning": {
        -                "type": "number"
        -              },
        -              "lineSpacing": {
        -                "type": "number"
        -              },
        -              "orientation": {
        -                "enum": [
        -                  "portrait",
        -                  "landscape"
        -                ],
        -                "type": "string"
        -              },
        -              "pill": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": false,
        -                    "properties": {
        -                      "color": {
        -                        "anyOf": [
        -                          {
        -                            "additionalProperties": false,
        -                            "properties": {
        -                              "a": {
        -                                "maximum": 1,
        -                                "minimum": 0,
        -                                "type": "number"
        -                              },
        -                              "b": {
        -                                "maximum": 1,
        -                                "minimum": 0,
        -                                "type": "number"
        -                              },
        -                              "g": {
        -                                "maximum": 1,
        -                                "minimum": 0,
        -                                "type": "number"
        -                              },
        -                              "r": {
        -                                "maximum": 1,
        -                                "minimum": 0,
        -                                "type": "number"
        -                              }
        -                            },
        -                            "required": [
        -                              "r",
        -                              "g",
        -                              "b",
        -                              "a"
        -                            ],
        -                            "type": "object"
        -                          },
        -                          {
        -                            "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        -                            "type": "string"
        -                          }
        -                        ]
        -                      },
        -                      "cornerRadius": {
        -                        "minimum": 0,
        -                        "type": "number"
        -                      },
        -                      "paddingX": {
        -                        "minimum": 0,
        -                        "type": "number"
        -                      },
        -                      "paddingY": {
        -                        "minimum": 0,
        -                        "type": "number"
        -                      }
        -                    },
        -                    "required": [
        -                      "color",
        -                      "paddingX",
        -                      "paddingY",
        -                      "cornerRadius"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "screenshotOffset": {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "x": {
        -                    "type": "number"
        -                  },
        -                  "y": {
        -                    "type": "number"
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              "screenshotZoom": {
        -                "maximum": 3,
        -                "minimum": 1,
        -                "type": "number"
        -              },
        -              "shadow": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": false,
        -                    "properties": {
        -                      "color": {
        -                        "anyOf": [
        -                          {
        -                            "additionalProperties": false,
        -                            "properties": {
        -                              "a": {
        -                                "maximum": 1,
        -                                "minimum": 0,
        -                                "type": "number"
        -                              },
        -                              "b": {
        -                                "maximum": 1,
        -                                "minimum": 0,
        -                                "type": "number"
        -                              },
        -                              "g": {
        -                                "maximum": 1,
        -                                "minimum": 0,
        -                                "type": "number"
        -                              },
        -                              "r": {
        -                                "maximum": 1,
        -                                "minimum": 0,
        -                                "type": "number"
        -                              }
        -                            },
        -                            "required": [
        -                              "r",
        -                              "g",
        -                              "b",
        -                              "a"
        -                            ],
        -                            "type": "object"
        -                          },
        -                          {
        -                            "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        -                            "type": "string"
        -                          }
        -                        ]
        -                      },
        -                      "offsetX": {
        -                        "type": "number"
        -                      },
        -                      "offsetY": {
        -                        "type": "number"
        -                      },
        -                      "radius": {
        -                        "minimum": 0,
        -                        "type": "number"
        -                      }
        -                    },
        -                    "required": [
        -                      "color",
        -                      "radius",
        -                      "offsetX",
        -                      "offsetY"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "shadowIntensity": {
        -                "maximum": 1,
        -                "minimum": 0,
        -                "type": "number"
        -              },
        -              "string": {
        -                "maxLength": 100000,
        -                "type": "string"
        -              },
        -              "stroke": {
        -                "anyOf": [
        -                  {
        -                    "additionalProperties": false,
        -                    "properties": {
        -                      "color": {
        -                        "anyOf": [
        -                          {
        -                            "additionalProperties": false,
        -                            "properties": {
        -                              "a": {
        -                                "maximum": 1,
        -                                "minimum": 0,
        -                                "type": "number"
        -                              },
        -                              "b": {
        -                                "maximum": 1,
        -                                "minimum": 0,
        -                                "type": "number"
        -                              },
        -                              "g": {
        -                                "maximum": 1,
        -                                "minimum": 0,
        -                                "type": "number"
        -                              },
        -                              "r": {
        -                                "maximum": 1,
        -                                "minimum": 0,
        -                                "type": "number"
        -                              }
        -                            },
        -                            "required": [
        -                              "r",
        -                              "g",
        -                              "b",
        -                              "a"
        -                            ],
        -                            "type": "object"
        -                          },
        -                          {
        -                            "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        -                            "type": "string"
        -                          }
        -                        ]
        -                      },
        -                      "width": {
        -                        "minimum": 0,
        -                        "type": "number"
        -                      }
        -                    },
        -                    "required": [
        -                      "color",
        -                      "width"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "weight": {
        -                "enum": [
        -                  "regular",
        -                  "medium",
        -                  "semibold",
        -                  "bold"
        -                ],
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "cornerRadius": {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          "deviceId": {
        -            "maxLength": 256,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "fontName": {
        -            "maxLength": 1000,
        -            "type": "string"
        -          },
        -          "fontSize": {
        -            "maximum": 8192,
        -            "minimum": 8,
        -            "type": "number"
        -          },
        -          "frameId": {
        -            "maxLength": 256,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "isLocked": {
        -            "type": "boolean"
        -          },
        -          "isVisible": {
        -            "type": "boolean"
        -          },
        -          "kerning": {
        -            "type": "number"
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "lineSpacing": {
        -            "type": "number"
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "name": {
        -            "maxLength": 1000,
        -            "type": "string"
        -          },
        -          "opacity": {
        -            "maximum": 1,
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          "orientation": {
        -            "enum": [
        -              "portrait",
        -              "landscape"
        -            ],
        -            "type": "string"
        -          },
        -          "pill": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "color": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "a": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "b": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "g": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "r": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          }
        -                        },
        -                        "required": [
        -                          "r",
        -                          "g",
        -                          "b",
        -                          "a"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      {
        -                        "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        -                        "type": "string"
        -                      }
        -                    ]
        -                  },
        -                  "cornerRadius": {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "paddingX": {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "paddingY": {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  }
        -                },
        -                "required": [
        -                  "color",
        -                  "paddingX",
        -                  "paddingY",
        -                  "cornerRadius"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "screenshotOffset": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "x": {
        -                "type": "number"
        -              },
        -              "y": {
        -                "type": "number"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "screenshotZoom": {
        -            "maximum": 3,
        -            "minimum": 1,
        -            "type": "number"
        -          },
        -          "shadow": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "color": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "a": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "b": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "g": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "r": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          }
        -                        },
        -                        "required": [
        -                          "r",
        -                          "g",
        -                          "b",
        -                          "a"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      {
        -                        "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        -                        "type": "string"
        -                      }
        -                    ]
        -                  },
        -                  "offsetX": {
        -                    "type": "number"
        -                  },
        -                  "offsetY": {
        -                    "type": "number"
        -                  },
        -                  "radius": {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  }
        -                },
        -                "required": [
        -                  "color",
        -                  "radius",
        -                  "offsetX",
        -                  "offsetY"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          },
        -          "shadowIntensity": {
        -            "maximum": 1,
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          "string": {
        -            "maxLength": 100000,
        -            "type": "string"
        -          },
        -          "stroke": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "color": {
        -                    "anyOf": [
        -                      {
        -                        "additionalProperties": false,
        -                        "properties": {
        -                          "a": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "b": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "g": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          },
        -                          "r": {
        -                            "maximum": 1,
        -                            "minimum": 0,
        -                            "type": "number"
        -                          }
        -                        },
        -                        "required": [
        -                          "r",
        -                          "g",
        -                          "b",
        -                          "a"
        -                        ],
        -                        "type": "object"
        -                      },
        -                      {
        -                        "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        -                        "type": "string"
        -                      }
        -                    ]
        -                  },
        -                  "width": {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  }
        -                },
        -                "required": [
        -                  "color",
        -                  "width"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ]
        -          },
        -          "transform": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "center": {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "x": {
        -                    "type": "number"
        -                  },
        -                  "y": {
        -                    "type": "number"
        -                  }
        -                },
        -                "type": "object"
        -              },
        -              "rotation": {
        -                "type": "number"
        -              },
        -              "scale": {
        -                "maximum": 8,
        -                "minimum": 0.1,
        -                "type": "number"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "weight": {
        -            "enum": [
        -              "regular",
        -              "medium",
        -              "semibold",
        -              "bold"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "layerId"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.delete",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "layerId"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.reorder",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "action": {
        -            "enum": [
        -              "front",
        -              "back",
        -              "forward",
        -              "backward"
        -            ],
        -            "type": "string"
        -          },
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "toIndex": {
        -            "maximum": 9007199254740991,
        -            "minimum": 1,
        -            "type": "integer"
        -          }
        -        },
        -        "required": [
        -          "layerId"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.setBackground",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "blurRadius": {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "color": {
        -            "anyOf": [
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "a": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "b": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "g": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "r": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  }
        -                },
        -                "required": [
        -                  "r",
        -                  "g",
        -                  "b",
        -                  "a"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        -                "type": "string"
        -              }
        -            ]
        -          },
        -          "dimming": {
        -            "maximum": 1,
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          "fill": {
        -            "oneOf": [
        -              {
        -                "properties": {
        -                  "color": {
        -                    "properties": {
        -                      "a": {
        -                        "maximum": 1,
        -                        "minimum": 0,
        -                        "type": "number"
        -                      },
        -                      "b": {
        -                        "maximum": 1,
        -                        "minimum": 0,
        -                        "type": "number"
        -                      },
        -                      "g": {
        -                        "maximum": 1,
        -                        "minimum": 0,
        -                        "type": "number"
        -                      },
        -                      "r": {
        -                        "maximum": 1,
        -                        "minimum": 0,
        -                        "type": "number"
        -                      }
        -                    },
        -                    "required": [
        -                      "r",
        -                      "g",
        -                      "b",
        -                      "a"
        -                    ],
        -                    "type": "object"
        -                  },
        -                  "kind": {
        -                    "const": "solid",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "kind",
        -                  "color"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "properties": {
        -                  "angle": {
        -                    "type": "number"
        -                  },
        -                  "kind": {
        -                    "const": "linearGradient",
        -                    "type": "string"
        -                  },
        -                  "stops": {
        -                    "items": {
        -                      "properties": {
        -                        "color": {
        -                          "properties": {
        -                            "a": {
        -                              "maximum": 1,
        -                              "minimum": 0,
        -                              "type": "number"
        -                            },
        -                            "b": {
        -                              "maximum": 1,
        -                              "minimum": 0,
        -                              "type": "number"
        -                            },
        -                            "g": {
        -                              "maximum": 1,
        -                              "minimum": 0,
        -                              "type": "number"
        -                            },
        -                            "r": {
        -                              "maximum": 1,
        -                              "minimum": 0,
        -                              "type": "number"
        -                            }
        -                          },
        -                          "required": [
        -                            "r",
        -                            "g",
        -                            "b",
        -                            "a"
        -                          ],
        -                          "type": "object"
        -                        },
        -                        "location": {
        -                          "maximum": 1,
        -                          "minimum": 0,
        -                          "type": "number"
        -                        }
        -                      },
        -                      "required": [
        -                        "color",
        -                        "location"
        -                      ],
        -                      "type": "object"
        -                    },
        -                    "maxItems": 64,
        -                    "minItems": 2,
        -                    "type": "array"
        -                  }
        -                },
        -                "required": [
        -                  "kind",
        -                  "stops",
        -                  "angle"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "properties": {
        -                  "kind": {
        -                    "const": "radialGradient",
        -                    "type": "string"
        -                  },
        -                  "stops": {
        -                    "items": {
        -                      "properties": {
        -                        "color": {
        -                          "properties": {
        -                            "a": {
        -                              "maximum": 1,
        -                              "minimum": 0,
        -                              "type": "number"
        -                            },
        -                            "b": {
        -                              "maximum": 1,
        -                              "minimum": 0,
        -                              "type": "number"
        -                            },
        -                            "g": {
        -                              "maximum": 1,
        -                              "minimum": 0,
        -                              "type": "number"
        -                            },
        -                            "r": {
        -                              "maximum": 1,
        -                              "minimum": 0,
        -                              "type": "number"
        -                            }
        -                          },
        -                          "required": [
        -                            "r",
        -                            "g",
        -                            "b",
        -                            "a"
        -                          ],
        -                          "type": "object"
        -                        },
        -                        "location": {
        -                          "maximum": 1,
        -                          "minimum": 0,
        -                          "type": "number"
        -                        }
        -                      },
        -                      "required": [
        -                        "color",
        -                        "location"
        -                      ],
        -                      "type": "object"
        -                    },
        -                    "maxItems": 64,
        -                    "minItems": 2,
        -                    "type": "array"
        -                  }
        -                },
        -                "required": [
        -                  "kind",
        -                  "stops"
        -                ],
        -                "type": "object"
        -              },
        -              {
        -                "properties": {
        -                  "assetRef": {
        -                    "maxLength": 256,
        -                    "minLength": 1,
        -                    "type": "string"
        -                  },
        -                  "blurRadius": {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "dimming": {
        -                    "maximum": 1,
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  "kind": {
        -                    "const": "image",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "kind",
        -                  "assetRef",
        -                  "blurRadius",
        -                  "dimming"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "presetId": {
        -            "maxLength": 256,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "url": {
        -            "maxLength": 12582912,
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.setDevicePadding",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "value": {
        -            "maximum": 0.5,
        -            "minimum": 0,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "value"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "assets.attach",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "cropPolicy": {
        -            "enum": [
        -              "reset",
        -              "preserve"
        -            ],
        -            "type": "string"
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "target": {
        -            "enum": [
        -              "screenshot",
        -              "image",
        -              "background"
        -            ],
        -            "type": "string"
        -          },
        -          "url": {
        -            "maxLength": 12582912,
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "url"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layout.sync",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "fields": {
        -            "items": {
        -              "enum": [
        -                "transform",
        -                "opacity",
        -                "style"
        -              ],
        -              "type": "string"
        -            },
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "mapping": {
        -            "items": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "sourceLayerId": {
        -                  "anyOf": [
        -                    {
        -                      "maxLength": 256,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "ref": {
        -                          "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "ref"
        -                      ],
        -                      "type": "object"
        -                    }
        -                  ]
        -                },
        -                "targetCanvasId": {
        -                  "anyOf": [
        -                    {
        -                      "maxLength": 256,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "ref": {
        -                          "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "ref"
        -                      ],
        -                      "type": "object"
        -                    }
        -                  ]
        -                },
        -                "targetLayerId": {
        -                  "anyOf": [
        -                    {
        -                      "maxLength": 256,
        -                      "minLength": 1,
        -                      "type": "string"
        -                    },
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "ref": {
        -                          "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "ref"
        -                      ],
        -                      "type": "object"
        -                    }
        -                  ]
        -                }
        -              },
        -              "required": [
        -                "targetCanvasId",
        -                "sourceLayerId",
        -                "targetLayerId"
        -              ],
        -              "type": "object"
        -            },
        -            "maxItems": 500,
        -            "type": "array"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "scope": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "background": {
        -                "type": "boolean"
        -              },
        -              "canvasSize": {
        -                "type": "boolean"
        -              },
        -              "devices": {
        -                "type": "boolean"
        -              },
        -              "images": {
        -                "type": "boolean"
        -              },
        -              "texts": {
        -                "type": "boolean"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "sourceCanvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "targetCanvasIds": {
        -            "items": {
        -              "anyOf": [
        -                {
        -                  "maxLength": 256,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "ref": {
        -                      "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "ref"
        -                  ],
        -                  "type": "object"
        -                }
        -              ]
        -            },
        -            "maxItems": 10,
        -            "minItems": 1,
        -            "type": "array"
        -          }
        -        },
        -        "required": [
        -          "targetCanvasIds"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "canvases.duplicate",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "name": {
        -            "maxLength": 1000,
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "canvasId"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "canvases.reorder",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasIds": {
        -            "items": {
        -              "anyOf": [
        -                {
        -                  "maxLength": 256,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "ref": {
        -                      "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "ref"
        -                  ],
        -                  "type": "object"
        -                }
        -              ]
        -            },
        -            "maxItems": 10,
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "canvasIds"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.duplicate",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "name": {
        -            "maxLength": 1000,
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "targetCanvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          }
        -        },
        -        "required": [
        -          "layerId"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "assets.reuse",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "assetRef": {
        -            "maxLength": 256,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "cropPolicy": {
        -            "enum": [
        -              "reset",
        -              "preserve"
        -            ],
        -            "type": "string"
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "target": {
        -            "enum": [
        -              "screenshot",
        -              "image",
        -              "background"
        -            ],
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "assetRef",
        -          "target"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "devices.clearScreenshot",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "layerId"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "devices.setCrop",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "offset": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "x": {
        -                "type": "number"
        -              },
        -              "y": {
        -                "type": "number"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "zoom": {
        -            "maximum": 3,
        -            "minimum": 1,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "layerId"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "devices.resetCrop",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "layerId"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.move",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "dx": {
        -            "type": "number"
        -          },
        -          "dy": {
        -            "type": "number"
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "layerId",
        -          "dx",
        -          "dy"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.position",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "x": {
        -            "type": "number"
        -          },
        -          "y": {
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "layerId",
        -          "x",
        -          "y"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.resize",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "height": {
        -            "exclusiveMinimum": 0,
        -            "type": "number"
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "width": {
        -            "exclusiveMinimum": 0,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "layerId"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.rotate",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "degrees": {
        -            "type": "number"
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "relative": {
        -            "type": "boolean"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "layerId",
        -          "degrees"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.align",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "alignment": {
        -            "enum": [
        -              "left",
        -              "right",
        -              "top",
        -              "bottom",
        -              "centerX",
        -              "centerY"
        -            ],
        -            "type": "string"
        -          },
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "layerIds": {
        -            "items": {
        -              "anyOf": [
        -                {
        -                  "maxLength": 256,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "ref": {
        -                      "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "ref"
        -                  ],
        -                  "type": "object"
        -                }
        -              ]
        -            },
        -            "maxItems": 49,
        -            "minItems": 1,
        -            "type": "array"
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "margin": {
        -            "type": "number"
        -          },
        -          "reference": {
        -            "enum": [
        -              "canvas",
        -              "selection",
        -              "layer"
        -            ],
        -            "type": "string"
        -          },
        -          "referenceLayerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "layerIds",
        -          "alignment"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "layers.distribute",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "axis": {
        -            "enum": [
        -              "x",
        -              "y"
        -            ],
        -            "type": "string"
        -          },
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "gap": {
        -            "minimum": 0,
        -            "type": "number"
        -          },
        -          "layerIds": {
        -            "items": {
        -              "anyOf": [
        -                {
        -                  "maxLength": 256,
        -                  "minLength": 1,
        -                  "type": "string"
        -                },
        -                {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "ref": {
        -                      "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "ref"
        -                  ],
        -                  "type": "object"
        -                }
        -              ]
        -            },
        -            "maxItems": 49,
        -            "minItems": 2,
        -            "type": "array"
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "layerIds",
        -          "axis"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "texts.reflow",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "width": {
        -            "exclusiveMinimum": 0,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "layerId",
        -          "width"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "as": {
        -        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -        "type": "string"
        -      },
        -      "command": {
        -        "const": "texts.fit",
        -        "type": "string"
        -      },
        -      "input": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "canvasId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "height": {
        -            "exclusiveMinimum": 0,
        -            "type": "number"
        -          },
        -          "layerId": {
        -            "anyOf": [
        -              {
        -                "maxLength": 256,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "additionalProperties": false,
        -                "properties": {
        -                  "ref": {
        -                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        -                    "type": "string"
        -                  }
        -                },
        -                "required": [
        -                  "ref"
        -                ],
        -                "type": "object"
        -              }
        -            ]
        -          },
        -          "locale": {
        -            "enum": [
        -              "zh",
        -              "en"
        -            ],
        -            "type": "string"
        -          },
        -          "maxFontSize": {
        -            "maximum": 8192,
        -            "minimum": 8,
        -            "type": "number"
        -          },
        -          "maxLines": {
        -            "exclusiveMinimum": 0,
        -            "maximum": 9007199254740991,
        -            "type": "integer"
        -          },
        -          "minFontSize": {
        -            "maximum": 8192,
        -            "minimum": 8,
        -            "type": "number"
        -          },
        -          "schemaVersion": {
        -            "const": 1,
        -            "type": "number"
        -          },
        -          "width": {
        -            "exclusiveMinimum": 0,
        -            "type": "number"
        -          }
        -        },
        -        "required": [
        -          "layerId",
        -          "width",
        -          "height",
        -          "minFontSize",
        -          "maxFontSize"
        -        ],
        -        "type": "object"
        -      }
        -    },
        -    "required": [
        -      "command",
        -      "input"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "projects.create",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "aspect": {
        +            "enum": [
        +              "square",
        +              "portrait45",
        +              "portrait34",
        +              "portrait23",
        +              "story916",
        +              "landscape43",
        +              "landscape32",
        +              "landscape169",
        +              "appStore69",
        +              "appStore65",
        +              "macAppStore",
        +              "appStoreHeader",
        +              "appStoreSearch",
        +              "appStoreUniversal",
        +              "appStoreEventCard",
        +              "appStoreEventDetails",
        +              "custom"
        +            ],
        +            "type": "string"
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "name": {
        +            "maxLength": 1000,
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "projects.rename",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "name": {
        +            "maxLength": 1000,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "name"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "projects.import",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "package": {
        +            "additionalProperties": {},
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "canvases.add",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "duplicate": {
        +            "type": "boolean"
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "name": {
        +            "maxLength": 1000,
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "canvases.delete",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "canvasId"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "canvases.rename",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "name": {
        +            "maxLength": 1000,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "canvasId",
        +          "name"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "canvases.switch",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "canvasId"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "canvases.setAspect",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "aspect": {
        +            "enum": [
        +              "square",
        +              "portrait45",
        +              "portrait34",
        +              "portrait23",
        +              "story916",
        +              "landscape43",
        +              "landscape32",
        +              "landscape169",
        +              "appStore69",
        +              "appStore65",
        +              "macAppStore",
        +              "appStoreHeader",
        +              "appStoreSearch",
        +              "appStoreUniversal",
        +              "appStoreEventCard",
        +              "appStoreEventDetails",
        +              "custom"
        +            ],
        +            "type": "string"
        +          },
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "height": {
        +            "maximum": 5244,
        +            "minimum": 64,
        +            "type": "integer"
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "width": {
        +            "maximum": 5244,
        +            "minimum": 64,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "aspect"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "templates.apply",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "display": {
        +            "enum": [
        +              "65",
        +              "69"
        +            ],
        +            "type": "string"
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "templateId": {
        +            "maxLength": 256,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "themeId": {
        +            "maxLength": 256,
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "templateId"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "templates.applySet",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "display": {
        +            "enum": [
        +              "65",
        +              "69"
        +            ],
        +            "type": "string"
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "templateId": {
        +            "maxLength": 256,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "themeId": {
        +            "maxLength": 256,
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "templateId"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.addDevice",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "deviceId": {
        +            "maxLength": 256,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "frameId": {
        +            "maxLength": 256,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "name": {
        +            "maxLength": 1000,
        +            "type": "string"
        +          },
        +          "orientation": {
        +            "enum": [
        +              "portrait",
        +              "landscape"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "transform": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "center": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "x": {
        +                    "type": "number"
        +                  },
        +                  "y": {
        +                    "type": "number"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "rotation": {
        +                "type": "number"
        +              },
        +              "scale": {
        +                "maximum": 8,
        +                "minimum": 0.1,
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "url": {
        +            "maxLength": 12582912,
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.addText",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "alignment": {
        +            "enum": [
        +              "leading",
        +              "center",
        +              "trailing"
        +            ],
        +            "type": "string"
        +          },
        +          "boxWidth": {
        +            "anyOf": [
        +              {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "color": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "a": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "b": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "g": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "r": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "r",
        +                  "g",
        +                  "b",
        +                  "a"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        +                "type": "string"
        +              }
        +            ]
        +          },
        +          "fontName": {
        +            "maxLength": 1000,
        +            "type": "string"
        +          },
        +          "fontSize": {
        +            "maximum": 8192,
        +            "minimum": 8,
        +            "type": "number"
        +          },
        +          "kerning": {
        +            "type": "number"
        +          },
        +          "lineSpacing": {
        +            "type": "number"
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "name": {
        +            "maxLength": 1000,
        +            "type": "string"
        +          },
        +          "pill": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "color": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "a": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "b": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "g": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "r": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          }
        +                        },
        +                        "required": [
        +                          "r",
        +                          "g",
        +                          "b",
        +                          "a"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      {
        +                        "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        +                        "type": "string"
        +                      }
        +                    ]
        +                  },
        +                  "cornerRadius": {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "paddingX": {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "paddingY": {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "color",
        +                  "paddingX",
        +                  "paddingY",
        +                  "cornerRadius"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "shadow": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "color": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "a": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "b": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "g": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "r": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          }
        +                        },
        +                        "required": [
        +                          "r",
        +                          "g",
        +                          "b",
        +                          "a"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      {
        +                        "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        +                        "type": "string"
        +                      }
        +                    ]
        +                  },
        +                  "offsetX": {
        +                    "type": "number"
        +                  },
        +                  "offsetY": {
        +                    "type": "number"
        +                  },
        +                  "radius": {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "color",
        +                  "radius",
        +                  "offsetX",
        +                  "offsetY"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "string": {
        +            "maxLength": 100000,
        +            "type": "string"
        +          },
        +          "stroke": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "color": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "a": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "b": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "g": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "r": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          }
        +                        },
        +                        "required": [
        +                          "r",
        +                          "g",
        +                          "b",
        +                          "a"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      {
        +                        "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        +                        "type": "string"
        +                      }
        +                    ]
        +                  },
        +                  "width": {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "color",
        +                  "width"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "transform": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "center": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "x": {
        +                    "type": "number"
        +                  },
        +                  "y": {
        +                    "type": "number"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "rotation": {
        +                "type": "number"
        +              },
        +              "scale": {
        +                "maximum": 8,
        +                "minimum": 0.1,
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "weight": {
        +            "enum": [
        +              "regular",
        +              "medium",
        +              "semibold",
        +              "bold"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.addImage",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "cornerRadius": {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "name": {
        +            "maxLength": 1000,
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "transform": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "center": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "x": {
        +                    "type": "number"
        +                  },
        +                  "y": {
        +                    "type": "number"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "rotation": {
        +                "type": "number"
        +              },
        +              "scale": {
        +                "maximum": 8,
        +                "minimum": 0.1,
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "url": {
        +            "maxLength": 12582912,
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "url"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.update",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "alignment": {
        +            "enum": [
        +              "leading",
        +              "center",
        +              "trailing"
        +            ],
        +            "type": "string"
        +          },
        +          "aspectRatio": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          },
        +          "boxWidth": {
        +            "anyOf": [
        +              {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "color": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "a": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "b": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "g": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "r": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "r",
        +                  "g",
        +                  "b",
        +                  "a"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        +                "type": "string"
        +              }
        +            ]
        +          },
        +          "content": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "alignment": {
        +                "enum": [
        +                  "leading",
        +                  "center",
        +                  "trailing"
        +                ],
        +                "type": "string"
        +              },
        +              "aspectRatio": {
        +                "exclusiveMinimum": 0,
        +                "type": "number"
        +              },
        +              "boxWidth": {
        +                "anyOf": [
        +                  {
        +                    "exclusiveMinimum": 0,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "color": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "a": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "b": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "g": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "r": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      }
        +                    },
        +                    "required": [
        +                      "r",
        +                      "g",
        +                      "b",
        +                      "a"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  {
        +                    "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        +                    "type": "string"
        +                  }
        +                ]
        +              },
        +              "cornerRadius": {
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "deviceId": {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "fontName": {
        +                "maxLength": 1000,
        +                "type": "string"
        +              },
        +              "fontSize": {
        +                "maximum": 8192,
        +                "minimum": 8,
        +                "type": "number"
        +              },
        +              "frameId": {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "kerning": {
        +                "type": "number"
        +              },
        +              "lineSpacing": {
        +                "type": "number"
        +              },
        +              "orientation": {
        +                "enum": [
        +                  "portrait",
        +                  "landscape"
        +                ],
        +                "type": "string"
        +              },
        +              "pill": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "color": {
        +                        "anyOf": [
        +                          {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "a": {
        +                                "maximum": 1,
        +                                "minimum": 0,
        +                                "type": "number"
        +                              },
        +                              "b": {
        +                                "maximum": 1,
        +                                "minimum": 0,
        +                                "type": "number"
        +                              },
        +                              "g": {
        +                                "maximum": 1,
        +                                "minimum": 0,
        +                                "type": "number"
        +                              },
        +                              "r": {
        +                                "maximum": 1,
        +                                "minimum": 0,
        +                                "type": "number"
        +                              }
        +                            },
        +                            "required": [
        +                              "r",
        +                              "g",
        +                              "b",
        +                              "a"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          {
        +                            "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        +                            "type": "string"
        +                          }
        +                        ]
        +                      },
        +                      "cornerRadius": {
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "paddingX": {
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "paddingY": {
        +                        "minimum": 0,
        +                        "type": "number"
        +                      }
        +                    },
        +                    "required": [
        +                      "color",
        +                      "paddingX",
        +                      "paddingY",
        +                      "cornerRadius"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "screenshotOffset": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "x": {
        +                    "type": "number"
        +                  },
        +                  "y": {
        +                    "type": "number"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "screenshotZoom": {
        +                "maximum": 3,
        +                "minimum": 1,
        +                "type": "number"
        +              },
        +              "shadow": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "color": {
        +                        "anyOf": [
        +                          {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "a": {
        +                                "maximum": 1,
        +                                "minimum": 0,
        +                                "type": "number"
        +                              },
        +                              "b": {
        +                                "maximum": 1,
        +                                "minimum": 0,
        +                                "type": "number"
        +                              },
        +                              "g": {
        +                                "maximum": 1,
        +                                "minimum": 0,
        +                                "type": "number"
        +                              },
        +                              "r": {
        +                                "maximum": 1,
        +                                "minimum": 0,
        +                                "type": "number"
        +                              }
        +                            },
        +                            "required": [
        +                              "r",
        +                              "g",
        +                              "b",
        +                              "a"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          {
        +                            "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        +                            "type": "string"
        +                          }
        +                        ]
        +                      },
        +                      "offsetX": {
        +                        "type": "number"
        +                      },
        +                      "offsetY": {
        +                        "type": "number"
        +                      },
        +                      "radius": {
        +                        "minimum": 0,
        +                        "type": "number"
        +                      }
        +                    },
        +                    "required": [
        +                      "color",
        +                      "radius",
        +                      "offsetX",
        +                      "offsetY"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "shadowIntensity": {
        +                "maximum": 1,
        +                "minimum": 0,
        +                "type": "number"
        +              },
        +              "string": {
        +                "maxLength": 100000,
        +                "type": "string"
        +              },
        +              "stroke": {
        +                "anyOf": [
        +                  {
        +                    "additionalProperties": false,
        +                    "properties": {
        +                      "color": {
        +                        "anyOf": [
        +                          {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "a": {
        +                                "maximum": 1,
        +                                "minimum": 0,
        +                                "type": "number"
        +                              },
        +                              "b": {
        +                                "maximum": 1,
        +                                "minimum": 0,
        +                                "type": "number"
        +                              },
        +                              "g": {
        +                                "maximum": 1,
        +                                "minimum": 0,
        +                                "type": "number"
        +                              },
        +                              "r": {
        +                                "maximum": 1,
        +                                "minimum": 0,
        +                                "type": "number"
        +                              }
        +                            },
        +                            "required": [
        +                              "r",
        +                              "g",
        +                              "b",
        +                              "a"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          {
        +                            "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        +                            "type": "string"
        +                          }
        +                        ]
        +                      },
        +                      "width": {
        +                        "minimum": 0,
        +                        "type": "number"
        +                      }
        +                    },
        +                    "required": [
        +                      "color",
        +                      "width"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "weight": {
        +                "enum": [
        +                  "regular",
        +                  "medium",
        +                  "semibold",
        +                  "bold"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "cornerRadius": {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          "deviceId": {
        +            "maxLength": 256,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "fontName": {
        +            "maxLength": 1000,
        +            "type": "string"
        +          },
        +          "fontSize": {
        +            "maximum": 8192,
        +            "minimum": 8,
        +            "type": "number"
        +          },
        +          "frameId": {
        +            "maxLength": 256,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "isLocked": {
        +            "type": "boolean"
        +          },
        +          "isVisible": {
        +            "type": "boolean"
        +          },
        +          "kerning": {
        +            "type": "number"
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "lineSpacing": {
        +            "type": "number"
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "name": {
        +            "maxLength": 1000,
        +            "type": "string"
        +          },
        +          "opacity": {
        +            "maximum": 1,
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          "orientation": {
        +            "enum": [
        +              "portrait",
        +              "landscape"
        +            ],
        +            "type": "string"
        +          },
        +          "pill": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "color": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "a": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "b": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "g": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "r": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          }
        +                        },
        +                        "required": [
        +                          "r",
        +                          "g",
        +                          "b",
        +                          "a"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      {
        +                        "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        +                        "type": "string"
        +                      }
        +                    ]
        +                  },
        +                  "cornerRadius": {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "paddingX": {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "paddingY": {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "color",
        +                  "paddingX",
        +                  "paddingY",
        +                  "cornerRadius"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "screenshotOffset": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "x": {
        +                "type": "number"
        +              },
        +              "y": {
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "screenshotZoom": {
        +            "maximum": 3,
        +            "minimum": 1,
        +            "type": "number"
        +          },
        +          "shadow": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "color": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "a": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "b": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "g": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "r": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          }
        +                        },
        +                        "required": [
        +                          "r",
        +                          "g",
        +                          "b",
        +                          "a"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      {
        +                        "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        +                        "type": "string"
        +                      }
        +                    ]
        +                  },
        +                  "offsetX": {
        +                    "type": "number"
        +                  },
        +                  "offsetY": {
        +                    "type": "number"
        +                  },
        +                  "radius": {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "color",
        +                  "radius",
        +                  "offsetX",
        +                  "offsetY"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "shadowIntensity": {
        +            "maximum": 1,
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          "string": {
        +            "maxLength": 100000,
        +            "type": "string"
        +          },
        +          "stroke": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "color": {
        +                    "anyOf": [
        +                      {
        +                        "additionalProperties": false,
        +                        "properties": {
        +                          "a": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "b": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "g": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          },
        +                          "r": {
        +                            "maximum": 1,
        +                            "minimum": 0,
        +                            "type": "number"
        +                          }
        +                        },
        +                        "required": [
        +                          "r",
        +                          "g",
        +                          "b",
        +                          "a"
        +                        ],
        +                        "type": "object"
        +                      },
        +                      {
        +                        "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        +                        "type": "string"
        +                      }
        +                    ]
        +                  },
        +                  "width": {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "color",
        +                  "width"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ]
        +          },
        +          "transform": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "center": {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "x": {
        +                    "type": "number"
        +                  },
        +                  "y": {
        +                    "type": "number"
        +                  }
        +                },
        +                "type": "object"
        +              },
        +              "rotation": {
        +                "type": "number"
        +              },
        +              "scale": {
        +                "maximum": 8,
        +                "minimum": 0.1,
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "weight": {
        +            "enum": [
        +              "regular",
        +              "medium",
        +              "semibold",
        +              "bold"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "layerId"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.delete",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "layerId"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.reorder",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "action": {
        +            "enum": [
        +              "front",
        +              "back",
        +              "forward",
        +              "backward"
        +            ],
        +            "type": "string"
        +          },
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "toIndex": {
        +            "maximum": 9007199254740991,
        +            "minimum": 1,
        +            "type": "integer"
        +          }
        +        },
        +        "required": [
        +          "layerId"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.setBackground",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "blurRadius": {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "color": {
        +            "anyOf": [
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "a": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "b": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "g": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "r": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "r",
        +                  "g",
        +                  "b",
        +                  "a"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "pattern": "^#?(?:[\\da-f]{3}|[\\da-f]{6}|[\\da-f]{8})$",
        +                "type": "string"
        +              }
        +            ]
        +          },
        +          "dimming": {
        +            "maximum": 1,
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          "fill": {
        +            "oneOf": [
        +              {
        +                "properties": {
        +                  "color": {
        +                    "properties": {
        +                      "a": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "b": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "g": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      },
        +                      "r": {
        +                        "maximum": 1,
        +                        "minimum": 0,
        +                        "type": "number"
        +                      }
        +                    },
        +                    "required": [
        +                      "r",
        +                      "g",
        +                      "b",
        +                      "a"
        +                    ],
        +                    "type": "object"
        +                  },
        +                  "kind": {
        +                    "const": "solid",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "kind",
        +                  "color"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "properties": {
        +                  "angle": {
        +                    "type": "number"
        +                  },
        +                  "kind": {
        +                    "const": "linearGradient",
        +                    "type": "string"
        +                  },
        +                  "stops": {
        +                    "items": {
        +                      "properties": {
        +                        "color": {
        +                          "properties": {
        +                            "a": {
        +                              "maximum": 1,
        +                              "minimum": 0,
        +                              "type": "number"
        +                            },
        +                            "b": {
        +                              "maximum": 1,
        +                              "minimum": 0,
        +                              "type": "number"
        +                            },
        +                            "g": {
        +                              "maximum": 1,
        +                              "minimum": 0,
        +                              "type": "number"
        +                            },
        +                            "r": {
        +                              "maximum": 1,
        +                              "minimum": 0,
        +                              "type": "number"
        +                            }
        +                          },
        +                          "required": [
        +                            "r",
        +                            "g",
        +                            "b",
        +                            "a"
        +                          ],
        +                          "type": "object"
        +                        },
        +                        "location": {
        +                          "maximum": 1,
        +                          "minimum": 0,
        +                          "type": "number"
        +                        }
        +                      },
        +                      "required": [
        +                        "color",
        +                        "location"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "maxItems": 64,
        +                    "minItems": 2,
        +                    "type": "array"
        +                  }
        +                },
        +                "required": [
        +                  "kind",
        +                  "stops",
        +                  "angle"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "properties": {
        +                  "kind": {
        +                    "const": "radialGradient",
        +                    "type": "string"
        +                  },
        +                  "stops": {
        +                    "items": {
        +                      "properties": {
        +                        "color": {
        +                          "properties": {
        +                            "a": {
        +                              "maximum": 1,
        +                              "minimum": 0,
        +                              "type": "number"
        +                            },
        +                            "b": {
        +                              "maximum": 1,
        +                              "minimum": 0,
        +                              "type": "number"
        +                            },
        +                            "g": {
        +                              "maximum": 1,
        +                              "minimum": 0,
        +                              "type": "number"
        +                            },
        +                            "r": {
        +                              "maximum": 1,
        +                              "minimum": 0,
        +                              "type": "number"
        +                            }
        +                          },
        +                          "required": [
        +                            "r",
        +                            "g",
        +                            "b",
        +                            "a"
        +                          ],
        +                          "type": "object"
        +                        },
        +                        "location": {
        +                          "maximum": 1,
        +                          "minimum": 0,
        +                          "type": "number"
        +                        }
        +                      },
        +                      "required": [
        +                        "color",
        +                        "location"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "maxItems": 64,
        +                    "minItems": 2,
        +                    "type": "array"
        +                  }
        +                },
        +                "required": [
        +                  "kind",
        +                  "stops"
        +                ],
        +                "type": "object"
        +              },
        +              {
        +                "properties": {
        +                  "assetRef": {
        +                    "maxLength": 256,
        +                    "minLength": 1,
        +                    "type": "string"
        +                  },
        +                  "blurRadius": {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "dimming": {
        +                    "maximum": 1,
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  "kind": {
        +                    "const": "image",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "kind",
        +                  "assetRef",
        +                  "blurRadius",
        +                  "dimming"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "presetId": {
        +            "maxLength": 256,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "url": {
        +            "maxLength": 12582912,
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.setDevicePadding",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "value": {
        +            "maximum": 0.5,
        +            "minimum": 0,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "value"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "assets.attach",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "cropPolicy": {
        +            "enum": [
        +              "reset",
        +              "preserve"
        +            ],
        +            "type": "string"
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "target": {
        +            "enum": [
        +              "screenshot",
        +              "image",
        +              "background"
        +            ],
        +            "type": "string"
        +          },
        +          "url": {
        +            "maxLength": 12582912,
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "url"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layout.sync",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "fields": {
        +            "items": {
        +              "enum": [
        +                "transform",
        +                "opacity",
        +                "style"
        +              ],
        +              "type": "string"
        +            },
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "mapping": {
        +            "items": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "sourceLayerId": {
        +                  "anyOf": [
        +                    {
        +                      "maxLength": 256,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "ref": {
        +                          "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "ref"
        +                      ],
        +                      "type": "object"
        +                    }
        +                  ]
        +                },
        +                "targetCanvasId": {
        +                  "anyOf": [
        +                    {
        +                      "maxLength": 256,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "ref": {
        +                          "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "ref"
        +                      ],
        +                      "type": "object"
        +                    }
        +                  ]
        +                },
        +                "targetLayerId": {
        +                  "anyOf": [
        +                    {
        +                      "maxLength": 256,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "ref": {
        +                          "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "ref"
        +                      ],
        +                      "type": "object"
        +                    }
        +                  ]
        +                }
        +              },
        +              "required": [
        +                "targetCanvasId",
        +                "sourceLayerId",
        +                "targetLayerId"
        +              ],
        +              "type": "object"
        +            },
        +            "maxItems": 500,
        +            "type": "array"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "scope": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "background": {
        +                "type": "boolean"
        +              },
        +              "canvasSize": {
        +                "type": "boolean"
        +              },
        +              "devices": {
        +                "type": "boolean"
        +              },
        +              "images": {
        +                "type": "boolean"
        +              },
        +              "texts": {
        +                "type": "boolean"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "sourceCanvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "targetCanvasIds": {
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "maxLength": 256,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "ref": {
        +                      "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "ref"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "maxItems": 10,
        +            "minItems": 1,
        +            "type": "array"
        +          }
        +        },
        +        "required": [
        +          "targetCanvasIds"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "canvases.duplicate",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "name": {
        +            "maxLength": 1000,
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "canvasId"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "canvases.reorder",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasIds": {
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "maxLength": 256,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "ref": {
        +                      "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "ref"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "maxItems": 10,
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "canvasIds"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.duplicate",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "name": {
        +            "maxLength": 1000,
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "targetCanvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          }
        +        },
        +        "required": [
        +          "layerId"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "assets.reuse",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "assetRef": {
        +            "maxLength": 256,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "cropPolicy": {
        +            "enum": [
        +              "reset",
        +              "preserve"
        +            ],
        +            "type": "string"
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "target": {
        +            "enum": [
        +              "screenshot",
        +              "image",
        +              "background"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "assetRef",
        +          "target"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "devices.clearScreenshot",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "layerId"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "devices.setCrop",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "offset": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "x": {
        +                "type": "number"
        +              },
        +              "y": {
        +                "type": "number"
        +              }
        +            },
        +            "type": "object"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "zoom": {
        +            "maximum": 3,
        +            "minimum": 1,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "layerId"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "devices.resetCrop",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "layerId"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.move",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "dx": {
        +            "type": "number"
        +          },
        +          "dy": {
        +            "type": "number"
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "layerId",
        +          "dx",
        +          "dy"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.position",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "x": {
        +            "type": "number"
        +          },
        +          "y": {
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "layerId",
        +          "x",
        +          "y"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.resize",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "height": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "width": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "layerId"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.rotate",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "degrees": {
        +            "type": "number"
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "relative": {
        +            "type": "boolean"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "layerId",
        +          "degrees"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.align",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "alignment": {
        +            "enum": [
        +              "left",
        +              "right",
        +              "top",
        +              "bottom",
        +              "centerX",
        +              "centerY"
        +            ],
        +            "type": "string"
        +          },
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "layerIds": {
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "maxLength": 256,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "ref": {
        +                      "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "ref"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "maxItems": 49,
        +            "minItems": 1,
        +            "type": "array"
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "margin": {
        +            "type": "number"
        +          },
        +          "reference": {
        +            "enum": [
        +              "canvas",
        +              "selection",
        +              "layer"
        +            ],
        +            "type": "string"
        +          },
        +          "referenceLayerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "layerIds",
        +          "alignment"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "layers.distribute",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "axis": {
        +            "enum": [
        +              "x",
        +              "y"
        +            ],
        +            "type": "string"
        +          },
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "gap": {
        +            "minimum": 0,
        +            "type": "number"
        +          },
        +          "layerIds": {
        +            "items": {
        +              "anyOf": [
        +                {
        +                  "maxLength": 256,
        +                  "minLength": 1,
        +                  "type": "string"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "ref": {
        +                      "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "ref"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "maxItems": 49,
        +            "minItems": 2,
        +            "type": "array"
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "layerIds",
        +          "axis"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "texts.reflow",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "width": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "layerId",
        +          "width"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "as": {
        +        "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +        "type": "string"
        +      },
        +      "command": {
        +        "const": "texts.fit",
        +        "type": "string"
        +      },
        +      "input": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "canvasId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "height": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          },
        +          "layerId": {
        +            "anyOf": [
        +              {
        +                "maxLength": 256,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "additionalProperties": false,
        +                "properties": {
        +                  "ref": {
        +                    "pattern": "^[A-Za-z][A-Za-z0-9_-]{0,63}$",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "ref"
        +                ],
        +                "type": "object"
        +              }
        +            ]
        +          },
        +          "locale": {
        +            "enum": [
        +              "zh",
        +              "en"
        +            ],
        +            "type": "string"
        +          },
        +          "maxFontSize": {
        +            "maximum": 8192,
        +            "minimum": 8,
        +            "type": "number"
        +          },
        +          "maxLines": {
        +            "exclusiveMinimum": 0,
        +            "maximum": 9007199254740991,
        +            "type": "integer"
        +          },
        +          "minFontSize": {
        +            "maximum": 8192,
        +            "minimum": 8,
        +            "type": "number"
        +          },
        +          "schemaVersion": {
        +            "const": 1,
        +            "type": "number"
        +          },
        +          "width": {
        +            "exclusiveMinimum": 0,
        +            "type": "number"
        +          }
        +        },
        +        "required": [
        +          "layerId",
        +          "width",
        +          "height",
        +          "minFontSize",
        +          "maxFontSize"
        +        ],
        +        "type": "object"
        +      }
        +    },
        +    "required": [
        +      "command",
        +      "input"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedpocketdraft_export1 field changed
      • changedOutput schema / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "files": {
        -        "items": {
        -          "type": "string"
        -        },
        -        "type": "array"
        -      },
        -      "manifest": {
        -        "items": {
        -          "additionalProperties": {},
        -          "propertyNames": {
        -            "type": "string"
        -          },
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "ok": {
        -        "const": true,
        -        "type": "boolean"
        -      },
        -      "projectId": {
        -        "maxLength": 256,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "revision": {
        -        "pattern": "^[a-f0-9]{64}$",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "ok",
        -      "projectId",
        -      "revision",
        -      "files",
        -      "manifest"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "candidates": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "id": {
        -              "type": "string"
        -            },
        -            "kind": {
        -              "type": "string"
        -            },
        -            "name": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "id",
        -            "name",
        -            "kind"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "code": {
        -        "type": "string"
        -      },
        -      "commandIndex": {
        -        "maximum": 9007199254740991,
        -        "minimum": -9007199254740991,
        -        "type": "integer"
        -      },
        -      "details": {
        -        "items": {
        -          "additionalProperties": false,
        -          "properties": {
        -            "message": {
        -              "type": "string"
        -            },
        -            "path": {
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "path",
        -            "message"
        -          ],
        -          "type": "object"
        -        },
        -        "type": "array"
        -      },
        -      "hint": {
        -        "type": "string"
        -      },
        -      "message": {
        -        "type": "string"
        -      },
        -      "objectId": {
        -        "type": "string"
        -      },
        -      "ok": {
        -        "const": false,
        -        "type": "boolean"
        -      },
        -      "operationId": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "message",
        -      "ok"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "files": {
        +        "items": {
        +          "type": "string"
        +        },
        +        "type": "array"
        +      },
        +      "manifest": {
        +        "items": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "ok": {
        +        "const": true,
        +        "type": "boolean"
        +      },
        +      "projectId": {
        +        "maxLength": 256,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "revision": {
        +        "pattern": "^[a-f0-9]{64}$",
        +        "type": "string"
        +      },
        +      "warnings": {
        +        "items": {
        +          "additionalProperties": {},
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "type": "array"
        +      }
        +    },
        +    "required": [
        +      "ok",
        +      "projectId",
        +      "revision",
        +      "files",
        +      "manifest",
        +      "warnings"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "candidates": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "id": {
        +              "type": "string"
        +            },
        +            "kind": {
        +              "type": "string"
        +            },
        +            "name": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "name",
        +            "kind"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "code": {
        +        "type": "string"
        +      },
        +      "commandIndex": {
        +        "maximum": 9007199254740991,
        +        "minimum": -9007199254740991,
        +        "type": "integer"
        +      },
        +      "details": {
        +        "items": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "message": {
        +              "type": "string"
        +            },
        +            "path": {
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "path",
        +            "message"
        +          ],
        +          "type": "object"
        +        },
        +        "type": "array"
        +      },
        +      "hint": {
        +        "type": "string"
        +      },
        +      "message": {
        +        "type": "string"
        +      },
        +      "objectId": {
        +        "type": "string"
        +      },
        +      "ok": {
        +        "const": false,
        +        "type": "boolean"
        +      },
        +      "operationId": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "message",
        +      "ok"
        +    ],
        +    "type": "object"
        +  }
        +]
  2. 11 tool updatesv4.0.0
    • First observedpocketdraft_attach_file
    • First observedpocketdraft_batch_mutation
    • First observedpocketdraft_connection
    • First observedpocketdraft_export
    • First observedpocketdraft_get_catalog
    • First observedpocketdraft_history
    • First observedpocketdraft_inspect_project
    • First observedpocketdraft_list_catalog
    • First observedpocketdraft_operation_status
    • First observedpocketdraft_preview
    • First observedpocketdraft_validate_project

TDQS

A3.5/5.0

Scored across 11 tools

Disambiguation4/5

Most tools target distinct concerns: set-level (connection, operation_status) vs. catalog (list/get) vs. project (inspect/validate/history) vs. content (attach_file/preview/batch_mutation/export). There is mild overlap since batch_mutation also offers dryRun and optional previewing, which brushes against preview and validate_project, but descriptions clarify the boundaries.

Naming Consistency4/5

All tools share a consistent pocketdraft_ prefix and snake_case, with a mostly verb_noun shape (attach_file, list_catalog, get_catalog, inspect_project, validate_project). Minor deviations are the noun-only names pocketdraft_connection and pocketdraft_history, and pocketdraft_preview, which break the strict verb_noun pattern slightly.

Tool Count5/5

11 tools sits comfortably in the well-scoped 3-15 range. Each tool maps to a distinct capability (connection, file attach, preview, mutation, export, status, catalog read, inspection, validation, history), and none appear redundant.

Completeness4/5

The surface covers a full editing lifecycle: connect, inspect, mutate, validate, preview, export, and undo/redo, plus catalog discovery and operation receipts. A minor gap exists around explicit delete/removal operations for projects or workspace artifacts, though batch mutation and history may partially cover this.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables AI clients to inspect and carefully edit a bounded local workspace via stdio, with a read-only default, conflict-safe updates, and no network listener or telemetry.
    10
    2
    Apache 2.0
  • A
    license
    C
    quality
    C
    maintenance
    Enables coding agents to coordinate around shared project context, durable tasks, messages, artifacts, multimodal analysis requests, design-system checks, change proposals, and review requests through a compact MCP interface. It persists state locally in JSON and exposes tools, resources, and prompts for agent-to-agent workflows.
    9
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to explicitly pair with a Web64 browser IDE tab and, with separate user approval, read working-copy project sources, create and atomically edit native projects, import files, save/export, and run asynchronous PRG/Exomizer/D64 build jobs. It also exposes capability discovery and public SDK/documentation/schema lookups over local stdio or authenticated loopback Streamable HTTP.
    -
  • A
    license
    A
    quality
    A
    maintenance
    LocalBridge MCP is a bridge between an online AI chats and your computer. Most online AI chats can reason, and write code, but they normally cannot touch the local files, terminals, and scripts that make real work happen. This gives a trusted assistant a controlled doorway into a machine you own, so it can inspect files, edit text, search a project, run tests, use Git, and operate a shell.
    17
    3
    Apache 2.0