diff --git a/.cursor-plugin/plugin.json b/.cursor-plugin/plugin.json new file mode 100644 index 0000000000..dc8d3dbc45 --- /dev/null +++ b/.cursor-plugin/plugin.json @@ -0,0 +1,32 @@ +{ + "name": "uipath", + "displayName": "UiPath", + "version": "1.200.0", + "description": "UiPath plugin for Cursor — skills for building, running, testing, and deploying UiPath automations, agents, coded apps, and platform operations.", + "author": { + "name": "UiPath", + "email": "support@uipath.com" + }, + "homepage": "https://github.com/UiPath/skills", + "repository": "https://github.com/UiPath/skills", + "license": "MIT", + "keywords": [ + "uipath", + "automation", + "rpa", + "workflows", + "skills", + "code", + "xaml", + "studio", + "ui-automation", + "ui-testing", + "desktop", + "browser", + "coded-apps", + "coded-agents", + "agent", + "troubleshoot" + ], + "logo": "assets/uipath-icon.png" +} diff --git a/assets/uipath-icon.png b/assets/uipath-icon.png new file mode 100644 index 0000000000..ae7d5d0ecd Binary files /dev/null and b/assets/uipath-icon.png differ diff --git a/commands/install-permissions.md b/commands/install-permissions.md index 26a72b7367..5b36e92180 100644 --- a/commands/install-permissions.md +++ b/commands/install-permissions.md @@ -1,4 +1,5 @@ --- +name: install-permissions description: Install a curated Claude Code allowlist for safe `uip` subcommands so the agent is not prompted on every command. --- diff --git a/docs/RELEASE.md b/docs/RELEASE.md index 4815b351aa..9108f1b447 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -12,6 +12,7 @@ The whole skills repo is published as an npm package, **`@uipath/skills`**, vers | `.claude-plugin/plugin.json` | `version` | Claude Code plugin version — always equals `package.json`'s base `M.N.P` (pre-release suffix stripped) — the canonical plugin version | | `.claude-plugin/marketplace.json` | `plugins[0].version` | Always equals `plugin.json` `version` | | `.codex-plugin/plugin.json` | `version` | Codex plugin version — always equals `plugin.json` `version` | +| `.cursor-plugin/plugin.json` | `version` | Cursor plugin version — always equals `plugin.json` `version` | ### One version line @@ -22,9 +23,9 @@ All channels carry `package.json`'s version; the pre-release channels (`dev`, `p | npm `latest` | npmjs | `M.N.` | per stable release — what the CLI pins | | npm `preview` | npmjs | `M.N.-preview.` | per merge to `release/v*`, or preview dispatch (stamp never committed) | | npm `dev` | GitHub Packages | `M.N.-dev.` | per merge to `main` (stamp never committed) | -| plugin manifests (`.claude-plugin/plugin.json`, `marketplace.json`, `.codex-plugin/plugin.json`) | — | `M.N.` (base version, no pre-release suffix) | per `package.json` bump — drives Claude Code / Codex plugin auto-update | +| plugin manifests (`.claude-plugin/plugin.json`, `marketplace.json`, `.codex-plugin/plugin.json`, `.cursor-plugin/plugin.json`) | — | `M.N.` (base version, no pre-release suffix) | per `package.json` bump — drives Claude Code / Codex / Cursor plugin auto-update | -`sync-version.mjs` enforces the line: the plugin version always equals `package.json`'s base `M.N.P` — there is **no independent plugin patch counter**. It **refuses to downgrade** (plugin auto-update never goes backwards, so a reverted `package.json` would freeze users), and it strips pre-release suffixes so the `dev`/`preview` stamps from `publish.yml` never land in the plugin manifests. The marketplace and Codex versions must always equal the plugin version exactly. `--check` fails on any violation, so a hand-bumped plugin manifest cannot drift the line. To bump the plugin version, bump `package.json` and run the sync — that is the only lever. +`sync-version.mjs` enforces the line: the plugin version always equals `package.json`'s base `M.N.P` — there is **no independent plugin patch counter**. It **refuses to downgrade** (plugin auto-update never goes backwards, so a reverted `package.json` would freeze users), and it strips pre-release suffixes so the `dev`/`preview` stamps from `publish.yml` never land in the plugin manifests. The marketplace, Codex, and Cursor versions must always equal the plugin version exactly. `--check` fails on any violation, so a hand-bumped plugin manifest cannot drift the line. To bump the plugin version, bump `package.json` and run the sync — that is the only lever. Run after any version change: diff --git a/package.json b/package.json index 45a621339d..21d44da6b3 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "hooks", "assets", ".claude-plugin", + ".cursor-plugin", "version-manifest.json", "README.md", "LICENSE", diff --git a/scripts/sync-version.mjs b/scripts/sync-version.mjs index 228d24007c..f728d4a568 100644 --- a/scripts/sync-version.mjs +++ b/scripts/sync-version.mjs @@ -9,6 +9,7 @@ * - .claude-plugin/plugin.json .version (== package.json base version) * - .claude-plugin/marketplace.json .plugins[0].version (== plugin.json) * - .codex-plugin/plugin.json .version (== plugin.json — Codex channel) + * - .cursor-plugin/plugin.json .version (== plugin.json — Cursor channel) * * `targetCli` is derived as the matching @uipath/cli minor line * (`^MAJOR.MINOR.0`). A skills release tracks the CLI minor line it ships @@ -20,13 +21,14 @@ * alpha stamp from publish.yml) are NOT propagated: plugin auto-update wants * plain versions, and the plugin channel is a git ref, not the npm tarball. * `.claude-plugin/plugin.json` is the canonical plugin version; the - * marketplace and Codex manifests mirror it. Rules enforced here: + * marketplace, Codex, and Cursor manifests mirror it. Rules enforced here: * - plugin version != package.json base version -> rewrite to the base * version (errors out if package.json's base version is BELOW the plugin * version — plugin auto-update never downgrades, so a lower version * would freeze users) - * - marketplace .plugins[0].version and .codex-plugin/plugin.json .version - * must always equal .claude-plugin/plugin.json .version + * - marketplace .plugins[0].version, .codex-plugin/plugin.json .version, + * and .cursor-plugin/plugin.json .version must always equal + * .claude-plugin/plugin.json .version * See docs/RELEASE.md. * * Usage: @@ -55,6 +57,7 @@ const PATHS = { plugin: join(ROOT, ".claude-plugin", "plugin.json"), marketplace: join(ROOT, ".claude-plugin", "marketplace.json"), codexPlugin: join(ROOT, ".codex-plugin", "plugin.json"), + cursorPlugin: join(ROOT, ".cursor-plugin", "plugin.json"), }; function readJson(p) { @@ -149,6 +152,16 @@ if (codexPlugin.version !== pluginVersion) { writes.push(() => writeJson(PATHS.codexPlugin, codexPlugin)); } +// .cursor-plugin/plugin.json — Cursor distribution channel; must equal plugin.json. +const cursorPlugin = readJson(PATHS.cursorPlugin); +if (cursorPlugin.version !== pluginVersion) { + drift.push( + `.cursor-plugin/plugin.json: ${cursorPlugin.version} -> ${pluginVersion}`, + ); + cursorPlugin.version = pluginVersion; + writes.push(() => writeJson(PATHS.cursorPlugin, cursorPlugin)); +} + if (CHECK) { if (drift.length > 0) { console.error("✗ Version drift detected (run `npm run version:sync`):");