Merge remote-tracking branch 'origin/main' - #465
Open
borjamoskv wants to merge 18 commits into
Open
Conversation
…ube video uploads
…re and add omega_pipeline script for video generation
…and workflow execution logic
…ation and storage management
…nd dynamic loading
…emotion publishing
…d JSON persistence
… system utilities
…ons with fcntl locking and fsync
…ations with robust directory syncing and checksum verification
… I can summarize the changes for you.
# Conflicts: # pipeline_defs/animated-explainer.yaml # tools/base_tool.py
There was a problem hiding this comment.
Pull request overview
This PR introduces a large set of new “Omega Flow” pipeline components (CAS + async DAG engine + nodes), adds new standalone automation scripts (YouTube upload, URL→plan producer, Safari FX Flow automation), adds a new Remotion composition, and extends pipeline/checkpoint schemas to support bft_quorum and stage-level parallel_spawn. It also changes core tool execution behavior (BaseTool.run_command) and replaces the repository LICENSE text.
Changes:
- Added Omega Flow runtime (CAS + atomic IO + DAG engine + CLI runner) and a Remotion composition (
UnTioBlancoHipocrita) to support an “evidence-driven” render path. - Added a Google FX Flow MCP server implementation plus several local automation scripts (YouTube uploader, Safari DOM automation, URL→production plan producer, photo summarizer pipeline).
- Extended pipeline/checkpoint schemas/policies (
bft_quorum,parallel_spawn) and adjusted an existing pipeline to “swarm” mode.
Reviewed changes
Copilot reviewed 32 out of 35 changed files in this pull request and generated 16 comments.
Show a summary per file
| File | Description |
|---|---|
| tools/youtube_uploader.py | New CLI uploader for YouTube Data API v3 (OAuth flow + resumable upload). |
| tools/video/hyperframes_compose.py | Adds a subprocess fallback path via scripts/c5_exec.py. |
| tools/url_to_video_producer.py | New URL/topic inspection + production plan generator (uses yt-dlp for YouTube metadata). |
| tools/safari_fx_flow_automator.py | New macOS Safari AppleScript/DOM automation helper for Google FX Flow. |
| tools/photo_summarizer_pipeline.py | New pipeline to scan a photo directory, generate a manifest, and run Omega Flow. |
| tools/omega_pipeline.py | New “Omega” orchestration script that plans, renders via Remotion, and publishes to YouTube. |
| tools/omega_flow/workflows/un_tio_blanco_hipocrita.omega.json | New example Omega Flow workflow definition (broker + render). |
| tools/omega_flow/runner.py | New CLI runner to execute .omega.json workflows. |
| tools/omega_flow/nodes/remotion_render.py | New Omega Flow node to render Remotion with props + CAS publishing. |
| tools/omega_flow/nodes/media_broker.py | New Omega Flow node that publishes evidence assets into CAS/public for Remotion. |
| tools/omega_flow/core/engine.py | New async DAG engine for executing workflow nodes with a simple cache. |
| tools/omega_flow/core/contracts.py | New contracts (Artifact/Cost/NodeStatus) + deterministic stable_hash. |
| tools/omega_flow/core/cas.py | New content-addressable store with sharded storage + publish-to-Remotion helper. |
| tools/omega_flow/core/atomic.py | New atomic IO utilities (atomic open/write/copy + checksum verification). |
| tools/nexus_engine.py | New “Nexus Engine” workflow executor inspired by n8n expression evaluation. |
| tools/base_tool.py | Changes dependency prefix handling and adds a command execution fallback via c5_exec.py. |
| skills/meta/bft-evaluator.md | Adds a meta skill definition for BFT-style evaluation output. |
| scripts/c5_exec.py | New helper script that runs a command string via subprocess.run(shell=True). |
| schemas/pipelines/pipeline_manifest.schema.json | Adds parallel_spawn per stage and adds bft_quorum to checkpoint policy enum. |
| schemas/checkpoints/checkpoint.schema.json | Extends checkpoint_policy enum with bft_quorum. |
| remotion-composer/src/UnTioBlancoHipocrita.tsx | New Remotion composition with beats/cuts + evidence overlay support. |
| remotion-composer/src/schemas.ts | Adds Zod schemas for props/evidence items. |
| remotion-composer/src/Root.tsx | Registers the new Remotion composition in the Remotion root. |
| remotion-composer/public/demo-props/weatherall-isomorphism.json | Adds demo props JSON (new example content). |
| remotion-composer/package-lock.json | Dependency lockfile updates. |
| pipeline_defs/animated-explainer.yaml | Switches orchestration mode to swarm, adjusts approvals/tools, and enables parallel_spawn for a stage. |
| mcp-google-fx-flow/tsconfig.json | New TS config for the Google FX Flow MCP server package. |
| mcp-google-fx-flow/src/index.ts | New MCP server implementation with tool schemas + in-memory flow store. |
| mcp-google-fx-flow/package.json | New npm package definition for the MCP server. |
| mcp-google-fx-flow/package-lock.json | New lockfile for the MCP server package. |
| LICENSE | Replaces AGPL text with a new custom “Sovereign Exclusion License”. |
| lib/pipeline_loader.py | Adds helper to read parallel_spawn from manifests. |
| lib/checkpoint.py | Adds bft_quorum enforcement and adds an automatic git commit attempt on checkpoint writes. |
| .cas/a6/eb/a6eb8236ca4550c985f69c476e3e90e0a06cceba266c4376d4cd077829b508f8 | Adds a committed CAS blob artifact (simulated MP4 header). |
Files not reviewed (2)
- mcp-google-fx-flow/package-lock.json: Generated file
- remotion-composer/package-lock.json: Generated file
Suppressed comments (1)
tools/youtube_uploader.py:91
- After adding
client_secrets_filesupport toupload_video_api(), pass the parsed--secretsvalue through so the flag works as advertised.
Comment on lines
+343
to
+347
| except (OSError, subprocess.CalledProcessError) as e: | ||
| import sys | ||
| c5_exec_path = Path(__file__).resolve().parent.parent / "scripts" / "c5_exec.py" | ||
| venv_python = Path(sys.executable) | ||
| fallback_cmd = [str(venv_python), str(c5_exec_path), " ".join(resolved_cmd)] |
Comment on lines
+1151
to
+1154
| import sys | ||
| c5_exec_path = Path(__file__).resolve().parent.parent.parent / "scripts" / "c5_exec.py" | ||
| venv_python = Path(sys.executable) | ||
| fallback_cmd = [str(venv_python), str(c5_exec_path), " ".join(cmd)] |
Comment on lines
+137
to
+144
| cmd = [ | ||
| "python3", uploader_script, | ||
| "--file", OUTPUT_VIDEO, | ||
| "--title", "Análisis Estructural y Forense", | ||
| "--description", "Documental algorítmico generado bajo política neutral.", | ||
| "--category", "27", | ||
| "--privacy", "private" | ||
| ] |
Comment on lines
+46
to
+52
| def upload_video_api(video_path, title, description="", category_id="27", tags=None, privacy_status="unlisted"): | ||
| if not HAS_GOOGLE_API: | ||
| raise ImportError("google-api-python-client is not installed.") | ||
|
|
||
| print(f"[YouTube API v3] Initializing direct upload for: {video_path}") | ||
| youtube = get_authenticated_service() | ||
|
|
Comment on lines
+70
to
+72
| output_plan_path = f"/Users/borjafernandezangulo/.gemini/antigravity-ide/brain/fa120028-472f-4599-9aa7-be23247c8821/scratch/production_plan.json" | ||
| with open(output_plan_path, "w", encoding="utf-8") as f: | ||
| json.dump(plan, f, indent=2, ensure_ascii=False) |
Comment on lines
+200
to
+205
| const { flow_id } = args as any; | ||
| const flow = flowStore.get(flow_id); | ||
|
|
||
| const nodeIds = new Set(flow?.nodes?.map((n: any) => n.id) || ["node_1", "node_2"]); | ||
| let errors: string[] = []; | ||
|
|
Comment on lines
211
to
215
| for dep in self.dependencies: | ||
| if dep.startswith(("cmd:", "binary:")): | ||
| prefix = "cmd:" if dep.startswith("cmd:") else "binary:" | ||
| cmd_name = dep[len(prefix):] | ||
| if dep.startswith("cmd:"): | ||
| cmd_name = dep[4:] | ||
| if shutil.which(cmd_name) is None: | ||
| raise DependencyError( |
Comment on lines
45
to
47
| orchestration: | ||
| mode: executive-producer | ||
| mode: swarm | ||
| skill: pipelines/explainer/executive-producer |
Comment on lines
+15
to
+16
| cmd = f'osascript -e \'tell application "Safari" to do JavaScript "{escaped_js}" in current tab of window 1\'' | ||
| res = subprocess.run(cmd, shell=True, capture_output=True, text=True) |
Comment on lines
+25
to
+27
| "composition": "UnTioBlancoHipocrita", | ||
| "remotion_dir": "/Users/borjafernandezangulo/10_PROJECTS/20_VAULT/OpenMontage/remotion-composer" | ||
| }, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Related issue
Closes #
Changes
Testing
Checklist
make test-contracts/make test) where applicable.