- Adicionado estrutura completa do projeto - Configurado MCP server para Premiere Pro - Adicionado documentação e skills - Configurado Gitignore para o projeto
233 lines
14 KiB
TypeScript
Executable File
233 lines
14 KiB
TypeScript
Executable File
export type AdvancedFeatureBackend = "cep" | "uxp";
|
|
export type AdvancedFeatureStatus =
|
|
| "uxp-read-only"
|
|
| "external-api-required"
|
|
| "user-assisted"
|
|
| "unsupported-public-api"
|
|
| "local-planning"
|
|
| "planned-local";
|
|
|
|
export type AdvancedFeatureAccess =
|
|
| "direct"
|
|
| "observable-only"
|
|
| "artifact-import"
|
|
| "external-provider"
|
|
| "user-assisted"
|
|
| "unavailable"
|
|
| "planned";
|
|
|
|
export interface AdvancedFeatureContext {
|
|
backend?: AdvancedFeatureBackend;
|
|
premiereVersion?: string;
|
|
frameIoEntitled?: boolean;
|
|
generativeAiEntitled?: boolean;
|
|
networkAvailable?: boolean;
|
|
}
|
|
|
|
function versionAtLeast(version: string | undefined, minimum: string): boolean | null {
|
|
if (!version) return null;
|
|
if (!/^\d+(?:\.\d+){0,3}$/.test(version)) throw new Error("premiere_version must contain only numeric version components");
|
|
const current = version.split(".").map(Number);
|
|
const required = minimum.split(".").map(Number);
|
|
for (let index = 0; index < Math.max(current.length, required.length); index += 1) {
|
|
const left = current[index] ?? 0;
|
|
const right = required[index] ?? 0;
|
|
if (left !== right) return left > right;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
export function buildAdvancedFeatureSupport(context: AdvancedFeatureContext = {}) {
|
|
const backend = context.backend ?? "cep";
|
|
const productionsVersionEligible = versionAtLeast(context.premiereVersion, "25.6.0");
|
|
|
|
return {
|
|
schemaVersion: 1,
|
|
context: {
|
|
backend,
|
|
premiereVersion: context.premiereVersion ?? null,
|
|
frameIoEntitled: context.frameIoEntitled ?? null,
|
|
generativeAiEntitled: context.generativeAiEntitled ?? null,
|
|
networkAvailable: context.networkAvailable ?? null,
|
|
},
|
|
policy: {
|
|
publicApisOnly: true,
|
|
uiAutomation: false,
|
|
privateApis: false,
|
|
reportTool: {
|
|
transport: "local",
|
|
callableThroughCurrentMcpTransport: true,
|
|
contactsPremiereHost: false,
|
|
note: "This report is computed locally from documented support metadata and caller-supplied context.",
|
|
},
|
|
featureOperations: {
|
|
currentMcpTransport: "cep",
|
|
uxpOperationsRoutedByCurrentMcpTransport: false,
|
|
liveHostCapabilityNegotiationRequired: true,
|
|
note: "UXP-only feature operations require the separate UXP bridge and live capability negotiation.",
|
|
},
|
|
},
|
|
features: {
|
|
productions: {
|
|
status: "uxp-read-only" as AdvancedFeatureStatus,
|
|
access: "direct" as AdvancedFeatureAccess,
|
|
staticEligibility: {
|
|
backendEligible: backend === "uxp",
|
|
versionEligible: productionsVersionEligible,
|
|
eligible:
|
|
backend === "uxp" && productionsVersionEligible === true
|
|
? true
|
|
: backend !== "uxp" || productionsVersionEligible === false
|
|
? false
|
|
: null,
|
|
},
|
|
liveHostVerificationRequired: true,
|
|
callableThroughCurrentMcpTransport: false,
|
|
minPremiereVersion: "25.6.0",
|
|
entitlement: "local-project-feature",
|
|
documentedSurface: [
|
|
"PRProduction.getActiveProduction",
|
|
"PRProduction.getScratchDiskSettings",
|
|
],
|
|
supportedOperations: ["inspect active Production", "inspect scratch-disk settings"],
|
|
unsupportedOperations: ["create Production", "add project", "lock project", "resolve conflicts"],
|
|
userAssistedWorkflow: "Open the Production in Premiere, then use a UXP-capable client to inspect its active state.",
|
|
docs: "https://developer.adobe.com/premiere-pro/uxp/ppro_reference/classes/prproduction/",
|
|
},
|
|
teamProjects: {
|
|
status: "unsupported-public-api" as AdvancedFeatureStatus,
|
|
access: "unavailable" as AdvancedFeatureAccess,
|
|
callableThroughCurrentMcpTransport: false,
|
|
entitlement: "Creative Cloud Team Projects entitlement",
|
|
supportedOperations: [],
|
|
unsupportedOperations: ["create", "share", "sync", "publish changes", "resolve conflicts"],
|
|
userAssistedWorkflow: "Use Premiere's Team Projects panel for collaboration and conflict resolution.",
|
|
detection: "No safe documented project-state discriminator is exposed to this integration.",
|
|
},
|
|
frameIo: {
|
|
status: "external-api-required" as AdvancedFeatureStatus,
|
|
access: "external-provider" as AdvancedFeatureAccess,
|
|
callableThroughCurrentMcpTransport: false,
|
|
entitlementSatisfied: context.frameIoEntitled ?? null,
|
|
prerequisites: ["Frame.io account and project access", "Frame.io API integration", "network access"],
|
|
networkSatisfied: context.networkAvailable ?? null,
|
|
supportedOperations: [],
|
|
unsupportedOperations: ["upload", "create review link", "read comments", "convert comments to markers"],
|
|
userAssistedWorkflow: "Use Premiere's Frame.io panel, or connect a separately authenticated Frame.io API client.",
|
|
detection: "Premiere DOM does not safely identify Frame.io review state.",
|
|
},
|
|
mediaIntelligence: {
|
|
status: "user-assisted" as AdvancedFeatureStatus,
|
|
access: "user-assisted" as AdvancedFeatureAccess,
|
|
callableThroughCurrentMcpTransport: false,
|
|
entitlement: "Premiere feature availability varies by build and locale",
|
|
supportedOperations: [],
|
|
unsupportedOperations: ["run semantic media analysis", "query Premiere's Media Intelligence index"],
|
|
userAssistedWorkflow: "Run Media Intelligence search in Premiere, then select or organize the resulting clips for ordinary MCP inspection.",
|
|
detection: "Search-index state and semantic matches are not exposed by a documented public API.",
|
|
},
|
|
generativeExtend: {
|
|
status: "user-assisted" as AdvancedFeatureStatus,
|
|
access: "observable-only" as AdvancedFeatureAccess,
|
|
callableThroughCurrentMcpTransport: false,
|
|
entitlementSatisfied: context.generativeAiEntitled ?? null,
|
|
prerequisites: ["eligible Premiere build", "Adobe generative AI entitlement", "network access"],
|
|
networkSatisfied: context.networkAvailable ?? null,
|
|
supportedOperations: ["inspect a generated clip as an ordinary project/timeline item after Premiere creates it", "wait for a bounded UXP Generative Extend completion receipt after the editor starts the operation"],
|
|
unsupportedOperations: ["invoke Generative Extend", "inspect generation job or provenance"],
|
|
userAssistedWorkflow: "Run Generative Extend in Premiere, then re-query project and timeline items.",
|
|
detection: "No documented flag safely identifies the generated clip or proves rendered output/provenance; the UXP bridge can only observe an operation-completion receipt.",
|
|
},
|
|
objectMask: {
|
|
status: "partial" as AdvancedFeatureStatus,
|
|
access: "direct" as AdvancedFeatureAccess,
|
|
callableThroughCurrentMcpTransport: true,
|
|
prerequisites: ["Premiere Pro 26.3+", "connected UXP bridge"],
|
|
supportedOperations: ["detect whether a project or sequence contains an Object Mask"],
|
|
unsupportedOperations: ["invoke object selection", "create an Object Mask", "run tracking", "edit Object Mask parameters"],
|
|
userAssistedWorkflow: "Create and track the mask in Premiere; the MCP can then detect its presence through the documented UXP API.",
|
|
detection: "Premiere Pro 26.3+ exposes ObjectMaskUtils.hasObjectMask through the documented UXP API.",
|
|
},
|
|
captionTranslation: {
|
|
status: "user-assisted" as AdvancedFeatureStatus,
|
|
access: "artifact-import" as AdvancedFeatureAccess,
|
|
callableThroughCurrentMcpTransport: false,
|
|
prerequisites: ["supported source/target language", "network access and service availability"],
|
|
networkSatisfied: context.networkAvailable ?? null,
|
|
supportedOperations: ["inspect resulting caption tracks through documented caption-track APIs"],
|
|
unsupportedOperations: ["invoke caption translation", "inspect translation job state"],
|
|
userAssistedWorkflow: "Translate captions in Premiere, then inspect the resulting caption track.",
|
|
detection: "No documented metadata identifies a caption track as machine-translated.",
|
|
},
|
|
speechToText: {
|
|
status: "user-assisted" as AdvancedFeatureStatus,
|
|
access: "artifact-import" as AdvancedFeatureAccess,
|
|
callableThroughCurrentMcpTransport: false,
|
|
minPremiereVersionForTranscriptIO: "25.6.0",
|
|
supportedOperations: ["UXP transcript JSON import", "UXP transcript JSON export"],
|
|
unsupportedOperations: ["start Speech-to-Text transcription", "monitor transcription progress"],
|
|
userAssistedWorkflow: "Transcribe the clip in Premiere; UXP clients can then import or export the transcript JSON.",
|
|
detection: "Transcript.hasTranscript is documented in Premiere 26.3+; export probing is available in 25.6+.",
|
|
docs: "https://developer.adobe.com/premiere-pro/uxp/ppro_reference/classes/transcript",
|
|
},
|
|
enhanceSpeech: {
|
|
status: "unsupported-public-api" as AdvancedFeatureStatus,
|
|
access: "user-assisted" as AdvancedFeatureAccess,
|
|
callableThroughCurrentMcpTransport: false,
|
|
supportedOperations: ["inspect generic audio effects if Premiere represents the result there"],
|
|
unsupportedOperations: ["invoke Enhance Speech", "set mix amount", "inspect analysis progress"],
|
|
userAssistedWorkflow: "Apply Enhance Speech in Premiere, then verify playback and generic audio state manually.",
|
|
detection: "No documented stable Enhance Speech artifact identifier or invocation API is exposed.",
|
|
},
|
|
remix: {
|
|
status: "unsupported-public-api" as AdvancedFeatureStatus,
|
|
access: "user-assisted" as AdvancedFeatureAccess,
|
|
callableThroughCurrentMcpTransport: false,
|
|
supportedOperations: ["inspect the resulting timeline clip duration after the user applies Remix"],
|
|
unsupportedOperations: ["invoke Remix", "set target duration through a dedicated API", "inspect analysis state"],
|
|
userAssistedWorkflow: "Apply Remix in Premiere, then inspect the resulting clip duration with timeline tools.",
|
|
detection: "A changed clip duration alone is not proof that Remix was applied.",
|
|
},
|
|
editorialPlans: {
|
|
status: "local-planning" as AdvancedFeatureStatus,
|
|
access: "direct" as AdvancedFeatureAccess,
|
|
callableThroughCurrentMcpTransport: true,
|
|
supportedOperations: ["create an evidence-backed editorial plan", "preview a plan against saved local context revisions"],
|
|
unsupportedOperations: ["apply a compound autonomous edit", "call an LLM", "upload media", "bypass the authority of the routed Premiere tool"],
|
|
userAssistedWorkflow: "Capture local project context, create and preview a plan, then review each routed Premiere operation before invoking it.",
|
|
detection: "Plans are local, revision-aware decision artifacts. A matching stored revision does not prove that the live Premiere host has not changed since capture.",
|
|
},
|
|
localSemanticIndex: {
|
|
status: "planned-local" as AdvancedFeatureStatus,
|
|
access: "planned" as AdvancedFeatureAccess,
|
|
callableThroughCurrentMcpTransport: false,
|
|
supportedOperations: [],
|
|
unsupportedOperations: ["sample media", "run local visual/audio inference", "query a semantic index"],
|
|
userAssistedWorkflow: "Use explicit project-context enrichments today. A future local worker must be workspace-scoped, opt-in, and separately benchmarked before it can add semantic evidence.",
|
|
detection: "Premiere's Media Intelligence index is not exposed by a documented public API; this planned feature must use a separately built local index and must not be branded as Adobe Media Intelligence.",
|
|
},
|
|
premiereAiAssistant: {
|
|
status: "user-assisted" as AdvancedFeatureStatus,
|
|
access: "user-assisted" as AdvancedFeatureAccess,
|
|
callableThroughCurrentMcpTransport: false,
|
|
prerequisites: ["Premiere (beta) access", "Adobe AI Assistant availability", "editor direction"],
|
|
supportedOperations: ["inspect and edit the resulting ordinary project items/sequences through supported MCP tools"],
|
|
unsupportedOperations: ["invoke Premiere AI Assistant", "read its chat history", "reuse its private reasoning/tool calls"],
|
|
userAssistedWorkflow: "Run Premiere AI Assistant in its beta panel, then capture and inspect the resulting project state through MCP before any follow-up mutation.",
|
|
detection: "No documented UXP or CEP API exposes Premiere AI Assistant conversations, permissions, planning state, or invocation.",
|
|
},
|
|
generativeMedia: {
|
|
status: "user-assisted" as AdvancedFeatureStatus,
|
|
access: "user-assisted" as AdvancedFeatureAccess,
|
|
callableThroughCurrentMcpTransport: false,
|
|
prerequisites: ["Premiere (beta) access", "eligible Adobe plan/region", "network access", "generative credits"],
|
|
networkSatisfied: context.networkAvailable ?? null,
|
|
supportedOperations: ["inspect generated media as ordinary project/timeline items after the editor creates it"],
|
|
unsupportedOperations: ["invoke video or sound-effect generation", "choose Adobe or partner models", "inspect generation history or credit use"],
|
|
userAssistedWorkflow: "Generate media in Premiere (beta), review it in the generation history, then manually quarantine and inspect the resulting project items before using them in a delivery sequence.",
|
|
detection: "No documented public API exposes the Generative Media Tool task bar, partner-model selection, prompts, reference frames, or generation history.",
|
|
},
|
|
},
|
|
};
|
|
}
|