gflow-cli 0.68.0__tar.gz → 0.69.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.68.0 → gflow_cli-0.69.0}/.codex-plugin/plugin.json +1 -1
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.env.template +2 -1
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/PULL_REQUEST_TEMPLATE.md +1 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/AGENTS.md +13 -10
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/CHANGELOG.md +134 -1
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/CONTRIBUTING.md +27 -3
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/KNOWN_ISSUES.md +24 -8
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/PKG-INFO +5 -2
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/README.md +4 -1
- {gflow_cli-0.68.0/website → gflow_cli-0.69.0}/docs/ARCHITECTURE.md +1 -1
- {gflow_cli-0.68.0/website → gflow_cli-0.69.0}/docs/CONFIGURATION.md +2 -2
- {gflow_cli-0.68.0/website → gflow_cli-0.69.0}/docs/DEVELOPMENT.md +3 -1
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/INDEX.md +5 -4
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.68.0.md +37 -2
- gflow_cli-0.69.0/docs/LIVE_VERIFICATION_v0.69.0.md +168 -0
- {gflow_cli-0.68.0/website → gflow_cli-0.69.0}/docs/MCP.md +2 -1
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/PROJECT_STATUS.md +56 -1
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/USAGE.md +43 -4
- {gflow_cli-0.68.0/website → gflow_cli-0.69.0}/docs/USER_GUIDE.md +20 -8
- gflow_cli-0.69.0/docs/superpowers/memory/e2e-evidence-is-a-contributor-deliverable.md +49 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/flow-capabilities-are-cohort-dependent.md +15 -2
- gflow_cli-0.69.0/docs/superpowers/memory/flow-recon-must-run-on-denon82-ffroliva-migrated.md +84 -0
- gflow_cli-0.69.0/docs/superpowers/memory/migrated-host-driver-wire-lessons.md +109 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/release-back-merge-gap-recovery.md +21 -1
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/video-model-capability-matrix.md +46 -5
- gflow_cli-0.69.0/docs/superpowers/spikes/2026-09-05-migrated-frames-attach.md +61 -0
- gflow_cli-0.69.0/docs/superpowers/spikes/2026-09-05-migrated-model-menu-lower-priority.md +145 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/llms.txt +6 -2
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/pyproject.toml +3 -1
- gflow_cli-0.69.0/scripts/dev/capture_migrated_model_menu.py +198 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/skillopt/README.md +25 -8
- gflow_cli-0.69.0/scripts/dev/skillopt/harness.py +410 -0
- gflow_cli-0.69.0/scripts/dev/spike_migrated_frames_attach.py +567 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/README.md +1 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/gflow-cli/SKILL.md +6 -2
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/live-verify/SKILL.md +8 -2
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/pr-council-review/SKILL.md +12 -1
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/release/SKILL.md +75 -6
- gflow_cli-0.69.0/skills/video-production/SKILL.md +224 -0
- gflow_cli-0.69.0/skills/video-production/clip_qa.py +321 -0
- gflow_cli-0.69.0/skills/video-production/composition.md +171 -0
- gflow_cli-0.69.0/skills/video-production/consistency.md +154 -0
- gflow_cli-0.69.0/skills/video-production/failure-modes.md +76 -0
- gflow_cli-0.69.0/skills/video-production/tasks.json +498 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/client.py +58 -23
- gflow_cli-0.69.0/src/gflow_cli/api/credits.py +116 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/dto.py +47 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/routes.py +5 -0
- gflow_cli-0.69.0/src/gflow_cli/api/transports/migrated_composer.py +1154 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/auth/verification.py +32 -18
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/cli.py +2 -0
- gflow_cli-0.69.0/src/gflow_cli/cli_credits.py +86 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/config.py +3 -2
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/errors.py +2 -1
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/mcp/tools.py +35 -3
- gflow_cli-0.69.0/src/gflow_cli/services/credits.py +111 -0
- gflow_cli-0.69.0/tests/api/test_client_migrated_mint.py +62 -0
- gflow_cli-0.69.0/tests/api/test_credits.py +51 -0
- gflow_cli-0.69.0/tests/api/test_credits_http.py +194 -0
- gflow_cli-0.69.0/tests/api/transports/test_migrated_composer.py +1549 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_migrated_dispatch.py +106 -2
- gflow_cli-0.69.0/tests/cli/test_cli_credits.py +116 -0
- gflow_cli-0.69.0/tests/e2e/test_credits_e2e.py +31 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_migrated_host_e2e.py +39 -0
- gflow_cli-0.69.0/tests/e2e/test_migrated_i2v_e2e.py +201 -0
- gflow_cli-0.69.0/tests/features/credits.feature +16 -0
- gflow_cli-0.69.0/tests/features/migrated_i2v.feature +42 -0
- gflow_cli-0.69.0/tests/features/test_credits_steps.py +79 -0
- gflow_cli-0.69.0/tests/features/test_migrated_i2v_steps.py +274 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_cli_parity.py +2 -0
- gflow_cli-0.69.0/tests/mcp/test_credits_tool.py +43 -0
- gflow_cli-0.69.0/tests/mcp/test_migrated_i2v_parity.py +58 -0
- gflow_cli-0.69.0/tests/scripts/test_skillopt_scoring.py +144 -0
- gflow_cli-0.69.0/tests/services/test_credits.py +183 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_documentation_gate.py +24 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/uv.lock +1 -1
- {gflow_cli-0.68.0 → gflow_cli-0.69.0/website}/docs/ARCHITECTURE.md +1 -1
- {gflow_cli-0.68.0 → gflow_cli-0.69.0/website}/docs/CONFIGURATION.md +2 -2
- {gflow_cli-0.68.0 → gflow_cli-0.69.0/website}/docs/DEVELOPMENT.md +3 -1
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/KNOWN_ISSUES.md +24 -8
- {gflow_cli-0.68.0 → gflow_cli-0.69.0/website}/docs/MCP.md +2 -1
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/USAGE.md +43 -4
- {gflow_cli-0.68.0 → gflow_cli-0.69.0/website}/docs/USER_GUIDE.md +20 -8
- gflow_cli-0.68.0/docs/superpowers/memory/flow-recon-must-run-on-denon82-ffroliva-migrated.md +0 -58
- gflow_cli-0.68.0/docs/superpowers/memory/migrated-host-driver-wire-lessons.md +0 -55
- gflow_cli-0.68.0/scripts/dev/skillopt/harness.py +0 -365
- gflow_cli-0.68.0/src/gflow_cli/api/transports/migrated_composer.py +0 -596
- gflow_cli-0.68.0/tests/api/transports/test_migrated_composer.py +0 -802
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.agents/plugins/marketplace.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/README.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.gitattributes +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/FUNDING.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/dependabot.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/workflows/deps-watch.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/workflows/labels.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/workflows/scorecard.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/workflows/selector-probe.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.github/workflows/star-history-watch.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.gitignore +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/.secrets.baseline +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/CLAUDE.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/CONFIGURATION.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/LICENSE +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/RELEASE.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/ROADMAP.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/conftest.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/deploy/logrotate-pr-triage +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docker-compose.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/ACCOUNT_SAFETY.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/CHARACTER.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_reference_entity_guard.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.56.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.57.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.57.1.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.58.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.59.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.60.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.61.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.62.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.62.1.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.63.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.64.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.65.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.66.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.66.1.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.66.2.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.66.3.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.67.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/SECURITY.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/README.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/agents-md-vs-llms-txt.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/background-e2e-pytest-pattern.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/bdd-stubs-mirror-runtime-signatures.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/credit-free-route-abort-verification.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/data-layer-overview.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/data-layer-test-pollution-trap.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/doc-examples-are-untested-fixtures.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/draft-pr-merge-trap.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/exit-code-16-data-store.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/flow-credits-videos-only.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/flow-locale-leak-icon-ligatures.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/force-color-breaks-cli-tests.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/full-test-suite-ooms.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/git-add-all-sweeps-scratch-files.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/image-video-mode-switch-symmetry.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/mcp-is-first-class-across-skill-chain.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/memory-is-working-dir-keyed.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/on-started-callback-recorder-safety.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/playwright-click-no-downstream-event-signature.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/pr-council-review-stale-tree-reads.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/pr-hygiene-revert-and-multi-commit.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/pr-must-verify-on-affected-surface.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/prose-conflicts-hide-in-disjoint-files.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/pypi-readme-staleness-fix.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/pypi-rejected-filename-reusable.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/readme-hybrid-router-pattern.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/real-browser-auth-mandatory.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/release-signing.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/release-spec-plan-memory-consolidation.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/rest-transports-drop-ui-fields.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/ruff-format-scope-is-src-tests.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/sonarcloud-hotspot-review-workflow.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/sonarcloud-new-code-gotchas.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/sonarcloud-pr-issues-scope-s7497.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/sonarcloud-setup.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/stale-test-discovery.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/structlog-cache-logger-off-for-tests.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/ui-selector-drift-error-exit-23.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/verification-ledger-5-layer.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/wheel-build-sanity-gate.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/windows-dev-quirks.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/memory/windows-running-launcher-blocks-uv-upgrade.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-21-selector-registry.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-08-25-workflow-hardening-gaps.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/plans/2026-09-01-video-extend/PLAN.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/specs/2026-08-21-selector-registry-design.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/specs/2026-08-26-model-attribution-provenance.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/specs/2026-08-26-model-cost-quota-catalog.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/specs/2026-08-27-changelog-modal-precondition-design.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/spikes/2026-08-14-video-model-capability-matrix.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/spikes/2026-08-15-picker-tile-alt-text.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/spikes/2026-08-31-veo-extend-route-recon.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/spikes/2026-09-04-migrated-host-handoff-mechanism.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/docs/superpowers/spikes/2026-09-05-migrated-host-wire-protocol.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/eval/pr_triage_eval.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/eval/pr_triage_fixtures.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/examples/README.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/index.html +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/README.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/autopilot/Dockerfile.triage +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/autopilot/entrypoint.sh +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/autopilot/package-lock.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/autopilot/package.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/autopilot/pr_triage_gate.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/canary/register_task.ps1 +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/canary/run_canary.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/ci/check_council_memory.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/ci/check_test_count.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/capture_frames_mode_trigger_ligature.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/capture_lower_priority_model_cost.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/capture_project_listing.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/capture_r2v_ingredient_lifecycle.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/capture_sidebar_state_dom.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/capture_video_model_capability_matrix.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/live_verify_policy_400_v060.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/live_verify_video_model_select.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/measure_html_lang_settle.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/measure_locale_probe.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/measure_migrated_host_flip.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_changelog_capture.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_character_prompt_format.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_extend_model_recon.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_extend_ourstack_verify.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_extend_route_capture.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_extend_submit_capture.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_extend_ui_recon.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_locale_poison.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_migrated_duration_by_model.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_migrated_editor_dom_inventory.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_migrated_host_trigger.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_migrated_submit_capture.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_migration_flag_bootstrap.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_model_inventory.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_trpc_origin_referer_401.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/spike_video_tab_dom.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/verify_lang_settle_fix.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/verify_language_agnostic.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/verify_locale_navigation_race.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/dev/verify_model_attribution.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/diag/diag_aisandbox_bearer.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/diag/spike_387_openai_compat.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/probe/run_probe.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/probe/spike_auth_matrix.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/sonar-project.properties +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/_cli_helpers.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/extend_chain.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/_common.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/batchexecute.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/ui_automation.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/transports/ui_automation_video.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/api/video_extend.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/browser_manager.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/cli_doctor.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/cli_project.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/cli_update.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/cli_video.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/diagnostics.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/file_integrity.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/flow_selectors/grading.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/flow_selectors/model.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/flow_selectors/registry.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/mcp/setup.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/profile_lease.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/redaction.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/services/catalog_sync.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/services/doctor.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/update_check.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/winsec.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/worker/codec.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/fixtures/project_initial_data_extend_models.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_client_errors.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_client_extend.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_client_incidents.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_client_locale_cache.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_extend_chain.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_routes_locale.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_video_extend.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/test_video_status_poll.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_batchexecute.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_locale_navigation.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_migrated_host_gate.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_migrated_route.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_model_selection_loud.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_navigation_settled.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_overlay_precondition.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_policy_400.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_ui_automation.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/api/transports/test_video_model_selection_loud.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/auth/test_real_chrome.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/auth/test_windows_acl.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_auth_status.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_data_sync.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_doctor.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_cli_video_extend.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_predictable_output.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_run_with_handlers_interrupt.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/conftest.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/test_null_columns_stay_null.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/test_store.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_data_sync_names_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_project_naming_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_refresh_on_miss_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_sidebar_recovery_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_video_r2v_uuid_name_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/duration_tab_drift.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/entity_provenance.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/image_batch_references.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/latched_locale_recovery.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/mcp_tasks.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/media_picker_tiers.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/migrated_driver.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/migrated_host_gate.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/output_hardening.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_mcp_tasks_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_media_picker_tiers_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_migrated_driver_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_migrated_host_gate_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_output_hardening_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/fixtures/changelog_modal_page.html +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/fixtures/doctor_env.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/fixtures/flow_model_inventory.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/fixtures/flow_project_listing_media.json +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/fixtures/listing_payload.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/flow_selectors/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/flow_selectors/test_grading.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/flow_selectors/test_model.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/flow_selectors/test_model_governance.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/flow_selectors/test_registry.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/flow_selectors/test_report.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/integration/test_expander_gateway.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_auth_status_tool.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_error_funnel.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_http_transport.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_known_issues_resource.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_no_spend.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_rate_limit_envelope.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_resources.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_setup.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_tasks_extension.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_canary_classify.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_canary_reexec.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_capture_video_model_capability_matrix.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_check_council_memory.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_check_test_count.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_codex_plugin.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/scripts/test_workflow_hardening.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/services/test_catalog_sync.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/services/test_doctor.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/services/test_media_attribution.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_browser_manager.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_cli_project.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_cli_update.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_config.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_diagnostics_recorder.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_diagnostics_retention.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_duration_tab_drift.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_entity_provenance.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_errors.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_image_batch_references.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_incident_generation_requests.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_media.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_overlay_banner_dismissal.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_playwright_pin.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_profile_lease.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_profile_store_locale.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_project_list_urls.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_self_documenting_errors.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/test_update_check.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/ACCOUNT_SAFETY.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/CHARACTER.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/MEDIA_LIBRARY.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/SECURITY.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/index.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/installation.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/onboarding-mockup.html +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/onboarding.md +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/mkdocs.yml +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/requirements.in +0 -0
- {gflow_cli-0.68.0 → gflow_cli-0.69.0}/website/requirements.txt +0 -0
|
@@ -183,7 +183,8 @@
|
|
|
183
183
|
# GFLOW_CLI_UI_MODE=auto
|
|
184
184
|
|
|
185
185
|
# Which Flow frontend gflow drives (#639). auto (default): flow.google.com is the
|
|
186
|
-
# default host for what it can serve today (video t2v
|
|
186
|
+
# default host for what it can serve today (video t2v, and video i2v from a local
|
|
187
|
+
# --initial-frame, with --project) on every
|
|
187
188
|
# account; requests it cannot serve yet keep the labs driver on an unmoved
|
|
188
189
|
# account, and a moved account gets the migrated composer for everything ported.
|
|
189
190
|
# flow.google.com: force the migrated composer for everything.
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
- [ ] `scenario` + `plan` written under `docs/superpowers/plans/<date>-<slug>/` and linked here
|
|
13
13
|
- [ ] `check` green, including the step 1b CLI↔MCP mirror sweep
|
|
14
14
|
- [ ] MCP twin added, or a reasoned exemption in `tests/mcp/test_cli_parity.py`
|
|
15
|
+
- [ ] **E2E evidence provided** — name the `tests/e2e/` test you ran and paste its result, or point at the new test this PR adds. If you could not run it, say why here:
|
|
15
16
|
- [ ] Live-verified against real Flow where a generation path changed; what could NOT be verified is stated below
|
|
16
17
|
- [ ] Council review run (`pr-council-review` / `branch-review`) and must-fix items addressed
|
|
17
18
|
|
|
@@ -41,10 +41,10 @@ by construction, so Codex / Cursor / Aider / `agy` read exactly what Claude Code
|
|
|
41
41
|
|
|
42
42
|
## Project at a glance
|
|
43
43
|
|
|
44
|
-
- Unofficial Python CLI for [Google Flow](https://labs.google/fx/tools/flow) — drives Veo (image-to-video, text-to-video) and Imagen (text-to-image) generations from the terminal by reverse-engineering Flow's private REST API at `aisandbox-pa.googleapis.com` — and, for accounts Google has moved to `flow.google.com`, that frontend's `batchexecute` wire (text-to-video today; `GFLOW_CLI_FLOW_HOST`).
|
|
44
|
+
- Unofficial Python CLI for [Google Flow](https://labs.google/fx/tools/flow) — drives Veo (image-to-video, text-to-video) and Imagen (text-to-image) generations from the terminal by reverse-engineering Flow's private REST API at `aisandbox-pa.googleapis.com` — and, for accounts Google has moved to `flow.google.com`, that frontend's `batchexecute` wire (text-to-video, and image-to-video from a local `--initial-frame`, today; `GFLOW_CLI_FLOW_HOST`).
|
|
45
45
|
- Python 3.11+ · `uv`-managed · `hatchling` builds · Playwright Chromium transport · `pyright` strict · `ruff` · `pytest`.
|
|
46
|
-
- Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `data/`, `mcp/`, `services/`, `tools/`, `ui/`, `worker/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `diagnostics.py`, `json_output.py`, `media.py`, `profile_lease.py`, `redaction.py`, `storage.py`, `winsec.py`, `cli_project.py`, `cli_character.py`, `cli_data.py`, `cli_image.py`, `cli_instructions.py`, `cli_models.py`, `cli_movie.py`, `cli_run.py`, `cli_scene.py`, `cli_tools.py`, `cli_video.py`, `chain.py`, `chain_manifest.py`, `cli_doctor.py`, `cli_update.py`, `composition.py`, `config.py`, `errors.py`, `file_integrity.py`, `flow_selectors/`, `update_check.py`, `exceptions.py`, `image_batch.py`, `movie_manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
|
|
47
|
-
- Command surface: `gflow auth`, `gflow image` (t2i/i2i/batch/upload/upscale), `gflow video` (t2v/i2v/r2v/chain/extend — `extend` continues an existing clip past Flow's 8s ceiling, server-seeded from the source so the join is continuous; no `batch` subcommand; the nonfunctional stub was removed, loop `gflow video t2v`/`i2v` from the shell for multi-clip runs), `gflow character` (create/list/show/rm/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), `gflow instructions` (persistent Agent-Mode brief cards — add/list/enable/disable/rm/apply/toggle-mode, credits-free, `--project` required), `gflow movie` (run/template — multi-scene manifest pipeline), `gflow tools` (list/show/run — prompt-rewriting tools, also `--tool` on generation commands), `gflow data` (catalog queries), `gflow doctor` (read-only pre-flight diagnostic, exit 33 = findings present), `gflow update` (self-update through the installer that put it here — uv tool / pipx / pip; `--check` only reports; source installs refused, exit 11; deliberately no MCP twin), `gflow project`, `gflow models`, `gflow run`, `gflow mcp` (run/setup — stdio MCP server), and `gflow serve` (Streamable HTTP at `/mcp`; `--transport sse` is deprecated).
|
|
46
|
+
- Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `data/`, `mcp/`, `services/`, `tools/`, `ui/`, `worker/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `diagnostics.py`, `json_output.py`, `media.py`, `profile_lease.py`, `redaction.py`, `storage.py`, `winsec.py`, `cli_project.py`, `cli_character.py`, `cli_credits.py`, `cli_data.py`, `cli_image.py`, `cli_instructions.py`, `cli_models.py`, `cli_movie.py`, `cli_run.py`, `cli_scene.py`, `cli_tools.py`, `cli_video.py`, `chain.py`, `chain_manifest.py`, `cli_doctor.py`, `cli_update.py`, `composition.py`, `config.py`, `errors.py`, `file_integrity.py`, `flow_selectors/`, `update_check.py`, `exceptions.py`, `image_batch.py`, `movie_manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
|
|
47
|
+
- Command surface: `gflow auth`, `gflow credits` (user/list — read-only Veo balance), `gflow image` (t2i/i2i/batch/upload/upscale), `gflow video` (t2v/i2v/r2v/chain/extend — `extend` continues an existing clip past Flow's 8s ceiling, server-seeded from the source so the join is continuous; no `batch` subcommand; the nonfunctional stub was removed, loop `gflow video t2v`/`i2v` from the shell for multi-clip runs), `gflow character` (create/list/show/rm/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), `gflow instructions` (persistent Agent-Mode brief cards — add/list/enable/disable/rm/apply/toggle-mode, credits-free, `--project` required), `gflow movie` (run/template — multi-scene manifest pipeline), `gflow tools` (list/show/run — prompt-rewriting tools, also `--tool` on generation commands), `gflow data` (catalog queries), `gflow doctor` (read-only pre-flight diagnostic, exit 33 = findings present), `gflow update` (self-update through the installer that put it here — uv tool / pipx / pip; `--check` only reports; source installs refused, exit 11; deliberately no MCP twin), `gflow project`, `gflow models`, `gflow run`, `gflow mcp` (run/setup — stdio MCP server), and `gflow serve` (Streamable HTTP at `/mcp`; `--transport sse` is deprecated).
|
|
48
48
|
- Works with any Google account that has Flow access. All generations bill against the user's own Google account.
|
|
49
49
|
|
|
50
50
|
## Headed-browser dependency (architectural reality)
|
|
@@ -95,8 +95,10 @@ the five other mirror axes), which no command here can check and no CI gate can
|
|
|
95
95
|
- Use `pytest -m "not live and not e2e and not smoke"` locally; full suite OOMs on small dev machines. Scope to changed dirs; trust CI for the full sweep.
|
|
96
96
|
- TDD is non-negotiable. Coverage floor: 80% overall.
|
|
97
97
|
- Documentation is a first-class deliverable. Every behavior, workflow, config, or operator-facing change must update the relevant docs or state why no docs changed in the PR/checklist. `scripts/ci/check_doc_links.py` is a merge gate.
|
|
98
|
-
- **A PR is not done until its SonarCloud gate is green (zero new issues).** The
|
|
99
|
-
-
|
|
98
|
+
- **A PR is not done until its SonarCloud gate is green (zero new issues).** The nine gates above are local/pre-commit; SonarCloud is server-side and runs in CI (`sonar.qualitygate.wait=true` → a red gate turns the `SonarCloud analysis` check red). Before calling a PR merge-ready, verify it with `/gflow:sonar <N>` (it is skipped on fork PRs — maintainer-checked there).
|
|
99
|
+
- **E2E is the decisive layer, and it is required for every behavior change that touches a Flow surface.** Run the `tests/e2e/` test that covers the change, or write one — offline-green proves only that *our* code does what we think, never that Flow still behaves as captured. `/gflow:live-verify` does **not** satisfy this: it drives CLI commands by hand into a gitignored note and never runs `pytest -m e2e`. The two are complementary — an e2e test is a re-runnable regression, a live-verify ledger is a narrative record. If you cannot run it, say so explicitly in the PR and a maintainer will; a change touching no Flow surface (docs, help text, exit-code plumbing) is out of scope — say that rather than leaving it blank.
|
|
100
|
+
- E2E tests require `GFLOW_CLI_E2E_PROFILE` and `-m e2e` (excluded from the default `addopts`, so they never run by accident). Cost sub-markers: `e2e_auth` (zero credits, browser only), `e2e_image` (zero credits, daily cap), `e2e_scene`, `e2e_data`, `e2e_batch`, `e2e_character` (opt in with `GFLOW_CLI_E2E_RUN_CHARACTER=1`), `e2e_video` (spends Veo credits — opt in with `GFLOW_CLI_E2E_RUN_VIDEO=1`). Redact account identifiers and any token or cookie value before pasting output into a PR.
|
|
101
|
+
- Live tests (`@pytest.mark.live`) opt in via `GFLOW_LIVE=1`.
|
|
100
102
|
|
|
101
103
|
## Code style
|
|
102
104
|
|
|
@@ -159,7 +161,7 @@ All AI agents and harnesses working on `gflow-cli` follow this standard 10-phase
|
|
|
159
161
|
| 5. Council Review | `/gflow:pr-council-review` / `llm-council` | Multi-dimensional audit across 6 core dimensions | Consensus verdict report |
|
|
160
162
|
| 6. Task Execution | `/gflow:status` | Track unchecked tasks during TDD execution | Next unchecked task |
|
|
161
163
|
| 7. Pre-Commit Quality | `/gflow:check` | The Impeccable Routine (hygiene, ruff, pyright, pytest) | All green local checks |
|
|
162
|
-
| 8. Live Verification | `/gflow:live-verify` | 5-layer proof against real Flow transport | `docs/LIVE_VERIFICATION_vX.Y.Z.md` |
|
|
164
|
+
| 8. E2E + Live Verification | `pytest -m e2e` → `/gflow:live-verify` | The e2e suite against a live profile, then the 5-layer proof against real Flow transport | Pasted e2e result + `docs/LIVE_VERIFICATION_vX.Y.Z.md` |
|
|
163
165
|
| 9. PR & Issue Close | `/gflow:issue-resolve <N>` | PR, SonarCloud 0-issue gate, merge to develop | Closed GitHub issue |
|
|
164
166
|
| 10. Release Pipeline | `/gflow:release` | Version bump, signed tag (`git tag -s`), PyPI publish. **Internally gates on `/gflow:changelog` → `/gflow:check` → `/gflow:live-verify` → `/gflow:doc-review`; a failure at any of them is a STOP, not a warning.** | Shipped release & back-merge |
|
|
165
167
|
|
|
@@ -174,9 +176,9 @@ Every AI agent executing any phase of this pipeline MUST proactively state the c
|
|
|
174
176
|
| Phase 3: BDD Scaffolding | `Scenario:` blocks & test scaffold | ➔ Phase 4: Implementation Plan (`/gflow:plan <feature>`) |
|
|
175
177
|
| Phase 4: Implementation Plan | `PLAN.md` created & approved | ➔ Phase 6: Task Execution (`/gflow:status`) |
|
|
176
178
|
| Phase 6: Task Execution | All plan tasks checked | ➔ Phase 7: Pre-Commit Quality (`/gflow:check`) |
|
|
177
|
-
| Phase 7: Pre-Commit Quality | All
|
|
178
|
-
| Phase 5: Council Review | Consensus 🟢 GREEN | ➔ Phase 8: Live Verification (`/gflow:live-verify`) or Phase 9 (`/gflow:issue-resolve <N>`) |
|
|
179
|
-
| Phase 8: Live Verification | `LIVE_VERIFICATION_vX.Y.Z.md` | ➔ Phase 9: Issue Resolve & PR (`/gflow:issue-resolve <N>`) |
|
|
179
|
+
| Phase 7: Pre-Commit Quality | All quality gates green | ➔ Phase 5: Council Review (`/gflow:branch-review` or `/gflow:pr-council-review`) |
|
|
180
|
+
| Phase 5: Council Review | Consensus 🟢 GREEN | ➔ Phase 8: E2E + Live Verification (`pytest -m e2e`, then `/gflow:live-verify`) or Phase 9 (`/gflow:issue-resolve <N>`) |
|
|
181
|
+
| Phase 8: E2E + Live Verification | e2e result + `LIVE_VERIFICATION_vX.Y.Z.md` | ➔ Phase 9: Issue Resolve & PR (`/gflow:issue-resolve <N>`) |
|
|
180
182
|
| Phase 9: Issue Resolve & PR | PR open & SonarCloud 0-issue gate green | ➔ Phase 10: Release Pipeline (`/gflow:release`) |
|
|
181
183
|
| Phase 10: Release Pipeline | Signed tag & PyPI published | ➔ Done (Release shipped & back-merged) |
|
|
182
184
|
|
|
@@ -198,6 +200,7 @@ The `skills/` directory ships installable agent skill docs in plain Markdown wit
|
|
|
198
200
|
| `check` | [`skills/check/SKILL.md`](skills/check/SKILL.md) | Quality gates (lint/format/types/tests) before every commit |
|
|
199
201
|
| `changelog` | [`skills/changelog/SKILL.md`](skills/changelog/SKILL.md) | Unreleased changes + last tagged version |
|
|
200
202
|
| `known-issues` | [`skills/known-issues/SKILL.md`](skills/known-issues/SKILL.md) | Open/mitigated known issues — before auth/reCAPTCHA work |
|
|
203
|
+
| `video-production` | [`skills/video-production/SKILL.md`](skills/video-production/SKILL.md) | User wants a finished multi-shot or dialogue video (consistent actors, room, several angles, spoken lines), or clips came back with a film border, a drifting room, rushed dialogue, a person-policy refusal or exit 36 |
|
|
201
204
|
| `sonar` | [`skills/sonar/SKILL.md`](skills/sonar/SKILL.md) | Drive the SonarCloud quality gate to zero for a PR/branch |
|
|
202
205
|
| `live-verify` | [`skills/live-verify/SKILL.md`](skills/live-verify/SKILL.md) | Pre-flight state check at start of work; live-verification against real Flow before claiming done |
|
|
203
206
|
| `doc-review` | [`skills/doc-review/SKILL.md`](skills/doc-review/SKILL.md) | Council-driven documentation audit before a release |
|
|
@@ -226,7 +229,7 @@ extension does not currently load plugins, so IDE-only users should include the
|
|
|
226
229
|
**Claude Code:** the `/gflow:` slash commands in `.claude/commands/gflow/` are auto-discovered when the project is open — no extra setup needed. To register a skill globally, copy the command file to `~/.claude/commands/`.
|
|
227
230
|
**Custom agents:** fetch `skills/gflow-cli/SKILL.md` into your knowledge base before answering gflow questions.
|
|
228
231
|
|
|
229
|
-
The SkillOpt harness at `scripts/dev/skillopt/` measures how accurately each skill guides an agent
|
|
232
|
+
The SkillOpt harness at `scripts/dev/skillopt/` measures how accurately each skill guides an agent. It drives any OpenAI-compatible endpoint — OpenAI, a gateway (OpenRouter, LiteLLM, freellmapi), a local model, or Google's compat endpoint — through the project's own `GFLOW_CLI_LLM_*` settings, the same ones the prompt tools use; there is no separate provider configuration. See [`scripts/dev/skillopt/README.md`](scripts/dev/skillopt/README.md).
|
|
230
233
|
|
|
231
234
|
## Where to look next
|
|
232
235
|
|
|
@@ -7,6 +7,138 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.69.0] — 2026-09-06
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Read-only Flow balance inspection:** `gflow credits user`, `gflow credits list`, and the
|
|
15
|
+
matching `gflow_get_credits` MCP tool report current
|
|
16
|
+
balances and account tiers from saved profiles. Multi-profile inspection preserves partial
|
|
17
|
+
successes and emits stable JSON for automation. Saved cookies + ordinary HTTP are the primary
|
|
18
|
+
path, with browser-backed retrieval only as a fallback; cookies remain scoped to `labs.google`,
|
|
19
|
+
and no copied bearer token or browser API key is stored. The reported balance funds Veo video;
|
|
20
|
+
image generation uses separate per-model daily quotas.
|
|
21
|
+
|
|
22
|
+
- **Image-to-video from a local start frame on the migrated `flow.google.com` host**
|
|
23
|
+
([#639](https://github.com/ffroliva/gflow-cli/issues/639), slice 1). `gflow video i2v
|
|
24
|
+
--initial-frame <local file> --project <id>` now runs on the new host — on a moved
|
|
25
|
+
account, and by default (`GFLOW_CLI_FLOW_HOST=auto`) on an unmoved one too. The port
|
|
26
|
+
is UI-driven and observed, never replayed: the composer selects the Frames submode,
|
|
27
|
+
uploads the file through the editor's own toolbar Upload entry and reads the media id
|
|
28
|
+
off the app's `maseQ` reply, finds the upload in the Start-frame picker under its file
|
|
29
|
+
name (the picker exposes no media id in its DOM), and only then submits. **An unbound
|
|
30
|
+
chip is refused before the click** — exit 23, zero credits — because an empty Frames
|
|
31
|
+
submit silently goes out as text-to-video (the labs #125 shape). The app's submit
|
|
32
|
+
*request* is then inspected as it leaves: a body without that media id, or carrying a
|
|
33
|
+
`_t2v_` model key, fails the run with `WireFormatError` (exit 7) naming what Flow was
|
|
34
|
+
actually asked to make — after the fact, since the request is already on the wire.
|
|
35
|
+
An upload Flow refuses is exit 27 on route `batchexecute:maseQ`; a file the picker
|
|
36
|
+
never lists after three searches is exit 32. For i2v the submit rpc is `eb1hJf` (t2v
|
|
37
|
+
stays `YhhmEf`), and an i2v request with no `--model` binds the veo-lite default here
|
|
38
|
+
exactly as it has always done on labs (#125). Not ported in this slice and named in
|
|
39
|
+
the exit-36 detail: `--end-frame`, a frame given by media UUID or `@Name`, and r2v.
|
|
40
|
+
A "Get started" modal over a fresh migrated editor is now dismissed before the run.
|
|
41
|
+
Recon: `docs/superpowers/spikes/2026-09-05-migrated-frames-attach.md`.
|
|
42
|
+
|
|
43
|
+
- **`--model veo-lite-lp` is drivable on the migrated `flow.google.com` host.** It was
|
|
44
|
+
the one tier the migrated model map omitted, so an account Google has already moved
|
|
45
|
+
could not select it at all: `_select_model` refused with `ConfigurationError` (exit
|
|
46
|
+
11, "not available on the migrated Flow host") before ever reading the live menu.
|
|
47
|
+
The omission was not an oversight — the tier's full menu label is unknown, because
|
|
48
|
+
Flow has never rendered the entry on any account gflow has driven (the 2026-08-14
|
|
49
|
+
two-account capability matrix, #650's duration capture and v0.61.0's refusal A/B all
|
|
50
|
+
recorded a picker MISS), and the migrated map is keyed by label. It is now matched
|
|
51
|
+
the way the labs driver has matched it since #539 — by the `[Lower Priority]` tag
|
|
52
|
+
alone. **The entry has now been captured** (2026-09-05, a migrated account): the menu
|
|
53
|
+
renders `Veo 3.1 - Lite [Lower Priority]`, and that account's picker was already
|
|
54
|
+
*defaulted* to it — presumably why every earlier capture missed the entry, having been
|
|
55
|
+
taken on accounts Flow was not throttling. Matching stays on the tag rather than the
|
|
56
|
+
newly-known label: one account's rendering, and a tag Flow appends to whichever tier it
|
|
57
|
+
throttles survives that tier changing. Verified live at $0 by driving `_select_model`
|
|
58
|
+
for all five tiers and reading the picker back after each switch — including the
|
|
59
|
+
lower-priority tier reached through the menu — plus one real 8 s generation on it.
|
|
60
|
+
Routing is deliberately unchanged: `veo-lite-lp` still does not make
|
|
61
|
+
`migrated_can_serve` pull an **unmoved** account onto the new host, since Flow appears
|
|
62
|
+
not to offer the tier to accounts it is not throttling.
|
|
63
|
+
Capture: `docs/superpowers/spikes/2026-09-05-migrated-model-menu-lower-priority.md`.
|
|
64
|
+
|
|
65
|
+
### Changed
|
|
66
|
+
|
|
67
|
+
- **`video-production` skill, epoch 1: the reference cap now routes instead of only
|
|
68
|
+
forbidding.** A scored rollout picked `veo-quality` for a two-reference shot while
|
|
69
|
+
correctly reciting that its reference cap is 0 — the skill stated the prohibition in two
|
|
70
|
+
places and named the substitute in none, and the remedy lived only in the reference files
|
|
71
|
+
an agent may never load. Step 4 now carries the rule: the reference count picks the model
|
|
72
|
+
before quality does, `omni-flash` for a single generation needing references and quality
|
|
73
|
+
together, a `veo-lite` variant when 3 refs is enough — and `video chain` is called out as
|
|
74
|
+
the exception, since it refuses `omni-flash` outright. Validated by a controlled A/B on
|
|
75
|
+
one model with the document as the only variable: 0.00 → 0.90.
|
|
76
|
+
|
|
77
|
+
- **The SkillOpt harness uses the project's own `GFLOW_CLI_LLM_*` settings.** It carried a
|
|
78
|
+
second, parallel provider configuration — its own `--provider anthropic|openai` switch,
|
|
79
|
+
its own key env vars and its own `--base-url` — while `Settings.llm_base_url` /
|
|
80
|
+
`llm_api_key` / `llm_model` already drove the prompt tools. Any OpenAI-compatible endpoint
|
|
81
|
+
works through the one setting (OpenAI, OpenRouter, LiteLLM, freellmapi, a local gateway,
|
|
82
|
+
Google's compat endpoint); both LLM SDK dependencies are gone, and the harness now
|
|
83
|
+
inherits the URL validation its own flag used to bypass. It requires `uv run`. A scoring
|
|
84
|
+
bug is fixed with it: float accumulation made `1.0 - 0.3 + 0.1` fall short of the `>= 0.8`
|
|
85
|
+
PASS threshold, so a task at exactly the threshold graded PARTIAL while printing "0.80".
|
|
86
|
+
|
|
87
|
+
### Fixed
|
|
88
|
+
|
|
89
|
+
- **Moved accounts: `image t2i` / `i2i` (and `upscale`, `extend`) now exit 36, not a
|
|
90
|
+
bare `RecaptchaError` exit 1 (#673).** The labs client mints the reCAPTCHA token on
|
|
91
|
+
the pool's bootstrap page *before* the UI transport runs, so none of the transport's
|
|
92
|
+
migration guards could fire; on a moved account that page is the `flow.google.com`
|
|
93
|
+
project grid after the client-side handoff, which loads no
|
|
94
|
+
`recaptcha/enterprise.js`, so site-key discovery raised `RecaptchaError` — a
|
|
95
|
+
`RuntimeError` unmapped in `EXIT_CODE_MAP`: exit 1 "unexpected", with a remediation
|
|
96
|
+
about headless Chrome. `_mint_recaptcha_token` now runs the same one-line
|
|
97
|
+
`raise_if_migrated` guard the transport uses, so the distinct, non-retryable exit
|
|
98
|
+
36 and its migration remediation come back within seconds, before any submit.
|
|
99
|
+
Reproduced and re-verified on a moved maintainer account at zero credits (exit 1 →
|
|
100
|
+
exit 36); the new
|
|
101
|
+
`tests/e2e/test_migrated_host_e2e.py::test_e2e_image_on_a_moved_account_exits_36_not_recaptcha`
|
|
102
|
+
(`e2e_auth`, $0) is the regression.
|
|
103
|
+
|
|
104
|
+
- **The migrated model picker could bind a tier the user did not ask for.** The port
|
|
105
|
+
matched menu entries by case-insensitive *substring* and took `.first`, so on an
|
|
106
|
+
account whose menu carries a lower-priority sibling, `--model veo-lite` also matched
|
|
107
|
+
`Veo 3.1 - Lite [Lower Priority]` and Flow billed whichever Angular happened to list
|
|
108
|
+
first. The same substring ran against the picker button's read-back, where a pane
|
|
109
|
+
already showing the lower-priority tier satisfied `startswith("Veo 3.1 - Lite")` and
|
|
110
|
+
returned "already selected" without opening the menu — silently keeping the wrong
|
|
111
|
+
tier. This is the ambiguity #539 fixed on labs.google (whose selectors carry
|
|
112
|
+
`:not(:has-text('[Lower Priority]'))`) and which this port had dropped. Ordinary
|
|
113
|
+
tiers now exclude the tag on both paths, and a matcher hitting more than one live
|
|
114
|
+
entry **refuses** (exit 11) naming every candidate rather than guessing which one
|
|
115
|
+
Flow would bill. Confirmed against the real button text on a throttled account:
|
|
116
|
+
`"Veo 3.1 - Lite [Lower Priority] arrow_drop_down".lower().startswith("veo 3.1 - lite")`
|
|
117
|
+
is `True`, so pre-fix `--model veo-lite` there generated on the throttled tier without
|
|
118
|
+
ever opening the menu.
|
|
119
|
+
|
|
120
|
+
- **Switching `--model` on the migrated host broke the next run** — reported as "run 1
|
|
121
|
+
with a new model dies, run 2 with the same model works, run 3 with another model dies
|
|
122
|
+
again". Picking from the model menu leaves Angular with **two** stacked overlays (the
|
|
123
|
+
settings pane and the menu opened over it) and each Escape dismisses exactly one, so
|
|
124
|
+
`_close_pane`'s single press closed only the menu and left the settings pane covering
|
|
125
|
+
the composer. `send_prompt`'s click then failed actionability and surfaced ~5 s later
|
|
126
|
+
as a bare `TimeoutError` naming `[contenteditable='true']`, pointing nowhere near the
|
|
127
|
+
pane. A repeat run binds the model at the button read-back, never opens the menu and
|
|
128
|
+
never stacks the second overlay — which is exactly why re-running the same model
|
|
129
|
+
worked. Measured at $0: after a switch the composer's bounding box is *identical* for
|
|
130
|
+
12 s (it was never unstable) while `.cdk-overlay-pane:visible` stays at 1; one more
|
|
131
|
+
Escape takes it to 0. `_close_pane` now escapes until no overlay is visible, bounded,
|
|
132
|
+
and raises pre-submit if one will not close rather than leaving the composer click to
|
|
133
|
+
report it. The old read-back did fire `migrated.pane_still_open` — as a warning the run
|
|
134
|
+
ignored; the observation was there and only the consequence was missing.
|
|
135
|
+
|
|
136
|
+
- **A migrated run that short-circuited model selection logged nothing.** `_select_model`
|
|
137
|
+
returning at its button read-back emitted no event, so a field timeline could not tell
|
|
138
|
+
"bound the tier you asked for" from "never touched the picker" — answering that for the
|
|
139
|
+
2026-09-05 run took a separate probe. It now logs `migrated.model_already_selected`
|
|
140
|
+
with the observed button text.
|
|
141
|
+
|
|
10
142
|
## [0.68.0] — 2026-09-05
|
|
11
143
|
|
|
12
144
|
### Added
|
|
@@ -3934,7 +4066,8 @@ shell-script template that branches on these codes.
|
|
|
3934
4066
|
|
|
3935
4067
|
First skeleton. Not functional end-to-end yet.
|
|
3936
4068
|
|
|
3937
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
4069
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.69.0...HEAD
|
|
4070
|
+
[0.69.0]: https://github.com/ffroliva/gflow-cli/compare/v0.68.0...v0.69.0
|
|
3938
4071
|
[0.68.0]: https://github.com/ffroliva/gflow-cli/compare/v0.67.0...v0.68.0
|
|
3939
4072
|
[0.67.0]: https://github.com/ffroliva/gflow-cli/compare/v0.66.3...v0.67.0
|
|
3940
4073
|
[0.66.3]: https://github.com/ffroliva/gflow-cli/compare/v0.66.2...v0.66.3
|
|
@@ -24,12 +24,13 @@ What a contributor PR is expected to have gone through, phase by phase:
|
|
|
24
24
|
| Transport / auth / selector / schema change | [`predict`](skills/predict/SKILL.md) | A GO / CAUTION / STOP verdict **before** code exists; STOP means open an issue instead |
|
|
25
25
|
| Any feature | [`scenario`](skills/scenario/SKILL.md) → [`plan`](skills/plan/SKILL.md) | `docs/superpowers/plans/<date>-<slug>/SCENARIO.md` + `PLAN.md` — the edge-case table and the task list; link them from the PR (they live on the branch and in the PR's history; at release the durable facts are folded into `docs/superpowers/memory/` and the plan dir is removed) |
|
|
26
26
|
| Every commit | [`check`](skills/check/SKILL.md) | The Impeccable Routine green (it is the exact CI gate), plus the **step 1b** CLI↔MCP mirror sweep no CI gate can see |
|
|
27
|
-
|
|
|
27
|
+
| Any behavior change | [`tests/e2e/`](tests/e2e/) | The e2e test you ran, or the new one you wrote. E2E is the layer that proves the change works against real Flow — unit + integration + BDD green is never the whole story here. Name the test and paste its result |
|
|
28
|
+
| Anything on a generation path | [`live-verify`](skills/live-verify/SKILL.md) | Evidence against real Flow **on top of** the e2e run — the 5-layer ledger; say plainly what you could **not** verify |
|
|
28
29
|
| Opening the PR | [`pr-council-review`](skills/pr-council-review/SKILL.md) / [`branch-review`](.claude/commands/gflow/branch-review.md) | The multi-dimension council (correctness, quality, security, tests, memory, YAGNI, parity …); maintainers run it on every PR, so running it yourself first removes a round trip |
|
|
29
30
|
| Red SonarCloud check | [`sonar`](skills/sonar/SKILL.md) | Zero new issues — the gate measures *new* code |
|
|
30
31
|
| Auth or reCAPTCHA | [`known-issues`](skills/known-issues/SKILL.md) | Known-broken surfaces have documented workarounds; rediscovering them costs days |
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
Four rules the pipeline enforces that catch first-time contributors most often:
|
|
33
34
|
|
|
34
35
|
1. **Ship each capability twice, or say why not.** Every CLI command has an MCP twin or a
|
|
35
36
|
reasoned exemption in `tests/mcp/test_cli_parity.py` — and options, payload keys and tool
|
|
@@ -38,6 +39,14 @@ Three rules the pipeline enforces that catch first-time contributors most often:
|
|
|
38
39
|
(AGENTS.md § *Locale-Invariance Discipline*).
|
|
39
40
|
3. **Verified beats claimed.** If a fix cannot be verified on the affected surface in your
|
|
40
41
|
environment, the PR says so and uses `Refs #N`, not a green checkbox.
|
|
42
|
+
4. **E2E is the evidence layer.** A behavior change **that touches a Flow surface** needs an
|
|
43
|
+
e2e test — the one you ran, or the one you wrote. `tests/e2e/` already covers auth,
|
|
44
|
+
session, image, video, scene, data and batch; if nothing there represents your use case,
|
|
45
|
+
add a test that does. Read-only and inspection paths belong under `e2e_auth` and cost zero
|
|
46
|
+
credits, so "it's expensive" is almost never the reason. If you cannot run it, say why in
|
|
47
|
+
the PR and a maintainer will — a silently unticked box is what stalls a review. Changes
|
|
48
|
+
that touch no Flow surface at all (docs, help text, exit-code plumbing) are out of scope;
|
|
49
|
+
say that instead of leaving it blank.
|
|
41
50
|
|
|
42
51
|
The PR template's *Lifecycle* checklist mirrors this table. Tick what applies, strike what
|
|
43
52
|
does not, and say why — a reviewer can then start from your evidence instead of re-deriving it.
|
|
@@ -103,7 +112,22 @@ async def test_full_t2i_roundtrip(): ...
|
|
|
103
112
|
async def test_full_i2v_roundtrip(): ...
|
|
104
113
|
```
|
|
105
114
|
|
|
106
|
-
|
|
115
|
+
**E2E is required, not optional.** CI cannot run these — they need a live authenticated
|
|
116
|
+
profile — so the e2e layer is the one gate that only a human, or an agent with credentials,
|
|
117
|
+
can close. That makes it the contributor's job, not the maintainer's. A PR that changes
|
|
118
|
+
behavior **on a Flow surface** must either:
|
|
119
|
+
|
|
120
|
+
- **run an existing test** that already covers the use case — browse `tests/e2e/` — and
|
|
121
|
+
paste the result (redact account identifiers, emails and any token or cookie value); or
|
|
122
|
+
- **add a new one** when nothing covers it, marked `e2e` plus the cost sub-marker that fits.
|
|
123
|
+
|
|
124
|
+
Pick the cost sub-marker honestly — most inspection and auth paths are `e2e_auth` and spend
|
|
125
|
+
zero credits. Use the `e2e_profile_dir` / `e2e_env` fixtures in `tests/e2e/conftest.py`.
|
|
126
|
+
If you genuinely cannot run e2e (no Flow account, no credits for a video path), say so
|
|
127
|
+
explicitly in the PR and a maintainer will run it — but do not leave the box silently unticked.
|
|
128
|
+
|
|
129
|
+
CI runs `unit` + `integration` on every push. `e2e` tests require a live authenticated profile
|
|
130
|
+
and are excluded from the default run — select them with `-m e2e`:
|
|
107
131
|
|
|
108
132
|
```bash
|
|
109
133
|
export GFLOW_CLI_E2E_PROFILE=<profile-name> # name of a logged-in profile
|
|
@@ -14,11 +14,12 @@ Living list of behaviour that's broken, surprising, or limited by design — alo
|
|
|
14
14
|
|
|
15
15
|
## Open
|
|
16
16
|
|
|
17
|
-
### Flow is migrating to `flow.google.com`; gflow drives the migrated frontend for t2v (rest of the matrix pending)
|
|
17
|
+
### Flow is migrating to `flow.google.com`; gflow drives the migrated frontend for t2v and i2v from a local start frame (rest of the matrix pending)
|
|
18
18
|
|
|
19
|
-
- **Status:** Open (partially resolved) · **Severity:** High for everything except text-to-video · **Affected:** on accounts the rollout has reached, `gflow video t2v` now
|
|
19
|
+
- **Status:** Open (partially resolved) · **Severity:** High for everything except text-to-video and local-file image-to-video · **Affected:** on accounts the rollout has reached, `gflow video t2v` and `gflow video i2v --initial-frame <local file>` now run on the migrated host (with `--project`); an end frame, a frame by UUID or `@Name`, `image`, r2v, characters, scenes, extend, instructions and tools are not ported yet and still exit 36
|
|
20
20
|
- **Tracked:** [#639](https://github.com/ffroliva/gflow-cli/issues/639) · Reported 2026-09-02 against 0.59.0, 0.62.1, 0.63.0 and 0.65.0
|
|
21
21
|
- **Confirmed live 2026-09-03 on a second, independent account** (`ffroliva`) — see [LIVE_VERIFICATION_v0.66.0](docs/LIVE_VERIFICATION_v0.66.0.md). A read-only probe of the migrated origin measured `i_total: 0`, reproducing the reporter's central measurement.
|
|
22
|
+
- **Image commands on a moved account** ([#673](https://github.com/ffroliva/gflow-cli/issues/673), fixed in the unreleased line, post-v0.68.0): through v0.68.0 `image t2i` / `i2i` (and `upscale`, `extend`) died with exit 1 `RecaptchaError` within seconds, before any submit, instead of the exit 36 above, because the labs client minted the reCAPTCHA token on the `flow.google.com` project grid before any migration guard ran. The guard now runs at the mint. If you still see a `RecaptchaError` on a moved account right after `auth login`, that is the labs logged-out landing page from the [#644](https://github.com/ffroliva/gflow-cli/issues/644) cookie harvest, not this.
|
|
22
23
|
|
|
23
24
|
Google is moving Flow off Labs onto its own origin. On a migrated page load,
|
|
24
25
|
`https://labs.google/fx/tools/flow/project/<id>` redirects to
|
|
@@ -53,7 +54,20 @@ the clip). Two real clips were generated this way on 2026-09-05 — spike
|
|
|
53
54
|
(`GFLOW_CLI_FLOW_HOST=auto`): flow.google.com is the **default** host for that
|
|
54
55
|
command on every account — moved or not; `flow.google.com` forces it for
|
|
55
56
|
everything, and `labs.google` switches the migrated composer off. Limits today: `--project` is required (project creation from the
|
|
56
|
-
migrated editor is not ported), and only `t2v`
|
|
57
|
+
migrated editor is not ported), and only `t2v` and `i2v` from a local `--initial-frame` (no end frame,
|
|
58
|
+
no UUID/`@Name` frame — the migrated Frames picker exposes no media id in its DOM, so a frame is
|
|
59
|
+
found by file name after gflow uploads it through the editor) — everything else still exits 36.
|
|
60
|
+
|
|
61
|
+
**Models on the migrated host.** Its picker is driven for every tier the account's
|
|
62
|
+
menu actually renders, `veo-lite-lp` included — matched by the `[Lower Priority]`
|
|
63
|
+
tag alone, exactly as on labs.google. That entry was first captured on 2026-09-05
|
|
64
|
+
(`Veo 3.1 - Lite [Lower Priority]`, on an account whose picker was already defaulted
|
|
65
|
+
to it); matching stays on the tag, which survives Flow throttling a different tier. A tier whose matcher hits more than
|
|
66
|
+
one live entry is refused (exit 11) naming both, rather than bound by DOM order
|
|
67
|
+
([#539](https://github.com/ffroliva/gflow-cli/issues/539)). `veo-lite-lp` is
|
|
68
|
+
deliberately **not** a routing trigger: an account Flow has not moved keeps the
|
|
69
|
+
labs driver for it, since pulling a request onto the new host for a tier no
|
|
70
|
+
capture has seen would trade a working driver for an unverified one.
|
|
57
71
|
|
|
58
72
|
**Workaround for the rest:** none client-side. The handoff
|
|
59
73
|
is a per-account setting the labs.google app applies on every load (measured
|
|
@@ -699,13 +713,15 @@ A block that survives dismissal now aborts pre-submit with exit 23 (probe `overl
|
|
|
699
713
|
|
|
700
714
|
---
|
|
701
715
|
|
|
702
|
-
### No in-CLI quota visibility
|
|
716
|
+
### No in-CLI quota visibility — resolved
|
|
703
717
|
|
|
704
|
-
- **Status:**
|
|
718
|
+
- **Status:** Resolved 2026-09-05
|
|
705
719
|
|
|
706
|
-
`gflow
|
|
707
|
-
|
|
708
|
-
|
|
720
|
+
Use `gflow credits user` for the selected profile or `gflow credits list` for all saved
|
|
721
|
+
profiles. Both commands query Flow's current read-only credits endpoint with the saved browser
|
|
722
|
+
session; `--json` provides a stable automation contract. The equivalent MCP surface is
|
|
723
|
+
`gflow_get_credits`. The reported balance funds Veo video generation; image generation consumes
|
|
724
|
+
separate per-model daily quotas.
|
|
709
725
|
|
|
710
726
|
---
|
|
711
727
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.69.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
|
|
@@ -117,6 +117,9 @@ uv tool run --from gflow-cli playwright install chromium # one-time, ~150 MB
|
|
|
117
117
|
# 2 · Authenticate (one-time, opens a real Chrome window)
|
|
118
118
|
gflow auth login --browser chrome
|
|
119
119
|
|
|
120
|
+
# Check the current balance (or use `credits list` for every saved profile)
|
|
121
|
+
gflow credits user
|
|
122
|
+
|
|
120
123
|
# 3 · Generate
|
|
121
124
|
gflow image t2i "a hot air balloon over Tokyo at sunrise"
|
|
122
125
|
# or:
|
|
@@ -195,7 +198,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
|
|
|
195
198
|
|
|
196
199
|
**Current transport:** `ui_automation` drives Flow through a persistent Playwright Chromium profile. It is production-stable and verified end-to-end every release (see the per-release `LIVE_VERIFICATION_*` evidence files).
|
|
197
200
|
|
|
198
|
-
**Two Flow frontends:** Google is moving accounts from `labs.google` onto `flow.google.com` ([#639](https://github.com/ffroliva/gflow-cli/issues/639)) — same product, different widget toolkit and wire protocol (`batchexecute` instead of `aisandbox-pa`). `flow.google.com` is the default host for what gflow has ported to it — text-to-video today — on every account; the rest of the matrix keeps the labs driver until ported (`GFLOW_CLI_FLOW_HOST`, see [CONFIGURATION](docs/CONFIGURATION.md#gflow_cli_flow_host)).
|
|
201
|
+
**Two Flow frontends:** Google is moving accounts from `labs.google` onto `flow.google.com` ([#639](https://github.com/ffroliva/gflow-cli/issues/639)) — same product, different widget toolkit and wire protocol (`batchexecute` instead of `aisandbox-pa`). `flow.google.com` is the default host for what gflow has ported to it — text-to-video, and image-to-video from a local start frame, today — on every account; the rest of the matrix keeps the labs driver until ported (`GFLOW_CLI_FLOW_HOST`, see [CONFIGURATION](docs/CONFIGURATION.md#gflow_cli_flow_host)).
|
|
199
202
|
|
|
200
203
|
**What's blocked:** a pure HTTP transport for video generation. The video upload endpoint returns HTTP 401 under non-Chrome browsers plus a reCAPTCHA mint we cannot reproduce headlessly. Three earlier HTTP strategies (`evaluate_fetch`, `bearer`, `sapisidhash`) live under `src/gflow_cli/api/transports/experimental/` for research, off the production path.
|
|
201
204
|
|
|
@@ -46,6 +46,9 @@ uv tool run --from gflow-cli playwright install chromium # one-time, ~150 MB
|
|
|
46
46
|
# 2 · Authenticate (one-time, opens a real Chrome window)
|
|
47
47
|
gflow auth login --browser chrome
|
|
48
48
|
|
|
49
|
+
# Check the current balance (or use `credits list` for every saved profile)
|
|
50
|
+
gflow credits user
|
|
51
|
+
|
|
49
52
|
# 3 · Generate
|
|
50
53
|
gflow image t2i "a hot air balloon over Tokyo at sunrise"
|
|
51
54
|
# or:
|
|
@@ -124,7 +127,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
|
|
|
124
127
|
|
|
125
128
|
**Current transport:** `ui_automation` drives Flow through a persistent Playwright Chromium profile. It is production-stable and verified end-to-end every release (see the per-release `LIVE_VERIFICATION_*` evidence files).
|
|
126
129
|
|
|
127
|
-
**Two Flow frontends:** Google is moving accounts from `labs.google` onto `flow.google.com` ([#639](https://github.com/ffroliva/gflow-cli/issues/639)) — same product, different widget toolkit and wire protocol (`batchexecute` instead of `aisandbox-pa`). `flow.google.com` is the default host for what gflow has ported to it — text-to-video today — on every account; the rest of the matrix keeps the labs driver until ported (`GFLOW_CLI_FLOW_HOST`, see [CONFIGURATION](docs/CONFIGURATION.md#gflow_cli_flow_host)).
|
|
130
|
+
**Two Flow frontends:** Google is moving accounts from `labs.google` onto `flow.google.com` ([#639](https://github.com/ffroliva/gflow-cli/issues/639)) — same product, different widget toolkit and wire protocol (`batchexecute` instead of `aisandbox-pa`). `flow.google.com` is the default host for what gflow has ported to it — text-to-video, and image-to-video from a local start frame, today — on every account; the rest of the matrix keeps the labs driver until ported (`GFLOW_CLI_FLOW_HOST`, see [CONFIGURATION](docs/CONFIGURATION.md#gflow_cli_flow_host)).
|
|
128
131
|
|
|
129
132
|
**What's blocked:** a pure HTTP transport for video generation. The video upload endpoint returns HTTP 401 under non-Chrome browsers plus a reCAPTCHA mint we cannot reproduce headlessly. Three earlier HTTP strategies (`evaluate_fetch`, `bearer`, `sapisidhash`) live under `src/gflow_cli/api/transports/experimental/` for research, off the production path.
|
|
130
133
|
|
|
@@ -436,7 +436,7 @@ We attempted three pure-HTTP transport strategies before settling on `ui_automat
|
|
|
436
436
|
|
|
437
437
|
All three now live as standalone modules under `src/gflow_cli/api/transports/experimental/` (`evaluate_fetch.py` / `bearer.py` / `sapisidhash.py`), preserved for reference and future iteration. None survives Google's anti-bot stack for mutation/generation endpoints, so the production path is `ui_automation`.
|
|
438
438
|
|
|
439
|
-
**The migrated `flow.google.com` host (#639, v0.67.0).** Google is moving accounts off `labs.google` onto `flow.google.com`, a rewritten frontend with a different widget toolkit and a `batchexecute` wire instead of `aisandbox-pa` REST. `src/gflow_cli/api/transports/migrated_composer.py` drives that editor for text-to-video — still through the same real-Chrome Playwright session — by operating the composer UI and then *observing* the app's own `batchexecute` replies (`YhhmEf` submit, `jwpduf` status, `as29s` result) before downloading the clip. `GFLOW_CLI_FLOW_HOST` routes between the two (`auto` = migrated host for every request it can serve, `--project` required there); the rest of the command matrix keeps `ui_automation` on unmoved accounts and exits 36 on moved ones. Recon: `docs/superpowers/spikes/2026-09-05-migrated-host-wire-protocol.md`.
|
|
439
|
+
**The migrated `flow.google.com` host (#639, v0.67.0).** Google is moving accounts off `labs.google` onto `flow.google.com`, a rewritten frontend with a different widget toolkit and a `batchexecute` wire instead of `aisandbox-pa` REST. `src/gflow_cli/api/transports/migrated_composer.py` drives that editor for text-to-video and for image-to-video from a local start frame — still through the same real-Chrome Playwright session — by operating the composer UI and then *observing* the app's own `batchexecute` replies (`YhhmEf`/`eb1hJf` submit, `jwpduf` status, `as29s` result) before downloading the clip. A start frame goes in through the editor's own Upload entry (the app's `maseQ` reply names the media id — `migrated.frame_uploaded`), is bound in the Frames picker by file name (`migrated.frame_bound`), and the submit *request* is inspected for that id and an i2v model key before the run is trusted (`WireFormatError` otherwise); a modal over a fresh editor is closed first (`migrated.dialog_dismissed`). `GFLOW_CLI_FLOW_HOST` routes between the two (`auto` = migrated host for every request it can serve, `--project` required there); the rest of the command matrix keeps `ui_automation` on unmoved accounts and exits 36 on moved ones. Recon: `docs/superpowers/spikes/2026-09-05-migrated-host-wire-protocol.md`.
|
|
440
440
|
|
|
441
441
|
**Standalone-only transports.** `bearer` and `sapisidhash` discard any caller-supplied Playwright page and launch their own browser under a fresh `ProfileLease`, so they are **standalone-only** — they cannot run inside a `FlowApiClient` that already holds the profile lease (the second acquire would self-lock with `ProfileLockedError`). Selecting either via `GFLOW_CLI_TRANSPORT` (or the Python API) while the client owns the profile now fails fast with a clear `ConfigurationError` naming the transport, rather than the opaque lock error. `evaluate_fetch` is exempt: it reuses the client's shared page and takes no second lease. The standalone-only set lives in `STANDALONE_ONLY_TRANSPORTS` (`api/transports/__init__.py`); to drive `bearer`/`sapisidhash`, run them outside an owning client.
|
|
442
442
|
|
|
@@ -361,11 +361,11 @@ GFLOW_CLI_HISTORY_PROMPTS=redacted gflow image t2i "confidential brief"
|
|
|
361
361
|
|
|
362
362
|
**What:** Which Flow frontend gflow drives. Google is moving accounts from `labs.google/fx/tools/flow` onto `flow.google.com` one at a time ([#639](https://github.com/ffroliva/gflow-cli/issues/639)); the two are the same product on different widget toolkits and different wire protocols, so each has its own driver.
|
|
363
363
|
**Values:**
|
|
364
|
-
- `auto` (default) — **`flow.google.com` is the default host for every request it can serve today** (`video t2v` with `--project`), on moved and unmoved accounts alike — the new host serves both. A request the new host cannot serve yet keeps the labs driver on an unmoved account; a moved account has no labs to fall back to: other modes exit 36, a missing `--project` or a labs-only model exit 11.
|
|
364
|
+
- `auto` (default) — **`flow.google.com` is the default host for every request it can serve today** (`video t2v`, and `video i2v` from a local `--initial-frame` with no end frame, both with `--project`), on moved and unmoved accounts alike — the new host serves both. A request the new host cannot serve yet keeps the labs driver on an unmoved account; a moved account has no labs to fall back to: other modes exit 36, a missing `--project` or a labs-only model exit 11.
|
|
365
365
|
- `flow.google.com` — force the migrated composer for everything, including what it cannot serve yet (those requests then exit 36/11 instead of falling back).
|
|
366
366
|
- `labs.google` — never use the migrated composer; a moved account fails with exit 36 (kill switch).
|
|
367
367
|
**Default:** `auto`
|
|
368
|
-
**Scope today:** the migrated composer covers `gflow video t2v` with `--project <id>` (settings via the option groups, model picker, submit, status observed on the page's own `batchexecute` replies, download from the signed CDN URL).
|
|
368
|
+
**Scope today:** the migrated composer covers `gflow video t2v` and `gflow video i2v --initial-frame <local file>` with `--project <id>` (settings via the option groups, model picker, a local start frame uploaded through the editor's own Upload entry and bound in the Frames picker by file name, submit, status observed on the page's own `batchexecute` replies, download from the signed CDN URL). An end frame, a frame given by UUID or `@Name`, image, r2v, characters, scenes, extend, instructions and tools are not ported yet and exit 36 on a moved account. MCP inherits the setting from the server/daemon environment, not per call.
|
|
369
369
|
|
|
370
370
|
### `GFLOW_CLI_PREFER_CLASSIC` *(deprecated — use `GFLOW_CLI_UI_MODE=classic`)*
|
|
371
371
|
|
|
@@ -128,7 +128,9 @@ This repo is actively developed with Claude Code (see [CLAUDE.md](../CLAUDE.md))
|
|
|
128
128
|
|
|
129
129
|
- Claude branches are renamed to the appropriate `feature/`, `fix/`, `docs/` prefix before the PR is opened. The `claude/` prefix is internal scaffolding.
|
|
130
130
|
- Claude never bumps the version or cuts a release without explicit instruction — use `/release`.
|
|
131
|
-
- Claude opens PRs as **drafts** targeting `develop`.
|
|
131
|
+
- Claude opens PRs as **drafts** targeting `develop`. E2E evidence for any change touching a
|
|
132
|
+
Flow surface is part of the PR, not something the maintainer supplies afterwards (CONTRIBUTING
|
|
133
|
+
§ *Test categories*); the maintainer reviews, runs e2e only where the author could not, and merges.
|
|
132
134
|
- Commit messages never carry `Co-Authored-By: Claude` or any AI attribution — author credit is the human maintainer's only.
|
|
133
135
|
|
|
134
136
|
---
|
|
@@ -31,7 +31,7 @@ Welcome to the `gflow-cli` documentation. This index is the routing layer: it te
|
|
|
31
31
|
| **[docs/CONFIGURATION.md](CONFIGURATION.md)** | All env vars, precedence chain, default paths per OS | Tuning behaviour, picking output paths |
|
|
32
32
|
| **[docs/EXTERNAL_STORAGE.md](EXTERNAL_STORAGE.md)** | S3, MinIO, and Google Cloud Storage output configuration | Sending generated assets to a bucket instead of local disk |
|
|
33
33
|
| **[docs/USER_GUIDE.md](USER_GUIDE.md)** | Task-oriented walkthroughs (first setup, batch video, multi-image, log forensics, recovery, multi-account, migration) | You want to GET SOMETHING DONE — not look up a flag |
|
|
34
|
-
| **[docs/USAGE.md](USAGE.md)** | Command-by-command reference, manifest format, recipes, exit-code table | Day-to-day CLI use — look up specific commands / flags |
|
|
34
|
+
| **[docs/USAGE.md](USAGE.md)** | Command-by-command reference, credit-balance inspection, manifest format, recipes, exit-code table | Day-to-day CLI use — look up specific commands / flags |
|
|
35
35
|
| **[docs/ARCHITECTURE.md](ARCHITECTURE.md)** | Modular monolith, per-worker Page pool, RFC 9457 Problem Details, retry layer | Adding a feature or a new provider |
|
|
36
36
|
| **[docs/SECURITY.md](SECURITY.md)** | What secrets are stored where, threat model, hardening | Audit, code review, multi-user machines |
|
|
37
37
|
| **[docs/DATA_LAYER.md](DATA_LAYER.md)** | Local SQLite catalog: goals, schema, recording flow, redaction, `gflow data` CLI, migrations, extension guide | Anything touching `gflow_cli.data`, debugging missing rows, building I2V/repair tooling, auditing what is stored |
|
|
@@ -48,7 +48,7 @@ Welcome to the `gflow-cli` documentation. This index is the routing layer: it te
|
|
|
48
48
|
| **[docs/ASSET_TAGGING_RECON.md](ASSET_TAGGING_RECON.md)** | `@`-mention asset tagging research & integration design: what Flow's `@CharacterName`/`@me`/`@ingredient` tags are, how they map onto the already-verified `referenceEntities`/`referenceImages` wire, the H1-vs-H2 serialization hypothesis, the CLI-side mention-resolver proposal, and the pre-implementation capture spike plan | Working on inline `@` mentions in prompts, `video --character` reuse, or planning the mention-capture spike |
|
|
49
49
|
| **[tasks/lessons.md](../tasks/lessons.md)** | Running notebook of patterns + reviewer findings, dated and traced to commits | Starting a new phase; debugging "why did the council flag this?" |
|
|
50
50
|
| **[skills/README.md](../skills/README.md)** | Installable agent skill docs (gflow-cli, predict, pr-council-review, scenario) — cross-tool portable Markdown consumed by Claude Code, Cursor, Codex, Antigravity, Aider, etc. | Any agent wanting to use gflow-cli correctly |
|
|
51
|
-
| **[scripts/dev/skillopt/README.md](../scripts/dev/skillopt/README.md)** | SkillOpt mock harness — rollout→score loop for measuring and improving skill doc accuracy
|
|
51
|
+
| **[scripts/dev/skillopt/README.md](../scripts/dev/skillopt/README.md)** | SkillOpt mock harness — rollout→score loop for measuring and improving skill doc accuracy, against any OpenAI-compatible endpoint via the `GFLOW_CLI_LLM_*` settings | Measuring a skill edit's impact; comparing two models on gflow tasks |
|
|
52
52
|
| **[scripts/diag/README.md](../scripts/diag/README.md)** | Diagnostic investigation scripts — run against a live authenticated profile to capture wire samples, measure Chrome memory, or mint reCAPTCHA tokens | Running a one-off investigation against a live Flow session; establishing baseline measurements for issue #155 |
|
|
53
53
|
| [docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md](superpowers/specs/2026-07-04-pr-triage-autopilot-design.md) | PR-triage autopilot design spec: Stage 0/1 gate, Docker sandboxing, Telegram and audit ledger | Reviewing or auditing the automated PR-triage setup |
|
|
54
54
|
| [docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md](superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md) | Implementation plan for the PR-Triage Autopilot | Tracking task-by-task execution |
|
|
@@ -92,6 +92,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
|
|
|
92
92
|
**"I just installed gflow — how do I get to my first video?"** → [USER_GUIDE § Journey 1](USER_GUIDE.md#journey-1--first-time-setup-10-minutes)
|
|
93
93
|
**"How do I render 20 clips overnight?"** → [USER_GUIDE § Journey 3](USER_GUIDE.md#journey-3--batch-video-from-a-prompt-list-shell-loop)
|
|
94
94
|
**"How much will this batch cost me in Veo credits?"** → [USER_GUIDE § Journey 10](USER_GUIDE.md#journey-10--budgeting-credits-before-a-batch-run)
|
|
95
|
+
**"How many Veo credits remain on one or all profiles?"** → [USAGE § `gflow credits`](USAGE.md#gflow-credits)
|
|
95
96
|
**"How do I feed gflow outputs into ffmpeg / a pipeline?"** → [USER_GUIDE § Journey 11](USER_GUIDE.md#journey-11--wiring-gflow-outputs-into-a-downstream-pipeline)
|
|
96
97
|
**"How do I chain clips into one continuous video (initial-frame I2V)?"** → [USAGE § `gflow video chain`](USAGE.md#gflow-video-chain)
|
|
97
98
|
**"How do I stitch existing clips into one extended .mp4 (credit-free, no ffmpeg)?"** → [USAGE § `gflow scene`](USAGE.md#gflow-scene)
|
|
@@ -126,7 +127,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
|
|
|
126
127
|
**"My old assets re-upload / have no names?"** → run `gflow data sync --names` (credit-free name backfill from Flow's listing) — see [USAGE § `gflow data sync`](USAGE.md#gflow-data-sync)
|
|
127
128
|
**"How do I use this project's skills in Cursor / Codex / Antigravity / Aider?"** → [skills/README.md](../skills/README.md#use-with-other-agents)
|
|
128
129
|
**"How do I benchmark a skill doc against real tasks?"** → [scripts/dev/skillopt/README.md](../scripts/dev/skillopt/README.md)
|
|
129
|
-
**"How do I compare
|
|
130
|
+
**"How do I compare two models on gflow tasks?"** → set `GFLOW_CLI_LLM_BASE_URL` / `GFLOW_CLI_LLM_API_KEY` at any OpenAI-compatible endpoint, then `uv run python scripts/dev/skillopt/harness.py --model <id>` once per model (see [skillopt README](../scripts/dev/skillopt/README.md))
|
|
130
131
|
**"What does Chrome actually use in RAM during a generation?"** → run `uv run python scripts/diag/memory_profile.py --profile NAME` (see [scripts/diag/README.md](../scripts/diag/README.md))
|
|
131
132
|
**"How do I report a security issue?"** → [SECURITY § Reporting](SECURITY.md#reporting)
|
|
132
133
|
**"What branch do I work on? How do I name it?"** → [DEVELOPMENT § Branching model](DEVELOPMENT.md#branching-model)
|
|
@@ -148,7 +149,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
|
|
|
148
149
|
**"How do I upgrade gflow-cli?"** → [USAGE § `gflow update`](USAGE.md#gflow-update) (`gflow update` runs the installer that put it here — uv tool / pipx / pip; `--check` only reports; source installs are refused with exit 11)
|
|
149
150
|
**"How do I run the MCP server so an agent can't spend credits?"** → [CONFIGURATION § GFLOW_MCP_NO_SPEND](CONFIGURATION.md#gflow_mcp_no_spend) + [MCP § Option A2](MCP.md#option-a2-read-only-server) (`gflow mcp run --no-spend` / `GFLOW_MCP_NO_SPEND=1`; v0.57.0 — both generate tools go unregistered, not merely refused)
|
|
150
151
|
**"Which Flow UI arm does a run require, and why did it exit 2 or 28?"** → [CONFIGURATION § GFLOW_CLI_UI_MODE](CONFIGURATION.md#gflow_cli_ui_mode) (`auto` ≡ `classic` for **both** images and video — video since v0.57.0/#299, images since #595; unreachable classic aborts pre-submit with exit 28, $0; explicit `agentic` on video exits 2)
|
|
151
|
-
**"Which Flow frontend does a run drive — labs.google or the migrated flow.google.com — and why did it exit 36 or 11?"** → [CONFIGURATION § GFLOW_CLI_FLOW_HOST](CONFIGURATION.md#gflow_cli_flow_host) (`auto` = flow.google.com for every request it can serve — `t2v` with `--project`, on moved and unmoved accounts; `flow.google.com` forces it; `labs.google` is the kill switch. On a moved account everything except `t2v`
|
|
152
|
+
**"Which Flow frontend does a run drive — labs.google or the migrated flow.google.com — and why did it exit 36 or 11?"** → [CONFIGURATION § GFLOW_CLI_FLOW_HOST](CONFIGURATION.md#gflow_cli_flow_host) (`auto` = flow.google.com for every request it can serve — `t2v`, and `i2v` from a local `--initial-frame`, with `--project`, on moved and unmoved accounts; `flow.google.com` forces it; `labs.google` is the kill switch. On a moved account an end frame, a UUID/`@Name` frame and everything except `t2v`/`i2v` exit 36, non-retryable, and a missing `--project` exits 11) · recon: [migrated-host wire protocol](superpowers/spikes/2026-09-05-migrated-host-wire-protocol.md), [handoff mechanism](superpowers/spikes/2026-09-04-migrated-host-handoff-mechanism.md), [frames attach (i2v)](superpowers/spikes/2026-09-05-migrated-frames-attach.md) · evidence: [LIVE_VERIFICATION_v0.67.0](LIVE_VERIFICATION_v0.67.0.md) (t2v), [LIVE_VERIFICATION_v0.69.0](LIVE_VERIFICATION_v0.69.0.md) (i2v from a local start frame, v0.69.0)
|
|
152
153
|
**"Will this get my Google account flagged or banned? What protects me?"** → [ACCOUNT_SAFETY.md](ACCOUNT_SAFETY.md) — the operational answer in one place: rate limit vs WAF block vs ban (they are different), what the tool does to stay unremarkable (headed real Chrome, ±25% interaction jitter, 0.5–1.5 s submission pacing, one project per run, isolated profiles, refuse-don't-retry), what it deliberately does **not** do (no proxies, no fingerprint spoofing, no headless unlock), the knobs, the [#241](https://github.com/ffroliva/gflow-cli/issues/241) field data on what actually triggers a 403, and what we cannot promise. Legal statement: [DISCLAIMER](../DISCLAIMER.md)
|
|
153
154
|
|
|
154
155
|
**"I got a 403 / `PUBLIC_ERROR_UNUSUAL_ACTIVITY` — what now?"** → [ACCOUNT_SAFETY § When Google does push back](ACCOUNT_SAFETY.md#when-google-does-push-back) (stop, cool down 30–60 min, use real Chrome meanwhile, switch profile, widen jitter); cadence evidence in [DEBUGGING § WAF cadence](DEBUGGING.md#waf-cadence); full entry in [KNOWN_ISSUES](../KNOWN_ISSUES.md)
|
|
@@ -73,6 +73,32 @@ working, and the next update from another shell refreshes it.
|
|
|
73
73
|
both branches (`tests/test_cli_update.py`). A real interactive-terminal screenshot was
|
|
74
74
|
**not** taken this cycle.
|
|
75
75
|
|
|
76
|
+
## #670 — migrated submit-enable race (PR #672, @ChandraLiuswanto), verified on the flagged maintainer account
|
|
77
|
+
|
|
78
|
+
Folded into v0.68.0 from develop after the release branch was cut. The fix changes a real
|
|
79
|
+
generation path (`migrated_composer.submit_and_observe` now polls `is_enabled()` for up to
|
|
80
|
+
5 s after `insert_text`), so it was run for real on this machine at PR head `e3c3220`
|
|
81
|
+
(0.67.0 + the PR diff, built in a detached worktree), one veo-lite clip:
|
|
82
|
+
|
|
83
|
+
| # | Command | Profile / cohort | Result |
|
|
84
|
+
|---|---|---|---|
|
|
85
|
+
| 1 | `gflow video t2v "a paper crane unfolding on a wooden desk, soft morning light" --model veo-lite --aspect 16:9 --project c5550ed7-… --json` | ffroliva (flagged, en-GB), route `migrated` under `auto` | **exit 0, 60 s wall**, `MEDIA_GENERATION_STATUS_SUCCESSFUL` |
|
|
86
|
+
|
|
87
|
+
Five-layer ledger: one new mp4 (`44f890db-….mp4`); `ftyp` at offset 4; **1,578,650 B** =
|
|
88
|
+
the size the `jwpduf` / `as29s` records reported, ffprobe `h264 1280x720 8.000 s`; structlog
|
|
89
|
+
`migrated.dispatch → navigate → editor_ready → settings_applied → prompt_typed (17:51:15.810)
|
|
90
|
+
→ submit_clicked (17:51:16.165) → submit_observed (YhhmEf) → status ×7 → status 3 (bytes) →
|
|
91
|
+
as29s → download`, no `error_raised`; the media id and workflow id are in the run's
|
|
92
|
+
`result.json`. `prompt_typed → submit_clicked` = **355 ms**: the new poll ran through at least
|
|
93
|
+
one disabled read. On stock 0.67.0 this account submitted at ~200 ms and never hit the race,
|
|
94
|
+
which is why the v0.67.0 ledger was green while the reporter's account failed every run. A
|
|
95
|
+
first attempt with `--duration 8` on veo-lite aborted pre-submit with exit 11 at $0 — this
|
|
96
|
+
cohort renders no duration row for veo-lite (the v0.67.0 ledger's #650 finding, unrelated).
|
|
97
|
+
|
|
98
|
+
NOT verified: the reporter's account (only they can run it; their patched-wheel run in the
|
|
99
|
+
PR body covers it), an unmigrated account (none remains on this machine), and the MCP queued
|
|
100
|
+
path (no payload key changed; it reaches the identical `submit_and_observe`).
|
|
101
|
+
|
|
76
102
|
## Pre-tag gates (filled before signing)
|
|
77
103
|
|
|
78
104
|
| Gate | Result |
|
|
@@ -87,8 +113,17 @@ working, and the next update from another shell refreshes it.
|
|
|
87
113
|
|
|
88
114
|
## Post-tag evidence
|
|
89
115
|
|
|
90
|
-
|
|
91
|
-
|
|
116
|
+
| Item | Evidence |
|
|
117
|
+
|---|---|
|
|
118
|
+
| Tag | `v0.68.0` on `16ed7e2` (release branch head after folding #672), SSH-signed, `git tag -v` → "Good git signature" |
|
|
119
|
+
| Release workflow | https://github.com/ffroliva/gflow-cli/actions/runs/33984171793 — completed, success |
|
|
120
|
+
| GitHub Release | https://github.com/ffroliva/gflow-cli/releases/tag/v0.68.0 — published 2026-09-05T18:29:12Z, not a prerelease, 5 assets |
|
|
121
|
+
| PyPI | `pip index versions gflow-cli` → `gflow-cli (0.68.0)` |
|
|
122
|
+
| Release PR | #674 `chore/release-v0.68.0 → main`, 16 checks passing at the tagged head (SonarCloud included) |
|
|
123
|
+
|
|
124
|
+
Note for the next cycle: the tag was first created on 14f5742, then deleted locally and
|
|
125
|
+
re-signed on 16ed7e2 after PR #672 landed on develop during the doc-review pass. Nothing
|
|
126
|
+
had been pushed in between, so no published tag ever moved.
|
|
92
127
|
|
|
93
128
|
## NOT verified this cycle (recorded, not omitted)
|
|
94
129
|
|