Spaces:
Running
AI Copilot
Status
AI Copilot is implemented in the current working tree as a bounded, server-authoritative orchestration layer with durable runs, typed actions, scope enforcement, and MCP transport. Provider credential certification, PostgreSQL/RLS runtime verification, Docker, and Hugging Face startup remain deferred until all planned product phases are complete.
AI Copilot is a validated orchestration layer over existing MediaRouter services. It does not execute arbitrary model output and does not duplicate project, asset, editor, AI Studio, generation, or render business logic.
Architecture and planner
POST /v1/copilot/runs builds a bounded server-authoritative context, creates a
strict action plan, and stores a durable copilot_runs record. The current
provider registry has no text/tool-calling model, so the planner is deliberately
deterministic. It recognizes only registered intents and reports unsupported
capabilities rather than fabricating a model response.
The context contains workspace/project IDs, selected asset and clip IDs, a small editor summary, active tool, and capability names. Workspace identity is derived from authentication. Assets and clips are revalidated against canonical workspace/project state. Binary media, signed URLs, credentials, complete editor documents, and provider payloads are excluded.
Action registry
Registered actions are:
project.openasset.selectai.generate_imageai.generate_videoeditor.split_clipeditor.delete_clipeditor.set_durationeditor.add_clipeditor.render
Each definition declares permission, capability, destructive/external flags, confirmation policy, handler, and audit classification. Pydantic discriminated unions reject unknown action types and fields. There is no eval, dynamic code, shell, SQL, arbitrary URL, filesystem-path, or provider-credential action.
Execution and confirmation
Plans are created before execution. Generation, rendering, and clip deletion
require explicit confirmed=true; the server rejects attempts to bypass this.
Execution uses the authenticated user's scopes and checks project, asset, AI,
editor, render, and job permissions again.
Execution claims and pre-execution cancellation use row-locked state transitions. Concurrent execute/cancel requests therefore cannot run the same plan twice or move an already executing run back to a pre-execution state.
Editor actions load the authoritative revision, mutate a validated
EditorDocument, and save through ProjectEditorService optimistic
concurrency. AI actions call AiStudioService. Rendering calls
ProjectRenderService. Child AI/render jobs keep their existing durable
idempotency and lifecycle.
Copilot run states are plan_ready, blocked, executing, completed,
partial, failed, and cancelled. Successful action results are retained so
a later failure reports partial completion without rerunning completed
non-idempotent work. Progress is action state only; no synthetic percentages
are generated.
API and persistence
POST /v1/copilot/capabilitiesPOST /v1/copilot/runsGET /v1/copilot/runsGET /v1/copilot/runs/{id}POST /v1/copilot/runs/{id}/executePOST /v1/copilot/runs/{id}/cancelGET /v1/copilot/history
Run creation requires Idempotency-Key. The fingerprint includes bounded
request and authoritative context. Migration
app/projects/migrations/0005_ai_copilot.sql is additive, applies after
0004_ai_studio.sql, enables FORCE RLS, enforces workspace/project ownership,
and is never run automatically in production.
Security, rate limiting, and audit
Scopes are copilot:read and copilot:execute; action-specific scopes remain
mandatory. Existing request/job rate limiting applies to Copilot planning and
execution, while AI/render child services retain their own enforcement.
Untrusted user and asset text is data, never an instruction source.
Audit events include run start/plan/action start/action completion/action failure/run completion/failure/cancellation. Metadata is bounded and excludes the user request, prompts, credentials, signed URLs, tokens, and raw provider responses. Structured logs contain IDs, action type, status, duration, and safe error categories only.
Frontend, SDK, MCP, and n8n
The workspace top bar opens an accessible responsive right-side panel. TanStack Query owns runs, history, capabilities, and action state. Zustand owns only panel/draft/selection UI state. Content Studio supplies selected clip IDs and an editor summary; project routes and project assets supply context. Copilot runs also appear in global search and the shared activity drawer. Completed action results link to existing project, asset, AI Studio, job, and Content Studio destinations when those canonical routes exist.
TypeScript and Python SDKs expose create/get/list/history/execute/cancel run
methods through client.copilot.
MCP and n8n are intentionally not expanded in this phase. The current MCP/n8n surfaces would expose a broad plan-execution operation rather than individual typed registry actions. Direct deterministic MediaRouter operations remain the safer automation interface until those transports support the action catalog without duplicating business logic.
Production Docker, PostgreSQL/RLS, FFmpeg, Python 3.10, and provider credential certification remain deferred to the final product-wide certification phase.