# Dragonflight MAM — Premiere Pro UXP panel (v2.0.0)

The successor to the CEP panel at `services/premiere-plugin/`.

**Why this exists:** Premiere Pro 26.0.x broke `csInterface.evalScript`'s
return-value callback — it no longer fires. That deadlocks any CEP panel
that needs to call back into Premiere (importFiles, sequence access, etc).
Adobe's path forward is UXP; this panel is the minimum viable port that
restores the Import Proxy / Import Hi-Res workflow.

## Scope (v2.0.0)

In:
- Connect to a Dragonflight server (URL + Bearer token, persisted in localStorage)
- Browse the asset library (search, refresh, grid with thumbnails)
- **Import Proxy** — downloads the proxy MP4 and adds it to the active project
- **Import Hi-Res** — downloads the original from S3 (presigned URL) and imports

Out (carried over from the CEP panel later, as v2.x):
- Mount Live (SMB live preview)
- Conform / Auto-Relink / Batch Trim
- Timeline export
- Settings tabs (Account, Tokens, S3) — use the web UI for now

## Project layout

```
manifest.json     UXP manifest v5 (host=premierepro, minVersion=26.0.0)
index.html        Panel shell (vanilla HTML)
styles.css        Mirrors the web UI's dark design tokens
src/
  ui.js           DOM helpers, toast, progress, formatting
  api.js          Dragonflight HTTP client (Bearer auth, redirect handling)
  library.js      Asset grid render + selection
  import-flow.js  Download (streamed) + Premiere importFiles
  main.js         Bootstrap, event wiring
icons/            DarkIcon.png + LightIcon.png  (23x23, optional)
build/pack.mjs    Pack into .ccx for install
```

## Build

Requires Node 18+.

```bash
cd services/premiere-plugin-uxp
node build/pack.mjs
# → build/dist/dragonflight-mam-2.0.0.ccx
```

(Uses system `zip`. On Windows hosts use Compress-Archive — error message
shows the exact command.)

## Install on Windows

Prerequisite: **Premiere Pro Preferences > Plugins > Enable developer mode**
must be toggled on (one-time, per machine). This is required for any UXP
plugin not distributed via Creative Cloud Marketplace.

```powershell
& "C:\Program Files\Common Files\Adobe\Adobe Desktop Common\RemoteComponents\UPI\UnifiedPluginInstallerAgent\UnifiedPluginInstallerAgent.exe" /install "C:\path\to\dragonflight-mam-2.0.0.ccx"
```

That writes to `%APPDATA%\Adobe\UXP\Plugins\External\net.wilddragon.dragonflight.uxp\` and registers the plugin with UPIA.

To uninstall:
```powershell
& "...\UnifiedPluginInstallerAgent.exe" /remove net.wilddragon.dragonflight.uxp
```

Open the panel in Premiere via **Window > Extensions > Dragonflight MAM**.

## Development loop (Adobe UXP Developer Tool)

For iterative dev without rebuilding+reinstalling:
1. Install **Adobe UXP Developer Tool** ("UDT") from Creative Cloud.
2. UDT → Add Plugin → point at this folder.
3. Load → opens the panel in Premiere with hot-reload.

## Known limits

- Adobe strips `Authorization` headers on cross-origin redirects. `import-flow.js`
  uses `redirect: 'manual'` and drops the Bearer when hopping to a different
  host (e.g. when the server 302s us to the S3 endpoint).
- `Project.importFiles()` returns a `boolean`, not the new `ProjectItem`. To
  locate the imported item, `Import.locateImported(project, filename)` does a
  rootItem.getItems() diff after import.
- UXP's `os.tmpdir()` resolves to Windows `%TEMP%` which is cleared by Disk
  Cleanup. For long-lived downloads, persist explicitly elsewhere.
