feat(F205): Video Forge — declarative protocol engine + inline video delivery#1144
feat(F205): Video Forge — declarative protocol engine + inline video delivery#1144mindfn wants to merge 11 commits into
Conversation
…delivery Two complete plugin capabilities (video-gen, video-analysis) with: Protocol Engine: - YAML-driven MCP tool generation (submit/poll/execute) - 5 auth strategies (apikey, query-param, jwt-hs256, hmac-sha256-v4, custom) - Template rendering with filters (default, base64) - JSONPath response extraction - Default baseUrl from protocol YAML (provider fallback) - Capability-aware MIME inference (video + image types) Inline Video Delivery: - RichFileBlock schema (kind:"file") for media playback in chat - FileBlock.tsx renders <video>/<img> based on mimeType - emitMediaRichBlock() auto-emits via callback API on poll success - Best-effort graceful degradation when callback unavailable Plugin Infrastructure: - PluginResourceActivator registers plugin MCP servers - Plugin capability source migration (plugin → cat-cafe) - MCP drift detection for plugin-managed servers - Skill sync for plugin-owned skills Providers: zhipu, kling, jimeng (video-gen); gemini, zhipu (video-analysis) Tests: 39 protocol engine tests, plugin manifest safety tests Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3d3ed8e2ef
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…ation tests The protocol engine (mcp-server) is separate from the skills management system. Three F205 changes over-reached into skills code: 1. Source migration in readCapabilitiesConfig converted source:'plugin' to source:'cat-cafe' on read — this leaked plugin disable state into loadDisabledCatCafeSkillNames and collectCatCafeSkillPolicy, breaking global inheritance for projects with same-id plugin entries. 2. !cap.pluginId filter in managedCaps excluded plugin skills from configDisabledSet — disabled plugin skills were treated as enabled. 3. !cap.pluginId filter in updateSkillMountPaths and removeCatCafeSkillCapabilities — plugin skills were neither synced nor cleaned up properly. All three upstream tests now pass: same-id plugin policy (GET), global guard (sync-skill), mount/unmount lifecycle (sync). [宪宪/claude-opus-4-6🐾] Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The video and monitor-wave SVG paths (from 暹罗猫's design) were added in earlier F205 commits but lost during squash into the final commit. Without these paths, HubIcon returns null and only the colored background renders — no icon inside. [宪宪/claude-opus-4-6🐾] Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…lt, runtime root 1. (P1) Restore source!='external' guard in MCP orphan cleanup. Project-only external MCPs are legitimate (installed via POST /api/capabilities/mcp/install with projectPath) and must not be deleted during cascade sync. 2. (P2) Add model defaults to all Jimeng poll req_key fields. Without defaults, poll sends req_key="" when VIDEO_GEN_MODEL is blank, mismatching submit's default and causing task lookup failures. 3. (P2) Use resolveMainProjectRoot() for plugin MCP entrypoint resolution. The video plugin's protocol-server.js is in the monorepo; resolveProjectRoot() may return a config workspace in split deployments, breaking the relative path lookup. [宪宪/claude-opus-4-6🐾] Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
All three codex findings addressed in P1 — Preserve project-local MCPs during syncRestored P2 — Jimeng poll req_key defaultsAdded P2 — Runtime root for plugin MCP entrypointsChanged to @codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 4bacda8a69
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…rkingDir P1 — Restore source!='external' guard in mcp-drift-detector to match sync engine (project-local MCP installs via POST /api/capabilities/mcp/install are legitimate, not orphans). P1 — Add yaml to mcp-server/package.json dependencies. The protocol loader imports yaml but only the root devDependencies declared it, which breaks production installs that strip devDependencies. P2 — Restore plugin-local workingDir in PluginResourceActivator. Args are already resolved to absolute paths via existsSync fallback, so workingDir should remain the plugin folder for plugin-local file access compatibility. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
All three R2 codex findings addressed in P1 — Restore external MCP guard in drift detectorRestored P1 — Declare yaml as mcp-server runtime dependencyAdded P2 — Restore plugin-local workingDirReverted @codex review |
pnpm-lock.yaml was out of sync after adding yaml to packages/mcp-server/package.json dependencies. CI uses --frozen-lockfile which rejects mismatches. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 3626da2000
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
- mcp-drift-sync test: external-source MCPs are preserved (not flagged as orphans) since drift detector restored source!='external' guard - plugin-manifest-safety test: workingDir is plugin folder (join(pluginsDir, manifestId)), not project root — args are resolved to absolute paths separately via existsSync fallback Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
R3 lockfile finding was stale — already fixed in @codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 402caf8888
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
When DEFAULT_OWNER_USER_ID is unset, allowMissingOwner:true caused requireCapabilityWriteOwner to return null for any sessionUserId, making secrets visible to any authenticated session regardless of network origin. Add isLocalCapabilityWriteRequest check so single-user mode only exposes secrets on localhost — matching the docstring intent of "any authenticated local user." Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
R4 finding addressed in P1 — Require localhost for MCP secrets in single-user modeWhen @codex review |
|
Codex Review: Didn't find any major issues. Breezy! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
Summary
AbortSignal.timeout(30s)on every fetch, and terminal state detection (succeeded/failed/malformed)kind:"file"rich blocks — poll tool auto-emits media blocks when callback credentials are available;FileBlock.tsxrenders<video>for video MIME typesparamName), JWT-HS256, HMAC-SHA256-v4 — all wired throughprotocol-server.tsassemblyvideo-gen(text2video, image2video) andvideo-analysis(analyze_url) with per-provider protocol YAMLResolves the protocol engine and provider plugin portion of community PR #689 under feature anchor F205.
Test Evidence
buildProviderFromEnvassemblyAbortSignal.timeout(30_000)interception, camelCase variable body wiring, paramName full production chain (via exportedbuildProtocolToolConfig), auth schema validationAcceptance Criteria Coverage
ProtocolTemplateSchema)Files Changed
New (protocol engine + plugins): 20 files — YAML templates, auth strategies, engine, loader, types, protocol-server, protocol-tools, 2 test files, plugin manifests, skill docs
Modified: 50 files — capability orchestrator, MCP config adapters (simplified), rich block rules (file block schema), FileBlock.tsx (video rendering), capability-tips (F205 tip), test updates
🐾 Peer-reviewed by Sol (gpt-5.6-sol) — R9 verdict: PASS (0×P1 / 0×P2)
🤖 Generated with Claude Code