gflow-cli 0.27.0__tar.gz → 0.27.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/CHANGELOG.md +16 -1
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/PKG-INFO +1 -1
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/INDEX.md +1 -1
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.27.0.md +8 -1
- gflow_cli-0.27.1/docs/LIVE_VERIFICATION_v0.27.1.md +26 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/MOVIE.md +6 -2
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/PROJECT_STATUS.md +7 -1
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/USAGE.md +78 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/pyproject.toml +1 -1
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/ci/check_doc_links.py +2 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/cli_movie.py +2 -2
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/composition.py +3 -1
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/mcp/resources.py +3 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/mcp/server.py +6 -1
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_movie.py +18 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/composition/test_handoff.py +3 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/uv.lock +1 -1
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/README.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.env.template +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.gitattributes +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.github/dependabot.yml +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.gitignore +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.gitleaks.toml +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/.secrets.baseline +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/AGENTS.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/CLAUDE.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/CONFIGURATION.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/DISCLAIMER.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/GEMINI.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/KNOWN_ISSUES.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/LICENSE +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/PLAN.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/README.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/RELEASE.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/ROADMAP.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/conftest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docker-compose.yml +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/CHARACTER.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/DEMOS.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/GITHUB.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/MCP.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/SECURITY.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/TOOLS.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/examples/README.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/examples/sample_config.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/llms.txt +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/README.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/monitor_pr_38.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/diag/README.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/smoke_real_chrome_image.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/skills/README.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/skills/gflow-cli/SKILL.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/sonar-project.properties +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/_cli_helpers.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/client.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/routes.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/_common.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/ui_automation.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/transports/ui_automation_video.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/browser_manager.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/cli.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/cli_video.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/config.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/errors.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/manifest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/mcp/tools.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tasks/lessons.md +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_character.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_client.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_image.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_video.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/test_ui_automation.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/conftest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/data/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/data/test_models.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/auth.feature +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/conftest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/image.feature +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/integration/constants.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/services/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_auth.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_browser_manager.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_chain.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_config.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_errors.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_errors_403.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_json_output.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_manifest.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_media.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_observability.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_paths.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/test_smoke.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.27.0 → gflow_cli-0.27.1}/tests/worker/test_daemon.py +0 -0
|
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.27.1] — 2026-07-07
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **Version Wiring in Movie Handoff:** Properly imported and passed `__version__` to `build_handoff()` generator version instead of using a hardcoded stale default (`0.14.0`).
|
|
15
|
+
- **Rich Markup Escaping in CLI Output:** Escaped brackets in `_format_scene_line` plan output (`[t2v]`, `[r2v]`, and `refs=[...]`) so they are not swallowed by Rich console formatting.
|
|
16
|
+
- **MCP Server Stale Version:** Wired FastMCP version to `__version__` dynamically on startup, fixing the stale `0.21.0` version trap.
|
|
17
|
+
- **MCP Agent Guide:** Added `gflow_list_tools` to the list of available tools in the static MCP agent guide resource.
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- **Document Anchors:** Added HTML anchor (`style-configuration-errors`) to `docs/MOVIE.md` for reserved name `"none"` and unknown style variant `ConfigurationError` paths.
|
|
22
|
+
- **Movie Usages Documentation:** Added complete documentation for `gflow movie run` and `gflow movie template` commands to `docs/USAGE.md`.
|
|
23
|
+
|
|
10
24
|
## [0.27.0] — 2026-07-07
|
|
11
25
|
|
|
12
26
|
### Added
|
|
@@ -1830,7 +1844,8 @@ shell-script template that branches on these codes.
|
|
|
1830
1844
|
|
|
1831
1845
|
First skeleton. Not functional end-to-end yet.
|
|
1832
1846
|
|
|
1833
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.27.
|
|
1847
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.27.1...HEAD
|
|
1848
|
+
[0.27.1]: https://github.com/ffroliva/gflow-cli/compare/v0.27.0...v0.27.1
|
|
1834
1849
|
[0.27.0]: https://github.com/ffroliva/gflow-cli/compare/v0.26.0...v0.27.0
|
|
1835
1850
|
[0.26.0]: https://github.com/ffroliva/gflow-cli/compare/v0.25.0...v0.26.0
|
|
1836
1851
|
[0.25.0]: https://github.com/ffroliva/gflow-cli/compare/v0.24.0...v0.25.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.27.
|
|
3
|
+
Version: 0.27.1
|
|
4
4
|
Summary: Unofficial CLI for Google Flow — drive Veo image-to-video generations from the terminal.
|
|
5
5
|
Project-URL: Homepage, https://github.com/ffroliva/gflow-cli
|
|
6
6
|
Project-URL: Issues, https://github.com/ffroliva/gflow-cli/issues
|
|
@@ -120,7 +120,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
|
|
|
120
120
|
**"A gflow command hangs / fails — where do I start?"** → [DEBUGGING § Quick reference](DEBUGGING.md#quick-reference)
|
|
121
121
|
**"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
|
|
122
122
|
**"What does each `ui_automation.*` log event mean?"** → [DEBUGGING § Listener & HTTP-layer debugging](DEBUGGING.md#listener--http-layer-debugging)
|
|
123
|
-
**"What was actually live-verified for the latest release?"** → latest: [LIVE_VERIFICATION_v0.27.0](LIVE_VERIFICATION_v0.27.0.md) (**`[style]` block with named variants + prompt-aware resume — credit-free CLI verification**: real `movie run --dry-run` 3-way ledger proving resolved-style display, `skip (done)` on matching `style_hash`, and `re-run (style changed)` after a style edit; composition is local, wire path untouched, so no Veo credits spent — first credited styled run will confirm visually). Prior: [v0.26.0](LIVE_VERIFICATION_v0.26.0.md) (**image i2i by generated-image UUID proven live e2e GREEN** — the existing asset is *selected in place* by its media UUID, no duplicate upload, producing an i2i output that references it; plus generated-image `display_name` capture, credited @C1ph3r404). Prior: [v0.25.0](LIVE_VERIFICATION_v0.25.0.md) (**#237 remote-UUID i2v proven live e2e GREEN** — a real 8s 720×1280 interpolation from a generated image's UUID, after the picker-search attach was reworked to local upload; #240 home-`.env` matrix live; plus two silent-failure guards root-caused live: video-as-image download rejection and rejected-upload fail-loud). Prior: [v0.24.0](LIVE_VERIFICATION_v0.24.0.md) (--project parity across CLI + MCP — automated coverage; live gen auth-gated). Prior: [v0.23.0](LIVE_VERIFICATION_v0.23.0.md) (MCP generation wiring proven live end-to-end — tool→worker→real Flow REST→structured-error translation; final image-write blocked by an expired session, environmental. #222 macOS fix reporter-verified e2e on Apple Silicon). Prior: [v0.22.0](LIVE_VERIFICATION_v0.22.0.md) (Tools framework — automated/CI coverage complete; credit/key-gated live feature run is a pending owner gate, see the doc) · [v0.21.0](LIVE_VERIFICATION_v0.21.0.md) (MCP server over stdio + HTTP/SSE — credit-free protocol handshake; 4 tools / 2 prompts / 3 resources confirmed on stdout) · [v0.20.1](LIVE_VERIFICATION_v0.20.1.md) · [v0.20.0](LIVE_VERIFICATION_v0.20.0.md) · [v0.19.0](LIVE_VERIFICATION_v0.19.0.md) · [v0.18.0](LIVE_VERIFICATION_v0.18.0.md) · [v0.17.0](LIVE_VERIFICATION_v0.17.0.md) · [v0.16.0](LIVE_VERIFICATION_v0.16.0.md) · [v0.13.0](LIVE_VERIFICATION_v0.13.0.md) · [v0.12.0](LIVE_VERIFICATION_v0.12.0.md) · [v0.11.0](LIVE_VERIFICATION_v0.11.0.md) · [v0.10.0](LIVE_VERIFICATION_v0.10.0.md) · [v0.9.1](LIVE_VERIFICATION_v0.9.1.md) · [v0.9.0](LIVE_VERIFICATION_v0.9.0.md) · [v0.8.1](LIVE_VERIFICATION_v0.8.1.md) · [v0.7.0](LIVE_VERIFICATION_v0.7.0.md)
|
|
123
|
+
**"What was actually live-verified for the latest release?"** → latest: [LIVE_VERIFICATION_v0.27.1](LIVE_VERIFICATION_v0.27.1.md) (**v0.27.0 release follow-up fixes and documentation sync**). Prior: [v0.27.0](LIVE_VERIFICATION_v0.27.0.md) (**`[style]` block with named variants + prompt-aware resume — credit-free CLI verification**: real `movie run --dry-run` 3-way ledger proving resolved-style display, `skip (done)` on matching `style_hash`, and `re-run (style changed)` after a style edit; composition is local, wire path untouched, so no Veo credits spent — first credited styled run will confirm visually). Prior: [v0.26.0](LIVE_VERIFICATION_v0.26.0.md) (**image i2i by generated-image UUID proven live e2e GREEN** — the existing asset is *selected in place* by its media UUID, no duplicate upload, producing an i2i output that references it; plus generated-image `display_name` capture, credited @C1ph3r404). Prior: [v0.25.0](LIVE_VERIFICATION_v0.25.0.md) (**#237 remote-UUID i2v proven live e2e GREEN** — a real 8s 720×1280 interpolation from a generated image's UUID, after the picker-search attach was reworked to local upload; #240 home-`.env` matrix live; plus two silent-failure guards root-caused live: video-as-image download rejection and rejected-upload fail-loud). Prior: [v0.24.0](LIVE_VERIFICATION_v0.24.0.md) (--project parity across CLI + MCP — automated coverage; live gen auth-gated). Prior: [v0.23.0](LIVE_VERIFICATION_v0.23.0.md) (MCP generation wiring proven live end-to-end — tool→worker→real Flow REST→structured-error translation; final image-write blocked by an expired session, environmental. #222 macOS fix reporter-verified e2e on Apple Silicon). Prior: [v0.22.0](LIVE_VERIFICATION_v0.22.0.md) (Tools framework — automated/CI coverage complete; credit/key-gated live feature run is a pending owner gate, see the doc) · [v0.21.0](LIVE_VERIFICATION_v0.21.0.md) (MCP server over stdio + HTTP/SSE — credit-free protocol handshake; 4 tools / 2 prompts / 3 resources confirmed on stdout) · [v0.20.1](LIVE_VERIFICATION_v0.20.1.md) · [v0.20.0](LIVE_VERIFICATION_v0.20.0.md) · [v0.19.0](LIVE_VERIFICATION_v0.19.0.md) · [v0.18.0](LIVE_VERIFICATION_v0.18.0.md) · [v0.17.0](LIVE_VERIFICATION_v0.17.0.md) · [v0.16.0](LIVE_VERIFICATION_v0.16.0.md) · [v0.13.0](LIVE_VERIFICATION_v0.13.0.md) · [v0.12.0](LIVE_VERIFICATION_v0.12.0.md) · [v0.11.0](LIVE_VERIFICATION_v0.11.0.md) · [v0.10.0](LIVE_VERIFICATION_v0.10.0.md) · [v0.9.1](LIVE_VERIFICATION_v0.9.1.md) · [v0.9.0](LIVE_VERIFICATION_v0.9.0.md) · [v0.8.1](LIVE_VERIFICATION_v0.8.1.md) · [v0.7.0](LIVE_VERIFICATION_v0.7.0.md)
|
|
124
124
|
**"Where is the reverse-engineered wire protocol for a feature?"** → the `*_RECON.md` design docs: [CHARACTER_RECON](CHARACTER_RECON.md) (Flow character entity protocol), [IMAGE_UPSCALE_RECON](IMAGE_UPSCALE_RECON.md) (`/v1/flow/upsampleImage` wire). Naming convention: one `<FEATURE>_RECON.md` per reverse-engineered surface, kept as the durable spec after the feature ships.
|
|
125
125
|
**"What was live-verified for the data layer (PR #58)?"** → [LIVE_VERIFICATION_data_layer](LIVE_VERIFICATION_data_layer.md) — 1 Imagen + 1 Veo credit on denon82, 6-layer ledger (file + magic + Pillow + DB rows + CLI round-trip + structlog)
|
|
126
126
|
**"What was live-verified for the video-download feature (#29)?"** → [LIVE_VERIFICATION_video_download](LIVE_VERIFICATION_video_download.md)
|
|
@@ -87,7 +87,14 @@ before PR #259; cosmetic; tracked as a follow-up.
|
|
|
87
87
|
|
|
88
88
|
## Post-tag evidence
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
- Signed tag `v0.27.0` pushed 2026-07-07; `Release` workflow green
|
|
91
|
+
(build-and-publish 37s, digital attestations generated).
|
|
92
|
+
- GitHub Release **v0.27.0** published 2026-07-07T21:16:40Z (not draft).
|
|
93
|
+
- PyPI: `gflow-cli 0.27.0` live — `gflow_cli-0.27.0-py3-none-any.whl` +
|
|
94
|
+
`gflow_cli-0.27.0.tar.gz` (verified via the PyPI JSON API).
|
|
95
|
+
- Release PR #260 (`chore/release-v0.27.0 → main`) merged with a merge commit
|
|
96
|
+
after a fully green matrix + SonarCloud gate; branch deleted.
|
|
97
|
+
- `main` back-merged into `develop` (`2909cb6`) — branches aligned.
|
|
91
98
|
|
|
92
99
|
## Automated coverage
|
|
93
100
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Live Verification — v0.27.1
|
|
2
|
+
|
|
3
|
+
Release date: 2026-07-07. Headline: **v0.27.0 release follow-up fixes and documentation sync** (Issue #239, PR #261).
|
|
4
|
+
|
|
5
|
+
Verification run: 2026-07-07, local validation gates, Windows, `.venv` build of the release tree. **Deliberately credit-free**: this patch release contains only default parameter wiring, Rich console escaping, MCP guide documentation synchronization, and user documentation. No live Flow REST api/browser automation code paths were changed, so no live generation credits were spent.
|
|
6
|
+
|
|
7
|
+
## Scope
|
|
8
|
+
|
|
9
|
+
| Change | Surface | Verdict |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| Wire package version `__version__` as default `version` in `build_handoff()` | `composition.py` | ✅ Unit tests pass (`test_build_handoff_shape_and_schema`) |
|
|
12
|
+
| Escape brackets `\[` in plan output mode and refs | `cli_movie.py` | ✅ Unit tests pass (`test_format_scene_line_escapes_brackets_for_rich`) |
|
|
13
|
+
| Add `gflow_list_tools` to MCP agent guide | `mcp/resources.py` | ✅ MCP guide resource updated |
|
|
14
|
+
| Set `__version__` on FastMCP server on startup | `mcp/server.py` | ✅ MCP tests pass |
|
|
15
|
+
| Add HTML anchors for style configuration errors | `docs/MOVIE.md` | ✅ Document checked via `check_doc_links.py` |
|
|
16
|
+
| Add `gflow movie` subcommands documentation | `docs/USAGE.md` | ✅ USAGE.md updated and link-checked |
|
|
17
|
+
|
|
18
|
+
## Evidence ledger (Verification Gates)
|
|
19
|
+
|
|
20
|
+
All local quality gates executed in order as a merge-readiness baseline:
|
|
21
|
+
1. **Hygiene check:** `check_repo_hygiene.py` ran with 0 violations across 505 tracked files.
|
|
22
|
+
2. **Internal links check:** `check_doc_links.py` successfully resolved all internal markdown links across 24 files (including `docs/MOVIE.md` and `docs/USAGE.md`).
|
|
23
|
+
3. **Lint check:** `ruff check src tests` passed with 0 errors.
|
|
24
|
+
4. **Formatting check:** `ruff format --check src tests` verified all files are formatted.
|
|
25
|
+
5. **Type check:** `pyright src` completed with 0 errors and 0 warnings.
|
|
26
|
+
6. **Tests run:** 2056 tests passed, 16 skipped, 55 deselected.
|
|
@@ -101,8 +101,12 @@ Per-scene selection:
|
|
|
101
101
|
| *(omitted)* | Uses the base `[style]` suffix. |
|
|
102
102
|
| `style_suffix = "sunset light"` | Scene-specific text appended **after** the variant/base suffix. |
|
|
103
103
|
|
|
104
|
-
|
|
105
|
-
|
|
104
|
+
<a name="style-configuration-errors"></a>
|
|
105
|
+
### Style Configuration Errors
|
|
106
|
+
|
|
107
|
+
There are two style configuration errors that will raise a `ConfigurationError`:
|
|
108
|
+
* **Reserved `none` name:** Defining `[style.variants.none]` is a configuration error, so the opt-out keyword can never shadow a real variant.
|
|
109
|
+
* **Unknown variant name:** Specifying a `style_variant` in a scene that does not exist in `[style.variants]` (and is not `"none"`) is a configuration error.
|
|
106
110
|
|
|
107
111
|
**Composition rule** (deterministic, no LLM):
|
|
108
112
|
|
|
@@ -4,6 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
## Current release
|
|
6
6
|
|
|
7
|
+
**v0.27.1 — alpha.** **v0.27.0 release follow-up fixes and documentation sync (#239).** Patch release wiring package version dynamically to `build_handoff()` and `FastMCP` server, escaping brackets in Rich console planning output, updating MCP agent guide, and adding `gflow movie` usage documentation. Verification: [LIVE_VERIFICATION_v0.27.1](LIVE_VERIFICATION_v0.27.1.md) (credit-free baseline verification).
|
|
8
|
+
|
|
9
|
+
**Develop (unreleased, post-v0.27.1):** *(empty — develop is the staging branch for the next release).*
|
|
10
|
+
|
|
11
|
+
<details><summary>v0.27.0 — Global [style] block with named variants + prompt-aware resume for gflow movie</summary>
|
|
12
|
+
|
|
7
13
|
**v0.27.0 — alpha.** **Global `[style]` block with named variants + prompt-aware resume
|
|
8
14
|
for `gflow movie` (#239).** A `movie.toml` can now express a visual style system once —
|
|
9
15
|
`prefix`/`suffix` on `[style]` plus `[style.variants.*]` sub-tables — and select it
|
|
@@ -15,7 +21,7 @@ instead of silently skipped, and dry-run marks it `re-run (style changed)`. Carr
|
|
|
15
21
|
forward v0.26.0 (i2i select-in-place by UUID). Verification:
|
|
16
22
|
[LIVE_VERIFICATION_v0.27.0](LIVE_VERIFICATION_v0.27.0.md) (credit-free CLI ledger).
|
|
17
23
|
|
|
18
|
-
|
|
24
|
+
</details>
|
|
19
25
|
|
|
20
26
|
<details><summary>v0.26.0 — image i2i references a generated image by UUID (select in place)</summary>
|
|
21
27
|
|
|
@@ -1044,6 +1044,84 @@ GFLOW_EXAMPLE_PROFILE=<your-profile> python examples/batch_from_config.py
|
|
|
1044
1044
|
|
|
1045
1045
|
The bundled `examples/sample_config.json` produces three images at three aspect ratios in `gflow-output/example-batch/`. Copy and edit for your own scenes.
|
|
1046
1046
|
|
|
1047
|
+
## `gflow movie`
|
|
1048
|
+
|
|
1049
|
+
Sequential TOML-described multi-scene AI movie generation. New in v0.14.0.
|
|
1050
|
+
|
|
1051
|
+
### `gflow movie template`
|
|
1052
|
+
|
|
1053
|
+
Writes a starter `movie.toml` template.
|
|
1054
|
+
|
|
1055
|
+
```text
|
|
1056
|
+
gflow movie template [OUTPUT] [--force]
|
|
1057
|
+
```
|
|
1058
|
+
|
|
1059
|
+
* `OUTPUT`: The destination path for the template file (defaults to `./movie.toml`).
|
|
1060
|
+
* `--force`: Overwrite the destination file if it already exists.
|
|
1061
|
+
|
|
1062
|
+
### `gflow movie run`
|
|
1063
|
+
|
|
1064
|
+
Generates individual video clips sequentially from a single TOML manifest file, maintaining crash-recoverable state in a local state JSON file.
|
|
1065
|
+
|
|
1066
|
+
```text
|
|
1067
|
+
gflow movie run MANIFEST [--out-dir DIR] [--profile NAME] [--continue-on-error|--fail-fast] [--dry-run] [--stitch]
|
|
1068
|
+
```
|
|
1069
|
+
|
|
1070
|
+
Refer to the complete [Movie Manifests Guide](MOVIE.md) for detailed syntax, character entity creation, and style consistency features.
|
|
1071
|
+
|
|
1072
|
+
### Parameters
|
|
1073
|
+
|
|
1074
|
+
* `MANIFEST`: Path to your `movie.toml` manifest file (required positional argument).
|
|
1075
|
+
* `--out-dir DIR`: Output directory for generated video clips and the handoff file. Defaults to `out/` or `GFLOW_CLI_OUTPUT_DIR`.
|
|
1076
|
+
* `--profile NAME`: Specify Google Flow profile to use.
|
|
1077
|
+
* `--continue-on-error`: Skip failed scenes and continue generating subsequent scenes (default).
|
|
1078
|
+
* `--fail-fast`: Terminate immediately on the first failed scene generation.
|
|
1079
|
+
* `--dry-run`: Parse the manifest, estimate credits, and print the generation plan without calling Google Flow.
|
|
1080
|
+
* `--stitch`: Run a post-generation preview stitch using ffmpeg to concatenate clips into a single video file.
|
|
1081
|
+
|
|
1082
|
+
### Manifest structure (movie.toml)
|
|
1083
|
+
|
|
1084
|
+
```toml
|
|
1085
|
+
title = "My Cinematic Film"
|
|
1086
|
+
project = "Cinematics"
|
|
1087
|
+
|
|
1088
|
+
[style]
|
|
1089
|
+
look = "3d animation"
|
|
1090
|
+
mood = "mysterious"
|
|
1091
|
+
negative = "text, watermark"
|
|
1092
|
+
prefix = "Cinematic film still, high detail."
|
|
1093
|
+
suffix = "Shot on IMAX 70mm, unreal engine 5 render."
|
|
1094
|
+
|
|
1095
|
+
[style.variants.warm]
|
|
1096
|
+
suffix = "Golden hour light, warm color grading."
|
|
1097
|
+
|
|
1098
|
+
[[characters]]
|
|
1099
|
+
name = "Stickman"
|
|
1100
|
+
identity = "text"
|
|
1101
|
+
voice = "alnilam"
|
|
1102
|
+
|
|
1103
|
+
[[scenes]]
|
|
1104
|
+
id = "scene_01"
|
|
1105
|
+
action = "A mysterious stickman walks slowly through a dark forest."
|
|
1106
|
+
framing = "wide"
|
|
1107
|
+
duration = 5
|
|
1108
|
+
characters = ["Stickman"]
|
|
1109
|
+
|
|
1110
|
+
[[scenes]]
|
|
1111
|
+
id = "scene_02"
|
|
1112
|
+
action = "Close up of the stickman looking back in shock."
|
|
1113
|
+
framing = "close-up"
|
|
1114
|
+
duration = 5
|
|
1115
|
+
characters = ["Stickman"]
|
|
1116
|
+
style_variant = "warm"
|
|
1117
|
+
```
|
|
1118
|
+
|
|
1119
|
+
### Outputs
|
|
1120
|
+
|
|
1121
|
+
1. **Clip Files:** Individual video files saved under `<out_dir>/scene_<id>.mp4` (or other formats).
|
|
1122
|
+
2. **State File:** A `<stem>-state.json` file recording completed operations, seeds, and metadata, allowing a run to resume without wasting credits.
|
|
1123
|
+
3. **Handoff Manifest:** A `<stem>-handoff.json` file that projects the run's metadata and clip paths, designed for downstream assemblers.
|
|
1124
|
+
|
|
1047
1125
|
## Recipes
|
|
1048
1126
|
|
|
1049
1127
|
### Burn through a directory of inputs
|
|
@@ -285,7 +285,7 @@ def _style_tag(s: Scene, style: StyleSpec) -> str:
|
|
|
285
285
|
def _format_scene_line(s: Scene, style: StyleSpec, *, done: bool, stale: bool, cost: int) -> str:
|
|
286
286
|
"""Return the single-line plan summary for one scene."""
|
|
287
287
|
mode = "r2v" if s.characters else "t2v"
|
|
288
|
-
refs = f" refs
|
|
288
|
+
refs = f" refs=\\[{', '.join(s.characters)}]" if s.characters else ""
|
|
289
289
|
framing_tag = f" {s.framing}" if s.framing else ""
|
|
290
290
|
model_tag = f" {s.model}" if s.model else ""
|
|
291
291
|
dur_tag = f" {s.duration}s" if s.duration else ""
|
|
@@ -296,7 +296,7 @@ def _format_scene_line(s: Scene, style: StyleSpec, *, done: bool, stale: bool, c
|
|
|
296
296
|
else:
|
|
297
297
|
status = f"{cost} credit(s)"
|
|
298
298
|
style_tag = _style_tag(s, style)
|
|
299
|
-
return f" [{mode}] {s.id!r}{framing_tag}{model_tag}{dur_tag}{refs}{style_tag} {status}"
|
|
299
|
+
return f" \\[{mode}] {s.id!r}{framing_tag}{model_tag}{dur_tag}{refs}{style_tag} {status}"
|
|
300
300
|
|
|
301
301
|
|
|
302
302
|
def _print_plan(manifest: MovieManifest, state: MovieState) -> None:
|
|
@@ -14,6 +14,8 @@ from dataclasses import dataclass, field
|
|
|
14
14
|
from pathlib import Path
|
|
15
15
|
from typing import Any, cast
|
|
16
16
|
|
|
17
|
+
from gflow_cli import __version__
|
|
18
|
+
|
|
17
19
|
|
|
18
20
|
@dataclass(frozen=True)
|
|
19
21
|
class StyleSpec:
|
|
@@ -367,7 +369,7 @@ def build_handoff(
|
|
|
367
369
|
state: Any,
|
|
368
370
|
*,
|
|
369
371
|
out_dir: Path,
|
|
370
|
-
version: str =
|
|
372
|
+
version: str = __version__,
|
|
371
373
|
include_prompts: bool = True,
|
|
372
374
|
) -> dict[str, Any]:
|
|
373
375
|
"""Project a completed/partial movie run into the versioned handoff manifest.
|
|
@@ -58,6 +58,9 @@ Browse the local project catalog.
|
|
|
58
58
|
### gflow_list_characters
|
|
59
59
|
Browse reusable Flow Character entities.
|
|
60
60
|
|
|
61
|
+
### gflow_list_tools
|
|
62
|
+
List available gflow prompt tools (name, title, description, category).
|
|
63
|
+
|
|
61
64
|
## Important Rules
|
|
62
65
|
1. **Use tools, not shell commands.** Do NOT run `gflow image t2i ...` via the terminal.
|
|
63
66
|
2. **One generation at a time.** The rate limiter allows bursts of 8 but throttles sustained use.
|
|
@@ -17,6 +17,8 @@ from typing import TYPE_CHECKING
|
|
|
17
17
|
import structlog
|
|
18
18
|
from mcp.server.fastmcp import FastMCP
|
|
19
19
|
|
|
20
|
+
from gflow_cli import __version__
|
|
21
|
+
|
|
20
22
|
if TYPE_CHECKING:
|
|
21
23
|
pass
|
|
22
24
|
|
|
@@ -27,11 +29,14 @@ log = structlog.get_logger()
|
|
|
27
29
|
# ---------------------------------------------------------------------------
|
|
28
30
|
|
|
29
31
|
_SERVER_NAME = "gflow-cli"
|
|
30
|
-
_SERVER_VERSION =
|
|
32
|
+
_SERVER_VERSION = __version__
|
|
31
33
|
|
|
32
34
|
server = FastMCP(
|
|
33
35
|
name=_SERVER_NAME,
|
|
34
36
|
)
|
|
37
|
+
# FastMCP does not expose a public API to configure the server version.
|
|
38
|
+
# As a workaround, we assign it directly to the underlying Server instance.
|
|
39
|
+
server._mcp_server.version = _SERVER_VERSION # pyright: ignore[reportPrivateUsage]
|
|
35
40
|
|
|
36
41
|
# ---------------------------------------------------------------------------
|
|
37
42
|
# Stdout isolation
|
|
@@ -904,3 +904,21 @@ class TestEntityIdentity:
|
|
|
904
904
|
assert create_mock.call_args.kwargs["body"] is not None
|
|
905
905
|
# Entity id was persisted to state for downstream scene resolution.
|
|
906
906
|
assert state.characters["Hero"].entity_id == "ent-new"
|
|
907
|
+
|
|
908
|
+
|
|
909
|
+
class TestFormatSceneLine:
|
|
910
|
+
def test_format_scene_line_escapes_brackets_for_rich(self) -> None:
|
|
911
|
+
from gflow_cli.cli_movie import _format_scene_line
|
|
912
|
+
from gflow_cli.composition import Scene, StyleSpec
|
|
913
|
+
|
|
914
|
+
# T2V scene (no characters)
|
|
915
|
+
s1 = Scene(id="s1", action="A", framing="medium", duration=4)
|
|
916
|
+
line = _format_scene_line(s1, StyleSpec(), done=False, stale=False, cost=2)
|
|
917
|
+
assert "\\[t2v]" in line
|
|
918
|
+
assert "refs=" not in line
|
|
919
|
+
|
|
920
|
+
# R2V scene (with characters)
|
|
921
|
+
s2 = Scene(id="s2", action="B", framing="wide", duration=8, characters=("Hero",))
|
|
922
|
+
line2 = _format_scene_line(s2, StyleSpec(), done=False, stale=False, cost=2)
|
|
923
|
+
assert "\\[r2v]" in line2
|
|
924
|
+
assert "refs=\\[Hero]" in line2
|
|
@@ -7,6 +7,7 @@ from pathlib import Path
|
|
|
7
7
|
|
|
8
8
|
import jsonschema
|
|
9
9
|
|
|
10
|
+
from gflow_cli import __version__
|
|
10
11
|
from gflow_cli.composition import Character, Scene, StyleSpec, build_handoff
|
|
11
12
|
from gflow_cli.movie_manifest import CharacterState, MovieState, SceneState
|
|
12
13
|
|
|
@@ -38,6 +39,8 @@ def _fake_state() -> MovieState:
|
|
|
38
39
|
def test_build_handoff_shape_and_schema(tmp_path: Path) -> None:
|
|
39
40
|
handoff = build_handoff(_FakeManifest(), _fake_state(), out_dir=Path("/out/x"))
|
|
40
41
|
assert handoff["schema_version"] == 1
|
|
42
|
+
assert handoff["generator"]["name"] == "gflow-cli"
|
|
43
|
+
assert handoff["generator"]["version"] == __version__
|
|
41
44
|
assert handoff["clips"][0]["index"] == 0
|
|
42
45
|
assert handoff["clips"][0]["id"] == "s1"
|
|
43
46
|
# relative POSIX path, no backslashes, no signed-url leak
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|