premiere-pro-mcp 1.5.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,51 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.7.0] - 2026-08-01
10
+
11
+ ### Added
12
+
13
+ - Added six capability-gated Premiere 26.3+ UXP tools: `rename_track_uxp`,
14
+ `create_subclip_uxp`, `list_markers_uxp`, `set_source_monitor_position_uxp`,
15
+ `has_transcript_uxp`, and `export_aaf_uxp`.
16
+ - Added Adobe 26.3 coverage documentation and contract tests for the public MCP
17
+ schemas, protocol commands, and live-host verification gate.
18
+
19
+ ### Changed
20
+
21
+ - Documented the stable 26.3 baseline separately from Adobe's 26.5 beta type
22
+ declarations. Beta-only APIs are not advertised as supported.
23
+
24
+ ### Validation
25
+
26
+ - Automated contract tests validate catalog exposure, argument translation, host
27
+ capability probes, and result envelopes. A real Premiere 26.3+ host still must
28
+ validate each mutation and export before it can be called live-host verified.
29
+
30
+ ## [1.6.0] - 2026-07-31
31
+
32
+ ### Added
33
+
34
+ - Added a capability-aware UXP foundation for revisioned project inspection, verified saves,
35
+ preset-based sequence creation, OTIO/FCP XML interchange, transcript-language discovery,
36
+ Object Mask detection, and Adobe Media Encoder controls on compatible Premiere hosts.
37
+ - Added explicit UXP operation outcomes and bounded operation-ID replay protection so a client retry
38
+ does not repeat a completed command within the same panel session.
39
+
40
+ ### Changed
41
+
42
+ - Documented the 10 UXP MCP tools that become available when an authenticated local panel is
43
+ connected, including their host-version and live-verification boundaries.
44
+ - Updated the MCP SDK and Node type dependencies and GitHub Actions artifact actions.
45
+
46
+ ### Fixed
47
+
48
+ - `create_project` now rejects directory paths and verifies that Premiere switched to the exact
49
+ requested `.prproj` path before reporting success, preventing edits from continuing in a
50
+ previously open project after a failed creation attempt.
51
+ - Claude Desktop bundle packaging now invokes npm through the active Node executable so the
52
+ release build works on Windows where `npm` is exposed as a command shim.
53
+
9
54
  ## [1.5.0] - 2026-07-30
10
55
 
11
56
  ### Added
package/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  <div align="center">
2
2
 
3
- # Premiere Pro MCP Server
3
+ # Premiere Pro MCP
4
4
 
5
5
  [![MCP Toplist](https://mcptoplist.com/badge/glama%2Fleancoderkavy%2Fpremiere-pro-mcp.svg)](https://mcptoplist.com/server/glama%2Fleancoderkavy%2Fpremiere-pro-mcp)
6
6
 
7
7
  **Give AI full control over Adobe Premiere Pro.**
8
8
 
9
- 279 tools across 31 modules, 3 resources, and 4 guided workflows.
9
+ 279 core tools across 31 modules, 3 resources, and 4 guided workflows. A connected UXP host adds 16 capability-gated tools.
10
10
 
11
11
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
12
12
  [![Node.js](https://img.shields.io/badge/Node.js-20.19%2B-green.svg)](https://nodejs.org)
@@ -27,18 +27,14 @@ An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that l
27
27
  "Add the B-roll clips to V2, apply a cross dissolve between each, color correct them to match the A-roll, and export a 1080p ProRes."
28
28
  ```
29
29
 
30
- The AI handles the entire workflow through 279 tools spanning the supported ExtendScript, QE DOM, local media analysis, and safe edit-planning surfaces.
30
+ The AI handles the entire workflow through 279 core tools spanning the supported ExtendScript, QE DOM, local media analysis, and safe edit-planning surfaces. A compatible, authenticated UXP panel adds 16 documented, capability-gated workflows without replacing the production CEP bridge.
31
31
 
32
- ### What's new in 1.3.1
32
+ ### What's new in 1.7.0
33
33
 
34
- - Windows npm releases now include a verified, signed CEP ZXP and install it automatically, covering
35
- hosts that reject the raw development bundle even when `PlayerDebugMode` is enabled.
36
- - `set_sequence_frame_rate` now converts frames per second to Premiere ticks per frame and verifies
37
- the applied setting instead of assigning a numeric frame period.
38
- - `premiere-pro-mcp --diagnose-cep` checks the installed manifest, debug-key types, and recent
39
- Premiere signature failures.
40
- - TypeScript 7, Vitest 4, Zod 4, MCP SDK 1.29, Next.js 16.2, and patched transitive dependencies
41
- modernize the toolchain and remove production audit findings.
34
+ - **Six documented workflows:** compatible 26.3+ hosts can expose UXP track renaming, subclip creation, stable marker IDs, Source Monitor seeking, transcript presence checks, and AAF export.
35
+ - **Capability first:** a tool is discoverable only with the authenticated local panel; the panel's live `capabilities.get` response—not package metadata—decides whether the current host supports it.
36
+ - **Evidence boundary:** automated tests validate schemas, routing, capability declarations, transactions, and result envelopes. They do not verify a specific Premiere installation. See [Adobe UXP 26.3 coverage](docs/adobe-uxp-26.3-coverage.md) for the exact host gate and the stable-versus-beta policy.
37
+ - **Adobe-aligned validation:** the official Premiere 26.3 declarations and ESLint rules now enforce supported signatures and lock/transaction boundaries in CI.
42
38
 
43
39
  ### Added in 1.2.0
44
40
 
@@ -252,11 +248,11 @@ From a clone of this repository:
252
248
  ```bash
253
249
  codex plugin marketplace add .
254
250
  codex plugin add premiere-pro@premiere-pro-mcp
255
- npx -y premiere-pro-mcp@1.3.1 --install-cep
251
+ npx -y premiere-pro-mcp@1.7.0 --install-cep
256
252
  ```
257
253
 
258
254
  Restart Premiere Pro and start a new Codex session after installation. The plugin
259
- launches `premiere-pro-mcp@1.3.1` through `npx`; the separate CEP installation is
255
+ launches `premiere-pro-mcp@1.7.0` through `npx`; the separate CEP installation is
260
256
  required because the MCP server communicates with the running Premiere host through
261
257
  the local bridge.
262
258
 
@@ -276,7 +272,7 @@ For Claude Code, add this repository as a marketplace and install the plugin:
276
272
  Then install the Premiere bridge and start a new Claude Code session:
277
273
 
278
274
  ```bash
279
- npx -y premiere-pro-mcp@1.3.1 --install-cep
275
+ npx -y premiere-pro-mcp@1.7.0 --install-cep
280
276
  ```
281
277
 
282
278
  The Claude Code package lives in
@@ -366,7 +362,17 @@ PREMIERE_UXP_TOKEN="replace-with-a-long-random-secret" premiere-pro-mcp
366
362
 
367
363
  Enter the same token in the UXP panel. The listener binds only to `127.0.0.1:7777`, authenticates the WebSocket upgrade, requires a versioned capability handshake, correlates concurrent requests, and fails pending work on timeout or disconnect. Set `PREMIERE_UXP_PORT` to use another loopback port.
368
364
 
369
- When enabled, MCP discovery includes `get_uxp_capabilities`, `get_uxp_state`, and `export_frame_uxp`. A failed UXP command is never silently retried through CEP because the first operation may have partially succeeded.
365
+ When enabled, MCP discovery includes `get_uxp_capabilities`, `get_uxp_state`, `inspect_project_uxp`, `save_project_uxp`, `create_sequence_with_preset_uxp`, `export_interchange_uxp`, `get_transcript_languages_uxp`, `detect_object_masks_uxp`, `configure_encoder_uxp`, `export_frame_uxp`, `rename_track_uxp`, `create_subclip_uxp`, `list_markers_uxp`, `set_source_monitor_position_uxp`, `has_transcript_uxp`, and `export_aaf_uxp`. Commands are advertised only while the authenticated local UXP bridge is connected; the host capability handshake remains the authority for support in the running Premiere build. A failed UXP command is never silently retried through CEP because the first operation may have partially succeeded.
366
+
367
+ Premiere 26.2-26.3 hosts also expose documented UXP workflows for revisioned project
368
+ inspection, verified project saves, preset-based sequence creation, OTIO/FCP XML
369
+ interchange, transcript-language discovery, Object Mask detection, Adobe Media
370
+ Encoder control, track renaming, subclip creation, stable marker inspection,
371
+ Source Monitor positioning, and clip transcript detection. Mutations accept optional
372
+ idempotency keys and return explicit verification outcomes. See [the Adobe UXP 26.3
373
+ coverage matrix](docs/adobe-uxp-26.3-coverage.md) and [the UXP capability
374
+ foundation](docs/uxp-capability-foundation.md) for the command matrix and live-host
375
+ validation boundary.
370
376
 
371
377
  ---
372
378
 
@@ -410,7 +416,7 @@ The file-based IPC bridge is simple, reliable, and works across macOS and Window
410
416
 
411
417
  ---
412
418
 
413
- ## Tools (279 total; 277 under the default profile)
419
+ ## Tools (279 core total; 277 under the default profile; 293 with a connected UXP bridge)
414
420
 
415
421
  ### Discovery & Inspection (10 + 10)
416
422
 
Binary file
@@ -1,8 +1,8 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.premiere.bridge" ExtensionBundleVersion="1.5.0" ExtensionBundleName="MCP Bridge">
2
+ <ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.premiere.bridge" ExtensionBundleVersion="1.7.0" ExtensionBundleName="MCP Bridge">
3
3
  <ExtensionList>
4
- <Extension Id="com.mcp.premiere.bridge.panel" Version="1.5.0"/>
5
- <Extension Id="com.mcp.premiere.bridge.headless" Version="1.5.0"/>
4
+ <Extension Id="com.mcp.premiere.bridge.panel" Version="1.7.0"/>
5
+ <Extension Id="com.mcp.premiere.bridge.headless" Version="1.7.0"/>
6
6
  </ExtensionList>
7
7
  <ExecutionEnvironment>
8
8
  <HostList>
@@ -65,7 +65,7 @@
65
65
  <section class="update-section" aria-live="polite">
66
66
  <div class="update-copy">
67
67
  <span class="section-label">Connector updates</span>
68
- <strong id="updateTitle">Version 1.5.0</strong>
68
+ <strong id="updateTitle">Version 1.7.0</strong>
69
69
  <span id="updateDetail">Checking for updates…</span>
70
70
  </div>
71
71
  <button id="btnUpdate" class="button button-update" onclick="handleUpdateClick()" type="button" disabled>
@@ -7,7 +7,7 @@
7
7
  })(this, function () {
8
8
  "use strict";
9
9
 
10
- var CURRENT_VERSION = "1.5.0";
10
+ var CURRENT_VERSION = "1.7.0";
11
11
  var LATEST_RELEASE_API =
12
12
  "https://api.github.com/repos/leancoderkavy/premiere-pro-mcp/releases/latest";
13
13
  var RELEASES_URL =
@@ -94,6 +94,7 @@ export declare function buildAdvancedFeatureSupport(context?: AdvancedFeatureCon
94
94
  objectMask: {
95
95
  status: AdvancedFeatureStatus;
96
96
  callableThroughCurrentMcpTransport: boolean;
97
+ prerequisites: string[];
97
98
  supportedOperations: string[];
98
99
  unsupportedOperations: string[];
99
100
  userAssistedWorkflow: string;
@@ -108,12 +108,13 @@ export function buildAdvancedFeatureSupport(context = {}) {
108
108
  detection: "No documented flag safely distinguishes a generated extension from an ordinary clip.",
109
109
  },
110
110
  objectMask: {
111
- status: "user-assisted",
112
- callableThroughCurrentMcpTransport: false,
113
- supportedOperations: ["inspect ordinary effect components after a mask is created"],
114
- unsupportedOperations: ["invoke object selection", "run tracking", "identify an Object Mask artifact reliably"],
115
- userAssistedWorkflow: "Create and track the mask in Premiere, then use generic effect/property inspection where exposed.",
116
- detection: "No documented stable Object Mask identifier is exposed.",
111
+ status: "partial",
112
+ callableThroughCurrentMcpTransport: true,
113
+ prerequisites: ["Premiere Pro 26.3+", "connected UXP bridge"],
114
+ supportedOperations: ["detect whether a project or sequence contains an Object Mask"],
115
+ unsupportedOperations: ["invoke object selection", "create an Object Mask", "run tracking", "edit Object Mask parameters"],
116
+ userAssistedWorkflow: "Create and track the mask in Premiere; the MCP can then detect its presence through the documented UXP API.",
117
+ detection: "Premiere Pro 26.3+ exposes ObjectMaskUtils.hasObjectMask through the documented UXP API.",
117
118
  },
118
119
  captionTranslation: {
119
120
  status: "user-assisted",
@@ -2,6 +2,49 @@ import type { CapabilityConfig } from "./security/capabilities.js";
2
2
  import { type CatalogToolDefinition } from "./tool-capability-report.js";
3
3
  export declare const SUPPORTED_HOST_PLATFORMS: readonly ["darwin", "win32"];
4
4
  export type SupportedHostPlatform = (typeof SUPPORTED_HOST_PLATFORMS)[number];
5
+ export type AdobeUxpCoverageAvailability = "current" | "planned";
6
+ export type AdobeUxpCoverageImplementationStatus = "implemented" | "planned";
7
+ export type AdobeUxpCoverageVerificationStatus = "automated_contract_verified" | "committed_unverified" | "not_started";
8
+ export type AdobeUxpCoverageLiveHostVerificationStatus = "not_run" | "verified";
9
+ export interface AdobeUxpCoverageEntry {
10
+ id: string;
11
+ adobeApi: string[];
12
+ documentationUrls: string[];
13
+ minimumPremiereVersion: string;
14
+ backend: "uxp";
15
+ uxpCommand: string | null;
16
+ mcpTools: string[];
17
+ availability: AdobeUxpCoverageAvailability;
18
+ implementationStatus: AdobeUxpCoverageImplementationStatus;
19
+ verificationStatus: AdobeUxpCoverageVerificationStatus;
20
+ liveHostVerificationStatus: AdobeUxpCoverageLiveHostVerificationStatus;
21
+ mutatesProject: boolean;
22
+ undoable: boolean;
23
+ idempotency: "operation_id" | "operation_id_when_supported" | "not_applicable";
24
+ verificationBoundary: string;
25
+ }
26
+ export interface AdobeUxpCoverageManifest {
27
+ schemaVersion: 1;
28
+ source: {
29
+ apiPackage: "@adobe/premierepro";
30
+ apiVersion: string;
31
+ changelogUrl: string;
32
+ };
33
+ entries: AdobeUxpCoverageEntry[];
34
+ }
35
+ export interface AdobeUxpCoverageReport extends AdobeUxpCoverageManifest {
36
+ summary: {
37
+ total: number;
38
+ current: number;
39
+ planned: number;
40
+ implemented: number;
41
+ committedUnverified: number;
42
+ automatedContractVerified: number;
43
+ liveHostVerified: number;
44
+ };
45
+ }
46
+ export declare const ADOBE_UXP_COVERAGE_MANIFEST: AdobeUxpCoverageManifest;
47
+ export declare function buildAdobeUxpCoverageReport(): AdobeUxpCoverageReport;
5
48
  export declare function platformName(platform: NodeJS.Platform): string;
6
49
  export declare function buildPlatformCapabilityReport(capabilities: CapabilityConfig, platform?: NodeJS.Platform, tempDirectory?: string, toolCatalog?: Record<string, CatalogToolDefinition>): {
7
50
  schemaVersion: number;
@@ -23,7 +66,7 @@ export declare function buildPlatformCapabilityReport(capabilities: CapabilityCo
23
66
  platforms: string[];
24
67
  premiereVersions: string;
25
68
  transport: string;
26
- capabilities: ("edit" | "export" | "filesystem" | "inspect" | "unsafe-script")[];
69
+ capabilities: ("inspect" | "edit" | "export" | "filesystem" | "unsafe-script")[];
27
70
  delivery: {
28
71
  interchange: string[];
29
72
  presetValidation: boolean;
@@ -42,6 +85,7 @@ export declare function buildPlatformCapabilityReport(capabilities: CapabilityCo
42
85
  platforms: string[];
43
86
  premiereVersions: string;
44
87
  transport: string;
88
+ apiCoverage: AdobeUxpCoverageReport;
45
89
  commands: string[];
46
90
  unsupportedCommands: {
47
91
  "captions.create": string;
@@ -59,8 +103,8 @@ export declare function buildPlatformCapabilityReport(capabilities: CapabilityCo
59
103
  };
60
104
  authority: {
61
105
  source: "default" | "environment" | "explicit";
62
- enabled: ("edit" | "export" | "filesystem" | "inspect" | "unsafe-script")[];
63
- disabled: ("edit" | "export" | "filesystem" | "inspect" | "unsafe-script")[];
106
+ enabled: ("inspect" | "edit" | "export" | "filesystem" | "unsafe-script")[];
107
+ disabled: ("inspect" | "edit" | "export" | "filesystem" | "unsafe-script")[];
64
108
  };
65
109
  tools: {
66
110
  schemaVersion: number;
@@ -1,8 +1,146 @@
1
+ import { createRequire } from "node:module";
1
2
  import { tmpdir } from "node:os";
2
3
  import { join } from "node:path";
3
4
  import { buildToolCapabilityReport, } from "./tool-capability-report.js";
4
5
  export const SUPPORTED_HOST_PLATFORMS = ["darwin", "win32"];
5
6
  const ALL_CAPABILITIES = ["inspect", "edit", "export", "filesystem", "unsafe-script"];
7
+ const require = createRequire(import.meta.url);
8
+ const adobeUxpCoverage = require("./resources/adobe-uxp-coverage.json");
9
+ function asRecord(value, label) {
10
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
11
+ throw new Error(`${label} must be an object`);
12
+ }
13
+ return value;
14
+ }
15
+ function stringArray(value, label) {
16
+ if (!Array.isArray(value) || value.length === 0 || value.some((item) => typeof item !== "string" || !item)) {
17
+ throw new Error(`${label} must be a non-empty string array`);
18
+ }
19
+ return value;
20
+ }
21
+ function stringValue(value, label) {
22
+ if (typeof value !== "string" || !value)
23
+ throw new Error(`${label} must be a non-empty string`);
24
+ return value;
25
+ }
26
+ function validateDocumentationUrl(value, label) {
27
+ let url;
28
+ try {
29
+ url = new URL(value);
30
+ }
31
+ catch {
32
+ throw new Error(`${label} must be a valid URL`);
33
+ }
34
+ if (url.protocol !== "https:" || url.hostname !== "developer.adobe.com" || !url.pathname.startsWith("/premiere-pro/uxp/")) {
35
+ throw new Error(`${label} must point to the official Premiere Pro UXP documentation`);
36
+ }
37
+ }
38
+ function validateAdobeUxpCoverageManifest(value) {
39
+ const manifest = asRecord(value, "Adobe UXP coverage manifest");
40
+ if (manifest.schemaVersion !== 1)
41
+ throw new Error("Adobe UXP coverage manifest schemaVersion must be 1");
42
+ const source = asRecord(manifest.source, "Adobe UXP coverage manifest source");
43
+ if (source.apiPackage !== "@adobe/premierepro") {
44
+ throw new Error("Adobe UXP coverage manifest must identify @adobe/premierepro as its source package");
45
+ }
46
+ const apiVersion = stringValue(source.apiVersion, "Adobe UXP coverage manifest source.apiVersion");
47
+ const changelogUrl = stringValue(source.changelogUrl, "Adobe UXP coverage manifest source.changelogUrl");
48
+ validateDocumentationUrl(changelogUrl, "Adobe UXP coverage manifest source.changelogUrl");
49
+ if (!Array.isArray(manifest.entries) || manifest.entries.length === 0) {
50
+ throw new Error("Adobe UXP coverage manifest entries must be a non-empty array");
51
+ }
52
+ const ids = new Set();
53
+ const entries = manifest.entries.map((rawEntry, index) => {
54
+ const label = `Adobe UXP coverage manifest entry ${index}`;
55
+ const entry = asRecord(rawEntry, label);
56
+ const id = stringValue(entry.id, `${label}.id`);
57
+ if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(id) || ids.has(id)) {
58
+ throw new Error(`${label}.id must be a unique kebab-case identifier`);
59
+ }
60
+ ids.add(id);
61
+ const documentationUrls = stringArray(entry.documentationUrls, `${label}.documentationUrls`);
62
+ documentationUrls.forEach((url) => validateDocumentationUrl(url, `${label}.documentationUrls`));
63
+ const availability = entry.availability;
64
+ if (availability !== "current" && availability !== "planned") {
65
+ throw new Error(`${label}.availability must be current or planned`);
66
+ }
67
+ const implementationStatus = entry.implementationStatus;
68
+ if (implementationStatus !== "implemented" && implementationStatus !== "planned") {
69
+ throw new Error(`${label}.implementationStatus must be implemented or planned`);
70
+ }
71
+ const verificationStatus = entry.verificationStatus;
72
+ if (verificationStatus !== "automated_contract_verified"
73
+ && verificationStatus !== "committed_unverified"
74
+ && verificationStatus !== "not_started") {
75
+ throw new Error(`${label}.verificationStatus is not supported`);
76
+ }
77
+ const liveHostVerificationStatus = entry.liveHostVerificationStatus;
78
+ if (liveHostVerificationStatus !== "not_run" && liveHostVerificationStatus !== "verified") {
79
+ throw new Error(`${label}.liveHostVerificationStatus is not supported`);
80
+ }
81
+ const idempotency = entry.idempotency;
82
+ if (idempotency !== "operation_id" && idempotency !== "operation_id_when_supported" && idempotency !== "not_applicable") {
83
+ throw new Error(`${label}.idempotency is not supported`);
84
+ }
85
+ if (entry.backend !== "uxp")
86
+ throw new Error(`${label}.backend must be uxp`);
87
+ if (entry.uxpCommand !== null && typeof entry.uxpCommand !== "string") {
88
+ throw new Error(`${label}.uxpCommand must be a string or null`);
89
+ }
90
+ if (typeof entry.mutatesProject !== "boolean" || typeof entry.undoable !== "boolean") {
91
+ throw new Error(`${label} mutation metadata must be boolean`);
92
+ }
93
+ return {
94
+ id,
95
+ adobeApi: stringArray(entry.adobeApi, `${label}.adobeApi`),
96
+ documentationUrls,
97
+ minimumPremiereVersion: stringValue(entry.minimumPremiereVersion, `${label}.minimumPremiereVersion`),
98
+ backend: "uxp",
99
+ uxpCommand: entry.uxpCommand,
100
+ mcpTools: stringArray(entry.mcpTools, `${label}.mcpTools`),
101
+ availability,
102
+ implementationStatus,
103
+ verificationStatus,
104
+ liveHostVerificationStatus,
105
+ mutatesProject: entry.mutatesProject,
106
+ undoable: entry.undoable,
107
+ idempotency,
108
+ verificationBoundary: stringValue(entry.verificationBoundary, `${label}.verificationBoundary`),
109
+ };
110
+ });
111
+ return {
112
+ schemaVersion: 1,
113
+ source: {
114
+ apiPackage: "@adobe/premierepro",
115
+ apiVersion,
116
+ changelogUrl,
117
+ },
118
+ entries,
119
+ };
120
+ }
121
+ export const ADOBE_UXP_COVERAGE_MANIFEST = validateAdobeUxpCoverageManifest(adobeUxpCoverage);
122
+ export function buildAdobeUxpCoverageReport() {
123
+ const entries = ADOBE_UXP_COVERAGE_MANIFEST.entries.map((entry) => ({
124
+ ...entry,
125
+ adobeApi: [...entry.adobeApi],
126
+ documentationUrls: [...entry.documentationUrls],
127
+ mcpTools: [...entry.mcpTools],
128
+ }));
129
+ return {
130
+ schemaVersion: ADOBE_UXP_COVERAGE_MANIFEST.schemaVersion,
131
+ source: { ...ADOBE_UXP_COVERAGE_MANIFEST.source },
132
+ entries,
133
+ summary: {
134
+ total: entries.length,
135
+ current: entries.filter((entry) => entry.availability === "current").length,
136
+ planned: entries.filter((entry) => entry.availability === "planned").length,
137
+ implemented: entries.filter((entry) => entry.implementationStatus === "implemented").length,
138
+ committedUnverified: entries.filter((entry) => entry.verificationStatus === "committed_unverified").length,
139
+ automatedContractVerified: entries.filter((entry) => entry.verificationStatus === "automated_contract_verified").length,
140
+ liveHostVerified: entries.filter((entry) => entry.liveHostVerificationStatus === "verified").length,
141
+ },
142
+ };
143
+ }
6
144
  export function platformName(platform) {
7
145
  if (platform === "darwin")
8
146
  return "macOS";
@@ -53,6 +191,7 @@ export function buildPlatformCapabilityReport(capabilities, platform = process.p
53
191
  platforms: ["macOS", "Windows"],
54
192
  premiereVersions: "25.6+",
55
193
  transport: "loopback WebSocket",
194
+ apiCoverage: buildAdobeUxpCoverageReport(),
56
195
  commands: [
57
196
  "capabilities.get",
58
197
  "state.get",