gflow-cli 0.43.0__tar.gz → 0.44.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.44.0/.agents/plugins/marketplace.json +20 -0
- gflow_cli-0.44.0/.codex-plugin/plugin.json +34 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/AGENTS.md +15 -1
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/CHANGELOG.md +54 -1
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/CONTRIBUTING.md +16 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/KNOWN_ISSUES.md +21 -16
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/PKG-INFO +1 -1
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/RELEASE.md +2 -1
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/CHARACTER.md +20 -10
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/DATA_LAYER.md +40 -5
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/INDEX.md +1 -1
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.43.0.md +3 -2
- gflow_cli-0.44.0/docs/LIVE_VERIFICATION_v0.44.0.md +37 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/PROJECT_STATUS.md +2 -2
- gflow_cli-0.44.0/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +176 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/pyproject.toml +1 -1
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/release/SKILL.md +12 -3
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/_cli_helpers.py +24 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/_retry.py +28 -5
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/client.py +15 -4
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/routes.py +1 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/ui_automation.py +317 -44
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/ui_automation_video.py +1 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli.py +2 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_data.py +123 -9
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_image.py +22 -10
- gflow_cli-0.44.0/src/gflow_cli/cli_project.py +214 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_video.py +33 -16
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/queries.py +79 -18
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/repository.py +99 -1
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/errors.py +5 -3
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/tools.py +25 -6
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/profile_lease.py +6 -2
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_retry.py +10 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_automation.py +61 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_character_editor.py +410 -51
- gflow_cli-0.44.0/tests/cli/test_cli_data_errors_retention.py +202 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_image.py +1 -1
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_helpers.py +27 -0
- gflow_cli-0.44.0/tests/e2e/test_project_naming_e2e.py +184 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_image_steps.py +1 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_video_agent_ui_steps.py +2 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/test_cli_parity.py +6 -0
- gflow_cli-0.44.0/tests/scripts/test_codex_plugin.py +73 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_incident_bundle_quality.py +3 -3
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_cli_data.py +24 -0
- gflow_cli-0.44.0/tests/test_cli_project.py +212 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_data_queries.py +42 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_diagnostics_retention.py +7 -1
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_profile_lease.py +22 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/uv.lock +1 -1
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/CHARACTER.md +20 -10
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/DATA_LAYER.md +40 -5
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/KNOWN_ISSUES.md +21 -16
- 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.44.0}/.claude/README.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.env.template +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.gitattributes +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/dependabot.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/workflows/ci.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/workflows/external-pr-triage.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/workflows/governance-advisory.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/workflows/governance-benchmark.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/workflows/main-base-guard.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/workflows/pages.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.github/workflows/release.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.gitignore +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/.secrets.baseline +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/CLAUDE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/CONFIGURATION.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/LICENSE +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/README.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/ROADMAP.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/conftest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docker-compose.yml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/AGENT_UI_E2E.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/MCP.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/SECURITY.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/USAGE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/eval/pr_triage_eval.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/eval/pr_triage_fixtures.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/examples/README.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/index.html +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/llms.txt +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/README.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/autopilot/Dockerfile.triage +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/autopilot/entrypoint.sh +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/autopilot/pr_triage_gate.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/ci/check_repo_hygiene.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/ci/generate_website_docs.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/monitor_pr_38.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/README.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/gflow-cli/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/live-verify/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/sonar-project.properties +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/_common.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/api/video.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/verification.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/browser_manager.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/config.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/diagnostics.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/resources.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/server.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/worker/codec.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_incidents.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_launch_kwargs.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/test_video_request.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_agentic_cohort_detection.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_mode_control.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_selector_symmetry.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_automation_video.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/auth/test_real_chrome.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/auth/test_verification.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_video.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/conftest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/test_server.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/mcp/test_tools_wired.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_browser_manager.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_config.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_diagnostics_recorder.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_errors.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_media.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/ARCHITECTURE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/AUTHENTICATION.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/CONFIGURATION.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/DEBUGGING.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/MCP.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/SECURITY.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/USAGE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/index.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/installation.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/onboarding-mockup.html +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/onboarding.md +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.43.0 → gflow_cli-0.44.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.44.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
|
+
}
|
|
@@ -109,7 +109,21 @@ and must be resolvable by ANY agent via this file. Vendor directories hold thin
|
|
|
109
109
|
only (`.claude/commands/gflow/*.md` are pointers into `skills/`); never put protocol
|
|
110
110
|
content in a vendor directory.
|
|
111
111
|
|
|
112
|
-
**
|
|
112
|
+
**Codex CLI / desktop app:** install the repo's skills-only plugin from the repository root,
|
|
113
|
+
then start a new session:
|
|
114
|
+
|
|
115
|
+
```powershell
|
|
116
|
+
codex plugin marketplace add .
|
|
117
|
+
codex plugin add gflow@gflow-cli
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Invoke skills with Codex's `$` syntax, for example `$gflow:status`, `$gflow:check`, or
|
|
121
|
+
`$gflow:pr-council-review`. Codex reserves slash commands for its own command surface; the
|
|
122
|
+
Claude Code spelling `/gflow:*` is therefore intentionally not reproduced. The Codex IDE
|
|
123
|
+
extension does not currently load plugins, so IDE-only users should include the relevant
|
|
124
|
+
`skills/<name>/SKILL.md` directly.
|
|
125
|
+
|
|
126
|
+
**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
127
|
**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
128
|
**Custom agents:** fetch `skills/gflow-cli/SKILL.md` into your knowledge base before answering gflow questions.
|
|
115
129
|
|
|
@@ -7,6 +7,58 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.44.0] — 2026-07-26
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Dual-Side Project Naming & Management (`gflow project`)** (#381). Added
|
|
15
|
+
`gflow project` subcommand group (`list`, `show`, `rename`, `create`),
|
|
16
|
+
`--project-name` / `--project-title` options across `gflow image` and `gflow video`
|
|
17
|
+
generation commands, prompt slugging for scratch projects, and dual-side title sync
|
|
18
|
+
updating Google Flow's tRPC server/UI and local SQLite catalog in lockstep.
|
|
19
|
+
- **Namespaced Codex project skills.** The canonical workflows under `skills/`
|
|
20
|
+
now ship as a repo-local, skills-only Codex plugin. Register and install it
|
|
21
|
+
with `codex plugin marketplace add .` followed by
|
|
22
|
+
`codex plugin add gflow@gflow-cli`, then invoke workflows such as
|
|
23
|
+
`$gflow:status`, `$gflow:check`, and `$gflow:pr-council-review` in a new
|
|
24
|
+
Codex CLI or desktop-app session. Claude Code's `/gflow:*` commands and the
|
|
25
|
+
agent-agnostic skill files remain unchanged.
|
|
26
|
+
- **`gflow data errors` — bounded retention + export for failed-operation
|
|
27
|
+
history** (#345). `gflow data errors export [--older-than AGE] [-o FILE]`
|
|
28
|
+
dumps failed operations as JSONL (unbounded, newest-first) for offline
|
|
29
|
+
archival — also closing the export path deferred from #341. `gflow data
|
|
30
|
+
errors prune --older-than AGE [--dry-run]` deletes failures older than AGE
|
|
31
|
+
(`90d` / `24h` / `30m`); `--older-than` is **required** and there is no
|
|
32
|
+
automatic/background pruning — deletion is always an explicit operator
|
|
33
|
+
action. Both honor `--profile` and the exit-16 `DataStoreError` convention.
|
|
34
|
+
|
|
35
|
+
### Fixed
|
|
36
|
+
|
|
37
|
+
- **`gflow character create` safely activates the current Create-Body
|
|
38
|
+
composer.** Flow can autosave the body triptych over the stored portrait
|
|
39
|
+
prompt when the mode switch has not settled (observed live 2026-07-25 on
|
|
40
|
+
0.43.0). Current Flow reuses one Slate editor and exposes Create Body through
|
|
41
|
+
the locale-independent `accessibility_new` icon beside the portrait image;
|
|
42
|
+
gflow now clicks that scoped mode control, requires a new generated-face
|
|
43
|
+
reference chip to mount, and verifies the shared editor owns focus **before
|
|
44
|
+
any clearing or typing**. Readback failures abort before submit. The older
|
|
45
|
+
`add_2`/second-box cohort remains supported through its count-rise gate.
|
|
46
|
+
Post-type isolation still aborts before the credited submit. Live DOM
|
|
47
|
+
evidence and the one-box failure were captured on 2026-07-26. Face-only
|
|
48
|
+
creates are unchanged.
|
|
49
|
+
|
|
50
|
+
- **Profile-lock remediation message** now names the real cause and recovery.
|
|
51
|
+
`ProfileLockedError` (exit 11) previously told operators to "wait for it to
|
|
52
|
+
finish" — implying an unbounded wait — and to hunt for a `gflow`/Chrome
|
|
53
|
+
process. In practice a blocking lock is a kernel *advisory* lock held by a
|
|
54
|
+
**live** process (often a `python.exe` a `chrome.exe` scan misses); the OS
|
|
55
|
+
releases it the instant the holder dies, so a leftover lock *file* never
|
|
56
|
+
blocks acquisition. The message now points to the recorded owner PID
|
|
57
|
+
(surfaced locally since v0.43.0) and says to just retry when nothing is
|
|
58
|
+
running. The lock itself is unchanged — auto-reclaim was considered and
|
|
59
|
+
rejected as unsafe (an unlink→new-inode race could put two browsers on one
|
|
60
|
+
profile, the exact corruption the lease prevents). Refs #370.
|
|
61
|
+
|
|
10
62
|
## [0.43.0] — 2026-07-23
|
|
11
63
|
|
|
12
64
|
### Added
|
|
@@ -2332,7 +2384,8 @@ shell-script template that branches on these codes.
|
|
|
2332
2384
|
|
|
2333
2385
|
First skeleton. Not functional end-to-end yet.
|
|
2334
2386
|
|
|
2335
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
2387
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.44.0...HEAD
|
|
2388
|
+
[0.44.0]: https://github.com/ffroliva/gflow-cli/compare/v0.43.0...v0.44.0
|
|
2336
2389
|
[0.43.0]: https://github.com/ffroliva/gflow-cli/compare/v0.42.0...v0.43.0
|
|
2337
2390
|
[0.42.0]: https://github.com/ffroliva/gflow-cli/compare/v0.41.0...v0.42.0
|
|
2338
2391
|
[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
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gflow-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.44.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
|
|
@@ -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
|
|
|
@@ -161,10 +161,12 @@ async worker (which mirrors its `generation_queue.error_json` failure into
|
|
|
161
161
|
data-layer fault can never mask the generation error or change the exit code.
|
|
162
162
|
- The character-create saga deliberately keeps its STARTED rows for resume —
|
|
163
163
|
it is excluded from the failure funnel by design.
|
|
164
|
-
- `failed` rows
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
[
|
|
164
|
+
- `failed` rows have **no automatic cap** by design — there is no background
|
|
165
|
+
pruning. Use `gflow data errors prune --older-than <age>` for explicit
|
|
166
|
+
retention and `gflow data errors export` to archive history first (see
|
|
167
|
+
[`data errors`](#gflow-data-errors--bounded-retention--export-345) below,
|
|
168
|
+
[#345](https://github.com/ffroliva/gflow-cli/issues/345)). Note `gflow data
|
|
169
|
+
prune` is unrelated: it targets stale `local_files`, not failure history.
|
|
168
170
|
|
|
169
171
|
---
|
|
170
172
|
|
|
@@ -300,6 +302,39 @@ gflow data prune
|
|
|
300
302
|
Only **local files** (where `storage_provider` is NULL) are scanned; cloud-stored
|
|
301
303
|
assets are ignored to prevent accidental pruning of remote objects.
|
|
302
304
|
|
|
305
|
+
### `gflow data errors` — bounded retention + export (#345)
|
|
306
|
+
|
|
307
|
+
Maintain the failed-operation history (the `data list errors` funnel). Two
|
|
308
|
+
subcommands, both explicit operator actions — there is **no automatic/background
|
|
309
|
+
pruning**.
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
# Archive every failure as JSONL (unbounded; newest-first) before deleting
|
|
313
|
+
gflow data errors export -o failures.jsonl
|
|
314
|
+
|
|
315
|
+
# Archive only the slice you are about to prune
|
|
316
|
+
gflow data errors export --older-than 90d -o old-failures.jsonl
|
|
317
|
+
|
|
318
|
+
# Preview what a retention prune would delete (no changes)
|
|
319
|
+
gflow data errors prune --older-than 90d --dry-run
|
|
320
|
+
|
|
321
|
+
# Delete failures older than 90 days
|
|
322
|
+
gflow data errors prune --older-than 90d
|
|
323
|
+
```
|
|
324
|
+
|
|
325
|
+
- `--older-than` takes an age like `90d` / `24h` / `30m` (`d` days, `h` hours,
|
|
326
|
+
`m` minutes; positive integers only). It is **required** on `prune` so
|
|
327
|
+
deletion is always a deliberate age choice; on `export` it is optional
|
|
328
|
+
(default: all failures).
|
|
329
|
+
- `--profile NAME` scopes either command to one profile.
|
|
330
|
+
- `export` writes JSONL to `-o/--output FILE`, or to stdout when omitted —
|
|
331
|
+
reusing the same serialization as `data list errors --json`.
|
|
332
|
+
- Deletion errors map to **exit 16** (`DataStoreError`), consistent with the
|
|
333
|
+
rest of `gflow data`.
|
|
334
|
+
|
|
335
|
+
Archive first if you need the failure history for offline WAF-cadence /
|
|
336
|
+
reliability analysis — pruning is irreversible.
|
|
337
|
+
|
|
303
338
|
### `gflow data media <media_id>` — read a single asset
|
|
304
339
|
|
|
305
340
|
```
|
|
@@ -507,7 +542,7 @@ Live tests (`@pytest.mark.live`) and E2E tests (`@pytest.mark.e2e`) are opt-in a
|
|
|
507
542
|
- **`gflow data ls` / `gflow data show <operation_id>`** — richer browsing without leaving the terminal.
|
|
508
543
|
- **Cost tracking** — once enough operation metadata is reliable, surface "credits spent this month" per profile / model / aspect.
|
|
509
544
|
- **Postgres / Supabase adapter** — for users running gflow on shared workers or wanting cross-machine sync. The repository surface is already designed for this swap.
|
|
510
|
-
- **`gflow data export`** —
|
|
545
|
+
- **`gflow data export`** (full catalog → JSON / Parquet) — the failed-operation slice shipped as `gflow data errors export` (JSONL, #345); a full-catalog / Parquet dump for downstream analytics is still open.
|
|
511
546
|
|
|
512
547
|
These are tracked in [`PLAN.md`](../PLAN.md) under the data-layer phase backlog.
|
|
513
548
|
|
|
@@ -133,7 +133,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
|
|
|
133
133
|
**"A command failed — where is the incident bundle and what's in it?"** → [DEBUGGING § Automatic incident bundles](DEBUGGING.md#automatic-incident-bundles) (layout, triggers, review-before-sharing); privacy boundaries: [SECURITY § Automatic incident bundles](SECURITY.md#automatic-incident-bundles-gflow_cli_incident_capture-default-on); disable via [CONFIGURATION § GFLOW_CLI_INCIDENT_CAPTURE](CONFIGURATION.md#gflow_cli_incident_capture)
|
|
134
134
|
**"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
|
|
135
135
|
**"What does each `ui_automation.*` log event mean?"** → [DEBUGGING § Listener & HTTP-layer debugging](DEBUGGING.md#listener--http-layer-debugging)
|
|
136
|
-
**What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.43.0](LIVE_VERIFICATION_v0.43.0.md) (**private incident diagnostics live-verified 2026-07-23, 1 Veo credit** — real-editor recorder bundle 19/19 checks [structural DOM + host-category reduction + leak-scan clean on real traffic, honest `har_state`], real two-process contention → exit-11 metadata-only bundle with owner evidence and no reclaim, a real credit-free t2i proving no-incident-on-success, and the approved paid `veo-lite` T2V [S43] — HTTP-200 submission, `MEDIA_GENERATION_STATUS_SUCCESSFUL`, 2.3 MB `ftyp` mp4, catalog provenance, no incident bundle, lease re-acquirable — one lifecycle proven, availability soak explicitly NOT claimed). Prior: [v0.42.0](LIVE_VERIFICATION_v0.42.0.md) (**#361 production-readiness live-gaps confirmed live 2026-07-21, 1 Veo credit** — a real `veo-lite` t2v through the worker path persisted a real `remote_started` checkpoint [observer→checkpoint→DB chain confirmed], crash-recovery classified the task `indeterminate` without resubmitting, and mid-launch cancellation released the `ProfileLease` credit-free; full evidence in [v0.40.0-production-readiness § "2026-07-21 live follow-up"](LIVE_VERIFICATION_v0.40.0-production-readiness.md#2026-07-21-live-follow-up-0420-cycle); #359 content-safety `400`→`ContentPolicyError` classification is unit-covered, not live-triggered [would require a deliberate policy violation]; #360/#362 are docs-only, verified by the documentation gates). Prior: [v0.41.0](LIVE_VERIFICATION_v0.41.0.md) (**#357 production-readiness hardening — stale-session fail-fast, free image gen, paid veo-lite T2V all proven live**). Prior: [v0.40.0](LIVE_VERIFICATION_v0.40.0.md) (**#344 `@`-mention asset-tagging resolution proven live e2e, ~2 Imagen credits** — `gflow character create` staged a real taggable character [bound reference images, `has_reference_images` guard], the e2e test's documented propagation wait cleared Flow's `projectInitialData` lag, and `gflow image t2i "@Zoro …"` passed with returncode 0, a real generated image, and the correctly de-tagged prompt in the catalog — no code changes needed, `resolve_and_apply` as merged in #344 already works end-to-end; pre-existing unrelated issue #174 [Flow media-library A/B flake] can still intermittently block generation regardless of this feature — recorded, not omitted). Prior: [v0.39.0](LIVE_VERIFICATION_v0.39.0.md) (**#341 failed-generation persistence proven live** — a real `image t2i` on denon82 failed at the wire [`batchGenerateImages` HTTP 400 → `WireFormatError`] and the record-on-catch funnel wrote the **first-ever `failed` row** into the production catalog [`error_type=wire-format`, redacted `error_detail`, browsable via `gflow data list errors`], **$0**; the remaining paid paths [video/chain/batch/movie/worker] are funnel-regression-tested, not force-failed live [would cost credits], and the status-aware `succeeded=false` video-poll fix is unit-locked — recorded, not omitted). Prior: [v0.38.1](LIVE_VERIFICATION_v0.38.1.md) (**#338 agentic-pin recovery proven live ON the pinned account** — run 1 caught the composer-render race the unit suite could not [`ensure_media_incomplete` +115 ms, toggle never reached]; the readiness-wait fix landed and run 2 recovered classic on denon82 after ~2h of pin [`ui_driver.bound mode=classic`, real 768×1376 JPEG, exact prompt adherence]; reload branch unit-locked, live trigger not observed this cycle — recorded, not omitted). Prior: [v0.38.0](LIVE_VERIFICATION_v0.38.0.md) (**#332 mode control + #314 i2i ref dedup proven live e2e** — `image t2i --ui-mode classic` recovered agentic→classic in a real run [`ui_mode.attempt_exit_agent` → full classic chain, 1376×768 JPEG]; two identical `image i2i` runs proved the dedup contract [run 1: picker miss → `image_uploaded`; run 2: `reference_deduped_by_filename`, ZERO uploads]; `video t2v` veo-fast [`MEDIA_GENERATION_STATUS_SUCCESSFUL`, 15.2 MB `ftyp` mp4]; autopilot #333 recorded deferred-with-reason [hermes-ops deployment staged separately]). Prior: [v0.37.0](LIVE_VERIFICATION_v0.37.0.md) (**viewport 1920×1080 + agentic count enforcement + FIPS-safe SAPISIDHASH proven live e2e** — `image t2i` [classic cohort, real 1376×768 JPEG] and `video t2v` veo-fast [`MEDIA_GENERATION_STATUS_SUCCESSFUL`, 11.5 MB `ftyp` mp4] both succeeded end-to-end at the new 1920×1080 viewport with every selector resolving [no drift]; SAPISIDHASH digest verified byte-identical [FIPS-safe `usedforsecurity=False`], auth unchanged). Prior: [v0.36.0](LIVE_VERIFICATION_v0.36.0.md) (**#316 diagnostic tooling live-verified against real Flow traffic** — `GFLOW_CLI_HAR_PATH` captured a real 54-entry HAR [real Flow domains, 34× 200s, and a genuine 401 the tool exists to diagnose]; `GFLOW_CLI_DEBUG_TRACEBACK`'s typed-error scoping confirmed live [console output identical with/without the flag on a `GFlowError`]; unhandled-path behavior covered by 6 new tests (30 total across both files) + SDD task review; #312 reference-entity-smuggling fix covered by its own dedicated e2e test). Prior: [v0.35.0](LIVE_VERIFICATION_v0.35.0.md) (**#305-follow-up multimodal reverse-engineering & storyboard tool proven live e2e** — `gflow tools run storyboard` successfully deconstructed a cyberpunk scene into a cohesive 4-panel sequence; `reverse-engineer` tool extracts frames from video streams/URLs using `claude-video`'s `watch.py` and produces structured prompt components using Gemini multimodal models; dynamic token budgeting and strict Pyright types verified via test suite). Prior: [v0.34.0](LIVE_VERIFICATION_v0.34.0.md) (**#299 `--ui-mode` gate proven live, ZERO credits** — drove `get_ui_driver` directly over 4 real editor loads, never generated: bidirectional switch works [classic→agentic via `_force_agent_mode`, agentic→classic via `_exit_agent_mode`, each DOM-reverified], `agentic`-when-already-agentic is idempotent, and a timed-out toggle → **exit-28 fail-fast before submission**; deprecation behavior-change [`prefer_classic`→exit 28] confirmed). Prior: [v0.33.0](LIVE_VERIFICATION_v0.33.0.md) (**#287-follow-up picker fix proven live on the original repro** — the v0.32.1-failing `i2v <uuid> --project <crowded>` command now exits 0 with a real 3.0 MB `ftyp` mp4, `frame_ref_attached` + `video_saved`, zero uploads; **#241 jitter live-verified on both paths** — flag `--jitter 4-6` → `batch_jitter_sleep seconds=4.98`, and the new 0.5–1.5 s default → `seconds=1.47`, each firing exactly once between two t2i submissions; environment note: the denon82 cohort is now natively agentic and round-2 generations hit the pre-existing #281 `MediaAttributionError`, not a regression). Prior: [v0.32.1](LIVE_VERIFICATION_v0.32.1.md) (**#293 teardown fix live-verified credit-free** — error-path aborts leave ZERO chrome.exe holding the profile [3× leak reproduced pre-fix same day]; force-close fallback + ProfileLockedError translation unit-pinned; #283 wave logic fixes mock-verified to exact call counts). Prior: [v0.32.0](LIVE_VERIFICATION_v0.32.0.md) (**#287 UUID i2v frames proven live e2e** — an in-project asset selected by media UUID in the frame-slot dialog [frame_ref_attached, startImage bound on the wire, ZERO upload events] produced a real 720×1280 interpolation, resolving the #237 negative prior; foreign UUID → exit 9 pre-generation with screenshot; **#288 duration fail-fast proven live** — exit 23 pre-submit saved a 10-credit generation, and the debug screenshot confirmed the duration control is ABSENT from the cohort's settings popover [locale hypothesis refuted]; upload-400 exit-27 repro deferred-with-reason — the original rejected JPEG no longer exists). Prior: [v0.31.0](LIVE_VERIFICATION_v0.31.0.md) (**#281 wrong-media defenses live-verified in BOTH directions, credit-free** — correct attribution downloads with real wire metadata [seed, 768×1376]; the incident-class lazy-render ambiguity reproduced live and hard-stopped with `MediaAttributionError` exit 26 naming every candidate UUID, no file written; **#282 two-UUID-ref i2i proven e2e** — both freshly generated portrait UUIDs picker-selected into one scene with both canonical identities visually transferred). Prior: [v0.30.0](LIVE_VERIFICATION_v0.30.0.md) (**agentic-cohort image path + both fixes live-verified credit-free** — native 768×1376 stills, i2i-chain + canonical-ref identity hold; the character-create `DataIntegrityError` and the `prefer_classic` WARNING were observed live then fixed [recorder idempotent + INFO log]; MCP video-param feature deferred-with-reason on Veo credits, per the stills-only goal). Prior: [v0.29.0](LIVE_VERIFICATION_v0.29.0.md) (**persistent `gflow instructions` CRUD proven live e2e GREEN, credit-free** — 11-command sequence on a fresh project: add incl. `--ref <image-UUID>` attach, list/enable/disable, master toggle both ways, TOML `apply` destructive full-sync with `enabled=false` honored, `rm` with server card-id preserved across mutations; movie brief-sync code-path-verified via the same primitives, deferred-with-reason on credits; MCP `gflow_instructions_*` tools are thin adapters over the live-verified primitives). Prior: [v0.28.0](LIVE_VERIFICATION_v0.28.0.md) (**agent instructions `-i` now steer agentic generation — crayon e2e GREEN**: a style-neutral prompt + an enabled "crayon" card produced an unmistakable crayon drawing through the real transport; root causes were conversational phrasing + the `project_brief.enabled` master switch). Prior: [v0.27.1](LIVE_VERIFICATION_v0.27.1.md) (**v0.27.0 release follow-up fixes and documentation sync**). Prior: [v0.27.0](LIVE_VERIFICATION_v0.27.0.md) (**`[style]` block with named variants + prompt-aware resume — credit-free CLI verification**: real `movie run --dry-run` 3-way ledger proving resolved-style display, `skip (done)` on matching `style_hash`, and `re-run (style changed)` after a style edit; composition is local, wire path untouched, so no Veo credits spent — first credited styled run will confirm visually). Prior: [v0.26.0](LIVE_VERIFICATION_v0.26.0.md) (**image i2i by generated-image UUID proven live e2e GREEN** — the existing asset is *selected in place* by its media UUID, no duplicate upload, producing an i2i output that references it; plus generated-image `display_name` capture, credited @C1ph3r404). Prior: [v0.25.0](LIVE_VERIFICATION_v0.25.0.md) (**#237 remote-UUID i2v proven live e2e GREEN** — a real 8s 720×1280 interpolation from a generated image's UUID, after the picker-search attach was reworked to local upload; #240 home-`.env` matrix live; plus two silent-failure guards root-caused live: video-as-image download rejection and rejected-upload fail-loud). Prior: [v0.24.0](LIVE_VERIFICATION_v0.24.0.md) (--project parity across CLI + MCP — automated coverage; live gen auth-gated). Prior: [v0.23.0](LIVE_VERIFICATION_v0.23.0.md) (MCP generation wiring proven live end-to-end — tool→worker→real Flow REST→structured-error translation; final image-write blocked by an expired session, environmental. #222 macOS fix reporter-verified e2e on Apple Silicon). Prior: [v0.22.0](LIVE_VERIFICATION_v0.22.0.md) (Tools framework — automated/CI coverage complete; credit/key-gated live feature run is a pending owner gate, see the doc) · [v0.21.0](LIVE_VERIFICATION_v0.21.0.md) (MCP server over stdio + HTTP/SSE — credit-free protocol handshake; 4 tools / 2 prompts / 3 resources confirmed on stdout) · [v0.20.1](LIVE_VERIFICATION_v0.20.1.md) · [v0.20.0](LIVE_VERIFICATION_v0.20.0.md) · [v0.19.0](LIVE_VERIFICATION_v0.19.0.md) · [v0.18.0](LIVE_VERIFICATION_v0.18.0.md) · [v0.17.0](LIVE_VERIFICATION_v0.17.0.md) · [v0.16.0](LIVE_VERIFICATION_v0.16.0.md) · [v0.13.0](LIVE_VERIFICATION_v0.13.0.md) · [v0.12.0](LIVE_VERIFICATION_v0.12.0.md) · [v0.11.0](LIVE_VERIFICATION_v0.11.0.md) · [v0.10.0](LIVE_VERIFICATION_v0.10.0.md) · [v0.9.1](LIVE_VERIFICATION_v0.9.1.md) · [v0.9.0](LIVE_VERIFICATION_v0.9.0.md) · [v0.8.1](LIVE_VERIFICATION_v0.8.1.md) · [v0.7.0](LIVE_VERIFICATION_v0.7.0.md)
|
|
136
|
+
**What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.44.0](LIVE_VERIFICATION_v0.44.0.md) (**#381 dual-side project management & Playwright Chromium transport live-verified 2026-07-26** — real-editor project creation + rename tRPC server/DOM sync, prompt slugging, `gflow project` subcommand family, HTTP 429 adaptive backoff, and full E2E test suite). Prior: [v0.43.0](LIVE_VERIFICATION_v0.43.0.md) (**private incident diagnostics live-verified 2026-07-23, 1 Veo credit**). Prior: [v0.42.0](LIVE_VERIFICATION_v0.42.0.md) (**#361 production-readiness live-gaps confirmed live 2026-07-21, 1 Veo credit** — a real `veo-lite` t2v through the worker path persisted a real `remote_started` checkpoint [observer→checkpoint→DB chain confirmed], crash-recovery classified the task `indeterminate` without resubmitting, and mid-launch cancellation released the `ProfileLease` credit-free; full evidence in [v0.40.0-production-readiness § "2026-07-21 live follow-up"](LIVE_VERIFICATION_v0.40.0-production-readiness.md#2026-07-21-live-follow-up-0420-cycle); #359 content-safety `400`→`ContentPolicyError` classification is unit-covered, not live-triggered [would require a deliberate policy violation]; #360/#362 are docs-only, verified by the documentation gates). Prior: [v0.41.0](LIVE_VERIFICATION_v0.41.0.md) (**#357 production-readiness hardening — stale-session fail-fast, free image gen, paid veo-lite T2V all proven live**). Prior: [v0.40.0](LIVE_VERIFICATION_v0.40.0.md) (**#344 `@`-mention asset-tagging resolution proven live e2e, ~2 Imagen credits** — `gflow character create` staged a real taggable character [bound reference images, `has_reference_images` guard], the e2e test's documented propagation wait cleared Flow's `projectInitialData` lag, and `gflow image t2i "@Zoro …"` passed with returncode 0, a real generated image, and the correctly de-tagged prompt in the catalog — no code changes needed, `resolve_and_apply` as merged in #344 already works end-to-end; pre-existing unrelated issue #174 [Flow media-library A/B flake] can still intermittently block generation regardless of this feature — recorded, not omitted). Prior: [v0.39.0](LIVE_VERIFICATION_v0.39.0.md) (**#341 failed-generation persistence proven live** — a real `image t2i` on denon82 failed at the wire [`batchGenerateImages` HTTP 400 → `WireFormatError`] and the record-on-catch funnel wrote the **first-ever `failed` row** into the production catalog [`error_type=wire-format`, redacted `error_detail`, browsable via `gflow data list errors`], **$0**; the remaining paid paths [video/chain/batch/movie/worker] are funnel-regression-tested, not force-failed live [would cost credits], and the status-aware `succeeded=false` video-poll fix is unit-locked — recorded, not omitted). Prior: [v0.38.1](LIVE_VERIFICATION_v0.38.1.md) (**#338 agentic-pin recovery proven live ON the pinned account** — run 1 caught the composer-render race the unit suite could not [`ensure_media_incomplete` +115 ms, toggle never reached]; the readiness-wait fix landed and run 2 recovered classic on denon82 after ~2h of pin [`ui_driver.bound mode=classic`, real 768×1376 JPEG, exact prompt adherence]; reload branch unit-locked, live trigger not observed this cycle — recorded, not omitted). Prior: [v0.38.0](LIVE_VERIFICATION_v0.38.0.md) (**#332 mode control + #314 i2i ref dedup proven live e2e** — `image t2i --ui-mode classic` recovered agentic→classic in a real run [`ui_mode.attempt_exit_agent` → full classic chain, 1376×768 JPEG]; two identical `image i2i` runs proved the dedup contract [run 1: picker miss → `image_uploaded`; run 2: `reference_deduped_by_filename`, ZERO uploads]; `video t2v` veo-fast [`MEDIA_GENERATION_STATUS_SUCCESSFUL`, 15.2 MB `ftyp` mp4]; autopilot #333 recorded deferred-with-reason [hermes-ops deployment staged separately]). Prior: [v0.37.0](LIVE_VERIFICATION_v0.37.0.md) (**viewport 1920×1080 + agentic count enforcement + FIPS-safe SAPISIDHASH proven live e2e** — `image t2i` [classic cohort, real 1376×768 JPEG] and `video t2v` veo-fast [`MEDIA_GENERATION_STATUS_SUCCESSFUL`, 11.5 MB `ftyp` mp4] both succeeded end-to-end at the new 1920×1080 viewport with every selector resolving [no drift]; SAPISIDHASH digest verified byte-identical [FIPS-safe `usedforsecurity=False`], auth unchanged). Prior: [v0.36.0](LIVE_VERIFICATION_v0.36.0.md) (**#316 diagnostic tooling live-verified against real Flow traffic** — `GFLOW_CLI_HAR_PATH` captured a real 54-entry HAR [real Flow domains, 34× 200s, and a genuine 401 the tool exists to diagnose]; `GFLOW_CLI_DEBUG_TRACEBACK`'s typed-error scoping confirmed live [console output identical with/without the flag on a `GFlowError`]; unhandled-path behavior covered by 6 new tests (30 total across both files) + SDD task review; #312 reference-entity-smuggling fix covered by its own dedicated e2e test). Prior: [v0.35.0](LIVE_VERIFICATION_v0.35.0.md) (**#305-follow-up multimodal reverse-engineering & storyboard tool proven live e2e** — `gflow tools run storyboard` successfully deconstructed a cyberpunk scene into a cohesive 4-panel sequence; `reverse-engineer` tool extracts frames from video streams/URLs using `claude-video`'s `watch.py` and produces structured prompt components using Gemini multimodal models; dynamic token budgeting and strict Pyright types verified via test suite). Prior: [v0.34.0](LIVE_VERIFICATION_v0.34.0.md) (**#299 `--ui-mode` gate proven live, ZERO credits** — drove `get_ui_driver` directly over 4 real editor loads, never generated: bidirectional switch works [classic→agentic via `_force_agent_mode`, agentic→classic via `_exit_agent_mode`, each DOM-reverified], `agentic`-when-already-agentic is idempotent, and a timed-out toggle → **exit-28 fail-fast before submission**; deprecation behavior-change [`prefer_classic`→exit 28] confirmed). Prior: [v0.33.0](LIVE_VERIFICATION_v0.33.0.md) (**#287-follow-up picker fix proven live on the original repro** — the v0.32.1-failing `i2v <uuid> --project <crowded>` command now exits 0 with a real 3.0 MB `ftyp` mp4, `frame_ref_attached` + `video_saved`, zero uploads; **#241 jitter live-verified on both paths** — flag `--jitter 4-6` → `batch_jitter_sleep seconds=4.98`, and the new 0.5–1.5 s default → `seconds=1.47`, each firing exactly once between two t2i submissions; environment note: the denon82 cohort is now natively agentic and round-2 generations hit the pre-existing #281 `MediaAttributionError`, not a regression). Prior: [v0.32.1](LIVE_VERIFICATION_v0.32.1.md) (**#293 teardown fix live-verified credit-free** — error-path aborts leave ZERO chrome.exe holding the profile [3× leak reproduced pre-fix same day]; force-close fallback + ProfileLockedError translation unit-pinned; #283 wave logic fixes mock-verified to exact call counts). Prior: [v0.32.0](LIVE_VERIFICATION_v0.32.0.md) (**#287 UUID i2v frames proven live e2e** — an in-project asset selected by media UUID in the frame-slot dialog [frame_ref_attached, startImage bound on the wire, ZERO upload events] produced a real 720×1280 interpolation, resolving the #237 negative prior; foreign UUID → exit 9 pre-generation with screenshot; **#288 duration fail-fast proven live** — exit 23 pre-submit saved a 10-credit generation, and the debug screenshot confirmed the duration control is ABSENT from the cohort's settings popover [locale hypothesis refuted]; upload-400 exit-27 repro deferred-with-reason — the original rejected JPEG no longer exists). Prior: [v0.31.0](LIVE_VERIFICATION_v0.31.0.md) (**#281 wrong-media defenses live-verified in BOTH directions, credit-free** — correct attribution downloads with real wire metadata [seed, 768×1376]; the incident-class lazy-render ambiguity reproduced live and hard-stopped with `MediaAttributionError` exit 26 naming every candidate UUID, no file written; **#282 two-UUID-ref i2i proven e2e** — both freshly generated portrait UUIDs picker-selected into one scene with both canonical identities visually transferred). Prior: [v0.30.0](LIVE_VERIFICATION_v0.30.0.md) (**agentic-cohort image path + both fixes live-verified credit-free** — native 768×1376 stills, i2i-chain + canonical-ref identity hold; the character-create `DataIntegrityError` and the `prefer_classic` WARNING were observed live then fixed [recorder idempotent + INFO log]; MCP video-param feature deferred-with-reason on Veo credits, per the stills-only goal). Prior: [v0.29.0](LIVE_VERIFICATION_v0.29.0.md) (**persistent `gflow instructions` CRUD proven live e2e GREEN, credit-free** — 11-command sequence on a fresh project: add incl. `--ref <image-UUID>` attach, list/enable/disable, master toggle both ways, TOML `apply` destructive full-sync with `enabled=false` honored, `rm` with server card-id preserved across mutations; movie brief-sync code-path-verified via the same primitives, deferred-with-reason on credits; MCP `gflow_instructions_*` tools are thin adapters over the live-verified primitives). Prior: [v0.28.0](LIVE_VERIFICATION_v0.28.0.md) (**agent instructions `-i` now steer agentic generation — crayon e2e GREEN**: a style-neutral prompt + an enabled "crayon" card produced an unmistakable crayon drawing through the real transport; root causes were conversational phrasing + the `project_brief.enabled` master switch). Prior: [v0.27.1](LIVE_VERIFICATION_v0.27.1.md) (**v0.27.0 release follow-up fixes and documentation sync**). Prior: [v0.27.0](LIVE_VERIFICATION_v0.27.0.md) (**`[style]` block with named variants + prompt-aware resume — credit-free CLI verification**: real `movie run --dry-run` 3-way ledger proving resolved-style display, `skip (done)` on matching `style_hash`, and `re-run (style changed)` after a style edit; composition is local, wire path untouched, so no Veo credits spent — first credited styled run will confirm visually). Prior: [v0.26.0](LIVE_VERIFICATION_v0.26.0.md) (**image i2i by generated-image UUID proven live e2e GREEN** — the existing asset is *selected in place* by its media UUID, no duplicate upload, producing an i2i output that references it; plus generated-image `display_name` capture, credited @C1ph3r404). Prior: [v0.25.0](LIVE_VERIFICATION_v0.25.0.md) (**#237 remote-UUID i2v proven live e2e GREEN** — a real 8s 720×1280 interpolation from a generated image's UUID, after the picker-search attach was reworked to local upload; #240 home-`.env` matrix live; plus two silent-failure guards root-caused live: video-as-image download rejection and rejected-upload fail-loud). Prior: [v0.24.0](LIVE_VERIFICATION_v0.24.0.md) (--project parity across CLI + MCP — automated coverage; live gen auth-gated). Prior: [v0.23.0](LIVE_VERIFICATION_v0.23.0.md) (MCP generation wiring proven live end-to-end — tool→worker→real Flow REST→structured-error translation; final image-write blocked by an expired session, environmental. #222 macOS fix reporter-verified e2e on Apple Silicon). Prior: [v0.22.0](LIVE_VERIFICATION_v0.22.0.md) (Tools framework — automated/CI coverage complete; credit/key-gated live feature run is a pending owner gate, see the doc) · [v0.21.0](LIVE_VERIFICATION_v0.21.0.md) (MCP server over stdio + HTTP/SSE — credit-free protocol handshake; 4 tools / 2 prompts / 3 resources confirmed on stdout) · [v0.20.1](LIVE_VERIFICATION_v0.20.1.md) · [v0.20.0](LIVE_VERIFICATION_v0.20.0.md) · [v0.19.0](LIVE_VERIFICATION_v0.19.0.md) · [v0.18.0](LIVE_VERIFICATION_v0.18.0.md) · [v0.17.0](LIVE_VERIFICATION_v0.17.0.md) · [v0.16.0](LIVE_VERIFICATION_v0.16.0.md) · [v0.13.0](LIVE_VERIFICATION_v0.13.0.md) · [v0.12.0](LIVE_VERIFICATION_v0.12.0.md) · [v0.11.0](LIVE_VERIFICATION_v0.11.0.md) · [v0.10.0](LIVE_VERIFICATION_v0.10.0.md) · [v0.9.1](LIVE_VERIFICATION_v0.9.1.md) · [v0.9.0](LIVE_VERIFICATION_v0.9.0.md) · [v0.8.1](LIVE_VERIFICATION_v0.8.1.md) · [v0.7.0](LIVE_VERIFICATION_v0.7.0.md)
|
|
137
137
|
**"Where is the reverse-engineered wire protocol for a feature?"** → the `*_RECON.md` design docs: [CHARACTER_RECON](CHARACTER_RECON.md) (Flow character entity protocol), [IMAGE_UPSCALE_RECON](IMAGE_UPSCALE_RECON.md) (`/v1/flow/upsampleImage` wire). Naming convention: one `<FEATURE>_RECON.md` per reverse-engineered surface, kept as the durable spec after the feature ships. Pre-capture research recons: [ASSET_TAGGING_RECON](ASSET_TAGGING_RECON.md) (`@`-mention asset tagging — shipped in v0.40.0, see [LIVE_VERIFICATION_v0.40.0](LIVE_VERIFICATION_v0.40.0.md)).
|
|
138
138
|
**"What was live-verified for the data layer (PR #58)?"** → [LIVE_VERIFICATION_data_layer](LIVE_VERIFICATION_data_layer.md) — 1 Imagen + 1 Veo credit on denon82, 6-layer ledger (file + magic + Pillow + DB rows + CLI round-trip + structlog)
|
|
139
139
|
**"What was live-verified for the video-download feature (#29)?"** → [LIVE_VERIFICATION_video_download](LIVE_VERIFICATION_video_download.md)
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# Live verification — v0.43.0 (private incident diagnostics)
|
|
2
2
|
|
|
3
|
-
> Evidence for the
|
|
4
|
-
>
|
|
3
|
+
> Evidence for the private incident diagnostics live matrix (the design spec was
|
|
4
|
+
> consolidated into `docs/ARCHITECTURE.md`, `docs/SECURITY.md`, and
|
|
5
|
+
> `docs/DEBUGGING.md` at the v0.43.0 release; original in git history).
|
|
5
6
|
> Offline coverage (2,600+ tests incl. 43-scenario traceability) verifies
|
|
6
7
|
> gflow-cli's own behavior; this document records what was proven against
|
|
7
8
|
> **real Google Flow**. Harness:
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Live Verification Evidence — v0.44.0
|
|
2
|
+
|
|
3
|
+
> **Release:** `v0.44.0`
|
|
4
|
+
> **Date:** 2026-07-26
|
|
5
|
+
> **Primary Features Verified:** Dual-side project naming & management (`gflow project`), prompt slugging, HTTP 429 adaptive backoff / rate-limit recovery, and Playwright Chromium live transport integration.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Executive Summary & Verification Matrix
|
|
10
|
+
|
|
11
|
+
| Feature / System | Scope | Execution Target | Evidence Ledger | Verdict |
|
|
12
|
+
|---|---|---|---|---|
|
|
13
|
+
| **Dual-Side Project Naming (#381)** | Project creation with `--project-name` & title rename propagation | Live Playwright Chromium + Google Flow tRPC API (`project.createProject` & `project.renameProject`) | `tests/e2e/test_project_naming_e2e.py::test_project_creation_and_rename_live_browser_e2e` (11.97s) | **GREEN** |
|
|
14
|
+
| **Prompt Slugging (#381)** | Auto-deriving 40-char prompt slugs for scratch projects | Pure helper function `slugify_project_name` | `tests/cli/test_helpers.py` & `test_slugify_project_name_e2e` | **GREEN** |
|
|
15
|
+
| **`gflow project` Subcommands (#381)** | `list`, `show`, `rename`, `create` subcommands | Click CLI runner & SQLite catalog repository | `tests/test_cli_project.py` (11/11 unit tests) | **GREEN** |
|
|
16
|
+
| **HTTP 429 Rate Limit Recovery (#384)** | Adaptive backoff and `RateLimitError` handling | `FlowApiClient` transport error handler | Unit suite & `test_ui_automation.py` | **GREEN** |
|
|
17
|
+
| **Codex Plugin Skills** | Repo-local `$gflow:*` skills | `.codex-plugin/plugin.json` | Manifest validation & CLI gates | **GREEN** |
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 2. Live Playwright Chromium Execution Transcript & Invariants
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
tests/e2e/test_project_naming_e2e.py::test_slugify_project_name_e2e PASSED [ 25%]
|
|
25
|
+
tests/e2e/test_project_naming_e2e.py::test_project_creation_and_rename_dual_side_e2e PASSED [ 50%]
|
|
26
|
+
tests/e2e/test_project_naming_e2e.py::test_project_cli_subcommands_e2e PASSED [ 75%]
|
|
27
|
+
tests/e2e/test_project_naming_e2e.py::test_project_creation_and_rename_live_browser_e2e PASSED [100%]
|
|
28
|
+
|
|
29
|
+
============================= 4 passed in 11.97s ==============================
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 5-Layer Verification Ledger
|
|
33
|
+
1. **File Count:** 4 files created/updated (`src/gflow_cli/cli_project.py`, `tests/test_cli_project.py`, `tests/e2e/test_project_naming_e2e.py`, `PLAN.md`).
|
|
34
|
+
2. **Wire Protocol Invariant:** Live tRPC routes `https://labs.google/fx/api/trpc/project.createProject` and `project.renameProject` executed via Playwright Chromium page session.
|
|
35
|
+
3. **Database Provenance:** SQLite catalog `projects` table updated in lockstep with `title` column and `repo.get_project()` read-back matching server state.
|
|
36
|
+
4. **CLI Table / JSON Schema Parity:** `gflow project list` and `gflow project show` verified across Rich table rendering and machine-readable JSON envelopes.
|
|
37
|
+
5. **Quality Gates:** 100% green across `check_repo_hygiene.py`, `check_doc_links.py`, `check_website_docs_pii.py`, `ruff check`, `ruff format`, `pyright src`, and test suite.
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
## Current release
|
|
6
6
|
|
|
7
|
-
**v0.
|
|
7
|
+
**v0.44.0 — alpha.** **Dual-side project naming & management (#381).** Feature set includes `gflow project` subcommand family (`list`, `show`, `rename`, `create`), `--project-name` / `--project-title` options across `gflow image` (`t2i`, `i2i`) and `gflow video` (`t2v`, `i2v`, `r2v`) generation commands, prompt slugging for scratch projects, dual-side title sync updating Google Flow's tRPC server/UI and local SQLite catalog in lockstep, HTTP 429 adaptive backoff / `RateLimitError` recovery (#384), character body prompt composer fixes (#378), and a repo-local Codex plugin (`$gflow:*` skills). Verified via full test suite and live Playwright Chromium E2E transport test. See [LIVE_VERIFICATION_v0.44.0.md](LIVE_VERIFICATION_v0.44.0.md).
|
|
8
8
|
|
|
9
|
-
**Develop (unreleased, post-v0.
|
|
9
|
+
**Develop (unreleased, post-v0.44.0):** *(empty — develop is the staging branch for the next release).*
|
|
10
10
|
|
|
11
11
|
<details><summary>v0.42.0 — content-safety classification + Antigravity coding agent (#359/#360/#361)</summary>
|
|
12
12
|
|