gflow-cli 0.54.0__tar.gz → 0.56.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.54.0 → gflow_cli-0.56.0}/.codex-plugin/plugin.json +1 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.env.template +10 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/AGENTS.md +4 -4
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/CHANGELOG.md +54 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/CONFIGURATION.md +3 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/DISCLAIMER.md +3 -3
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/KNOWN_ISSUES.md +32 -6
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/PKG-INFO +6 -6
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/README.md +5 -5
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/AUTHENTICATION.md +39 -5
- {gflow_cli-0.54.0/website → gflow_cli-0.56.0}/docs/CONFIGURATION.md +23 -2
- {gflow_cli-0.54.0/website → gflow_cli-0.56.0}/docs/DEBUGGING.md +9 -5
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/INDEX.md +4 -1
- gflow_cli-0.56.0/docs/LIVE_VERIFICATION_v0.55.0.md +86 -0
- gflow_cli-0.56.0/docs/LIVE_VERIFICATION_v0.56.0.md +123 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/MCP.md +14 -2
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/PROJECT_STATUS.md +43 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/SECURITY.md +1 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/USAGE.md +26 -6
- {gflow_cli-0.54.0/website → gflow_cli-0.56.0}/docs/USER_GUIDE.md +12 -13
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/medium_tutorial.md +1 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/llms.txt +2 -2
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/pyproject.toml +1 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/incident_bundle_quality.py +3 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/record_demo.ps1 +5 -6
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/gflow-cli/SKILL.md +7 -7
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/_cli_helpers.py +16 -14
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/client.py +22 -3
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/experimental/bearer.py +31 -25
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +8 -2
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +20 -14
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/ui_automation.py +13 -4
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/ui_automation_video.py +5 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/__init__.py +16 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/verification.py +22 -14
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/browser_manager.py +109 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/cli.py +75 -14
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/config.py +25 -3
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/diagnostics.py +109 -9
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/errors.py +35 -8
- gflow_cli-0.56.0/src/gflow_cli/mcp/setup.py +133 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/mcp/tools.py +96 -48
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/profile_lease.py +121 -33
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/runtime.py +2 -1
- gflow_cli-0.56.0/src/gflow_cli/update_check.py +151 -0
- gflow_cli-0.56.0/src/gflow_cli/winsec.py +120 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_client_incidents.py +2 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_client_launch_kwargs.py +49 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_agentic_cohort_detection.py +9 -2
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/auth/test_verification.py +34 -0
- gflow_cli-0.56.0/tests/auth/test_windows_acl.py +158 -0
- gflow_cli-0.56.0/tests/cli/test_auth_status.py +95 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_incident_output.py +34 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/conftest.py +5 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/auth.feature +9 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_auth_steps.py +24 -0
- gflow_cli-0.56.0/tests/mcp/test_error_funnel.py +81 -0
- gflow_cli-0.56.0/tests/mcp/test_setup.py +206 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_browser_manager.py +185 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_config.py +22 -4
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_diagnostics_recorder.py +33 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_diagnostics_retention.py +14 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_errors.py +13 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_profile_lease.py +169 -0
- gflow_cli-0.56.0/tests/test_update_check.py +266 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/tools/test_runtime.py +25 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/uv.lock +1 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/AUTHENTICATION.md +39 -5
- {gflow_cli-0.54.0 → gflow_cli-0.56.0/website}/docs/CONFIGURATION.md +23 -2
- {gflow_cli-0.54.0 → gflow_cli-0.56.0/website}/docs/DEBUGGING.md +9 -5
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/KNOWN_ISSUES.md +32 -6
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/MCP.md +14 -2
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/SECURITY.md +1 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/USAGE.md +26 -6
- {gflow_cli-0.54.0 → gflow_cli-0.56.0/website}/docs/USER_GUIDE.md +12 -13
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/index.md +2 -2
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/installation.md +1 -1
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/onboarding-mockup.html +2 -2
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/onboarding.md +2 -2
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.agents/plugins/marketplace.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/README.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.gitattributes +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.github/dependabot.yml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.github/workflows/deps-watch.yml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.github/workflows/labels.yml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.gitignore +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/.secrets.baseline +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/CLAUDE.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/LICENSE +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/RELEASE.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/ROADMAP.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/conftest.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docker-compose.yml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/CHARACTER.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/eval/pr_triage_eval.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/eval/pr_triage_fixtures.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/examples/README.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/index.html +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/README.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/autopilot/Dockerfile.triage +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/autopilot/entrypoint.sh +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/autopilot/pr_triage_gate.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/monitor_pr_38.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_character_prompt_format.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/diag/spike_387_openai_compat.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/README.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/live-verify/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/release/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/sonar-project.properties +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/routes.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/_common.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_project.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/cli_video.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/redaction.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/worker/codec.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_client_errors.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_ui_automation.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/auth/test_real_chrome.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_predictable_output.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_project_naming_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/duration_tab_drift.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/entity_provenance.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/image_batch_references.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/mcp_tasks.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/output_hardening.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_mcp_tasks_steps.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_output_hardening_steps.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/integration/test_expander_gateway.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/mcp/test_cli_parity.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/mcp/test_tasks_extension.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/scripts/test_codex_plugin.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_cli_project.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_duration_tab_drift.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_entity_provenance.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_image_batch_references.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_media.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_overlay_banner_dismissal.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_playwright_pin.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_self_documenting_errors.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/CHARACTER.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.54.0 → gflow_cli-0.56.0}/website/mkdocs.yml +0 -0
|
@@ -133,6 +133,16 @@
|
|
|
133
133
|
# changes; don't exceed 8 without measuring. Shipped in v0.4.0a2.
|
|
134
134
|
# GFLOW_CLI_CONCURRENCY=1
|
|
135
135
|
|
|
136
|
+
# Seconds to wait for another gflow process to release the profile lease
|
|
137
|
+
# before giving up with ProfileLockedError (0 = fail fast, the default).
|
|
138
|
+
# Holders always run to completion; the waiter takes over on release (#478).
|
|
139
|
+
# GFLOW_CLI_LEASE_WAIT_SECONDS=0
|
|
140
|
+
|
|
141
|
+
# Once-a-day best-effort PyPI check printing a one-line notice when a newer
|
|
142
|
+
# gflow-cli exists (#479). Never blocks; skipped in CI and for
|
|
143
|
+
# editable/source installs. Set to 0 to disable.
|
|
144
|
+
# GFLOW_CLI_UPDATE_CHECK=1
|
|
145
|
+
|
|
136
146
|
# Run Playwright in headless mode for non-`auth login` commands (true|false).
|
|
137
147
|
# Default: false — headed real Chrome is the PRODUCTION default, not a
|
|
138
148
|
# fallback. The ui_automation transport (the only production transport)
|
|
@@ -8,15 +8,15 @@ Supported tools that auto-discover this file: Cursor, Codex, Aider, Antigravity
|
|
|
8
8
|
|
|
9
9
|
- Unofficial Python CLI for [Google Flow](https://labs.google/fx/tools/flow) — drives Veo (image-to-video, text-to-video) and Imagen (text-to-image) generations from the terminal by reverse-engineering Flow's private REST API at `aisandbox-pa.googleapis.com`.
|
|
10
10
|
- Python 3.11+ · `uv`-managed · `hatchling` builds · Playwright Chromium transport · `pyright` strict · `ruff` · `pytest`.
|
|
11
|
-
- Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `data/`, `mcp/`, `services/`, `tools/`, `ui/`, `worker/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `cli_character.py`, `cli_data.py`, `cli_image.py`, `cli_instructions.py`, `cli_models.py`, `cli_movie.py`, `cli_run.py`, `cli_scene.py`, `cli_tools.py`, `cli_video.py`, `chain.py`, `chain_manifest.py`, `composition.py`, `config.py`, `errors.py`, `exceptions.py`, `image_batch.py`, `movie_manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
|
|
11
|
+
- Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `data/`, `mcp/`, `services/`, `tools/`, `ui/`, `worker/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `diagnostics.py`, `json_output.py`, `media.py`, `profile_lease.py`, `redaction.py`, `storage.py`, `winsec.py`, `cli_project.py`, `cli_character.py`, `cli_data.py`, `cli_image.py`, `cli_instructions.py`, `cli_models.py`, `cli_movie.py`, `cli_run.py`, `cli_scene.py`, `cli_tools.py`, `cli_video.py`, `chain.py`, `chain_manifest.py`, `composition.py`, `config.py`, `errors.py`, `exceptions.py`, `image_batch.py`, `movie_manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
|
|
12
12
|
- Command surface: `gflow auth`, `gflow image` (t2i/i2i/batch/upload/upscale), `gflow video` (t2v/i2v/r2v/chain — no `batch` subcommand; the nonfunctional stub was removed, loop `gflow video t2v`/`i2v` from the shell for multi-clip runs), `gflow character` (create/list/show/rm/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), `gflow instructions` (persistent Agent-Mode brief cards — add/list/enable/disable/rm/apply/toggle-mode, credits-free, `--project` required), `gflow movie` (run/template — multi-scene manifest pipeline), `gflow tools` (list/show/run — prompt-rewriting tools, also `--tool` on generation commands), `gflow data` (catalog queries), `gflow models`, `gflow run`, `gflow mcp` (run/setup — stdio MCP server), and `gflow serve` (Streamable HTTP at `/mcp`; `--transport sse` is deprecated).
|
|
13
|
-
-
|
|
13
|
+
- Works with any Google account that has Flow access. All generations bill against the user's own Google account.
|
|
14
14
|
|
|
15
15
|
## Headed-browser dependency (architectural reality)
|
|
16
16
|
|
|
17
17
|
gflow-cli currently drives Flow via a **real Chrome session managed by Playwright** — `ui_automation` transport. Google's auth + reCAPTCHA stack rejects Playwright's bundled Chromium and most headless approaches. This is the project's defining trade-off:
|
|
18
18
|
|
|
19
|
-
- ✅ Works end-to-end against live
|
|
19
|
+
- ✅ Works end-to-end against live Google accounts.
|
|
20
20
|
- ❌ Requires a saved Chrome profile, a display server for one-time login, and ~150 MB for Chromium.
|
|
21
21
|
- ❌ Cannot run on serverless / headless CI workers without prerecorded profile transplant.
|
|
22
22
|
- ❌ Per-account horizontal concurrency is capped by what one warm Page pool can drive.
|
|
@@ -58,7 +58,7 @@ Or invoke the wrapper: `/gflow:check`.
|
|
|
58
58
|
|
|
59
59
|
- Type hints everywhere; `pyright` strict on `src/gflow_cli`.
|
|
60
60
|
- Structured logging only (`structlog`) — **never** raw `print()` or `import logging` in `src/`.
|
|
61
|
-
- Errors as RFC 9457 Problem Details with stable per-class exit codes (3–
|
|
61
|
+
- Errors as RFC 9457 Problem Details with stable per-class exit codes (3–31, e.g. 11 is `ConfigurationError` — including `ProfileLockedError` for same-profile lease contention, 16 is the `DataStoreError` family, 19 `SceneConcatError`, 20 `FrameExtractionError`, 21 `ChainPartialError`, 22 `UpscaleUnavailableError`, 25 `FlowAgentUiError`, 28 `UiModeUnavailableError`, 29 `MentionIndexUnavailableError`, 30 `QueueSchemaError`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping.
|
|
62
62
|
- 100-char line length, `ruff` configured. Imports sorted by `ruff` (isort rules).
|
|
63
63
|
- **YAGNI / least-code**: prefer the smallest change that works. No speculative abstractions (interface/factory with one implementation), no config or flags nobody sets, no dead constants/helpers, no reinventing the stdlib. Review carries this as its own lens — the **D14 over-engineering** dimension of [`pr-council-review`](skills/pr-council-review/SKILL.md) (baseline, always runs). Its rubric is portable; the `ponytail` plugin (see CONTRIBUTING) is an optional accelerant, not a dependency.
|
|
64
64
|
- **MCP & CLI Schema Symmetry**: Any updates or additions to user-facing CLI command parameters (e.g., `gflow image t2i`, `gflow video`) must be mirrored in the corresponding MCP tool definitions. Never add option/argument fields to Click commands without updating the MCP server implementation. This symmetry is enforced programmatically in CI via `tests/mcp/test_cli_parity.py` (every CLI leaf command needs a mapped MCP tool or an explicit, reasoned exemption) plus the schema checks in `tests/mcp/test_server.py`.
|
|
@@ -7,6 +7,57 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.56.0] — 2026-08-13
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Once-a-day PyPI update notice (#479).** gflow now prints a one-line stderr notice when a newer version is on PyPI: cache-served (zero added latency — a stale cache refreshes on a background daemon thread for the next run), capped at one poll per day even when the poll fails, and never blocks or fails a command. Skipped in CI (`CI` env var), for editable/local-source installs (PEP 610 detection), and when `GFLOW_CLI_UPDATE_CHECK=0`.
|
|
15
|
+
|
|
16
|
+
- **Opt-in bounded wait for profile-lease contention (#478).** `GFLOW_CLI_LEASE_WAIT_SECONDS=N` makes a command that hits same-profile contention poll the kernel lock (0.5 s cadence, sync and async call sites alike) and take over as soon as the current holder — a CLI command or a `gflow serve` daemon queue task, both of which release at their natural end — finishes; on timeout it raises the same `ProfileLockedError` (exit 11). Default `0` keeps the historical fail-fast. Triage note: the issue's fuller cooperative-handoff protocol (release-request channel, minimum-hold window) was validated against the actual architecture and dropped — the daemon acquires the lease per task, so every holder's safe release point already coincides with lease release; holders are never asked to release early, which satisfies the no-release-mid-call requirement by construction. Same-process contention always fails fast (waiting on yourself deadlocks).
|
|
17
|
+
|
|
18
|
+
- **Chromium downgrade guard for persisted profiles (#477).** Opening a profile with an older Chromium major version than last wrote it triggers Chromium's downgrade cleanup, which can shred the newer session store and surface as a mystery post-upgrade logout. Every bundled-Chromium open of a persisted profile (generation client, UI-automation transport, the experimental transports, headless verification probe) now compares the profile's `Last Version` against the active engine's bundled Chromium (`playwright`, or `patchright` when selected) and refuses on a major-version downgrade (`ProfileEngineDowngradeError`, exit 11; the fail-closed verification probe reports it as a verification failure) with an error naming both versions and the remedy. Best-effort: `chrome`-strategy profiles and unknown/unparseable versions skip the check; same-major build rollbacks are allowed; `gflow auth login` stays unguarded as the recovery path.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- **Mode-switch drift errors now name the right evidence (#493).** An external
|
|
23
|
+
report showed a third, unrecognized Flow editor layout (composer frame slots +
|
|
24
|
+
Agent toggle, no classic `crop_*` settings button) falling through to
|
|
25
|
+
`UiSelectorDriftError` (exit 23). The fall-through detail now states that no
|
|
26
|
+
known Flow cohort matched — i.e. the editor may be a new layout this version
|
|
27
|
+
does not recognize — and the class remediation no longer asks for a "debug
|
|
28
|
+
screenshot from this message" that the mode-switch probe never writes: it
|
|
29
|
+
points at the artifacts that actually exist (the PII-safe
|
|
30
|
+
`diag_mode_switch_miss.json` DOM signature and/or the referenced screenshot,
|
|
31
|
+
plus the incident bundle's `report.md`). Recognizing the new variant itself is
|
|
32
|
+
tracked in #493 and needs an affected account's diagnostics JSON. A post-merge
|
|
33
|
+
`/code-review` pass extended the same correction to the neighboring surfaces it
|
|
34
|
+
had missed: `FlowAgentUiError`'s privacy caveat now also covers the standalone
|
|
35
|
+
`debug_forced_agent_ui.png` its raise site writes, and the KNOWN_ISSUES
|
|
36
|
+
fallback points at the incident bundle's `ui.json` (which carries the DOM
|
|
37
|
+
signature) instead of `report.md` (which does not).
|
|
38
|
+
|
|
39
|
+
## [0.55.0] — 2026-08-13
|
|
40
|
+
|
|
41
|
+
### Added
|
|
42
|
+
|
|
43
|
+
- **`gflow mcp setup` is implemented (#475).** The long-stubbed command now writes the gflow MCP server entry into the target client's config: `--target claude-desktop` (default), `cursor`, or `vscode` (VS Code's `servers` + `"type": "stdio"` schema). Non-destructive by construction: existing config content is merged, a pre-existing file is backed up as `<name>.gflow-backup`, a manual `gflow-cli` entry is converged in place instead of duplicated, and a corrupt config fails loud (exit 11) without ever being touched. Also fixed the bogus `%APPDATA%\Castano\Claude` path in docs/MCP.md.
|
|
44
|
+
- **Incident bundles now include a pre-filled bug-report template (#476).** On every captured incident, the recorder stages `report.md` alongside the existing artifacts: version/platform, error class + exit code + retryability, phase/route, and pointers to the captured evidence — built exclusively from the allowlisted manifest fields (never raw exception text). The CLI error message now prints the report path next to the bundle path, and retention treats `report.md` as recorder-owned. Downgrade caveat: gflow <= 0.54.x does not recognize `report.md`, so its retention classifies new bundles as unknown and stops pruning them — delete `<GFLOW_CLI_HOME>/incidents` manually if you downgrade. The report is meant to be copied out of the bundle before editing (the template says so), and the e2e privacy scanner now leak-scans `*.md` alongside the JSON artifacts.
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
|
|
48
|
+
- **`gflow auth status` now proves the Flow session and exits 0/1 (#471).** The command previously only checked that the profile directory and cookies file exist — it could report OK on a dead session. It now runs the fast `verify_flow_profile` probe (cookie snapshot + Flow session endpoint; no browser, no credits) and exits 0 only on a verified session, printing the verified account email; any other outcome exits 1 with a `gflow auth login` remediation hint. Fail-closed: an unreachable endpoint is a failure, never an OK.
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
|
|
52
|
+
- **Removed the false "requires a Google AI Ultra or Pro subscription" claim across all docs.** Any Google account with Flow access can use gflow-cli — a paid plan only affects credit allowances and tier-gated features (e.g. 4K upscale stays Ultra-only). Swept README, AGENTS.md, DISCLAIMER.md, USER_GUIDE, CONFIGURATION, AUTHENTICATION, DEBUGGING, the medium tutorial, and the gflow-cli skill; factual tier-gating notes are unchanged.
|
|
53
|
+
|
|
54
|
+
### Security
|
|
55
|
+
|
|
56
|
+
- **MCP tools no longer leak raw exception text to clients (#473).** Every registered MCP tool now routes through one error funnel: `GFlowError`s keep their structured RFC-9457 problem-details envelope (with the shared `retryable` flag), while unexpected exceptions return a masked envelope carrying only the exception class name — messages can embed filesystem paths, profile names, or token material, so the full text goes exclusively to the server-side structured log (`mcp.tool.unexpected_error`). Previously only 3 of 11 tools had any funnel, and those leaked `str(exc)` as the `detail` field; the rest leaked through the framework's default error path. Guarded by a registry-introspection test that fails if any future tool bypasses the funnel.
|
|
57
|
+
|
|
58
|
+
- **Windows profile dirs are now really restricted to the current user (#472).** POSIX `chmod 0700`/`0600` is a no-op on Windows, so a profile created under a custom `GFLOW_CLI_HOME` on a shared/world-readable volume inherited that visibility — with the live Google session cookies inside. `gflow auth login` now applies an explicit `icacls` DACL before the browser runs: inheritance stripped, a single owner-only ACE (by SID, locale-safe), children reset to inherit it. Two-step sequence verified empirically (the naive `/t` grant leaves files without effective access). Existing profiles created before this release are swept on their next use: the client's browser-launch path runs a marker-gated hardening pass once per profile. Traversal profile names are rejected before any directory is created or re-ACLed. Best-effort — an ACL failure is logged (with icacls exit code and stderr) and never blocks login; no-op off Windows.
|
|
59
|
+
- **Secret settings can no longer leak through a `Settings` dump (#474).** `llm_api_key` (`GFLOW_CLI_LLM_API_KEY`) and `daemon_token` (`GFLOW_CLI_DAEMON_TOKEN`/`GFLOW_DAEMON_TOKEN`) are now stored as Pydantic `SecretStr`, so `repr()`, `str()`, and `model_dump_json()` of the settings object mask them by construction — defense-in-depth on top of the existing logging-boundary redaction. Values are unwrapped only at the single point of use (the prompt-tools LLM client).
|
|
60
|
+
|
|
10
61
|
## [0.54.0] — 2026-08-12
|
|
11
62
|
|
|
12
63
|
### Changed
|
|
@@ -2774,7 +2825,9 @@ shell-script template that branches on these codes.
|
|
|
2774
2825
|
|
|
2775
2826
|
First skeleton. Not functional end-to-end yet.
|
|
2776
2827
|
|
|
2777
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
2828
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.56.0...HEAD
|
|
2829
|
+
[0.56.0]: https://github.com/ffroliva/gflow-cli/compare/v0.55.0...v0.56.0
|
|
2830
|
+
[0.55.0]: https://github.com/ffroliva/gflow-cli/compare/v0.54.0...v0.55.0
|
|
2778
2831
|
[0.54.0]: https://github.com/ffroliva/gflow-cli/compare/v0.53.1...v0.54.0
|
|
2779
2832
|
[0.53.1]: https://github.com/ffroliva/gflow-cli/compare/v0.53.0...v0.53.1
|
|
2780
2833
|
[0.53.0]: https://github.com/ffroliva/gflow-cli/compare/v0.52.0...v0.53.0
|
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
| `GFLOW_CLI_HOME` | Platform data dir | Root directory for profiles and config. |
|
|
8
8
|
| `GFLOW_CLI_OUTPUT_DIR` | `~/Downloads/gflow-cli` | Where generated images and videos are saved. |
|
|
9
9
|
| `CHROME_BINARY` | (autodetect) | Override Chrome binary path. Falls back to platform-standard locations. |
|
|
10
|
-
| `GFLOW_CLI_CONCURRENCY` | `
|
|
10
|
+
| `GFLOW_CLI_CONCURRENCY` | `1` | Page-pool size per batch (raising above 1 currently has no effect — see [docs/CONFIGURATION.md](docs/CONFIGURATION.md)). |
|
|
11
|
+
| `GFLOW_CLI_UPDATE_CHECK` | `1` | Once-a-day stderr notice when a newer gflow-cli is on PyPI; `0` disables (v0.56.0). |
|
|
12
|
+
| `GFLOW_CLI_LEASE_WAIT_SECONDS` | `0` | Bounded wait on same-profile lease contention instead of fail-fast (v0.56.0). |
|
|
11
13
|
| `GFLOW_CLI_LLM_BASE_URL` | Google compat endpoint | OpenAI-compatible endpoint for the prompt tools (`--tool`). The on/off switch. |
|
|
12
14
|
| `GFLOW_CLI_LLM_API_KEY` | _(unset)_ | Credential for that endpoint. Optional — omit for a keyless local gateway. [Google key](https://aistudio.google.com/apikey). |
|
|
13
15
|
| `GFLOW_CLI_LLM_MODEL` | _(unset)_ | Model, and therefore the provider selector. Unset = the gateway chooses. |
|
|
@@ -19,7 +19,7 @@ If you need a stable, supported, contractual API, use the [official Google Gen A
|
|
|
19
19
|
|
|
20
20
|
To use `gflow-cli` you must:
|
|
21
21
|
|
|
22
|
-
1. **Own a valid Google account** with active access to [Google Flow](https://labs.google/fx/tools/flow) —
|
|
22
|
+
1. **Own a valid Google account** with active access to [Google Flow](https://labs.google/fx/tools/flow) — any Google account works; a paid plan ([AI Pro or AI Ultra](https://gemini.google/subscriptions/)) only affects credit allowances and tier-gated features.
|
|
23
23
|
2. **Comply with Google's terms of service** for that account, including:
|
|
24
24
|
- [Google Terms of Service](https://policies.google.com/terms)
|
|
25
25
|
- [Generative AI Additional Terms](https://policies.google.com/terms/generative-ai)
|
|
@@ -36,10 +36,10 @@ The maintainer asks that you do **not** use `gflow-cli` to:
|
|
|
36
36
|
|
|
37
37
|
- Generate content that violates the [Generative AI Prohibited Use Policy](https://policies.google.com/terms/generative-ai/use-policy) (CSAM, harassment, IP infringement, etc.).
|
|
38
38
|
- Circumvent Google's billing, quota, or rate limits via account-rotation farms.
|
|
39
|
-
- Automate Flow access for users who do not have their own
|
|
39
|
+
- Automate Flow access for users who do not have their own Flow access entitlement.
|
|
40
40
|
- Re-sell access to Veo via this tool as a "wrapped" commercial service.
|
|
41
41
|
|
|
42
|
-
These uses can get **your** Google account banned, can put the maintainer in a difficult position with Google, and are antithetical to why this project exists (which is to let legitimate
|
|
42
|
+
These uses can get **your** Google account banned, can put the maintainer in a difficult position with Google, and are antithetical to why this project exists (which is to let legitimate Flow user subscribers use credits they already paid for, more efficiently).
|
|
43
43
|
|
|
44
44
|
## Takedown policy
|
|
45
45
|
|
|
@@ -181,6 +181,32 @@ accepted. Two corrections fixed it (verified end-to-end on macOS Apple Silicon):
|
|
|
181
181
|
|
|
182
182
|
Evidence: [LIVE_VERIFICATION_v0.23.0](docs/LIVE_VERIFICATION_v0.23.0.md).
|
|
183
183
|
|
|
184
|
+
### New Flow editor variant (composer frame slots + Agent toggle) is not recognized
|
|
185
|
+
|
|
186
|
+
- **Status:** **Open** — awaiting a DOM signature from an affected account;
|
|
187
|
+
tracked in [#493](https://github.com/ffroliva/gflow-cli/issues/493)
|
|
188
|
+
- **Severity:** High · **Affects:** `gflow image` / `gflow video` generation on
|
|
189
|
+
accounts that received the new editor, any locale
|
|
190
|
+
|
|
191
|
+
A third Flow editor layout was reported on 2026-08-13 (macOS, v0.55.0; also
|
|
192
|
+
v0.53.1): frame-slot buttons ("Initial"/"Final") sit directly on the composer
|
|
193
|
+
next to an "Agent" pill, and there is **no** classic `crop_*` aspect/settings
|
|
194
|
+
button for gflow to drive. The layout matches **none** of the known cohort
|
|
195
|
+
indicators (agentic chat composer, full-page media library), so the mode-switch
|
|
196
|
+
step falls through to `UiSelectorDriftError` (**exit 23**) instead of the
|
|
197
|
+
retryable exit-25 cohort classification. The selector cascade itself is
|
|
198
|
+
locale-invariant — the reporter's Portuguese UI is unrelated.
|
|
199
|
+
|
|
200
|
+
The error detail now names this hypothesis and the run writes a PII-safe DOM
|
|
201
|
+
signature to `diag_mode_switch_miss.json` when it can be captured (structural
|
|
202
|
+
allowlist: ligature names, tag counts — no cookies, tokens, prompts, or page
|
|
203
|
+
text; if the file is absent, attach the incident bundle instead — its
|
|
204
|
+
`ui.json` carries the same DOM signature). **If you hit this, attach that JSON file to
|
|
205
|
+
[#493](https://github.com/ffroliva/gflow-cli/issues/493)** — recognizing the
|
|
206
|
+
variant (and restoring a clean retryable classification, or full support) needs
|
|
207
|
+
exactly that DOM signature. Re-running later may land the classic editor if
|
|
208
|
+
the rollout is still an A/B arm.
|
|
209
|
+
|
|
184
210
|
### Flow's new full-page media-library UI breaks entity attach (A/B rollout)
|
|
185
211
|
|
|
186
212
|
- **Status:** **Open** — Flow-side staged rollout; tracked in
|
|
@@ -203,10 +229,10 @@ classic `crop_*` aspect/mode control, so `gflow image`/`gflow video` can't drive
|
|
|
203
229
|
generation. Rather than the old opaque `UiSelectorDriftError` "file a bug", the
|
|
204
230
|
mode-switch raise site now runs a runtime DOM scan and raises a clear, **retryable**
|
|
205
231
|
`FlowAgentUiError` (**exit 25**, "this cohort flaps; retry shortly"), and dumps a
|
|
206
|
-
DOM-signature diagnostics artifact (`diag_mode_switch_miss.json
|
|
207
|
-
screenshot) for reporting. The cohort is
|
|
208
|
-
within ~12h, so a re-run often lands
|
|
209
|
-
is still out of scope.
|
|
232
|
+
DOM-signature diagnostics artifact (`diag_mode_switch_miss.json`; the incident
|
|
233
|
+
bundle carries a screenshot under `sensitive/`) for reporting. The cohort is
|
|
234
|
+
server-assigned per page load and flaps within ~12h, so a re-run often lands
|
|
235
|
+
the classic UI. Driving the new UI directly is still out of scope.
|
|
210
236
|
|
|
211
237
|
**How to tell which UI your account has:** in the Flow web editor, click
|
|
212
238
|
**Add Media** — a small dialog means the old (working) UI; a navigation to a
|
|
@@ -846,7 +872,7 @@ key — surfaces as a `RuntimeError` that `auth/cookies.py` normalizes to
|
|
|
846
872
|
|
|
847
873
|
- **Status:** Mitigated (crash → typed fail-fast rejection) · **Severity:** Low · **Affects:** all versions
|
|
848
874
|
|
|
849
|
-
Chromium refuses to open two persistent contexts on the same `user-data-dir` simultaneously. Historically this surfaced as an unhelpful Chromium "ProcessSingleton: profile is locked" error partway through a run. As of the profile-lease hardening (production-readiness plan, slice D1/D3), gflow-cli enforces this itself: a cross-process advisory lock (`ProfileLease`, kernel `flock` on POSIX / `msvcrt.locking` on Windows) guards every profile directory. A second `gflow` invocation, `gflow serve` daemon task, or MCP call against an already-leased profile is rejected **immediately** — before any Chrome process starts — with a typed `ProfileLockedError` (**exit code 11**); it never
|
|
875
|
+
Chromium refuses to open two persistent contexts on the same `user-data-dir` simultaneously. Historically this surfaced as an unhelpful Chromium "ProcessSingleton: profile is locked" error partway through a run. As of the profile-lease hardening (production-readiness plan, slice D1/D3), gflow-cli enforces this itself: a cross-process advisory lock (`ProfileLease`, kernel `flock` on POSIX / `msvcrt.locking` on Windows) guards every profile directory. A second `gflow` invocation, `gflow serve` daemon task, or MCP call against an already-leased profile is rejected **immediately** by default — before any Chrome process starts — with a typed `ProfileLockedError` (**exit code 11**); it never silently corrupts the profile. Since #478, setting [`GFLOW_CLI_LEASE_WAIT_SECONDS`](docs/CONFIGURATION.md#gflow_cli_lease_wait_seconds) opts a waiter into a bounded wait that takes over as soon as the current holder finishes (holders always run to completion and are never asked to release early; same-process contention still fails fast — waiting on yourself would deadlock).
|
|
850
876
|
|
|
851
877
|
**Workaround:** use different profiles for parallel work — different profiles acquire independent leases and run fully concurrently.
|
|
852
878
|
|
|
@@ -858,7 +884,7 @@ gflow image batch ./batch-a.tsv --profile work
|
|
|
858
884
|
gflow image batch ./batch-b.tsv --profile personal
|
|
859
885
|
```
|
|
860
886
|
|
|
861
|
-
**Roadmap:** Phase 4 (v0.4.0a2) added a per-worker Page pool on one shared BrowserContext (`GFLOW_CLI_CONCURRENCY=N`), intended to let one `gflow-cli` process fan out multiple in-flight generations, but no current CLI command drives more than one generation at a time through it — the only feature that did (a manifest-driven video batch runner) never worked and was removed. Cross-process same-profile serialization remains a hard constraint (Chromium can only own one persistent context per `user-data-dir`) — but it is now a clean, typed, fail-fast rejection instead of an unstructured crash. Multiple shells against the same profile
|
|
887
|
+
**Roadmap:** Phase 4 (v0.4.0a2) added a per-worker Page pool on one shared BrowserContext (`GFLOW_CLI_CONCURRENCY=N`), intended to let one `gflow-cli` process fan out multiple in-flight generations, but no current CLI command drives more than one generation at a time through it — the only feature that did (a manifest-driven video batch runner) never worked and was removed. Cross-process same-profile serialization remains a hard constraint (Chromium can only own one persistent context per `user-data-dir`) — but it is now a clean, typed, fail-fast rejection instead of an unstructured crash. Multiple shells against the same profile can either use different profiles (fully parallel) or opt into the bounded wait via `GFLOW_CLI_LEASE_WAIT_SECONDS` (serialized, waiter takes over when the holder finishes).
|
|
862
888
|
|
|
863
889
|
---
|
|
864
890
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.56.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
|
|
@@ -84,7 +84,7 @@ Description-Content-Type: text/markdown
|
|
|
84
84
|
[](CONTRIBUTING.md)
|
|
85
85
|
[](https://sonarcloud.io/summary/new_code?id=ffroliva_gflow-cli)
|
|
86
86
|
|
|
87
|
-
> ⚠️ **Read this before you install.** gflow-cli is **unofficial, alpha, and reverse-engineered — not affiliated with Google**. It drives a headed browser on *your own* Google Flow session, so treat it as your own account risk: automation is subject to Google's ToS, and endpoints or UI can change without notice. It
|
|
87
|
+
> ⚠️ **Read this before you install.** gflow-cli is **unofficial, alpha, and reverse-engineered — not affiliated with Google**. It drives a headed browser on *your own* Google Flow session, so treat it as your own account risk: automation is subject to Google's ToS, and endpoints or UI can change without notice. It works with **any Google account** that has Flow access, and every generation bills against your account's Flow credit allowance. Read the full [DISCLAIMER](DISCLAIMER.md).
|
|
88
88
|
>
|
|
89
89
|
> 💳 **What failure costs you.** Credits are only spent on Veo *video* generation — images and composition ops are free, so most breakage costs nothing. When Flow's UI drifts mid-run, the CLI fails fast and loudly with distinct exit codes (e.g. selector drift = exit 23) instead of resubmitting, and batch items are recorded locally *before* submission so a broken run never silently burns credits on a stale state. See [KNOWN_ISSUES](KNOWN_ISSUES.md) for the current risk list.
|
|
90
90
|
>
|
|
@@ -92,7 +92,7 @@ Description-Content-Type: text/markdown
|
|
|
92
92
|
|
|
93
93
|
## Why gflow-cli?
|
|
94
94
|
|
|
95
|
-
You
|
|
95
|
+
You have a Google account with Flow access, you have Veo credits, and you run real batch work. gflow-cli gives you:
|
|
96
96
|
|
|
97
97
|
- **Batch generation.** Loop prompts straight from the shell: `for p in $(cat prompts.txt); do gflow image t2i "$p"; done`. Image batching plus `gflow video t2v` / `i2v` / `r2v` all ship today.
|
|
98
98
|
- **Consistent subjects.** `gflow character create` mints a Flow Character (face and body reference) so the same person appears from one generation to the next.
|
|
@@ -100,7 +100,7 @@ You pay for Google AI Ultra or Pro, you have Veo credits, and you run real batch
|
|
|
100
100
|
- **Pipelines.** Wire Veo into your content automation, AI-video stack, or batch experiments.
|
|
101
101
|
- **Terminal-native.** After one `gflow auth login`, you stay in the shell. No clicking through dialogs.
|
|
102
102
|
|
|
103
|
-
Same Veo and Imagen models, same quality, same
|
|
103
|
+
Same Veo and Imagen models, same quality, same billing against your own Google account, now programmatic.
|
|
104
104
|
|
|
105
105
|
## 60-second quick start
|
|
106
106
|
|
|
@@ -144,7 +144,7 @@ One command in, real Flow output back. Left: `gflow image t2i` generating a phot
|
|
|
144
144
|
|
|
145
145
|

|
|
146
146
|
|
|
147
|
-
A single `gflow image t2i "..." --aspect 9:16 --model nano2` call against a logged-in
|
|
147
|
+
A single `gflow image t2i "..." --aspect 9:16 --model nano2` call against a logged-in Flow profile. The terminal streams the run's `structlog` JSON, then lists the written PNG. Chromium drives the Flow editor silently in the background.
|
|
148
148
|
|
|
149
149
|
Reproduce the recording with [`scripts/record_demo.ps1`](scripts/record_demo.ps1) (Windows, OBS, ffmpeg, gifski). More formats, including the side-by-side split-screen: **[docs/DEMOS.md](docs/DEMOS.md)**.
|
|
150
150
|
|
|
@@ -202,7 +202,7 @@ Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project
|
|
|
202
202
|
|
|
203
203
|
## License & legal
|
|
204
204
|
|
|
205
|
-
[MIT License](LICENSE) © 2026 Flavio Oliva (`ffroliva`). The MIT license covers `gflow-cli`'s code only. It grants no rights to Flow, Veo model output, or any Google service. Google's own terms (Labs Additional Terms
|
|
205
|
+
[MIT License](LICENSE) © 2026 Flavio Oliva (`ffroliva`). The MIT license covers `gflow-cli`'s code only. It grants no rights to Flow, Veo model output, or any Google service. Google's own terms (Labs Additional Terms and any plan-specific subscription terms) govern your generations. See the [DISCLAIMER](DISCLAIMER.md).
|
|
206
206
|
|
|
207
207
|
## Acknowledgements
|
|
208
208
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
[](CONTRIBUTING.md)
|
|
14
14
|
[](https://sonarcloud.io/summary/new_code?id=ffroliva_gflow-cli)
|
|
15
15
|
|
|
16
|
-
> ⚠️ **Read this before you install.** gflow-cli is **unofficial, alpha, and reverse-engineered — not affiliated with Google**. It drives a headed browser on *your own* Google Flow session, so treat it as your own account risk: automation is subject to Google's ToS, and endpoints or UI can change without notice. It
|
|
16
|
+
> ⚠️ **Read this before you install.** gflow-cli is **unofficial, alpha, and reverse-engineered — not affiliated with Google**. It drives a headed browser on *your own* Google Flow session, so treat it as your own account risk: automation is subject to Google's ToS, and endpoints or UI can change without notice. It works with **any Google account** that has Flow access, and every generation bills against your account's Flow credit allowance. Read the full [DISCLAIMER](DISCLAIMER.md).
|
|
17
17
|
>
|
|
18
18
|
> 💳 **What failure costs you.** Credits are only spent on Veo *video* generation — images and composition ops are free, so most breakage costs nothing. When Flow's UI drifts mid-run, the CLI fails fast and loudly with distinct exit codes (e.g. selector drift = exit 23) instead of resubmitting, and batch items are recorded locally *before* submission so a broken run never silently burns credits on a stale state. See [KNOWN_ISSUES](KNOWN_ISSUES.md) for the current risk list.
|
|
19
19
|
>
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
## Why gflow-cli?
|
|
23
23
|
|
|
24
|
-
You
|
|
24
|
+
You have a Google account with Flow access, you have Veo credits, and you run real batch work. gflow-cli gives you:
|
|
25
25
|
|
|
26
26
|
- **Batch generation.** Loop prompts straight from the shell: `for p in $(cat prompts.txt); do gflow image t2i "$p"; done`. Image batching plus `gflow video t2v` / `i2v` / `r2v` all ship today.
|
|
27
27
|
- **Consistent subjects.** `gflow character create` mints a Flow Character (face and body reference) so the same person appears from one generation to the next.
|
|
@@ -29,7 +29,7 @@ You pay for Google AI Ultra or Pro, you have Veo credits, and you run real batch
|
|
|
29
29
|
- **Pipelines.** Wire Veo into your content automation, AI-video stack, or batch experiments.
|
|
30
30
|
- **Terminal-native.** After one `gflow auth login`, you stay in the shell. No clicking through dialogs.
|
|
31
31
|
|
|
32
|
-
Same Veo and Imagen models, same quality, same
|
|
32
|
+
Same Veo and Imagen models, same quality, same billing against your own Google account, now programmatic.
|
|
33
33
|
|
|
34
34
|
## 60-second quick start
|
|
35
35
|
|
|
@@ -73,7 +73,7 @@ One command in, real Flow output back. Left: `gflow image t2i` generating a phot
|
|
|
73
73
|
|
|
74
74
|

|
|
75
75
|
|
|
76
|
-
A single `gflow image t2i "..." --aspect 9:16 --model nano2` call against a logged-in
|
|
76
|
+
A single `gflow image t2i "..." --aspect 9:16 --model nano2` call against a logged-in Flow profile. The terminal streams the run's `structlog` JSON, then lists the written PNG. Chromium drives the Flow editor silently in the background.
|
|
77
77
|
|
|
78
78
|
Reproduce the recording with [`scripts/record_demo.ps1`](scripts/record_demo.ps1) (Windows, OBS, ffmpeg, gifski). More formats, including the side-by-side split-screen: **[docs/DEMOS.md](docs/DEMOS.md)**.
|
|
79
79
|
|
|
@@ -131,7 +131,7 @@ Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project
|
|
|
131
131
|
|
|
132
132
|
## License & legal
|
|
133
133
|
|
|
134
|
-
[MIT License](LICENSE) © 2026 Flavio Oliva (`ffroliva`). The MIT license covers `gflow-cli`'s code only. It grants no rights to Flow, Veo model output, or any Google service. Google's own terms (Labs Additional Terms
|
|
134
|
+
[MIT License](LICENSE) © 2026 Flavio Oliva (`ffroliva`). The MIT license covers `gflow-cli`'s code only. It grants no rights to Flow, Veo model output, or any Google service. Google's own terms (Labs Additional Terms and any plan-specific subscription terms) govern your generations. See the [DISCLAIMER](DISCLAIMER.md).
|
|
135
135
|
|
|
136
136
|
## Acknowledgements
|
|
137
137
|
|
|
@@ -10,7 +10,7 @@ This page documents the full lifecycle: capture, storage, reuse, refresh, multi-
|
|
|
10
10
|
|---|---|
|
|
11
11
|
| Re-implement Google's OAuth dance | Google's web SSO involves anti-automation challenges (CAPTCHA, device verification). A community SDK can't reliably ship that. |
|
|
12
12
|
| Extract the bearer token from cookies and use `httpx` directly | Tokens are short-lived and tied to a refresh flow we don't have. Re-implementing the refresh is brittle. |
|
|
13
|
-
| Use a service-account JSON | Flow doesn't currently support service accounts on the
|
|
13
|
+
| Use a service-account JSON | Flow doesn't currently support service accounts on the consumer tier. |
|
|
14
14
|
| Pure stored cookie jar (no Playwright) | Some Flow endpoints set additional `x-` headers based on Chromium fingerprint; matching them by hand is fragile. |
|
|
15
15
|
| **Playwright persistent context (chosen)** | Captures session once, reuses indefinitely, refreshes automatically on idle, auto-attaches every header Flow expects. One-time cost: a ~150 MB Chromium download. |
|
|
16
16
|
|
|
@@ -197,18 +197,20 @@ accidental interference or data corruption.
|
|
|
197
197
|
|
|
198
198
|
### `gflow auth status`
|
|
199
199
|
|
|
200
|
-
Reports
|
|
200
|
+
Reports where the profile lives, then **proves the session**: it probes the Flow session endpoint with the profile's cookies (no browser, no credits) and exits `0` only when the session is verified — `1` otherwise. Handy for scripts: `gflow auth status && gflow run ...`.
|
|
201
201
|
|
|
202
202
|
```bash
|
|
203
203
|
$ gflow auth status
|
|
204
|
-
Profile 'default' is configured.
|
|
205
204
|
profile: /home/you/.local/share/gflow-cli/profile_default
|
|
206
205
|
exists: True
|
|
207
206
|
cookies_present: True
|
|
208
207
|
cookies_path: /home/you/.local/share/gflow-cli/profile_default/Default/Cookies
|
|
208
|
+
browser_engine: playwright
|
|
209
|
+
Probing Flow session (may take up to ~45s on a slow network)...
|
|
210
|
+
Flow session verified as you@example.com.
|
|
209
211
|
```
|
|
210
212
|
|
|
211
|
-
> Note: `cookies_present: True` only confirms the file exists
|
|
213
|
+
> Note: `cookies_present: True` only confirms the file exists. The final verdict line is the live probe result: a dead session prints a `gflow auth login` remediation hint and exits 1; a probe that cannot reach the endpoint (offline, 5xx) also exits 1 but suggests checking connectivity instead of re-logging in.
|
|
212
214
|
|
|
213
215
|
### `gflow auth list`
|
|
214
216
|
|
|
@@ -367,6 +369,38 @@ Run: gflow auth login --profile default
|
|
|
367
369
|
|
|
368
370
|
Re-running `auth login` refreshes the cookies in place — no other state is lost.
|
|
369
371
|
|
|
372
|
+
## Chromium downgrade guard
|
|
373
|
+
|
|
374
|
+
Chrome profiles are not backward-compatible: opening a profile with an **older**
|
|
375
|
+
Chromium major version than the one that last wrote it triggers Chromium's
|
|
376
|
+
downgrade cleanup, which can leave the newer store — session cookies included —
|
|
377
|
+
unreadable. That surfaces later as a mystery logout after a gflow/Playwright
|
|
378
|
+
downgrade (or a Chrome-strategy profile silently falling back to an older
|
|
379
|
+
bundled Chromium).
|
|
380
|
+
|
|
381
|
+
Every bundled-Chromium open of a persisted profile (the generation client, the
|
|
382
|
+
UI-automation transport, the experimental transports, and the headless
|
|
383
|
+
verification probe) first compares the profile's `Last Version` file against
|
|
384
|
+
the active engine's bundled Chromium (`playwright`, or `patchright` when
|
|
385
|
+
selected) and **refuses to open on a major-version downgrade** (exit 11) with
|
|
386
|
+
an error naming both versions:
|
|
387
|
+
|
|
388
|
+
```text
|
|
389
|
+
ERROR: Profile at ~/.gflow/profile_default was last written by Chromium 150.x,
|
|
390
|
+
but the installed Playwright bundled Chromium is older (149.x). ...
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
Remedies: upgrade so the bundled Chromium is at least the profile's version
|
|
394
|
+
(`uv tool upgrade gflow-cli`, then `playwright install chromium`), or re-create
|
|
395
|
+
the profile with `gflow auth login` — login is deliberately *not* guarded, it
|
|
396
|
+
re-mints the session and rewrites the profile, making it the recovery path.
|
|
397
|
+
The guard is best-effort: profiles under the `chrome` strategy (real Google
|
|
398
|
+
Chrome opens them) and any unreadable/unknown version skip the check. One
|
|
399
|
+
surface nuance: the headless verification probe is fail-closed by contract, so
|
|
400
|
+
a refusal there is reported as a verification failure rather than exit 11 —
|
|
401
|
+
the version details still land in the structured log
|
|
402
|
+
(`browser_manager.profile_engine_downgrade`).
|
|
403
|
+
|
|
370
404
|
## Session verification (cookie-store fast path)
|
|
371
405
|
|
|
372
406
|
Since v0.17.0, profile verification (run by `gflow auth login --browser chrome` after
|
|
@@ -394,7 +428,7 @@ extraction lives in `gflow_cli.auth.cookies`.
|
|
|
394
428
|
|---|---|
|
|
395
429
|
| Session file leaked to a public repo | `.gitignore` excludes profile dirs at every layer. Recommended belt-and-braces: keep the gflow-cli home outside the repo (default location via `platformdirs` already does this) and run `git status` before any commit. Automatic in-repo detection is on the backlog (not yet scheduled). |
|
|
396
430
|
| Multi-user shared machine | Profiles live under each user's home dir; OS file permissions (`0700` on POSIX, ACL on Windows) prevent cross-user reads by default. |
|
|
397
|
-
| `gflow-cli` itself becomes malicious | The package is open-source under MIT; pin a version (`uv tool install gflow-cli==0.
|
|
431
|
+
| `gflow-cli` itself becomes malicious | The package is open-source under MIT; pin a version (`uv tool install gflow-cli==0.55.0`) and review release diffs before upgrading. |
|
|
398
432
|
| Stolen laptop | Anyone with disk access has your session. Use full-disk encryption (FileVault, BitLocker, LUKS). Consider a dedicated `--profile sandbox` for short-lived experiments. |
|
|
399
433
|
| Sharing a profile between machines | Technically works (copy the profile dir), but Google may flag the device-fingerprint mismatch as suspicious. Re-login on the new machine instead. |
|
|
400
434
|
|
|
@@ -109,7 +109,7 @@ Deep setup, verification, and security notes live in
|
|
|
109
109
|
### `GFLOW_CLI_PROVIDER`
|
|
110
110
|
|
|
111
111
|
**What:** Backend to use for generations.
|
|
112
|
-
**Values:** `flow` (default — reverse-engineered,
|
|
112
|
+
**Values:** `flow` (default — reverse-engineered, works with any Google account that has Flow access) | `official` (planned v0.5+ — Phase 5 official Veo SDK swap, will require a Gemini API key).
|
|
113
113
|
**Default:** `flow`
|
|
114
114
|
**CLI override:** none yet — set the env var to switch backends once `official` is wired.
|
|
115
115
|
|
|
@@ -205,6 +205,12 @@ gflow tools run creative-director "cat in space" --json # check "was_expanded"
|
|
|
205
205
|
no env var set. If a corporate proxy is configured, add your local gateway to `NO_PROXY`
|
|
206
206
|
or its traffic will be routed through the proxy and fail non-obviously.
|
|
207
207
|
|
|
208
|
+
### `GFLOW_CLI_DAEMON_TOKEN` (alias: `GFLOW_DAEMON_TOKEN`)
|
|
209
|
+
|
|
210
|
+
**What:** API token required before `gflow serve` will bind to a non-localhost address (`--host` other than `127.0.0.1`). Without it, non-local binds abort with exit 11.
|
|
211
|
+
**Default:** unset.
|
|
212
|
+
**Security:** stored as a Pydantic `SecretStr` (since v0.55.0), so a `repr()`/`str()`/`model_dump_json()` of the settings object masks it by construction — on top of the existing logging-boundary redaction. Treat it like any credential: set it via `.env`/environment, never commit it.
|
|
213
|
+
|
|
208
214
|
### `GFLOW_CLI_AUTH_LOGIN_TIMEOUT`
|
|
209
215
|
|
|
210
216
|
**What:** Maximum time (seconds) that `gflow auth login` waits for the user to complete the Google sign-in flow in the browser.
|
|
@@ -254,6 +260,21 @@ GFLOW_CLI_AUTH_LOGIN_TIMEOUT=120 gflow auth login # abort after 2 minutes
|
|
|
254
260
|
**Recommended starting point:** `1` until a concurrent caller lands. Each additional Page would cost ~30–60 MiB of memory on Chromium headless; don't exceed `8` without measuring resident-set size. Cookies and storage state are shared at Context level, so every Page would inherit the signed-in profile for free.
|
|
255
261
|
**Shipped in:** v0.4.0a2.
|
|
256
262
|
|
|
263
|
+
### `GFLOW_CLI_UPDATE_CHECK`
|
|
264
|
+
|
|
265
|
+
**What:** Once-a-day best-effort PyPI check that prints a one-line stderr notice when a newer gflow-cli exists. The notice is always served from a local cache (`<GFLOW_CLI_HOME>/update_check.json`); a stale cache refreshes on a background daemon thread whose result feeds the *next* invocation — the check never blocks or fails a command, and a failed poll still counts toward the once-a-day cap.
|
|
266
|
+
**Values:** `1` (default) | `0` to disable
|
|
267
|
+
**Skipped automatically:** in CI (`CI` env var set) and for editable/local-source installs (PEP 610 `direct_url.json` detection) — "upgrade" advice is wrong there.
|
|
268
|
+
**Shipped in:** #479.
|
|
269
|
+
|
|
270
|
+
### `GFLOW_CLI_LEASE_WAIT_SECONDS`
|
|
271
|
+
|
|
272
|
+
**What:** How long a command waits for another gflow process to release the profile lease before giving up with `ProfileLockedError` (exit 11). The default `0` keeps the historical fail-fast behavior. With a positive value, the waiter polls the kernel lock (0.5 s cadence) and simply takes over when the current holder — a CLI command or a `gflow serve` daemon task, both of which release at their natural end — finishes. Holders are never interrupted or asked to release early.
|
|
273
|
+
**Values:** `0`–`3600` seconds (fractions allowed)
|
|
274
|
+
**Default:** `0` (fail fast)
|
|
275
|
+
**Note:** Same-process contention always fails fast regardless of this setting — the holder is the same process, so waiting would deadlock. See [KNOWN_ISSUES § Same profile can't be used in parallel](../KNOWN_ISSUES.md#same-profile-cant-be-used-in-parallel).
|
|
276
|
+
**Shipped in:** #478.
|
|
277
|
+
|
|
257
278
|
### `GFLOW_CLI_DB_PATH`
|
|
258
279
|
|
|
259
280
|
**What:** Override the path to the local SQLite operations database.
|
|
@@ -338,7 +359,7 @@ GFLOW_CLI_HISTORY_PROMPTS=redacted gflow image t2i "confidential brief"
|
|
|
338
359
|
**Default:** `true`
|
|
339
360
|
**When to disable:** shared machines where even structural failure metadata should not persist, or scripted runs that must write nothing outside the output dir.
|
|
340
361
|
|
|
341
|
-
**Privacy:** the automatic
|
|
362
|
+
**Privacy:** the automatic artifacts (`manifest.json`, `ui.json`, `network.json`, `browser.json`, and the pre-filled `report.md` bug-report template) are built from an explicit allowlist — no prompts, tokens, cookies, headers, request/response bodies, signed URLs, raw page titles, raw error/console text, or unknown hosts/routes ever enter them. The screenshot is inherently sensitive (it can show your account identity, prompts, and media) and therefore lives under the bundle's `sensitive/` subdirectory — **review it before sharing**. Nothing is ever uploaded; retention is bounded (at most 50 complete bundles / 250 MiB, pruned oldest-first at startup). Raw HAR capture stays separate and strictly opt-in via `GFLOW_CLI_HAR_PATH`.
|
|
342
363
|
|
|
343
364
|
### `GFLOW_CLI_HAR_PATH`
|
|
344
365
|
|
|
@@ -45,10 +45,11 @@ historical UI-flake noted in
|
|
|
45
45
|
[`LIVE_VERIFICATION_v0.7.0.md`](LIVE_VERIFICATION_v0.7.0.md#open-follow-ups)
|
|
46
46
|
(transient overlay swallowed the arrow-forward click).
|
|
47
47
|
|
|
48
|
-
**Two extra
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
inside the open
|
|
48
|
+
**Two extra artifact file names worth searching for in the out dir** when the
|
|
49
|
+
mode switch itself fails: `diag_mode_switch_miss.json` (crop-icon dropdown
|
|
50
|
+
trigger not found — a structural DOM signature; this probe writes no
|
|
51
|
+
screenshot) and `debug_no_image_tab.png` (Image tab missing inside the open
|
|
52
|
+
dropdown).
|
|
52
53
|
|
|
53
54
|
Pipe `--verbose` output through `Select-String` (PowerShell) or `grep` to
|
|
54
55
|
filter:
|
|
@@ -87,6 +88,9 @@ object) between the UTC timestamp and a collision-resistant random suffix:
|
|
|
87
88
|
│ # category, canonical route, status, duration
|
|
88
89
|
├── browser.json # last ≤100 console warn/error + ≤50 page errors —
|
|
89
90
|
│ # class/category + length only, never message text
|
|
91
|
+
├── report.md # pre-filled Markdown bug report: version/platform,
|
|
92
|
+
│ # error class + exit code, artifact pointers — fill
|
|
93
|
+
│ # in "What I was doing" and attach when filing
|
|
90
94
|
├── sensitive/screenshot.png # UI-state failures only — REVIEW BEFORE SHARING
|
|
91
95
|
└── .pending # present only while a capture is still staging
|
|
92
96
|
```
|
|
@@ -181,7 +185,7 @@ without manual copying. Caveats verified during the v0.7.0 work:
|
|
|
181
185
|
### 3. Firecrawl (`firecrawl-scrape` / `firecrawl-interact`)
|
|
182
186
|
Best for unauthenticated docs (e.g., Material Symbols icon names, third-
|
|
183
187
|
party API references). Not ideal for Flow itself — Flow requires a
|
|
184
|
-
logged-in
|
|
188
|
+
logged-in Flow session that Firecrawl's hosted browser doesn't
|
|
185
189
|
share with your local profile.
|
|
186
190
|
|
|
187
191
|
### 4. Playwright trace viewer
|