premiere-pro-mcp 1.7.0 → 1.9.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 +48 -0
- package/README.md +77 -16
- package/artifacts/MCPBridgeCEP.zxp +0 -0
- package/cep-plugin/CSXS/manifest.xml +3 -3
- package/cep-plugin/index.html +20 -4
- package/cep-plugin/main.js +40 -11
- package/cep-plugin/styles.css +21 -0
- package/cep-plugin/updater.cjs +1 -1
- package/dist/diagnostics.d.ts +85 -0
- package/dist/diagnostics.js +230 -0
- package/dist/index.js +21 -1
- package/dist/security/capabilities.js +6 -1
- package/dist/server.js +11 -5
- package/dist/telemetry.d.ts +12 -0
- package/dist/telemetry.js +7 -0
- package/dist/tools/health.d.ts +27 -1
- package/dist/tools/health.js +78 -1
- package/dist/tools/transcript-edits.d.ts +15 -0
- package/dist/tools/transcript-edits.js +64 -0
- package/dist/tools/uxp.d.ts +164 -0
- package/dist/tools/uxp.js +90 -0
- package/package.json +4 -2
- package/scripts/build-claude-desktop.mjs +17 -12
- package/scripts/build-connector-installer.ps1 +50 -0
- package/scripts/build-connector-installer.sh +41 -0
- package/scripts/build-uxp-ccx.mjs +216 -0
- package/scripts/install-cep.ps1 +15 -4
- package/scripts/install-cep.sh +15 -7
- package/scripts/validate-distribution.mjs +170 -0
- package/uxp-plugin/DISTRIBUTION.md +86 -0
- package/uxp-plugin/README.md +8 -1
- package/uxp-plugin/manifest.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,54 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [1.9.0] - 2026-08-02
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Added a read-only `verify_premiere_connection` tool, human-readable `--doctor`
|
|
14
|
+
diagnostics, and a privacy-sanitized `--support-bundle` for guided recovery.
|
|
15
|
+
- Added an accessible in-panel Connection Center and native Windows/macOS CEP
|
|
16
|
+
installer pipelines that require trusted platform signing for production use.
|
|
17
|
+
- Added deterministic direct and Marketplace-channel UXP CCX packaging with
|
|
18
|
+
explicit Adobe identity and live-host verification gates.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- Reworked onboarding around the AI assistant an editor already uses, with the
|
|
23
|
+
Claude Desktop MCPB route first and npm/JSON configuration under Advanced.
|
|
24
|
+
- Upgraded the Claude Desktop bundle manifest to MCPB v0.4 and stopped emitting
|
|
25
|
+
an unsupported `.dxt` copy of the same bytes.
|
|
26
|
+
- Registered 280 core tools, exposed 278 under the default profile, and exposed
|
|
27
|
+
297 tools when the 19 capability-gated UXP tools are connected.
|
|
28
|
+
|
|
29
|
+
### Validation
|
|
30
|
+
|
|
31
|
+
- Automated checks cover distribution schemas, deterministic CCX packaging,
|
|
32
|
+
support-bundle privacy, installer path containment, production signing gates,
|
|
33
|
+
and connection evidence states. Real Premiere host verification and external
|
|
34
|
+
Adobe/Anthropic approvals remain separate release gates.
|
|
35
|
+
|
|
36
|
+
## [1.8.0] - 2026-08-01
|
|
37
|
+
|
|
38
|
+
### Added
|
|
39
|
+
|
|
40
|
+
- Added three read-only, capability-gated UXP transcript tools: native transcript
|
|
41
|
+
export, native transcript search, and revision-locked transcript edit previews.
|
|
42
|
+
- Added a deterministic SHA-256 transcript revision and confirmation token so a
|
|
43
|
+
proposed edit cannot be confused with a regenerated transcript.
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
|
|
47
|
+
- Expanded the connected UXP surface from 16 to 19 tools while keeping automatic
|
|
48
|
+
transcript-to-timeline application unavailable pending real-host validation.
|
|
49
|
+
- Added repository Copilot instructions and a deterministic Node 24 setup workflow.
|
|
50
|
+
|
|
51
|
+
### Validation
|
|
52
|
+
|
|
53
|
+
- Automated tests cover transcript range validation, revision locking, capability
|
|
54
|
+
registration, and the MCP catalog. A real Premiere 25.6 or 26.3 host still must
|
|
55
|
+
validate transcript semantics before any apply operation is introduced.
|
|
56
|
+
|
|
9
57
|
## [1.7.0] - 2026-08-01
|
|
10
58
|
|
|
11
59
|
### Added
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
**Give AI full control over Adobe Premiere Pro.**
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
280 core tools across 31 modules, 3 resources, and 4 guided workflows. A connected UXP host adds 19 capability-gated tools.
|
|
10
10
|
|
|
11
11
|
[](LICENSE)
|
|
12
12
|
[](https://nodejs.org)
|
|
@@ -27,9 +27,33 @@ 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
|
|
30
|
+
The AI handles the entire workflow through 280 core tools spanning the supported ExtendScript, QE DOM, local media analysis, safe edit-planning, and connection-verification surfaces. A compatible, authenticated UXP panel adds 19 documented, capability-gated workflows without replacing the production CEP bridge.
|
|
31
31
|
|
|
32
|
-
### What's new in 1.
|
|
32
|
+
### What's new in 1.9.0
|
|
33
|
+
|
|
34
|
+
- **Assistant-first setup:** Claude Desktop users start with a validated MCPB
|
|
35
|
+
bundle, while npm and manual JSON configuration stay under Advanced setup.
|
|
36
|
+
- **Safe connection help:** `verify_premiere_connection`, `--doctor`, the CEP
|
|
37
|
+
Connection Center, and sanitized support bundles explain exactly what is
|
|
38
|
+
installed, configured, connected, and live-verified.
|
|
39
|
+
- **Distribution foundations:** MCPB v0.4, deterministic direct/Marketplace CCX
|
|
40
|
+
packaging, and native Windows/macOS CEP installer pipelines make the supported
|
|
41
|
+
routes easier to package without overstating signing or Marketplace approval.
|
|
42
|
+
- **Canonical tool surface:** 280 registered tools, 278 in the default profile,
|
|
43
|
+
and 297 while the 19 capability-gated UXP tools are connected.
|
|
44
|
+
|
|
45
|
+
### Previous release: 1.8.0
|
|
46
|
+
|
|
47
|
+
- **Native transcript planning:** compatible UXP hosts can export and search the
|
|
48
|
+
transcript Premiere generated for a clip, then preview a revision-locked set of
|
|
49
|
+
source-time deletion ranges.
|
|
50
|
+
- **No false edit promise:** previews return a deterministic confirmation token and
|
|
51
|
+
never modify a clip or timeline. Automated application remains withheld until the
|
|
52
|
+
documented source-to-sequence reconstruction path passes real-host validation.
|
|
53
|
+
- **19 connected UXP tools:** the capability-gated UXP surface grows from 16 to 19
|
|
54
|
+
without changing the 279 core-tool surface.
|
|
55
|
+
|
|
56
|
+
### Earlier release: 1.7.0
|
|
33
57
|
|
|
34
58
|
- **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
59
|
- **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.
|
|
@@ -47,7 +71,24 @@ The AI handles the entire workflow through 279 core tools spanning the supported
|
|
|
47
71
|
|
|
48
72
|
## Quick Start
|
|
49
73
|
|
|
50
|
-
###
|
|
74
|
+
### Easiest supported path: Claude Desktop
|
|
75
|
+
|
|
76
|
+
1. Download the current [Claude Desktop bundle (`.mcpb`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.9.0/premiere-pro-mcp-1.9.0.mcpb).
|
|
77
|
+
2. In Claude Desktop, open **Settings > Extensions > Advanced settings > Install Extension**, select the downloaded bundle, and restart Claude Desktop.
|
|
78
|
+
3. Download the separate [signed Premiere connector (`.zxp`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.9.0/MCPBridgeCEP.zxp). Open it with your trusted ZXP installer. If your computer has no ZXP installer, use the npm connector installer in **Advanced setup** below.
|
|
79
|
+
4. Restart Premiere, open a project, then open **Window > Extensions > MCP Bridge**.
|
|
80
|
+
5. In Claude, enter: `Safely check my Premiere connection with verify_premiere_connection. Make no changes.`
|
|
81
|
+
|
|
82
|
+
The Claude bundle contains the local MCP server, so this route does not require Node.js. The Premiere connector is a separate required install. The first prompt is read-only and reports whether the server is installed, configured, connected, and live-verified.
|
|
83
|
+
|
|
84
|
+
### Other AI assistants
|
|
85
|
+
|
|
86
|
+
Cursor, VS Code/Copilot, Windsurf, and other MCP clients do not currently have a project-provided one-click installer. Use their MCP settings with the advanced npm route below. Keep the assistant, server, connector, and Premiere on the same computer.
|
|
87
|
+
|
|
88
|
+
<details>
|
|
89
|
+
<summary><strong>Advanced setup: npm or source</strong></summary>
|
|
90
|
+
|
|
91
|
+
#### Before you begin
|
|
51
92
|
|
|
52
93
|
- Node.js **20.19 or newer** on Windows or macOS.
|
|
53
94
|
- Adobe Premiere Pro **2020–2026**. Keep Premiere, the CEP bridge, and your MCP client on the same computer for the recommended local setup.
|
|
@@ -55,9 +96,9 @@ The AI handles the entire workflow through 279 core tools spanning the supported
|
|
|
55
96
|
(`brew install ffmpeg` on macOS or `winget install Gyan.FFmpeg` on Windows).
|
|
56
97
|
The production Docker image already includes it.
|
|
57
98
|
|
|
58
|
-
|
|
99
|
+
#### 1. Install
|
|
59
100
|
|
|
60
|
-
**Option A — npm
|
|
101
|
+
**Option A — npm:**
|
|
61
102
|
|
|
62
103
|
```bash
|
|
63
104
|
npm install -g premiere-pro-mcp
|
|
@@ -72,7 +113,7 @@ npm install
|
|
|
72
113
|
npm run build
|
|
73
114
|
```
|
|
74
115
|
|
|
75
|
-
|
|
116
|
+
#### 2. Install the CEP plugin
|
|
76
117
|
|
|
77
118
|
**If installed via npm:**
|
|
78
119
|
|
|
@@ -88,6 +129,16 @@ npm run install-cep
|
|
|
88
129
|
|
|
89
130
|
This installs the plugin into Premiere Pro's per-user extensions folder and enables debug mode.
|
|
90
131
|
|
|
132
|
+
#### 3. Check the setup
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
premiere-pro-mcp --doctor
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
Then ask your MCP client to run `verify_premiere_connection`. The check is read-only.
|
|
139
|
+
|
|
140
|
+
</details>
|
|
141
|
+
|
|
91
142
|
---
|
|
92
143
|
|
|
93
144
|
## Publishing to npm
|
|
@@ -248,11 +299,11 @@ From a clone of this repository:
|
|
|
248
299
|
```bash
|
|
249
300
|
codex plugin marketplace add .
|
|
250
301
|
codex plugin add premiere-pro@premiere-pro-mcp
|
|
251
|
-
npx -y premiere-pro-mcp@1.
|
|
302
|
+
npx -y premiere-pro-mcp@1.9.0 --install-cep
|
|
252
303
|
```
|
|
253
304
|
|
|
254
305
|
Restart Premiere Pro and start a new Codex session after installation. The plugin
|
|
255
|
-
launches `premiere-pro-mcp@1.
|
|
306
|
+
launches `premiere-pro-mcp@1.9.0` through `npx`; the separate CEP installation is
|
|
256
307
|
required because the MCP server communicates with the running Premiere host through
|
|
257
308
|
the local bridge.
|
|
258
309
|
|
|
@@ -272,15 +323,15 @@ For Claude Code, add this repository as a marketplace and install the plugin:
|
|
|
272
323
|
Then install the Premiere bridge and start a new Claude Code session:
|
|
273
324
|
|
|
274
325
|
```bash
|
|
275
|
-
npx -y premiere-pro-mcp@1.
|
|
326
|
+
npx -y premiere-pro-mcp@1.9.0 --install-cep
|
|
276
327
|
```
|
|
277
328
|
|
|
278
329
|
The Claude Code package lives in
|
|
279
330
|
[`claude-plugins/premiere-pro`](claude-plugins/premiere-pro), with its marketplace
|
|
280
331
|
at [`.claude-plugin/marketplace.json`](.claude-plugin/marketplace.json).
|
|
281
332
|
|
|
282
|
-
Claude Desktop uses the self-contained MCP Bundle format
|
|
283
|
-
|
|
333
|
+
Claude Desktop uses the self-contained MCP Bundle (`.mcpb`) format. Build and
|
|
334
|
+
validate the current bundle with:
|
|
284
335
|
|
|
285
336
|
```bash
|
|
286
337
|
npm run build:claude
|
|
@@ -311,7 +362,7 @@ installed separately.
|
|
|
311
362
|
QE-backed tools are reported as `experimental` because QE is undocumented and can vary between Premiere builds. Authority availability is reported separately from implementation support, so disabling `edit`, for example, does not incorrectly label editing tools as unsupported. Static metadata never claims that a Premiere operation succeeded; use `ping` and inspect each tool result for runtime evidence.
|
|
312
363
|
|
|
313
364
|
MCP `tools/list` is filtered to the active authority profile. The default
|
|
314
|
-
`inspect,edit,export,filesystem` profile advertises
|
|
365
|
+
`inspect,edit,export,filesystem` profile advertises 278 of the 280 registered
|
|
315
366
|
tools and omits `execute_extendscript` and `evaluate_expression`, which require
|
|
316
367
|
explicit `unsafe-script` authority. `ping` and `get_capabilities` remain visible
|
|
317
368
|
under every profile so a restricted or misconfigured server can still explain
|
|
@@ -362,7 +413,17 @@ PREMIERE_UXP_TOKEN="replace-with-a-long-random-secret" premiere-pro-mcp
|
|
|
362
413
|
|
|
363
414
|
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.
|
|
364
415
|
|
|
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.
|
|
416
|
+
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`, `get_clip_transcript_uxp`, `search_clip_transcript_uxp`, `preview_transcript_edit_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.
|
|
417
|
+
|
|
418
|
+
Native transcript editing starts with a read-only, revision-locked planning flow. Use
|
|
419
|
+
`get_clip_transcript_uxp` to export the transcript Premiere generated for a source
|
|
420
|
+
clip, select source-time ranges from that JSON, and pass its SHA-256 revision to
|
|
421
|
+
`preview_transcript_edit_uxp`. The preview sorts and merges ranges and returns a
|
|
422
|
+
confirmation token without changing the timeline. Premiere does not expose a
|
|
423
|
+
documented operation that directly turns deleted transcript text into timeline cuts,
|
|
424
|
+
so automatic application remains withheld until the source-to-sequence mapping and
|
|
425
|
+
documented reconstruction path pass live-host validation. `search_clip_transcript_uxp`
|
|
426
|
+
provides read-only discovery without substituting an external transcription engine.
|
|
366
427
|
|
|
367
428
|
Premiere 26.2-26.3 hosts also expose documented UXP workflows for revisioned project
|
|
368
429
|
inspection, verified project saves, preset-based sequence creation, OTIO/FCP XML
|
|
@@ -416,7 +477,7 @@ The file-based IPC bridge is simple, reliable, and works across macOS and Window
|
|
|
416
477
|
|
|
417
478
|
---
|
|
418
479
|
|
|
419
|
-
## Tools (
|
|
480
|
+
## Tools (280 core total; 278 under the default profile; 297 with a connected UXP bridge)
|
|
420
481
|
|
|
421
482
|
### Discovery & Inspection (10 + 10)
|
|
422
483
|
|
|
@@ -659,7 +720,7 @@ premiere-pro-mcp/
|
|
|
659
720
|
├── src/
|
|
660
721
|
│ ├── index.ts # Entry point — stdio transport setup
|
|
661
722
|
│ ├── http-server.ts # Entry point — HTTP/SSE transport (Fly.io / remote)
|
|
662
|
-
│ ├── server.ts # MCP server — registers
|
|
723
|
+
│ ├── server.ts # MCP server — registers 280 tools, filtered by authority profile
|
|
663
724
|
│ ├── bridge/
|
|
664
725
|
│ │ ├── file-bridge.ts # File-based IPC (write .jsx, poll .json)
|
|
665
726
|
│ │ └── script-builder.ts # ExtendScript generator with ES3 helpers
|
|
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.
|
|
2
|
+
<ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.premiere.bridge" ExtensionBundleVersion="1.9.0" ExtensionBundleName="MCP Bridge">
|
|
3
3
|
<ExtensionList>
|
|
4
|
-
<Extension Id="com.mcp.premiere.bridge.panel" Version="1.
|
|
5
|
-
<Extension Id="com.mcp.premiere.bridge.headless" Version="1.
|
|
4
|
+
<Extension Id="com.mcp.premiere.bridge.panel" Version="1.9.0"/>
|
|
5
|
+
<Extension Id="com.mcp.premiere.bridge.headless" Version="1.9.0"/>
|
|
6
6
|
</ExtensionList>
|
|
7
7
|
<ExecutionEnvironment>
|
|
8
8
|
<HostList>
|
package/cep-plugin/index.html
CHANGED
|
@@ -19,12 +19,12 @@
|
|
|
19
19
|
|
|
20
20
|
<section class="status-panel" role="status" aria-live="polite" aria-atomic="true">
|
|
21
21
|
<div class="status-indicator" aria-hidden="true">
|
|
22
|
-
<div class="status-ring"><div class="status-dot
|
|
22
|
+
<div class="status-ring"><div class="status-dot waiting" id="statusDot"></div></div>
|
|
23
23
|
</div>
|
|
24
24
|
<div class="status-copy">
|
|
25
25
|
<span class="section-label">Bridge status</span>
|
|
26
|
-
<strong id="statusText">
|
|
27
|
-
<span id="statusDetail">Premiere Pro
|
|
26
|
+
<strong id="statusText">Starting connector…</strong>
|
|
27
|
+
<span id="statusDetail">Checking Premiere Pro</span>
|
|
28
28
|
</div>
|
|
29
29
|
<div class="command-stat">
|
|
30
30
|
<strong id="cmdCount">0</strong>
|
|
@@ -32,6 +32,22 @@
|
|
|
32
32
|
</div>
|
|
33
33
|
</section>
|
|
34
34
|
|
|
35
|
+
<section class="connection-center" aria-labelledby="connectionCenterTitle">
|
|
36
|
+
<div class="section-heading">
|
|
37
|
+
<div>
|
|
38
|
+
<span class="section-label">Connection Center</span>
|
|
39
|
+
<h2 id="connectionCenterTitle">Ready-to-edit check</h2>
|
|
40
|
+
</div>
|
|
41
|
+
<button class="save-link" type="button" onclick="refreshConnectionCenter()" aria-controls="connectionChecks">Refresh</button>
|
|
42
|
+
</div>
|
|
43
|
+
<p class="connection-intro">This panel only checks Premiere. In your AI assistant, run <strong>Verify Premiere connection</strong> for the complete safe check.</p>
|
|
44
|
+
<ul class="connection-checks" id="connectionChecks">
|
|
45
|
+
<li id="checkConnector" data-state="waiting"><span class="check-dot" aria-hidden="true"></span><span><strong>Connector</strong><small>Starting…</small></span></li>
|
|
46
|
+
<li id="checkProject" data-state="waiting"><span class="check-dot" aria-hidden="true"></span><span><strong>Project</strong><small>Checking…</small></span></li>
|
|
47
|
+
<li id="checkSequence" data-state="waiting"><span class="check-dot" aria-hidden="true"></span><span><strong>Active sequence</strong><small>Checking…</small></span></li>
|
|
48
|
+
</ul>
|
|
49
|
+
</section>
|
|
50
|
+
|
|
35
51
|
<section class="config-section">
|
|
36
52
|
<div class="section-heading">
|
|
37
53
|
<div>
|
|
@@ -65,7 +81,7 @@
|
|
|
65
81
|
<section class="update-section" aria-live="polite">
|
|
66
82
|
<div class="update-copy">
|
|
67
83
|
<span class="section-label">Connector updates</span>
|
|
68
|
-
<strong id="updateTitle">Version 1.
|
|
84
|
+
<strong id="updateTitle">Version 1.9.0</strong>
|
|
69
85
|
<span id="updateDetail">Checking for updates…</span>
|
|
70
86
|
</div>
|
|
71
87
|
<button id="btnUpdate" class="button button-update" onclick="handleUpdateClick()" type="button" disabled>
|
package/cep-plugin/main.js
CHANGED
|
@@ -32,12 +32,47 @@ function setStatus(state, text) {
|
|
|
32
32
|
var detail = document.getElementById("statusDetail");
|
|
33
33
|
if (detail) {
|
|
34
34
|
if (state === "connected") detail.textContent = "Premiere Pro link is active";
|
|
35
|
-
else if (state === "waiting") detail.textContent = "Ready
|
|
35
|
+
else if (state === "waiting") detail.textContent = "Ready for an AI assistant connection";
|
|
36
36
|
else if (state === "error") detail.textContent = "Bridge needs attention";
|
|
37
37
|
else detail.textContent = "Waiting for Premiere Pro";
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
+
function setConnectionCheck(id, state, detail) {
|
|
42
|
+
var el = document.getElementById(id);
|
|
43
|
+
if (!el) return;
|
|
44
|
+
el.setAttribute("data-state", state);
|
|
45
|
+
var text = el.getElementsByTagName("small")[0];
|
|
46
|
+
if (text) text.textContent = detail;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// This reads only boolean Premiere state. Do not put project names, paths, or
|
|
50
|
+
// media information in the panel: the MCP safe-check uses the same boundary.
|
|
51
|
+
function refreshConnectionCenter() {
|
|
52
|
+
if (!bridgeRunning) {
|
|
53
|
+
setConnectionCheck("checkConnector", "waiting", "Start the connector first");
|
|
54
|
+
setConnectionCheck("checkProject", "waiting", "Waiting for the connector");
|
|
55
|
+
setConnectionCheck("checkSequence", "waiting", "Waiting for the connector");
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
setConnectionCheck("checkConnector", "ready", "Running in Premiere Pro");
|
|
59
|
+
setConnectionCheck("checkProject", "waiting", "Checking…");
|
|
60
|
+
setConnectionCheck("checkSequence", "waiting", "Checking…");
|
|
61
|
+
cs.evalScript(
|
|
62
|
+
'(function(){var p=app&&app.project;return JSON.stringify({projectOpen:!!(p&&typeof p.name!=="undefined"),sequenceOpen:!!(p&&p.activeSequence)});}())',
|
|
63
|
+
function (raw) {
|
|
64
|
+
try {
|
|
65
|
+
var state = JSON.parse(raw || "{}");
|
|
66
|
+
setConnectionCheck("checkProject", state.projectOpen ? "ready" : "needs-attention", state.projectOpen ? "Project open" : "Open a project in Premiere Pro");
|
|
67
|
+
setConnectionCheck("checkSequence", state.sequenceOpen ? "ready" : "needs-attention", state.sequenceOpen ? "Active sequence open" : "Open a sequence in Premiere Pro");
|
|
68
|
+
} catch (e) {
|
|
69
|
+
setConnectionCheck("checkProject", "needs-attention", "Could not read Premiere state");
|
|
70
|
+
setConnectionCheck("checkSequence", "needs-attention", "Could not read Premiere state");
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
|
|
41
76
|
// ---- File I/O via Node.js (CEP has access to Node) ----
|
|
42
77
|
// --enable-nodejs puts `require` in the global scope on most hosts, but on some it
|
|
43
78
|
// lands on cep_node instead. Try both, and fail loudly rather than letting fs come
|
|
@@ -214,20 +249,13 @@ function startBridge() {
|
|
|
214
249
|
|
|
215
250
|
ensureDir(tempDir);
|
|
216
251
|
bridgeRunning = true;
|
|
217
|
-
setStatus("
|
|
218
|
-
log("
|
|
252
|
+
setStatus("waiting", "Connector running");
|
|
253
|
+
log("Connector started and ready for safe checks.", "ok");
|
|
219
254
|
|
|
220
255
|
document.getElementById("btnStart").disabled = true;
|
|
221
256
|
document.getElementById("btnStop").disabled = false;
|
|
222
257
|
|
|
223
|
-
|
|
224
|
-
cs.evalScript("app.version", function (version) {
|
|
225
|
-
if (version && version !== "undefined") {
|
|
226
|
-
log("Premiere Pro: " + version, "ok");
|
|
227
|
-
} else {
|
|
228
|
-
log("Warning: Could not detect Premiere Pro version", "err");
|
|
229
|
-
}
|
|
230
|
-
});
|
|
258
|
+
refreshConnectionCenter();
|
|
231
259
|
|
|
232
260
|
pollInterval = setInterval(function () {
|
|
233
261
|
if (bridgeRunning) processCommands();
|
|
@@ -240,6 +268,7 @@ function stopBridge() {
|
|
|
240
268
|
pollInterval = null;
|
|
241
269
|
|
|
242
270
|
setStatus("", "Stopped");
|
|
271
|
+
refreshConnectionCenter();
|
|
243
272
|
log("Bridge stopped");
|
|
244
273
|
|
|
245
274
|
document.getElementById("btnStart").disabled = false;
|
package/cep-plugin/styles.css
CHANGED
|
@@ -197,6 +197,27 @@ button { -webkit-appearance: none; }
|
|
|
197
197
|
border-radius: var(--radius);
|
|
198
198
|
background: var(--surface);
|
|
199
199
|
}
|
|
200
|
+
|
|
201
|
+
.connection-center {
|
|
202
|
+
margin: 0 0 14px;
|
|
203
|
+
padding: 12px;
|
|
204
|
+
border: 1px solid var(--border);
|
|
205
|
+
border-radius: var(--radius);
|
|
206
|
+
background: var(--surface);
|
|
207
|
+
}
|
|
208
|
+
.connection-center .section-heading { margin-bottom: 8px; }
|
|
209
|
+
.connection-center h2 { font-size: 12px; }
|
|
210
|
+
.connection-intro { margin: 0 0 10px; color: var(--text-muted); font-size: 9px; line-height: 1.45; }
|
|
211
|
+
.connection-intro strong { color: var(--text-secondary); font-weight: 600; }
|
|
212
|
+
.connection-checks { display: grid; gap: 6px; padding: 0; margin: 0; list-style: none; }
|
|
213
|
+
.connection-checks li { display: flex; align-items: center; gap: 8px; min-height: 34px; padding: 6px 8px; border: 1px solid var(--border); border-radius: 5px; background: var(--surface-deep); }
|
|
214
|
+
.connection-checks li > span:last-child { min-width: 0; }
|
|
215
|
+
.connection-checks strong, .connection-checks small { display: block; }
|
|
216
|
+
.connection-checks strong { color: var(--text-secondary); font-size: 10px; font-weight: 600; }
|
|
217
|
+
.connection-checks small { margin-top: 2px; color: var(--text-muted); font-size: 9px; }
|
|
218
|
+
.check-dot { width: 7px; height: 7px; flex: 0 0 auto; border-radius: 50%; background: var(--text-muted); }
|
|
219
|
+
.connection-checks li[data-state="ready"] .check-dot { background: var(--green); box-shadow: 0 0 0 3px var(--green-soft); }
|
|
220
|
+
.connection-checks li[data-state="needs-attention"] .check-dot { background: var(--amber); }
|
|
200
221
|
.update-copy { min-width: 0; flex: 1; }
|
|
201
222
|
.update-copy strong, .update-copy > span:last-child { display: block; }
|
|
202
223
|
.update-copy strong { font-size: 11px; font-weight: 600; }
|
package/cep-plugin/updater.cjs
CHANGED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A readiness boundary says what was actually established. It deliberately
|
|
3
|
+
* does not turn an installed connector into a claim that Premiere is live.
|
|
4
|
+
*/
|
|
5
|
+
export type ReadinessBoundary = "installed" | "configured" | "connected" | "live_verified";
|
|
6
|
+
export type ReadinessState = "ready" | "needs_attention" | "not_checked";
|
|
7
|
+
export interface ReadinessComponent {
|
|
8
|
+
id: "mcp_process" | "premiere_connector" | "premiere_host" | "active_project" | "active_sequence" | "uxp_bridge";
|
|
9
|
+
label: string;
|
|
10
|
+
boundary: ReadinessBoundary;
|
|
11
|
+
state: ReadinessState;
|
|
12
|
+
message: string;
|
|
13
|
+
repair?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface LocalDoctorReport {
|
|
16
|
+
schemaVersion: "premiere-pro-mcp.doctor.v1";
|
|
17
|
+
generatedAt: string;
|
|
18
|
+
runtime: {
|
|
19
|
+
platform: NodeJS.Platform;
|
|
20
|
+
nodeMajor: number | null;
|
|
21
|
+
};
|
|
22
|
+
overall: "ready" | "needs_attention";
|
|
23
|
+
components: ReadinessComponent[];
|
|
24
|
+
privacy: {
|
|
25
|
+
includes: string[];
|
|
26
|
+
excludes: string[];
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export interface FirstRunReport {
|
|
30
|
+
schemaVersion: "premiere-pro-mcp.first-run.v1";
|
|
31
|
+
safeCheck: {
|
|
32
|
+
readOnly: true;
|
|
33
|
+
mutatesProject: false;
|
|
34
|
+
verificationScope: "mcp_process_premiere_host_active_project_active_sequence";
|
|
35
|
+
};
|
|
36
|
+
backend: "cep" | "uxp";
|
|
37
|
+
overall: "ready" | "needs_attention";
|
|
38
|
+
components: ReadinessComponent[];
|
|
39
|
+
nextStep: string;
|
|
40
|
+
repair?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface SupportBundle {
|
|
43
|
+
schemaVersion: "premiere-pro-mcp.support-bundle.v1";
|
|
44
|
+
generatedAt: string;
|
|
45
|
+
application: {
|
|
46
|
+
version: string;
|
|
47
|
+
nodeMajor: number | null;
|
|
48
|
+
platform: NodeJS.Platform;
|
|
49
|
+
architecture: string;
|
|
50
|
+
};
|
|
51
|
+
doctor: LocalDoctorReport;
|
|
52
|
+
privacy: {
|
|
53
|
+
excludes: string[];
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export interface LocalDoctorOptions {
|
|
57
|
+
platform?: NodeJS.Platform;
|
|
58
|
+
architecture?: string;
|
|
59
|
+
nodeVersion?: string;
|
|
60
|
+
environment?: NodeJS.ProcessEnv;
|
|
61
|
+
now?: () => Date;
|
|
62
|
+
exists?: (file: string) => boolean;
|
|
63
|
+
}
|
|
64
|
+
export interface SupportBundleOptions extends LocalDoctorOptions {
|
|
65
|
+
version: string;
|
|
66
|
+
}
|
|
67
|
+
export interface FirstRunHostState {
|
|
68
|
+
reachable: boolean;
|
|
69
|
+
projectOpen?: boolean;
|
|
70
|
+
sequenceOpen?: boolean;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Inspect local install/configuration facts only. The report intentionally
|
|
74
|
+
* cannot imply that Premiere is open or that an MCP client has connected.
|
|
75
|
+
*/
|
|
76
|
+
export declare function collectLocalDoctor(options?: LocalDoctorOptions): LocalDoctorReport;
|
|
77
|
+
/** Build a first-run report from a sanitized host response. No names or paths enter this contract. */
|
|
78
|
+
export declare function buildFirstRunReport(backend: "cep" | "uxp", host: FirstRunHostState): FirstRunReport;
|
|
79
|
+
/**
|
|
80
|
+
* Produce a safe attachment for support. It is deliberately a status snapshot,
|
|
81
|
+
* not a log collector: logs commonly contain project names, local paths, or tokens.
|
|
82
|
+
*/
|
|
83
|
+
export declare function createSupportBundle(options: SupportBundleOptions): SupportBundle;
|
|
84
|
+
export declare function renderDoctorHuman(report: LocalDoctorReport): string;
|
|
85
|
+
//# sourceMappingURL=diagnostics.d.ts.map
|