gflow-cli 0.71.1__tar.gz → 0.72.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.71.1 → gflow_cli-0.72.0}/.codex-plugin/plugin.json +1 -1
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.env.template +3 -2
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/AGENTS.md +2 -2
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/CHANGELOG.md +86 -1
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/KNOWN_ISSUES.md +57 -16
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/PKG-INFO +3 -3
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/README.md +2 -2
- {gflow_cli-0.71.1/website → gflow_cli-0.72.0}/docs/ARCHITECTURE.md +7 -7
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/AUTHENTICATION.md +28 -8
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/CHARACTER_RECON.md +3 -1
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/CONFIGURATION.md +2 -2
- {gflow_cli-0.71.1/website → gflow_cli-0.72.0}/docs/DEBUGGING.md +5 -4
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/INDEX.md +2 -2
- gflow_cli-0.72.0/docs/LIVE_VERIFICATION_v0.72.0.md +217 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/MCP.md +1 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/PROJECT_STATUS.md +51 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/USAGE.md +19 -4
- {gflow_cli-0.71.1/website → gflow_cli-0.72.0}/docs/USER_GUIDE.md +10 -4
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/medium_tutorial.md +3 -3
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/flow-recon-must-run-on-denon82-ffroliva-migrated.md +20 -6
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/migrated-host-driver-wire-lessons.md +29 -0
- gflow_cli-0.72.0/docs/superpowers/memory/real-browser-auth-mandatory.md +32 -0
- gflow_cli-0.72.0/docs/superpowers/spikes/2026-09-08-g12-blocks-webdriver-not-playwright.md +131 -0
- gflow_cli-0.72.0/docs/superpowers/spikes/2026-09-08-migrated-image-submit-wire.md +64 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/llms.txt +1 -1
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/pyproject.toml +1 -1
- gflow_cli-0.72.0/scripts/dev/spike_migrated_image_submit.py +282 -0
- gflow_cli-0.72.0/scripts/dev/spike_playwright_chrome_login.py +272 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/gflow-cli/SKILL.md +5 -1
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/video-production/SKILL.md +1 -1
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/video-production/failure-modes.md +2 -2
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/client.py +16 -40
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/batchexecute.py +103 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/migrated_composer.py +335 -18
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/ui_automation.py +67 -4
- gflow_cli-0.72.0/src/gflow_cli/auth/internal_chromium.py +322 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/auth/real_chrome.py +205 -37
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/browser_manager.py +16 -14
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/config.py +3 -2
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/errors.py +12 -7
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/mcp/tools.py +2 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_migrated_composer.py +304 -3
- gflow_cli-0.72.0/tests/api/transports/test_migrated_images.py +361 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/auth/strategies/test_strategies.py +286 -5
- gflow_cli-0.72.0/tests/auth/test_real_chrome.py +744 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_error_handling.py +19 -4
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/conftest.py +35 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_migrated_host_e2e.py +42 -27
- gflow_cli-0.72.0/tests/features/migrated_host_images.feature +21 -0
- gflow_cli-0.72.0/tests/features/test_migrated_host_images_steps.py +157 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_browser_manager.py +49 -13
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_config.py +12 -2
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/uv.lock +20 -10
- {gflow_cli-0.71.1 → gflow_cli-0.72.0/website}/docs/ARCHITECTURE.md +7 -7
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/AUTHENTICATION.md +28 -8
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/CONFIGURATION.md +2 -2
- {gflow_cli-0.71.1 → gflow_cli-0.72.0/website}/docs/DEBUGGING.md +5 -4
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/KNOWN_ISSUES.md +57 -16
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/MCP.md +1 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/USAGE.md +19 -4
- {gflow_cli-0.71.1 → gflow_cli-0.72.0/website}/docs/USER_GUIDE.md +10 -4
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/onboarding-mockup.html +4 -4
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/onboarding.md +3 -3
- gflow_cli-0.71.1/docs/superpowers/memory/real-browser-auth-mandatory.md +0 -10
- gflow_cli-0.71.1/src/gflow_cli/auth/internal_chromium.py +0 -185
- gflow_cli-0.71.1/tests/auth/test_real_chrome.py +0 -145
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.agents/plugins/marketplace.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/spike.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.gitattributes +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/FUNDING.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/dependabot.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/workflows/deps-watch.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/workflows/labels.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/workflows/scorecard.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/workflows/selector-probe.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.github/workflows/star-history-watch.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.gitignore +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/.secrets.baseline +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/CLAUDE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/CONFIGURATION.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/LICENSE +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/RELEASE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/ROADMAP.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/conftest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/deploy/logrotate-pr-triage +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docker-compose.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/ACCOUNT_SAFETY.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/CHARACTER.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_reference_entity_guard.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.63.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.64.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.65.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.66.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.66.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.66.2.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.66.3.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.67.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.68.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.69.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.70.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.71.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.71.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/SECURITY.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/agents-md-vs-llms-txt.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/background-e2e-pytest-pattern.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/bdd-stubs-mirror-runtime-signatures.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/credit-free-route-abort-verification.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/data-layer-overview.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/data-layer-test-pollution-trap.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/doc-examples-are-untested-fixtures.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/draft-pr-merge-trap.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/e2e-evidence-is-a-contributor-deliverable.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/exit-code-16-data-store.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/flow-capabilities-are-cohort-dependent.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/flow-credits-videos-only.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/flow-locale-leak-icon-ligatures.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/force-color-breaks-cli-tests.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/full-test-suite-ooms.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/git-add-all-sweeps-scratch-files.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/image-video-mode-switch-symmetry.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/ligature-carrier-differs-by-host.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/mcp-is-first-class-across-skill-chain.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/memory-is-working-dir-keyed.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/on-started-callback-recorder-safety.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/playwright-click-no-downstream-event-signature.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/pr-council-review-stale-tree-reads.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/pr-hygiene-revert-and-multi-commit.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/pr-must-verify-on-affected-surface.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/prose-conflicts-hide-in-disjoint-files.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/pypi-readme-staleness-fix.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/pypi-rejected-filename-reusable.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/readme-hybrid-router-pattern.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/release-back-merge-gap-recovery.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/release-signing.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/release-spec-plan-memory-consolidation.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/rest-transports-drop-ui-fields.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/ruff-format-scope-is-src-tests.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/sonarcloud-hotspot-review-workflow.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/sonarcloud-new-code-gotchas.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/sonarcloud-pr-issues-scope-s7497.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/sonarcloud-setup.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/stale-test-discovery.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/structlog-cache-logger-off-for-tests.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/ui-selector-drift-error-exit-23.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/verification-ledger-5-layer.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/video-model-capability-matrix.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/wheel-build-sanity-gate.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/windows-dev-quirks.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/memory/windows-running-launcher-blocks-uv-upgrade.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/plans/2026-09-06-spike-tooling-reorg/PLAN.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-04-migrated-host-handoff-mechanism.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-05-migrated-frames-attach.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-05-migrated-host-wire-protocol.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-05-migrated-model-menu-lower-priority.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-05-migrated-r2v-attach-surface.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-06-labs-vs-migrated-session-credential.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-06-migrated-character-surface-and-recaptcha.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-07-character-format-button-anchor.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-07-credit-shortfall-looks-like-selector-drift.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-07-format-click-is-not-a-format.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-07-ligature-carrier-and-name-drift.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-07-migrated-composer-has-an-image-mode.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-08-migrated-composer-agent-mode-hides-settings.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-08-migrated-queue-is-readable-on-zzl0ze.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/docs/superpowers/spikes/2026-09-08-migrated-upload-fails-two-ways.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/examples/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/index.html +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/canary/register_task.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/canary/run_canary.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/ci/check_council_memory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/ci/check_test_count.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/acceptance/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/acceptance/bench.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/acceptance/domain.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/acceptance/judge.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/acceptance/settings.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_migrated_attach_rpcs.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_migrated_mention_gestures.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_migrated_model_menu.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_migrated_r2v_production_submit.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_migrated_r2v_submit_payload.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_migrated_r2v_surface.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_migrated_upload_flow.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_project_listing.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/har-spike/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/har-spike/capture-agent-ui.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/har-spike/capture-media-scrape.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/har-spike/extract_har_summary.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/har-spike/launch-flow-chrome.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/har-spike/probe-agent-mode.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/har-spike/probe_agent_mode.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/har-spike/run-cdp-smoke.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/har-spike/start-background-capture.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/har-spike/start-har-capture.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/har-spike/stop-background-capture.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/har-spike/stop-har-capture.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/live_verify_video_model_select.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/measure_html_lang_settle.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/measure_locale_probe.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/measure_migrated_host_flip.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_cdp_har_without_node.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_changelog_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_character_editor_ready_gate.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_character_prompt_format.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_entity_submit_rpcs.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_extend_model_recon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_extend_ourstack_verify.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_extend_route_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_extend_submit_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_extend_ui_recon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_format_prompt_effect.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_host_lane.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_ligature_carrier_sweep.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_locale_poison.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_body_reference_chip.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_character_body_controls.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_character_editor_anchor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_character_ogiz0b_schema.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_character_submit_wire.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_character_surface.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_composer_arms.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_composer_mode_axis.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_duration_by_model.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_editor_dom_inventory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_entity_submit.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_frames_attach.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_host_trigger.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_image_capability.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_picker_option_kind.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_queue_read.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_recaptcha_mint.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_submit_anchor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_submit_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_upload_wire.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migrated_vs_labs_provenance.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_migration_flag_bootstrap.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_model_inventory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_project_media_status.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/spike_video_tab_dom.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/verify_lang_settle_fix.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/verify_language_agnostic.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/dev/verify_model_attribution.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/diag/spike_387_openai_compat.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/probe/run_probe.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/probe/spike_auth_matrix.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/README.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/live-verify/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/release/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/spike/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/video-production/clip_qa.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/video-production/composition.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/video-production/consistency.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/skills/video-production/tasks.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/sonar-project.properties +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/_cli_helpers.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/credits.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/extend_chain.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/routes.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/_common.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/transports/ui_automation_video.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/api/video_extend.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli_credits.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli_doctor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli_project.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli_update.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/cli_video.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/diagnostics.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/file_integrity.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/flow_selectors/model.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/mcp/setup.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/profile_lease.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/redaction.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/services/catalog_sync.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/services/credits.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/services/doctor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/update_check.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/winsec.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/worker/codec.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/fixtures/project_initial_data_extend_models.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_character_readback_fallback.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_client_errors.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_client_extend.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_client_incidents.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_client_locale_cache.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_client_migrated_mint.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_credits.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_credits_http.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_extend_chain.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_routes_locale.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_video_extend.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/test_video_status_poll.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_batchexecute.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_character_model_picker.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_ligature_carrier.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_locale_navigation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_migrated_dispatch.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_migrated_host_gate.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_migrated_r2v.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_migrated_route.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_model_selection_loud.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_navigation_settled.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_new_project_cta_migrated.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_overlay_precondition.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_policy_400.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_ui_automation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/api/transports/test_video_model_selection_loud.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/auth/test_windows_acl.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_auth_status.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_credits.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_data_sync.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_doctor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_cli_video_extend.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_predictable_output.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_run_with_handlers_context_leak.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_run_with_handlers_interrupt.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/test_null_columns_stay_null.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/test_store.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_character_mcp_parity_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_credits_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_credits_mcp_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_e2e_env_isolation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_insufficient_credits_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_migrated_i2v_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_project_naming_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/credits.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/duration_tab_drift.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/entity_provenance.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/image_batch_references.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/latched_locale_recovery.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/mcp_tasks.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/media_picker_tiers.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/migrated_driver.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/migrated_host_gate.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/migrated_i2v.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/output_hardening.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_credits_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_mcp_tasks_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_migrated_driver_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_migrated_host_gate_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_migrated_i2v_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_output_hardening_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/fixtures/changelog_modal_page.html +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/fixtures/doctor_env.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/fixtures/flow_model_inventory.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/fixtures/flow_project_listing_media.json +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/fixtures/listing_payload.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/flow_selectors/test_grading.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/flow_selectors/test_model.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/flow_selectors/test_model_governance.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/flow_selectors/test_registry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/flow_selectors/test_report.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/integration/test_expander_gateway.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_auth_status_tool.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_character_tools.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_cli_parity.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_credits_tool.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_error_funnel.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_http_transport.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_known_issues_resource.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_migrated_i2v_parity.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_no_spend.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_reference_entity_round_trip.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_resources.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_setup.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_tasks_extension.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_canary_classify.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_canary_reexec.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_capture_video_model_capability_matrix.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_check_council_memory.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_check_test_count.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_codex_plugin.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_extract_har_summary.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_frame_acceptance.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_skillopt_scoring.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_spike_page_pool.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_spike_profile_lease.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/scripts/test_workflow_hardening.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/services/test_catalog_sync.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/services/test_credits.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/services/test_doctor.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/services/test_media_attribution.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_cli_project.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_cli_update.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_diagnostics_recorder.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_diagnostics_retention.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_duration_tab_drift.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_entity_provenance.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_errors.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_image_batch_references.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_incident_generation_requests.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_media.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_overlay_banner_dismissal.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_playwright_pin.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_profile_lease.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_profile_store_locale.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_project_list_urls.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_self_documenting_errors.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/test_update_check.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/ACCOUNT_SAFETY.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/CHARACTER.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/SECURITY.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/index.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/installation.md +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/mkdocs.yml +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/requirements.in +0 -0
- {gflow_cli-0.71.1 → gflow_cli-0.72.0}/website/requirements.txt +0 -0
|
@@ -183,8 +183,9 @@
|
|
|
183
183
|
# GFLOW_CLI_UI_MODE=auto
|
|
184
184
|
|
|
185
185
|
# Which Flow frontend gflow drives (#639). auto (default): flow.google.com is the
|
|
186
|
-
# default host for what it can serve today (video t2v
|
|
187
|
-
# --initial-frame
|
|
186
|
+
# default host for what it can serve today (video t2v; video i2v from a local
|
|
187
|
+
# --initial-frame; video r2v from local --ref files; image t2i; and image i2i from
|
|
188
|
+
# local files — all with --project) on every
|
|
188
189
|
# account; requests it cannot serve yet keep the labs driver on an unmoved
|
|
189
190
|
# account, and a moved account gets the migrated composer for everything ported.
|
|
190
191
|
# flow.google.com: force the migrated composer for everything.
|
|
@@ -42,7 +42,7 @@ by construction, so Codex / Cursor / Aider / `agy` read exactly what Claude Code
|
|
|
42
42
|
|
|
43
43
|
## Project at a glance
|
|
44
44
|
|
|
45
|
-
- 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` — and, for accounts Google has moved to `flow.google.com`, that frontend's `batchexecute` wire (text-to-video, image-to-video from a local `--initial-frame`,
|
|
45
|
+
- 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` — and, for accounts Google has moved to `flow.google.com`, that frontend's `batchexecute` wire (text-to-video, image-to-video from a local `--initial-frame`, reference-to-video from local `--ref` files, and text-to-image/local-file image-to-image, today; `GFLOW_CLI_FLOW_HOST`).
|
|
46
46
|
- Python 3.11+ · `uv`-managed · `hatchling` builds · Playwright Chromium transport · `pyright` strict · `ruff` · `pytest`.
|
|
47
47
|
- 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_credits.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`, `cli_update.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`.
|
|
48
48
|
- Command surface: `gflow auth`, `gflow credits` (user/list — read-only Veo balance), `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 update` (self-update through the installer that put it here — uv tool / pipx / pip; `--check` only reports; source installs refused, exit 11; deliberately no MCP twin), `gflow project`, `gflow models`, `gflow run`, `gflow mcp` (run/setup — stdio MCP server), and `gflow serve` (Streamable HTTP at `/mcp`; `--transport sse` is deprecated).
|
|
@@ -50,7 +50,7 @@ by construction, so Codex / Cursor / Aider / `agy` read exactly what Claude Code
|
|
|
50
50
|
|
|
51
51
|
## Headed-browser dependency (architectural reality)
|
|
52
52
|
|
|
53
|
-
gflow-cli currently drives Flow via a **real Chrome session managed by Playwright** — `ui_automation` transport. Google's auth + reCAPTCHA stack rejects
|
|
53
|
+
gflow-cli currently drives Flow via a **real Chrome session managed by Playwright** — `ui_automation` transport. Google's auth + reCAPTCHA stack rejects browsers that advertise automation, and most headless approaches. This is the project's defining trade-off:
|
|
54
54
|
|
|
55
55
|
- ✅ Works end-to-end against live Google accounts.
|
|
56
56
|
- ❌ Requires a saved Chrome profile, a display server for one-time login, and ~150 MB for Chromium.
|
|
@@ -7,6 +7,90 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.72.0] — 2026-09-09
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`gflow image t2i` and local-file `i2i` now run on migrated `flow.google.com`
|
|
15
|
+
accounts** ([#639](https://github.com/ffroliva/gflow-cli/issues/639)). The Angular
|
|
16
|
+
composer binds Image mode, Nano Banana 2 / Pro, the four aspect ratios measured on that
|
|
17
|
+
host (16:9, 4:3, 1:1, 9:16) and counts 1–4,
|
|
18
|
+
then observes the page-owned `ogiZ0b` `batchexecute` reply and returns the same
|
|
19
|
+
`GeneratedImage` contract as the labs driver. Local references reuse the measured
|
|
20
|
+
`maseQ` upload + mention path and are verified in the outgoing submit body before the
|
|
21
|
+
result is trusted. The migrated page owns reCAPTCHA minting, avoiding the root-grid
|
|
22
|
+
`RecaptchaError`; unsupported UUID/entity/instruction/Imagen-4 forms still fail before
|
|
23
|
+
submit rather than silently dropping options.
|
|
24
|
+
|
|
25
|
+
- **`gflow image batch` is refused on the migrated host instead of failing as selector
|
|
26
|
+
drift** ([#639](https://github.com/ffroliva/gflow-cli/issues/639)). The batch path
|
|
27
|
+
drives labs selectors only; it now raises `FlowHostMigratedError` (exit 36) before any
|
|
28
|
+
submit, rather than running those selectors against `flow.google.com` and reporting
|
|
29
|
+
exit 23 — which told the user to file a frontend-drift bug about a frontend that was
|
|
30
|
+
behaving correctly.
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- **`gflow auth login` closes the browser for you.** It drives your real Google Chrome
|
|
35
|
+
through Playwright, watches for the completed Flow sign-in, and closes the window itself —
|
|
36
|
+
the "now close Chrome" step is gone. Closing the window yourself still works and still
|
|
37
|
+
verifies; it is not an error. On a machine where Playwright cannot resolve a Chrome
|
|
38
|
+
channel, or where Google rejects the browser anyway, login falls back automatically to the
|
|
39
|
+
previous flow (Chrome as a plain subprocess, you close the window). **There is no new flag
|
|
40
|
+
and nothing to choose.**
|
|
41
|
+
([spike](docs/superpowers/spikes/2026-09-08-g12-blocks-webdriver-not-playwright.md))
|
|
42
|
+
|
|
43
|
+
### Fixed
|
|
44
|
+
|
|
45
|
+
- **The second image in one session no longer falls back to the labs reCAPTCHA mint**
|
|
46
|
+
([#673](https://github.com/ffroliva/gflow-cli/issues/673)). Every migrated image run
|
|
47
|
+
parks its page on `about:blank`, which routes as `labs` — so the page-owned-mint
|
|
48
|
+
capability, derived from `page.url`, answered `False` on the next call and sent it
|
|
49
|
+
back to minting on the pooled bootstrap page. The transport now latches the observed
|
|
50
|
+
host: `gflow image batch`, which runs every prompt through one `FlowApiClient`,
|
|
51
|
+
generated its first prompt and failed the rest with the exact `RecaptchaError` this
|
|
52
|
+
release exists to remove.
|
|
53
|
+
- **`--aspect 3:4` is refused on the migrated host rather than reported as selector
|
|
54
|
+
drift.** The composer's aspect radiogroup was enumerated there with four radios —
|
|
55
|
+
`crop_16_9`, `crop_landscape`, `crop_square`, `crop_9_16` — and no `crop_portrait`, so
|
|
56
|
+
a 3:4 request missed its selector and raised exit 23. It is now an unported form
|
|
57
|
+
(exit 36). The "all five aspect ratios" claim has been corrected to the four measured
|
|
58
|
+
wherever it appeared.
|
|
59
|
+
- **The exit-36 remediation no longer contradicts the error it accompanies.**
|
|
60
|
+
`FlowHostMigratedError._default_remediation` still described the migrated host as
|
|
61
|
+
driving only t2v and local-frame i2v, so an image refusal printed a `detail` saying
|
|
62
|
+
t2i/i2i are driven directly above a remediation saying they are not. Both it and the
|
|
63
|
+
class docstring now name the full ported matrix.
|
|
64
|
+
- **`gflow auth login --browser internal` launched a browser configuration measured as
|
|
65
|
+
rejected.** The bundled-Chromium path shipped with no anti-automation flags, which leaves
|
|
66
|
+
`navigator.webdriver` set. On 2026-09-08 a browser in that state — real Chrome with the
|
|
67
|
+
flags removed — was rejected at `/v3/signin/rejected` 17.5 s into the flow, while the same
|
|
68
|
+
browser *with* the flags signed in normally. Bundled Chromium was measured only in the
|
|
69
|
+
flagged configuration, so its unflagged rejection is inferred from the shared signal, not
|
|
70
|
+
observed directly. It now passes
|
|
71
|
+
`--disable-blink-features=AutomationControlled`, `ignore_default_args=["--enable-automation"]`
|
|
72
|
+
and `chromium_sandbox=True` — the last of which also removes Chrome's cosmetic *"You are
|
|
73
|
+
using an unsupported command-line flag"* banner — and signs in on the real OS window
|
|
74
|
+
instead of an emulated 1920×1080 viewport that pushed Google's sign-in form off-screen on
|
|
75
|
+
smaller or scaled displays.
|
|
76
|
+
- **Setting `CHROME_BINARY` no longer makes Playwright's `channel="chrome"` look resolvable
|
|
77
|
+
when it is not.** The availability check treated the variable as proof, passed, and then
|
|
78
|
+
failed at launch with *"Chromium distribution 'chrome' is not found"*. Playwright honours a
|
|
79
|
+
custom binary only via `executable_path=`, never via `channel=`, so the variable is now
|
|
80
|
+
ignored by that check (it still resolves a Chrome binary everywhere else).
|
|
81
|
+
|
|
82
|
+
### Security
|
|
83
|
+
|
|
84
|
+
- **`httpx2` / `httpcore2` bumped to 2.12.0, clearing five newly published CVEs**
|
|
85
|
+
([#766](https://github.com/ffroliva/gflow-cli/pull/766)). `httpcore2` CVE-2026-84381 and
|
|
86
|
+
`httpx2` CVE-2026-84378 / -84379 / -84380 / -84382, all against 2.9.1; both arrive
|
|
87
|
+
transitively through `mcp`. The advisories were published against an unchanged lockfile —
|
|
88
|
+
`Dependency audit (pip-audit)` went red on `develop` without any dependency change — so
|
|
89
|
+
this is not a regression introduced by a feature PR. `uvx pip-audit` on the exported
|
|
90
|
+
requirements now reports no known vulnerabilities. The bump also adds `httpx2-jsfetch`
|
|
91
|
+
1.0 to the lock, marked `sys_platform == 'emscripten'` (Pyodide/WASM only); it is never
|
|
92
|
+
installed on any platform gflow supports.
|
|
93
|
+
|
|
10
94
|
## [0.71.1] — 2026-09-08
|
|
11
95
|
|
|
12
96
|
### Fixed
|
|
@@ -4580,7 +4664,8 @@ shell-script template that branches on these codes.
|
|
|
4580
4664
|
|
|
4581
4665
|
First skeleton. Not functional end-to-end yet.
|
|
4582
4666
|
|
|
4583
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
4667
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.72.0...HEAD
|
|
4668
|
+
[0.72.0]: https://github.com/ffroliva/gflow-cli/compare/v0.71.1...v0.72.0
|
|
4584
4669
|
[0.71.1]: https://github.com/ffroliva/gflow-cli/compare/v0.71.0...v0.71.1
|
|
4585
4670
|
[0.71.0]: https://github.com/ffroliva/gflow-cli/compare/v0.70.0...v0.71.0
|
|
4586
4671
|
[0.70.0]: https://github.com/ffroliva/gflow-cli/compare/v0.69.0...v0.70.0
|
|
@@ -14,13 +14,13 @@ Living list of behaviour that's broken, surprising, or limited by design — alo
|
|
|
14
14
|
|
|
15
15
|
## Open
|
|
16
16
|
|
|
17
|
-
### Flow is migrating to `flow.google.com`;
|
|
17
|
+
### Flow is migrating to `flow.google.com`; generation coverage is partial but includes images
|
|
18
18
|
|
|
19
|
-
- **Status:** Open (partially resolved) · **Severity:** High for
|
|
19
|
+
- **Status:** Open (partially resolved) · **Severity:** High for unported forms · **Affected:** on accounts the rollout has reached, `gflow video t2v`, local-file `video i2v` / `r2v`, `gflow image t2i`, and local-file `gflow image i2i` now run on the migrated host. Image mode supports Nano Banana 2 / Pro, the four aspect ratios its radiogroup was enumerated with (16:9, 4:3, 1:1, 9:16), and count 1–4; `3:4` had no radio in that enumeration and is refused before submit rather than reported as selector drift. Image refs by UUID, `@Name` / `--reference-entity`, Agent instructions, Imagen 4, video end frames, video refs by UUID/name, scenes, extend, instructions and tools are not ported yet and fail before submit. **`character` is NOT in that list any more** — `character create` and `character list` work on the migrated host. Of the remainder, only the i2v-by-UUID case rests on a positive observation of absence (the Frames picker tiles carry no media id); `scenes`, `extend`, `instructions` and `tools` remain *unported by gflow*, never proven impossible on the host.
|
|
20
20
|
- **Tracked:** [#639](https://github.com/ffroliva/gflow-cli/issues/639) · Reported 2026-09-02 against 0.59.0, 0.62.1, 0.63.0 and 0.65.0
|
|
21
21
|
- **Confirmed live 2026-09-03 on a second, independent account** (`ffroliva`) — see [LIVE_VERIFICATION_v0.66.0](docs/LIVE_VERIFICATION_v0.66.0.md). A read-only probe of the migrated origin measured `i_total: 0`, reproducing the reporter's central measurement.
|
|
22
22
|
- **`--reference-entity` was refused on `r2v` but not on `t2v`** ([#716](https://github.com/ffroliva/gflow-cli/issues/716), fixed in v0.71.0): the "not ported, exit 36" refusal above sat inside the r2v branch of the routing gate, so a `t2v` request carrying a character entity returned from that gate without its entities ever being inspected — and nothing downstream attaches one on this host. The generation was **submitted and billed** with the entity silently dropped, returning a plausible clip of the wrong person. The check is now mode-independent and ahead of every early return. If you ran `gflow video t2v @Name …` or `--reference-entity` on a moved account before this fix, the identity in those clips was never bound.
|
|
23
|
-
- **The migrated composer
|
|
23
|
+
- **The migrated composer image path is now driven** ([#692](https://github.com/ffroliva/gflow-cli/issues/692)): the first probe established a hit-testable Image mode; the 2026-09-08 follow-up captured real T2I and local-file I2I submissions on `ogiZ0b`, including page-owned reCAPTCHA, upload ids, response records and signed JPEG downloads. See [the submit-wire spike](docs/superpowers/spikes/2026-09-08-migrated-image-submit-wire.md).
|
|
24
24
|
- **Image commands on a moved account** ([#673](https://github.com/ffroliva/gflow-cli/issues/673), fixed in v0.69.0): through v0.68.0 `image t2i` / `i2i` (and `upscale`, `extend`) died with exit 1 `RecaptchaError` within seconds, before any submit, instead of the exit 36 above, because the labs client minted the reCAPTCHA token on the `flow.google.com` project grid before any migration guard ran. The guard now runs at the mint. If you still see a `RecaptchaError` on a moved account right after `auth login`, that is the labs logged-out landing page from the [#644](https://github.com/ffroliva/gflow-cli/issues/644) cookie harvest, not this.
|
|
25
25
|
|
|
26
26
|
Google is moving Flow off Labs onto its own origin. On a migrated page load,
|
|
@@ -48,7 +48,7 @@ This is **not** selector rot, not [#493](https://github.com/ffroliva/gflow-cli/i
|
|
|
48
48
|
and not the agentic cohort — the agentic indicators are absent too. It is a
|
|
49
49
|
different origin serving different markup.
|
|
50
50
|
|
|
51
|
-
**What works now —
|
|
51
|
+
**What works now — generation on the migrated host.** `gflow video t2v … --project <id>`
|
|
52
52
|
drives the migrated editor directly (settings through its option groups, prompt,
|
|
53
53
|
submit, then it observes the app's own `batchexecute` status replies and downloads
|
|
54
54
|
the clip). Two real clips were generated this way on 2026-09-05 — spike
|
|
@@ -56,10 +56,11 @@ the clip). Two real clips were generated this way on 2026-09-05 — spike
|
|
|
56
56
|
(`GFLOW_CLI_FLOW_HOST=auto`): flow.google.com is the **default** host for that
|
|
57
57
|
command on every account — moved or not; `flow.google.com` forces it for
|
|
58
58
|
everything, and `labs.google` switches the migrated composer off. Limits today: `--project` is required (project creation from the
|
|
59
|
-
migrated editor is not ported), and
|
|
59
|
+
migrated editor is not ported), and `t2v`, `i2v` from a local `--initial-frame` (no end frame,
|
|
60
60
|
no UUID/`@Name` frame — the migrated Frames picker exposes no media id in its DOM, so a frame is
|
|
61
61
|
found by file name after gflow uploads it through the editor), and `r2v` from local `--ref` files
|
|
62
|
-
(see the next paragraph)
|
|
62
|
+
(see the next paragraph), plus `image t2i` and local-file `image i2i` — unsupported
|
|
63
|
+
forms still exit 36.
|
|
63
64
|
|
|
64
65
|
**`r2v` from local `--ref` files also runs there (2026-09-06).** Each file is uploaded
|
|
65
66
|
through the same editor toolbar path i2v uses — so the app's own `maseQ` reply names the
|
|
@@ -73,6 +74,12 @@ References by `@Name` and character entities stay on labs, for the same reason a
|
|
|
73
74
|
UUID does: the picker exposes no media id to anchor on. Capture:
|
|
74
75
|
[2026-09-05-migrated-r2v-attach-surface](docs/superpowers/spikes/2026-09-05-migrated-r2v-attach-surface.md).
|
|
75
76
|
|
|
77
|
+
**Images also run there (2026-09-08).** The driver selects Image mode, Nano Banana 2
|
|
78
|
+
or Pro, any supported aspect and count 1–4, then observes the page's own synchronous
|
|
79
|
+
`ogiZ0b` reply. Local I2I files use the existing `maseQ` upload and mention path; every
|
|
80
|
+
uploaded id must appear in the submit body before the result is trusted. UUID/entity
|
|
81
|
+
references, Agent instructions, and Imagen 4 remain pre-submit refusals on this host.
|
|
82
|
+
|
|
76
83
|
**Models on the migrated host.** Its picker is driven for every tier the account's
|
|
77
84
|
menu actually renders, `veo-lite-lp` included — matched by the `[Lower Priority]`
|
|
78
85
|
tag alone, exactly as on labs.google. That entry was first captured on 2026-09-05
|
|
@@ -100,8 +107,9 @@ which Playwright updates in the same tick as the hand-off navigation — and fai
|
|
|
100
107
|
with the distinct, non-retryable exit 36 instead of the misleading
|
|
101
108
|
`UiSelectorDriftError` (exit 23, "file a selector bug"). `_check_logged_in` also
|
|
102
109
|
accepts the migrated host, so a migrated load is no longer misread as a
|
|
103
|
-
logged-out session.
|
|
104
|
-
scenes, extend, instructions, tools
|
|
110
|
+
logged-out session. The generation forms listed above and characters are driven;
|
|
111
|
+
scenes, extend, instructions, tools, project creation, and the named reference/model
|
|
112
|
+
variants are the remaining work
|
|
105
113
|
tracked here — no retry helps for those until each is ported.
|
|
106
114
|
|
|
107
115
|
> **v0.66.1's fast-fail did not fire in the field, and v0.66.2 is the correction.**
|
|
@@ -1515,9 +1523,10 @@ End-to-end live-verified on the `ffroliva` profile across `9:16`, `16:9`, `1:1`,
|
|
|
1515
1523
|
|
|
1516
1524
|
### G12 "browser not secure" block — Google rejects automated sign-in
|
|
1517
1525
|
|
|
1518
|
-
- **Status:** Resolved · **Severity:** Critical (blocked `gflow auth login`) · **Fixed in:** v0.6.0a2
|
|
1526
|
+
- **Status:** Resolved · **Severity:** Critical (blocked `gflow auth login`) · **Fixed in:** v0.6.0a2 · **Mitigation reimplemented + re-measured:** 2026-09-08
|
|
1519
1527
|
|
|
1520
|
-
Google's sign-in flow (`accounts.google.com/v3/signin/rejected`)
|
|
1528
|
+
Google's sign-in flow (`accounts.google.com/v3/signin/rejected`) rejects a browser that
|
|
1529
|
+
advertises itself as automated, and refuses the login with no user-facing error.
|
|
1521
1530
|
|
|
1522
1531
|
**Root cause (timing race):** Without `--disable-blink-features=AutomationControlled`,
|
|
1523
1532
|
Blink's C++ engine sets `navigator.webdriver = true` as a non-configurable, non-writable
|
|
@@ -1525,20 +1534,52 @@ native property at Chrome startup — before any JavaScript (including `add_init
|
|
|
1525
1534
|
can run. The `Object.defineProperty` override silently fails. With the flag, the property
|
|
1526
1535
|
is never set; the JS override then works as belt-and-suspenders.
|
|
1527
1536
|
|
|
1528
|
-
**Resolution:** `
|
|
1529
|
-
|
|
1537
|
+
**Resolution:** `gflow auth login` launches the system's real Google Chrome through
|
|
1538
|
+
Playwright's `channel="chrome"` with `chromium_sandbox=True`, `no_viewport=True`, and both
|
|
1539
|
+
stealth flags — `--disable-blink-features=AutomationControlled` and
|
|
1540
|
+
`ignore_default_args=["--enable-automation"]`. Because gflow owns that browser it also
|
|
1541
|
+
detects the completed Flow sign-in and closes the window itself; see
|
|
1542
|
+
[docs/AUTHENTICATION.md](docs/AUTHENTICATION.md). When no Chrome channel resolves, or
|
|
1543
|
+
Google rejects the browser anyway, login falls back automatically to launching Chrome as a
|
|
1544
|
+
plain subprocess and waiting for you to close the window. There is no flag and no choice to
|
|
1545
|
+
make, and closing the window yourself works on either path.
|
|
1546
|
+
|
|
1547
|
+
> **This entry described that Playwright implementation long before it existed.**
|
|
1548
|
+
> It read *"`v0.6.0a2` adds `RealChromeStrategy` — launches the system's real Google Chrome
|
|
1549
|
+
> via Playwright's `channel="chrome"` with stealth flags."* `src/gflow_cli/auth/real_chrome.py`
|
|
1550
|
+
> was created at `eb0de133` (2026-07-19) as a bare `subprocess.Popen` passive capture, and
|
|
1551
|
+
> `git log -S'channel="chrome"' -- src/gflow_cli/auth/` returned **zero** commits until the
|
|
1552
|
+
> auto-close change. The paragraph above is the same shape restated deliberately as current
|
|
1553
|
+
> fact, not the same accident left standing.
|
|
1530
1554
|
|
|
1531
1555
|
```bash
|
|
1532
|
-
#
|
|
1556
|
+
# Ask for real Chrome explicitly:
|
|
1533
1557
|
gflow auth login --browser chrome
|
|
1534
1558
|
|
|
1535
1559
|
# Or rely on auto-detection (default behaviour; picks real Chrome if installed):
|
|
1536
1560
|
gflow auth login
|
|
1537
1561
|
```
|
|
1538
1562
|
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1563
|
+
**The block is current Google behaviour — "Resolved" means the mitigation holds, not that
|
|
1564
|
+
Google stopped.** Re-measured 2026-09-08 across three throwaway *unauthenticated* profiles,
|
|
1565
|
+
each signed into by hand
|
|
1566
|
+
([spike](docs/superpowers/spikes/2026-09-08-g12-blocks-webdriver-not-playwright.md)): a
|
|
1567
|
+
browser advertising `navigator.webdriver === true` — real Chrome, no stealth flags — was
|
|
1568
|
+
rejected at `/v3/signin/rejected` **17.5 s** into the flow, while the same real Chrome
|
|
1569
|
+
*with* the flags reported `false`, never saw the rejection, and reached a Flow session
|
|
1570
|
+
cookie at 59.4 s. Playwright's bundled Chromium with the flags passed too, so the binary is
|
|
1571
|
+
not the discriminator; `navigator.webdriver` tracked the outcome in all three arms.
|
|
1572
|
+
|
|
1573
|
+
> **This is N=1 — do not read it as a capability claim.** One account, one Windows host, one
|
|
1574
|
+
> residential IP, one Chrome build (`Chrome/149.0.0.0`), one day. Google's sign-in risk
|
|
1575
|
+
> scoring varies with account age and IP reputation, so it does not predict CI, a VPS, or a
|
|
1576
|
+
> fresh account. Every arm ran headed, so it says nothing about headless in either
|
|
1577
|
+
> direction. Sign-in is also a different gate from generation's reCAPTCHA Enterprise check;
|
|
1578
|
+
> a result on one does not move the other.
|
|
1579
|
+
|
|
1580
|
+
The Chrome window no longer shows the "You are using an unsupported command-line flag"
|
|
1581
|
+
notice this entry used to warn about: that banner came from the `--no-sandbox` Playwright
|
|
1582
|
+
injects by default, and `chromium_sandbox=True` stops the injection.
|
|
1542
1583
|
|
|
1543
1584
|
---
|
|
1544
1585
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.72.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
|
|
@@ -130,7 +130,7 @@ gflow character create --project <id> --name "Aria" --face-prompt "..." --body-p
|
|
|
130
130
|
|
|
131
131
|
Outputs land under `$GFLOW_CLI_OUTPUT_DIR`, or you can route them to S3, MinIO, or Google Cloud Storage with [`GFLOW_CLI_STORAGE_URI`](docs/EXTERNAL_STORAGE.md). The first call takes 30 to 90 seconds while Chromium warms up; later calls reuse the warm session.
|
|
132
132
|
|
|
133
|
-
> **Why `--browser chrome`?**
|
|
133
|
+
> **Why `--browser chrome`?** It is the only strategy that marks the profile as a real-Chrome profile, which is what later generation runs open it with. The default `auto` picks it whenever Chrome is installed — see [docs/AUTHENTICATION.md](docs/AUTHENTICATION.md).
|
|
134
134
|
|
|
135
135
|
> **Installing from a local checkout?** `uv tool install <path>` **ignores `uv.lock`** and resolves dependencies from the `pyproject.toml` ranges, so it can hand you a Playwright build this project has never tested. Playwright ships the browser driver, and an untested minor can wedge a generation silently. Carry the locked version explicitly:
|
|
136
136
|
>
|
|
@@ -198,7 +198,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
|
|
|
198
198
|
|
|
199
199
|
**Current transport:** `ui_automation` drives Flow through a persistent Playwright Chromium profile. It is production-stable and verified end-to-end every release (see the per-release `LIVE_VERIFICATION_*` evidence files).
|
|
200
200
|
|
|
201
|
-
**Two Flow frontends:** Google is moving accounts from `labs.google` onto `flow.google.com` ([#639](https://github.com/ffroliva/gflow-cli/issues/639)) — same product, different widget toolkit and wire protocol (`batchexecute` instead of `aisandbox-pa`).
|
|
201
|
+
**Two Flow frontends:** Google is moving accounts from `labs.google` onto `flow.google.com` ([#639](https://github.com/ffroliva/gflow-cli/issues/639)) — same product, different widget toolkit and wire protocol (`batchexecute` instead of `aisandbox-pa`). The migrated driver covers text-to-video, image-to-video from a local start frame, reference-to-video from local files, text-to-image, and image-to-image from local files. Image generation supports Nano Banana 2 / Pro, the four aspect ratios measured on that host (16:9, 4:3, 1:1, 9:16), and counts 1–4; an existing project is required at the transport boundary. UUID/entity references, instructions, Imagen 4, and the rest of the matrix keep the labs driver until ported (`GFLOW_CLI_FLOW_HOST`, see [CONFIGURATION](docs/CONFIGURATION.md#gflow_cli_flow_host)).
|
|
202
202
|
|
|
203
203
|
**What's blocked:** a pure HTTP transport for video generation. The video upload endpoint returns HTTP 401 under non-Chrome browsers plus a reCAPTCHA mint we cannot reproduce headlessly. Three earlier HTTP strategies (`evaluate_fetch`, `bearer`, `sapisidhash`) live under `src/gflow_cli/api/transports/experimental/` for research, off the production path.
|
|
204
204
|
|
|
@@ -59,7 +59,7 @@ gflow character create --project <id> --name "Aria" --face-prompt "..." --body-p
|
|
|
59
59
|
|
|
60
60
|
Outputs land under `$GFLOW_CLI_OUTPUT_DIR`, or you can route them to S3, MinIO, or Google Cloud Storage with [`GFLOW_CLI_STORAGE_URI`](docs/EXTERNAL_STORAGE.md). The first call takes 30 to 90 seconds while Chromium warms up; later calls reuse the warm session.
|
|
61
61
|
|
|
62
|
-
> **Why `--browser chrome`?**
|
|
62
|
+
> **Why `--browser chrome`?** It is the only strategy that marks the profile as a real-Chrome profile, which is what later generation runs open it with. The default `auto` picks it whenever Chrome is installed — see [docs/AUTHENTICATION.md](docs/AUTHENTICATION.md).
|
|
63
63
|
|
|
64
64
|
> **Installing from a local checkout?** `uv tool install <path>` **ignores `uv.lock`** and resolves dependencies from the `pyproject.toml` ranges, so it can hand you a Playwright build this project has never tested. Playwright ships the browser driver, and an untested minor can wedge a generation silently. Carry the locked version explicitly:
|
|
65
65
|
>
|
|
@@ -127,7 +127,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
|
|
|
127
127
|
|
|
128
128
|
**Current transport:** `ui_automation` drives Flow through a persistent Playwright Chromium profile. It is production-stable and verified end-to-end every release (see the per-release `LIVE_VERIFICATION_*` evidence files).
|
|
129
129
|
|
|
130
|
-
**Two Flow frontends:** Google is moving accounts from `labs.google` onto `flow.google.com` ([#639](https://github.com/ffroliva/gflow-cli/issues/639)) — same product, different widget toolkit and wire protocol (`batchexecute` instead of `aisandbox-pa`).
|
|
130
|
+
**Two Flow frontends:** Google is moving accounts from `labs.google` onto `flow.google.com` ([#639](https://github.com/ffroliva/gflow-cli/issues/639)) — same product, different widget toolkit and wire protocol (`batchexecute` instead of `aisandbox-pa`). The migrated driver covers text-to-video, image-to-video from a local start frame, reference-to-video from local files, text-to-image, and image-to-image from local files. Image generation supports Nano Banana 2 / Pro, the four aspect ratios measured on that host (16:9, 4:3, 1:1, 9:16), and counts 1–4; an existing project is required at the transport boundary. UUID/entity references, instructions, Imagen 4, and the rest of the matrix keep the labs driver until ported (`GFLOW_CLI_FLOW_HOST`, see [CONFIGURATION](docs/CONFIGURATION.md#gflow_cli_flow_host)).
|
|
131
131
|
|
|
132
132
|
**What's blocked:** a pure HTTP transport for video generation. The video upload endpoint returns HTTP 401 under non-Chrome browsers plus a reCAPTCHA mint we cannot reproduce headlessly. Three earlier HTTP strategies (`evaluate_fetch`, `bearer`, `sapisidhash`) live under `src/gflow_cli/api/transports/experimental/` for research, off the production path.
|
|
133
133
|
|
|
@@ -79,7 +79,7 @@ src/gflow_cli/auth/
|
|
|
79
79
|
└── strategies.py # (internal) shared Playwright helpers
|
|
80
80
|
```
|
|
81
81
|
|
|
82
|
-
**Why:** Google's
|
|
82
|
+
**Why two strategies:** Google's "G12 block" keys on a browser that *advertises* automation (`navigator.webdriver`), not on which binary runs. Both strategies therefore build their launch options from the same `login_launch_kwargs()` helper — `--disable-blink-features=AutomationControlled` plus `ignore_default_args=["--enable-automation"]` — and differ only by `channel="chrome"`. They stay separate classes for what those options do not carry: `name` supplies the `source=` label on the session probe (a caller-supplied `"chrome"`/`"internal"` log value, never read back from a response), only the `chrome` strategy writes the `.gflow_browser_strategy` marker that `channel_for_profile()` reads later, and `factory.py` is a name→type registry that `--browser auto|chrome|internal` routes through.
|
|
83
83
|
|
|
84
84
|
**AuthStrategy Protocol** (`base.py`):
|
|
85
85
|
```python
|
|
@@ -94,10 +94,10 @@ class AuthStrategy(Protocol):
|
|
|
94
94
|
- `mode="internal"` — explicit `InternalChromiumStrategy`.
|
|
95
95
|
|
|
96
96
|
**RealChromeStrategy stealth design** (`real_chrome.py`):
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
97
|
+
- **Default — Playwright-owned Chrome.** Launches the system's real Google Chrome via Playwright's `channel="chrome"` with `chromium_sandbox=True`, `no_viewport=True`, `--disable-blink-features=AutomationControlled`, and `ignore_default_args=["--enable-automation"]`. What Google's G12 block keys on is a browser that *advertises* automation (`navigator.webdriver`), not the Playwright connection itself; with these flags the property is `false` and sign-in proceeds normally. See the G12 entry in [KNOWN_ISSUES.md](../KNOWN_ISSUES.md) for the 2026-09-08 measurement and its N=1 caveat.
|
|
98
|
+
- Because gflow owns that context, it polls the Flow session endpoint from it until the outcome is `AUTHENTICATED` and then **closes the browser itself** — the user is not asked to close anything. A user who closes the window anyway is routed to the same `verify_flow_profile` check, never to an error.
|
|
99
|
+
- **Automatic fallback — Passive Capture.** `login()` falls back on four conditions — a `headless=True` caller (the CLI exposes no such flag; this guards library callers), Playwright cannot resolve a Chrome channel (`browser_manager.is_playwright_chrome_channel_available()`), `launch_persistent_context` raises, or Google rejects the owned browser (`AuthBrowserRejectedError`, swallowed here rather than surfaced as exit 14) — and then silently falls back to the older shape: system Chrome via `subprocess.Popen` with no automation flags and no remote-debugging port, the CLI blocking on `proc.wait()` until the user closes the window. There is **no user-facing flag and no choice to make** — a Chromium-only host is never locked out of onboarding.
|
|
100
|
+
- Verification: both paths end in the same `verify_flow_profile` call after the browser is gone. That probe is **httpx-first** — it reads the profile's cookie store directly via `browser_cookie3` and only falls back to a headless `launch_persistent_context` when cookie decryption fails (DPAPI on Windows, keychain on macOS, libsecret on Linux). The default path additionally polls the same session contract *from the browser it owns*, which is what tells it when to close. Both write the `.gflow_browser_strategy = "chrome"` marker that `channel_for_profile()` later reads.
|
|
101
101
|
- Privacy guard: raises `SecurityError` if the resolved `profile_dir` is outside `GFLOW_CLI_HOME` — protects the user's primary system Chrome profile from being used as a session store.
|
|
102
102
|
|
|
103
103
|
**UiAutomationTransport (UI Mimicry)**:
|
|
@@ -424,7 +424,7 @@ This is the project's defining trade-off and the most valuable place an external
|
|
|
424
424
|
|
|
425
425
|
Google's auth + reCAPTCHA stack on `aisandbox-pa.googleapis.com` rejects:
|
|
426
426
|
|
|
427
|
-
1. **
|
|
427
|
+
1. **Browsers that advertise automation** — `navigator.webdriver = true` is what Google's bot detection flags, not the bundled binary itself; every launch path passes `--disable-blink-features=AutomationControlled` to keep it `false`. A sign-in that still lands on Google's rejection page raises `AuthBrowserRejectedError` (exit code 14) from the `internal` strategy; the `chrome` strategy retries on its no-automation subprocess path instead.
|
|
428
428
|
2. **Headless browsers** — same fingerprinting trips during the OAuth-consent flow.
|
|
429
429
|
3. **Bare HTTP clients** without the cookies + tokens minted by a real Chrome session — most endpoints return HTTP 401 or a reCAPTCHA challenge that can only be solved interactively.
|
|
430
430
|
|
|
@@ -436,7 +436,7 @@ We attempted three pure-HTTP transport strategies before settling on `ui_automat
|
|
|
436
436
|
|
|
437
437
|
All three now live as standalone modules under `src/gflow_cli/api/transports/experimental/` (`evaluate_fetch.py` / `bearer.py` / `sapisidhash.py`), preserved for reference and future iteration. None survives Google's anti-bot stack for mutation/generation endpoints, so the production path is `ui_automation`.
|
|
438
438
|
|
|
439
|
-
**The migrated `flow.google.com` host (#639, v0.67.0).** Google is moving accounts off `labs.google` onto `flow.google.com`, a rewritten frontend with a different widget toolkit and a `batchexecute` wire instead of `aisandbox-pa` REST. `src/gflow_cli/api/transports/migrated_composer.py` drives that editor for text-to-video, image-to-video
|
|
439
|
+
**The migrated `flow.google.com` host (#639, v0.67.0).** Google is moving accounts off `labs.google` onto `flow.google.com`, a rewritten frontend with a different widget toolkit and a `batchexecute` wire instead of `aisandbox-pa` REST. `src/gflow_cli/api/transports/migrated_composer.py` drives that editor for text-to-video, local-file image-to-video/reference-to-video, text-to-image, and local-file image-to-image — still through the same real-Chrome Playwright session — by operating the composer UI and then *observing* the app's own replies. Video uses `YhhmEf`/`eb1hJf`/`MZZa6b` submit plus `jwpduf`/`as29s` status/result; image uses synchronous `ogiZ0b` replies carrying signed JPEG URLs. Local files go through the editor's own `maseQ` upload and the resulting media ids are asserted in the outgoing submit body before the run is trusted (`WireFormatError` otherwise). The migrated page owns image reCAPTCHA minting; the client skips the labs token path so moved accounts no longer fail with `RecaptchaError` on the root grid. `GFLOW_CLI_FLOW_HOST` routes between the two (`auto` keeps migrated images on moved accounts and uses labs for them on unmoved accounts; `--project` is required on the migrated path); unsupported UUID/entity/instruction/Imagen-4 image forms still fail before submit. Recon: `docs/superpowers/spikes/2026-09-08-migrated-image-submit-wire.md`.
|
|
440
440
|
|
|
441
441
|
**Standalone-only transports.** `bearer` and `sapisidhash` discard any caller-supplied Playwright page and launch their own browser under a fresh `ProfileLease`, so they are **standalone-only** — they cannot run inside a `FlowApiClient` that already holds the profile lease (the second acquire would self-lock with `ProfileLockedError`). Selecting either via `GFLOW_CLI_TRANSPORT` (or the Python API) while the client owns the profile now fails fast with a clear `ConfigurationError` naming the transport, rather than the opaque lock error. `evaluate_fetch` is exempt: it reuses the client's shared page and takes no second lease. The standalone-only set lives in `STANDALONE_ONLY_TRANSPORTS` (`api/transports/__init__.py`); to drive `bearer`/`sapisidhash`, run them outside an owning client.
|
|
442
442
|
|
|
@@ -143,7 +143,7 @@ for you to sign in. The CLI automatically detects success and persists the sessi
|
|
|
143
143
|
```bash
|
|
144
144
|
gflow auth login # default profile, auto browser
|
|
145
145
|
gflow auth login --profile work # named profile (creates if missing)
|
|
146
|
-
gflow auth login --browser chrome # force real Chrome
|
|
146
|
+
gflow auth login --browser chrome # force the chrome strategy (real Chrome + its profile marker)
|
|
147
147
|
```
|
|
148
148
|
|
|
149
149
|
Re-running this command refreshes an expired session: it reuses the existing profile dir,
|
|
@@ -179,17 +179,37 @@ and the profile keeps the name `default`.
|
|
|
179
179
|
| Value | Browser used | When to use |
|
|
180
180
|
|---|---|---|
|
|
181
181
|
| `auto` (default) | Real Chrome if installed; falls back to internal | First choice for most users |
|
|
182
|
-
| `chrome` | System Google Chrome (
|
|
182
|
+
| `chrome` | System Google Chrome, driven by Playwright (auto-closes) | Required for a chrome-strategy profile |
|
|
183
183
|
| `internal` | Playwright's bundled Chromium | Fallback when Chrome isn't installed |
|
|
184
184
|
|
|
185
185
|
Override with the env var: `GFLOW_CLI_AUTH_BROWSER=chrome gflow auth login`
|
|
186
186
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
187
|
+
`internal` now launches with the same anti-automation flags as `chrome` (it previously did
|
|
188
|
+
not, which was the configuration Google rejects). It stays a fallback rather than a
|
|
189
|
+
recommendation: a profile created by `internal` carries no `chrome` strategy marker, so
|
|
190
|
+
generation later opens it with bundled Chromium instead of your real Chrome.
|
|
191
|
+
|
|
192
|
+
**Why `chrome` bypasses bot detection:** what Google rejects is a browser that *advertises*
|
|
193
|
+
automation. Blink sets `navigator.webdriver = true` as a non-configurable native property
|
|
194
|
+
unless `--disable-blink-features=AutomationControlled` is passed, and Google redirects that
|
|
195
|
+
browser to `/v3/signin/rejected` (the "G12 block"). The `chrome` strategy launches your real
|
|
196
|
+
system Chrome through Playwright with that flag plus
|
|
197
|
+
`ignore_default_args=["--enable-automation"]`, `chromium_sandbox=True`, and
|
|
198
|
+
`no_viewport=True`, so `navigator.webdriver` is `false` and the sign-in proceeds normally.
|
|
199
|
+
The block itself is still live — re-measured 2026-09-08; see the G12 entry in
|
|
200
|
+
[KNOWN_ISSUES.md](../KNOWN_ISSUES.md) for the numbers and their N=1 caveat.
|
|
201
|
+
|
|
202
|
+
**You don't close the browser — gflow does.** Because gflow owns that Chrome window, it
|
|
203
|
+
watches for the completed Flow sign-in and closes the window itself, then prints the
|
|
204
|
+
verified account. If you close the window yourself it still works: gflow verifies the
|
|
205
|
+
profile exactly the same way and does not treat a manual close as an error.
|
|
206
|
+
|
|
207
|
+
**Automatic fallback, with nothing to choose.** If Playwright can't resolve a Chrome channel
|
|
208
|
+
on this machine (a Chromium-only Linux box, for instance), or Google rejects the browser
|
|
209
|
+
anyway, `gflow auth login` falls back to the earlier **Passive Capture** flow: Chrome
|
|
210
|
+
launched as a plain process with no automation flags and no debugging port, where you close
|
|
211
|
+
the window once the Flow editor has loaded and `gflow` extracts the verified session from the
|
|
212
|
+
profile. There is no flag and no prompt for this — the fallback simply happens.
|
|
193
213
|
|
|
194
214
|
**Privacy guard:** The `chrome` strategy strictly refuses to use any profile directory
|
|
195
215
|
outside `GFLOW_CLI_HOME`. This protects your primary system Chrome profile from
|
|
@@ -207,7 +207,9 @@ With both fixed, the deep-linked editor binds reliably. See
|
|
|
207
207
|
- `gflow character rm <id>` → entity delete (capture verb later).
|
|
208
208
|
- Reuse: **`--character <id>` (repeatable → multi-reference)** on `gflow video` → adds
|
|
209
209
|
`referenceEntities:[{entityId}]` to `video:batchAsyncGenerateVideoReferenceImages` (R2V mode, async + poll).
|
|
210
|
-
Same flag on `gflow image` pending
|
|
210
|
+
Same flag on `gflow image` remains pending on the migrated host: local-file image
|
|
211
|
+
generation is confirmed, but character/entity binding is intentionally refused until
|
|
212
|
+
its migrated picker wire is captured.
|
|
211
213
|
|
|
212
214
|
## Reuse from PR #123 (kittinan)
|
|
213
215
|
|
|
@@ -361,11 +361,11 @@ GFLOW_CLI_HISTORY_PROMPTS=redacted gflow image t2i "confidential brief"
|
|
|
361
361
|
|
|
362
362
|
**What:** Which Flow frontend gflow drives. Google is moving accounts from `labs.google/fx/tools/flow` onto `flow.google.com` one at a time ([#639](https://github.com/ffroliva/gflow-cli/issues/639)); the two are the same product on different widget toolkits and different wire protocols, so each has its own driver.
|
|
363
363
|
**Values:**
|
|
364
|
-
- `auto` (default) — **`flow.google.com` is the default host for every request it can serve today** (`video t2v`, `video i2v`
|
|
364
|
+
- `auto` (default) — **`flow.google.com` is the default host for every video request it can serve today** (`video t2v`, local-file `video i2v` and `video r2v`, all with `--project`) on moved and unmoved accounts. Image requests stay on labs for an unmoved account, while a moved account uses the migrated composer for `image t2i` and local-file `image i2i`. A request the new host cannot serve keeps the labs driver on an unmoved account; a moved account has no labs fallback and unsupported forms exit 36/11 before submit.
|
|
365
365
|
- `flow.google.com` — force the migrated composer for everything, including what it cannot serve yet (those requests then exit 36/11 instead of falling back).
|
|
366
366
|
- `labs.google` — never use the migrated composer; a moved account fails with exit 36 (kill switch).
|
|
367
367
|
**Default:** `auto`
|
|
368
|
-
**Scope today:** the migrated composer covers `gflow video t2v`, `
|
|
368
|
+
**Scope today:** the migrated composer covers `gflow video t2v`, local-file `video i2v` / `r2v`, `gflow image t2i`, and local-file `gflow image i2i`. Images support Nano Banana 2 / Pro, the four aspect ratios enumerated on that host (16:9, 4:3, 1:1, 9:16 — `3:4` was not present and is refused before submit) and count 1–4; the page owns the `ogiZ0b` reCAPTCHA + submit and the response already contains completed signed image URLs. An end frame, UUID/name references, character entities, Agent instructions, Imagen 4, scenes, extend, instructions and tools are not ported yet and fail before submit on a moved account. MCP uses the same image service and queue payload, and inherits this setting from the server/daemon environment rather than per call.
|
|
369
369
|
|
|
370
370
|
### `GFLOW_CLI_PREFER_CLASSIC` *(deprecated — use `GFLOW_CLI_UI_MODE=classic`)*
|
|
371
371
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
| `gflow image t2i` hangs ≥ 3 min then fails with `TimeoutError` | Re-run with `--verbose` and grep for `batch_response_seen` | [Listener log keys](#listener--http-layer-debugging) |
|
|
14
14
|
| `aspect_ratio_set_failed` warning then wrong-aspect output | The aspect-tab selector cascade missed; capture a DOM snapshot of the gen-settings panel | [Inspecting Flow's live UI](#inspecting-flows-live-ui) |
|
|
15
15
|
| `UnicodeEncodeError: 'charmap' codec can't encode` on Windows | Set `PYTHONUTF8=1` (PowerShell: `$env:PYTHONUTF8="1"`) before any `gflow` invocation | [Windows console](#windows-console-encoding) |
|
|
16
|
-
| `AuthBrowserRejectedError` / exit 14 | Re-login
|
|
16
|
+
| `AuthBrowserRejectedError` / exit 14 | Re-run `gflow auth login` (the `chrome` strategy retries automatically) | [`AUTHENTICATION.md`](AUTHENTICATION.md), `/gflow:known-issues` |
|
|
17
17
|
| `BrowserSessionClosedError` / exit 15 in a long-lived worker | Recreate the `FlowApiClient` via its async context manager | [Lifecycle errors](#lifecycle--browser-state) |
|
|
18
18
|
| Test suite OOMs / sandbox crashes | Run dirs separately (`tests/api`, `tests/auth tests/cli`, `tests/features`, then the rest with `--ignore`) | [Test suite memory](#test-suite-memory) |
|
|
19
19
|
| New Flow UI label breaks a selector | Add a candidate to `_ASPECT_TAB_CANDIDATES` (or the relevant cascade) and live-verify | [Selector cascades](#selector-cascades) |
|
|
@@ -224,7 +224,7 @@ First visible-and-clickable wins. Log:
|
|
|
224
224
|
|---|---|---|---|
|
|
225
225
|
| `BrowserSessionClosedError` | 15 | Playwright page/context/browser was closed mid-call (translated from `TargetClosedError`) | Recreate `FlowApiClient` via `async with` |
|
|
226
226
|
| `AuthExpiredError` | 3 | Session cookies no longer valid | `gflow auth login --profile <name>` |
|
|
227
|
-
| `AuthBrowserRejectedError` | 14 | Google rejected
|
|
227
|
+
| `AuthBrowserRejectedError` | 14 | Google's sign-in rejected the browser for advertising automation; only the `internal` strategy surfaces it | Re-run `gflow auth login` (default `auto` picks the `chrome` strategy, which retries on a no-automation path) |
|
|
228
228
|
| `AuthLoginTimeoutError` | 12 | User did not finish the OAuth flow in time | Run `gflow auth login` again; raise `GFLOW_CLI_AUTH_LOGIN_TIMEOUT` |
|
|
229
229
|
| `TransportTimeoutError` | 9 | A single API call exceeded its timeout | Retry; check Flow status |
|
|
230
230
|
| `WafRejectionError` | 10 | reCAPTCHA / WAF blocked the request | Wait + retry; verify session is healthy |
|
|
@@ -317,8 +317,9 @@ remediations. The most-hit categories:
|
|
|
317
317
|
([selector-cascades](#selector-cascades))
|
|
318
318
|
- **Session expiry on a long-running worker** → use `health_check()`
|
|
319
319
|
+ recreate on `BrowserSessionClosedError`
|
|
320
|
-
- **reCAPTCHA score too low** → must use real Chrome
|
|
321
|
-
(`--browser chrome`)
|
|
320
|
+
- **reCAPTCHA score too low** (generation, *not* sign-in) → must use real Chrome
|
|
321
|
+
(`--browser chrome`). Sign-in is a separate question: the 2026-09-08 spike measured
|
|
322
|
+
`navigator.webdriver`, not the binary, as what Google's sign-in rejects.
|
|
322
323
|
|
|
323
324
|
## See also
|
|
324
325
|
|