gflow-cli 0.35.0__tar.gz → 0.37.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.37.0/.claude/commands/gflow/llm-council.md +13 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.env.template +14 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.github/workflows/ci.yml +19 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.pre-commit-config.yaml +22 -3
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/AGENTS.md +1 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/CHANGELOG.md +31 -1
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/PKG-INFO +1 -1
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/AGENT_UI_RECON.md +10 -4
- gflow_cli-0.37.0/docs/CONFIGURATION.md +429 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/GITHUB.md +20 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/INDEX.md +2 -1
- gflow_cli-0.37.0/docs/LIVE_VERIFICATION_v0.36.0.md +46 -0
- gflow_cli-0.37.0/docs/LIVE_VERIFICATION_v0.37.0.md +39 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/PROJECT_STATUS.md +8 -1
- gflow_cli-0.37.0/docs/SECURITY.md +259 -0
- gflow_cli-0.37.0/docs/superpowers/plans/2026-07-16-agentic-count-enforcement/PLAN.md +482 -0
- gflow_cli-0.37.0/docs/superpowers/plans/2026-07-16-agentic-count-enforcement-rework/PLAN.md +690 -0
- gflow_cli-0.37.0/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +73 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/pyproject.toml +1 -1
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/ci/check_materiality.py +16 -0
- gflow_cli-0.37.0/scripts/dev/sonar-local-scan.sh +41 -0
- gflow_cli-0.37.0/scripts/dev/sonar-pre-push-gate.sh +33 -0
- gflow_cli-0.37.0/scripts/dev/spike_issue313_agent_mode_controls.py +213 -0
- gflow_cli-0.37.0/skills/llm-council/SKILL.md +72 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/_cli_helpers.py +22 -7
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/_sapisidhash.py +3 -1
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/client.py +24 -2
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/drivers/agentic.py +252 -10
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/ui_automation.py +48 -37
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/ui_automation_video.py +91 -2
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/auth/internal_chromium.py +3 -1
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/auth/real_chrome.py +1 -1
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/config.py +28 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/json_output.py +16 -11
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/mcp/server.py +0 -4
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/mcp/tools.py +2 -1
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/tools/expander.py +59 -92
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/tools/invocation.py +1 -1
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/tools/runtime.py +72 -70
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/ui/app.py +3 -1
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_client_launch_kwargs.py +60 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/drivers/test_agentic.py +317 -5
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/test_ui_automation.py +69 -2
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/auth/strategies/test_strategies.py +4 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_error_handling.py +146 -0
- gflow_cli-0.37.0/tests/e2e/test_agentic_count_enforcement_e2e.py +193 -0
- gflow_cli-0.37.0/tests/e2e/test_entity_smuggling_e2e.py +91 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/scripts/test_check_materiality.py +20 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_json_output.py +16 -2
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/tools/test_expander.py +57 -0
- gflow_cli-0.37.0/tests/tools/test_runtime.py +222 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/uv.lock +1 -1
- gflow_cli-0.37.0/website/docs/ARCHITECTURE.md +414 -0
- gflow_cli-0.37.0/website/docs/AUTHENTICATION.md +412 -0
- gflow_cli-0.37.0/website/docs/CHARACTER.md +506 -0
- gflow_cli-0.37.0/website/docs/DATA_LAYER.md +463 -0
- gflow_cli-0.37.0/website/docs/DEBUGGING.md +228 -0
- gflow_cli-0.37.0/website/docs/DEVELOPMENT.md +138 -0
- gflow_cli-0.37.0/website/docs/E2E_TESTING.md +272 -0
- gflow_cli-0.37.0/website/docs/EXTERNAL_STORAGE.md +140 -0
- gflow_cli-0.37.0/website/docs/INSTRUCTIONS.md +169 -0
- gflow_cli-0.37.0/website/docs/KNOWN_ISSUES.md +964 -0
- gflow_cli-0.37.0/website/docs/MCP.md +182 -0
- gflow_cli-0.37.0/website/docs/MOVIE.md +242 -0
- gflow_cli-0.37.0/website/docs/PROMPT_EXPANSION.md +247 -0
- gflow_cli-0.37.0/website/docs/TOOLS.md +301 -0
- gflow_cli-0.37.0/website/docs/USAGE.md +1386 -0
- gflow_cli-0.37.0/website/docs/USER_GUIDE.md +943 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/website/docs/agents.md +1 -1
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/website/docs/installation.md +3 -3
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/website/docs/quickstart.md +2 -2
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/website/mkdocs.yml +21 -4
- gflow_cli-0.35.0/tests/tools/test_runtime.py +0 -64
- gflow_cli-0.35.0/website/docs/authentication.md +0 -29
- gflow_cli-0.35.0/website/docs/known-issues.md +0 -29
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/README.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.gitattributes +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.github/dependabot.yml +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.gitignore +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/.secrets.baseline +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/CLAUDE.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/CONFIGURATION.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/GEMINI.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/KNOWN_ISSUES.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/LICENSE +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/PLAN.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/README.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/RELEASE.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/ROADMAP.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/conftest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docker-compose.yml +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/CHARACTER.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/MCP.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/USAGE.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/examples/README.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/index.html +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/llms.txt +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/README.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/monitor_pr_38.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/smoke_real_chrome_image.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/README.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/gflow-cli/SKILL.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/release/SKILL.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/sonar-project.properties +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/routes.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/_common.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/browser_manager.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/cli.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/cli_video.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/errors.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/manifest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/conftest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/mcp/test_cli_parity.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_browser_manager.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_config.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_errors.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_errors_403.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_manifest.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_media.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0/website}/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0/website}/docs/SECURITY.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/website/docs/index.md +0 -0
- {gflow_cli-0.35.0 → gflow_cli-0.37.0}/website/docs/stylesheets/extra.css +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run pr-council-review (PR or branch mode) plus an external-tools corroboration layer (codex, gemini, opt-in agy) for high-stakes reviews where a same-model-family blind spot is a real risk. Tiers: small (internal only, default) / medium (+codex) / high (+codex+gemini). Wrapper around skills/llm-council/SKILL.md.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# `/gflow:llm-council [PR# | --base <ref>] [--tier small|medium|high] [--include-agy]`
|
|
6
|
+
|
|
7
|
+
**Read `skills/llm-council/SKILL.md` and follow its protocol now**, treating `$ARGUMENTS` as: the PR number or `--base <ref>` (branch mode, same as `/gflow:pr-council-review` / `/gflow:branch-review`), plus `--tier <small|medium|high>` (default `small`) and the optional `--include-agy` flag.
|
|
8
|
+
|
|
9
|
+
> Do **not** call `Skill(skill="llm-council")` or `Skill(skill="pr-council-review")` — the repo's `skills/*/SKILL.md` files are plain Markdown, not registered as Skill-tool-invocable (only `.claude/commands/gflow/*` are). Invoking either errors with `Unknown skill: ...`. Read the files directly instead.
|
|
10
|
+
|
|
11
|
+
`skills/llm-council/SKILL.md` is the canonical body: tier resolution, the tool registry (fixed invocation recipes per external tool — read this before running any external tool, `codex review` in particular is a known trap), the availability-probe step, dispatch flow, and synthesis. It wraps `skills/pr-council-review/SKILL.md` unchanged for the internal dimension council.
|
|
12
|
+
|
|
13
|
+
Siblings: `/gflow:pr-council-review <N>` (internal-only, PR mode), `/gflow:branch-review` (internal-only, branch mode) — use either directly when external corroboration isn't warranted.
|
|
@@ -155,6 +155,20 @@
|
|
|
155
155
|
# derivation (tab title / page hints) fails.
|
|
156
156
|
# GFLOW_CLI_PROJECT_NAME=
|
|
157
157
|
|
|
158
|
+
# -----------------------------------------------------------------------------
|
|
159
|
+
# Debugging (opt-in only — both can expose secrets, see docs/CONFIGURATION.md)
|
|
160
|
+
# -----------------------------------------------------------------------------
|
|
161
|
+
|
|
162
|
+
# Captures full Playwright network traffic (requests, responses, headers,
|
|
163
|
+
# cookies) to this HAR file for the session. SECURITY: a HAR file contains
|
|
164
|
+
# live auth cookies and bearer tokens -- never share one publicly.
|
|
165
|
+
# GFLOW_CLI_HAR_PATH=
|
|
166
|
+
|
|
167
|
+
# Prints the real exception message + traceback for unhandled errors, to the
|
|
168
|
+
# console and (under --json) into the payload, instead of the generic
|
|
169
|
+
# placeholder. SECURITY: may leak tokens/cookies present in exception text.
|
|
170
|
+
# GFLOW_CLI_DEBUG_TRACEBACK=
|
|
171
|
+
|
|
158
172
|
# -----------------------------------------------------------------------------
|
|
159
173
|
# Headless Daemon (gflow serve)
|
|
160
174
|
# -----------------------------------------------------------------------------
|
|
@@ -115,7 +115,26 @@ jobs:
|
|
|
115
115
|
name: coverage-xml
|
|
116
116
|
continue-on-error: true # graceful if coverage upload was skipped
|
|
117
117
|
|
|
118
|
+
# SonarCloud is a third-party service; it does have outages (seen live
|
|
119
|
+
# 2026-07-16, ~504s across its whole API including the unauthenticated
|
|
120
|
+
# /api/system/status endpoint). Reassessed fresh on every run — no manual
|
|
121
|
+
# flag to remember to flip back once it recovers. A skip here still lets
|
|
122
|
+
# the job COMPLETE (green), it just doesn't run the scan step; local
|
|
123
|
+
# coverage during an outage comes from the shared SonarQube instance
|
|
124
|
+
# (scripts/dev/sonar-local-scan.sh) — see docs/GITHUB.md § SonarCloud
|
|
125
|
+
# outage handling.
|
|
126
|
+
- name: Check SonarCloud availability
|
|
127
|
+
id: sonarcloud_health
|
|
128
|
+
run: |
|
|
129
|
+
if curl -sf -m 10 "https://sonarcloud.io/api/system/status" | grep -q '"status":"UP"'; then
|
|
130
|
+
echo "up=true" >> "$GITHUB_OUTPUT"
|
|
131
|
+
else
|
|
132
|
+
echo "up=false" >> "$GITHUB_OUTPUT"
|
|
133
|
+
echo "::warning::SonarCloud is unreachable or degraded — skipping the scan for this run (not a code quality failure). Verify locally with scripts/dev/sonar-local-scan.sh before merging if this persists, and re-run this job once SonarCloud recovers."
|
|
134
|
+
fi
|
|
135
|
+
|
|
118
136
|
- name: SonarCloud scan
|
|
137
|
+
if: steps.sonarcloud_health.outputs.up == 'true'
|
|
119
138
|
uses: SonarSource/sonarcloud-github-action@v5.0.0
|
|
120
139
|
env:
|
|
121
140
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # PR decoration
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
# Pre-commit hooks for gflow-cli
|
|
2
|
-
# Install: pip install pre-commit && pre-commit install
|
|
2
|
+
# Install (commit-time hooks): pip install pre-commit && pre-commit install
|
|
3
|
+
# Install (pre-push hook too): pre-commit install --hook-type pre-push
|
|
3
4
|
# Run manually: pre-commit run --all-files
|
|
4
5
|
#
|
|
5
|
-
# Gates enforced:
|
|
6
|
+
# Gates enforced on commit:
|
|
6
7
|
# 1. ruff lint + format (fast, catches import order / style / unused imports)
|
|
7
8
|
# 2. repo-hygiene (blocks tracked images, CDP lock files, hardcoded Windows paths)
|
|
8
9
|
#
|
|
@@ -10,6 +11,16 @@
|
|
|
10
11
|
# - generated output artefacts (*.jpg, *.jpeg, test_assets/smoke_*/, test_assets/debug_*/)
|
|
11
12
|
# - CDP lock files (.gflow-cdp.lock) that contain browser session metadata
|
|
12
13
|
# - hardcoded machine-specific paths in scripts/ (C:\Users\<name>\...)
|
|
14
|
+
#
|
|
15
|
+
# Gate enforced on push:
|
|
16
|
+
# 3. sonar-outage-fallback — SonarCloud (CI's primary gate) is reachable in
|
|
17
|
+
# the overwhelming majority of pushes, so this SKIPS in that case (CI
|
|
18
|
+
# does the real enforcement); it only runs a local SonarQube scan when
|
|
19
|
+
# SonarCloud itself is unreachable, so a push isn't silently unassessed
|
|
20
|
+
# during an outage. Gracefully skips (never blocks) if the optional
|
|
21
|
+
# local Sonar infra isn't set up -- most contributors won't have it.
|
|
22
|
+
|
|
23
|
+
default_stages: [pre-commit]
|
|
13
24
|
|
|
14
25
|
repos:
|
|
15
26
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
@@ -29,10 +40,18 @@ repos:
|
|
|
29
40
|
always_run: true
|
|
30
41
|
additional_dependencies: []
|
|
31
42
|
|
|
43
|
+
- id: sonar-outage-fallback
|
|
44
|
+
name: Sonar (SonarCloud primary; local fallback only on outage)
|
|
45
|
+
language: system
|
|
46
|
+
entry: bash scripts/dev/sonar-pre-push-gate.sh
|
|
47
|
+
pass_filenames: false
|
|
48
|
+
always_run: true
|
|
49
|
+
stages: [pre-push]
|
|
50
|
+
|
|
32
51
|
- repo: https://github.com/Yelp/detect-secrets
|
|
33
52
|
rev: v1.5.0
|
|
34
53
|
hooks:
|
|
35
54
|
- id: detect-secrets
|
|
36
55
|
name: Detect secrets
|
|
37
56
|
args: ["--baseline", ".secrets.baseline"]
|
|
38
|
-
exclude:
|
|
57
|
+
exclude: '\.secrets\.baseline$'
|
|
@@ -91,6 +91,7 @@ The `skills/` directory ships installable agent skill docs in plain Markdown wit
|
|
|
91
91
|
| `plan` | [`skills/plan/SKILL.md`](skills/plan/SKILL.md) | Create a structured task-by-task implementation plan for a feature |
|
|
92
92
|
| `status` | [`skills/status/SKILL.md`](skills/status/SKILL.md) | Show current plan state, progress, and next unchecked task |
|
|
93
93
|
| `pr-council-review` | [`skills/pr-council-review/SKILL.md`](skills/pr-council-review/SKILL.md) | Multi-dimensional PR council review |
|
|
94
|
+
| `llm-council` | [`skills/llm-council/SKILL.md`](skills/llm-council/SKILL.md) | Wraps `pr-council-review` with external CLI reviewers (`codex`/`gemini`, opt-in `agy`) for high-stakes reviews |
|
|
94
95
|
| `issue-assessment` | [`skills/issue-assessment/SKILL.md`](skills/issue-assessment/SKILL.md) | Triage a GitHub issue (read-only) before any fix work |
|
|
95
96
|
| `issue-resolve` | [`skills/issue-resolve/SKILL.md`](skills/issue-resolve/SKILL.md) | Drive an assessed issue to a test-first fix + draft PR |
|
|
96
97
|
| `check` | [`skills/check/SKILL.md`](skills/check/SKILL.md) | Quality gates (lint/format/types/tests) before every commit |
|
|
@@ -7,6 +7,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.37.0] — 2026-07-17
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **Agentic image count enforcement** (#313): in the agentic (conversational) Flow UI cohort, the requested image count (`-n`) is now reliably enforced via the Agent settings panel, reworked to reuse classic mode's robust count-tab primitives (a stale sticky default there could previously override the natural-language directive). Covered by a live regression test.
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- **UI-automation viewport enlarged to 1920×1080** (from 1280×800) to reduce the static browser-fingerprint signal with the most common real desktop resolution. Only the `UiAutomationTransport` context is affected; the `FlowApiClient` REST context (1280×720, selector-irrelevant) is unchanged. Enlarging stays within Flow's desktop layout, so selectors are unaffected. Timing/click humanization from #315 remains out of scope — parked under ADR-13 (the current stealth stack already measures a 0.0% WAF-403 rate). (#315)
|
|
19
|
+
- **Auth-login viewports harmonized to 1920×1080** so a profile logs in at the same size it later generates with — `internal_chromium` (Playwright viewport) and `real_chrome` (`--window-size`). Login-window only, not selector-bound. (#315)
|
|
20
|
+
|
|
21
|
+
### Security
|
|
22
|
+
|
|
23
|
+
- **FIPS-safe SAPISIDHASH:** the protocol-mandated SHA-1 in Google's SAPISIDHASH computation is now marked `usedforsecurity=False` — it is a protocol hash, not a security primitive, and this lets the call succeed under FIPS-mode Python (which otherwise rejects SHA-1). The digest is byte-identical, so authentication is unchanged. (#329)
|
|
24
|
+
|
|
25
|
+
## [0.36.0] — 2026-07-16
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- **`GFLOW_CLI_HAR_PATH`:** captures full Playwright network traffic (requests, responses, headers, cookies) to a HAR file for the session — useful for diagnosing wire-format surprises or WAF rejections. Opt-in, env-var only; the file is hardened to `0600` on POSIX after Playwright writes it (#316).
|
|
30
|
+
- **`GFLOW_CLI_DEBUG_TRACEBACK`:** prints the real exception message + traceback for unhandled errors — to the console and, under `--json`, into the payload's `error.detail`/`error.traceback` fields — instead of the generic placeholder. The structured telemetry event stays SHA-256-hashed unconditionally either way; this only changes what the operator/caller sees (#316).
|
|
31
|
+
- **`llm-council` skill:** `/gflow:llm-council` composes with `pr-council-review`, adding `codex`/`gemini` (opt-in `agy`) as independent external reviewers alongside the internal Claude-subagent council for high-stakes reviews (#320).
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- **Reference entity smuggling:** a poisoned character entity (from a `gflow character create` that failed mid-workflow, e.g. the body-triptych step) could leak its `referenceEntities` into unrelated `gflow image i2i` calls in the same project workspace, even when the caller never passed `--reference-entity`. The UI-automation interceptor now strips unrequested `referenceEntities` before submit (#312).
|
|
36
|
+
|
|
10
37
|
## [0.35.0] — 2026-07-14
|
|
11
38
|
|
|
12
39
|
### Added
|
|
@@ -1980,7 +2007,10 @@ shell-script template that branches on these codes.
|
|
|
1980
2007
|
|
|
1981
2008
|
First skeleton. Not functional end-to-end yet.
|
|
1982
2009
|
|
|
1983
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
2010
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.37.0...HEAD
|
|
2011
|
+
[0.37.0]: https://github.com/ffroliva/gflow-cli/compare/v0.36.0...v0.37.0
|
|
2012
|
+
[0.36.0]: https://github.com/ffroliva/gflow-cli/compare/v0.35.0...v0.36.0
|
|
2013
|
+
[0.35.0]: https://github.com/ffroliva/gflow-cli/compare/v0.34.0...v0.35.0
|
|
1984
2014
|
[0.34.0]: https://github.com/ffroliva/gflow-cli/compare/v0.33.0...v0.34.0
|
|
1985
2015
|
[0.33.0]: https://github.com/ffroliva/gflow-cli/compare/v0.32.1...v0.33.0
|
|
1986
2016
|
[0.32.1]: https://github.com/ffroliva/gflow-cli/compare/v0.32.0...v0.32.1
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.37.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
|
|
@@ -137,10 +137,16 @@ duration** (4/6/8/10 s), and likely **aspect ratio** and **model** — can be ex
|
|
|
137
137
|
the agent resolves the selection itself.
|
|
138
138
|
|
|
139
139
|
Implications for `AgenticFlowUiDriver`:
|
|
140
|
-
- **`configure_settings`
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
140
|
+
- **`configure_settings` drives count as a fallback (2026-07-16, issue #313).**
|
|
141
|
+
Prompt-encoding alone proved unreliable: Agent mode's `tune` panel has a
|
|
142
|
+
STICKY "Image generation default" count that silently overrode the
|
|
143
|
+
natural-language directive when stale. `AgenticFlowUiDriver` now sets that
|
|
144
|
+
control to match the request (best-effort, never raises — falls through to
|
|
145
|
+
prompt-only on any selector miss) in addition to the natural-language
|
|
146
|
+
phrasing. Aspect/model are NOT automated via this panel — count only, to
|
|
147
|
+
keep the newly-added surface area minimal. See
|
|
148
|
+
`flow-agent-settings-panel-sticky-defaults` project memory for the full
|
|
149
|
+
selector write-up.
|
|
144
150
|
- **The agent *interprets* the request → verify, don't trust.** It may produce a
|
|
145
151
|
different count or ignore a duration. This is precisely why scrape-and-dedup-by-UUID
|
|
146
152
|
is load-bearing: request N → poll until N distinct new media UUIDs → if the produced
|
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
# Configuration
|
|
2
|
+
|
|
3
|
+
`gflow-cli` is configured via three layers, with a strict precedence order:
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
CLI flag (highest) > environment variable > .env file > built-in default (lowest)
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
Every setting validates at startup via [`pydantic-settings`](https://docs.pydantic.dev/latest/concepts/pydantic_settings/). Bad values fail loudly with the offending key + the rule it violated, never silently.
|
|
10
|
+
|
|
11
|
+
## Reference
|
|
12
|
+
|
|
13
|
+
Each variable in `.env.template` documented here:
|
|
14
|
+
|
|
15
|
+
### `GFLOW_CLI_HOME`
|
|
16
|
+
|
|
17
|
+
**What:** Root directory for Playwright persistent contexts (signed-in Google sessions).
|
|
18
|
+
**Default:** Per-OS user-data-dir via [`platformdirs`](https://github.com/platformdirs/platformdirs):
|
|
19
|
+
- Windows: `%LOCALAPPDATA%\gflow-cli` (e.g. `C:\Users\<you>\AppData\Local\gflow-cli`)
|
|
20
|
+
- macOS: `~/Library/Application Support/gflow-cli`
|
|
21
|
+
- Linux (XDG): `$XDG_DATA_HOME/gflow-cli` (typically `~/.local/share/gflow-cli`)
|
|
22
|
+
|
|
23
|
+
**Override examples:**
|
|
24
|
+
```bash
|
|
25
|
+
export GFLOW_CLI_HOME=/secure-volume/gflow-cli # POSIX
|
|
26
|
+
$env:GFLOW_CLI_HOME = "D:\gflow-cli" # PowerShell
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
See [AUTHENTICATION § Session storage](AUTHENTICATION.md#session-storage) for the full layout.
|
|
30
|
+
`$GFLOW_CLI_HOME` also holds `config.toml`, the SQLite catalog (`gflow.db`), and — if you
|
|
31
|
+
create it — a `tools/` directory of user-authored "My Tools" TOMLs
|
|
32
|
+
(`<GFLOW_CLI_HOME>/tools/*.toml`, auto-loaded; see [TOOLS.md § My Tools](TOOLS.md)).
|
|
33
|
+
|
|
34
|
+
### `GFLOW_CLI_PROFILE`
|
|
35
|
+
|
|
36
|
+
**What:** Default profile name used when `--profile` isn't passed on the CLI.
|
|
37
|
+
**Default:** Resolved from `$GFLOW_CLI_HOME/config.toml` → auto-pick if exactly one profile → otherwise prompts the user to choose.
|
|
38
|
+
**CLI override:** `--profile <name>`
|
|
39
|
+
|
|
40
|
+
A profile maps to a directory `$GFLOW_CLI_HOME/profile_<name>/`. Profiles are isolated — different Google accounts, different cookies, different Flow project histories. See [AUTHENTICATION § Multiple accounts](AUTHENTICATION.md#multiple-accounts).
|
|
41
|
+
|
|
42
|
+
#### Default-profile resolution chain
|
|
43
|
+
|
|
44
|
+
1. CLI flag `--profile <name>` (highest)
|
|
45
|
+
2. Env var `GFLOW_CLI_PROFILE`
|
|
46
|
+
3. `$GFLOW_CLI_HOME/config.toml` → `default_profile = "..."` (set by `gflow auth use <name>`)
|
|
47
|
+
4. Auto: if exactly one `profile_*` dir exists, it's the de-facto default
|
|
48
|
+
5. Fail with the list of available profiles (lowest)
|
|
49
|
+
|
|
50
|
+
### `GFLOW_CLI_OUTPUT_DIR`
|
|
51
|
+
|
|
52
|
+
**What:** Root directory where downloaded assets land. Subfolders are created per kind/date.
|
|
53
|
+
**Default:** Per-OS Downloads dir + `/gflow-cli`:
|
|
54
|
+
- Windows: `%USERPROFILE%\Downloads\gflow-cli`
|
|
55
|
+
- macOS: `~/Downloads/gflow-cli`
|
|
56
|
+
- Linux (XDG): `$XDG_DOWNLOAD_DIR/gflow-cli` (falls back to `~/Downloads/gflow-cli`)
|
|
57
|
+
|
|
58
|
+
**CLI override:** command-specific output flags such as `--out` for image
|
|
59
|
+
commands and `--out-dir` for video commands.
|
|
60
|
+
|
|
61
|
+
If [`GFLOW_CLI_STORAGE_URI`](#gflow_cli_storage_uri) is set, generated asset
|
|
62
|
+
bytes are uploaded to the configured cloud bucket instead of this local output
|
|
63
|
+
root. `GFLOW_CLI_OUTPUT_DIR` still matters for local mode and for deriving the
|
|
64
|
+
default image/video key layout. See [EXTERNAL_STORAGE.md](EXTERNAL_STORAGE.md).
|
|
65
|
+
|
|
66
|
+
### `GFLOW_CLI_STORAGE_URI`
|
|
67
|
+
|
|
68
|
+
**What:** Optional cloud storage URI prefix for generated assets.
|
|
69
|
+
**Values:** `gs://bucket/prefix/` for Google Cloud Storage or
|
|
70
|
+
`s3://bucket/prefix/` for S3-compatible storage, including MinIO.
|
|
71
|
+
**Default:** unset, which means local filesystem output.
|
|
72
|
+
**Requires:** install the matching optional extra:
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
uv tool install "gflow-cli[gcs]"
|
|
76
|
+
uv tool install "gflow-cli[s3]"
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
When set, `gflow-cli` uploads generated assets to the cloud prefix instead of
|
|
80
|
+
saving local asset copies. It does not dual-write local + cloud copies. The
|
|
81
|
+
local SQLite catalog still records the operation and stores `storage_provider`
|
|
82
|
+
plus `cloud_uri` for each uploaded asset.
|
|
83
|
+
|
|
84
|
+
Examples:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# Choose one:
|
|
88
|
+
export GFLOW_CLI_STORAGE_URI=gs://my-gcs-bucket/gflow/
|
|
89
|
+
export GFLOW_CLI_STORAGE_URI=s3://my-s3-bucket/gflow/
|
|
90
|
+
export GFLOW_CLI_STORAGE_URI=s3://gflow-test/dev/ # MinIO local dev
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
S3 and MinIO use the standard AWS SDK environment variables:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
export AWS_ACCESS_KEY_ID=minioadmin
|
|
97
|
+
export AWS_SECRET_ACCESS_KEY=minioadmin
|
|
98
|
+
export AWS_ENDPOINT_URL=http://localhost:9000 # omit for real AWS
|
|
99
|
+
export AWS_DEFAULT_REGION=us-east-1
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
GCS uses Application Default Credentials, a service-account file through
|
|
103
|
+
`GOOGLE_APPLICATION_CREDENTIALS`, or `STORAGE_EMULATOR_HOST` for local emulator
|
|
104
|
+
runs.
|
|
105
|
+
|
|
106
|
+
Deep setup, verification, and security notes live in
|
|
107
|
+
[EXTERNAL_STORAGE.md](EXTERNAL_STORAGE.md).
|
|
108
|
+
|
|
109
|
+
### `GFLOW_CLI_PROVIDER`
|
|
110
|
+
|
|
111
|
+
**What:** Backend to use for generations.
|
|
112
|
+
**Values:** `flow` (default — reverse-engineered, requires Ultra/Pro) | `official` (planned v0.5+ — Phase 5 official Veo SDK swap, will require a Gemini API key).
|
|
113
|
+
**Default:** `flow`
|
|
114
|
+
**CLI override:** none yet — set the env var to switch backends once `official` is wired.
|
|
115
|
+
|
|
116
|
+
### `GFLOW_CLI_GEMINI_API_KEY`
|
|
117
|
+
|
|
118
|
+
**What:** Public Gemini API key. Used by the **`creative-director`** prompt tool
|
|
119
|
+
(`--tool creative-director` / `gflow tools run creative-director`, see
|
|
120
|
+
[TOOLS.md](TOOLS.md) and [PROMPT_EXPANSION.md](PROMPT_EXPANSION.md)) and, in future, by the
|
|
121
|
+
official Veo 3.1 SDK.
|
|
122
|
+
**Required when:** you apply the `creative-director` tool (via `--tool` on any generation
|
|
123
|
+
command, or `gflow tools run`), or `GFLOW_CLI_PROVIDER=official`.
|
|
124
|
+
**Default:** unset
|
|
125
|
+
**Behavior when unset:** the tool is a no-op — gflow logs an `INFO` notice and generates
|
|
126
|
+
from your original prompt (it never fails the run). API errors (rate limit, network) fall
|
|
127
|
+
back the same way after a short exponential-backoff retry, bounded by an overall ~60s
|
|
128
|
+
wall-clock budget per call.
|
|
129
|
+
**Get one:** <https://aistudio.google.com/apikey>
|
|
130
|
+
|
|
131
|
+
### `GFLOW_CLI_GEMINI_MODEL`
|
|
132
|
+
|
|
133
|
+
**What:** Gemini model used by the `creative-director` prompt tool.
|
|
134
|
+
**Default:** `gemini-2.5-flash`
|
|
135
|
+
**Note:** Override to select a newer Flash revision without upgrading gflow-cli, e.g.
|
|
136
|
+
`GFLOW_CLI_GEMINI_MODEL=gemini-2.5-flash-lite`.
|
|
137
|
+
|
|
138
|
+
### `GFLOW_CLI_AUTH_LOGIN_TIMEOUT`
|
|
139
|
+
|
|
140
|
+
**What:** Maximum time (seconds) that `gflow auth login` waits for the user to complete the Google sign-in flow in the browser.
|
|
141
|
+
**Default:** `600` (10 minutes)
|
|
142
|
+
**Range:** 1–86400
|
|
143
|
+
**Exit code on expiry:** 12 (`AuthLoginTimeoutError`)
|
|
144
|
+
**Note:** Useful for CI/CD or agent pipelines where a hung login should surface as a definite failure rather than blocking indefinitely. Set to a large value (e.g. `3600`) for interactive sessions over slow connections.
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
GFLOW_CLI_AUTH_LOGIN_TIMEOUT=120 gflow auth login # abort after 2 minutes
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### `GFLOW_CLI_TIMEOUT_SECONDS`
|
|
151
|
+
|
|
152
|
+
**What:** Per-request HTTP timeout. Veo videos can take 60–180 s each.
|
|
153
|
+
**Default:** `600`
|
|
154
|
+
**Note:** This is a single-request ceiling; the *batch* timeout you experience is sum of all per-clip waits.
|
|
155
|
+
|
|
156
|
+
### `GFLOW_CLI_JITTER_RANGE`
|
|
157
|
+
|
|
158
|
+
**What:** Anti-bot pause between prompt submissions in multi-prompt image runs (`gflow image batch`, `gflow image t2i --prompts-file` / `--stdin` / multiple positional prompts, and `gflow run` image batches). Spaces out the *submission clicks* only — generations still run in parallel inside Flow.
|
|
159
|
+
**Values:** `MIN-MAX` seconds (e.g. `10-30`), a single number `N` (uniform `0`–`N`, mirrors `video chain --jitter`), or `0` to disable.
|
|
160
|
+
**Default:** `0.5-1.5` — deliberately small so runs don't waste wall-clock. **Widen (e.g. `10-30`) when runs start hitting WAF 403s**, then dial back once the score decays.
|
|
161
|
+
**CLI override:** `--jitter` on `image t2i` and `image batch` (flag beats env).
|
|
162
|
+
**Why:** Flow's WAF reacts to cumulative submission cadence — see [DEBUGGING § WAF cadence](DEBUGGING.md#waf-cadence).
|
|
163
|
+
|
|
164
|
+
### `GFLOW_CLI_LOG_LEVEL`
|
|
165
|
+
|
|
166
|
+
**What:** Logging verbosity.
|
|
167
|
+
**Values:** `DEBUG` | `INFO` | `WARNING` | `ERROR`
|
|
168
|
+
**Default:** `INFO`
|
|
169
|
+
**CLI override:** `-v` / `--verbose` flag flips to `DEBUG`.
|
|
170
|
+
|
|
171
|
+
### `GFLOW_CLI_LOG_FORMAT`
|
|
172
|
+
|
|
173
|
+
**What:** Output format for log lines.
|
|
174
|
+
**Values:**
|
|
175
|
+
- `auto` (default) — text on TTY, JSON when stdout is piped/redirected
|
|
176
|
+
- `text` — always pretty (Rich-styled, colours)
|
|
177
|
+
- `json` — always machine-readable (one JSON object per line)
|
|
178
|
+
|
|
179
|
+
### `GFLOW_CLI_CONCURRENCY`
|
|
180
|
+
|
|
181
|
+
**What:** Per-worker Playwright Page-pool size for batch runs. `FlowApiClient.__aenter__` opens N Pages inside one shared persistent BrowserContext; operations check out a Page via an `asyncio.Queue` (FIFO, bounded by `maxsize=N`). `gflow video batch` fans out manifest entries via `asyncio.gather`.
|
|
182
|
+
**Values:** `1`–`16`
|
|
183
|
+
**Default:** `1` (no fan-out)
|
|
184
|
+
**Recommended starting point:** `4`. Each Page costs ~30–60 MiB of memory on Chromium headless; don't exceed `8` without measuring resident-set size. Cookies and storage state are shared at Context level, so every Page inherits the signed-in profile for free.
|
|
185
|
+
**Shipped in:** v0.4.0a2.
|
|
186
|
+
|
|
187
|
+
### `GFLOW_CLI_DB_PATH`
|
|
188
|
+
|
|
189
|
+
**What:** Override the path to the local SQLite operations database.
|
|
190
|
+
**Default:** `<GFLOW_CLI_HOME>/gflow.db`
|
|
191
|
+
**Override examples:**
|
|
192
|
+
```bash
|
|
193
|
+
export GFLOW_CLI_DB_PATH=/secure-volume/gflow.db # POSIX
|
|
194
|
+
$env:GFLOW_CLI_DB_PATH = "D:\gflow-data\gflow.db" # PowerShell
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
Use this when you want the DB on a different volume, outside `GFLOW_CLI_HOME`, or when running multiple isolated environments that share the same home dir.
|
|
198
|
+
|
|
199
|
+
### `GFLOW_CLI_HISTORY_PROMPTS`
|
|
200
|
+
|
|
201
|
+
**What:** Controls how prompt text is persisted in the local database.
|
|
202
|
+
**Values:**
|
|
203
|
+
- `store` (default) — the full prompt text is saved to the database alongside the operation record.
|
|
204
|
+
- `redacted` — only the SHA-256 hash of the prompt is stored; the prompt text itself is never written to disk. Use this when prompts may contain sensitive content.
|
|
205
|
+
|
|
206
|
+
**Default:** `store`
|
|
207
|
+
|
|
208
|
+
**Tool provenance:** when a prompt tool (e.g. `creative-director`) rewrites a prompt, `store`
|
|
209
|
+
mode also records the submitted `expanded_prompt` and a full `metadata_json.tool` descriptor;
|
|
210
|
+
`redacted` withholds the expanded prompt and reduces the descriptor to
|
|
211
|
+
`{name, version, params_hash, config_hash}`. See [PROMPT_EXPANSION.md](PROMPT_EXPANSION.md).
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
GFLOW_CLI_HISTORY_PROMPTS=redacted gflow image t2i "confidential brief"
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### `GFLOW_CLI_HEADLESS`
|
|
218
|
+
|
|
219
|
+
**What:** Run Playwright in headless mode for non-`auth login` commands.
|
|
220
|
+
**Values:** `true` | `false`
|
|
221
|
+
**Default:** `true`
|
|
222
|
+
**When to flip to `false`:** if reCAPTCHA Enterprise refuses to mint tokens (Google's bot-detection sometimes refuses headless Chromium but accepts a visible window). Set to `false` and re-run; the browser will appear during generation but the session is still reused from the persistent profile.
|
|
223
|
+
|
|
224
|
+
### `GFLOW_CLI_BROWSER_ENGINE`
|
|
225
|
+
|
|
226
|
+
**What:** Selects the browser-automation engine backing the Playwright API.
|
|
227
|
+
**Values:** `playwright` | `patchright`
|
|
228
|
+
**Default:** `playwright`
|
|
229
|
+
**What `patchright` is:** an opt-in, drop-in patched Playwright (Chromium) that runs page evaluations in an isolated execution context to avoid the `Runtime.enable` CDP leak, for stronger reCAPTCHA-Enterprise evasion on the **headed** path. It is **not** a headless unlock — Google still detects headless Chromium regardless of engine.
|
|
230
|
+
**Install:** `pip install 'gflow-cli[patchright]'` (or `pip install patchright`). Selecting `patchright` without it installed fails fast with exit code 24 and a pip remediation hint. When using system Chrome (the gflow default, `channel=chrome`) you do **not** need `patchright install chromium`.
|
|
231
|
+
**Reverting:** unset the variable (or set `playwright`) — the default path is byte-identical to a build without this feature, with no profile migration.
|
|
232
|
+
**Security note:** the `patchright` extra ships a *patched Chromium driver* that handles your live Google session cookies; it is exact-pinned and treated as a security-review-required dependency. See [SECURITY.md § Dependencies](SECURITY.md).
|
|
233
|
+
|
|
234
|
+
### `GFLOW_CLI_UI_MODE`
|
|
235
|
+
|
|
236
|
+
**What:** Which Flow UI arm to use for generation. Flow serves a **classic** composer (hard crop/aspect controls) or an **agentic** chat cohort, server-assigned and flapping per page load ([#299](https://github.com/ffroliva/gflow-cli/issues/299)).
|
|
237
|
+
**Values:**
|
|
238
|
+
- `auto` (default) — bind whatever the composer renders.
|
|
239
|
+
- `classic` — require the classic composer (hard aspect controls). gflow switches to it, re-probes to verify, and if the arm is still agentic **aborts before submitting** with `UiModeUnavailableError` (**exit 28**) — no credits spent.
|
|
240
|
+
- `agentic` — require the agentic chat surface (needed for `-i` agent instructions). gflow switches to it, verifies, and aborts (exit 28) if it can't be reached.
|
|
241
|
+
**Default:** `auto`
|
|
242
|
+
**How it works:** before each generation, gflow determines the required arm, clicks the classic↔agentic toggle as a **prerequisite**, **verifies** with a DOM re-probe, then binds — or fails fast. The required arm is also **inferred**: `-i` instructions are agentic-only, so they force `agentic` automatically (and `--ui-mode classic` + `-i` is a hard conflict, not a silent drop).
|
|
243
|
+
**Why `classic`:** the agentic cohort treats aspect ratio as a soft prompt hint (portrait 9:16 can come back landscape). `classic` enforces it or fails fast instead of silently degrading.
|
|
244
|
+
**Retry note:** the cohort flaps per load, so an exit-28 abort is **retryable** — a re-run often lands the wanted arm. A server experiment can pin the arm, in which case it's unreachable from the client (the abort still saves the credits).
|
|
245
|
+
**Supersedes:** `GFLOW_CLI_PREFER_CLASSIC` and `GFLOW_CLI_FORCE_AGENT_UI` (below).
|
|
246
|
+
|
|
247
|
+
### `GFLOW_CLI_PREFER_CLASSIC` *(deprecated — use `GFLOW_CLI_UI_MODE=classic`)*
|
|
248
|
+
|
|
249
|
+
**Deprecated** in favor of [`GFLOW_CLI_UI_MODE`](#gflow_cli_ui_mode). `true` now maps to `ui_mode=classic` (emits a `DeprecationWarning`). **Behavior change:** the old silent fallback to agentic when the toggle was unavailable is gone — a classic-required run now **aborts with exit 28** instead of producing an agentic-cohort result. `GFLOW_CLI_UI_MODE` (and `--ui-mode`) take precedence when both are set.
|
|
250
|
+
|
|
251
|
+
### `GFLOW_CLI_FORCE_AGENT_UI` *(deprecated — use `GFLOW_CLI_UI_MODE=agentic`)*
|
|
252
|
+
|
|
253
|
+
**Deprecated** in favor of [`GFLOW_CLI_UI_MODE`](#gflow_cli_ui_mode). `true` maps to `ui_mode=agentic` (emits a `DeprecationWarning`). `-i` instructions already force agentic automatically, so this is rarely needed explicitly.
|
|
254
|
+
|
|
255
|
+
### `GFLOW_CLI_LOCALE`
|
|
256
|
+
|
|
257
|
+
**What:** BCP-47 locale tag passed to Playwright's `launch_persistent_context(locale=...)` — controls the `Accept-Language` HTTP header only.
|
|
258
|
+
**Values:** any BCP-47 tag (e.g. `en-US`, `pt-BR`, `es-ES`, `ja-JP`)
|
|
259
|
+
**Default:** `en-US`
|
|
260
|
+
**Shipped in:** post-v0.8.1 develop (PR #51).
|
|
261
|
+
**When to set it:** capturing locale-invariant DOM via `scripts/dev/capture_locale_invariants.py`, or live-verifying a generation under a non-EN account language.
|
|
262
|
+
**Important:** Chrome's *UI* language is independently forced to `en-US` via the `--lang=en-US` launch arg (so Flow keeps serving `/fx/tools/flow/` and the editor's localized text selectors keep working). This env var only affects request headers — not the editor UI you see. See [KNOWN_ISSUES § issue #24](../KNOWN_ISSUES.md) for the path to dropping `--lang=en-US`.
|
|
263
|
+
|
|
264
|
+
### `GFLOW_CLI_HAR_PATH`
|
|
265
|
+
|
|
266
|
+
**What:** Captures full Playwright network traffic (requests, responses, headers, cookies) to a HAR file for the session — useful for diagnosing wire-format surprises or WAF rejections.
|
|
267
|
+
**Default:** unset (no capture).
|
|
268
|
+
**Override examples:**
|
|
269
|
+
```bash
|
|
270
|
+
export GFLOW_CLI_HAR_PATH=/tmp/gflow-debug/session.har # POSIX
|
|
271
|
+
$env:GFLOW_CLI_HAR_PATH = "C:\gflow-debug\session.har" # PowerShell
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
**SECURITY:** a HAR file contains live auth cookies and bearer tokens — never share one publicly. The file is chmod'd `0o600` on POSIX after Playwright writes it (best-effort; no-op on Windows). Two concurrent `gflow` processes pointed at the same path will overwrite each other's HAR (last-writer-wins, no error) — use a distinct path per run if running more than one profile/command at once.
|
|
275
|
+
|
|
276
|
+
### `GFLOW_CLI_DEBUG_TRACEBACK`
|
|
277
|
+
|
|
278
|
+
**What:** Prints the real exception message + full traceback for unhandled (non-typed) errors — to the console, and under `--json`, into the payload's `error.detail` / `error.traceback` fields — instead of the default generic "Unexpected error" placeholder. This CLI's structured telemetry event is always SHA-256-hashed regardless of this setting; this flag only changes what you see, not what's logged.
|
|
279
|
+
**Values:** `true` | `false`
|
|
280
|
+
**Default:** `false`
|
|
281
|
+
**Override examples:**
|
|
282
|
+
```bash
|
|
283
|
+
GFLOW_CLI_DEBUG_TRACEBACK=1 gflow image t2i "a cat" --profile dev # POSIX
|
|
284
|
+
$env:GFLOW_CLI_DEBUG_TRACEBACK = "1" # PowerShell
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
**SECURITY:** the real error text may contain tokens/cookies present in exception state — for local debugging only. `--json` output under this flag is a materially higher-risk surface than the interactive console: a human watches the console live and can react to the yellow warning, but `--json` output is designed to be piped into CI logs, log aggregators, and webhooks that persist or forward it unreviewed. **Never pipe `--json` output under this flag to a shared or persistent system without redacting it first.**
|
|
288
|
+
|
|
289
|
+
## Output paths
|
|
290
|
+
|
|
291
|
+
The default output scheme keeps generated assets sortable, dated, and grouped by job:
|
|
292
|
+
|
|
293
|
+
```text
|
|
294
|
+
$GFLOW_CLI_OUTPUT_DIR/
|
|
295
|
+
├── images/<YYYY-MM-DD>/<media_name>_<index>.png
|
|
296
|
+
└── videos/<YYYY-MM-DD>/<media_name>.mp4
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
`<media_name>` is the per-asset UUID Flow assigns; `<index>` is the 1-based shot number for multi-image runs (`-n 2..4`).
|
|
300
|
+
|
|
301
|
+
With `GFLOW_CLI_STORAGE_URI` set, the same default layout is used under the
|
|
302
|
+
configured bucket prefix, and `gflow data media <media_id>` reports `cloud_uri_N`
|
|
303
|
+
rows instead of local paths.
|
|
304
|
+
|
|
305
|
+
### Per-call override
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
# Image: --out is a directory; files written flat (no date subdir)
|
|
309
|
+
gflow image t2i "..." --out ./shots/
|
|
310
|
+
|
|
311
|
+
# Video: --out-dir is a directory for the generated mp4
|
|
312
|
+
gflow video t2v "..." --out-dir ./out/
|
|
313
|
+
|
|
314
|
+
# Video batch: --out-dir overrides the videos/<date>/ root
|
|
315
|
+
gflow video batch ./manifest.tsv --out-dir ./batch-out/
|
|
316
|
+
|
|
317
|
+
# Video chain: --out-dir holds the per-link mp4s + seed frames
|
|
318
|
+
gflow video chain ./story.jsonl --out-dir ./chain-out/ --yes
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
For images, `--out DIR` writes flat as `<DIR>/<media_name>_<n>.png` — file paths are not accepted (rename after the fact if needed). For videos, `--out-dir DIR` controls the local output directory.
|
|
322
|
+
|
|
323
|
+
## `gflow video chain` flags
|
|
324
|
+
|
|
325
|
+
`gflow video chain` (last-frame I2V chaining — see
|
|
326
|
+
[USAGE § gflow video chain](USAGE.md#gflow-video-chain)) is configured entirely
|
|
327
|
+
by command-line flags; it adds **no new environment variables**. It reuses
|
|
328
|
+
`GFLOW_CLI_OUTPUT_DIR` (default output root), `GFLOW_CLI_PROFILE`,
|
|
329
|
+
`GFLOW_CLI_DB_PATH` (chain links are recorded for `--resume-from`), and
|
|
330
|
+
`GFLOW_CLI_TIMEOUT_SECONDS` (per-link generation ceiling — the chain waits for
|
|
331
|
+
each link in turn, so total wallclock is the sum of all link waits).
|
|
332
|
+
|
|
333
|
+
| Flag | Default | Notes |
|
|
334
|
+
|---|---|---|
|
|
335
|
+
| `--model` | `veo-lite` | `veo-lite` / `veo-fast` / `veo-quality` / `veo-lite-lp`. `omni-flash` is rejected — it can't seed i2v links (issue #125). |
|
|
336
|
+
| `--max-links N` | unset | Cap link count; exit 11 (`ConfigurationError`) if the manifest has more. A spend guardrail. |
|
|
337
|
+
| `-y` / `--yes` | off | Skip the per-credit cost confirmation prompt. |
|
|
338
|
+
| `--dry-run` | off | Print the plan + credit estimate and spend nothing. |
|
|
339
|
+
| `--resume-from CHAIN_ID` | unset | Resume a prior chain by its id; already-paid links are skipped (not re-billed). |
|
|
340
|
+
| `--jitter F` | `0.0` | Random `0..F` second pause **between** links (anti-bot cadence; never before link 0). |
|
|
341
|
+
| `--seed-offset MS` | `0` | Extract the seed frame this many ms before EOF (fade-to-black guard). |
|
|
342
|
+
| `--aspect` | `9:16` | `9:16` / `16:9`. Applied uniformly to every link (continuity requirement). |
|
|
343
|
+
| `--out-dir DIR` | output root | Directory for the link mp4s + `linkN_lastframe.jpg` seed frames. |
|
|
344
|
+
| `--profile NAME` | default profile | Per-subcommand profile override. |
|
|
345
|
+
| `--json` | off | Emit a machine-readable JSON result. |
|
|
346
|
+
|
|
347
|
+
The last-frame extractor needs the **`chain` optional extra** (PyAV — no system
|
|
348
|
+
ffmpeg required):
|
|
349
|
+
|
|
350
|
+
```bash
|
|
351
|
+
pip install 'gflow-cli[chain]'
|
|
352
|
+
# or: uv tool install 'gflow-cli[chain]'
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
Per-call local output flags are not intended as bucket-prefix controls. For
|
|
356
|
+
predictable external storage keys, set the bucket prefix in
|
|
357
|
+
`GFLOW_CLI_STORAGE_URI` and leave per-command output flags unset.
|
|
358
|
+
|
|
359
|
+
## .env loading
|
|
360
|
+
|
|
361
|
+
`gflow-cli` (via [`pydantic-settings`](https://docs.pydantic.dev/latest/concepts/pydantic_settings/)) loads **two** `.env` files at startup: `$GFLOW_CLI_HOME/.env` (machine-wide defaults — useful for processes whose working directory is arbitrary, like the MCP server or a worker service) and a `.env` in the **current working directory** (project-local overrides). On conflicting keys the CWD file wins.
|
|
362
|
+
|
|
363
|
+
The home used for the first file is resolved from the `GFLOW_CLI_HOME` env var, else a `GFLOW_CLI_HOME` entry in the CWD `.env`, else the platform default — the same home `Settings.home` reports. (By construction the home `.env` cannot relocate home itself; set the env var or the CWD `.env` instead.)
|
|
364
|
+
|
|
365
|
+
Variables already set in the actual environment always beat both `.env` files. Anything explicitly passed on the CLI beats everything else.
|
|
366
|
+
|
|
367
|
+
Use [`.env.template`](../.env.template) as your starting point:
|
|
368
|
+
|
|
369
|
+
```bash
|
|
370
|
+
cp .env.template .env
|
|
371
|
+
$EDITOR .env
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
## Worked examples
|
|
375
|
+
|
|
376
|
+
### "I want all output on a different drive"
|
|
377
|
+
|
|
378
|
+
```bash
|
|
379
|
+
# .env in CWD or $GFLOW_CLI_HOME
|
|
380
|
+
GFLOW_CLI_OUTPUT_DIR=/mnt/big-disk/flow-output
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
### "I want generated assets in S3 or GCS"
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
GFLOW_CLI_STORAGE_URI=s3://my-bucket/gflow/ \
|
|
387
|
+
AWS_ACCESS_KEY_ID=... \
|
|
388
|
+
AWS_SECRET_ACCESS_KEY=... \
|
|
389
|
+
AWS_DEFAULT_REGION=us-east-1 \
|
|
390
|
+
gflow image t2i "product photo on a white sweep"
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
See [EXTERNAL_STORAGE.md](EXTERNAL_STORAGE.md) for MinIO and GCS examples.
|
|
394
|
+
|
|
395
|
+
### "I'm running in CI — I want JSON logs and a strict timeout"
|
|
396
|
+
|
|
397
|
+
```bash
|
|
398
|
+
GFLOW_CLI_LOG_FORMAT=json \
|
|
399
|
+
GFLOW_CLI_TIMEOUT_SECONDS=300 \
|
|
400
|
+
gflow video batch ./manifest.tsv
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### "I want to test against the official Veo SDK"
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
GFLOW_CLI_PROVIDER=official \
|
|
407
|
+
GFLOW_CLI_GEMINI_API_KEY=AIza... \
|
|
408
|
+
gflow video t2v "test"
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
(planned v0.5+ — current scaffold accepts but ignores `GFLOW_CLI_PROVIDER=official`.)
|
|
412
|
+
|
|
413
|
+
### "I want a sandbox profile that doesn't pollute my main one"
|
|
414
|
+
|
|
415
|
+
```bash
|
|
416
|
+
gflow auth login --profile experiments
|
|
417
|
+
gflow image t2i "test idea" --profile experiments
|
|
418
|
+
# sandbox dir lives at $GFLOW_CLI_HOME/profile_experiments/
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
## Troubleshooting
|
|
422
|
+
|
|
423
|
+
| Symptom | Likely cause | Fix |
|
|
424
|
+
|---|---|---|
|
|
425
|
+
| `ValidationError: GFLOW_CLI_TIMEOUT_SECONDS must be a positive integer` | Bad `.env` value | Set to a number ≥ 1 |
|
|
426
|
+
| `FileNotFoundError: $GFLOW_CLI_HOME/profile_default not found` | First run, no auth yet | `gflow auth login` |
|
|
427
|
+
| `AuthExpiredError` | Cookies expired or revoked | `gflow auth login --profile <name>` |
|
|
428
|
+
| Output files don't appear where I expect | Flag > env > .env > default — check actual resolved path | `gflow image t2i ... --verbose` shows the resolved output path |
|
|
429
|
+
| Two concurrent calls fail with "Chromium profile locked" | Same profile used twice | Use `--profile other` for the second call |
|