Files
orca/docs/schemas/plugins/orca-plugin.v2.schema.json
T

1670 lines
56 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/stablyai/orca/main/docs/schemas/plugins/orca-plugin.v2.schema.json",
"title": "Orca plugin manifest",
"description": "The orca-plugin.json file at the root of an Orca plugin (manifest format 2).",
"type": "object",
"properties": {
"$schema": {
"description": "JSON Schema URL for editor completion. Ignored by Orca.",
"x-orca-since": "1.4.245",
"type": "string",
"maxLength": 2048
},
"manifestVersion": {
"type": "number",
"const": 2,
"description": "Manifest format. Use 2 for new plugins.",
"x-orca-since": "1.4.245"
},
"execution": {
"type": "string",
"enum": [
"data",
"declarative",
"sandboxed-ui",
"trusted-worker"
],
"description": "Most authority the plugin needs, least first: `data` (themes, syntaxes, translations), `declarative` (commands, shortcuts, recipes), `sandboxed-ui` (panels), `trusted-worker` (`main`, events and hooks). Contributions beyond it fail validation.",
"x-orca-since": "1.4.245",
"examples": [
"data"
]
},
"id": {
"type": "string",
"maxLength": 64,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
"description": "Plugin id, kebab-case. The install identity is `<publisher>.<id>`, where Orca derives the publisher from the repository owner. The reserved names `constructor` and `prototype` are refused.",
"x-orca-since": "1.4.160",
"examples": [
"gleam-syntax"
]
},
"publisher": {
"deprecated": true,
"description": "Deprecated: leave it out. Orca derives the publisher from where the plugin comes from, the way a Go module is named by its repository path: the repository owner for the official and community catalogs and for Git URL installs (`acme` for `github.com/acme/gleam-syntax`), and `local` for a folder. A value here is ignored for catalog and Git installs. Leaving it out needs `engines.orca` of at least `>=1.4.246`, because older Orca requires it; if you keep it for older Orca, it must equal the repository owner. Reserved owners (`stablyai`, `official`, `anthropic`, `openai`, `github` and any starting `orca`) and ids starting `orca-` install only from Orca's official catalog.",
"x-orca-since": "1.4.160",
"examples": [
"acme"
],
"type": "string",
"maxLength": 64,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Display name.",
"x-orca-since": "1.4.160",
"examples": [
"Gleam"
]
},
"version": {
"type": "string",
"pattern": "^(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)\\.(?:0|[1-9]\\d*)(?:-(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*))*)?(?:\\+[0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*)?$",
"description": "Plugin version, semver.",
"x-orca-since": "1.4.160",
"examples": [
"1.2.0"
]
},
"description": {
"description": "One or two sentences shown in the plugin list.",
"x-orca-since": "1.4.160",
"type": "string",
"maxLength": 4096
},
"author": {
"description": "Who maintains the plugin.",
"x-orca-since": "1.4.160",
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Author or organization name.",
"x-orca-since": "1.4.160",
"examples": [
"Acme"
]
},
"url": {
"description": "Author homepage.",
"x-orca-since": "1.4.160",
"examples": [
"https://example.com"
],
"type": "string",
"maxLength": 2048
}
},
"required": [
"name"
],
"additionalProperties": false
},
"repository": {
"description": "Source repository URL.",
"x-orca-since": "1.4.160",
"examples": [
"https://github.com/acme/orca-gleam-syntax"
],
"type": "string",
"maxLength": 2048
},
"license": {
"description": "SPDX license expression.",
"x-orca-since": "1.4.245",
"examples": [
"MIT",
"Apache-2.0 OR MIT"
],
"type": "string",
"maxLength": 128,
"pattern": "^\\(?[A-Za-z0-9][A-Za-z0-9.+-]*(?: (?:AND|OR|WITH) \\(?[A-Za-z0-9][A-Za-z0-9.+-]*\\)?)*\\)?$"
},
"homepage": {
"description": "Project homepage, https only.",
"x-orca-since": "1.4.245",
"examples": [
"https://example.com/gleam"
],
"type": "string",
"maxLength": 2048,
"pattern": "^https:\\/\\/\\S+$"
},
"icon": {
"description": "Square image shown beside the plugin name. PNG, WEBP, static, at least 128×128, square, at most 256 KB. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.160",
"examples": [
"assets/icon.png"
],
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$"
},
"engines": {
"type": "object",
"properties": {
"orca": {
"type": "string",
"maxLength": 64,
"pattern": "^>=\\d+\\.\\d+\\.\\d+$",
"description": "Oldest Orca release this plugin runs on, as `>=x.y.z`. Raise it to the newest \"Since\" of any field you use; a format 2 manifest needs at least `>=1.4.245`, because older Orca cannot read format 2.",
"x-orca-since": "1.4.160",
"examples": [
">=1.4.245"
]
}
},
"required": [
"orca"
],
"additionalProperties": false,
"description": "Host versions this plugin supports. Older hosts refuse to load it.",
"x-orca-since": "1.4.160"
},
"main": {
"description": "Node entry run in an out-of-process plugin worker: a `.js`/`.mjs` module, or a `.ts`/`.mts` module that Orca transpiles when it loads (needs `engines.orca` `>=1.4.246`). Requires the `trusted-worker` execution profile, and is required by it, by `contributes.events`, by `contributes.hooks` and by any command without an `action`. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.160",
"examples": [
"dist/main.mjs"
],
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$"
},
"contributes": {
"description": "What the plugin adds to Orca. Every point defaults to empty.",
"x-orca-since": "1.4.160",
"default": {},
"type": "object",
"properties": {
"panels": {
"default": [],
"description": "Sidebar panels. At most 64.",
"x-orca-since": "1.4.160",
"maxItems": 64,
"type": "array",
"items": {
"$ref": "#/$defs/PanelContribution"
}
},
"commands": {
"default": [],
"description": "Command palette entries. At most 256.",
"x-orca-since": "1.4.160",
"maxItems": 256,
"type": "array",
"items": {
"$ref": "#/$defs/CommandContribution"
}
},
"events": {
"default": [],
"description": "Events delivered to the plugin worker. At most 5.",
"x-orca-since": "1.4.160",
"maxItems": 5,
"type": "array",
"items": {
"$ref": "#/$defs/EventContribution"
}
},
"hooks": {
"default": [],
"description": "Hooks the worker runs before or after Orca acts; Orca waits only on plugins that list one. At most 8.",
"x-orca-since": "1.4.248",
"maxItems": 8,
"type": "array",
"items": {
"$ref": "#/$defs/HookContribution"
}
},
"languagePacks": {
"default": [],
"description": "Interface translations. At most 16.",
"x-orca-since": "1.4.160",
"maxItems": 16,
"type": "array",
"items": {
"$ref": "#/$defs/LanguagePackContribution"
}
},
"keybindings": {
"description": "Keyboard shortcuts for contributed commands. At most 256.",
"x-orca-since": "1.4.160",
"maxItems": 256,
"type": "array",
"items": {
"$ref": "#/$defs/KeybindingContribution"
}
},
"vmRecipes": {
"default": [],
"description": "Virtual machine environment recipes. At most 64.",
"x-orca-since": "1.4.160",
"maxItems": 64,
"type": "array",
"items": {
"$ref": "#/$defs/VmRecipeContribution"
}
},
"themes": {
"default": [],
"description": "App color themes. At most 64.",
"x-orca-since": "1.4.245",
"maxItems": 64,
"type": "array",
"items": {
"$ref": "#/$defs/ThemeContribution"
}
},
"terminalThemes": {
"default": [],
"description": "Terminal ANSI palettes. At most 64.",
"x-orca-since": "1.4.245",
"maxItems": 64,
"type": "array",
"items": {
"$ref": "#/$defs/ThemeContribution"
}
},
"iconThemes": {
"default": [],
"description": "File icon themes. At most 32.",
"x-orca-since": "1.4.245",
"maxItems": 32,
"type": "array",
"items": {
"$ref": "#/$defs/ThemeContribution"
}
},
"fonts": {
"default": [],
"description": "Font families for the terminal, editor and interface font pickers. At most 8.",
"x-orca-since": "1.4.253",
"maxItems": 8,
"type": "array",
"items": {
"$ref": "#/$defs/FontContribution"
}
},
"syntaxes": {
"default": [],
"description": "Syntax highlighting for editor languages. At most 16.",
"x-orca-since": "1.4.245",
"maxItems": 16,
"type": "array",
"items": {
"$ref": "#/$defs/SyntaxContribution"
}
},
"customEditors": {
"default": [],
"description": "Editors that open files of given types in the editor tab. At most 16.",
"x-orca-since": "1.4.245",
"maxItems": 16,
"type": "array",
"items": {
"$ref": "#/$defs/CustomEditorContribution"
}
},
"newFiles": {
"default": [],
"description": "Untitled files the user can create from the + menu and the command palette. At most 16.",
"x-orca-since": "1.4.245",
"maxItems": 16,
"type": "array",
"items": {
"$ref": "#/$defs/NewFileContribution"
}
},
"settings": {
"default": [],
"description": "Settings Orca shows under the plugin in Settings; code reads them with `settings.get` (`settings:own`). At most 64.",
"x-orca-since": "1.4.246",
"maxItems": 64,
"type": "array",
"items": {
"$ref": "#/$defs/SettingContribution"
}
},
"statusBarItems": {
"default": [],
"description": "Items in the status bar; pressing one runs its `command`, and a worker changes them with `statusBar.update`. With `main`, the worker runs for as long as the plugin is enabled. At most 8.",
"x-orca-since": "1.4.248",
"maxItems": 8,
"type": "array",
"items": {
"$ref": "#/$defs/StatusBarItemContribution"
}
},
"agentHarnesses": {
"description": "Reserved for coding-agent harness definitions; must be empty until their format is defined.",
"x-orca-since": "1.4.245",
"maxItems": 0,
"type": "array",
"items": {}
},
"skills": {
"description": "Reserved for agent skills; must be empty until their format is defined.",
"x-orca-since": "1.4.245",
"maxItems": 0,
"type": "array",
"items": {}
},
"mcpServers": {
"description": "Reserved for MCP server definitions; must be empty until their format is defined.",
"x-orca-since": "1.4.245",
"maxItems": 0,
"type": "array",
"items": {}
},
"taskSources": {
"description": "Reserved for task sources; must be empty until their format is defined.",
"x-orca-since": "1.4.245",
"maxItems": 0,
"type": "array",
"items": {}
},
"connections": {
"description": "Reserved for account connections; must be empty until their format is defined.",
"x-orca-since": "1.4.245",
"maxItems": 0,
"type": "array",
"items": {}
},
"sidebarCards": {
"description": "Reserved for sidebar cards; must be empty until their format is defined.",
"x-orca-since": "1.4.245",
"maxItems": 0,
"type": "array",
"items": {}
}
},
"additionalProperties": false
},
"capabilities": {
"default": [],
"description": "Host APIs the plugin asks the user to grant. At most 32.",
"x-orca-since": "1.4.160",
"maxItems": 32,
"type": "array",
"items": {
"$ref": "#/$defs/Capability"
}
},
"cover": {
"description": "Wide image at the top of the plugin page.",
"x-orca-since": "1.4.245",
"type": "object",
"properties": {
"path": {
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$",
"description": "Cover image shown on the plugin page, 16:10 recommended (1600×1000). PNG, JPEG, WEBP, static, at least 800×500, at most 1024 KB. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.245",
"examples": [
"images/cover.png"
]
},
"alt": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "What the image shows, for screen readers. Required.",
"x-orca-since": "1.4.245",
"examples": [
"The Dusk theme on a terminal"
]
}
},
"required": [
"path",
"alt"
],
"additionalProperties": false
},
"screenshots": {
"description": "Screenshots for the plugin page, at most 6. All images together may be at most 8 MB.",
"x-orca-since": "1.4.245",
"maxItems": 6,
"type": "array",
"items": {
"$ref": "#/$defs/Screenshot"
}
},
"pluginApi": {
"description": "Major version of the plugin host API this plugin targets. Optional (defaults to 1), and refused on `data` and `declarative` plugins, which never call it.",
"x-orca-since": "1.4.160",
"type": "number",
"const": 1
}
},
"required": [
"manifestVersion",
"execution",
"id",
"name",
"version",
"engines"
],
"additionalProperties": false,
"$defs": {
"PanelContribution": {
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
"description": "Panel id, unique among this plugin's panels. The reserved names `constructor` and `prototype` are refused.",
"x-orca-since": "1.4.160",
"examples": [
"dashboard"
]
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Title shown on the panel tab and its tooltip.",
"x-orca-since": "1.4.160",
"examples": [
"Dashboard"
]
},
"icon": {
"description": "Icon shown in the right-sidebar activity bar. Defaults to `plug`.",
"x-orca-since": "1.4.160",
"examples": [
"database"
],
"x-orca-enum-since": {
"add": "1.4.246",
"remove": "1.4.246",
"delete": "1.4.246",
"edit": "1.4.246",
"refresh": "1.4.246",
"search": "1.4.246",
"settings": "1.4.246",
"check": "1.4.246",
"close": "1.4.246",
"info": "1.4.246",
"warning": "1.4.246",
"error": "1.4.246",
"open-external": "1.4.246",
"copy": "1.4.246",
"download": "1.4.246",
"upload": "1.4.246",
"play": "1.4.246",
"pause": "1.4.246",
"stop": "1.4.246",
"more": "1.4.246",
"expand": "1.4.246",
"collapse": "1.4.246",
"next": "1.4.246",
"filter": "1.4.246",
"branch": "1.4.246",
"file": "1.4.246",
"agent": "1.4.246",
"link": "1.4.246"
},
"type": "string",
"enum": [
"activity",
"bar-chart-3",
"bell",
"blocks",
"book",
"bot",
"bug",
"calendar",
"cloud",
"code",
"database",
"file-text",
"flag",
"folder",
"gauge",
"globe",
"hammer",
"layers",
"lightbulb",
"package",
"plug",
"puzzle",
"rocket",
"star",
"terminal",
"wrench",
"zap",
"add",
"remove",
"delete",
"edit",
"refresh",
"search",
"settings",
"check",
"close",
"info",
"warning",
"error",
"open-external",
"copy",
"download",
"upload",
"play",
"pause",
"stop",
"more",
"expand",
"collapse",
"next",
"filter",
"branch",
"file",
"agent",
"link"
]
},
"entry": {
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$",
"description": "What the panel runs: an HTML page for `ui: \"html\"`, a `.js`/`.mjs` module for `ui: \"components\"`. Either may instead be a `.ts`/`.tsx`/`.mts`/`.jsx` file, which Orca transpiles when it loads (needs `engines.orca` `>=1.4.246`; an `html` panel then gets a generated page around it). It is trusted code: install panels you trust. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.160",
"examples": [
"dist/panel.html"
]
},
"ui": {
"description": "How the panel draws its UI. `html` (default) shows `entry` as a web page in an isolated frame; `components` runs `entry` as a hidden module and Orca draws the component tree it returns with its own controls.",
"x-orca-since": "1.4.246",
"examples": [
"components"
],
"type": "string",
"enum": [
"html",
"components"
]
}
},
"required": [
"id",
"title",
"entry"
],
"additionalProperties": false,
"description": "A sidebar panel. Requires the `sandboxed-ui` execution profile or higher."
},
"CommandContribution": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"pattern": "^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$",
"description": "Command id, unique among this plugin's commands. Dotted namespaces are allowed.",
"x-orca-since": "1.4.160",
"examples": [
"jupyter.restartKernel"
]
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Title shown in the command palette.",
"x-orca-since": "1.4.160",
"examples": [
"Restart kernel"
]
},
"when": {
"description": "Where the command is available. `workspace` hides it when no workspace is active. Defaults to `global`.",
"x-orca-since": "1.4.160",
"x-orca-enum-since": {
"global": "1.4.160",
"workspace": "1.4.245"
},
"type": "string",
"enum": [
"global",
"workspace"
]
},
"action": {
"description": "Built-in Orca action this command runs. A command with an action is declarative and never starts the plugin worker; one without needs `main`.",
"x-orca-since": "1.4.160",
"examples": [
"view.tasks"
],
"enum": [
"worktree.history.back",
"worktree.history.forward",
"sidebar.left.toggle",
"sidebar.sleepingWorkspaces.toggle",
"floatingWorkspace.maximize",
"tab.rename",
"workspace.rename",
"workspace.openBoard",
"view.tasks",
"sidebar.right.toggle",
"sidebar.explorer.toggle",
"sidebar.search.toggle",
"sidebar.sourceControl.toggle",
"sidebar.checks.toggle",
"sidebar.ports.toggle"
],
"x-orca-enum-since": {
"worktree.history.back": "1.4.160",
"worktree.history.forward": "1.4.160",
"sidebar.left.toggle": "1.4.160",
"sidebar.sleepingWorkspaces.toggle": "1.4.160",
"floatingWorkspace.maximize": "1.4.160",
"tab.rename": "1.4.160",
"workspace.rename": "1.4.160",
"workspace.openBoard": "1.4.160",
"view.tasks": "1.4.160",
"sidebar.right.toggle": "1.4.160",
"sidebar.explorer.toggle": "1.4.160",
"sidebar.search.toggle": "1.4.160",
"sidebar.sourceControl.toggle": "1.4.160",
"sidebar.checks.toggle": "1.4.160",
"sidebar.ports.toggle": "1.4.160"
},
"type": "string",
"minLength": 1,
"maxLength": 256,
"pattern": "^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$"
},
"replaces": {
"description": "Built-in Orca action this worker command runs in place of, from its shortcut, the palette or a menu. To also run Orca’s own, the command calls `commands.run` with the action (`workspace:write`); that never reaches a replacement. If the worker fails or takes over 2 s, Orca runs its own. The person sees it before approving and can turn it off in Settings; when two plugins replace one action, the one installed first does.",
"x-orca-since": "1.4.248",
"examples": [
"view.tasks"
],
"enum": [
"worktree.history.back",
"worktree.history.forward",
"sidebar.left.toggle",
"sidebar.sleepingWorkspaces.toggle",
"floatingWorkspace.maximize",
"tab.rename",
"workspace.rename",
"workspace.openBoard",
"view.tasks",
"sidebar.right.toggle",
"sidebar.explorer.toggle",
"sidebar.search.toggle",
"sidebar.sourceControl.toggle",
"sidebar.checks.toggle",
"sidebar.ports.toggle"
],
"type": "string",
"minLength": 1,
"maxLength": 256,
"pattern": "^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$"
}
},
"required": [
"id",
"title"
],
"additionalProperties": false,
"description": "A command palette entry. Requires the `declarative` execution profile or higher."
},
"EventContribution": {
"type": "object",
"properties": {
"on": {
"type": "string",
"enum": [
"workspace.created",
"workspace.removed",
"agent.status.changed",
"workspace.changed",
"editor.typography.changed"
],
"description": "Event delivered to the plugin worker.",
"x-orca-since": "1.4.160",
"x-orca-enum-since": {
"workspace.created": "1.4.245",
"workspace.removed": "1.4.245",
"agent.status.changed": "1.4.160",
"workspace.changed": "1.4.246",
"editor.typography.changed": "1.4.256"
}
}
},
"required": [
"on"
],
"additionalProperties": false,
"description": "An event subscription. Requires `main`, the `trusted-worker` execution profile and the capability of the event's domain: `workspace:read` for workspace events, `agent:read` for agent events. Editor events need no capability."
},
"HookContribution": {
"type": "object",
"properties": {
"event": {
"type": "string",
"enum": [
"terminal.send",
"workspace.create.before",
"workspace.create.after",
"agent.launch.before",
"agent.prompt.before",
"agent.tool.before",
"agent.tool.after",
"editor.save.before"
],
"description": "Hook the worker handles with `orca.hooks.on`.",
"x-orca-since": "1.4.248",
"x-orca-enum-since": {
"terminal.send": "1.4.248",
"workspace.create.before": "1.4.248",
"workspace.create.after": "1.4.248",
"agent.launch.before": "1.4.248",
"agent.prompt.before": "1.4.248",
"agent.tool.before": "1.4.248",
"agent.tool.after": "1.4.248",
"editor.save.before": "1.4.248"
}
},
"onError": {
"description": "What Orca does when this plugin's hook throws, times out, crashes or does not start: `pass` (the default) carries on as if it passed; `deny` refuses the action, naming the plugin, so a guard fails closed. Ignored for hooks that only observe.",
"x-orca-since": "1.4.248",
"type": "string",
"enum": [
"pass",
"deny"
]
}
},
"required": [
"event"
],
"additionalProperties": false,
"description": "A hook Orca runs through the worker before (or after) it acts. Requires `main` and the `trusted-worker` execution profile."
},
"LanguagePackContribution": {
"type": "object",
"properties": {
"locale": {
"type": "string",
"minLength": 2,
"maxLength": 35,
"pattern": "^[A-Za-z]{2,3}(?:-[A-Za-z0-9]{2,8})*$",
"description": "BCP 47 locale the pack translates Orca into. Each locale appears once, ignoring case.",
"x-orca-since": "1.4.160",
"examples": [
"pt-BR"
]
},
"path": {
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$",
"description": "JSON file of translated interface strings. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.160",
"examples": [
"locales/pt-BR.json"
]
},
"displayName": {
"description": "Native-language name for the Settings picker. Omitted packs show `{locale} — {pluginKey}`.",
"x-orca-since": "1.4.245",
"examples": [
"Português (Brasil)"
],
"type": "string",
"minLength": 1,
"maxLength": 80
}
},
"required": [
"locale",
"path"
],
"additionalProperties": false,
"description": "An interface translation."
},
"KeybindingContribution": {
"type": "object",
"properties": {
"command": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"pattern": "^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$",
"description": "Id of a command this plugin contributes in `contributes.commands`.",
"x-orca-since": "1.4.160",
"examples": [
"jupyter.restartKernel"
]
},
"key": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Key chord Orca recognizes, such as `Mod+Shift+K`. `Mod` is Cmd on macOS and Ctrl elsewhere. Each chord may be bound once on every platform.",
"x-orca-since": "1.4.160",
"examples": [
"Mod+Shift+K"
]
},
"when": {
"description": "Where the shortcut is active; must match its command's `when`.",
"x-orca-since": "1.4.160",
"x-orca-enum-since": {
"global": "1.4.160",
"workspace": "1.4.245"
},
"type": "string",
"enum": [
"global",
"workspace"
]
}
},
"required": [
"command",
"key"
],
"additionalProperties": false,
"description": "A keyboard shortcut for a command."
},
"VmRecipeContribution": {
"type": "object",
"properties": {
"path": {
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$",
"description": "JSON environment recipe file, listed once. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.160",
"examples": [
"recipes/ubuntu.json"
]
}
},
"required": [
"path"
],
"additionalProperties": false,
"description": "A virtual machine environment recipe."
},
"ThemeContribution": {
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
"description": "Theme id, unique within its family in this plugin. The reserved names `constructor` and `prototype` are refused.",
"x-orca-since": "1.4.245",
"examples": [
"dusk"
]
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Name shown in the theme picker.",
"x-orca-since": "1.4.245",
"examples": [
"Dusk"
]
},
"path": {
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$",
"description": "JSON theme file, at most 16 KiB. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.245",
"examples": [
"themes/dusk.json"
]
}
},
"required": [
"id",
"title",
"path"
],
"additionalProperties": false,
"description": "A titled theme file."
},
"FontContribution": {
"type": "object",
"properties": {
"family": {
"type": "string",
"pattern": "^[A-Za-z0-9](?:[A-Za-z0-9 _.-]{0,46}[A-Za-z0-9])?$",
"description": "Family name shown in the font pickers. Orca adds the plugin id, so a plugin font never replaces an installed or built-in font of the same name.",
"x-orca-since": "1.4.253",
"examples": [
"Geist"
]
},
"faces": {
"minItems": 1,
"maxItems": 8,
"type": "array",
"items": {
"$ref": "#/$defs/FontFaceContribution"
},
"description": "The family's files, at most 8. All of a plugin's font files together may be at most 8 MB.",
"x-orca-since": "1.4.253"
}
},
"required": [
"family",
"faces"
],
"additionalProperties": false,
"description": "A font family the user can pick for the terminal, editor or interface. It applies only once picked."
},
"FontFaceContribution": {
"type": "object",
"properties": {
"path": {
"type": "string",
"minLength": 1,
"maxLength": 1024,
"allOf": [
{
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$"
},
{
"pattern": "\\.woff2?$"
}
],
"description": "WOFF or WOFF2 file, at most 2 MB; its first bytes must match its extension. TTF, OTF and font collections are refused. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.253",
"examples": [
"fonts/Geist-Variable.woff2"
]
},
"weight": {
"description": "CSS weight this file draws, or a range for a variable font. Defaults to `400`.",
"x-orca-since": "1.4.253",
"examples": [
"400",
"100 900"
],
"type": "string",
"pattern": "^(?:[1-9]\\d{0,2}|1000)(?: (?:[1-9]\\d{0,2}|1000))?$"
},
"style": {
"description": "Whether this file is the italic face. Defaults to `normal`.",
"x-orca-since": "1.4.253",
"type": "string",
"enum": [
"normal",
"italic"
]
}
},
"required": [
"path"
],
"additionalProperties": false,
"description": "One file of a font family."
},
"SyntaxContribution": {
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
"description": "Language id, unique among this plugin's syntaxes. The reserved names `constructor` and `prototype` are refused.",
"x-orca-since": "1.4.245",
"examples": [
"gleam"
]
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Language name shown in the editor.",
"x-orca-since": "1.4.245",
"examples": [
"Gleam"
]
},
"scopeName": {
"type": "string",
"maxLength": 128,
"pattern": "^[A-Za-z][A-Za-z0-9_-]*(?:\\.[A-Za-z0-9_-]+)+$",
"description": "The grammar's root TextMate scope, unique among this plugin's syntaxes.",
"x-orca-since": "1.4.245",
"examples": [
"source.gleam"
]
},
"path": {
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$",
"description": "TextMate grammar JSON file. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.245",
"examples": [
"syntaxes/gleam.tmLanguage.json"
]
},
"configuration": {
"description": "Language configuration JSON file: comments, brackets and auto-closing pairs. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.245",
"examples": [
"syntaxes/language-configuration.json"
],
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$"
},
"extensions": {
"default": [],
"description": "File-name suffixes, with the dot, this language opens, ignoring case. A longer suffix such as `.excalidraw.json` wins over a shorter one, and a file named only the suffix never matches. At most 32.",
"x-orca-since": "1.4.245",
"examples": [
[
".gleam"
]
],
"maxItems": 32,
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"pattern": "^\\.[A-Za-z0-9_+-]+(?:\\.[A-Za-z0-9_+-]+)*$"
}
},
"filenames": {
"default": [],
"description": "Exact file names this language opens, ignoring case; a name beats any extension. Names must be portable: no path separators, `.`, `..` or characters Windows forbids. At most 32.",
"x-orca-since": "1.4.245",
"examples": [
[
"gleam.toml"
]
],
"maxItems": 32,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 128
}
}
},
"required": [
"id",
"title",
"scopeName",
"path"
],
"additionalProperties": false,
"description": "Syntax highlighting for one language."
},
"CustomEditorContribution": {
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
"description": "Editor id, unique among this plugin's custom editors. The reserved names `constructor` and `prototype` are refused.",
"x-orca-since": "1.4.245",
"examples": [
"excalidraw"
]
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "Name shown in the editor's view toggle beside Source, and on the tab of a file it opens.",
"x-orca-since": "1.4.245",
"examples": [
"Excalidraw"
]
},
"icon": {
"description": "Square image shown on the tab of a file this editor opens. Defaults to the plugin icon. PNG, WEBP, static, at least 128×128, square, at most 256 KB. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.245",
"examples": [
"images/editor-icon.png"
],
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$"
},
"extensions": {
"default": [],
"description": "File-name suffixes, with the dot, this editor opens, ignoring case. A longer suffix such as `.excalidraw.json` wins over a shorter one, and a file named only the suffix never matches. At most 32.",
"x-orca-since": "1.4.245",
"examples": [
[
".excalidraw",
".excalidraw.json"
]
],
"maxItems": 32,
"type": "array",
"items": {
"type": "string",
"maxLength": 64,
"pattern": "^\\.[A-Za-z0-9_+-]+(?:\\.[A-Za-z0-9_+-]+)*$"
}
},
"filenames": {
"default": [],
"description": "Exact file names this editor opens, ignoring case; a name beats any extension. Names must be portable: no path separators, `.`, `..` or characters Windows forbids. At most 32.",
"x-orca-since": "1.4.245",
"examples": [
[]
],
"maxItems": 32,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 128
}
},
"entry": {
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$",
"description": "HTML file rendered inside an editor frame, like a panel, or a `.ts`/`.tsx` module that Orca transpiles and loads in a generated page (needs `engines.orca` `>=1.4.246`). It receives the open document and posts edits back; it never gets a file path or file system. It is trusted code: install editors you trust. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.245",
"examples": [
"editor/index.html"
]
},
"priority": {
"description": "`default` (the default) opens matching files in this editor; `option` only offers it in the view toggle, so files open in Source. Files Orca opens itself (such as `.json`, `.ts`, `.md`, `.csv`, `.yaml`, lockfiles and `.env` files) always behave as `option`; a longer suffix such as `.sketch.json` is not one of them and opens by default.",
"x-orca-since": "1.4.245",
"examples": [
"default"
],
"type": "string",
"enum": [
"default",
"option"
]
},
"contentKind": {
"description": "`text` (the default) sends the file as text and accepts full-text edits. `bytes` sends the file's raw bytes, for binary formats such as spreadsheets, and accepts full-byte edits.",
"x-orca-since": "1.4.245",
"examples": [
"bytes"
],
"type": "string",
"enum": [
"text",
"bytes"
]
},
"frame": {
"description": "`any` (the default) runs in whatever frame the client gives. `isolated` runs only in the desktop app's isolated frame, never the browser-client fallback: browser clients, and desktop with isolated frames switched off, open the file in Source with a notice that the editor needs the Orca desktop app.",
"x-orca-since": "1.4.248",
"examples": [
"isolated"
],
"type": "string",
"enum": [
"any",
"isolated"
]
}
},
"required": [
"id",
"title",
"entry"
],
"additionalProperties": false,
"description": "An editor for the listed files, shown in the editor tab beside Source. It must list at least one extension or file name. Requires the `sandboxed-ui` execution profile or higher."
},
"NewFileContribution": {
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
"description": "New-file id, unique among this plugin's new files. The reserved names `constructor` and `prototype` are refused.",
"x-orca-since": "1.4.245",
"examples": [
"drawing"
]
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"description": "Menu item shown in the tab bar + menu and the command palette.",
"x-orca-since": "1.4.245",
"examples": [
"New Excalidraw drawing"
]
},
"extension": {
"type": "string",
"maxLength": 64,
"pattern": "^\\.[A-Za-z0-9_+-]+(?:\\.[A-Za-z0-9_+-]+)*$",
"description": "Suffix, with the dot, of the untitled file it creates. The file opens in whatever editor takes that suffix, such as a custom editor from this plugin.",
"x-orca-since": "1.4.245",
"examples": [
".excalidraw"
]
},
"template": {
"description": "UTF-8 file copied into the new file, at most 256 KB. Without one the file starts empty. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.245",
"examples": [
"templates/empty.excalidraw"
],
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$"
},
"icon": {
"description": "Square image shown beside the menu item. Defaults to the plugin icon. PNG, WEBP, static, at least 128×128, square, at most 256 KB. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.245",
"examples": [
"images/editor-icon.png"
],
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$"
}
},
"required": [
"id",
"title",
"extension"
],
"additionalProperties": false,
"description": "A kind of untitled file the user can create from the tab bar + menu or the command palette, in the active workspace."
},
"SettingContribution": {
"type": "object",
"properties": {
"key": {
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,63}$",
"description": "Key code reads and writes, unique in this plugin.",
"x-orca-since": "1.4.246",
"examples": [
"apiUrl"
]
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "Label shown in Settings.",
"x-orca-since": "1.4.246",
"examples": [
"Server URL"
]
},
"description": {
"description": "Help text shown under the label.",
"x-orca-since": "1.4.246",
"type": "string",
"maxLength": 1000
},
"type": {
"type": "string",
"enum": [
"string",
"number",
"integer",
"boolean"
],
"description": "JSON Schema type of the value.",
"x-orca-since": "1.4.246",
"examples": [
"string"
]
},
"default": {
"description": "Value read while the person has not set one.",
"x-orca-since": "1.4.246",
"anyOf": [
{
"type": "string",
"maxLength": 10000
},
{
"type": "number"
},
{
"type": "boolean"
}
]
},
"enum": {
"description": "Allowed values; Settings shows a picker.",
"x-orca-since": "1.4.246",
"minItems": 1,
"maxItems": 64,
"type": "array",
"items": {
"anyOf": [
{
"type": "string",
"maxLength": 256
},
{
"type": "number"
}
]
}
},
"enumLabels": {
"description": "Picker labels, one per `enum` value.",
"x-orca-since": "1.4.246",
"maxItems": 64,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 120
}
},
"minimum": {
"description": "Numbers: smallest value.",
"x-orca-since": "1.4.246",
"type": "number"
},
"maximum": {
"description": "Numbers: largest value.",
"x-orca-since": "1.4.246",
"type": "number"
},
"maxLength": {
"description": "Strings: most characters.",
"x-orca-since": "1.4.246",
"type": "integer",
"minimum": 1,
"maximum": 10000
},
"multiline": {
"description": "Strings: a multi-line text box.",
"x-orca-since": "1.4.246",
"type": "boolean"
},
"placeholder": {
"description": "Strings and numbers: hint shown while empty.",
"x-orca-since": "1.4.246",
"type": "string",
"maxLength": 120
}
},
"required": [
"key",
"title",
"type"
],
"additionalProperties": false,
"description": "A setting shown under the plugin in Settings. Requires the `settings:own` capability, which is also how code reads it."
},
"StatusBarItemContribution": {
"type": "object",
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
"description": "Item id, unique among this plugin's status bar items; `statusBar.update` names it.",
"x-orca-since": "1.4.248",
"examples": [
"blocked-count"
]
},
"text": {
"description": "Short label shown in the status bar.",
"x-orca-since": "1.4.248",
"examples": [
"3 blocked"
],
"type": "string",
"maxLength": 64
},
"icon": {
"description": "Icon shown before the text, from the panel icon set.",
"x-orca-since": "1.4.248",
"examples": [
"bell"
],
"type": "string",
"enum": [
"activity",
"bar-chart-3",
"bell",
"blocks",
"book",
"bot",
"bug",
"calendar",
"cloud",
"code",
"database",
"file-text",
"flag",
"folder",
"gauge",
"globe",
"hammer",
"layers",
"lightbulb",
"package",
"plug",
"puzzle",
"rocket",
"star",
"terminal",
"wrench",
"zap",
"add",
"remove",
"delete",
"edit",
"refresh",
"search",
"settings",
"check",
"close",
"info",
"warning",
"error",
"open-external",
"copy",
"download",
"upload",
"play",
"pause",
"stop",
"more",
"expand",
"collapse",
"next",
"filter",
"branch",
"file",
"agent",
"link"
]
},
"tone": {
"description": "Colour of the item. Defaults to `neutral`.",
"x-orca-since": "1.4.248",
"examples": [
"warning"
],
"type": "string",
"enum": [
"neutral",
"accent",
"success",
"warning",
"danger"
]
},
"tooltip": {
"description": "Shown on hover. Defaults to the plugin name.",
"x-orca-since": "1.4.248",
"type": "string",
"maxLength": 256
},
"command": {
"description": "Id of a command this plugin contributes in `contributes.commands`, run when the item is pressed.",
"x-orca-since": "1.4.248",
"examples": [
"guard.showLog"
],
"type": "string",
"minLength": 1,
"maxLength": 256,
"pattern": "^[A-Za-z0-9]+(?:[._-][A-Za-z0-9]+)*$"
}
},
"required": [
"id"
],
"additionalProperties": false,
"description": "An item in the status bar. Requires the `declarative` profile; a `trusted-worker` can change it with `statusBar.update`."
},
"Capability": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"workspace:read",
"workspace:write",
"agent:read",
"agent:launch",
"terminal:send",
"terminal:read",
"notifications:show",
"storage:own",
"secrets:own",
"settings:own",
"appearance:write",
"workspace:create",
"automation:read",
"automation:write",
"history:read"
],
"description": "Capability granted on user consent.",
"x-orca-since": "1.4.160",
"x-orca-enum-since": {
"workspace:read": "1.4.160",
"workspace:write": "1.4.248",
"agent:read": "1.4.245",
"agent:launch": "1.4.248",
"terminal:send": "1.4.160",
"terminal:read": "1.4.248",
"notifications:show": "1.4.160",
"storage:own": "1.4.245",
"secrets:own": "1.4.245",
"settings:own": "1.4.160",
"appearance:write": "1.4.249",
"workspace:create": "1.4.258",
"automation:read": "1.4.258",
"automation:write": "1.4.258",
"history:read": "1.4.258"
}
}
},
"required": [
"kind"
],
"additionalProperties": false,
"description": "A host API the plugin may call once the user consents."
},
"Screenshot": {
"type": "object",
"properties": {
"path": {
"type": "string",
"minLength": 1,
"maxLength": 1024,
"pattern": "^[^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ](?:[\\\\/][^<>:\"|?*\\x00-\\x1f\\\\/]*[^<>:\"|?*\\x00-\\x1f\\\\/. ])*$",
"description": "Screenshot, 16:10 recommended (up to 2560×1600). PNG, JPEG, WEBP, static, at least 1280×800, at most 1536 KB. Relative to the plugin root; `..` segments and Windows device names such as `CON` are refused.",
"x-orca-since": "1.4.245",
"examples": [
"images/editor.png"
]
},
"alt": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "What the image shows, for screen readers. Required.",
"x-orca-since": "1.4.245",
"examples": [
"The Dusk theme on a terminal"
]
},
"caption": {
"description": "Short caption under the screenshot.",
"x-orca-since": "1.4.245",
"examples": [
"Gleam in the editor"
],
"type": "string",
"minLength": 1,
"maxLength": 120
},
"theme": {
"description": "Show this screenshot only with a light or dark Orca theme.",
"x-orca-since": "1.4.245",
"type": "string",
"enum": [
"light",
"dark"
]
}
},
"required": [
"path",
"alt"
],
"additionalProperties": false,
"description": "One screenshot of the plugin in use."
}
}
}