gflow-cli 0.43.0__tar.gz → 0.45.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.45.0/.agents/plugins/marketplace.json +20 -0
- gflow_cli-0.45.0/.codex-plugin/plugin.json +34 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.pre-commit-config.yaml +3 -1
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/AGENTS.md +32 -1
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/CHANGELOG.md +137 -1
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/CONTRIBUTING.md +16 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/KNOWN_ISSUES.md +49 -16
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/PKG-INFO +2 -2
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/RELEASE.md +2 -1
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/CHARACTER.md +20 -10
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/CHARACTER_RECON.md +70 -0
- {gflow_cli-0.43.0/website → gflow_cli-0.45.0}/docs/CONFIGURATION.md +3 -3
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/DATA_LAYER.md +40 -5
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/INDEX.md +3 -1
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.43.0.md +3 -2
- gflow_cli-0.45.0/docs/LIVE_VERIFICATION_v0.44.0.md +37 -0
- gflow_cli-0.45.0/docs/LIVE_VERIFICATION_v0.45.0.md +138 -0
- {gflow_cli-0.43.0/website → gflow_cli-0.45.0}/docs/MOVIE.md +6 -3
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/PROJECT_STATUS.md +9 -2
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/USAGE.md +10 -7
- gflow_cli-0.45.0/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +130 -0
- gflow_cli-0.45.0/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +176 -0
- gflow_cli-0.45.0/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +126 -0
- gflow_cli-0.45.0/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +49 -0
- gflow_cli-0.45.0/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +198 -0
- gflow_cli-0.45.0/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +90 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/pyproject.toml +3 -3
- gflow_cli-0.45.0/scripts/dev/spike_character_prompt_format.py +121 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/gflow-cli/SKILL.md +2 -1
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/release/SKILL.md +12 -3
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/_cli_helpers.py +24 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/_retry.py +28 -5
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/client.py +100 -14
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/routes.py +1 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/ui_automation.py +500 -48
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/ui_automation_video.py +1 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli.py +2 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_character.py +14 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_data.py +123 -9
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_image.py +74 -12
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_movie.py +17 -12
- gflow_cli-0.45.0/src/gflow_cli/cli_project.py +214 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_video.py +56 -32
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/queries.py +79 -18
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/repository.py +99 -1
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/errors.py +27 -22
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/mcp/tools.py +46 -7
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/profile_lease.py +6 -2
- gflow_cli-0.45.0/src/gflow_cli/redaction.py +14 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/services/character_create.py +6 -0
- gflow_cli-0.45.0/tests/api/test_client_errors.py +113 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_generate_character.py +14 -2
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_retry.py +10 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_ui_automation.py +61 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_ui_character_editor.py +609 -52
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_character_create.py +51 -0
- gflow_cli-0.45.0/tests/cli/test_cli_data_errors_retention.py +202 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_image.py +1 -1
- gflow_cli-0.45.0/tests/cli/test_cli_image_uuid_ref_enrichment.py +218 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_movie.py +51 -8
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_video_chain.py +166 -7
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_error_handling.py +2 -2
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_helpers.py +54 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_chain_e2e.py +4 -2
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_character_create_e2e.py +84 -0
- gflow_cli-0.45.0/tests/e2e/test_image_uuid_ref_e2e.py +207 -0
- gflow_cli-0.45.0/tests/e2e/test_project_naming_e2e.py +184 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_image_steps.py +1 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_video_agent_ui_steps.py +16 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_video_chain_steps.py +54 -6
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/video_chain.feature +12 -2
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/test_cli_parity.py +6 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/test_tools_helpers.py +34 -0
- gflow_cli-0.45.0/tests/scripts/test_codex_plugin.py +73 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_incident_bundle_quality.py +3 -3
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/test_character_create_saga.py +34 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/test_character_gen_no_direct_post.py +1 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_cli_data.py +24 -0
- gflow_cli-0.45.0/tests/test_cli_project.py +212 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_data_queries.py +42 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_diagnostics_retention.py +7 -1
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_errors.py +69 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_json_output.py +2 -0
- gflow_cli-0.45.0/tests/test_overlay_banner_dismissal.py +174 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_profile_lease.py +22 -0
- gflow_cli-0.45.0/tests/test_self_documenting_errors.py +114 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/uv.lock +25 -25
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/CHARACTER.md +20 -10
- {gflow_cli-0.43.0 → gflow_cli-0.45.0/website}/docs/CONFIGURATION.md +3 -3
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/DATA_LAYER.md +40 -5
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/KNOWN_ISSUES.md +49 -16
- {gflow_cli-0.43.0 → gflow_cli-0.45.0/website}/docs/MOVIE.md +6 -3
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/USAGE.md +10 -7
- gflow_cli-0.43.0/docs/superpowers/plans/2026-07-22-private-incident-diagnostics/AUDIT.md +0 -116
- gflow_cli-0.43.0/docs/superpowers/plans/2026-07-22-private-incident-diagnostics/PLAN.md +0 -773
- gflow_cli-0.43.0/docs/superpowers/plans/2026-07-22-private-incident-diagnostics/SCENARIO.md +0 -207
- gflow_cli-0.43.0/docs/superpowers/specs/2026-07-22-private-incident-diagnostics-design.md +0 -605
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/README.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.env.template +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.gitattributes +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/dependabot.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.gitignore +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/.secrets.baseline +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/CLAUDE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/CONFIGURATION.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/LICENSE +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/README.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/ROADMAP.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/conftest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docker-compose.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/MCP.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/SECURITY.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/eval/pr_triage_eval.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/eval/pr_triage_fixtures.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/examples/README.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/index.html +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/llms.txt +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/README.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/autopilot/Dockerfile.triage +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/autopilot/entrypoint.sh +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/autopilot/pr_triage_gate.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/monitor_pr_38.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/README.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/live-verify/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/sonar-project.properties +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/_common.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/browser_manager.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/config.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/diagnostics.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/worker/codec.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_incidents.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/auth/test_real_chrome.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/conftest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_browser_manager.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_config.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_diagnostics_recorder.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_media.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/MCP.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/SECURITY.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/index.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/installation.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/onboarding-mockup.html +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/onboarding.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.45.0}/website/mkdocs.yml +0 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gflow-cli",
|
|
3
|
+
"interface": {
|
|
4
|
+
"displayName": "gflow-cli"
|
|
5
|
+
},
|
|
6
|
+
"plugins": [
|
|
7
|
+
{
|
|
8
|
+
"name": "gflow",
|
|
9
|
+
"source": {
|
|
10
|
+
"source": "local",
|
|
11
|
+
"path": "./"
|
|
12
|
+
},
|
|
13
|
+
"policy": {
|
|
14
|
+
"installation": "AVAILABLE",
|
|
15
|
+
"authentication": "ON_INSTALL"
|
|
16
|
+
},
|
|
17
|
+
"category": "Developer Tools"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gflow",
|
|
3
|
+
"version": "0.45.0",
|
|
4
|
+
"description": "Reusable development and operations workflows for gflow-cli",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "Flavio Oliva",
|
|
7
|
+
"url": "https://github.com/ffroliva"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://github.com/ffroliva/gflow-cli",
|
|
10
|
+
"repository": "https://github.com/ffroliva/gflow-cli",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"gflow-cli",
|
|
14
|
+
"codex",
|
|
15
|
+
"google-flow"
|
|
16
|
+
],
|
|
17
|
+
"skills": "./skills/",
|
|
18
|
+
"interface": {
|
|
19
|
+
"displayName": "gflow-cli",
|
|
20
|
+
"shortDescription": "Develop, validate, review, and operate gflow-cli.",
|
|
21
|
+
"longDescription": "Project workflows for planning, validation, issue handling, reviews, releases, and Google Flow CLI operations.",
|
|
22
|
+
"developerName": "Flavio Oliva",
|
|
23
|
+
"category": "Developer Tools",
|
|
24
|
+
"capabilities": [
|
|
25
|
+
"Interactive",
|
|
26
|
+
"Write"
|
|
27
|
+
],
|
|
28
|
+
"websiteURL": "https://github.com/ffroliva/gflow-cli",
|
|
29
|
+
"defaultPrompt": [
|
|
30
|
+
"Show the current gflow-cli task with $gflow:status.",
|
|
31
|
+
"Run the gflow-cli quality gates with $gflow:check."
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -23,8 +23,10 @@
|
|
|
23
23
|
default_stages: [pre-commit]
|
|
24
24
|
|
|
25
25
|
repos:
|
|
26
|
+
# Keep this rev in lockstep with the `ruff==` pin in pyproject.toml. A hook that
|
|
27
|
+
# formats with an older ruff than CI checks with will fight CI on every commit.
|
|
26
28
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
27
|
-
rev: v0.
|
|
29
|
+
rev: v0.16.0
|
|
28
30
|
hooks:
|
|
29
31
|
- id: ruff
|
|
30
32
|
args: [--fix]
|
|
@@ -81,6 +81,23 @@ These rules exist because docs alone don't bind under momentum: a "check open PR
|
|
|
81
81
|
- **If a claim can't be verified in the current environment, it's LIKELY — not CONFIRMED.** Keep the issue open, reference it with `Refs #N` (not `Closes #N`), and ship diagnostics rather than a blind fix. When you can't reproduce it, hand the fix to whoever can.
|
|
82
82
|
- **This project reverse-engineers a blackbox.** gflow-cli doesn't own Google Flow — it drives real Flow through inspected HAR/DOM/browser-log behavior. Offline checks (types, lint, unit/BDD tests) verify *our* code does what we think it does; they cannot verify Flow still behaves the way we captured it. Every feature that touches a generation path is **live-verified**, not just offline-tested, before it's called done — see `/gflow:live-verify`.
|
|
83
83
|
|
|
84
|
+
## Standard Workflow Sequence
|
|
85
|
+
|
|
86
|
+
All AI agents and harnesses working on `gflow-cli` follow this standard 10-phase pipeline from issue discovery to public release:
|
|
87
|
+
|
|
88
|
+
| Phase | Skill / Command | Purpose | Output Artifact |
|
|
89
|
+
|---|---|---|---|
|
|
90
|
+
| 1. Triage | `/gflow:issue-assessment <N>` | Read-only issue analysis & root cause hypothesis | `issue_assessment_<N>.md` |
|
|
91
|
+
| 2. Pre-Implementation | `/gflow:predict <proposal>` | Adversarial audit (D14 YAGNI, security, risks) | GO / CAUTION / STOP verdict |
|
|
92
|
+
| 3. BDD Scaffolding | `/gflow:scenario <feature>` | Edge-case explorer & BDD Gherkin spec | `Scenario:` blocks & test scaffold |
|
|
93
|
+
| 4. Implementation Plan | `/gflow:plan <feature>` | Task-by-task atomic implementation plan | `docs/superpowers/plans/<date>-<slug>/PLAN.md` |
|
|
94
|
+
| 5. Council Review | `/gflow:pr-council-review` / `llm-council` | Multi-dimensional audit across 6 core dimensions | Consensus verdict report |
|
|
95
|
+
| 6. Task Execution | `/gflow:status` | Track unchecked tasks during TDD execution | Next unchecked task |
|
|
96
|
+
| 7. Pre-Commit Quality | `/gflow:check` | The Impeccable Routine (hygiene, ruff, pyright, pytest) | All green local checks |
|
|
97
|
+
| 8. Live Verification | `/gflow:live-verify` | 5-layer proof against real Flow transport | `docs/LIVE_VERIFICATION_vX.Y.Z.md` |
|
|
98
|
+
| 9. PR & Issue Close | `/gflow:issue-resolve <N>` | PR, SonarCloud 0-issue gate, merge to develop | Closed GitHub issue |
|
|
99
|
+
| 10. Release Pipeline | `/gflow:release` | Version bump, signed tag (`git tag -s`), PyPI publish | Shipped release & back-merge |
|
|
100
|
+
|
|
84
101
|
## Skills reference (cross-tool)
|
|
85
102
|
|
|
86
103
|
The `skills/` directory ships installable agent skill docs in plain Markdown with YAML frontmatter. Any agent can consume them directly:
|
|
@@ -109,7 +126,21 @@ and must be resolvable by ANY agent via this file. Vendor directories hold thin
|
|
|
109
126
|
only (`.claude/commands/gflow/*.md` are pointers into `skills/`); never put protocol
|
|
110
127
|
content in a vendor directory.
|
|
111
128
|
|
|
112
|
-
**
|
|
129
|
+
**Codex CLI / desktop app:** install the repo's skills-only plugin from the repository root,
|
|
130
|
+
then start a new session:
|
|
131
|
+
|
|
132
|
+
```powershell
|
|
133
|
+
codex plugin marketplace add .
|
|
134
|
+
codex plugin add gflow@gflow-cli
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Invoke skills with Codex's `$` syntax, for example `$gflow:status`, `$gflow:check`, or
|
|
138
|
+
`$gflow:pr-council-review`. Codex reserves slash commands for its own command surface; the
|
|
139
|
+
Claude Code spelling `/gflow:*` is therefore intentionally not reproduced. The Codex IDE
|
|
140
|
+
extension does not currently load plugins, so IDE-only users should include the relevant
|
|
141
|
+
`skills/<name>/SKILL.md` directly.
|
|
142
|
+
|
|
143
|
+
**Cursor / Aider / Antigravity (`agy`):** paste or include the relevant `SKILL.md` in your system context. Note: in the `agy` TUI prompt, custom slash commands (e.g. `/gflow:pr-council-review`) are blocked by the TUI's command parser. Type them as plain text without the leading slash (e.g. `gflow:pr-council-review`, `gflow:branch-review`, or `gflow:check`) to trigger the corresponding agent skill workflow.
|
|
113
144
|
**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/`.
|
|
114
145
|
**Custom agents:** fetch `skills/gflow-cli/SKILL.md` into your knowledge base before answering gflow questions.
|
|
115
146
|
|
|
@@ -7,6 +7,140 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.45.0] — 2026-07-28
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **`gflow character create` binds portraits to the character again (#395).**
|
|
15
|
+
Two independent defects made every character generation land as a plain
|
|
16
|
+
project image, leaving the character empty:
|
|
17
|
+
1. **Overlay dismissal Escaped Flow's own UI.** `[role='dialog']` and
|
|
18
|
+
`[role='alert']` had been added to the overlay detector, but Flow's
|
|
19
|
+
character composer (and the media picker) carry those roles — so gflow
|
|
20
|
+
pressed Escape on the app itself, the generation went out without
|
|
21
|
+
`entityContext`, and Flow filed the image against the project with no
|
|
22
|
+
`parentEntityId`. Those two selectors are removed; `[role='banner']` and
|
|
23
|
+
the announcement matcher remain, so the original banner-dismissal intent
|
|
24
|
+
is intact.
|
|
25
|
+
2. **The character route could bounce back to the project page.** Flow
|
|
26
|
+
redirects `/project/{id}/character/{entityId}` when the entity is not yet
|
|
27
|
+
queryable — a race gflow loses by navigating immediately after
|
|
28
|
+
`flow.createEntity`. Because the project page also mounts a prompt box,
|
|
29
|
+
the old readiness check was satisfied on the wrong surface and the prompt
|
|
30
|
+
was typed into the **project** composer. gflow now verifies it actually
|
|
31
|
+
came to rest on the character route, re-navigating a few times and failing
|
|
32
|
+
loudly rather than generating on the wrong surface.
|
|
33
|
+
|
|
34
|
+
Verified live 2026-07-28 in both directions on the same account, plus a
|
|
35
|
+
read-back showing the character carrying its name and `thumbnail_media_id`.
|
|
36
|
+
The wire contract is documented in
|
|
37
|
+
[CHARACTER_RECON](docs/CHARACTER_RECON.md#entity-binding-entitycontext-captured-live-2026-07-28).
|
|
38
|
+
|
|
39
|
+
- **`gflow image i2i --ref <UUID>` no longer fails when the asset is out of the
|
|
40
|
+
picker's reach (#393).** Flow's media picker is scoped to the active project
|
|
41
|
+
and its search does **not** index media UUIDs (confirmed live 2026-07-27:
|
|
42
|
+
both UUID search tiers returned zero tiles), so a `--ref` pointing at an asset
|
|
43
|
+
in another project — or buried deep in a virtualised grid — could not be
|
|
44
|
+
selected, and a bare `--ref <uuid>` carried no local file to fall back on. The
|
|
45
|
+
CLI now resolves each UUID ref against the local catalog and attaches its
|
|
46
|
+
recorded file, so the transport uploads those exact bytes instead of failing
|
|
47
|
+
the run. Verified live as a controlled A/B on identical input: exit 9 before,
|
|
48
|
+
exit 0 with the upload fallback after. Enrichment is best-effort (unknown
|
|
49
|
+
asset, unavailable catalog, or deleted file leaves the ref untouched) and the
|
|
50
|
+
**fail-loud contract is unchanged** — a reference that cannot be bound still
|
|
51
|
+
aborts the generation rather than silently producing an unreferenced image.
|
|
52
|
+
- **A Flow web-app crash on the character-editor route is now reported as
|
|
53
|
+
such.** `gflow character create` surfaced Flow's client-side crash as
|
|
54
|
+
`RuntimeError: Character editor not ready: prompt textbox not visible`, which
|
|
55
|
+
blames a selector that was never on the page. The existing crash classifier is
|
|
56
|
+
now consulted at that gate too, yielding the typed, retryable `FlowAppError`
|
|
57
|
+
(exit 31). Observed live 2026-07-27 via the incident bundle's `ui.json`
|
|
58
|
+
(`title.category: flow_app_crash`).
|
|
59
|
+
- **Character binding failures say what actually happened.** When Flow returns a
|
|
60
|
+
workflow that is not bound to the character entity, the error read "Unexpected
|
|
61
|
+
response shape from Flow", sending readers after a wire-format bug. It now
|
|
62
|
+
states that Flow filed the image as a plain project image and the character
|
|
63
|
+
has no portrait. The guard remains strict — verified live that unbound runs
|
|
64
|
+
leave the entity as "Untitled Character" with a null thumbnail.
|
|
65
|
+
- **Tier-aware credit confirmations:** `gflow video chain` and `gflow movie run`
|
|
66
|
+
no longer present pending work as an exact one-credit-per-link/scene charge.
|
|
67
|
+
Plans, confirmation prompts, `--dry-run` output, Click help, and current docs
|
|
68
|
+
now report the count of *pending video operations* and direct operators to
|
|
69
|
+
Google Flow for current model/duration/tier pricing, which varies by account
|
|
70
|
+
tier and Flow policy. Execution, resume/stale accounting, `--yes`, JSON
|
|
71
|
+
output, flags, and exit codes are unchanged.
|
|
72
|
+
|
|
73
|
+
### Added
|
|
74
|
+
|
|
75
|
+
- **Top Banner & Modal Dismissal (#369):** Expanded `_detect_overlay` and
|
|
76
|
+
`_dismiss_blocking_overlays` in `ui_automation.py` to detect top banners,
|
|
77
|
+
alert bars, and announcement dialogs (`[role='banner']`, `[role='alert']`,
|
|
78
|
+
`[role='dialog']`, `div:has-text('What\'s new')`), force-clicking locale-stable
|
|
79
|
+
close/clear/Got-it buttons and falling back to Escape before automation tasks.
|
|
80
|
+
- **`gflow character create --format-prompt` (#383):** Opt-in flag that clicks
|
|
81
|
+
Flow's in-editor **Format** button before submitting, letting Flow rewrite the
|
|
82
|
+
prompt into its character prompt-engineering shape. Applies to both the face and
|
|
83
|
+
body slots. Best-effort by design — if the button is not found the prompt is
|
|
84
|
+
submitted as typed rather than failing the generation. The selector cascade is
|
|
85
|
+
anchored on the locale-stable `personal_recommendations` Material Symbols
|
|
86
|
+
ligature (confirmed against live DOM 2026-07-27), not the "Format" label, which
|
|
87
|
+
Flow localises to the Chrome profile language. Flow ships the button `disabled`
|
|
88
|
+
on an empty prompt, so the driver checks enabled-ness — a disabled button is
|
|
89
|
+
still *visible*, and clicking one would stall on Playwright's actionability wait.
|
|
90
|
+
- **Self-documenting error remediation & provider message pass-through (#380):** Added default `remediation_hint` strings across domain exception classes (`WireFormatError`, `ContentPolicyError`, `RateLimitError`, `DataStoreError`, `SceneConcatError`, `FrameExtractionError`), extracted and sanitized provider error messages from Google Flow tRPC/REST responses, and enriched MCP tool error envelopes and Rich CLI error displays with actionable recovery guidance at failure time.
|
|
91
|
+
|
|
92
|
+
## [0.44.0] — 2026-07-26
|
|
93
|
+
|
|
94
|
+
### Added
|
|
95
|
+
|
|
96
|
+
- **Dual-Side Project Naming & Management (`gflow project`)** (#381). Added
|
|
97
|
+
`gflow project` subcommand group (`list`, `show`, `rename`, `create`),
|
|
98
|
+
`--project-name` / `--project-title` options across `gflow image` and `gflow video`
|
|
99
|
+
generation commands, prompt slugging for scratch projects, and dual-side title sync
|
|
100
|
+
updating Google Flow's tRPC server/UI and local SQLite catalog in lockstep.
|
|
101
|
+
- **Namespaced Codex project skills.** The canonical workflows under `skills/`
|
|
102
|
+
now ship as a repo-local, skills-only Codex plugin. Register and install it
|
|
103
|
+
with `codex plugin marketplace add .` followed by
|
|
104
|
+
`codex plugin add gflow@gflow-cli`, then invoke workflows such as
|
|
105
|
+
`$gflow:status`, `$gflow:check`, and `$gflow:pr-council-review` in a new
|
|
106
|
+
Codex CLI or desktop-app session. Claude Code's `/gflow:*` commands and the
|
|
107
|
+
agent-agnostic skill files remain unchanged.
|
|
108
|
+
- **`gflow data errors` — bounded retention + export for failed-operation
|
|
109
|
+
history** (#345). `gflow data errors export [--older-than AGE] [-o FILE]`
|
|
110
|
+
dumps failed operations as JSONL (unbounded, newest-first) for offline
|
|
111
|
+
archival — also closing the export path deferred from #341. `gflow data
|
|
112
|
+
errors prune --older-than AGE [--dry-run]` deletes failures older than AGE
|
|
113
|
+
(`90d` / `24h` / `30m`); `--older-than` is **required** and there is no
|
|
114
|
+
automatic/background pruning — deletion is always an explicit operator
|
|
115
|
+
action. Both honor `--profile` and the exit-16 `DataStoreError` convention.
|
|
116
|
+
|
|
117
|
+
### Fixed
|
|
118
|
+
|
|
119
|
+
- **`gflow character create` safely activates the current Create-Body
|
|
120
|
+
composer.** Flow can autosave the body triptych over the stored portrait
|
|
121
|
+
prompt when the mode switch has not settled (observed live 2026-07-25 on
|
|
122
|
+
0.43.0). Current Flow reuses one Slate editor and exposes Create Body through
|
|
123
|
+
the locale-independent `accessibility_new` icon beside the portrait image;
|
|
124
|
+
gflow now clicks that scoped mode control, requires a new generated-face
|
|
125
|
+
reference chip to mount, and verifies the shared editor owns focus **before
|
|
126
|
+
any clearing or typing**. Readback failures abort before submit. The older
|
|
127
|
+
`add_2`/second-box cohort remains supported through its count-rise gate.
|
|
128
|
+
Post-type isolation still aborts before the credited submit. Live DOM
|
|
129
|
+
evidence and the one-box failure were captured on 2026-07-26. Face-only
|
|
130
|
+
creates are unchanged.
|
|
131
|
+
|
|
132
|
+
- **Profile-lock remediation message** now names the real cause and recovery.
|
|
133
|
+
`ProfileLockedError` (exit 11) previously told operators to "wait for it to
|
|
134
|
+
finish" — implying an unbounded wait — and to hunt for a `gflow`/Chrome
|
|
135
|
+
process. In practice a blocking lock is a kernel *advisory* lock held by a
|
|
136
|
+
**live** process (often a `python.exe` a `chrome.exe` scan misses); the OS
|
|
137
|
+
releases it the instant the holder dies, so a leftover lock *file* never
|
|
138
|
+
blocks acquisition. The message now points to the recorded owner PID
|
|
139
|
+
(surfaced locally since v0.43.0) and says to just retry when nothing is
|
|
140
|
+
running. The lock itself is unchanged — auto-reclaim was considered and
|
|
141
|
+
rejected as unsafe (an unlink→new-inode race could put two browsers on one
|
|
142
|
+
profile, the exact corruption the lease prevents). Refs #370.
|
|
143
|
+
|
|
10
144
|
## [0.43.0] — 2026-07-23
|
|
11
145
|
|
|
12
146
|
### Added
|
|
@@ -2332,7 +2466,9 @@ shell-script template that branches on these codes.
|
|
|
2332
2466
|
|
|
2333
2467
|
First skeleton. Not functional end-to-end yet.
|
|
2334
2468
|
|
|
2335
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
2469
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.45.0...HEAD
|
|
2470
|
+
[0.45.0]: https://github.com/ffroliva/gflow-cli/compare/v0.44.0...v0.45.0
|
|
2471
|
+
[0.44.0]: https://github.com/ffroliva/gflow-cli/compare/v0.43.0...v0.44.0
|
|
2336
2472
|
[0.43.0]: https://github.com/ffroliva/gflow-cli/compare/v0.42.0...v0.43.0
|
|
2337
2473
|
[0.42.0]: https://github.com/ffroliva/gflow-cli/compare/v0.41.0...v0.42.0
|
|
2338
2474
|
[0.41.0]: https://github.com/ffroliva/gflow-cli/compare/v0.40.0...v0.41.0
|
|
@@ -11,6 +11,22 @@ uv sync --extra dev
|
|
|
11
11
|
uv run playwright install chromium
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
+
### Codex project skills
|
|
15
|
+
|
|
16
|
+
Codex CLI and the Codex desktop app can install the repository's canonical `skills/`
|
|
17
|
+
workflows as the `gflow` plugin. From the repository root, run:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
codex plugin marketplace add .
|
|
21
|
+
codex plugin add gflow@gflow-cli
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Start a new Codex session after installation, then invoke a workflow with `$gflow:<skill>`
|
|
25
|
+
(for example, `$gflow:status`, `$gflow:check`, or `$gflow:pr-council-review`). Claude Code
|
|
26
|
+
continues to use the equivalent `/gflow:*` commands. The Codex IDE extension does not
|
|
27
|
+
currently load plugins; include the relevant `skills/<name>/SKILL.md` directly when using
|
|
28
|
+
that surface.
|
|
29
|
+
|
|
14
30
|
## Test-driven development (mandatory)
|
|
15
31
|
|
|
16
32
|
`gflow-cli` is built test-first. Every change must include tests, and CI rejects PRs that lower coverage.
|
|
@@ -31,22 +31,27 @@ targeted dismissal once the next occurrence is captured. **Workaround:**
|
|
|
31
31
|
re-run the command; open the project once manually in Chrome to consume the
|
|
32
32
|
banner.
|
|
33
33
|
|
|
34
|
-
###
|
|
35
|
-
|
|
36
|
-
- **Status:**
|
|
37
|
-
- **Severity:**
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
34
|
+
### Profile lock reported as "held by another process" with no obvious owner
|
|
35
|
+
|
|
36
|
+
- **Status:** Resolved ([#370](https://github.com/ffroliva/gflow-cli/issues/370)) · remediation message clarified
|
|
37
|
+
- **Severity:** Low (by design; fails closed — never corrupts) · **Affected:** `ProfileLease` acquisition (exit 11)
|
|
38
|
+
|
|
39
|
+
`ProfileLockedError` can surface when no `chrome.exe` / `gflow` process is
|
|
40
|
+
obvious. This is **working as intended, not a stale-file bug.** The profile
|
|
41
|
+
lock is a kernel *advisory* byte-range lock, which the OS releases the instant
|
|
42
|
+
its holder dies — so a leftover lock *file* can never block acquisition. If
|
|
43
|
+
`acquire` is blocked, a **live** process genuinely holds it, most often a
|
|
44
|
+
`python.exe` (a prior gflow run, or a pytest child that outlived its shell)
|
|
45
|
+
that a scan for `chrome.exe` misses. gflow deliberately never auto-deletes a
|
|
46
|
+
lock file or kills a recorded PID from metadata: an unlink→new-inode race could
|
|
47
|
+
put two browsers on one profile — the exact corruption the lease exists to
|
|
48
|
+
prevent. Since v0.43.0 contention reports the recorded owner's PID and observed
|
|
49
|
+
start time locally (metadata starts at offset 1 so Windows contenders can read
|
|
50
|
+
it while byte 0 is kernel-locked), and the remediation message now names the
|
|
51
|
+
live-owner reality and tells you to just retry when nothing is running.
|
|
52
|
+
**Workaround:** close the process at the PID the error prints
|
|
53
|
+
(`Get-Process -Id <pid>` / `ps -p <pid>`, then `Stop-Process -Id <pid>` /
|
|
54
|
+
`kill <pid>`), or use a different `--profile`.
|
|
50
55
|
|
|
51
56
|
### Unexplained image-generation HTTP 400 (observed live 2026-07-22)
|
|
52
57
|
|
|
@@ -819,6 +824,34 @@ gflow image batch ./batch-b.tsv --profile personal
|
|
|
819
824
|
|
|
820
825
|
## Resolved
|
|
821
826
|
|
|
827
|
+
### `character create` generated portraits that never bound to the character — RESOLVED in v0.45.0
|
|
828
|
+
|
|
829
|
+
- **Status:** Resolved ([#395](https://github.com/ffroliva/gflow-cli/issues/395)) · **Severity:** Was-High · **Was-affecting:** v0.44.0 and unreleased `develop` · **Fixed in:** v0.45.0
|
|
830
|
+
|
|
831
|
+
Every `gflow character create` spent an Imagen credit, produced an image, and
|
|
832
|
+
left the character empty ("Untitled Character", null thumbnail). Flow filed the
|
|
833
|
+
generation as an ordinary project image because the request carried no
|
|
834
|
+
`entityContext`. Two independent gflow defects caused it:
|
|
835
|
+
|
|
836
|
+
1. **Overlay dismissal Escaped Flow's own UI.** `[role='dialog']` and
|
|
837
|
+
`[role='alert']` had been added to the overlay detector, but Flow's character
|
|
838
|
+
composer — and the media picker — carry those roles. gflow pressed Escape on
|
|
839
|
+
the app itself and the submit lost its entity context.
|
|
840
|
+
2. **The character route could bounce to the project page.** Flow redirects
|
|
841
|
+
`/project/{id}/character/{entityId}` while the entity is not yet queryable
|
|
842
|
+
(gflow navigates immediately after `flow.createEntity`). The project page
|
|
843
|
+
also mounts a prompt box, so the readiness gate passed on the wrong surface
|
|
844
|
+
and the prompt was typed into the **project** composer.
|
|
845
|
+
|
|
846
|
+
Both are fixed: the two over-broad selectors are gone (banner detection intact),
|
|
847
|
+
and the transport now verifies it came to rest on the character route,
|
|
848
|
+
re-navigating and then failing loudly instead of generating on the wrong
|
|
849
|
+
surface. The `parentEntityId` guard that surfaced this was correct throughout —
|
|
850
|
+
it refused to report a portrait-less character as success.
|
|
851
|
+
|
|
852
|
+
Wire contract: [CHARACTER_RECON § entity binding](docs/CHARACTER_RECON.md#entity-binding-entitycontext-captured-live-2026-07-28).
|
|
853
|
+
Evidence: [LIVE_VERIFICATION_v0.45.0 §2](docs/LIVE_VERIFICATION_v0.45.0.md).
|
|
854
|
+
|
|
822
855
|
### `gflow video`'s manifest-driven batch subcommand didn't skip already-completed entries — RESOLVED as obsolete
|
|
823
856
|
|
|
824
857
|
- **Status:** Resolved (obsolete) · **Severity:** Was-Medium · **Was-affecting:** v0.2.0a1 through the command's removal · **Fixed in:** n/a — removed in production-readiness hardening (see `fix: remove nonfunctional video batch command`)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.45.0
|
|
4
4
|
Summary: Unofficial CLI for Google Flow — drive Veo image-to-video generations from the terminal.
|
|
5
5
|
Project-URL: Homepage, https://github.com/ffroliva/gflow-cli
|
|
6
6
|
Project-URL: Issues, https://github.com/ffroliva/gflow-cli/issues
|
|
@@ -58,7 +58,7 @@ Requires-Dist: numpy>=1.24; extra == 'dev'
|
|
|
58
58
|
Requires-Dist: pyright>=1.1.0; extra == 'dev'
|
|
59
59
|
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
|
|
60
60
|
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
61
|
-
Requires-Dist: ruff==0.
|
|
61
|
+
Requires-Dist: ruff==0.16.0; extra == 'dev'
|
|
62
62
|
Provides-Extra: gcs
|
|
63
63
|
Requires-Dist: gcsfs>=2024.2.0; extra == 'gcs'
|
|
64
64
|
Requires-Dist: universal-pathlib>=0.2.5; extra == 'gcs'
|
|
@@ -85,13 +85,14 @@ python -m pip install --pre gflow-cli
|
|
|
85
85
|
see the root-doc allowlist.)
|
|
86
86
|
6. Update the version in:
|
|
87
87
|
- `pyproject.toml`
|
|
88
|
+
- `.codex-plugin/plugin.json`
|
|
88
89
|
- `src/gflow_cli/__init__.py`
|
|
89
90
|
- any tests that assert the package version
|
|
90
91
|
7. Move user-visible changes from `CHANGELOG.md` `[Unreleased]` into a dated
|
|
91
92
|
release section.
|
|
92
93
|
8. Commit the release prep:
|
|
93
94
|
```bash
|
|
94
|
-
git add pyproject.toml src/gflow_cli/__init__.py CHANGELOG.md tests docs
|
|
95
|
+
git add pyproject.toml .codex-plugin/plugin.json src/gflow_cli/__init__.py CHANGELOG.md tests docs
|
|
95
96
|
git commit -m "chore(release): vX.Y.Z"
|
|
96
97
|
```
|
|
97
98
|
9. Tag and push. **Must be a signed annotated tag** (`-s`) — `.github/workflows/release.yml` rejects unsigned or lightweight tags. Requires a GPG or SSH signing key registered with your GitHub account.
|
|
@@ -38,12 +38,22 @@ seeding the second step with the first:
|
|
|
38
38
|
|
|
39
39
|
1. **Face (slot 0).** gflow submits your `--face-prompt` and Flow generates the **face** image. This becomes
|
|
40
40
|
the character's first reference image.
|
|
41
|
-
2. **Body (slot 1).** gflow
|
|
42
|
-
face image as the reference seed
|
|
41
|
+
2. **Body (slot 1).** gflow activates the editor's Create-Body mode, which **auto-attaches the just-generated
|
|
42
|
+
face image as the reference seed**. gflow then submits its **own self-contained
|
|
43
43
|
front/side/back triptych prompt** (it wraps your `--body-prompt` body/outfit description). Because the face
|
|
44
44
|
is attached as the seed, a **single credited generation** produces all three body angles — front, side, and
|
|
45
45
|
back — that match the face.
|
|
46
46
|
|
|
47
|
+
The character editor is a **two-mode surface** ("Portrait" / "Create Body"). Current Flow reuses one Slate
|
|
48
|
+
editor across both modes, so gflow anchors Create Body by the locale-independent `accessibility_new` icon
|
|
49
|
+
beside the portrait-image button and requires a new generated-face reference chip to mount before using the
|
|
50
|
+
shared box. Older cohorts that mount a second prompt box remain supported through a Slate-count-rise gate. In
|
|
51
|
+
both cases gflow verifies the selected
|
|
52
|
+
body box still owns focus **before clearing or typing**. If the structural mode signal or focus check fails,
|
|
53
|
+
the body step aborts before any autosaved prompt edit; post-type isolation failures abort before the credited
|
|
54
|
+
submit. This guards the race that corrupted a stored portrait prompt live on 2026-07-25/0.43.0. Re-run
|
|
55
|
+
`gflow character create` to retry; the saga reuses the entity and completed face slot (§4).
|
|
56
|
+
|
|
47
57
|
The result: two generations (face + body-triptych), the body kept on-model by the face seed. Everything else —
|
|
48
58
|
naming the character, setting the voice/personality, and saving — is free metadata (REST), not generation. See
|
|
49
59
|
§4 for the full saga and §6.2 for the wire payload.
|
|
@@ -269,7 +279,7 @@ is **shipped** (see the table below).
|
|
|
269
279
|
|
|
270
280
|
| Command | Maps to |
|
|
271
281
|
|---|---|
|
|
272
|
-
| `gflow character create --project <id> --name <name> --face-prompt … [--body-prompt …] [--voice <Name>] [--personality …] [--model nano2\|nanopro] [--profile …] [--locale en-US] [--json]` *(SHIPPED v0.12.0 — shipped option names; characters have NO aspect-ratio control)* | createEntity → gen face (slot 0) → commit_workflow → optional gen body (slot 1) → commit_workflow → patch_entity, via the persist-before-spend saga (§4). `--body-prompt` is a **body/outfit DESCRIPTION** — gflow wraps it in a self-contained **front/side/back triptych** instruction and seeds it with the generated face (auto-attached as the
|
|
282
|
+
| `gflow character create --project <id> --name <name> --face-prompt … [--body-prompt …] [--voice <Name>] [--personality …] [--model nano2\|nanopro] [--profile …] [--locale en-US] [--json]` *(SHIPPED v0.12.0 — shipped option names; characters have NO aspect-ratio control)* | createEntity → gen face (slot 0) → commit_workflow → optional gen body (slot 1) → commit_workflow → patch_entity, via the persist-before-spend saga (§4). `--body-prompt` is a **body/outfit DESCRIPTION** — gflow wraps it in a self-contained **front/side/back triptych** instruction and seeds it with the generated face (auto-attached as the body-mode reference), so one body generation yields all three angles. Generated images are **downloaded** to storage; the result reports each slot's local path. |
|
|
273
283
|
| `gflow character list --project <id> [--json]` *(SHIPPED v0.12.0)* | projectInitialData → entities[CHARACTER] |
|
|
274
284
|
| `gflow character show --project <id> (--id <entityId> \| --name <displayName>) [--json]` *(SHIPPED v0.12.0)* | projectInitialData (single); name collision → exit 11 with disambiguation hint |
|
|
275
285
|
| `gflow character voices [--json]` *(SHIPPED v0.12.0)* | list the 29 preset voices (name / description / sample-url); language-agnostic discovery, mirrors `gflow models --json` |
|
|
@@ -403,7 +413,7 @@ Built by `routes.character_editor_url(locale, projectId, entityId)`. The **`/fx/
|
|
|
403
413
|
without it Flow 404s (caught by spike T-A; the fix sourced the URL from `LABS_FX_BASE`). Navigating to this
|
|
404
414
|
URL (not the new-project flow) is what makes Flow's JS set `entityContext` on the generation. Name / voice /
|
|
405
415
|
personality are REST `PATCH flow/entities`. The only *new* generation selectors are the prompt/submit (already
|
|
406
|
-
owned by gflow) and the
|
|
416
|
+
owned by gflow) and the body-mode activation/settle signals.
|
|
407
417
|
|
|
408
418
|
| Purpose | Selector | Conf. |
|
|
409
419
|
|---|---|---|
|
|
@@ -413,7 +423,7 @@ owned by gflow) and the slot-add.
|
|
|
413
423
|
| Name field | `input[placeholder]` — localized placeholder; **do NOT rely on the text** (structural: it is the editor's lone placeholdered input) | **VERIFIED** |
|
|
414
424
|
| Personality field | the panel `textarea` (localized placeholder) — **prefer REST PATCH** | **VERIFIED** |
|
|
415
425
|
| Slot 0 image (face) | aria-label `"Imagem do personagem 1"` — **localized**, note only (do not load-bear on the text) | med (localized) |
|
|
416
|
-
| **
|
|
426
|
+
| **Body mode (slot 1)** | Current cohort: portrait-image sibling `button:has(img) + button:has(i.google-symbols:text-is('accessibility_new'))`; settle signal: a newly mounted generated-media card with an `img` and exact `cancel` icon. Legacy cohort fallback: icon-only `[role=button]` carrying exact `add_2`, followed by Slate-box count rise. No localized button text or positional index. | **VERIFIED** live 2026-07-26 |
|
|
417
427
|
| Model picker (char editor) | `button[aria-haspopup='menu']:has(i.google-symbols:text-is('arrow_drop_down'))` *(normal editor uses `crop_16_9`)* | **VERIFIED** |
|
|
418
428
|
| Voice picker | `voice_selection` google-symbols ligature | **VERIFIED** (ligature) |
|
|
419
429
|
| Personagens nav (project) | `button:has(i.google-symbols:text-is('accessibility_new'))` (cards are `div[role=button]`; tag disambiguates) | high |
|
|
@@ -421,10 +431,10 @@ owned by gflow) and the slot-add.
|
|
|
421
431
|
| Picker tab → Personagens | `[role=dialog] button[role=tab]:has(i.google-symbols:text-is('accessibility_new'))` | high |
|
|
422
432
|
| **Picker "include in command"** | primary `button` in the dialog footer — **no ligature → structural anchor (last/primary dialog button)**; only appears *after* an option is selected | low ⚠️ |
|
|
423
433
|
|
|
424
|
-
⚠️ **Documented risk (Task-12 e2e):** the
|
|
425
|
-
|
|
426
|
-
locale. Slot 0's `"Imagem do personagem N"`
|
|
427
|
-
load-bearing selector.
|
|
434
|
+
⚠️ **Documented risk (Task-12 e2e):** the picker include button (no ligature, localized text only) remains a
|
|
435
|
+
positional/structural anchor to confirm under a live non-EN locale. Body mode no longer uses the stale
|
|
436
|
+
`.nth(1)` selector; its mode and settle icons are locale-independent. Slot 0's `"Imagem do personagem N"`
|
|
437
|
+
aria-label is **localized** — used as a note, never as a load-bearing selector.
|
|
428
438
|
|
|
429
439
|
Shared chrome already automated by gflow (reuse as-is): `add_2` (+/Criar add-media → opens picker),
|
|
430
440
|
`arrow_forward` (submit), the Slate prompt box, model dropdown, `check`/Concluir.
|
|
@@ -472,7 +482,7 @@ table → test mapping):
|
|
|
472
482
|
|
|
473
483
|
**Remaining LIVE-e2e-only (Task 12):** the live binding/recovery/UTF-8 e2e on denon82 — real
|
|
474
484
|
`parentEntityId == entityId` against Flow's wire, mid-saga crash recovery against the real DB, and the
|
|
475
|
-
|
|
485
|
+
body-mode icon/reference settle signals + picker-include structural selectors under a non-EN locale.
|
|
476
486
|
|
|
477
487
|
## 13.1 Known issues
|
|
478
488
|
|
|
@@ -82,6 +82,76 @@ calls on the same `workflowId`, chaining `imageInputs` (BASE_IMAGE = prior outpu
|
|
|
82
82
|
This is the SAME endpoint family gflow's existing image transport already drives — the new bits are
|
|
83
83
|
`tool:"PINHOLE"`, `imageInputs` types, and the `parentEntityId`/workflow binding.
|
|
84
84
|
|
|
85
|
+
## Entity binding: `entityContext` (captured live 2026-07-28)
|
|
86
|
+
|
|
87
|
+
**The generation request must carry `entityContext`, or Flow files the image as a
|
|
88
|
+
plain project image and the character stays empty.** Captured from Flow's own UI
|
|
89
|
+
via a CDP-attached real Chrome (`gflow-agent-browser-spike`, `navigator.webdriver:
|
|
90
|
+
false`) while driving the plain **New Character** flow.
|
|
91
|
+
|
|
92
|
+
`POST /v1/projects/{projectId}/flowMedia:batchGenerateImages`
|
|
93
|
+
|
|
94
|
+
```jsonc
|
|
95
|
+
{
|
|
96
|
+
"clientContext": { "projectId": "…", "tool": "PINHOLE", "sessionId": "…" },
|
|
97
|
+
"mediaGenerationContext": {
|
|
98
|
+
"batchId": "…",
|
|
99
|
+
"entityContext": {
|
|
100
|
+
"entityId": "1e6c558e-87be-4aa7-8a21-ffb7efa43bbd",
|
|
101
|
+
"characterSlot": { "imageReferenceIndex": 0 } // 0 = portrait/face, 1 = body
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"useNewMedia": true,
|
|
105
|
+
"requests": [ { "imageModelName": "NARWHAL", "structuredPrompt": {…}, "seed": …, "imageInputs": [] } ]
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Response — bound on the first try:
|
|
110
|
+
|
|
111
|
+
```jsonc
|
|
112
|
+
"workflows": [ { "name": "30551aa7-…", "projectId": "…", "parentEntityId": "1e6c558e-…" } ]
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Which surface produces it
|
|
116
|
+
|
|
117
|
+
The composer Flow renders depends on whether the character already HAS a
|
|
118
|
+
portrait, not on which URL you arrived by:
|
|
119
|
+
|
|
120
|
+
| Character state | Composer placeholder | Sends `entityContext`? |
|
|
121
|
+
|---|---|---|
|
|
122
|
+
| Empty (no portrait yet) | *"Describe your character…"* | **Yes** — this is the creation composer, on `/characters` **and** on `/character/{entityId}` |
|
|
123
|
+
| Populated (portrait exists) | *"What do you want to change?"* | Edit surface — refines the existing portrait |
|
|
124
|
+
|
|
125
|
+
Both entry points reach the creation composer for an empty character, and both
|
|
126
|
+
bind. Verified live 2026-07-28: driving `/project/{id}/character/{entityId}` for
|
|
127
|
+
a pre-created empty entity produced `entityContext` in the request and
|
|
128
|
+
`parentEntityId` in the response — including for an entity gflow itself had
|
|
129
|
+
created minutes earlier. Entity age is not a factor.
|
|
130
|
+
|
|
131
|
+
`flow.createEntity` may be called by Flow (the **New Character** flow does it
|
|
132
|
+
itself, returning `displayName: "Untitled Character"`) or by the client
|
|
133
|
+
beforehand; gflow pre-creates and deep-links, which is fine. After the
|
|
134
|
+
generation Flow issues `PATCH /v1/flowWorkflows/{id}` twice
|
|
135
|
+
(`metadata.displayName`, then `metadata.primaryMediaId`) — the same commit gflow
|
|
136
|
+
already performs. Flow never asks for a name up front: the user renames
|
|
137
|
+
afterwards via the ✏️ next to the title, and "Character Info (optional)"
|
|
138
|
+
(*"Describe how your character acts…"*) is a separate free-text field.
|
|
139
|
+
|
|
140
|
+
**What actually broke gflow (#395)** was therefore NOT the choice of entry
|
|
141
|
+
point. Two client-side defects suppressed `entityContext` on a surface that
|
|
142
|
+
would otherwise have sent it:
|
|
143
|
+
|
|
144
|
+
1. **Overlay dismissal pressed Escape on the composer.** `[role='dialog']` and
|
|
145
|
+
`[role='alert']` in the overlay detector matched Flow's own character
|
|
146
|
+
composer (and the media picker), so gflow dismissed the app itself.
|
|
147
|
+
2. **The character route could bounce back to the project page** while the
|
|
148
|
+
entity was not yet queryable. The project page also mounts a prompt box, so
|
|
149
|
+
the readiness gate passed on the wrong surface and the prompt was typed into
|
|
150
|
+
the **project** composer.
|
|
151
|
+
|
|
152
|
+
With both fixed, the deep-linked editor binds reliably. See
|
|
153
|
+
[LIVE_VERIFICATION_v0.45.0 §2](LIVE_VERIFICATION_v0.45.0.md).
|
|
154
|
+
|
|
85
155
|
## Gaps
|
|
86
156
|
|
|
87
157
|
1. ✅ **RESOLVED — Entity create.** `POST /fx/api/trpc/flow.createEntity` `{json:{projectId}}` →
|
|
@@ -343,9 +343,9 @@ each link in turn, so total wallclock is the sum of all link waits).
|
|
|
343
343
|
|---|---|---|
|
|
344
344
|
| `--model` | `veo-lite` | `veo-lite` / `veo-fast` / `veo-quality` / `veo-lite-lp`. `omni-flash` is rejected — it can't seed i2v links (issue #125). |
|
|
345
345
|
| `--max-links N` | unset | Cap link count; exit 11 (`ConfigurationError`) if the manifest has more. A spend guardrail. |
|
|
346
|
-
| `-y` / `--yes` | off | Skip the
|
|
347
|
-
| `--dry-run` | off | Print the
|
|
348
|
-
| `--resume-from CHAIN_ID` | unset | Resume a prior chain by its id; already-
|
|
346
|
+
| `-y` / `--yes` | off | Skip the pending video operation confirmation prompt. |
|
|
347
|
+
| `--dry-run` | off | Print the pending video operation plan and submit nothing. |
|
|
348
|
+
| `--resume-from CHAIN_ID` | unset | Resume a prior chain by its id; already-completed links are skipped (not regenerated). |
|
|
349
349
|
| `--jitter F` | `0.0` | Random `0..F` second pause **between** links (anti-bot cadence; never before link 0). |
|
|
350
350
|
| `--seed-offset MS` | `0` | Extract the seed frame this many ms before EOF (fade-to-black guard). |
|
|
351
351
|
| `--aspect` | `9:16` | `9:16` / `16:9`. Applied uniformly to every link (continuity requirement). |
|