premiere-pro-mcp 1.21.0 → 1.23.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.
Files changed (123) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +36 -19
  3. package/after-effects-cep-plugin/CSXS/manifest.xml +3 -3
  4. package/after-effects-cep-plugin/bridge-directory-security.cjs +1 -1
  5. package/artifacts/MCPBridgeCEP.zxp +0 -0
  6. package/cep-plugin/CSXS/manifest.xml +3 -3
  7. package/cep-plugin/bridge-directory-security.cjs +1 -1
  8. package/cep-plugin/index.html +1 -1
  9. package/cep-plugin/main.js +2 -0
  10. package/cep-plugin/updater.cjs +1 -1
  11. package/dist/ai/editorial-review.d.ts +7 -7
  12. package/dist/ai/editorial-workflows.d.ts +197 -0
  13. package/dist/ai/editorial-workflows.js +199 -0
  14. package/dist/ai/exact-time.d.ts +39 -0
  15. package/dist/ai/exact-time.js +88 -0
  16. package/dist/ai/timeline-contract.d.ts +128 -0
  17. package/dist/ai/timeline-contract.js +263 -0
  18. package/dist/bridge/after-effects-bridge.js +4 -0
  19. package/dist/bridge/file-bridge.d.ts +9 -0
  20. package/dist/bridge/file-bridge.js +102 -12
  21. package/dist/bridge/host-lease.d.ts +17 -0
  22. package/dist/bridge/host-lease.js +157 -0
  23. package/dist/bridge/project-guard.d.ts +32 -0
  24. package/dist/bridge/project-guard.js +51 -0
  25. package/dist/bridge/script-builder.js +123 -9
  26. package/dist/bridge/uxp-websocket-bridge.d.ts +17 -0
  27. package/dist/bridge/uxp-websocket-bridge.js +83 -14
  28. package/dist/index.js +1 -1
  29. package/dist/interchange/bounded-file.d.ts +23 -0
  30. package/dist/interchange/bounded-file.js +85 -0
  31. package/dist/interchange/evidence.d.ts +86 -0
  32. package/dist/interchange/evidence.js +239 -0
  33. package/dist/interchange/facility.d.ts +81 -0
  34. package/dist/interchange/facility.js +153 -0
  35. package/dist/interchange/otio.d.ts +62 -0
  36. package/dist/interchange/otio.js +186 -0
  37. package/dist/platform-capabilities.js +1 -1
  38. package/dist/security/capabilities.js +43 -0
  39. package/dist/server.d.ts +2 -1
  40. package/dist/server.js +124 -16
  41. package/dist/tools/advanced.js +52 -5
  42. package/dist/tools/captions.d.ts +1 -0
  43. package/dist/tools/captions.js +45 -36
  44. package/dist/tools/competitor-gaps.js +2 -0
  45. package/dist/tools/effects.js +56 -23
  46. package/dist/tools/execution-workflows.d.ts +567 -0
  47. package/dist/tools/execution-workflows.js +395 -0
  48. package/dist/tools/export.d.ts +5 -0
  49. package/dist/tools/export.js +149 -16
  50. package/dist/tools/extended-edit-plans.d.ts +140 -0
  51. package/dist/tools/extended-edit-plans.js +179 -0
  52. package/dist/tools/interchange-workflows.d.ts +233 -0
  53. package/dist/tools/interchange-workflows.js +106 -0
  54. package/dist/tools/keyframes.js +20 -7
  55. package/dist/tools/markers.js +45 -16
  56. package/dist/tools/media-analysis-cache.d.ts +14 -0
  57. package/dist/tools/media-analysis-cache.js +29 -0
  58. package/dist/tools/media-analysis.d.ts +16 -16
  59. package/dist/tools/media-analysis.js +10 -5
  60. package/dist/tools/media.js +62 -22
  61. package/dist/tools/mogrt-bake.d.ts +2 -0
  62. package/dist/tools/mogrt-bake.js +42 -3
  63. package/dist/tools/operation-recovery.d.ts +135 -0
  64. package/dist/tools/operation-recovery.js +105 -0
  65. package/dist/tools/project-item-start-time.d.ts +6 -0
  66. package/dist/tools/project-item-start-time.js +23 -0
  67. package/dist/tools/project.js +27 -3
  68. package/dist/tools/recovery.d.ts +12 -0
  69. package/dist/tools/recovery.js +2 -1
  70. package/dist/tools/scene-review-workflow.d.ts +111 -0
  71. package/dist/tools/scene-review-workflow.js +92 -0
  72. package/dist/tools/selection.js +104 -26
  73. package/dist/tools/sequence.js +12 -1
  74. package/dist/tools/stock-titles.js +15 -4
  75. package/dist/tools/temporal-render-evidence.d.ts +380 -0
  76. package/dist/tools/temporal-render-evidence.js +171 -0
  77. package/dist/tools/timeline-editorial.d.ts +1336 -0
  78. package/dist/tools/timeline-editorial.js +341 -0
  79. package/dist/tools/track-targeting.js +18 -26
  80. package/dist/tools/utility.js +61 -11
  81. package/dist/tools/uxp.d.ts +5 -0
  82. package/dist/tools/uxp.js +38 -6
  83. package/dist/workflows/agent-instructions.js +8 -1
  84. package/dist/workflows/analysis-cache.d.ts +15 -0
  85. package/dist/workflows/analysis-cache.js +60 -0
  86. package/dist/workflows/catalog.d.ts +27 -2
  87. package/dist/workflows/catalog.js +30 -0
  88. package/dist/workflows/invocation-context.d.ts +31 -0
  89. package/dist/workflows/invocation-context.js +64 -0
  90. package/dist/workflows/job-contract.d.ts +29 -0
  91. package/dist/workflows/job-contract.js +144 -0
  92. package/dist/workflows/mutation-receipt.d.ts +17 -0
  93. package/dist/workflows/mutation-receipt.js +29 -0
  94. package/dist/workflows/performance-diagnostics.d.ts +55 -0
  95. package/dist/workflows/performance-diagnostics.js +24 -0
  96. package/dist/workflows/review-artifacts.d.ts +30 -0
  97. package/dist/workflows/review-artifacts.js +138 -0
  98. package/dist/workflows/strict-schema.d.ts +4 -0
  99. package/dist/workflows/strict-schema.js +50 -0
  100. package/dist/workflows/tool-metadata.d.ts +1 -1
  101. package/dist/workflows/tool-metadata.js +4 -3
  102. package/dist/workflows/tool-packs.js +6 -0
  103. package/docs/filmcraft-improvements.json +424 -0
  104. package/docs/filmcraft-improvements.md +130 -0
  105. package/docs/supported-actions.md +63 -22
  106. package/docs/temporal-render-fixtures.matrix.json +15 -0
  107. package/docs/temporal-render-fixtures.md +70 -0
  108. package/package.json +17 -8
  109. package/public-product-manifest.json +6 -6
  110. package/scripts/benchmark-planning.mjs +18 -0
  111. package/scripts/check-dependency-boundaries.mjs +38 -0
  112. package/scripts/create-temporal-host-report.mjs +20 -0
  113. package/scripts/create-temporal-render-fixture.mjs +16 -0
  114. package/scripts/validate-temporal-host-report.mjs +67 -0
  115. package/scripts/verify-npm-package.mjs +10 -0
  116. package/uxp-plugin/advanced-workflows.cjs +36 -9
  117. package/uxp-plugin/commands.cjs +120 -32
  118. package/uxp-plugin/events.cjs +51 -3
  119. package/uxp-plugin/index.cjs +2 -0
  120. package/uxp-plugin/index.html +1 -1
  121. package/uxp-plugin/manifest.json +1 -1
  122. package/uxp-plugin/operation-ledger.cjs +135 -0
  123. package/uxp-plugin/protocol.cjs +6 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,44 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.23.0] - 2026-10-11
10
+
11
+ ### Added
12
+
13
+ - 41 bounded core tools and five guided workflow routes from the [52-item Filmcraft implementation ledger](docs/filmcraft-improvements.md). The source catalog now declares 434 core tools, 432 under default authority and 528 with 96 capability-gated UXP additions.
14
+ - Guarded execution and recovery with a private shared host lease, expected project/sequence targets, structured mutation receipts, cancellation/progress context, durable hashed UXP replay reservations and versioned command/receipt contracts. UXP writes require native cryptographic entropy and compatible durable replay storage; older unversioned panels remain read-only.
15
+ - Exact tick/rate timeline models, typed compound edit previews, sync and stacked-camera planning, transcript/caption/music/scene review, provenance, checkpoints and bounded edit-property fixtures.
16
+ - Bounded OTIO/XML inspection and loss reports, ALE/CSV adapters and audio-post turnover plans. Unsupported native round trips and opaque serializers remain explicit rather than being reported as completed exports.
17
+ - Verified delivery, checksum-pinned review artifacts, local job inspection/cancellation, rendered scopes and actual multi-frame RGB/ROI/PCM evidence tools, plus opt-in analysis caching, performance diagnostics and licensed-host fixture/report helpers.
18
+
19
+ ### Fixed
20
+
21
+ - Folder imports now verify Premiere project-item readback instead of treating an accepted import call as proof that all requested media was imported. Counts and partial outcomes describe the observed project state.
22
+ - Caption imports validate supported formats before dispatch, preserve mutation readback and reject counts outside the safe integer range.
23
+
24
+ - Registered tools accept optional request-scoped `expected_project_path`; generated CEP commands refuse a different, missing or unsaved active project before the tool body. UXP and After Effects refuse this CEP-only guard. Omitting the guard preserves existing behavior.
25
+
26
+ - `unnest_sequence` now refuses, before removing the nested clip, any inner item that also carries the other media type. Premiere 26.5.2's `Track.overwriteClip` places that media on the matching track and overwrites the clips there. Same guard as `replace_clip`. Unnest a nest of video-only or audio-only items, or use Premiere's Unnest command.
27
+ - Shared project-item mark restore after `replace_clip`, `unnest_sequence`, and other `Track.overwriteClip` helpers now writes the quarter-frame-biased seconds from `__itemMarksForRestore`. Writing the exact tick boundary as seconds can floor one media frame early on Premiere 26.5.2 (a soft-subclip Out of `00:00:29:22` stored as `00:00:29:21`), shrinking the source item. `duplicate_clip` and `set_item_in_out` already used those seconds.
28
+ - `export_sequence` without `preset_path` no longer exports at proxy resolution when Media Encoder is not installed. Preset discovery only searched Premiere's `Settings/IngestPresets`, so the default became `IngestPresets/Proxy/00_1024x540 H.264.epr` and a 1080x1920 sequence was exported at 1024x540 while reporting `verified: true` (Premiere 24.0, macOS). Preset discovery now also searches Premiere's own `MediaIO/systempresets` when no Media Encoder presets exist, and the default never comes from `IngestPresets`; if no other H.264 preset is found, the tool asks for `preset_path`.
29
+
30
+ ### Compatibility and evidence
31
+
32
+ CEP remains the production bridge; failed UXP mutations never fall back to CEP or QE. Recovery preserves unknown and partial outcomes. Native multicam switching, nonlinear/nested retime mapping, DSP music rendering, OCR and accepted-native-job cancellation remain unsupported. Local decoder tests establish artifact behavior, while licensed Premiere playback, Undo/reopen and native round-trip validation remain `not_run`.
33
+
34
+ ## [1.22.0] - 2026-10-08
35
+
36
+ ### Fixed
37
+
38
+ - The Windows private-directory ACL check waits up to 30 seconds for `powershell.exe` instead of 5, in the server and in both CEP panels. On a loaded machine (including CI runners with coverage) PowerShell could take longer than 5 seconds to start, which made the check throw and blocked the bridge. A timeout still fails closed: the directory is not used unless the ACL check succeeds.
39
+ - Effect writes, stabilization, smart-bin creation, proxy detachment, folder imports, sequence creation, marker deletion and clip selection now distinguish requested edits from host readback, report ignored writes as failures and unreadable results as `committed_unverified`. Selection counts describe applied states; stabilization does not claim a completed analysis. CEP selected-clip removal refuses ripple requests before deleting because clip absence cannot verify gap closure.
40
+ - `set_sequence_display_format` writes Premiere's display codes (video 100-113, audio 200-201) and maps the older 0-11 / 0-1 inputs onto them. Premiere 26.5.2 stores and reads back any number, so the old values "verified" but did not select the format (2 formatted as non-drop timecode, 102 as drop-frame). `set_sequence_frame_rate` now reports the clips Premiere re-snaps to the new frame grid (`clipsMoved`, `maxShiftSeconds`, `movedClips`) with a warning that changing back does not restore them.
41
+ - `create_subclip` now returns the new subclip's `nodeId` and reads its stored range back. On Premiere 26.5.2 a soft-boundary subclip's `getInPoint`/`getOutPoint` read the whole media, so the range is read from the subclip's project metadata (`VideoInPoint`/`VideoOutPoint` timecode and frame rate). The result reports requested and observed in/out seconds, with `outcome: "verified"` when both are within one media frame of the request and `committed_unverified` otherwise or when the metadata cannot be read.
42
+ - `add_title` reports the start Premiere stored for the placed graphic. Premiere snaps it to the frame grid (a requested 5 s lands at 5.005 s at 29.97 fps), so `startSeconds` and the new `appliedStartSeconds` come from the placed clip, and the request is kept as `requestedStartSeconds`.
43
+ - `update_marker` reports the stored marker start as `timeSeconds` (for example 7.5075 s rather than the requested 7.5 s) and adds `requestedSeconds`.
44
+ - `manage_proxies` with `action: "toggle"` can set a known proxy display state. The action changes Premiere's application-wide proxy display (`app.setEnableProxies`), not the given item, and it only flipped the current state, so on Premiere 26.5.2 an agent could not ask for proxies on or off and two calls undid each other. It now accepts `enabled: true | false`, writes only when the state differs, and verifies by reading `app.getEnableProxies()` back; a host that ignores the write is reported as a failure. Omitting `enabled` still flips the state. Results report `previousEnabled`, `proxiesEnabled`, `changed` and `mode` (`set` or `flip`), and the description now says the action is application-wide.
45
+ - Still-image mark clearing now identifies unreadable still duration explicitly; `set_clip_start_time` shares the verified implementation of `set_start_time` and is documented as its alias. Colour selection states that it uses the source project item label because CEP has no timeline clip-label getter. Baked title-cache cleanup retains the newest 50 matching files and leaves unrelated directory entries untouched.
46
+
9
47
  ## [1.21.0] - 2026-10-07
10
48
 
11
49
  ### Fixed
@@ -71,6 +109,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
71
109
  - **Markers.** `manage_markers_uxp` `add` now forwards and applies `color_index` and verifies every requested field. Previously the colour was dropped while the add reported verified.
72
110
  - **Frame export.** `export_frame_uxp` retries with the file extension when Premiere rejects an extension-less name ("File Format is not supported"). It also waits up to 15 s for the PNG, which 26.5.2 writes after the call returns, and it checks for the file by walking the approved workspace folder: a plugin with request-only file access cannot open arbitrary `file:` URLs, so the old check reported a written frame as missing.
73
111
  - **Media health.** `maintain_media_health_uxp` treats a single `project_item_id` as a one-item list for inspect, refresh and set_offline.
112
+
74
113
  - `import_media` no longer reports an error when an `.xml`, `.aaf`, `.edl` or `.prproj` file imports correctly. Interchange files create sequences and bins rather than an item with the file's path, so they now return `outcome: "committed_unverified"` with `interchange: true`, which stops retries from duplicating the sequence (#805).
75
114
 
76
115
  - `duplicate_clip` no longer places a copy one frame short. Premiere can snap the source out point a frame early, so on Premiere 26.5.2 a 677-frame clip was copied as 676 frames, and the tool still reported `verified` because it allowed two frames of drift. It now trims each placed copy, and its linked partner, back to the original end, reports `endCorrected`, and verifies start, end and source in-point to within half a frame.
package/README.md CHANGED
@@ -14,7 +14,7 @@ Free, MIT licensed, local-first, and published to npm as [`premiere-pro-mcp`](ht
14
14
 
15
15
  [Website](https://premiere-pro-mcp.com/) · [Recorded demo](https://premiere-pro-mcp.com/demo/) · [Compare servers](https://premiere-pro-mcp.com/compare/) · [Setup guides](https://premiere-pro-mcp.com/blog/how-to-set-up-premiere-pro-mcp/) · [Search tools](https://premiere-pro-mcp.com/tools/) · [Troubleshooting](https://premiere-pro-mcp.com/docs/troubleshooting/) · [Release facts](https://premiere-pro-mcp.com/facts/)
16
16
 
17
- Development source: 393 core tools across 60 modules, 4 resources, and 24 guided workflows. A connected UXP host adds 96 capability-gated tools.
17
+ Development source: 434 core tools across 67 modules, 4 resources, and 29 guided workflows. A connected UXP host adds 96 capability-gated tools.
18
18
 
19
19
  The [completed AE render handoff](docs/after-effects-render-handoff.md) previews and confirms importing one finished render into an existing Premiere bin, with host and file rechecks and an import receipt.
20
20
 
@@ -125,17 +125,17 @@ and repository before configuring a client. The new
125
125
  VS Code, or Codex settings that point directly to this installation. It is a
126
126
  feature included in v1.15.1 and later.
127
127
 
128
- The current source exposes 393 core tools for supported workflow steps spanning the supported ExtendScript, QE DOM, local media and interchange analysis, revisioned project-context retrieval, safe edit-planning, project-intake preview, review handoff, connection verification, and guarded After Effects MOGRT authoring, batch, library, render-queue, inspection, and Premiere-handoff workflows. A compatible, authenticated UXP panel adds 96 documented, capability-gated tools without replacing the production CEP bridge.
128
+ The current source exposes 434 core tools for supported workflow steps spanning the supported ExtendScript, QE DOM, local media and interchange analysis, revisioned project-context retrieval, safe edit-planning, project-intake preview, review handoff, connection verification, and guarded After Effects MOGRT authoring, batch, library, render-queue, inspection, and Premiere-handoff workflows. A compatible, authenticated UXP panel adds 96 documented, capability-gated tools without replacing the production CEP bridge.
129
129
 
130
130
  <a id="latest-release"></a>
131
131
 
132
- ### Latest release: 1.21.0
132
+ ### Latest release: 1.22.0
133
133
 
134
- The published v1.21.0 npm artifact contains **393 core tools**, 391 in its default profile,
134
+ The published v1.22.0 npm artifact contains **393 core tools**, 391 in its default profile,
135
135
  and 487 with a compatible UXP connection. The development catalog above can include
136
136
  unreleased work. See the [versioned facts and package provenance](https://premiere-pro-mcp.com/facts/).
137
137
 
138
- GitHub releases use `v<SemVer>` for both title and tag, such as `v1.21.0`.
138
+ GitHub releases use `v<SemVer>` for both title and tag, such as `v1.22.0`.
139
139
  See [release naming and version conventions](docs/release-conventions.md).
140
140
 
141
141
  ### Try a bounded workflow
@@ -154,6 +154,8 @@ if the connection is unavailable.
154
154
 
155
155
  ### Release highlights
156
156
 
157
+ - **1.22.0 readback receipts:** effect writes, stabilization, smart bins, proxies, folder imports, sequence creation, marker deletion and clip selection report what Premiere applied as `verified`, `committed_unverified` or `failed`; `create_subclip`, `add_title` and `update_marker` report the stored values; `set_sequence_frame_rate` lists clips Premiere re-snapped.
158
+ - **1.22.0 display codes and proxies:** `set_sequence_display_format` writes Premiere's real display codes (video 100-113, audio 200-201) and maps the older 0-11 and 0-1 inputs onto them; `manage_proxies` toggle can set a known proxy display state; the Windows ACL check waits up to 30 seconds for PowerShell.
157
159
  - **1.21.0 Claude Desktop startup fix:** the extension starts when optional settings are blank, and Desktop's discover-only probe no longer holds the UXP port, so the real server keeps its UXP tools.
158
160
  - **1.21.0 frame-grid verification:** project-item marks, sequence In/Out, work area, link/unlink, zero point, transitions, `replace_clip` and `duplicate_clip` verify against Premiere's own frame and sample grids and fail closed; UXP tools snap times to the sequence frame grid.
159
161
  - **1.20.0 verified range removal:** `ripple_remove_timeline_ranges` previews, then applies a multi-range ripple removal with a single-use confirmation token and clip-level readback (QE razor; experimental).
@@ -193,7 +195,7 @@ if the connection is unavailable.
193
195
  local Premiere processes. See the generated [supported action catalog](docs/supported-actions.md)
194
196
  for individual capability and verification contracts.
195
197
 
196
- See the [v1.21.0 release notes](https://github.com/leancoderkavy/premiere-pro-mcp/releases/tag/v1.21.0)
198
+ See the [v1.22.0 release notes](https://github.com/leancoderkavy/premiere-pro-mcp/releases/tag/v1.22.0)
197
199
  for complete details. Live installation in Premiere Pro still requires host verification.
198
200
 
199
201
  ### Current MCP protocol support
@@ -211,6 +213,16 @@ handshake only; leave it unset (or `auto`) for modern MCP capabilities.
211
213
 
212
214
  ---
213
215
 
216
+ ### Guarding multi-project CEP sessions
217
+
218
+ Every registered tool accepts optional `expected_project_path`, an absolute path to the intended saved Premiere project. Generated CEP scripts compare the active project's host-normalized file path before the tool body; a different, missing or unsaved project refuses without running that body. The guard is scoped to the request and checked for every generated command in a multi-command tool. Omitting it preserves existing behavior.
219
+
220
+ ```json
221
+ {"name":"get_project_info","arguments":{"expected_project_path":"/Projects/Film.prproj"}}
222
+ ```
223
+
224
+ This protects against accidental active-project switches, not deliberate project switching inside unsafe scripts. It does not select a project or prove media identity. Paths remain in request context and are not telemetry. UXP and After Effects commands refuse this CEP-only guard; UXP workflows use their `expected_snapshot` identity contracts. Local-only tools do not inspect Premiere. Filesystem aliases are not resolved as a claim of project identity.
225
+
214
226
  ## For editors evaluating an AI workflow
215
227
 
216
228
  Before an assistant changes an active project, use the
@@ -241,7 +253,7 @@ their bins, media rules, and organization rules before a facility uses one.
241
253
  > ### Install the published package (verify the name)
242
254
  >
243
255
  > ```bash
244
- > npm i -g premiere-pro-mcp@1.21.0
256
+ > npm i -g premiere-pro-mcp@1.22.0
245
257
  > ```
246
258
  >
247
259
  > This repository publishes only **`premiere-pro-mcp`**. A differently named package (`adobe-premiere-pro-mcp`) may also declare a `premiere-pro-mcp` executable. Before configuring a client, confirm:
@@ -249,7 +261,7 @@ their bins, media rules, and organization rules before a facility uses one.
249
261
  > | Check | Expected |
250
262
  > | --- | --- |
251
263
  > | Package name | `premiere-pro-mcp` (not `adobe-premiere-pro-mcp`) |
252
- > | Version | `1.21.0` |
264
+ > | Version | `1.22.0` |
253
265
  > | Homepage / repo | https://premiere-pro-mcp.com/ · https://github.com/leancoderkavy/premiere-pro-mcp |
254
266
  >
255
267
  > ```bash
@@ -262,9 +274,9 @@ their bins, media rules, and organization rules before a facility uses one.
262
274
 
263
275
  ### Easiest supported path: Claude Desktop
264
276
 
265
- 1. Download the current [Claude Desktop bundle (`.mcpb`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.21.0/premiere-pro-mcp-1.21.0.mcpb).
277
+ 1. Download the current [Claude Desktop bundle (`.mcpb`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.22.0/premiere-pro-mcp-1.22.0.mcpb).
266
278
  2. In Claude Desktop, open **Settings > Extensions > Advanced settings > Install Extension**, select the downloaded bundle, and restart Claude Desktop.
267
- 3. Download the separate [signed Premiere connector (`.zxp`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.21.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.
279
+ 3. Download the separate [signed Premiere connector (`.zxp`)](https://github.com/leancoderkavy/premiere-pro-mcp/releases/download/v1.22.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.
268
280
  4. Restart Premiere, open a project, then open **Window > Extensions > MCP for Adobe Premiere Pro**.
269
281
  5. In Claude, enter: `Safely check my Premiere connection with verify_premiere_connection. Make no changes.`
270
282
 
@@ -568,11 +580,11 @@ From a clone of this repository:
568
580
  ```bash
569
581
  codex plugin marketplace add .
570
582
  codex plugin add premiere-pro@premiere-pro-mcp
571
- npx -y premiere-pro-mcp@1.21.0 --install-cep
583
+ npx -y premiere-pro-mcp@1.22.0 --install-cep
572
584
  ```
573
585
 
574
586
  Restart Premiere Pro and start a new Codex session after installation. The plugin
575
- launches `premiere-pro-mcp@1.21.0` through `npx`; the separate CEP installation is
587
+ launches `premiere-pro-mcp@1.22.0` through `npx`; the separate CEP installation is
576
588
  required because the MCP server communicates with the running Premiere host through
577
589
  the local bridge.
578
590
 
@@ -610,7 +622,7 @@ For Claude Code, add this repository as a marketplace and install the plugin:
610
622
  Then install the Premiere bridge and start a new Claude Code session:
611
623
 
612
624
  ```bash
613
- npx -y premiere-pro-mcp@1.21.0 --install-cep
625
+ npx -y premiere-pro-mcp@1.22.0 --install-cep
614
626
  ```
615
627
 
616
628
  The Claude Code package lives in
@@ -827,7 +839,7 @@ PREMIERE_UXP_TOKEN="replace-with-a-long-random-secret" premiere-pro-mcp
827
839
 
828
840
  Generate that secret yourself and enter the same value in the UXP panel (**Window → UXP Plugins**, not the CEP Connector). CEP-only setups do not use a token. 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.
829
841
 
830
- When enabled, MCP discovery includes 91 capability-gated UXP additions. The first expansion covers effects, deterministic timeline selection, selection batches, scene detection, proxy/ingest, relink, metadata, color conformance, read-only Premiere/After Effects environment inspection, Source Monitor audition, storage, and least-privilege workspace access. The second adds Project-panel selection, marker CRUD, single-transaction undoable beat-grid marker application, bin organization, sequence settings, imports, typed effect parameters/keyframes, track-item transforms, atomic J/L split edits, SequenceEditor timeline edits, sequence lifecycle, and AME encoding. The third wave begins with a redacted event journal, conservative AME terminal receipts, explicit host-readiness gates, safe multi-project sessions, lease-based growing-media control, namespaced workflow checkpoints, bounded media-health maintenance, caption-aware track mute state, transactional source trim/framing, guarded sequence-range updates, guarded source-media start timing, and guarded source-media frame-rate/pixel-aspect overrides documented in [the third-wave workflow matrix](docs/third-wave-uxp-workflows.md). The bounded migration surface also includes a non-ripple selected-item lift, native video-transition listing and guarded transactions, native active and explicit-GUID sequence timing inspection, opt-in installed-MOGRT directory inspection without filesystem enumeration, bounded native timeline structure inspection with opt-in source IDs, classification, and broad content category, guarded sequence display-format updates, a capped native Project-panel tree, a double-read Project-panel insertion-bin snapshot, guarded empty/default sequence creation, bounded native Project-panel schema/item-column metadata inspection, guarded direct Project-panel metadata replacements with exact state/readback guards, guarded typed Project metadata schema-field creation with non-field-level readback, guarded direct updates to three named application preferences, guarded transcript JSON replacement for one exact source clip, direct active-track-item identity readback, guarded source-only slips, guarded contiguous three-item slides, guarded append-only timeline duplicates, guarded contiguous same-track ripple deletes, guarded source-project-item color labels resolved from one timeline coordinate, guarded explicit-sequence preview-frame rectangle updates, explicit opt-in source-media provenance paths with bounded double resolution, bounded source-proxy readiness with an explicit attached-path disclosure, guarded static effect-parameter PointF x/y updates, bounded effect-parameter descriptor catalogs, bounded project/sequence Object Mask audits, native FrameRate/TickTime frame-alignment inspection with caller-owned inputs and tick readback, and native TickTime arithmetic over caller-owned canonical tick strings; it does not claim direct empty-track create/delete, global redo support, playback proof, Object Mask counts or visual validity, an atomic Project-panel metadata compare-and-set, app-preference Undo, installed-template availability or compatibility, imported transcript persistence, override-presence/clear semantics, path existence, source lineage or rights, proxy compatibility, general or keyframed effect-parameter value readback, rendered-frame correctness, linked-item sync, or licensed-host validation. A separate [hybrid benchmark gate](docs/uxp-hybrid-benchmark.md) keeps native acceleration disabled until reproducible cross-platform evidence exists. See also [the first stable workflow matrix](docs/uxp-stable-workflows.md), [the next-ten workflow matrix](docs/uxp-next-ten-workflows.md), [the guarded-slip workflow notes](docs/uxp-slip-workflows.md), [the guarded-slide workflow notes](docs/uxp-slide-workflows.md), [the guarded-duplicate workflow notes](docs/uxp-clone-workflows.md), and [the guarded-ripple-delete workflow notes](docs/uxp-ripple-delete-workflows.md). 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.
842
+ When enabled, MCP discovery includes 96 capability-gated UXP additions. The first expansion covers effects, deterministic timeline selection, selection batches, scene detection, proxy/ingest, relink, metadata, color conformance, read-only Premiere/After Effects environment inspection, Source Monitor audition, storage, and least-privilege workspace access. The second adds Project-panel selection, marker CRUD, single-transaction undoable beat-grid marker application, bin organization, sequence settings, imports, typed effect parameters/keyframes, track-item transforms, atomic J/L split edits, SequenceEditor timeline edits, sequence lifecycle, and AME encoding. The third wave begins with a redacted event journal, conservative AME terminal receipts, explicit host-readiness gates, safe multi-project sessions, lease-based growing-media control, namespaced workflow checkpoints, bounded media-health maintenance, caption-aware track mute state, transactional source trim/framing, guarded sequence-range updates, guarded source-media start timing, and guarded source-media frame-rate/pixel-aspect overrides documented in [the third-wave workflow matrix](docs/third-wave-uxp-workflows.md). The bounded migration surface also includes a non-ripple selected-item lift, native video-transition listing and guarded transactions, native active and explicit-GUID sequence timing inspection, opt-in installed-MOGRT directory inspection without filesystem enumeration, bounded native timeline structure inspection with opt-in source IDs, classification, and broad content category, guarded sequence display-format updates, a capped native Project-panel tree, a double-read Project-panel insertion-bin snapshot, guarded empty/default sequence creation, bounded native Project-panel schema/item-column metadata inspection, guarded direct Project-panel metadata replacements with exact state/readback guards, guarded typed Project metadata schema-field creation with non-field-level readback, guarded direct updates to three named application preferences, guarded transcript JSON replacement for one exact source clip, direct active-track-item identity readback, guarded source-only slips, guarded contiguous three-item slides, guarded append-only timeline duplicates, guarded contiguous same-track ripple deletes, guarded source-project-item color labels resolved from one timeline coordinate, guarded explicit-sequence preview-frame rectangle updates, explicit opt-in source-media provenance paths with bounded double resolution, bounded source-proxy readiness with an explicit attached-path disclosure, guarded static effect-parameter PointF x/y updates, bounded effect-parameter descriptor catalogs, bounded project/sequence Object Mask audits, native FrameRate/TickTime frame-alignment inspection with caller-owned inputs and tick readback, and native TickTime arithmetic over caller-owned canonical tick strings; it does not claim direct empty-track create/delete, global redo support, playback proof, Object Mask counts or visual validity, an atomic Project-panel metadata compare-and-set, app-preference Undo, installed-template availability or compatibility, imported transcript persistence, override-presence/clear semantics, path existence, source lineage or rights, proxy compatibility, general or keyframed effect-parameter value readback, rendered-frame correctness, linked-item sync, or licensed-host validation. A separate [hybrid benchmark gate](docs/uxp-hybrid-benchmark.md) keeps native acceleration disabled until reproducible cross-platform evidence exists. See also [the first stable workflow matrix](docs/uxp-stable-workflows.md), [the next-ten workflow matrix](docs/uxp-next-ten-workflows.md), [the guarded-slip workflow notes](docs/uxp-slip-workflows.md), [the guarded-slide workflow notes](docs/uxp-slide-workflows.md), [the guarded-duplicate workflow notes](docs/uxp-clone-workflows.md), and [the guarded-ripple-delete workflow notes](docs/uxp-ripple-delete-workflows.md). 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. UXP edits require a matching command-schema/receipt version, durable panel ledger storage and native cryptographic entropy; older unversioned panels remain read-only until the matching panel is installed.
831
843
 
832
844
  The bounded UXP migration surface also exposes a read-only animated-PointF endpoint-displacement inspection through `automate_effect_parameters_uxp`. It requires one exact component and parameter target plus a strictly increasing time interval, double-reads native endpoint values and their distance, and refuses static, malformed, or changed parameter state. It does not modify Premiere or prove rendered appearance, playback, persistence, Undo, or licensed-host behavior.
833
845
 
@@ -936,7 +948,10 @@ See [usage, example and remaining execution adapters](docs/film-editorial-workfl
936
948
 
937
949
  Reviewed assistant-editing tools now provide dialogue candidate decisions, quote paper-edit CSV, batch copy previews, sync-evidence triage, and owned-footage B-roll review. These are local evidence reviews, not new host engines. See [review workflow contracts](docs/editorial-review-workflows.md).
938
950
 
939
- ## Tools (393 core total; 391 under the default profile; 487 with a connected UXP bridge)
951
+ See [Filmcraft improvement ledger](docs/filmcraft-improvements.md) for exact-time
952
+ planning, recovery, job observation, temporal evidence and facility workflows.
953
+
954
+ ## Tools (434 core total; 432 under the default profile; 528 with a connected UXP bridge)
940
955
 
941
956
  The [complete supported-actions catalog](docs/supported-actions.md) lists every
942
957
  registered core tool, the two tools restricted behind explicit `unsafe-script`
@@ -1088,9 +1103,11 @@ adjusted. This is a CEP contract check, not validation in a licensed Premiere Pr
1088
1103
  | `encode_project_item` / `encode_file` | Direct encoding |
1089
1104
  | `start_batch_encode` | Start render queue |
1090
1105
 
1091
- Premiere's documented automation surfaces do not currently expose OTIO or native
1092
- EDL interchange, Render and Replace, cloud publishing, or Content Credentials
1093
- export configuration. `export_sequence_edl` therefore builds the CMX 3600 list
1106
+ Documented Premiere UXP exposes format-specific OTIO import/export through
1107
+ runtime-probed `export_interchange_uxp` and `import_interchange_uxp`. CEP has no
1108
+ documented native OTIO route. Native EDL, Render and Replace, cloud publishing
1109
+ and Content Credentials export configuration remain unavailable through the
1110
+ supported automation contracts. `export_sequence_edl` therefore builds the CMX 3600 list
1094
1111
  locally from the clips Premiere reads back and validates it with the same parser
1095
1112
  used by `inspect_cmx3600_edl`; it is not a Premiere-native export.
1096
1113
  `get_capabilities` reports the remaining delivery gaps explicitly rather than
@@ -1425,7 +1442,7 @@ premiere-pro-mcp/
1425
1442
  ├── src/
1426
1443
  │ ├── index.ts # Entry point — stdio transport setup
1427
1444
  │ ├── http-server.ts # Entry point — HTTP/SSE transport (Fly.io / remote)
1428
- │ ├── server.ts # MCP server — registers 393 tools, filtered by authority profile
1445
+ │ ├── server.ts # MCP server — registers 434 tools, filtered by authority profile
1429
1446
  │ ├── bridge/
1430
1447
  │ │ ├── file-bridge.ts # File-based IPC (write .jsx, poll .json)
1431
1448
  │ │ └── script-builder.ts # ExtendScript generator with ES3 helpers
@@ -1,8 +1,8 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.aftereffects.bridge" ExtensionBundleVersion="1.21.0" ExtensionBundleName="MCP for Adobe After Effects">
2
+ <ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.aftereffects.bridge" ExtensionBundleVersion="1.23.0" ExtensionBundleName="MCP for Adobe After Effects">
3
3
  <ExtensionList>
4
- <Extension Id="com.mcp.aftereffects.bridge.panel" Version="1.21.0"/>
5
- <Extension Id="com.mcp.aftereffects.bridge.headless" Version="1.21.0"/>
4
+ <Extension Id="com.mcp.aftereffects.bridge.panel" Version="1.23.0"/>
5
+ <Extension Id="com.mcp.aftereffects.bridge.headless" Version="1.23.0"/>
6
6
  </ExtensionList>
7
7
  <ExecutionEnvironment>
8
8
  <HostList>
@@ -91,7 +91,7 @@
91
91
  encoding: "utf8",
92
92
  windowsHide: true,
93
93
  stdio: ["ignore", "pipe", "pipe"],
94
- timeout: 5000,
94
+ timeout: 30000,
95
95
  maxBuffer: 64 * 1024,
96
96
  env: commandEnvironment,
97
97
  }
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.21.0" ExtensionBundleName="MCP for Adobe Premiere Pro">
2
+ <ExtensionManifest Version="7.0" ExtensionBundleId="com.mcp.premiere.bridge" ExtensionBundleVersion="1.23.0" ExtensionBundleName="MCP for Adobe Premiere Pro">
3
3
  <ExtensionList>
4
- <Extension Id="com.mcp.premiere.bridge.panel" Version="1.21.0"/>
5
- <Extension Id="com.mcp.premiere.bridge.headless" Version="1.21.0"/>
4
+ <Extension Id="com.mcp.premiere.bridge.panel" Version="1.23.0"/>
5
+ <Extension Id="com.mcp.premiere.bridge.headless" Version="1.23.0"/>
6
6
  </ExtensionList>
7
7
  <ExecutionEnvironment>
8
8
  <HostList>
@@ -91,7 +91,7 @@
91
91
  encoding: "utf8",
92
92
  windowsHide: true,
93
93
  stdio: ["ignore", "pipe", "pipe"],
94
- timeout: 5000,
94
+ timeout: 30000,
95
95
  maxBuffer: 64 * 1024,
96
96
  env: commandEnvironment,
97
97
  }
@@ -81,7 +81,7 @@
81
81
  <section class="update-section" aria-live="polite">
82
82
  <div class="update-copy">
83
83
  <span class="section-label">MCP updates</span>
84
- <strong id="updateTitle">Version 1.21.0</strong>
84
+ <strong id="updateTitle">Version 1.23.0</strong>
85
85
  <span id="updateDetail">Checking the global MCP server and connector release…</span>
86
86
  </div>
87
87
  <button id="btnUpdate" class="button button-update" onclick="handleUpdateClick()" type="button" aria-describedby="updateDetail" disabled>
@@ -248,6 +248,8 @@ function writeBridgeHeartbeat() {
248
248
  try {
249
249
  fs.writeFileSync(stagedPath, JSON.stringify({
250
250
  protocolVersion: 1,
251
+ commandSchemaVersion: 1,
252
+ receiptVersion: 1,
251
253
  state: bridgeRunning ? "running" : "waiting"
252
254
  }), "utf-8");
253
255
  fs.renameSync(stagedPath, heartbeatPath);
@@ -7,7 +7,7 @@
7
7
  })(this, function () {
8
8
  "use strict";
9
9
 
10
- var CURRENT_VERSION = "1.21.0";
10
+ var CURRENT_VERSION = "1.23.0";
11
11
  var PACKAGE_NAME = "premiere-pro-mcp";
12
12
  var LATEST_PACKAGE_API = "https://registry.npmjs.org/" + PACKAGE_NAME;
13
13
  var LATEST_RELEASE_API =
@@ -95,7 +95,7 @@ export declare const brollReviewSchema: z.ZodObject<{
95
95
  }, z.core.$strict>;
96
96
  export declare function reviewDialogue(input: unknown): {
97
97
  cards: {
98
- decision: "rejected" | "approved" | "pending";
98
+ decision: "pending" | "rejected" | "approved";
99
99
  context: {
100
100
  before: string;
101
101
  passage: string;
@@ -155,7 +155,7 @@ export declare function reviewQuotes(input: unknown): {
155
155
  export declare function reviewText(input: unknown): {
156
156
  cards: {
157
157
  changed: boolean;
158
- decision: "rejected" | "approved" | "pending";
158
+ decision: "pending" | "rejected" | "approved";
159
159
  proposed_text: string;
160
160
  id: string;
161
161
  target_id: string;
@@ -165,7 +165,7 @@ export declare function reviewText(input: unknown): {
165
165
  }[];
166
166
  approved_changes: {
167
167
  changed: boolean;
168
- decision: "rejected" | "approved" | "pending";
168
+ decision: "pending" | "rejected" | "approved";
169
169
  proposed_text: string;
170
170
  id: string;
171
171
  target_id: string;
@@ -185,7 +185,7 @@ export declare function reviewSync(input: unknown): {
185
185
  evidence_status: string;
186
186
  offset_spread_seconds: number;
187
187
  proposed_offset_seconds: number | null;
188
- decision: "rejected" | "approved" | "pending";
188
+ decision: "pending" | "rejected" | "approved";
189
189
  id: string;
190
190
  camera_source_id: string;
191
191
  recorder_source_id: string;
@@ -201,7 +201,7 @@ export declare function reviewSync(input: unknown): {
201
201
  evidence_status: string;
202
202
  offset_spread_seconds: number;
203
203
  proposed_offset_seconds: number | null;
204
- decision: "rejected" | "approved" | "pending";
204
+ decision: "pending" | "rejected" | "approved";
205
205
  id: string;
206
206
  camera_source_id: string;
207
207
  recorder_source_id: string;
@@ -222,7 +222,7 @@ export declare function reviewSync(input: unknown): {
222
222
  };
223
223
  export declare function reviewBroll(input: unknown): {
224
224
  cards: {
225
- decision: "rejected" | "approved" | "pending";
225
+ decision: "pending" | "rejected" | "approved";
226
226
  timeline_end_seconds: number;
227
227
  video_only: boolean;
228
228
  id: string;
@@ -238,7 +238,7 @@ export declare function reviewBroll(input: unknown): {
238
238
  alternative_source_ids: string[];
239
239
  }[];
240
240
  approved_placements: {
241
- decision: "rejected" | "approved" | "pending";
241
+ decision: "pending" | "rejected" | "approved";
242
242
  timeline_end_seconds: number;
243
243
  video_only: boolean;
244
244
  id: string;
@@ -0,0 +1,197 @@
1
+ import { type ExpectedEdit, type TimelineSnapshot } from "./timeline-contract.js";
2
+ export declare function planAudioSynchronization(reference: number[], candidate: number[], sampleRate: number, maxLag: number): {
3
+ status: string;
4
+ reason: string;
5
+ candidates: never[];
6
+ host_applied: boolean;
7
+ confidence?: undefined;
8
+ ambiguity_margin?: undefined;
9
+ offset_convention?: undefined;
10
+ offset_seconds?: undefined;
11
+ scope?: undefined;
12
+ } | {
13
+ status: string;
14
+ confidence: number;
15
+ ambiguity_margin: number;
16
+ candidates: {
17
+ offset_samples: number;
18
+ correlation: number;
19
+ overlap_samples: number;
20
+ }[];
21
+ offset_convention: string;
22
+ offset_seconds: number | null;
23
+ host_applied: boolean;
24
+ scope: string;
25
+ reason?: undefined;
26
+ };
27
+ export declare function planAnchorSynchronization(referenceTicks: string[], candidateTicks: string[]): {
28
+ status: string;
29
+ offset_ticks: string;
30
+ confidence: number | null;
31
+ evidence: string;
32
+ disagreements: string[];
33
+ host_applied: boolean;
34
+ };
35
+ export declare function mapWordsToPlacements(wordInput: unknown, snapshotInput: unknown): {
36
+ transcript_revision: string;
37
+ snapshot_revision: string;
38
+ occurrences: {
39
+ occurrence_id: string;
40
+ placement_id: string;
41
+ word_index: number;
42
+ text: string;
43
+ source_start_ticks: string;
44
+ source_end_ticks: string;
45
+ sequence_start_ticks: string;
46
+ sequence_end_ticks: string;
47
+ clipped: boolean;
48
+ }[];
49
+ host_applied: boolean;
50
+ };
51
+ export declare function planMusicRemix(input: {
52
+ beats_ticks: string[];
53
+ source_duration_ticks: string;
54
+ target_duration_ticks: string;
55
+ protected_intro_ticks: string;
56
+ protected_outro_ticks: string;
57
+ crossfade_ticks?: string;
58
+ signal_classification: "music" | "silence" | "noise";
59
+ }): {
60
+ segments: {
61
+ source_in_ticks: string;
62
+ source_out_ticks: string;
63
+ }[];
64
+ target_duration_ticks: string;
65
+ crossfade_ticks: string;
66
+ review_required: boolean;
67
+ native_remix_supported: boolean;
68
+ nearest_beat_error_ticks?: undefined;
69
+ audible_clicks_verified?: undefined;
70
+ algorithm?: undefined;
71
+ } | {
72
+ segments: {
73
+ source_in_ticks: string;
74
+ source_out_ticks: string;
75
+ }[];
76
+ target_duration_ticks: string;
77
+ crossfade_ticks: string;
78
+ nearest_beat_error_ticks: string;
79
+ review_required: boolean;
80
+ native_remix_supported: boolean;
81
+ audible_clicks_verified: boolean;
82
+ algorithm: string;
83
+ };
84
+ export declare function planSceneSegmentation(input: {
85
+ source_id: string;
86
+ source_duration_ticks: string;
87
+ candidates: Array<{
88
+ ticks: string;
89
+ confidence: number;
90
+ classification: "cut" | "flash" | "pan" | "fade";
91
+ }>;
92
+ approved_indices: number[];
93
+ handle_ticks?: string;
94
+ }): {
95
+ source_id: string;
96
+ segments: {
97
+ index: number;
98
+ start_ticks: string;
99
+ end_ticks: string;
100
+ handle_in_ticks: string;
101
+ handle_out_ticks: string;
102
+ }[];
103
+ approved_candidates: {
104
+ ticks: string;
105
+ confidence: number;
106
+ classification: "cut" | "flash" | "pan" | "fade";
107
+ }[];
108
+ rejected_candidates: {
109
+ ticks: string;
110
+ confidence: number;
111
+ classification: "cut" | "flash" | "pan" | "fade";
112
+ }[];
113
+ preserve_audio: boolean;
114
+ apply_routes: string[];
115
+ host_applied: boolean;
116
+ };
117
+ export declare function verifyCaptionRenderEvidence(input: {
118
+ artifact_sha256: string;
119
+ frame_width: number;
120
+ frame_height: number;
121
+ safe_margin: number;
122
+ cues: Array<{
123
+ text: string;
124
+ bounds: {
125
+ x: number;
126
+ y: number;
127
+ width: number;
128
+ height: number;
129
+ };
130
+ missing_glyphs: string[];
131
+ line_breaks_verified: boolean;
132
+ bidi_verified: boolean;
133
+ sampled_ticks: string;
134
+ evidence_method: "manual_render_review" | "pixel_measurement";
135
+ }>;
136
+ }): {
137
+ artifact_sha256: string;
138
+ passed: boolean;
139
+ issues: {
140
+ index: number;
141
+ reason: string;
142
+ }[];
143
+ sampled_cues: number;
144
+ evidence_scope: string;
145
+ };
146
+ export declare function bindProxyProvenance(input: {
147
+ source_id: string;
148
+ source_sha256: string | null;
149
+ proxy_sha256: string | null;
150
+ original_offline: boolean;
151
+ proxy_attached: boolean;
152
+ analysis_provider: "original" | "proxy";
153
+ snapshot_revision: string;
154
+ export_provider_verified: boolean;
155
+ }): {
156
+ analysis_identity: string | null;
157
+ revision: string;
158
+ delivery_ready: boolean;
159
+ limitations: string[];
160
+ source_id: string;
161
+ source_sha256: string | null;
162
+ proxy_sha256: string | null;
163
+ original_offline: boolean;
164
+ proxy_attached: boolean;
165
+ analysis_provider: "original" | "proxy";
166
+ snapshot_revision: string;
167
+ export_provider_verified: boolean;
168
+ };
169
+ export declare function planStackedCameraEdit(snapshotInput: unknown, cuts: Array<{
170
+ start_ticks: string;
171
+ end_ticks: string;
172
+ camera_track_id: string;
173
+ }>, cameraTracks: string[], masterAudioTracks: string[]): {
174
+ snapshot_revision: string;
175
+ operations: ExpectedEdit[];
176
+ expected: {
177
+ snapshot: TimelineSnapshot;
178
+ changes: Array<{
179
+ id: string;
180
+ before: import("./timeline-contract.js").TimelineClip | null;
181
+ after: import("./timeline-contract.js").TimelineClip | null;
182
+ }>;
183
+ participants: string[];
184
+ host_verified: false;
185
+ };
186
+ master_audio: import("./timeline-contract.js").TimelineClip[];
187
+ duplicate_required: boolean;
188
+ native_multicam: boolean;
189
+ limitation: string;
190
+ };
191
+ /** Versioned receipt state is a review aid; loading never executes pending work. */
192
+ export declare function validateWorkflowCheckpoint(input: unknown): {
193
+ operations: Record<string, unknown>[];
194
+ automatic_replay: false;
195
+ recovery_required: boolean;
196
+ };
197
+ //# sourceMappingURL=editorial-workflows.d.ts.map