gflow-cli 0.62.0__tar.gz → 0.63.0__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.62.0 → gflow_cli-0.63.0}/.codex-plugin/plugin.json +1 -1
- gflow_cli-0.63.0/.github/FUNDING.yml +2 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/workflows/scorecard.yml +1 -1
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/AGENTS.md +39 -4
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/CHANGELOG.md +116 -1
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/CLAUDE.md +31 -5
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/KNOWN_ISSUES.md +86 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/PKG-INFO +14 -4
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/PLAN.md +1 -1
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/README.md +12 -2
- gflow_cli-0.63.0/docs/ACCOUNT_SAFETY.md +136 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/CHARACTER.md +24 -4
- {gflow_cli-0.62.0/website → gflow_cli-0.63.0}/docs/CONFIGURATION.md +1 -0
- {gflow_cli-0.62.0/website → gflow_cli-0.63.0}/docs/DEBUGGING.md +5 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/INDEX.md +6 -1
- gflow_cli-0.63.0/docs/LIVE_VERIFICATION_v0.62.1.md +88 -0
- gflow_cli-0.63.0/docs/LIVE_VERIFICATION_v0.63.0.md +130 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/PROJECT_STATUS.md +36 -20
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/USAGE.md +101 -1
- gflow_cli-0.63.0/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +361 -0
- gflow_cli-0.63.0/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +261 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/index.html +12 -3
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/llms.txt +1 -1
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/pyproject.toml +3 -3
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/autopilot/Dockerfile.triage +1 -1
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/autopilot/package-lock.json +36 -36
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/autopilot/package.json +1 -1
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/autopilot/pr_triage_autopilot.py +40 -18
- gflow_cli-0.63.0/scripts/dev/spike_extend_model_recon.py +194 -0
- gflow_cli-0.63.0/scripts/dev/spike_extend_ourstack_verify.py +210 -0
- gflow_cli-0.63.0/scripts/dev/spike_extend_route_capture.py +194 -0
- gflow_cli-0.63.0/scripts/dev/spike_extend_submit_capture.py +194 -0
- gflow_cli-0.63.0/scripts/dev/spike_extend_ui_recon.py +205 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +13 -4
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/issue-resolve/SKILL.md +13 -2
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/_cli_helpers.py +52 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/client.py +168 -2
- gflow_cli-0.63.0/src/gflow_cli/api/extend_chain.py +201 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/routes.py +15 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/ui_automation_video.py +25 -1
- gflow_cli-0.63.0/src/gflow_cli/api/video_extend.py +313 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/cli_video.py +429 -1
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/models.py +1 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/recorder.py +58 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/redaction.py +5 -1
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/errors.py +35 -0
- gflow_cli-0.63.0/tests/api/fixtures/project_initial_data_extend_models.json +2471 -0
- gflow_cli-0.63.0/tests/api/test_client_extend.py +200 -0
- gflow_cli-0.63.0/tests/api/test_extend_chain.py +174 -0
- gflow_cli-0.63.0/tests/api/test_video_extend.py +289 -0
- gflow_cli-0.63.0/tests/api/test_video_status_poll.py +143 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_video_model_selection_loud.py +5 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/autopilot/test_pr_triage_autopilot.py +66 -14
- gflow_cli-0.63.0/tests/cli/test_cli_video_extend.py +647 -0
- gflow_cli-0.63.0/tests/cli/test_run_with_handlers_interrupt.py +70 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/conftest.py +24 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/test_recorder.py +53 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/test_redaction.py +20 -0
- gflow_cli-0.63.0/tests/fixtures/flow_model_inventory.json +24 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/flow_selectors/test_model_governance.py +82 -7
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_cli_parity.py +16 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_documentation_gate.py +5 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/uv.lock +37 -40
- gflow_cli-0.63.0/website/docs/ACCOUNT_SAFETY.md +136 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/CHARACTER.md +24 -4
- {gflow_cli-0.62.0 → gflow_cli-0.63.0/website}/docs/CONFIGURATION.md +1 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0/website}/docs/DEBUGGING.md +5 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/KNOWN_ISSUES.md +86 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/USAGE.md +101 -1
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/mkdocs.yml +1 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/requirements.txt +6 -7
- gflow_cli-0.62.0/tests/fixtures/flow_model_inventory.json +0 -23
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.agents/plugins/marketplace.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/README.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.env.template +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.gitattributes +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/dependabot.yml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/workflows/deps-watch.yml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/workflows/labels.yml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.github/workflows/selector-probe.yml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.gitignore +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/.secrets.baseline +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/CONFIGURATION.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/LICENSE +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/RELEASE.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/ROADMAP.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/conftest.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/deploy/logrotate-pr-triage +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docker-compose.yml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/MCP.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/SECURITY.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/eval/pr_triage_eval.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/eval/pr_triage_fixtures.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/examples/README.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/README.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/autopilot/entrypoint.sh +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/autopilot/pr_triage_gate.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/canary/register_task.ps1 +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/canary/run_canary.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/ci/check_test_count.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/capture_project_listing.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/live_verify_video_model_select.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/measure_locale_probe.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_changelog_capture.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_character_prompt_format.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_locale_poison.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_model_inventory.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/spike_video_tab_dom.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/verify_language_agnostic.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/dev/verify_model_attribution.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/diag/spike_387_openai_compat.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/probe/run_probe.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/probe/spike_auth_matrix.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/README.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/gflow-cli/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/live-verify/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/release/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/sonar-project.properties +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/_common.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/transports/ui_automation.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/browser_manager.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/cli.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/cli_doctor.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/cli_project.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/config.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/diagnostics.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/file_integrity.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/flow_selectors/model.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/mcp/setup.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/mcp/tools.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/profile_lease.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/redaction.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/services/catalog_sync.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/services/doctor.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/update_check.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/winsec.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/worker/codec.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_client_errors.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_client_incidents.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_client_locale_cache.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_routes_locale.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_locale_navigation.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_model_selection_loud.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_navigation_settled.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_overlay_precondition.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_policy_400.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_ui_automation.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/auth/test_real_chrome.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/auth/test_windows_acl.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_auth_status.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_data_sync.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_doctor.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_predictable_output.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/test_null_columns_stay_null.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/test_store.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_project_naming_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/duration_tab_drift.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/entity_provenance.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/image_batch_references.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/mcp_tasks.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/media_picker_tiers.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/output_hardening.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_mcp_tasks_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_output_hardening_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/fixtures/changelog_modal_page.html +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/fixtures/doctor_env.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/fixtures/flow_project_listing_media.json +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/fixtures/listing_payload.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/flow_selectors/test_grading.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/flow_selectors/test_model.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/flow_selectors/test_registry.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/flow_selectors/test_report.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/integration/test_expander_gateway.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_auth_status_tool.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_error_funnel.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_http_transport.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_known_issues_resource.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_no_spend.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_resources.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_setup.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_tasks_extension.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/scripts/test_canary_classify.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/scripts/test_canary_reexec.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/scripts/test_check_test_count.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/scripts/test_codex_plugin.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/scripts/test_workflow_hardening.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/services/test_catalog_sync.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/services/test_doctor.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/services/test_media_attribution.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_browser_manager.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_cli_project.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_config.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_diagnostics_recorder.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_diagnostics_retention.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_duration_tab_drift.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_entity_provenance.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_errors.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_image_batch_references.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_incident_generation_requests.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_media.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_overlay_banner_dismissal.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_playwright_pin.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_profile_lease.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_profile_store_locale.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_project_list_urls.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_self_documenting_errors.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/test_update_check.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/MCP.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/SECURITY.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/index.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/installation.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/onboarding-mockup.html +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/onboarding.md +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.62.0 → gflow_cli-0.63.0}/website/requirements.in +0 -0
|
@@ -47,6 +47,6 @@ jobs:
|
|
|
47
47
|
retention-days: 5
|
|
48
48
|
|
|
49
49
|
- name: Upload to code-scanning
|
|
50
|
-
uses: github/codeql-action/upload-sarif@
|
|
50
|
+
uses: github/codeql-action/upload-sarif@cdf488f595d80d6e07e03d4674febd5ab45fa938 # v4
|
|
51
51
|
with:
|
|
52
52
|
sarif_file: results.sarif
|
|
@@ -4,12 +4,47 @@
|
|
|
4
4
|
|
|
5
5
|
Supported tools that auto-discover this file: Cursor, Codex, Aider, Antigravity (`agy`), Jules, Devin, Windsurf, Zed, Warp, opencode, RooCode, Amp, Junie, Phoenix, GitHub Copilot, VS Code, Factory, Augment, Semgrep, Kilo Code, UiPath. Claude Code reads [CLAUDE.md](CLAUDE.md), which cross-references this file.
|
|
6
6
|
|
|
7
|
+
## Skill Routing — the default workflow, not a menu
|
|
8
|
+
|
|
9
|
+
**The `/gflow:` skills ARE this project's development lifecycle.** They are not
|
|
10
|
+
optional tooling you may reach for; they are how work is done here. If a row below
|
|
11
|
+
matches your situation, load that skill **before acting** — before exploring the
|
|
12
|
+
codebase, before answering, before editing. A skill loaded after the work is a skill
|
|
13
|
+
that did not run.
|
|
14
|
+
|
|
15
|
+
| If you are about to… | Load first | Non-negotiable because |
|
|
16
|
+
|---|---|---|
|
|
17
|
+
| Touch a GitHub issue | `/gflow:issue-assessment <N>` | Read-only triage precedes any fix; classification changes what "fixing" means |
|
|
18
|
+
| Propose a transport, auth, selector, or schema change | `/gflow:predict <proposal>` | Five adversarial personas return GO / CAUTION / STOP before code exists |
|
|
19
|
+
| Start a feature | `/gflow:scenario` → `/gflow:plan` | Edge cases before tasks; tasks before code |
|
|
20
|
+
| Resume work / ask "where are we?" | `/gflow:status` | The current plan's next unchecked task is the answer, not your guess |
|
|
21
|
+
| Commit **anything** | `/gflow:check` | It is the exact CI gate; skipping it is how a format failure shipped past an 8-agent council (PR #269) |
|
|
22
|
+
| Open or review a PR | `/gflow:pr-council-review <N>` (or `/gflow:branch-review`) | Standing-authorized. Run it — do not ask permission first |
|
|
23
|
+
| Claim a generation feature works | `/gflow:live-verify` | Offline-green is never done-done on a generation path |
|
|
24
|
+
| Cut a release | `/gflow:release` | It hard-gates on changelog → check → live-verify → doc-review; each is a STOP |
|
|
25
|
+
| Audit docs before shipping | `/gflow:doc-review` | Catches same-release errors a read-through cannot |
|
|
26
|
+
| See a red SonarCloud check | `/gflow:sonar <N>` | The gate measures *new* code; the fix is rarely where you would look |
|
|
27
|
+
| Touch auth or reCAPTCHA | `/gflow:known-issues` | Known-broken surfaces have documented workarounds; rediscovering them costs days |
|
|
28
|
+
|
|
29
|
+
**Canonical bodies live in `skills/<name>/SKILL.md`** — plain Markdown, agent-agnostic
|
|
30
|
+
by construction, so Codex / Cursor / Aider / `agy` read exactly what Claude Code reads.
|
|
31
|
+
`.claude/commands/gflow/*.md` are thin Claude-Code wrappers that point at them.
|
|
32
|
+
|
|
33
|
+
> **This table exists because routing by memory failed.** On 2026-09-01 an agent worked
|
|
34
|
+
> a full session — recovering two interrupted sessions, merging five PRs — without ever
|
|
35
|
+
> loading this file, because `CLAUDE.md` only *asked* it to. It reached step 10 of a
|
|
36
|
+
> release before meeting the pipeline's own doc-review gate, and the required
|
|
37
|
+
> `LIVE_VERIFICATION_v0.63.0.md` had not been written despite the feature having been
|
|
38
|
+
> live-verified. `CLAUDE.md` now `@`-imports this file, so it is always in context. The
|
|
39
|
+
> table is the other half: being loaded is useless if the mapping from situation to skill
|
|
40
|
+
> is left to recall.
|
|
41
|
+
|
|
7
42
|
## Project at a glance
|
|
8
43
|
|
|
9
44
|
- Unofficial Python CLI for [Google Flow](https://labs.google/fx/tools/flow) — drives Veo (image-to-video, text-to-video) and Imagen (text-to-image) generations from the terminal by reverse-engineering Flow's private REST API at `aisandbox-pa.googleapis.com`.
|
|
10
45
|
- Python 3.11+ · `uv`-managed · `hatchling` builds · Playwright Chromium transport · `pyright` strict · `ruff` · `pytest`.
|
|
11
|
-
- Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `data/`, `mcp/`, `services/`, `tools/`, `ui/`, `worker/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `diagnostics.py`, `json_output.py`, `media.py`, `profile_lease.py`, `redaction.py`, `storage.py`, `winsec.py`, `cli_project.py`, `cli_character.py`, `cli_data.py`, `cli_image.py`, `cli_instructions.py`, `cli_models.py`, `cli_movie.py`, `cli_run.py`, `cli_scene.py`, `cli_tools.py`, `cli_video.py`, `chain.py`, `chain_manifest.py`, `composition.py`, `config.py`, `errors.py`, `exceptions.py`, `image_batch.py`, `movie_manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
|
|
12
|
-
- Command surface: `gflow auth`, `gflow image` (t2i/i2i/batch/upload/upscale), `gflow video` (t2v/i2v/r2v/chain — no `batch` subcommand; the nonfunctional stub was removed, loop `gflow video t2v`/`i2v` from the shell for multi-clip runs), `gflow character` (create/list/show/rm/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), `gflow instructions` (persistent Agent-Mode brief cards — add/list/enable/disable/rm/apply/toggle-mode, credits-free, `--project` required), `gflow movie` (run/template — multi-scene manifest pipeline), `gflow tools` (list/show/run — prompt-rewriting tools, also `--tool` on generation commands), `gflow data` (catalog queries), `gflow models`, `gflow run`, `gflow mcp` (run/setup — stdio MCP server), and `gflow serve` (Streamable HTTP at `/mcp`; `--transport sse` is deprecated).
|
|
46
|
+
- Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `data/`, `mcp/`, `services/`, `tools/`, `ui/`, `worker/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `diagnostics.py`, `json_output.py`, `media.py`, `profile_lease.py`, `redaction.py`, `storage.py`, `winsec.py`, `cli_project.py`, `cli_character.py`, `cli_data.py`, `cli_image.py`, `cli_instructions.py`, `cli_models.py`, `cli_movie.py`, `cli_run.py`, `cli_scene.py`, `cli_tools.py`, `cli_video.py`, `chain.py`, `chain_manifest.py`, `cli_doctor.py`, `composition.py`, `config.py`, `errors.py`, `file_integrity.py`, `flow_selectors/`, `update_check.py`, `exceptions.py`, `image_batch.py`, `movie_manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
|
|
47
|
+
- Command surface: `gflow auth`, `gflow image` (t2i/i2i/batch/upload/upscale), `gflow video` (t2v/i2v/r2v/chain/extend — `extend` continues an existing clip past Flow's 8s ceiling, server-seeded from the source so the join is continuous; no `batch` subcommand; the nonfunctional stub was removed, loop `gflow video t2v`/`i2v` from the shell for multi-clip runs), `gflow character` (create/list/show/rm/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), `gflow instructions` (persistent Agent-Mode brief cards — add/list/enable/disable/rm/apply/toggle-mode, credits-free, `--project` required), `gflow movie` (run/template — multi-scene manifest pipeline), `gflow tools` (list/show/run — prompt-rewriting tools, also `--tool` on generation commands), `gflow data` (catalog queries), `gflow doctor` (read-only pre-flight diagnostic, exit 33 = findings present), `gflow project`, `gflow models`, `gflow run`, `gflow mcp` (run/setup — stdio MCP server), and `gflow serve` (Streamable HTTP at `/mcp`; `--transport sse` is deprecated).
|
|
13
48
|
- Works with any Google account that has Flow access. All generations bill against the user's own Google account.
|
|
14
49
|
|
|
15
50
|
## Headed-browser dependency (architectural reality)
|
|
@@ -58,7 +93,7 @@ Or invoke the wrapper: `/gflow:check`.
|
|
|
58
93
|
|
|
59
94
|
- Type hints everywhere; `pyright` strict on `src/gflow_cli`.
|
|
60
95
|
- Structured logging only (`structlog`) — **never** raw `print()` or `import logging` in `src/`.
|
|
61
|
-
- Errors as RFC 9457 Problem Details with stable per-class exit codes (3–
|
|
96
|
+
- Errors as RFC 9457 Problem Details with stable per-class exit codes (3–35, e.g. 11 is `ConfigurationError` — including `ProfileLockedError` for same-profile lease contention, 16 is the `DataStoreError` family, 19 `SceneConcatError`, 20 `FrameExtractionError`, 21 `ChainPartialError`, 22 `UpscaleUnavailableError`, 25 `FlowAgentUiError`, 28 `UiModeUnavailableError`, 29 `MentionIndexUnavailableError`, 30 `QueueSchemaError`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping. Exit 33 is reserved outside that map: `gflow doctor` findings-present — a successful diagnosis, not an error class.
|
|
62
97
|
- 100-char line length, `ruff` configured. Imports sorted by `ruff` (isort rules).
|
|
63
98
|
- **YAGNI / least-code**: prefer the smallest change that works. No speculative abstractions (interface/factory with one implementation), no config or flags nobody sets, no dead constants/helpers, no reinventing the stdlib. Review carries this as its own lens — the **D14 over-engineering** dimension of [`pr-council-review`](skills/pr-council-review/SKILL.md) (baseline, always runs). Its rubric is portable; the `ponytail` plugin (see CONTRIBUTING) is an optional accelerant, not a dependency.
|
|
64
99
|
- **MCP & CLI Schema Symmetry**: Any updates or additions to user-facing CLI command parameters (e.g., `gflow image t2i`, `gflow video`) must be mirrored in the corresponding MCP tool definitions. Never add option/argument fields to Click commands without updating the MCP server implementation. This symmetry is enforced programmatically in CI via `tests/mcp/test_cli_parity.py` (every CLI leaf command needs a mapped MCP tool or an explicit, reasoned exemption) plus the schema checks in `tests/mcp/test_server.py`.
|
|
@@ -97,7 +132,7 @@ All AI agents and harnesses working on `gflow-cli` follow this standard 10-phase
|
|
|
97
132
|
| 7. Pre-Commit Quality | `/gflow:check` | The Impeccable Routine (hygiene, ruff, pyright, pytest) | All green local checks |
|
|
98
133
|
| 8. Live Verification | `/gflow:live-verify` | 5-layer proof against real Flow transport | `docs/LIVE_VERIFICATION_vX.Y.Z.md` |
|
|
99
134
|
| 9. PR & Issue Close | `/gflow:issue-resolve <N>` | PR, SonarCloud 0-issue gate, merge to develop | Closed GitHub issue |
|
|
100
|
-
| 10. Release Pipeline | `/gflow:release` | Version bump, signed tag (`git tag -s`), PyPI publish | Shipped release & back-merge |
|
|
135
|
+
| 10. Release Pipeline | `/gflow:release` | Version bump, signed tag (`git tag -s`), PyPI publish. **Internally gates on `/gflow:changelog` → `/gflow:check` → `/gflow:live-verify` → `/gflow:doc-review`; a failure at any of them is a STOP, not a warning.** | Shipped release & back-merge |
|
|
101
136
|
|
|
102
137
|
### Pipeline Continuation Mandate
|
|
103
138
|
|
|
@@ -7,6 +7,119 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.63.0] — 2026-09-01
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`gflow video extend` — continue a clip past Flow's 8-second ceiling.** Veo's
|
|
15
|
+
extend route generates a new 8s segment seeded server-side from the source
|
|
16
|
+
clip, so motion and audio carry across the join instead of restarting from a
|
|
17
|
+
still (which is what `video chain` does, and why it needs a fade guard). Pass
|
|
18
|
+
one prompt per segment, or `--segments N` to reuse the last one:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
gflow video extend <media-id> "the wave recedes" --project <id>
|
|
22
|
+
gflow video extend <media-id> "drifts out to sea" --project <id> -n 4 -o long.mp4
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The result is a Flow Scene; `-o` renders it to a single mp4 through the
|
|
26
|
+
existing credit-free server-side concat.
|
|
27
|
+
|
|
28
|
+
> Known limitation, found in live verification: a segment carries ~7s of real
|
|
29
|
+
> content though Flow advertises and bills 8s, so each internal seam of a
|
|
30
|
+
> multi-segment render is preceded by ~1s of frozen frame and silence. Single
|
|
31
|
+
> segments are unaffected. Details and the open questions are in
|
|
32
|
+
> [KNOWN_ISSUES](KNOWN_ISSUES.md).
|
|
33
|
+
|
|
34
|
+
- **The model key is resolved per run, never hardcoded.** Flow's extend family
|
|
35
|
+
is tier-gated — `_ultra` variants are Advanced-only and read `UNAVAILABLE`
|
|
36
|
+
elsewhere — so the key comes from the account's own capability listing,
|
|
37
|
+
picking the cheapest orderable model exactly as Flow's own UI does. A pinned
|
|
38
|
+
key would 403 forever on the wrong tier.
|
|
39
|
+
- **Costs are shown before anything is submitted**, and a pre-flight balance
|
|
40
|
+
check refuses a run the balance cannot finish. `--dry-run` prints the plan
|
|
41
|
+
without opening a browser.
|
|
42
|
+
- **Serial by construction, and paced.** Segments submit one at a time with a
|
|
43
|
+
non-zero default jitter (`GFLOW_CLI_JITTER_RANGE`). A refusal aborts with
|
|
44
|
+
completed segments preserved and is never auto-retried.
|
|
45
|
+
- `1:1` is refused up front — Flow publishes no square extend model.
|
|
46
|
+
|
|
47
|
+
### Fixed
|
|
48
|
+
|
|
49
|
+
- **Ctrl+C during a billed run said nothing.** `run_with_handlers` exited 130
|
|
50
|
+
silently, so a user who interrupted a multi-segment run could not tell whether
|
|
51
|
+
anything had been charged or how to resume. It now reports credits spent,
|
|
52
|
+
segments completed and the resume handle. Fixed at the shared boundary, so
|
|
53
|
+
`video chain` and `movie run` gain it too.
|
|
54
|
+
- **`sessionId` was not redacted.** `redact_metadata` covered `token` and
|
|
55
|
+
`recaptchaToken` but not `sessionId`, which the extend request carries. Not a
|
|
56
|
+
credential, but account-correlatable, and it would otherwise reach any logged
|
|
57
|
+
request body or diagnostics bundle verbatim.
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
- **The offline test suite could `git checkout develop` in the developer's own
|
|
61
|
+
clone ([#605](https://github.com/ffroliva/gflow-cli/issues/605)).** git's
|
|
62
|
+
repository discovery walks *up* from `cwd`, and `--basetemp=tmp/pytest` puts
|
|
63
|
+
every `tmp_path` inside this repository, so an autopilot test whose temp `.git`
|
|
64
|
+
went missing had its `git checkout develop` silently resolved against the real
|
|
65
|
+
working tree — moving the developer off their branch mid-run (reflog-confirmed,
|
|
66
|
+
Windows-only, intermittent). Two independent guards now close it:
|
|
67
|
+
`scripts/autopilot/pr_triage_autopilot.py` pins every git call with
|
|
68
|
+
`--git-dir`/`--work-tree`, so a `repo_dir` that is not a repository fails loudly,
|
|
69
|
+
raising with git's own `fatal: not a git repository` text rather than
|
|
70
|
+
retargeting whatever clone encloses it (this also
|
|
71
|
+
hardens the VPS triage path against a mistyped `--repo-dir`), and
|
|
72
|
+
`tests/conftest.py` sets `GIT_CEILING_DIRECTORIES` to pytest's basetemp so no
|
|
73
|
+
test can walk out of its temp dir into this repo. What removed the temp `.git`
|
|
74
|
+
is still unexplained — it now surfaces as a plain "not a git repository" rather
|
|
75
|
+
than a silent branch switch.
|
|
76
|
+
|
|
77
|
+
## [0.62.1] — 2026-08-30
|
|
78
|
+
|
|
79
|
+
### Fixed
|
|
80
|
+
|
|
81
|
+
- **`--model omni-flash` was unselectable after Flow renamed the picker entry
|
|
82
|
+
`Omni Flash` -> `Omni 1.1 Flash`
|
|
83
|
+
([#604](https://github.com/ffroliva/gflow-cli/pull/604)).** Every explicit
|
|
84
|
+
`--model omni-flash` run failed with `VideoModelSelectionError` (exit 18) — the
|
|
85
|
+
fail-loud gate worked, so no credits were spent and nothing was billed to the
|
|
86
|
+
wrong tier, but the model could not be chosen. The selector now spans the
|
|
87
|
+
injected version segment, so it matches the old label, the current one, and the
|
|
88
|
+
next bump, while staying unique against the four `Veo 3.1 - *` tiers and
|
|
89
|
+
excluding any future `[Lower Priority]` Omni variant. The same
|
|
90
|
+
literal is fixed in `scripts/dev/spike_omni_flash_i2v_ui_recon.py`. The CLI
|
|
91
|
+
alias (`--model omni-flash`) and the enum value (`omni_flash`) deliberately did
|
|
92
|
+
not change — they are gflow's own contract for chain files, resume state, and
|
|
93
|
+
JSON output. Why `has-text` broke, and when *not* to widen a selector this way:
|
|
94
|
+
[KNOWN_ISSUES.md](KNOWN_ISSUES.md), 2026-08-30 correction.
|
|
95
|
+
|
|
96
|
+
### Added
|
|
97
|
+
|
|
98
|
+
- **[`docs/ACCOUNT_SAFETY.md`](docs/ACCOUNT_SAFETY.md) — one honest page answering
|
|
99
|
+
"will this get my account flagged?"
|
|
100
|
+
([#602](https://github.com/ffroliva/gflow-cli/issues/602)).** Two Reddit
|
|
101
|
+
commenters asked the same question from opposite directions on the same day, and
|
|
102
|
+
the answer existed only as fragments across README, `DISCLAIMER.md`,
|
|
103
|
+
`DEBUGGING § WAF cadence`, `KNOWN_ISSUES` and `CONFIGURATION` — findable if you
|
|
104
|
+
already knew where to look, invisible to someone deciding whether to install.
|
|
105
|
+
The page separates the three things people conflate (a quota limit, a per-profile
|
|
106
|
+
WAF block, an account ban — only the first two have ever been observed here),
|
|
107
|
+
states what the tool does to stay unremarkable (headed real Chrome because
|
|
108
|
+
headless is an instant 403, ±25% randomisation on every interaction, 0.5–1.5 s
|
|
109
|
+
submission pacing, one project per multi-prompt run, isolated per-account
|
|
110
|
+
profiles, refuse-don't-retry), what it deliberately does **not** do (no proxy
|
|
111
|
+
rotation, no fingerprint spoofing beyond the opt-in patched engine, no headless
|
|
112
|
+
unlock, no pretence that it isn't automation), the knobs worth turning, the
|
|
113
|
+
[#241](https://github.com/ffroliva/gflow-cli/issues/241) field data on what
|
|
114
|
+
actually triggered a 403, and what cannot be promised. Linked from the README
|
|
115
|
+
banner, `docs/INDEX.md`, and back-linked from all three deep sources; published
|
|
116
|
+
to the docs site under Getting started.
|
|
117
|
+
|
|
118
|
+
- Clarified in [CONFIGURATION](docs/CONFIGURATION.md#gflow_cli_jitter_range) that
|
|
119
|
+
`GFLOW_CLI_JITTER_RANGE` paces *submissions between prompts* and is a different
|
|
120
|
+
mechanism from the always-on ±25% per-interaction randomisation — the two were
|
|
121
|
+
easy to read as one knob.
|
|
122
|
+
|
|
10
123
|
## [0.62.0] — 2026-08-28
|
|
11
124
|
|
|
12
125
|
### Changed
|
|
@@ -3402,7 +3515,9 @@ shell-script template that branches on these codes.
|
|
|
3402
3515
|
|
|
3403
3516
|
First skeleton. Not functional end-to-end yet.
|
|
3404
3517
|
|
|
3405
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
3518
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.63.0...HEAD
|
|
3519
|
+
[0.63.0]: https://github.com/ffroliva/gflow-cli/compare/v0.62.1...v0.63.0
|
|
3520
|
+
[0.62.1]: https://github.com/ffroliva/gflow-cli/compare/v0.62.0...v0.62.1
|
|
3406
3521
|
[0.62.0]: https://github.com/ffroliva/gflow-cli/compare/v0.61.0...v0.62.0
|
|
3407
3522
|
[0.61.0]: https://github.com/ffroliva/gflow-cli/compare/v0.60.0...v0.61.0
|
|
3408
3523
|
[0.60.0]: https://github.com/ffroliva/gflow-cli/compare/v0.59.0...v0.60.0
|
|
@@ -6,11 +6,30 @@
|
|
|
6
6
|
|
|
7
7
|
`gflow-cli` is an unofficial Python CLI that drives [Google Flow](https://labs.google/fx/tools/flow) (Veo image-to-video, Imagen text-to-image) from the terminal by reverse-engineering Flow's private REST API. See [README.md](README.md) for the user-facing overview.
|
|
8
8
|
|
|
9
|
+
## System rules — loaded, not requested
|
|
10
|
+
|
|
11
|
+
**[AGENTS.md](AGENTS.md) is imported below and is therefore already in context before
|
|
12
|
+
you read this line.** It is the system rule for this project: the `/gflow:` skills are
|
|
13
|
+
the default development lifecycle, and its Skill Routing table says which one to load
|
|
14
|
+
for the situation in front of you. Follow it — it is not advisory, and "I hadn't read
|
|
15
|
+
it yet" is not a reachable state.
|
|
16
|
+
|
|
17
|
+
> **Why an import and not a bullet that says "read AGENTS.md".** That bullet is what
|
|
18
|
+
> used to be here, and it failed exactly as written: an agent that skips it is not
|
|
19
|
+
> corrected by anything, and no gate notices. A session on 2026-09-01 went straight
|
|
20
|
+
> into work without it and reached step 10 of a release before discovering the
|
|
21
|
+
> pipeline's own doc-review and live-verification gates. `@AGENTS.md` removes the
|
|
22
|
+
> choice — the harness resolves the import and injects the file, with no agent
|
|
23
|
+
> cooperation required. Never downgrade this back to prose.
|
|
24
|
+
|
|
25
|
+
@AGENTS.md
|
|
26
|
+
|
|
9
27
|
## On every session start
|
|
10
28
|
|
|
11
|
-
1. Read **[
|
|
12
|
-
|
|
13
|
-
|
|
29
|
+
1. Read **[docs/INDEX.md](docs/INDEX.md)** — routing layer for all project docs and
|
|
30
|
+
commands. Deliberately *not* imported: at 36 KB it is a lookup table, not a rule set,
|
|
31
|
+
and AGENTS.md points into it. Read it when you need to find a doc.
|
|
32
|
+
2. Pull deeper context on demand:
|
|
14
33
|
- Current task / where we left off → `/gflow:status`
|
|
15
34
|
- Starting a new feature → `/gflow:predict` → `/gflow:scenario` → `/gflow:plan <feature>`
|
|
16
35
|
- Touching auth or reCAPTCHA → `/gflow:known-issues`
|
|
@@ -20,8 +39,15 @@
|
|
|
20
39
|
|
|
21
40
|
## Claude-Code-specific
|
|
22
41
|
|
|
23
|
-
- Slash commands live under `.claude/commands/gflow/` (all prefixed `/gflow:`).
|
|
24
|
-
|
|
42
|
+
- Slash commands live under `.claude/commands/gflow/` (all prefixed `/gflow:`). **These
|
|
43
|
+
are the invocable surface** — they appear in the session's skill list and may be called
|
|
44
|
+
with the `Skill` tool as `gflow:<name>`.
|
|
45
|
+
- **`skills/<name>/SKILL.md` are the canonical bodies, and are NOT `Skill`-tool-invocable.**
|
|
46
|
+
They are plain Markdown, agent-agnostic on purpose so Codex/Cursor/Aider can read the
|
|
47
|
+
same file. `Skill(skill="release")` fails with `Unknown skill: release`; each wrapper in
|
|
48
|
+
`.claude/commands/gflow/` says to read its `skills/<name>/SKILL.md` directly, and that is
|
|
49
|
+
the supported path. (This bullet previously claimed they were "auto-discoverable", which
|
|
50
|
+
is false and sends agents into a failing tool call.)
|
|
25
51
|
- Auto-memory at `~/.claude/projects/C--development-github-gflow-cli/memory/MEMORY.md` carries cross-session feedback and project state.
|
|
26
52
|
- **Worktrees:** the native `EnterWorktree` tool branches from `origin/main` (the default branch). Feature work integrates via `develop` — after entering a fresh worktree, immediately `git switch -c <type>/<name> origin/develop` and delete the auto-created `worktree-*` branch. On Windows, worktree removal can fail on a file lock (the worktree's `.venv`); `git worktree prune` + manual delete later is fine.
|
|
27
53
|
|
|
@@ -14,6 +14,58 @@ Living list of behaviour that's broken, surprising, or limited by design — alo
|
|
|
14
14
|
|
|
15
15
|
## Open
|
|
16
16
|
|
|
17
|
+
### A Veo extend segment is 7 seconds, not the 8 Flow advertises — so concat pads a frozen second
|
|
18
|
+
|
|
19
|
+
- **Status:** Open · **Severity:** Medium (audible/visible on every internal seam of a chained extend) · **Affected:** `gflow video extend -n >1` with `-o`, and any scene mixing extend segments
|
|
20
|
+
- **Discovered:** 2026-09-01, by live verification of the extend feature. Offline tests could not have found it.
|
|
21
|
+
|
|
22
|
+
**What happens.** `gflow video extend ... -n 2 -o out.mp4` produces a file whose
|
|
23
|
+
audio drops to digital silence (−91 dB) for exactly one second before each
|
|
24
|
+
internal seam, over a **frozen video frame**. The seam itself is clean; the dead
|
|
25
|
+
second sits immediately before it.
|
|
26
|
+
|
|
27
|
+
**Measured.** In a 3-clip render (original + 2 extensions), per-second mean volume:
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
7s -28.8 8s -26.4 <- original -> extension seam: continuous
|
|
31
|
+
14s -29.1 15s -75.1 16s -33.9 <- extension -> extension seam: 1s dropout
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Finer slices put the silence at 15.00–15.99s exactly. Reproduced independently on
|
|
35
|
+
a second render made days earlier from different prompts (14s −22.4, **15s −70.1**,
|
|
36
|
+
16s −23.9), so it is systematic, not a one-off.
|
|
37
|
+
|
|
38
|
+
**Root cause.** The extension media is **7.000000 seconds** — both video and audio
|
|
39
|
+
streams, confirmed by `ffprobe` on the downloaded clip. But:
|
|
40
|
+
|
|
41
|
+
- the capability listing advertises `videoLengthSeconds: 8` for
|
|
42
|
+
`veo_3_1_extension_lite`, and
|
|
43
|
+
- `getSceneWorkflows` reports `total_duration=8.0`, `end=8.0` for that clip.
|
|
44
|
+
|
|
45
|
+
`ConcatInput` passes those metadata values through verbatim, so Flow's
|
|
46
|
+
server-side concat stretches a 7s clip into an 8s slot by holding the last frame
|
|
47
|
+
and muting. The final segment escapes it only because the render ends before its
|
|
48
|
+
padding (23.02s for 3 clips, not 24s).
|
|
49
|
+
|
|
50
|
+
**Why it matters more than it looks.** A freeze-hold is the specific failure the
|
|
51
|
+
Compiled Growth parable runbook forbids — *"NEVER pad by freeze-holding a frame —
|
|
52
|
+
reads as 'video stuck'"* — and that pipeline is the named consumer for extend.
|
|
53
|
+
An N-segment chain has N−1 of these.
|
|
54
|
+
|
|
55
|
+
**Not yet established** (do not fix on a guess):
|
|
56
|
+
|
|
57
|
+
- whether 7.0s is constant across extend models, aspects and tiers, or specific
|
|
58
|
+
to `veo_3_1_extension_lite`;
|
|
59
|
+
- whether Flow's own UI renders the same padding (i.e. whether this is our
|
|
60
|
+
concat inputs or Flow's behaviour end-to-end);
|
|
61
|
+
- whether any API field reports the real media duration, which is what a clean
|
|
62
|
+
fix needs — clamping `ConcatInput.end` to a hardcoded 7.0 would be a guess
|
|
63
|
+
dressed as a fix.
|
|
64
|
+
|
|
65
|
+
**Workaround today.** Render without `-o` and trim in post, or accept the
|
|
66
|
+
freeze-hold. Single-segment extends are unaffected.
|
|
67
|
+
|
|
68
|
+
|
|
17
69
|
### An out-of-range Playwright silently wedges video generation
|
|
18
70
|
|
|
19
71
|
- **Status:** Mitigated (v0.49.0 — upper-bounded dependency + fail-fast watchdog)
|
|
@@ -644,6 +696,12 @@ batch — so it is not a global incompatibility but a per-profile WAF state.
|
|
|
644
696
|
or `GFLOW_CLI_JITTER_RANGE` (#241); cadence guidance in
|
|
645
697
|
[DEBUGGING § WAF cadence](docs/DEBUGGING.md#waf-cadence).
|
|
646
698
|
|
|
699
|
+
> **What this means for your account:** a 403 is a *per-profile* WAF score, not an
|
|
700
|
+
> account ban — the same account on a different profile has succeeded the same day.
|
|
701
|
+
> The full picture (what the tool does to stay unremarkable, what it deliberately
|
|
702
|
+
> does not do, and what we cannot promise) is in
|
|
703
|
+
> [docs/ACCOUNT_SAFETY.md](docs/ACCOUNT_SAFETY.md).
|
|
704
|
+
|
|
647
705
|
**Tracked separately from** the architectural ["first-attempt listener-miss
|
|
648
706
|
flake"](https://github.com/ffroliva/gflow-cli/pull/40) — that one was caused
|
|
649
707
|
by editor mode confusion and is resolved by PR #40. WAF 403 is a fresh, distinct
|
|
@@ -664,6 +722,34 @@ issue and not blocked by any code change in this repo.
|
|
|
664
722
|
Playwright kwarg (persists across all in-session navigations). Full resolution
|
|
665
723
|
gate: live e2e with `gflow image t2i` (each model) on a non-EN Chrome profile.
|
|
666
724
|
|
|
725
|
+
**2026-08-30 correction — locale-stable is not version-stable.** The claim
|
|
726
|
+
above that branded product names are safe anchors holds for *translation* and
|
|
727
|
+
nothing else. Flow renamed the video tier `Omni Flash` to `Omni 1.1 Flash`,
|
|
728
|
+
and because Playwright's `has-text` is a CONTIGUOUS substring match, a version
|
|
729
|
+
number inserted mid-label dropped `has-text('Omni Flash')` to zero matches.
|
|
730
|
+
Every explicit `--model omni-flash` run then failed loud with
|
|
731
|
+
`VideoModelSelectionError` (exit 18, no credits spent) — the fail-loud gate
|
|
732
|
+
worked exactly as designed, but the model was unusable until the selector was
|
|
733
|
+
fixed. `VIDEO_MODEL_OPTION_SELECTORS[OMNI_FLASH]` now uses two ANDed
|
|
734
|
+
`has-text` clauses (`'Omni'` + `'Flash'`) that span the version segment, plus
|
|
735
|
+
the `:not(:has-text('[Lower Priority]'))` exclusion its `VEO_3_1_LITE` sibling
|
|
736
|
+
already carries — without it an 'Omni 1.1 Flash [Lower Priority]' tier would
|
|
737
|
+
match two menuitems and put the model straight back at exit 18.
|
|
738
|
+
`tests/flow_selectors/test_model_governance.py` grades it against BOTH labels
|
|
739
|
+
Flow has shipped plus a no-collision check against the four `Veo 3.1 - *`
|
|
740
|
+
tiers. The rule this generalises to is NOT a blanket "always match tokens" —
|
|
741
|
+
it depends on whether gflow's own identifier pins the version. `omni_flash`
|
|
742
|
+
carries no version, so the `1.1` in Flow's label is noise and the anchor must
|
|
743
|
+
span it. The four `Veo 3.1 - *` selectors deliberately keep the contiguous
|
|
744
|
+
version, because `VEO_3_1_FAST = "veo_3_1_fast"` makes `3.1` part of the
|
|
745
|
+
model's identity there: if Flow replaces that tier with a `Veo 3.2`, a loud
|
|
746
|
+
MISS is the CORRECT outcome, and widening those anchors to
|
|
747
|
+
`has-text('Veo'):has-text('Fast')`-style token pairs would silently bind
|
|
748
|
+
`--model veo-fast` to a different tier at a different credit price. Ask which
|
|
749
|
+
of the two shapes you have before widening. The CLI alias (`--model omni-flash`) and the enum value
|
|
750
|
+
(`omni_flash`) are gflow's own identifiers and deliberately did NOT change —
|
|
751
|
+
they are a stable contract for chain files, resume state, and JSON output.
|
|
752
|
+
|
|
667
753
|
**2026-06-12 correction (issue #170):** the "all selector groups" claim above
|
|
668
754
|
had two stragglers — `PICKER_INCLUDE_BUTTON` and `PICKER_CONTEXT_INCLUDE`
|
|
669
755
|
hardcoded the pt-BR caption "Incluir no comando", breaking
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.63.0
|
|
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
|
|
@@ -58,7 +58,7 @@ Requires-Dist: numpy>=1.24; extra == 'dev'
|
|
|
58
58
|
Requires-Dist: pyright>=1.1.0; extra == 'dev'
|
|
59
59
|
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
|
|
60
60
|
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
61
|
-
Requires-Dist: ruff==0.16.
|
|
61
|
+
Requires-Dist: ruff==0.16.5; extra == 'dev'
|
|
62
62
|
Provides-Extra: gcs
|
|
63
63
|
Requires-Dist: gcsfs>=2024.2.0; extra == 'gcs'
|
|
64
64
|
Requires-Dist: universal-pathlib>=0.2.5; extra == 'gcs'
|
|
@@ -83,10 +83,13 @@ Description-Content-Type: text/markdown
|
|
|
83
83
|
[](https://github.com/microsoft/pyright)
|
|
84
84
|
[](CONTRIBUTING.md)
|
|
85
85
|
[](https://sonarcloud.io/summary/new_code?id=ffroliva_gflow-cli)
|
|
86
|
+
[](https://sonarcloud.io/component_measures?id=ffroliva_gflow-cli&metric=coverage)
|
|
86
87
|
[](https://scorecard.dev/viewer/?uri=github.com/ffroliva/gflow-cli)
|
|
87
88
|
|
|
88
89
|
> ⚠️ **Read this before you install.** gflow-cli is **unofficial, alpha, and reverse-engineered — not affiliated with Google**. It drives a headed browser on *your own* Google Flow session, so treat it as your own account risk: automation is subject to Google's ToS, and endpoints or UI can change without notice. It works with **any Google account** that has Flow access, and every generation bills against your account's Flow credit allowance. Read the full [DISCLAIMER](DISCLAIMER.md).
|
|
89
90
|
>
|
|
91
|
+
> 🛡️ **"Will this get my account flagged?"** The honest, specific answer — what the tool does to stay unremarkable (headed real Chrome, randomised interaction timing, paced submissions), what it deliberately does **not** do (no proxies, no fingerprint spoofing, no pretending it isn't automation), what you can tune, and what we cannot promise — is in [docs/ACCOUNT_SAFETY.md](docs/ACCOUNT_SAFETY.md).
|
|
92
|
+
>
|
|
90
93
|
> 💳 **What failure costs you.** Credits are only spent on Veo *video* generation — images and composition ops are free, so most breakage costs nothing. When Flow's UI drifts mid-run, the CLI fails fast and loudly with distinct exit codes (e.g. selector drift = exit 23) instead of resubmitting, and batch items are recorded locally *before* submission so a broken run never silently burns credits on a stale state. See [KNOWN_ISSUES](KNOWN_ISSUES.md) for the current risk list.
|
|
91
94
|
>
|
|
92
95
|
> 🌐 **Headed browser today.** gflow drives Flow through a persistent Playwright Chromium profile, because Google's auth and reCAPTCHA gates require it. The [Architecture](#architecture--current-limitations) section shows where you can help.
|
|
@@ -95,7 +98,7 @@ Description-Content-Type: text/markdown
|
|
|
95
98
|
|
|
96
99
|
You have a Google account with Flow access, you have Veo credits, and you run real batch work. gflow-cli gives you:
|
|
97
100
|
|
|
98
|
-
- **Batch generation.** Loop prompts straight from the shell: `for p in $(cat prompts.txt); do gflow image t2i "$p"; done`. Image batching plus `gflow video t2v` / `i2v` / `r2v` all ship today.
|
|
101
|
+
- **Batch generation.** Loop prompts straight from the shell: `for p in $(cat prompts.txt); do gflow image t2i "$p"; done`. Image batching plus `gflow video t2v` / `i2v` / `r2v` all ship today, and `gflow video extend` continues an existing clip past Flow's 8s ceiling.
|
|
99
102
|
- **Consistent subjects.** `gflow character create` mints a Flow Character (face and body reference) so the same person appears from one generation to the next.
|
|
100
103
|
- **Prompt tools.** `--tool creative-director` rewrites a terse prompt into a vivid one (Google's 5-component formula) before generating — on any command. Bring your own with [My Tools](docs/TOOLS.md).
|
|
101
104
|
- **Pipelines.** Wire Veo into your content automation, AI-video stack, or batch experiments.
|
|
@@ -197,7 +200,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
|
|
|
197
200
|
|
|
198
201
|
## Project status
|
|
199
202
|
|
|
200
|
-
**Alpha.** Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, chain) run end-to-end on `ui_automation`, with a 5-model Veo picker plus `--duration` and `--count`. Beyond single generations: `gflow movie` renders multi-scene manifests, `gflow instructions` manages persistent Agent-Mode brief cards (credits-free), `gflow character` handles reusable subjects, `gflow scene` does credit-free server-side stitching, `--tool` applies prompt-rewriting tools, and an MCP server (`gflow mcp run` stdio / `gflow serve` HTTP
|
|
203
|
+
**Alpha.** Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, chain, extend) run end-to-end on `ui_automation`, with a 5-model Veo picker plus `--duration` and `--count`. Beyond single generations: `gflow movie` renders multi-scene manifests, `gflow instructions` manages persistent Agent-Mode brief cards (credits-free), `gflow character` handles reusable subjects, `gflow scene` does credit-free server-side stitching, `--tool` applies prompt-rewriting tools, and an MCP server (`gflow mcp run` stdio / `gflow serve` Streamable HTTP) exposes the core surface to AI agents with a CI-enforced CLI↔MCP parity contract.
|
|
201
204
|
|
|
202
205
|
Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project is heading: [ROADMAP.md](ROADMAP.md).
|
|
203
206
|
|
|
@@ -224,4 +227,11 @@ Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project
|
|
|
224
227
|
[](https://github.com/ffroliva/gflow-cli)
|
|
225
228
|
[](https://pepy.tech/project/gflow-cli)
|
|
226
229
|
|
|
230
|
+
### Star history
|
|
231
|
+
|
|
232
|
+
<picture>
|
|
233
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=ffroliva/gflow-cli&type=date&theme=dark&legend=top-left" />
|
|
234
|
+
<img alt="Star history chart for ffroliva/gflow-cli" src="https://api.star-history.com/chart?repos=ffroliva/gflow-cli&type=date&legend=top-left" />
|
|
235
|
+
</picture>
|
|
236
|
+
|
|
227
237
|
If `gflow-cli` saves you time, please ⭐ the repo. It is the cheapest way to support the project.
|
|
@@ -716,7 +716,7 @@ Today the CLI writes media to `$GFLOW_CLI_OUTPUT_DIR` on the local filesystem. P
|
|
|
716
716
|
| 11 | LF-only line endings via `.gitattributes` | Single repo source of truth; cross-platform contributors don't think about it |
|
|
717
717
|
| 12 | `Provider` indirection (legacy `providers/`) removed | Superseded by `api.FlowApiClient`. Re-introduce when we add `OfficialVeoProvider` (planned v0.5+) |
|
|
718
718
|
| 13 | CDP attach / stealth-engine alternatives deferred; **current stealth fix confirmed sufficient 2026-07-09** | Gate met: a 20-gen live baseline through the default stealth stack showed a **0.0% WAF 403 rate**, so the "confirm insufficient before implementing" bar is unmet — CDP-Attach and the Camoufox engine stay parked (Camoufox roadmap closed at Phase 2). Evidence: [superpowers/spikes/2026-07-09-camoufox-waf-403.md](superpowers/spikes/2026-07-09-camoufox-waf-403.md). |
|
|
719
|
-
| 14 | HTTP status path (`get_video_status`) retired alongside `generate_video` | It is the same 401-dead path and would collide with the new `api/video.py:VideoStatus` value object — retiring both together keeps the domain clean. |
|
|
719
|
+
| 14 | HTTP status path (`get_video_status`) retired alongside `generate_video` | It is the same 401-dead path and would collide with the new `api/video.py:VideoStatus` value object — retiring both together keeps the domain clean. **Scope note 2026-08-31:** "401-dead" was measured on `batchAsyncGenerateVideoText` in 2026-05 and has NOT been re-tested. It is not a property of `/v1/video:*` as a family — `batchAsyncGenerateVideoExtendVideo` returned **200** from our own transport with our own minted token on 2026-08-31 ([spike](docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md)). Do not cite this ADR as evidence that a direct-wire video route cannot work; re-measure the specific route. |
|
|
720
720
|
|
|
721
721
|
---
|
|
722
722
|
|
|
@@ -12,10 +12,13 @@
|
|
|
12
12
|
[](https://github.com/microsoft/pyright)
|
|
13
13
|
[](CONTRIBUTING.md)
|
|
14
14
|
[](https://sonarcloud.io/summary/new_code?id=ffroliva_gflow-cli)
|
|
15
|
+
[](https://sonarcloud.io/component_measures?id=ffroliva_gflow-cli&metric=coverage)
|
|
15
16
|
[](https://scorecard.dev/viewer/?uri=github.com/ffroliva/gflow-cli)
|
|
16
17
|
|
|
17
18
|
> ⚠️ **Read this before you install.** gflow-cli is **unofficial, alpha, and reverse-engineered — not affiliated with Google**. It drives a headed browser on *your own* Google Flow session, so treat it as your own account risk: automation is subject to Google's ToS, and endpoints or UI can change without notice. It works with **any Google account** that has Flow access, and every generation bills against your account's Flow credit allowance. Read the full [DISCLAIMER](DISCLAIMER.md).
|
|
18
19
|
>
|
|
20
|
+
> 🛡️ **"Will this get my account flagged?"** The honest, specific answer — what the tool does to stay unremarkable (headed real Chrome, randomised interaction timing, paced submissions), what it deliberately does **not** do (no proxies, no fingerprint spoofing, no pretending it isn't automation), what you can tune, and what we cannot promise — is in [docs/ACCOUNT_SAFETY.md](docs/ACCOUNT_SAFETY.md).
|
|
21
|
+
>
|
|
19
22
|
> 💳 **What failure costs you.** Credits are only spent on Veo *video* generation — images and composition ops are free, so most breakage costs nothing. When Flow's UI drifts mid-run, the CLI fails fast and loudly with distinct exit codes (e.g. selector drift = exit 23) instead of resubmitting, and batch items are recorded locally *before* submission so a broken run never silently burns credits on a stale state. See [KNOWN_ISSUES](KNOWN_ISSUES.md) for the current risk list.
|
|
20
23
|
>
|
|
21
24
|
> 🌐 **Headed browser today.** gflow drives Flow through a persistent Playwright Chromium profile, because Google's auth and reCAPTCHA gates require it. The [Architecture](#architecture--current-limitations) section shows where you can help.
|
|
@@ -24,7 +27,7 @@
|
|
|
24
27
|
|
|
25
28
|
You have a Google account with Flow access, you have Veo credits, and you run real batch work. gflow-cli gives you:
|
|
26
29
|
|
|
27
|
-
- **Batch generation.** Loop prompts straight from the shell: `for p in $(cat prompts.txt); do gflow image t2i "$p"; done`. Image batching plus `gflow video t2v` / `i2v` / `r2v` all ship today.
|
|
30
|
+
- **Batch generation.** Loop prompts straight from the shell: `for p in $(cat prompts.txt); do gflow image t2i "$p"; done`. Image batching plus `gflow video t2v` / `i2v` / `r2v` all ship today, and `gflow video extend` continues an existing clip past Flow's 8s ceiling.
|
|
28
31
|
- **Consistent subjects.** `gflow character create` mints a Flow Character (face and body reference) so the same person appears from one generation to the next.
|
|
29
32
|
- **Prompt tools.** `--tool creative-director` rewrites a terse prompt into a vivid one (Google's 5-component formula) before generating — on any command. Bring your own with [My Tools](docs/TOOLS.md).
|
|
30
33
|
- **Pipelines.** Wire Veo into your content automation, AI-video stack, or batch experiments.
|
|
@@ -126,7 +129,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
|
|
|
126
129
|
|
|
127
130
|
## Project status
|
|
128
131
|
|
|
129
|
-
**Alpha.** Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, chain) run end-to-end on `ui_automation`, with a 5-model Veo picker plus `--duration` and `--count`. Beyond single generations: `gflow movie` renders multi-scene manifests, `gflow instructions` manages persistent Agent-Mode brief cards (credits-free), `gflow character` handles reusable subjects, `gflow scene` does credit-free server-side stitching, `--tool` applies prompt-rewriting tools, and an MCP server (`gflow mcp run` stdio / `gflow serve` HTTP
|
|
132
|
+
**Alpha.** Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, chain, extend) run end-to-end on `ui_automation`, with a 5-model Veo picker plus `--duration` and `--count`. Beyond single generations: `gflow movie` renders multi-scene manifests, `gflow instructions` manages persistent Agent-Mode brief cards (credits-free), `gflow character` handles reusable subjects, `gflow scene` does credit-free server-side stitching, `--tool` applies prompt-rewriting tools, and an MCP server (`gflow mcp run` stdio / `gflow serve` Streamable HTTP) exposes the core surface to AI agents with a CI-enforced CLI↔MCP parity contract.
|
|
130
133
|
|
|
131
134
|
Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project is heading: [ROADMAP.md](ROADMAP.md).
|
|
132
135
|
|
|
@@ -153,4 +156,11 @@ Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project
|
|
|
153
156
|
[](https://github.com/ffroliva/gflow-cli)
|
|
154
157
|
[](https://pepy.tech/project/gflow-cli)
|
|
155
158
|
|
|
159
|
+
### Star history
|
|
160
|
+
|
|
161
|
+
<picture>
|
|
162
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=ffroliva/gflow-cli&type=date&theme=dark&legend=top-left" />
|
|
163
|
+
<img alt="Star history chart for ffroliva/gflow-cli" src="https://api.star-history.com/chart?repos=ffroliva/gflow-cli&type=date&legend=top-left" />
|
|
164
|
+
</picture>
|
|
165
|
+
|
|
156
166
|
If `gflow-cli` saves you time, please ⭐ the repo. It is the cheapest way to support the project.
|