gflow-cli 0.55.0__tar.gz → 0.57.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.55.0 → gflow_cli-0.57.0}/.codex-plugin/plugin.json +1 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.env.template +15 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.github/dependabot.yml +44 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.github/workflows/ci.yml +45 -17
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.github/workflows/deps-watch.yml +5 -2
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.github/workflows/external-pr-triage.yml +1 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.github/workflows/governance-advisory.yml +2 -2
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.github/workflows/governance-benchmark.yml +2 -2
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.github/workflows/labels.yml +1 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.github/workflows/main-base-guard.yml +1 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.github/workflows/pages.yml +12 -7
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.github/workflows/release.yml +10 -6
- gflow_cli-0.57.0/.github/workflows/scorecard.yml +52 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.gitignore +4 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/CHANGELOG.md +117 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/CONFIGURATION.md +3 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/KNOWN_ISSUES.md +60 -6
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/PKG-INFO +2 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/README.md +1 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/AGENT_UI_E2E.md +1 -1
- {gflow_cli-0.55.0/website → gflow_cli-0.57.0}/docs/ARCHITECTURE.md +9 -4
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/AUTHENTICATION.md +33 -1
- {gflow_cli-0.55.0/website → gflow_cli-0.57.0}/docs/CONFIGURATION.md +26 -0
- {gflow_cli-0.55.0/website → gflow_cli-0.57.0}/docs/DEBUGGING.md +5 -4
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/INDEX.md +6 -1
- gflow_cli-0.57.0/docs/LIVE_VERIFICATION_v0.56.0.md +138 -0
- gflow_cli-0.57.0/docs/LIVE_VERIFICATION_v0.57.0.md +198 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/MCP.md +35 -9
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/PROJECT_STATUS.md +13 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/SECURITY.md +25 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/USAGE.md +17 -7
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/PLAN.md +9 -0
- gflow_cli-0.57.0/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/PLAN.md +70 -0
- gflow_cli-0.57.0/docs/superpowers/plans/2026-08-14-video-ui-mode-policy/SCENARIO.md +26 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/spikes/2026-08-01-mcp-2026-07-28-spec-impact.md +4 -2
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/llms.txt +1 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/pyproject.toml +1 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/autopilot/Dockerfile.triage +9 -3
- gflow_cli-0.57.0/scripts/autopilot/package-lock.json +140 -0
- gflow_cli-0.57.0/scripts/autopilot/package.json +8 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/ci/check_repo_hygiene.py +37 -0
- gflow_cli-0.57.0/scripts/ci/check_test_count.py +52 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/ci/generate_website_docs.py +24 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/__init__.py +1 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/client.py +18 -3
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/drivers/factory.py +5 -2
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/experimental/bearer.py +31 -25
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +8 -2
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +20 -14
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/mode_control.py +79 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/ui_automation.py +13 -82
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/ui_automation_video.py +38 -10
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/video.py +21 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/auth/verification.py +22 -14
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/browser_manager.py +109 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/cli.py +38 -2
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/cli_video.py +42 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/config.py +22 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/errors.py +41 -9
- gflow_cli-0.57.0/src/gflow_cli/mcp/resources.py +219 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/mcp/server.py +46 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/mcp/tools.py +151 -58
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/profile_lease.py +121 -33
- gflow_cli-0.57.0/src/gflow_cli/update_check.py +151 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/worker/codec.py +4 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_client_incidents.py +2 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_client_launch_kwargs.py +49 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_video_request.py +22 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/drivers/test_ui_mode.py +43 -6
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_agentic_cohort_detection.py +9 -2
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_mode_control.py +82 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_selector_symmetry.py +5 -4
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_ui_automation.py +0 -73
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_ui_automation_video.py +157 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/auth/test_verification.py +34 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_video.py +71 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/conftest.py +5 -0
- gflow_cli-0.57.0/tests/mcp/test_auth_status_tool.py +83 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/mcp/test_cli_parity.py +8 -8
- gflow_cli-0.57.0/tests/mcp/test_http_transport.py +92 -0
- gflow_cli-0.57.0/tests/mcp/test_known_issues_resource.py +106 -0
- gflow_cli-0.57.0/tests/mcp/test_no_spend.py +84 -0
- gflow_cli-0.57.0/tests/mcp/test_rate_limit_envelope.py +76 -0
- gflow_cli-0.57.0/tests/mcp/test_resources.py +22 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/mcp/test_server.py +61 -12
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/mcp/test_tools_wired.py +5 -2
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/scripts/test_check_repo_hygiene.py +48 -0
- gflow_cli-0.57.0/tests/scripts/test_check_test_count.py +66 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_browser_manager.py +185 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_errors.py +13 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_profile_lease.py +169 -0
- gflow_cli-0.57.0/tests/test_update_check.py +266 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/uv.lock +4 -4
- {gflow_cli-0.55.0 → gflow_cli-0.57.0/website}/docs/ARCHITECTURE.md +9 -4
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/AUTHENTICATION.md +33 -1
- {gflow_cli-0.55.0 → gflow_cli-0.57.0/website}/docs/CONFIGURATION.md +26 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0/website}/docs/DEBUGGING.md +5 -4
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/KNOWN_ISSUES.md +76 -22
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/MCP.md +35 -9
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/SECURITY.md +25 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/USAGE.md +17 -7
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/index.md +2 -0
- gflow_cli-0.57.0/website/requirements.in +3 -0
- gflow_cli-0.57.0/website/requirements.txt +494 -0
- gflow_cli-0.55.0/scripts/dev/monitor_pr_38.py +0 -37
- gflow_cli-0.55.0/src/gflow_cli/mcp/resources.py +0 -97
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.agents/plugins/marketplace.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/README.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/active.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/branch-review.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/changelog.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/check.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/doc-review.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/issue-assessment.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/issue-resolve.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/known-issues.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/live-verify.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/llm-council.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/next.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/plan.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/pr-council-review.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/predict.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/release.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/scenario.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/sonar.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.claude/commands/gflow/status.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.gitattributes +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.github/CODEOWNERS +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.github/copilot-instructions.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.gitleaks.toml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.pre-commit-config.yaml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/.secrets.baseline +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/AGENTS.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/CLAUDE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/CONTRIBUTING.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/DISCLAIMER.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/LICENSE +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/RELEASE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/ROADMAP.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/conftest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docker-compose.yml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/AGENT_GUIDE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/AGENT_UI_RECON.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/ASSET_TAGGING_RECON.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/CHARACTER.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/CHARACTER_RECON.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/DEMOS.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/GITHUB.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_playwright_1.61.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.43.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.44.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.45.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.46.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.46.1.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.47.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.48.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.49.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.50.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.51.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.52.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.54.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.55.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/MOVIE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/REFERENCE_STRATEGIES.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/TOOLS.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/assets/demo-split-pf.gif +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/assets/example-run.gif +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/assets/examples.webp +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/medium_tutorial.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/schemas/movie-handoff.schema.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/sonar-cleanup-tracker.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-26-character-prompt-polishing/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-26-self-documenting-errors/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-27-overlay-banner-dismissal/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-07-27-tier-aware-credit-confirmations/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-08-04-mcp-tasks/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-08-04-output-hardening/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-08-05-issue-317-intra-batch-references/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-08-05-issue-402-entity-provenance/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-08-05-issue-451-duration-tab-drift/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-08-06-driver-delay-jittering/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/PLAN.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-08-06-overlay-changelog-watermark/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/plans/2026-08-06-ui-mode-policy/SCENARIO.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/eval/pr_triage_eval.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/eval/pr_triage_fixtures.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/examples/README.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/examples/batch_from_config.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/examples/multi_prompt_t2i.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/examples/sample_config.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/examples/sample_prompts.txt +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/examples/single_image_t2i.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/examples/workflow_chain.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/index.html +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/README.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/01_upload_image.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/04_archive_workflow.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/05_createProject.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/06_batchGenerateImages.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/12_create_scene.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/14_get_scene_workflows.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/autopilot/entrypoint.sh +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/autopilot/pr_triage_gate.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/ci/check_doc_links.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/ci/check_materiality.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/ci/check_release_artifacts.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/ci/check_website_docs_pii.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/debug_editor.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/debug_gen_settings.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/debug_settings.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/_recording_client.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/_spike_common.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/active_plan.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/capture_locale_invariants.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/character_create_spike.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/character_create_spike_v2.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/dump_character_selectors.js +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/incident_bundle_quality.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/live_verify_mcp_tasks.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/make_project.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/materiality_backtest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/patch_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/skillopt/README.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/skillopt/harness.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/skillopt/tasks.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/sonar-local-scan.sh +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_char_editor_dom.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_char_gen_capture.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_character_prompt_format.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_incident_live.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_issue404_count_tabs_recon.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_movie_picker_select.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_movie_voice_list.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_omni_flash_i2v_ui_recon.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_patch_entity.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/dev/spike_patchright.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/diag/README.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/diag/capture_flow_traffic.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/diag/memory_profile.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/diag/recaptcha_mint.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/diag/spike_387_openai_compat.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/e2e/capture_agent_toggle.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/record_demo.ps1 +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/smoke_image.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/smoke_video_editor.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/smoke_worker_style.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/spike_waf_camoufox.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/scripts/verify_chrome_auth_viability.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/README.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/changelog/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/check/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/doc-review/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/gflow-cli/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/issue-assessment/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/issue-resolve/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/known-issues/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/live-verify/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/llm-council/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/plan/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/pr-council-review/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/predict/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/release/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/scenario/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/sonar/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/skills/status/SKILL.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/sonar-project.properties +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/__main__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/_cli_helpers.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/_engine.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/_retry.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/dto.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/image.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/image_upscale.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/recaptcha.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/routes.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/scene.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/_common.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/base.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/auth/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/auth/base.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/auth/cookies.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/auth/factory.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/auth/real_chrome.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/auth/strategies.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/chain.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/chain_manifest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/cli_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/cli_data.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/cli_image.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/cli_instructions.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/cli_models.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/cli_movie.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/cli_project.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/cli_run.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/cli_scene.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/cli_tools.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/composition.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/chain_repo.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/models.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/queries.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/recorder.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/redaction.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/repository.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/data/store.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/diagnostics.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/exceptions.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/image_batch.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/json_output.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/mcp/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/mcp/prompts.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/mcp/setup.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/mcp/tasks_extension.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/media.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/movie_manifest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/observability.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/paths.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/profile_store.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/redaction.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/services/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/services/character_create.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/services/mentions.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/storage.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/tools/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/tools/banned.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/tools/expander.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/tools/invocation.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/tools/loader.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/tools/registry.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/tools/runtime.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/tools/spec.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/ui/app.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/ui/server.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/winsec.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/worker/daemon.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/src/gflow_cli/worker/queue.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tasks/lessons.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/test_assets/sample_batch.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/test_assets/sample_batch.tsv +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/test_assets/sample_batch_invalid.tsv +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/fixtures/character_gen_response.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/fixtures/patch_entity_response.json +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_aisandbox_auth_error.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_bearer_redaction.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_client.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_client_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_client_delete_characters.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_client_errors.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_client_generate_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_client_image.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_client_patch_entity.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_client_scene.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_client_upscale.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_concurrency.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_dto.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_engine.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_image.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_image_dto.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_image_upscale.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_recaptcha.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_retry.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_routes.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_routes_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_routes_scene.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_sapisidhash_helper.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_scene_models.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/test_video.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/conftest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/drivers/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/drivers/test_agentic.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/drivers/test_classic.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/drivers/test_factory.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_base.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_bearer.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_common.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_factory.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_fingerprint.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_sapisidhash.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_transport_timeout.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/api/transports/test_ui_character_editor.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/auth/strategies/test_factory.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/auth/strategies/test_strategies.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/auth/test_cookies.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/auth/test_real_chrome.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/auth/test_windows_acl.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_auth_status.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_auth_list.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_character_create.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_data.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_data_errors.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_data_errors_retention.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_image.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_image_upscale.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_image_uuid_ref_enrichment.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_instructions.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_models.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_movie.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_run.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_scene.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_tools.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_cli_video_chain.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_error_handling.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_failure_funnel.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_helpers.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_incident_output.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_movie_manifest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_predictable_output.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_settings_validation.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/composition/test_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/composition/test_compose_prompt.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/composition/test_handoff.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/composition/test_style_variants.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/composition/test_style_variants_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/data/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/data/test_chain_repo.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/data/test_failure_recording.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/data/test_find_incomplete_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/data/test_models.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/data/test_packaging.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/data/test_recorder.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/data/test_recorder_character.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/data/test_redaction.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/data/test_repository.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/data/test_scene_persistence.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/data/test_settings_and_errors.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/data/test_store_migrations.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/dev/test_recording_client.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/conftest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_cancellation_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_chain_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_character_create_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_classic_count_setter_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_daemon_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_data_layer_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_entity_provenance_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_image_batch_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_image_uuid_ref_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_incident_quality_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_json_output_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_project_naming_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_scene_compose_live.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_tools_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_transports_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/asset_tagging.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/auth.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/auth_login.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/character_create.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/character_read.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/conftest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/duration_tab_drift.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/entity_provenance.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/image.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/image_batch_references.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/image_upscale.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/incident_diagnostics.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/instructions.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/locale_picker_include.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/mcp_tasks.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/output_hardening.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_asset_tagging_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_auth_login_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_auth_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_character_create_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_character_read_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_image_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_image_upscale_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_incident_diagnostics_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_instructions_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_locale_picker_include_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_mcp_tasks_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_output_hardening_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_step_collision_guard.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_video_agent_ui_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/test_video_chain_steps.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/video_agent_ui.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/features/video_chain.feature +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/fixtures/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/fixtures/seeded_catalog.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/image_batch/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/image_batch/test_image_manifest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/image_batch/test_jitter_config.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/image_batch/test_observability_events.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/integration/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/integration/conftest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/integration/constants.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/integration/test_expander_gateway.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/integration/test_storage_gcs.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/integration/test_storage_s3.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/mcp/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/mcp/conftest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/mcp/test_error_funnel.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/mcp/test_setup.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/mcp/test_stdio_transport.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/mcp/test_tasks_extension.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/mcp/test_tools_helpers.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/mcp/test_tools_instructions.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/scripts/test_check_materiality.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/scripts/test_check_release_artifacts.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/scripts/test_check_website_docs_pii.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/scripts/test_codex_plugin.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/scripts/test_generate_website_docs.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/scripts/test_incident_bundle_quality.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/scripts/test_materiality_backtest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/services/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/services/test_character_create_redaction.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/services/test_character_create_saga.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/services/test_mentions_observability.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/services/test_mentions_parse.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/services/test_mentions_resolve.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/services/test_resolve_and_apply.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/smoke/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/smoke/test_profile_account_smoke.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/smoke/test_real_flow.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_auth.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_chain.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_chain_manifest.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_cli_data.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_cli_project.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_config.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_conftest_isolation.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_data_queries.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_diagnostics_bundle.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_diagnostics_events.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_diagnostics_journal.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_diagnostics_recorder.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_diagnostics_retention.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_diagnostics_sanitize.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_documentation_gate.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_duration_tab_drift.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_entity_provenance.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_errors_classification.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_image_batch_references.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_json_output.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_marker_registry.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_media.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_observability.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_overlay_banner_dismissal.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_paths.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_playwright_pin.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_profile_lease_subprocess.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_profile_store.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_self_documenting_errors.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/test_smoke.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/tools/__init__.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/tools/test_banned.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/tools/test_expander.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/tools/test_invocation.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/tools/test_loader.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/tools/test_registry.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/tools/test_runtime.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/tools/test_spec.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/ui/test_app.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/worker/test_codec.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/worker/test_daemon.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/worker/test_mcp_daemon_race.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/worker/test_queue.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/worker/test_queue_multiprocess.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/tests/worker/test_queue_reconciliation.py +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/CHARACTER.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/DATA_LAYER.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/DEVELOPMENT.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/E2E_TESTING.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/INSTRUCTIONS.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/MOVIE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/PROMPT_EXPANSION.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/TOOLS.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/USER_GUIDE.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/agents.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/installation.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/onboarding-mockup.html +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/onboarding.md +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/docs/stylesheets/extra.css +0 -0
- {gflow_cli-0.55.0 → gflow_cli-0.57.0}/website/mkdocs.yml +0 -0
|
@@ -133,6 +133,21 @@
|
|
|
133
133
|
# changes; don't exceed 8 without measuring. Shipped in v0.4.0a2.
|
|
134
134
|
# GFLOW_CLI_CONCURRENCY=1
|
|
135
135
|
|
|
136
|
+
# Seconds to wait for another gflow process to release the profile lease
|
|
137
|
+
# before giving up with ProfileLockedError (0 = fail fast, the default).
|
|
138
|
+
# Holders always run to completion; the waiter takes over on release (#478).
|
|
139
|
+
# GFLOW_CLI_LEASE_WAIT_SECONDS=0
|
|
140
|
+
|
|
141
|
+
# Once-a-day best-effort PyPI check printing a one-line notice when a newer
|
|
142
|
+
# gflow-cli exists (#479). Never blocks; skipped in CI and for
|
|
143
|
+
# editable/source installs. Set to 0 to disable.
|
|
144
|
+
# GFLOW_CLI_UPDATE_CHECK=1
|
|
145
|
+
|
|
146
|
+
# MCP no-spend mode (#496): when set to 1, the MCP server (gflow mcp run AND
|
|
147
|
+
# gflow serve) never registers the credit-spending generate tools — agents
|
|
148
|
+
# cannot see them in tools/list. Equivalent to the --no-spend flag.
|
|
149
|
+
# GFLOW_MCP_NO_SPEND=0
|
|
150
|
+
|
|
136
151
|
# Run Playwright in headless mode for non-`auth login` commands (true|false).
|
|
137
152
|
# Default: false — headed real Chrome is the PRODUCTION default, not a
|
|
138
153
|
# fallback. The ui_automation transport (the only production transport)
|
|
@@ -110,3 +110,47 @@ updates:
|
|
|
110
110
|
github-actions:
|
|
111
111
|
applies-to: version-updates
|
|
112
112
|
patterns: ["*"]
|
|
113
|
+
|
|
114
|
+
# npm — the PR-triage sandbox's pinned Claude Code CLI
|
|
115
|
+
# (scripts/autopilot/package-lock.json, installed via `npm ci` in
|
|
116
|
+
# Dockerfile.triage).
|
|
117
|
+
- package-ecosystem: "npm"
|
|
118
|
+
directory: "/scripts/autopilot"
|
|
119
|
+
schedule:
|
|
120
|
+
interval: "weekly"
|
|
121
|
+
day: "monday"
|
|
122
|
+
time: "08:00"
|
|
123
|
+
timezone: "Europe/Lisbon"
|
|
124
|
+
open-pull-requests-limit: 2
|
|
125
|
+
labels:
|
|
126
|
+
- "dependencies"
|
|
127
|
+
|
|
128
|
+
# Docker — the digest-pinned node:20-slim base of Dockerfile.triage.
|
|
129
|
+
- package-ecosystem: "docker"
|
|
130
|
+
directory: "/scripts/autopilot"
|
|
131
|
+
schedule:
|
|
132
|
+
interval: "weekly"
|
|
133
|
+
day: "monday"
|
|
134
|
+
time: "08:00"
|
|
135
|
+
timezone: "Europe/Lisbon"
|
|
136
|
+
open-pull-requests-limit: 2
|
|
137
|
+
labels:
|
|
138
|
+
- "dependencies"
|
|
139
|
+
|
|
140
|
+
# uv — the hash-pinned MkDocs set for the Pages build
|
|
141
|
+
# (website/requirements.txt, compiled from website/requirements.in).
|
|
142
|
+
# "uv", NOT "pip", for the same reason as the root entry: the pip ecosystem
|
|
143
|
+
# would regenerate the file with pip-compile, clobbering the uv-authored
|
|
144
|
+
# header/format; dependabot's uv ecosystem recompiles .in → .txt via
|
|
145
|
+
# `uv pip compile` and keeps the hashes.
|
|
146
|
+
- package-ecosystem: "uv"
|
|
147
|
+
directory: "/website"
|
|
148
|
+
schedule:
|
|
149
|
+
interval: "weekly"
|
|
150
|
+
day: "monday"
|
|
151
|
+
time: "08:00"
|
|
152
|
+
timezone: "Europe/Lisbon"
|
|
153
|
+
open-pull-requests-limit: 2
|
|
154
|
+
labels:
|
|
155
|
+
- "dependencies"
|
|
156
|
+
- "python"
|
|
@@ -5,6 +5,11 @@ on:
|
|
|
5
5
|
branches: [develop, main]
|
|
6
6
|
pull_request:
|
|
7
7
|
|
|
8
|
+
# Least-privilege default token for every job (OpenSSF Scorecard:
|
|
9
|
+
# Token-Permissions). Jobs that need more elevate per-job below.
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
8
13
|
env:
|
|
9
14
|
# Suppress Node.js deprecation warnings and align with user request to use Node 22/remove noise.
|
|
10
15
|
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
|
|
@@ -15,13 +20,16 @@ jobs:
|
|
|
15
20
|
secrets-scan:
|
|
16
21
|
name: Secret scan (gitleaks)
|
|
17
22
|
runs-on: ubuntu-latest
|
|
23
|
+
permissions:
|
|
24
|
+
contents: read
|
|
25
|
+
pull-requests: write # gitleaks-action PR feedback comments
|
|
18
26
|
steps:
|
|
19
|
-
- uses: actions/checkout@v7
|
|
27
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
20
28
|
with:
|
|
21
29
|
fetch-depth: 0 # full history so gitleaks can diff against base
|
|
22
30
|
|
|
23
31
|
- name: Run gitleaks
|
|
24
|
-
uses: gitleaks/gitleaks-action@v3
|
|
32
|
+
uses: gitleaks/gitleaks-action@e0c47f4f8be36e29cdc102c57e68cb5cbf0e8d1e # v3
|
|
25
33
|
env:
|
|
26
34
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
27
35
|
|
|
@@ -30,9 +38,9 @@ jobs:
|
|
|
30
38
|
name: Dependency audit (pip-audit)
|
|
31
39
|
runs-on: ubuntu-latest
|
|
32
40
|
steps:
|
|
33
|
-
- uses: actions/checkout@v7
|
|
41
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
34
42
|
- name: Install uv
|
|
35
|
-
uses: astral-sh/setup-uv@
|
|
43
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
36
44
|
- name: Audit locked dependencies for known CVEs
|
|
37
45
|
# Fails the build on any known advisory. Accept later via: pip-audit --ignore-vuln <GHSA-id>
|
|
38
46
|
#
|
|
@@ -45,7 +53,9 @@ jobs:
|
|
|
45
53
|
# alerts flagged them against uv.lock; this gate could not see them.
|
|
46
54
|
run: |
|
|
47
55
|
uv export --frozen --all-extras --format requirements-txt --no-emit-project > requirements-audit.txt
|
|
48
|
-
|
|
56
|
+
# pip-audit version pinned for a reproducible gate (uvx has no
|
|
57
|
+
# dependabot ecosystem — bump by hand when it drifts).
|
|
58
|
+
uvx pip-audit==2.10.1 -r requirements-audit.txt
|
|
49
59
|
|
|
50
60
|
# ── Supply-chain gate: resolve WITHOUT the lockfile ───────────────────────
|
|
51
61
|
# Every other job installs via `uv sync`, which honours uv.lock. That means CI
|
|
@@ -62,10 +72,10 @@ jobs:
|
|
|
62
72
|
name: Dependency resolution drift (no lockfile)
|
|
63
73
|
runs-on: ubuntu-latest
|
|
64
74
|
steps:
|
|
65
|
-
- uses: actions/checkout@v7
|
|
75
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
66
76
|
|
|
67
77
|
- name: Install uv
|
|
68
|
-
uses: astral-sh/setup-uv@
|
|
78
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
69
79
|
|
|
70
80
|
- name: Set up Python
|
|
71
81
|
run: uv python install 3.13
|
|
@@ -116,10 +126,10 @@ jobs:
|
|
|
116
126
|
matrix:
|
|
117
127
|
python-version: ["3.11", "3.12", "3.13"]
|
|
118
128
|
steps:
|
|
119
|
-
- uses: actions/checkout@v7
|
|
129
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
120
130
|
|
|
121
131
|
- name: Install uv
|
|
122
|
-
uses: astral-sh/setup-uv@
|
|
132
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
123
133
|
|
|
124
134
|
- name: Set up Python
|
|
125
135
|
run: uv python install ${{ matrix.python-version }}
|
|
@@ -152,12 +162,17 @@ jobs:
|
|
|
152
162
|
# e2e/live tests require a logged-in Chromium profile and may spend
|
|
153
163
|
# Flow credits. pyproject.toml excludes both markers by default; CI
|
|
154
164
|
# intentionally relies on that default smoke set.
|
|
155
|
-
run: uv run python -m pytest -q --cov=gflow_cli --cov-report=xml
|
|
165
|
+
run: uv run python -m pytest -q --cov=gflow_cli --cov-report=xml --junitxml=pytest-report.xml
|
|
166
|
+
|
|
167
|
+
- name: Test-count guard (a green build that ran nothing is not green)
|
|
168
|
+
# Floor well below the real count (~2900): catches collection collapse
|
|
169
|
+
# (bad marker/-k filter, broken conftest), never routine deletions.
|
|
170
|
+
run: uv run python scripts/ci/check_test_count.py pytest-report.xml 2000
|
|
156
171
|
|
|
157
172
|
# Upload coverage XML so the sonar job can consume it
|
|
158
173
|
- name: Upload coverage report
|
|
159
174
|
if: matrix.python-version == '3.11'
|
|
160
|
-
uses: actions/upload-artifact@v7
|
|
175
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
161
176
|
with:
|
|
162
177
|
name: coverage-xml
|
|
163
178
|
path: coverage.xml
|
|
@@ -180,10 +195,10 @@ jobs:
|
|
|
180
195
|
matrix:
|
|
181
196
|
os: [windows-latest, macos-latest, ubuntu-latest]
|
|
182
197
|
steps:
|
|
183
|
-
- uses: actions/checkout@v7
|
|
198
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
184
199
|
|
|
185
200
|
- name: Install uv
|
|
186
|
-
uses: astral-sh/setup-uv@
|
|
201
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
187
202
|
|
|
188
203
|
- name: Set up Python
|
|
189
204
|
run: uv python install 3.13
|
|
@@ -192,13 +207,21 @@ jobs:
|
|
|
192
207
|
run: uv sync --extra dev
|
|
193
208
|
|
|
194
209
|
- name: ProfileLease unit + subprocess tests
|
|
195
|
-
run: uv run python -m pytest tests/test_profile_lease.py tests/test_profile_lease_subprocess.py -q
|
|
210
|
+
run: uv run python -m pytest tests/test_profile_lease.py tests/test_profile_lease_subprocess.py -q --junitxml=pytest-lease.xml
|
|
211
|
+
|
|
212
|
+
- name: Test-count guard (lease matrix ran its suite)
|
|
213
|
+
# Floor well below the ~29 executed per OS leg — catches collapse, not
|
|
214
|
+
# routine test consolidation.
|
|
215
|
+
run: uv run python scripts/ci/check_test_count.py pytest-lease.xml 10
|
|
196
216
|
|
|
197
217
|
# ── SonarCloud analysis ───────────────────────────────────────────────────
|
|
198
218
|
sonar:
|
|
199
219
|
name: SonarCloud analysis
|
|
200
220
|
runs-on: ubuntu-latest
|
|
201
221
|
needs: test # wait for tests + coverage report
|
|
222
|
+
permissions:
|
|
223
|
+
contents: read
|
|
224
|
+
pull-requests: read # PR-context analysis / decoration lookups
|
|
202
225
|
# Forked pull_request runs do not receive repository secrets, so SONAR_TOKEN
|
|
203
226
|
# is empty there and the scanner fails before analysis. Dependabot-triggered
|
|
204
227
|
# runs are the same case: GitHub serves them the separate Dependabot secrets
|
|
@@ -212,12 +235,12 @@ jobs:
|
|
|
212
235
|
github.event.pull_request.head.repo.full_name == github.repository
|
|
213
236
|
)
|
|
214
237
|
steps:
|
|
215
|
-
- uses: actions/checkout@v7
|
|
238
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
216
239
|
with:
|
|
217
240
|
fetch-depth: 0 # shallow clones break blame / new-code detection
|
|
218
241
|
|
|
219
242
|
- name: Download coverage report
|
|
220
|
-
uses: actions/download-artifact@v8
|
|
243
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
|
221
244
|
with:
|
|
222
245
|
name: coverage-xml
|
|
223
246
|
continue-on-error: true # graceful if coverage upload was skipped
|
|
@@ -242,7 +265,12 @@ jobs:
|
|
|
242
265
|
|
|
243
266
|
- name: SonarCloud scan
|
|
244
267
|
if: steps.sonarcloud_health.outputs.up == 'true'
|
|
245
|
-
|
|
268
|
+
# sonarcloud-github-action is ARCHIVED upstream (dependabot never bumps
|
|
269
|
+
# archived actions, so its pin would rot silently); sonarqube-scan-action
|
|
270
|
+
# is SonarSource's maintained successor and serves SonarCloud when
|
|
271
|
+
# SONAR_HOST_URL points at it.
|
|
272
|
+
uses: SonarSource/sonarqube-scan-action@22918119ff8e1ca75a623e15c8296b6ea4fbe28f # v8.2.1
|
|
246
273
|
env:
|
|
247
274
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # PR decoration
|
|
248
275
|
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} # set in repo → Settings → Secrets
|
|
276
|
+
SONAR_HOST_URL: https://sonarcloud.io
|
|
@@ -28,10 +28,10 @@ jobs:
|
|
|
28
28
|
name: Audit + report upgradable dependencies
|
|
29
29
|
runs-on: ubuntu-latest
|
|
30
30
|
steps:
|
|
31
|
-
- uses: actions/checkout@v7
|
|
31
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
32
32
|
|
|
33
33
|
- name: Install uv
|
|
34
|
-
uses: astral-sh/setup-uv@
|
|
34
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
35
35
|
|
|
36
36
|
- name: Set up Python
|
|
37
37
|
run: uv python install 3.13
|
|
@@ -43,6 +43,9 @@ jobs:
|
|
|
43
43
|
# anything reachable solely through an optional extra goes unaudited.
|
|
44
44
|
# See the matching note in ci.yml — this is how aiohttp/pyasn1 hid.
|
|
45
45
|
uv export --frozen --all-extras --format requirements-txt --no-emit-project > requirements-audit.txt
|
|
46
|
+
# pip-audit deliberately floats here (unlike the pinned gate in
|
|
47
|
+
# ci.yml): this weekly watch job never gates a merge, and fresh
|
|
48
|
+
# advisory tooling is exactly what it is for.
|
|
46
49
|
uvx pip-audit -r requirements-audit.txt
|
|
47
50
|
|
|
48
51
|
# ── The reports: never fail the run, and still run when the audit fails
|
|
@@ -19,12 +19,12 @@ jobs:
|
|
|
19
19
|
name: Materiality + traceability (advisory)
|
|
20
20
|
runs-on: ubuntu-latest
|
|
21
21
|
steps:
|
|
22
|
-
- uses: actions/checkout@v7
|
|
22
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
23
23
|
with:
|
|
24
24
|
fetch-depth: 0 # full history so `git diff origin/<base>..HEAD` resolves
|
|
25
25
|
|
|
26
26
|
- name: Install uv
|
|
27
|
-
uses: astral-sh/setup-uv@
|
|
27
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
28
28
|
|
|
29
29
|
- name: Classify touched paths (advisory, never blocks)
|
|
30
30
|
run: |
|
|
@@ -18,12 +18,12 @@ jobs:
|
|
|
18
18
|
name: Materiality gate backtest
|
|
19
19
|
runs-on: ubuntu-latest
|
|
20
20
|
steps:
|
|
21
|
-
- uses: actions/checkout@v7
|
|
21
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
22
22
|
with:
|
|
23
23
|
fetch-depth: 0 # full history — the backtest replays every commit
|
|
24
24
|
|
|
25
25
|
- name: Install uv
|
|
26
|
-
uses: astral-sh/setup-uv@
|
|
26
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
27
27
|
|
|
28
28
|
- name: Run backtest (advisory; writes to job summary)
|
|
29
29
|
run: uv run python scripts/dev/materiality_backtest.py >> "$GITHUB_STEP_SUMMARY"
|
|
@@ -37,7 +37,7 @@ jobs:
|
|
|
37
37
|
runs-on: ubuntu-latest
|
|
38
38
|
steps:
|
|
39
39
|
- name: Create or update labels
|
|
40
|
-
uses: actions/github-script@v9
|
|
40
|
+
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9
|
|
41
41
|
with:
|
|
42
42
|
script: |
|
|
43
43
|
// Every label referenced by .github/dependabot.yml. Keep in sync.
|
|
@@ -30,7 +30,7 @@ jobs:
|
|
|
30
30
|
name: Release must carry /gflow:release artifacts
|
|
31
31
|
runs-on: ubuntu-latest
|
|
32
32
|
steps:
|
|
33
|
-
- uses: actions/checkout@v7
|
|
33
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
34
34
|
- name: Verify release artifacts
|
|
35
35
|
env:
|
|
36
36
|
BASE_REF: ${{ github.base_ref }}
|
|
@@ -12,10 +12,10 @@ on:
|
|
|
12
12
|
- ".github/workflows/pages.yml"
|
|
13
13
|
workflow_dispatch:
|
|
14
14
|
|
|
15
|
+
# Write scopes live at JOB level on the deploy job only (Scorecard
|
|
16
|
+
# Token-Permissions: workflow-level write would grant the build job too).
|
|
15
17
|
permissions:
|
|
16
18
|
contents: read
|
|
17
|
-
pages: write
|
|
18
|
-
id-token: write
|
|
19
19
|
|
|
20
20
|
# Never cancel an in-progress deploy; queue instead.
|
|
21
21
|
concurrency:
|
|
@@ -26,12 +26,14 @@ jobs:
|
|
|
26
26
|
build:
|
|
27
27
|
runs-on: ubuntu-latest
|
|
28
28
|
steps:
|
|
29
|
-
- uses: actions/checkout@v7
|
|
30
|
-
- uses: actions/setup-python@v7
|
|
29
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
30
|
+
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
|
|
31
31
|
with:
|
|
32
32
|
python-version: "3.12"
|
|
33
33
|
- name: Install MkDocs Material
|
|
34
|
-
|
|
34
|
+
# Hash-pinned (Scorecard Pinned-Dependencies). Compiled from
|
|
35
|
+
# website/requirements.in — regeneration command in that file's header.
|
|
36
|
+
run: pip install --require-hashes -r website/requirements.txt
|
|
35
37
|
- name: Build docs portal
|
|
36
38
|
working-directory: website
|
|
37
39
|
run: mkdocs build
|
|
@@ -40,16 +42,19 @@ jobs:
|
|
|
40
42
|
mkdir -p _site
|
|
41
43
|
cp index.html _site/
|
|
42
44
|
cp -r website/site _site/docs
|
|
43
|
-
- uses: actions/upload-pages-artifact@v5
|
|
45
|
+
- uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5
|
|
44
46
|
with:
|
|
45
47
|
path: _site
|
|
46
48
|
|
|
47
49
|
deploy:
|
|
48
50
|
needs: build
|
|
49
51
|
runs-on: ubuntu-latest
|
|
52
|
+
permissions:
|
|
53
|
+
pages: write # actual Pages deployment
|
|
54
|
+
id-token: write # OIDC handshake with the Pages service
|
|
50
55
|
environment:
|
|
51
56
|
name: github-pages
|
|
52
57
|
url: ${{ steps.deployment.outputs.page_url }}
|
|
53
58
|
steps:
|
|
54
59
|
- id: deployment
|
|
55
|
-
uses: actions/deploy-pages@v5
|
|
60
|
+
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5
|
|
@@ -5,13 +5,17 @@ on:
|
|
|
5
5
|
tags:
|
|
6
6
|
- "v*.*.*"
|
|
7
7
|
|
|
8
|
+
# Write scopes live at JOB level (Scorecard Token-Permissions: workflow-level
|
|
9
|
+
# write grants every job — current and future — the elevated token).
|
|
8
10
|
permissions:
|
|
9
|
-
contents:
|
|
10
|
-
id-token: write # for PyPI Trusted Publishing (OIDC)
|
|
11
|
+
contents: read
|
|
11
12
|
|
|
12
13
|
jobs:
|
|
13
14
|
build-and-publish:
|
|
14
15
|
runs-on: ubuntu-latest
|
|
16
|
+
permissions:
|
|
17
|
+
contents: write # for creating GitHub Releases
|
|
18
|
+
id-token: write # for PyPI Trusted Publishing (OIDC)
|
|
15
19
|
environment:
|
|
16
20
|
name: pypi
|
|
17
21
|
url: https://pypi.org/p/gflow-cli
|
|
@@ -19,12 +23,12 @@ jobs:
|
|
|
19
23
|
ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true
|
|
20
24
|
NODE_VERSION: '22'
|
|
21
25
|
steps:
|
|
22
|
-
- uses: actions/checkout@v7
|
|
26
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
23
27
|
with:
|
|
24
28
|
fetch-depth: 0
|
|
25
29
|
|
|
26
30
|
- name: Install uv
|
|
27
|
-
uses: astral-sh/setup-uv@
|
|
31
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
28
32
|
|
|
29
33
|
- name: Set up Python
|
|
30
34
|
run: uv python install 3.12
|
|
@@ -57,12 +61,12 @@ jobs:
|
|
|
57
61
|
run: uv build
|
|
58
62
|
|
|
59
63
|
- name: Publish to PyPI
|
|
60
|
-
uses: pypa/gh-action-pypi-publish@
|
|
64
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
|
|
61
65
|
# No api-token needed — uses OIDC Trusted Publishing.
|
|
62
66
|
# Configure once at https://pypi.org/manage/account/publishing/
|
|
63
67
|
|
|
64
68
|
- name: Create GitHub Release
|
|
65
|
-
uses: softprops/action-gh-release@v3
|
|
69
|
+
uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3
|
|
66
70
|
with:
|
|
67
71
|
generate_release_notes: true
|
|
68
72
|
files: dist/*
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
name: OpenSSF Scorecard
|
|
2
|
+
|
|
3
|
+
# Self-run of the OpenSSF Scorecard supply-chain checks (T2 batch decision,
|
|
4
|
+
# 2026-08-13). Deliberately enabled AFTER the permissions + SHA-pinning
|
|
5
|
+
# hardening landed, so the first published public score reflects the hardened
|
|
6
|
+
# state — Token-Permissions and Pinned-Dependencies are heavily weighted.
|
|
7
|
+
# publish_results feeds the public API/badge:
|
|
8
|
+
# https://api.scorecard.dev/projects/github.com/ffroliva/gflow-cli/badge
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
# Re-evaluates the Branch-Protection check when protection rules change.
|
|
12
|
+
branch_protection_rule:
|
|
13
|
+
schedule:
|
|
14
|
+
- cron: "30 3 * * 1" # weekly, Monday 03:30 UTC
|
|
15
|
+
push:
|
|
16
|
+
branches: [develop] # default branch — required for publish_results
|
|
17
|
+
|
|
18
|
+
permissions: read-all
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
analysis:
|
|
22
|
+
name: Scorecard analysis
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
permissions:
|
|
25
|
+
security-events: write # upload the SARIF to the Security tab
|
|
26
|
+
id-token: write # OIDC identity for publish_results signing
|
|
27
|
+
|
|
28
|
+
steps:
|
|
29
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
30
|
+
with:
|
|
31
|
+
persist-credentials: false
|
|
32
|
+
|
|
33
|
+
- name: Run analysis
|
|
34
|
+
uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc # v2.4.4
|
|
35
|
+
with:
|
|
36
|
+
results_file: results.sarif
|
|
37
|
+
results_format: sarif
|
|
38
|
+
# Publishing makes the score available via the public API and badge.
|
|
39
|
+
# The repo is public; every input to the score already is too.
|
|
40
|
+
publish_results: true
|
|
41
|
+
|
|
42
|
+
- name: Upload artifact
|
|
43
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
|
|
44
|
+
with:
|
|
45
|
+
name: SARIF file
|
|
46
|
+
path: results.sarif
|
|
47
|
+
retention-days: 5
|
|
48
|
+
|
|
49
|
+
- name: Upload to code-scanning
|
|
50
|
+
uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4
|
|
51
|
+
with:
|
|
52
|
+
sarif_file: results.sarif
|
|
@@ -19,6 +19,7 @@ pytest-of-*/
|
|
|
19
19
|
.coverage
|
|
20
20
|
.coverage.*
|
|
21
21
|
coverage.xml
|
|
22
|
+
pytest-*.xml
|
|
22
23
|
htmlcov/
|
|
23
24
|
.tox/
|
|
24
25
|
.mypy_cache/
|
|
@@ -98,3 +99,6 @@ worktrees/
|
|
|
98
99
|
|
|
99
100
|
# MkDocs build output
|
|
100
101
|
website/site/
|
|
102
|
+
|
|
103
|
+
# Local git hooks dir (core.hooksPath target) — machine-local tooling, never shipped
|
|
104
|
+
.githooks/
|
|
@@ -7,6 +7,120 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.57.0] — 2026-08-14
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **`--ui-mode` on `gflow video t2v`/`i2v` + `ui_mode` on MCP `gflow_generate_video` (#299 PR-A).** The video path joins the UI-mode policy that images have had since v0.34.0: the transport now binds its driver through `get_ui_driver` (after editor mount + overlay dismissal) instead of a hardcoded classic bind. Video only has a classic driver, so `auto` ≡ `classic`; an env-sourced `GFLOW_CLI_UI_MODE=agentic` (set for image workflows) degrades to classic with a logged warning, while the explicit `--ui-mode agentic` flag (or MCP `ui_mode="agentic"`) is rejected up front — CLI exit 2 before any browser work, since exit 28's "retry may land it" remediation would mislead for a driver that doesn't exist. The worker queue codec round-trips the new payload field (it previously decoded `ui_mode` for image payloads only).
|
|
15
|
+
|
|
16
|
+
- **`gflow mcp run --no-spend` (#496).** Registration-time gating of the
|
|
17
|
+
credit-spending MCP tools: under the flag (or `GFLOW_MCP_NO_SPEND=1`, which
|
|
18
|
+
also covers `gflow serve`) the `gflow_generate_image` and
|
|
19
|
+
`gflow_generate_video` tools are never registered, so a connected agent
|
|
20
|
+
cannot even see them in `tools/list` — invisible beats refused (no wasted
|
|
21
|
+
calls, no refusal path for prompt injection to probe, no reliance on the
|
|
22
|
+
model honoring an error; pattern ported from teams-mcp's read-only mode).
|
|
23
|
+
Both generate tools are gated because image generation is only
|
|
24
|
+
*empirically* free and no-spend is a hard guarantee. Listing, instructions,
|
|
25
|
+
and other read-only tools stay available.
|
|
26
|
+
- **MCP tool `gflow_auth_status` (#497).** A zero-required-arg, credit-free,
|
|
27
|
+
non-interactive Flow session probe wrapping the same fail-closed
|
|
28
|
+
`verify_flow_profile` check as `gflow auth status`. Agents call it before a
|
|
29
|
+
generation tool to fail fast on expired auth — the queue is async, so an
|
|
30
|
+
auth failure otherwise surfaces only later, from the daemon. Returns
|
|
31
|
+
`authenticated` + the verified email, or a problem-details envelope whose
|
|
32
|
+
`remediation_hint` points at the CLI login (or at retrying, for a network
|
|
33
|
+
`verification_error` that re-login cannot fix). `auth status` accordingly
|
|
34
|
+
moves out of the MCP parity exemptions; login/logout stay CLI-only.
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
|
|
38
|
+
- **Agentic mode-switching hardened (#299 PR-B).** The agentic direction now uses the same real-click-first + `aria-pressed` verification discipline the classic direction has had since v0.38.x: `mode_control.ensure_agent_mode` replaces the transport's `_force_agent_mode`, which verified via the `tune` ligature (a documented false-positive source) and force-clicked unconditionally — a forced click can flip the DOM without firing the React handler that persists the server-side preference. Unknown editor variants (the #493 shape) no-op with a warning and are never blind-force-clicked, and the sanctioned mode-control reload carries an explicit 15 s timeout instead of riding Playwright's 30 s default outside every budget. KNOWN_ISSUES records the server-side cohort-pinning evidence (#338) the fail-fast design rests on.
|
|
39
|
+
- **Video generation on an agentic cohort now fails fast pre-submit (#299 PR-A).** When Flow serves the agentic editor and classic can't be recovered, `gflow video` commands abort with `UiModeUnavailableError` (exit 28, zero credits, retryable — the cohort flaps per page load) *before* submission, instead of burning 30–40 s of doomed selector timeouts and dying mid-flow with exit 23/25.
|
|
40
|
+
|
|
41
|
+
- **MCP `gflow://docs/known-issues` resource is now bounded (#501).** The old
|
|
42
|
+
resource returned all of KNOWN_ISSUES.md (~70 KB, growing every release) on
|
|
43
|
+
every read — pure context injection. The default read is now a small index
|
|
44
|
+
(issue titles + status + slugs, a few KB); one templated resource
|
|
45
|
+
(`gflow://docs/known-issues/{slug}`) serves a single issue's full text,
|
|
46
|
+
capped at 16 KB. No unbounded read path remains.
|
|
47
|
+
|
|
48
|
+
### Fixed
|
|
49
|
+
|
|
50
|
+
- **MCP response-contract breaches (#498).** Both generate tools now refuse
|
|
51
|
+
rate-limited calls with the same RFC 9457 problem-details envelope (the
|
|
52
|
+
image tool used a plain error string; the video tool's detail claimed a
|
|
53
|
+
nonexistent "1 request per 30 seconds" policy — the real brake is the
|
|
54
|
+
shared token bucket, capacity 8 / refill 1 per 20 s). `gflow_list_projects`
|
|
55
|
+
paginates honestly: a new `offset` parameter, plus `count`/`offset`/
|
|
56
|
+
`has_more`/`next_offset` in the response, replacing the hardcoded first
|
|
57
|
+
page whose `total` field reported the page size as the table total —
|
|
58
|
+
catalogs larger than `limit` were unreachable through MCP.
|
|
59
|
+
|
|
60
|
+
- **Post-merge `/code-review` fixes for the #495–#501 wave.** The rate-limited
|
|
61
|
+
envelope is now built from the canonical `RateLimitError` (type
|
|
62
|
+
`…/errors/rate-limit`, `retryable`/`message` present) instead of a
|
|
63
|
+
hand-minted variant; `gflow_auth_status` labels a network
|
|
64
|
+
`verification_error` as `…/errors/verification-error` (503, retryable)
|
|
65
|
+
rather than `auth-expired` (401), so type-dispatching agents stop pushing
|
|
66
|
+
users into unnecessary re-logins, and its description no longer overclaims
|
|
67
|
+
"never opens a browser" (the cookie-decryption fallback may boot a headless
|
|
68
|
+
one); `gflow_list_projects` clamps `limit`/`offset` (a `limit<=0` call
|
|
69
|
+
previously produced an infinite `next_offset` loop and negative limits
|
|
70
|
+
reached SQLite as unbounded `LIMIT -1`); `--no-spend` gained a single
|
|
71
|
+
env-var parser (Click's `envvar` dual-parse meant `off` could disable the
|
|
72
|
+
flag yet enable the policy), an idempotent registration policy, a `serve`
|
|
73
|
+
flag, a `.env.template` row, and a no-spend-aware agent guide that no
|
|
74
|
+
longer instructs agents to call unregistered tools; the known-issues index
|
|
75
|
+
recognizes both documented `**Status:**` styles and caps the echoed slug in
|
|
76
|
+
unknown-slug replies (the last unbounded reflection path).
|
|
77
|
+
|
|
78
|
+
### Removed
|
|
79
|
+
|
|
80
|
+
- **MCP tool `gflow_list_characters` (#499).** It was a stub that always
|
|
81
|
+
answered `{"status": "ok", "characters": []}` — to an agent that reads as
|
|
82
|
+
"the user has no characters", an active lie that steered clients away from
|
|
83
|
+
real `@Name` references. The tool is gone from `tools/list`, the agent-guide
|
|
84
|
+
resource, and the parity table (`character list` is now an explicit parity
|
|
85
|
+
exemption). It returns only when it can serve real Flow-side data. Use
|
|
86
|
+
`gflow character list --project <id>` in the terminal meanwhile.
|
|
87
|
+
|
|
88
|
+
### Security
|
|
89
|
+
|
|
90
|
+
- **CI supply-chain hardening.** Every workflow now runs with a least-privilege token (`ci.yml` gained the top-level `permissions: contents: read` it was missing — the other eight already had one; gitleaks elevates `pull-requests: write` per-job); every `uses:` action across all nine workflows is pinned to a full commit SHA with a version comment (dependabot's `github-actions` group keeps pins fresh); the CI test jobs enforce a test-count floor via `scripts/ci/check_test_count.py` ("a green build that ran nothing is not green"); and `check_repo_hygiene.py` now fails on version disagreement between `pyproject.toml`, `__init__.py`, and `.codex-plugin/plugin.json`.
|
|
91
|
+
- **Remaining in-workflow package installs pinned (Scorecard Pinned-Dependencies).** The Pages build now installs MkDocs Material with `pip install --require-hashes` from a compiled `website/requirements.txt`; the PR-triage sandbox image (`Dockerfile.triage`) pins its Node base by digest and installs the Claude Code CLI via `npm ci` from a committed lockfile instead of a floating `npm install -g`; the CI dependency audit pins its `pip-audit` tool version (the non-gating weekly `deps-watch` job deliberately keeps a floating pip-audit — fresh advisory tooling is its purpose). New dependabot entries (uv / npm / docker) keep all three sets of pins fresh. The remaining deliberate won't-fix Scorecard alerts (SAST, Fuzzing, CII Best Practices) are dismissed on the repo with recorded reasons.
|
|
92
|
+
- **OpenSSF Scorecard self-run.** A new SHA-pinned `scorecard.yml` workflow (weekly + on push to `develop`) runs the OpenSSF Scorecard supply-chain checks with `publish_results: true`, feeding the public API/badge and the repo Security tab — enabled deliberately after the permissions/pinning hardening so the first published score reflects the hardened state. The score surfaces as a badge in the README and on the website index page, with a docs/SECURITY.md section explaining what it measures; `release.yml`/`pages.yml` write scopes moved from workflow level to the jobs that need them.
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
## [0.56.0] — 2026-08-13
|
|
96
|
+
|
|
97
|
+
### Added
|
|
98
|
+
|
|
99
|
+
- **Once-a-day PyPI update notice (#479).** gflow now prints a one-line stderr notice when a newer version is on PyPI: cache-served (zero added latency — a stale cache refreshes on a background daemon thread for the next run), capped at one poll per day even when the poll fails, and never blocks or fails a command. Skipped in CI (`CI` env var), for editable/local-source installs (PEP 610 detection), and when `GFLOW_CLI_UPDATE_CHECK=0`.
|
|
100
|
+
|
|
101
|
+
- **Opt-in bounded wait for profile-lease contention (#478).** `GFLOW_CLI_LEASE_WAIT_SECONDS=N` makes a command that hits same-profile contention poll the kernel lock (0.5 s cadence, sync and async call sites alike) and take over as soon as the current holder — a CLI command or a `gflow serve` daemon queue task, both of which release at their natural end — finishes; on timeout it raises the same `ProfileLockedError` (exit 11). Default `0` keeps the historical fail-fast. Triage note: the issue's fuller cooperative-handoff protocol (release-request channel, minimum-hold window) was validated against the actual architecture and dropped — the daemon acquires the lease per task, so every holder's safe release point already coincides with lease release; holders are never asked to release early, which satisfies the no-release-mid-call requirement by construction. Same-process contention always fails fast (waiting on yourself deadlocks).
|
|
102
|
+
|
|
103
|
+
- **Chromium downgrade guard for persisted profiles (#477).** Opening a profile with an older Chromium major version than last wrote it triggers Chromium's downgrade cleanup, which can shred the newer session store and surface as a mystery post-upgrade logout. Every bundled-Chromium open of a persisted profile (generation client, UI-automation transport, the experimental transports, headless verification probe) now compares the profile's `Last Version` against the active engine's bundled Chromium (`playwright`, or `patchright` when selected) and refuses on a major-version downgrade (`ProfileEngineDowngradeError`, exit 11; the fail-closed verification probe reports it as a verification failure) with an error naming both versions and the remedy. Best-effort: `chrome`-strategy profiles and unknown/unparseable versions skip the check; same-major build rollbacks are allowed; `gflow auth login` stays unguarded as the recovery path.
|
|
104
|
+
|
|
105
|
+
### Fixed
|
|
106
|
+
|
|
107
|
+
- **Mode-switch drift errors now name the right evidence (#493).** An external
|
|
108
|
+
report showed a third, unrecognized Flow editor layout (composer frame slots +
|
|
109
|
+
Agent toggle, no classic `crop_*` settings button) falling through to
|
|
110
|
+
`UiSelectorDriftError` (exit 23). The fall-through detail now states that no
|
|
111
|
+
known Flow cohort matched — i.e. the editor may be a new layout this version
|
|
112
|
+
does not recognize — and the class remediation no longer asks for a "debug
|
|
113
|
+
screenshot from this message" that the mode-switch probe never writes: it
|
|
114
|
+
points at the artifacts that actually exist (the PII-safe
|
|
115
|
+
`diag_mode_switch_miss.json` DOM signature and/or the referenced screenshot,
|
|
116
|
+
plus the incident bundle's `report.md`). Recognizing the new variant itself is
|
|
117
|
+
tracked in #493 and needs an affected account's diagnostics JSON. A post-merge
|
|
118
|
+
`/code-review` pass extended the same correction to the neighboring surfaces it
|
|
119
|
+
had missed: `FlowAgentUiError`'s privacy caveat now also covers the standalone
|
|
120
|
+
`debug_forced_agent_ui.png` its raise site writes, and the KNOWN_ISSUES
|
|
121
|
+
fallback points at the incident bundle's `ui.json` (which carries the DOM
|
|
122
|
+
signature) instead of `report.md` (which does not).
|
|
123
|
+
|
|
10
124
|
## [0.55.0] — 2026-08-13
|
|
11
125
|
|
|
12
126
|
### Added
|
|
@@ -2796,7 +2910,9 @@ shell-script template that branches on these codes.
|
|
|
2796
2910
|
|
|
2797
2911
|
First skeleton. Not functional end-to-end yet.
|
|
2798
2912
|
|
|
2799
|
-
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.
|
|
2913
|
+
[Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.57.0...HEAD
|
|
2914
|
+
[0.57.0]: https://github.com/ffroliva/gflow-cli/compare/v0.56.0...v0.57.0
|
|
2915
|
+
[0.56.0]: https://github.com/ffroliva/gflow-cli/compare/v0.55.0...v0.56.0
|
|
2800
2916
|
[0.55.0]: https://github.com/ffroliva/gflow-cli/compare/v0.54.0...v0.55.0
|
|
2801
2917
|
[0.54.0]: https://github.com/ffroliva/gflow-cli/compare/v0.53.1...v0.54.0
|
|
2802
2918
|
[0.53.1]: https://github.com/ffroliva/gflow-cli/compare/v0.53.0...v0.53.1
|
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
| `GFLOW_CLI_HOME` | Platform data dir | Root directory for profiles and config. |
|
|
8
8
|
| `GFLOW_CLI_OUTPUT_DIR` | `~/Downloads/gflow-cli` | Where generated images and videos are saved. |
|
|
9
9
|
| `CHROME_BINARY` | (autodetect) | Override Chrome binary path. Falls back to platform-standard locations. |
|
|
10
|
-
| `GFLOW_CLI_CONCURRENCY` | `
|
|
10
|
+
| `GFLOW_CLI_CONCURRENCY` | `1` | Page-pool size per batch (raising above 1 currently has no effect — see [docs/CONFIGURATION.md](docs/CONFIGURATION.md)). |
|
|
11
|
+
| `GFLOW_CLI_UPDATE_CHECK` | `1` | Once-a-day stderr notice when a newer gflow-cli is on PyPI; `0` disables (v0.56.0). |
|
|
12
|
+
| `GFLOW_CLI_LEASE_WAIT_SECONDS` | `0` | Bounded wait on same-profile lease contention instead of fail-fast (v0.56.0). |
|
|
11
13
|
| `GFLOW_CLI_LLM_BASE_URL` | Google compat endpoint | OpenAI-compatible endpoint for the prompt tools (`--tool`). The on/off switch. |
|
|
12
14
|
| `GFLOW_CLI_LLM_API_KEY` | _(unset)_ | Credential for that endpoint. Optional — omit for a keyless local gateway. [Google key](https://aistudio.google.com/apikey). |
|
|
13
15
|
| `GFLOW_CLI_LLM_MODEL` | _(unset)_ | Model, and therefore the provider selector. Unset = the gateway chooses. |
|