feat: initial commit - Jhonny Editor
- Adicionado estrutura completa do projeto - Configurado MCP server para Premiere Pro - Adicionado documentação e skills - Configurado Gitignore para o projeto
This commit is contained in:
Executable
+232
@@ -0,0 +1,232 @@
|
||||
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.",
|
||||
},
|
||||
},
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user