gflow-cli 0.40.0__tar.gz → 0.42.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.
Files changed (648) hide show
  1. gflow_cli-0.42.0/.claude/commands/gflow/live-verify.md +9 -0
  2. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/llm-council.md +3 -3
  3. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.env.template +12 -8
  4. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.github/workflows/ci.yml +31 -0
  5. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.github/workflows/main-base-guard.yml +1 -1
  6. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.github/workflows/pages.yml +4 -4
  7. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.gitignore +0 -4
  8. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/AGENTS.md +8 -6
  9. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/CHANGELOG.md +118 -1
  10. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/CLAUDE.md +1 -1
  11. gflow_cli-0.42.0/CONFIGURATION.md +39 -0
  12. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/KNOWN_ISSUES.md +75 -54
  13. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/PKG-INFO +5 -5
  14. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/PLAN.md +3 -1
  15. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/README.md +3 -3
  16. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/AGENT_GUIDE.md +1 -1
  17. {gflow_cli-0.40.0/website → gflow_cli-0.42.0}/docs/ARCHITECTURE.md +2 -2
  18. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/AUTHENTICATION.md +11 -8
  19. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/CONFIGURATION.md +8 -8
  20. {gflow_cli-0.40.0/website → gflow_cli-0.42.0}/docs/E2E_TESTING.md +7 -2
  21. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/INDEX.md +9 -7
  22. gflow_cli-0.42.0/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +431 -0
  23. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.40.0.md +5 -3
  24. gflow_cli-0.42.0/docs/LIVE_VERIFICATION_v0.41.0.md +57 -0
  25. gflow_cli-0.42.0/docs/LIVE_VERIFICATION_v0.42.0.md +30 -0
  26. {gflow_cli-0.40.0/website → gflow_cli-0.42.0}/docs/MCP.md +1 -1
  27. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/PROJECT_STATUS.md +9 -3
  28. {gflow_cli-0.40.0/website → gflow_cli-0.42.0}/docs/USAGE.md +22 -24
  29. {gflow_cli-0.40.0/website → gflow_cli-0.42.0}/docs/USER_GUIDE.md +85 -67
  30. gflow_cli-0.42.0/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +446 -0
  31. gflow_cli-0.42.0/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +189 -0
  32. gflow_cli-0.42.0/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +159 -0
  33. gflow_cli-0.42.0/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +178 -0
  34. gflow_cli-0.42.0/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +213 -0
  35. gflow_cli-0.42.0/docs/superpowers/specs/2026-07-19-live-verify-design.md +223 -0
  36. gflow_cli-0.42.0/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +433 -0
  37. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/llms.txt +1 -1
  38. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/pyproject.toml +3 -3
  39. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/ci/check_materiality.py +1 -1
  40. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/ci/check_repo_hygiene.py +0 -1
  41. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/README.md +2 -2
  42. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/check/SKILL.md +3 -0
  43. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/gflow-cli/SKILL.md +14 -10
  44. gflow_cli-0.42.0/skills/live-verify/SKILL.md +145 -0
  45. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/llm-council/SKILL.md +8 -11
  46. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/plan/SKILL.md +1 -1
  47. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/pr-council-review/SKILL.md +2 -2
  48. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/status/SKILL.md +1 -1
  49. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/__init__.py +1 -1
  50. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/_engine.py +50 -1
  51. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/client.py +231 -41
  52. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/dto.py +30 -0
  53. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/base.py +33 -0
  54. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/drivers/agentic.py +68 -32
  55. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/drivers/base.py +23 -17
  56. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/drivers/classic.py +23 -41
  57. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/drivers/factory.py +10 -2
  58. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/experimental/bearer.py +4 -1
  59. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +13 -0
  60. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +4 -1
  61. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/ui_automation.py +131 -41
  62. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/auth/cookies.py +6 -1
  63. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/auth/internal_chromium.py +5 -1
  64. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/auth/real_chrome.py +51 -20
  65. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/auth/verification.py +6 -1
  66. gflow_cli-0.42.0/src/gflow_cli/browser_manager.py +262 -0
  67. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/chain_manifest.py +1 -3
  68. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/cli_video.py +0 -24
  69. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/chain_repo.py +8 -2
  70. gflow_cli-0.42.0/src/gflow_cli/data/migrations/0009_queue_claims.sql +44 -0
  71. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/recorder.py +13 -2
  72. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/errors.py +86 -9
  73. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/mcp/tools.py +178 -173
  74. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/observability.py +6 -5
  75. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/paths.py +10 -0
  76. gflow_cli-0.42.0/src/gflow_cli/profile_lease.py +254 -0
  77. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/services/mentions.py +23 -5
  78. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/ui/app.py +35 -33
  79. gflow_cli-0.42.0/src/gflow_cli/worker/codec.py +275 -0
  80. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/worker/daemon.py +127 -151
  81. gflow_cli-0.42.0/src/gflow_cli/worker/queue.py +389 -0
  82. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tasks/lessons.md +1 -1
  83. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_client.py +252 -21
  84. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_video.py +10 -0
  85. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/drivers/test_agentic.py +96 -21
  86. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/drivers/test_classic.py +8 -0
  87. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_bearer.py +66 -0
  88. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_evaluate_fetch.py +60 -0
  89. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_sapisidhash.py +62 -0
  90. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_ui_automation.py +82 -1
  91. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_ui_automation_batch.py +3 -1
  92. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/auth/strategies/test_strategies.py +100 -0
  93. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/auth/test_cookies.py +54 -0
  94. gflow_cli-0.42.0/tests/auth/test_real_chrome.py +145 -0
  95. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/auth/test_verification.py +38 -0
  96. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_video.py +45 -0
  97. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_error_handling.py +4 -13
  98. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/data/test_chain_repo.py +30 -0
  99. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/data/test_recorder.py +25 -0
  100. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/data/test_store_migrations.py +1 -0
  101. gflow_cli-0.42.0/tests/e2e/test_cancellation_e2e.py +152 -0
  102. gflow_cli-0.42.0/tests/e2e/test_crash_recovery_e2e.py +189 -0
  103. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_daemon_e2e.py +57 -28
  104. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/test_video_agent_ui_steps.py +8 -1
  105. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/mcp/test_cli_parity.py +0 -1
  106. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/services/test_mentions_resolve.py +55 -1
  107. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/services/test_resolve_and_apply.py +22 -0
  108. gflow_cli-0.42.0/tests/test_browser_manager.py +235 -0
  109. gflow_cli-0.42.0/tests/test_documentation_gate.py +93 -0
  110. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_errors.py +22 -0
  111. gflow_cli-0.42.0/tests/test_errors_classification.py +157 -0
  112. gflow_cli-0.42.0/tests/test_profile_lease.py +148 -0
  113. gflow_cli-0.42.0/tests/test_profile_lease_subprocess.py +216 -0
  114. gflow_cli-0.42.0/tests/ui/test_app.py +202 -0
  115. gflow_cli-0.42.0/tests/worker/test_codec.py +117 -0
  116. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/worker/test_daemon.py +13 -20
  117. gflow_cli-0.42.0/tests/worker/test_mcp_daemon_race.py +116 -0
  118. gflow_cli-0.42.0/tests/worker/test_queue.py +173 -0
  119. gflow_cli-0.42.0/tests/worker/test_queue_multiprocess.py +80 -0
  120. gflow_cli-0.42.0/tests/worker/test_queue_reconciliation.py +385 -0
  121. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/uv.lock +25 -25
  122. {gflow_cli-0.40.0 → gflow_cli-0.42.0/website}/docs/ARCHITECTURE.md +2 -2
  123. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/AUTHENTICATION.md +25 -22
  124. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/CHARACTER.md +5 -5
  125. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/CONFIGURATION.md +8 -8
  126. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/DATA_LAYER.md +2 -2
  127. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/KNOWN_ISSUES.md +47 -49
  128. {gflow_cli-0.40.0 → gflow_cli-0.42.0/website}/docs/MCP.md +1 -1
  129. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/SECURITY.md +4 -4
  130. {gflow_cli-0.40.0 → gflow_cli-0.42.0/website}/docs/USAGE.md +24 -26
  131. {gflow_cli-0.40.0 → gflow_cli-0.42.0/website}/docs/USER_GUIDE.md +85 -67
  132. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/index.md +2 -2
  133. gflow_cli-0.42.0/website/docs/onboarding-mockup.html +738 -0
  134. gflow_cli-0.42.0/website/docs/onboarding.md +182 -0
  135. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/mkdocs.yml +1 -1
  136. gflow_cli-0.40.0/CONFIGURATION.md +0 -70
  137. gflow_cli-0.40.0/GEMINI.md +0 -37
  138. gflow_cli-0.40.0/scripts/smoke_real_chrome_image.py +0 -416
  139. gflow_cli-0.40.0/src/gflow_cli/browser_manager.py +0 -777
  140. gflow_cli-0.40.0/src/gflow_cli/manifest.py +0 -60
  141. gflow_cli-0.40.0/src/gflow_cli/worker/queue.py +0 -179
  142. gflow_cli-0.40.0/tests/test_browser_manager.py +0 -1645
  143. gflow_cli-0.40.0/tests/test_documentation_gate.py +0 -34
  144. gflow_cli-0.40.0/tests/test_errors_403.py +0 -19
  145. gflow_cli-0.40.0/tests/test_manifest.py +0 -56
  146. gflow_cli-0.40.0/tests/ui/test_app.py +0 -137
  147. gflow_cli-0.40.0/website/docs/quickstart.md +0 -63
  148. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/README.md +0 -0
  149. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/active.md +0 -0
  150. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/branch-review.md +0 -0
  151. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/changelog.md +0 -0
  152. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/check.md +0 -0
  153. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/doc-review.md +0 -0
  154. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  155. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  156. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/known-issues.md +0 -0
  157. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/next.md +0 -0
  158. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/plan.md +0 -0
  159. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  160. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/predict.md +0 -0
  161. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/release.md +0 -0
  162. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/scenario.md +0 -0
  163. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/sonar.md +0 -0
  164. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.claude/commands/gflow/status.md +0 -0
  165. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.gitattributes +0 -0
  166. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.github/CODEOWNERS +0 -0
  167. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  168. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.github/copilot-instructions.md +0 -0
  169. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.github/dependabot.yml +0 -0
  170. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.github/workflows/external-pr-triage.yml +0 -0
  171. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.github/workflows/governance-advisory.yml +0 -0
  172. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.github/workflows/governance-benchmark.yml +0 -0
  173. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.github/workflows/release.yml +0 -0
  174. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.gitleaks.toml +0 -0
  175. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.pre-commit-config.yaml +0 -0
  176. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/.secrets.baseline +0 -0
  177. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/CONTRIBUTING.md +0 -0
  178. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/DISCLAIMER.md +0 -0
  179. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/LICENSE +0 -0
  180. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/RELEASE.md +0 -0
  181. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/ROADMAP.md +0 -0
  182. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/conftest.py +0 -0
  183. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
  184. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docker-compose.yml +0 -0
  185. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/AGENT_UI_E2E.md +0 -0
  186. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/AGENT_UI_RECON.md +0 -0
  187. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/ASSET_TAGGING_RECON.md +0 -0
  188. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/CHARACTER.md +0 -0
  189. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/CHARACTER_RECON.md +0 -0
  190. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/DATA_LAYER.md +0 -0
  191. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/DEBUGGING.md +0 -0
  192. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/DEMOS.md +0 -0
  193. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/DEVELOPMENT.md +0 -0
  194. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/EXTERNAL_STORAGE.md +0 -0
  195. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/GITHUB.md +0 -0
  196. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  197. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  198. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/INSTRUCTIONS.md +0 -0
  199. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  200. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  201. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  202. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  203. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  204. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  205. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  206. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  207. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  208. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  209. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  210. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  211. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  212. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  213. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  214. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  215. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  216. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  217. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  218. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  219. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  220. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  221. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  222. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  223. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  224. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  225. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  226. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  227. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  228. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  229. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  230. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  231. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  232. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  233. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  234. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  235. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  236. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  237. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  238. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/MOVIE.md +0 -0
  239. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/PROMPT_EXPANSION.md +0 -0
  240. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/REFERENCE_STRATEGIES.md +0 -0
  241. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/SECURITY.md +0 -0
  242. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/TOOLS.md +0 -0
  243. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/assets/demo-split-pf.gif +0 -0
  244. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/assets/example-run.gif +0 -0
  245. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/assets/examples.webp +0 -0
  246. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/medium_tutorial.md +0 -0
  247. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/schemas/movie-handoff.schema.json +0 -0
  248. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/sonar-cleanup-tracker.md +0 -0
  249. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  250. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  251. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  252. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  253. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  254. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  255. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  256. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  257. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  258. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  259. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  260. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  261. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  262. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +0 -0
  263. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  264. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  265. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  266. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  267. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  268. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  269. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  270. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/eval/pr_triage_eval.py +0 -0
  271. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/eval/pr_triage_fixtures.json +0 -0
  272. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/examples/README.md +0 -0
  273. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/examples/batch_from_config.py +0 -0
  274. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/examples/multi_prompt_t2i.py +0 -0
  275. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/examples/sample_config.json +0 -0
  276. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/examples/sample_prompts.txt +0 -0
  277. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/examples/single_image_t2i.py +0 -0
  278. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/examples/workflow_chain.py +0 -0
  279. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/index.html +0 -0
  280. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/README.md +0 -0
  281. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/01_upload_image.json +0 -0
  282. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  283. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  284. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/04_archive_workflow.json +0 -0
  285. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/05_createProject.json +0 -0
  286. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/06_batchGenerateImages.json +0 -0
  287. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  288. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  289. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  290. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  291. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  292. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/12_create_scene.json +0 -0
  293. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  294. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/14_get_scene_workflows.json +0 -0
  295. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  296. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/autopilot/Dockerfile.triage +0 -0
  297. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/autopilot/entrypoint.sh +0 -0
  298. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
  299. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/autopilot/pr_triage_gate.py +0 -0
  300. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
  301. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/ci/check_doc_links.py +0 -0
  302. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/ci/check_release_artifacts.py +0 -0
  303. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/debug_editor.py +0 -0
  304. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/debug_gen_settings.py +0 -0
  305. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/debug_settings.py +0 -0
  306. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/_recording_client.py +0 -0
  307. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/_spike_common.py +0 -0
  308. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/active_plan.py +0 -0
  309. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  310. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  311. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  312. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  313. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  314. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  315. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/capture_locale_invariants.py +0 -0
  316. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  317. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/character_create_spike.py +0 -0
  318. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/character_create_spike_v2.py +0 -0
  319. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/dump_character_selectors.js +0 -0
  320. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/make_project.py +0 -0
  321. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/materiality_backtest.py +0 -0
  322. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/monitor_pr_38.py +0 -0
  323. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/patch_character.py +0 -0
  324. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/skillopt/README.md +0 -0
  325. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/skillopt/harness.py +0 -0
  326. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/skillopt/tasks.json +0 -0
  327. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/sonar-local-scan.sh +0 -0
  328. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  329. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  330. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  331. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  332. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  333. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  334. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  335. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  336. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  337. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  338. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  339. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
  340. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  341. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  342. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  343. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  344. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  345. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  346. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_patch_entity.py +0 -0
  347. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/dev/spike_patchright.py +0 -0
  348. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/diag/README.md +0 -0
  349. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/diag/capture_flow_traffic.py +0 -0
  350. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/diag/memory_profile.py +0 -0
  351. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/diag/recaptcha_mint.py +0 -0
  352. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  353. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  354. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/record_demo.ps1 +0 -0
  355. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/smoke_image.py +0 -0
  356. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/smoke_video_editor.py +0 -0
  357. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/smoke_worker_style.py +0 -0
  358. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/spike_waf_camoufox.py +0 -0
  359. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/scripts/verify_chrome_auth_viability.py +0 -0
  360. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/changelog/SKILL.md +0 -0
  361. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/doc-review/SKILL.md +0 -0
  362. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/issue-assessment/SKILL.md +0 -0
  363. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/issue-resolve/SKILL.md +0 -0
  364. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/known-issues/SKILL.md +0 -0
  365. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/predict/SKILL.md +0 -0
  366. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/release/SKILL.md +0 -0
  367. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/scenario/SKILL.md +0 -0
  368. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/skills/sonar/SKILL.md +0 -0
  369. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/sonar-project.properties +0 -0
  370. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/__main__.py +0 -0
  371. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/_cli_helpers.py +0 -0
  372. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/__init__.py +0 -0
  373. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/_retry.py +0 -0
  374. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  375. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/character.py +0 -0
  376. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/image.py +0 -0
  377. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/image_upscale.py +0 -0
  378. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/recaptcha.py +0 -0
  379. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/routes.py +0 -0
  380. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/scene.py +0 -0
  381. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  382. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/_common.py +0 -0
  383. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  384. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  385. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  386. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
  387. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/transports/ui_automation_video.py +0 -0
  388. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/api/video.py +0 -0
  389. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/auth/__init__.py +0 -0
  390. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/auth/base.py +0 -0
  391. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/auth/factory.py +0 -0
  392. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/auth/strategies.py +0 -0
  393. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/chain.py +0 -0
  394. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/cli.py +0 -0
  395. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/cli_character.py +0 -0
  396. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/cli_data.py +0 -0
  397. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/cli_image.py +0 -0
  398. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/cli_instructions.py +0 -0
  399. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/cli_models.py +0 -0
  400. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/cli_movie.py +0 -0
  401. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/cli_run.py +0 -0
  402. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/cli_scene.py +0 -0
  403. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/cli_tools.py +0 -0
  404. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/composition.py +0 -0
  405. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/config.py +0 -0
  406. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/__init__.py +0 -0
  407. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  408. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  409. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  410. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  411. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  412. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  413. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  414. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  415. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  416. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/models.py +0 -0
  417. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/queries.py +0 -0
  418. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/redaction.py +0 -0
  419. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/repository.py +0 -0
  420. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/data/store.py +0 -0
  421. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/exceptions.py +0 -0
  422. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/image_batch.py +0 -0
  423. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/json_output.py +0 -0
  424. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/mcp/__init__.py +0 -0
  425. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/mcp/prompts.py +0 -0
  426. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/mcp/resources.py +0 -0
  427. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/mcp/server.py +0 -0
  428. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/media.py +0 -0
  429. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/movie_manifest.py +0 -0
  430. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/profile_store.py +0 -0
  431. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/services/__init__.py +0 -0
  432. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/services/character_create.py +0 -0
  433. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/storage.py +0 -0
  434. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/tools/__init__.py +0 -0
  435. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/tools/banned.py +0 -0
  436. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  437. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  438. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  439. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  440. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/tools/expander.py +0 -0
  441. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/tools/invocation.py +0 -0
  442. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/tools/loader.py +0 -0
  443. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/tools/registry.py +0 -0
  444. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/tools/runtime.py +0 -0
  445. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/tools/spec.py +0 -0
  446. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/src/gflow_cli/ui/server.py +0 -0
  447. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/test_assets/sample_batch.json +0 -0
  448. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/test_assets/sample_batch.tsv +0 -0
  449. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/test_assets/sample_batch_invalid.tsv +0 -0
  450. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/__init__.py +0 -0
  451. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/__init__.py +0 -0
  452. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/fixtures/character_gen_response.json +0 -0
  453. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  454. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  455. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  456. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_bearer_redaction.py +0 -0
  457. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_character.py +0 -0
  458. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_client_character.py +0 -0
  459. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_client_delete_characters.py +0 -0
  460. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_client_generate_character.py +0 -0
  461. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_client_image.py +0 -0
  462. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_client_launch_kwargs.py +0 -0
  463. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_client_patch_entity.py +0 -0
  464. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_client_scene.py +0 -0
  465. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_client_upscale.py +0 -0
  466. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_concurrency.py +0 -0
  467. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_dto.py +0 -0
  468. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_engine.py +0 -0
  469. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_image.py +0 -0
  470. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_image_dto.py +0 -0
  471. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_image_upscale.py +0 -0
  472. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  473. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_recaptcha.py +0 -0
  474. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_retry.py +0 -0
  475. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_routes.py +0 -0
  476. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_routes_character.py +0 -0
  477. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_routes_scene.py +0 -0
  478. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_sapisidhash_helper.py +0 -0
  479. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_scene_models.py +0 -0
  480. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/test_video_request.py +0 -0
  481. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/__init__.py +0 -0
  482. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/conftest.py +0 -0
  483. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/drivers/__init__.py +0 -0
  484. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/drivers/test_factory.py +0 -0
  485. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
  486. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_base.py +0 -0
  487. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_common.py +0 -0
  488. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_factory.py +0 -0
  489. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_fingerprint.py +0 -0
  490. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_mode_control.py +0 -0
  491. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  492. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_transport_timeout.py +0 -0
  493. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  494. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  495. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/api/transports/test_ui_character_editor.py +0 -0
  496. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/auth/strategies/test_factory.py +0 -0
  497. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
  498. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/__init__.py +0 -0
  499. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_auth_list.py +0 -0
  500. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_character.py +0 -0
  501. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_character_create.py +0 -0
  502. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_data.py +0 -0
  503. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_data_errors.py +0 -0
  504. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_image.py +0 -0
  505. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  506. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  507. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_image_upscale.py +0 -0
  508. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_instructions.py +0 -0
  509. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_models.py +0 -0
  510. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_movie.py +0 -0
  511. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_run.py +0 -0
  512. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_scene.py +0 -0
  513. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_tools.py +0 -0
  514. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_cli_video_chain.py +0 -0
  515. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_failure_funnel.py +0 -0
  516. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_helpers.py +0 -0
  517. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_movie_manifest.py +0 -0
  518. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  519. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_settings_validation.py +0 -0
  520. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  521. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/composition/test_character.py +0 -0
  522. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/composition/test_compose_prompt.py +0 -0
  523. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/composition/test_handoff.py +0 -0
  524. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/composition/test_style_variants.py +0 -0
  525. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/composition/test_style_variants_e2e.py +0 -0
  526. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/conftest.py +0 -0
  527. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/data/__init__.py +0 -0
  528. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/data/test_failure_recording.py +0 -0
  529. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/data/test_find_incomplete_character.py +0 -0
  530. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/data/test_models.py +0 -0
  531. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/data/test_packaging.py +0 -0
  532. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/data/test_recorder_character.py +0 -0
  533. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/data/test_redaction.py +0 -0
  534. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/data/test_repository.py +0 -0
  535. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/data/test_scene_persistence.py +0 -0
  536. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/data/test_settings_and_errors.py +0 -0
  537. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/dev/test_recording_client.py +0 -0
  538. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/__init__.py +0 -0
  539. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/conftest.py +0 -0
  540. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
  541. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  542. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
  543. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  544. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_chain_e2e.py +0 -0
  545. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_character_create_e2e.py +0 -0
  546. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  547. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
  548. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  549. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  550. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  551. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_json_output_e2e.py +0 -0
  552. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  553. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  554. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_scene_compose_live.py +0 -0
  555. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_tools_e2e.py +0 -0
  556. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_transports_e2e.py +0 -0
  557. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  558. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  559. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/__init__.py +0 -0
  560. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/asset_tagging.feature +0 -0
  561. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/auth.feature +0 -0
  562. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/auth_login.feature +0 -0
  563. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/character_create.feature +0 -0
  564. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/character_read.feature +0 -0
  565. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/conftest.py +0 -0
  566. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/image.feature +0 -0
  567. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/image_upscale.feature +0 -0
  568. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/instructions.feature +0 -0
  569. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/locale_picker_include.feature +0 -0
  570. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/test_asset_tagging_steps.py +0 -0
  571. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/test_auth_login_steps.py +0 -0
  572. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/test_auth_steps.py +0 -0
  573. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/test_character_create_steps.py +0 -0
  574. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/test_character_read_steps.py +0 -0
  575. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/test_image_steps.py +0 -0
  576. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/test_image_upscale_steps.py +0 -0
  577. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/test_instructions_steps.py +0 -0
  578. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  579. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/test_step_collision_guard.py +0 -0
  580. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/test_video_chain_steps.py +0 -0
  581. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/video_agent_ui.feature +0 -0
  582. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/features/video_chain.feature +0 -0
  583. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/fixtures/__init__.py +0 -0
  584. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/fixtures/seeded_catalog.py +0 -0
  585. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/image_batch/__init__.py +0 -0
  586. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/image_batch/test_image_manifest.py +0 -0
  587. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/image_batch/test_jitter_config.py +0 -0
  588. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/image_batch/test_observability_events.py +0 -0
  589. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/integration/__init__.py +0 -0
  590. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/integration/conftest.py +0 -0
  591. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/integration/constants.py +0 -0
  592. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/integration/test_storage_gcs.py +0 -0
  593. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/integration/test_storage_s3.py +0 -0
  594. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/mcp/__init__.py +0 -0
  595. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/mcp/conftest.py +0 -0
  596. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/mcp/test_server.py +0 -0
  597. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/mcp/test_stdio_transport.py +0 -0
  598. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/mcp/test_tools_helpers.py +0 -0
  599. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/mcp/test_tools_instructions.py +0 -0
  600. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/mcp/test_tools_wired.py +0 -0
  601. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  602. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  603. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/scripts/test_check_materiality.py +0 -0
  604. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/scripts/test_check_release_artifacts.py +0 -0
  605. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  606. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/scripts/test_materiality_backtest.py +0 -0
  607. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/services/__init__.py +0 -0
  608. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/services/test_character_create_redaction.py +0 -0
  609. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/services/test_character_create_saga.py +0 -0
  610. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  611. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/services/test_mentions_observability.py +0 -0
  612. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/services/test_mentions_parse.py +0 -0
  613. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/smoke/__init__.py +0 -0
  614. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  615. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/smoke/test_real_flow.py +0 -0
  616. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_auth.py +0 -0
  617. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_chain.py +0 -0
  618. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_chain_manifest.py +0 -0
  619. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_cli_data.py +0 -0
  620. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_config.py +0 -0
  621. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_conftest_isolation.py +0 -0
  622. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_data_queries.py +0 -0
  623. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_json_output.py +0 -0
  624. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_marker_registry.py +0 -0
  625. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_media.py +0 -0
  626. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_observability.py +0 -0
  627. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_paths.py +0 -0
  628. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_profile_store.py +0 -0
  629. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/test_smoke.py +0 -0
  630. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/tools/__init__.py +0 -0
  631. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/tools/test_banned.py +0 -0
  632. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/tools/test_expander.py +0 -0
  633. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/tools/test_invocation.py +0 -0
  634. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/tools/test_loader.py +0 -0
  635. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/tools/test_registry.py +0 -0
  636. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/tools/test_runtime.py +0 -0
  637. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/tests/tools/test_spec.py +0 -0
  638. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/DEBUGGING.md +0 -0
  639. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/DEVELOPMENT.md +0 -0
  640. {gflow_cli-0.40.0 → gflow_cli-0.42.0/website}/docs/E2E_TESTING.md +0 -0
  641. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
  642. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/INSTRUCTIONS.md +0 -0
  643. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/MOVIE.md +0 -0
  644. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/PROMPT_EXPANSION.md +0 -0
  645. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/TOOLS.md +0 -0
  646. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/agents.md +0 -0
  647. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/installation.md +0 -0
  648. {gflow_cli-0.40.0 → gflow_cli-0.42.0}/website/docs/stylesheets/extra.css +0 -0
@@ -0,0 +1,9 @@
1
+ ---
2
+ description: Two-part gate for gflow-cli feature work — pre-flight state check at the start, live-verification against real Flow before claiming done.
3
+ ---
4
+
5
+ # `/gflow:live-verify` — Live-verification enforcement
6
+
7
+ **Read `skills/live-verify/SKILL.md` and follow the protocol**, passing `$ARGUMENTS` if given.
8
+
9
+ > Do **not** call `Skill(skill="live-verify")` — read the file directly.
@@ -1,10 +1,10 @@
1
1
  ---
2
- description: Run pr-council-review (PR or branch mode) plus an external-tools corroboration layer (codex, gemini, opt-in agy) for high-stakes reviews where a same-model-family blind spot is a real risk. Tiers: small (internal only, default) / medium (+codex) / high (+codex+gemini). Wrapper around skills/llm-council/SKILL.md.
2
+ description: Run pr-council-review (PR or branch mode) plus an external-tools corroboration layer (codex, plus Antigravity via the agy harness) for high-stakes reviews where a same-model-family blind spot is a real risk. Tiers: small (internal only, default) / medium (+codex) / high (+codex+antigravity). Wrapper around skills/llm-council/SKILL.md.
3
3
  ---
4
4
 
5
- # `/gflow:llm-council [PR# | --base <ref>] [--tier small|medium|high] [--include-agy]`
5
+ # `/gflow:llm-council [PR# | --base <ref>] [--tier small|medium|high]`
6
6
 
7
- **Read `skills/llm-council/SKILL.md` and follow its protocol now**, treating `$ARGUMENTS` as: the PR number or `--base <ref>` (branch mode, same as `/gflow:pr-council-review` / `/gflow:branch-review`), plus `--tier <small|medium|high>` (default `small`) and the optional `--include-agy` flag.
7
+ **Read `skills/llm-council/SKILL.md` and follow its protocol now**, treating `$ARGUMENTS` as: the PR number or `--base <ref>` (branch mode, same as `/gflow:pr-council-review` / `/gflow:branch-review`), plus `--tier <small|medium|high>` (default `small`). The `high` tier adds Antigravity (`agy`) alongside `codex`.
8
8
 
9
9
  > Do **not** call `Skill(skill="llm-council")` or `Skill(skill="pr-council-review")` — the repo's `skills/*/SKILL.md` files are plain Markdown, not registered as Skill-tool-invocable (only `.claude/commands/gflow/*` are). Invoking either errors with `Unknown skill: ...`. Read the files directly instead.
10
10
 
@@ -102,17 +102,21 @@
102
102
  # auto = text on TTY, json when piped (default)
103
103
  # GFLOW_CLI_LOG_FORMAT=auto
104
104
 
105
- # Per-worker Playwright Page-pool size for batch runs (1-16). FlowApiClient
106
- # opens N Pages inside one shared persistent BrowserContext; `gflow video batch`
107
- # fans out via asyncio.gather. ~30-60 MiB memory per Page on Chromium headless;
108
- # don't exceed 8 without measuring. Shipped in v0.4.0a2.
105
+ # Per-worker Playwright Page-pool size (1-16). FlowApiClient opens N Pages
106
+ # inside one shared persistent BrowserContext. No current CLI command fans
107
+ # out multiple generations concurrently through this pool, so raising it has
108
+ # no effect today. ~30-60 MiB memory per Page on Chromium headless if that
109
+ # changes; don't exceed 8 without measuring. Shipped in v0.4.0a2.
109
110
  # GFLOW_CLI_CONCURRENCY=1
110
111
 
111
112
  # Run Playwright in headless mode for non-`auth login` commands (true|false).
112
- # Default: true. Set to false if reCAPTCHA Enterprise refuses to mint tokens
113
- # (Google's bot-detection sometimes refuses headless Chromium but accepts a
114
- # visible window). The session is still reused from the persistent profile.
115
- # GFLOW_CLI_HEADLESS=true
113
+ # Default: false — headed real Chrome is the PRODUCTION default, not a
114
+ # fallback. The ui_automation transport (the only production transport)
115
+ # requires headed Chrome: reCAPTCHA Enterprise rejects headless Chromium
116
+ # outright (immediate 403). Only set true for CI/CD on a non-ui_automation
117
+ # transport (bearer/sapisidhash, experimental). For WAF-sensitive runs, pin
118
+ # GFLOW_CLI_HEADLESS=false explicitly rather than relying on the default.
119
+ # GFLOW_CLI_HEADLESS=false
116
120
 
117
121
  # Browser automation engine — playwright (default) | patchright
118
122
  # patchright is an OPT-IN, drop-in patched Playwright (Chromium) that avoids the
@@ -87,6 +87,37 @@ jobs:
87
87
  path: coverage.xml
88
88
  retention-days: 1
89
89
 
90
+ # ── Focused OS matrix: ProfileLease cross-process contract (Task D2) ──────
91
+ # Everything else in this file runs Ubuntu-only (the `test` job above).
92
+ # This job exists because ProfileLease's kernel lock is genuinely
93
+ # OS-specific (msvcrt.locking on Windows vs. fcntl.flock on POSIX) and D1's
94
+ # local Windows-only run left the POSIX fcntl branch reasoned-but-unexecuted
95
+ # (see .superpowers/sdd/task-D1-report.md). Runs ONLY the lease unit +
96
+ # subprocess tests, not the full suite.
97
+ profile-lease-matrix:
98
+ name: ProfileLease (${{ matrix.os }})
99
+ runs-on: ${{ matrix.os }}
100
+ env:
101
+ PYTHONUTF8: "1"
102
+ strategy:
103
+ fail-fast: false
104
+ matrix:
105
+ os: [windows-latest, macos-latest, ubuntu-latest]
106
+ steps:
107
+ - uses: actions/checkout@v7
108
+
109
+ - name: Install uv
110
+ uses: astral-sh/setup-uv@v7
111
+
112
+ - name: Set up Python
113
+ run: uv python install 3.13
114
+
115
+ - name: Install deps
116
+ run: uv sync --extra dev
117
+
118
+ - name: ProfileLease unit + subprocess tests
119
+ run: uv run python -m pytest tests/test_profile_lease.py tests/test_profile_lease_subprocess.py -q
120
+
90
121
  # ── SonarCloud analysis ───────────────────────────────────────────────────
91
122
  sonar:
92
123
  name: SonarCloud analysis
@@ -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@v4
33
+ - uses: actions/checkout@v7
34
34
  - name: Verify release artifacts
35
35
  env:
36
36
  BASE_REF: ${{ github.base_ref }}
@@ -26,8 +26,8 @@ jobs:
26
26
  build:
27
27
  runs-on: ubuntu-latest
28
28
  steps:
29
- - uses: actions/checkout@v4
30
- - uses: actions/setup-python@v5
29
+ - uses: actions/checkout@v7
30
+ - uses: actions/setup-python@v7
31
31
  with:
32
32
  python-version: "3.12"
33
33
  - name: Install MkDocs Material
@@ -40,7 +40,7 @@ jobs:
40
40
  mkdir -p _site
41
41
  cp index.html _site/
42
42
  cp -r website/site _site/docs
43
- - uses: actions/upload-pages-artifact@v3
43
+ - uses: actions/upload-pages-artifact@v5
44
44
  with:
45
45
  path: _site
46
46
 
@@ -52,4 +52,4 @@ jobs:
52
52
  url: ${{ steps.deployment.outputs.page_url }}
53
53
  steps:
54
54
  - id: deployment
55
- uses: actions/deploy-pages@v4
55
+ uses: actions/deploy-pages@v5
@@ -58,10 +58,6 @@ gflow-output/
58
58
  !test_assets/fixtures/**/*.jpeg
59
59
  samples/*.captured.json # sandbox-recorded API exchanges may contain PII
60
60
 
61
- # CDP browser session lock files (contain PID, port, profile name)
62
- .gflow-cdp.lock
63
- **/.gflow-cdp.lock
64
-
65
61
  # Runtime artefact dirs written by smoke/debug scripts — belong under tmp/ only
66
62
  test_assets/smoke_*/
67
63
  test_assets/debug_*/
@@ -2,14 +2,14 @@
2
2
 
3
3
  > Universal entry point for AI coding agents. Read this first; everything else routes from here.
4
4
 
5
- Supported tools that auto-discover this file: Cursor, Codex, Aider, Jules, Devin, Windsurf, Zed, Warp, opencode, RooCode, Amp, Junie, Phoenix, GitHub Copilot, VS Code, Factory, Augment, Semgrep, Kilo Code, UiPath. Gemini CLI reads [GEMINI.md](GEMINI.md) and Claude Code reads [CLAUDE.md](CLAUDE.md), both of which cross-reference this file.
5
+ Supported tools that auto-discover this file: Cursor, Codex, Aider, Antigravity (`agy`), Jules, Devin, Windsurf, Zed, Warp, opencode, RooCode, Amp, Junie, Phoenix, GitHub Copilot, VS Code, Factory, Augment, Semgrep, Kilo Code, UiPath. Claude Code reads [CLAUDE.md](CLAUDE.md), which cross-references this file.
6
6
 
7
7
  ## Project at a glance
8
8
 
9
9
  - Unofficial Python CLI for [Google Flow](https://labs.google/fx/tools/flow) — drives Veo (image-to-video, text-to-video) and Imagen (text-to-image) generations from the terminal by reverse-engineering Flow's private REST API at `aisandbox-pa.googleapis.com`.
10
10
  - Python 3.11+ · `uv`-managed · `hatchling` builds · Playwright Chromium transport · `pyright` strict · `ruff` · `pytest`.
11
- - Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `data/`, `mcp/`, `services/`, `tools/`, `ui/`, `worker/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `cli_character.py`, `cli_data.py`, `cli_image.py`, `cli_instructions.py`, `cli_models.py`, `cli_movie.py`, `cli_run.py`, `cli_scene.py`, `cli_tools.py`, `cli_video.py`, `chain.py`, `chain_manifest.py`, `composition.py`, `config.py`, `errors.py`, `exceptions.py`, `image_batch.py`, `manifest.py`, `movie_manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
12
- - Command surface: `gflow auth`, `gflow image` (t2i/i2i/batch/upload/upscale), `gflow video` (t2v/i2v/r2v/chain — `batch` is a Phase B stub), `gflow character` (create/list/show/rm/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), `gflow instructions` (persistent Agent-Mode brief cards — add/list/enable/disable/rm/apply/toggle-mode, credits-free, `--project` required), `gflow movie` (run/template — multi-scene manifest pipeline), `gflow tools` (list/show/run — prompt-rewriting tools, also `--tool` on generation commands), `gflow data` (catalog queries), `gflow models`, `gflow run`, `gflow mcp` (run/setup — stdio MCP server), and `gflow serve` (HTTP/SSE).
11
+ - Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `data/`, `mcp/`, `services/`, `tools/`, `ui/`, `worker/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `cli_character.py`, `cli_data.py`, `cli_image.py`, `cli_instructions.py`, `cli_models.py`, `cli_movie.py`, `cli_run.py`, `cli_scene.py`, `cli_tools.py`, `cli_video.py`, `chain.py`, `chain_manifest.py`, `composition.py`, `config.py`, `errors.py`, `exceptions.py`, `image_batch.py`, `movie_manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
12
+ - Command surface: `gflow auth`, `gflow image` (t2i/i2i/batch/upload/upscale), `gflow video` (t2v/i2v/r2v/chain — no `batch` subcommand; the nonfunctional stub was removed, loop `gflow video t2v`/`i2v` from the shell for multi-clip runs), `gflow character` (create/list/show/rm/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), `gflow instructions` (persistent Agent-Mode brief cards — add/list/enable/disable/rm/apply/toggle-mode, credits-free, `--project` required), `gflow movie` (run/template — multi-scene manifest pipeline), `gflow tools` (list/show/run — prompt-rewriting tools, also `--tool` on generation commands), `gflow data` (catalog queries), `gflow models`, `gflow run`, `gflow mcp` (run/setup — stdio MCP server), and `gflow serve` (HTTP/SSE).
13
13
  - Requires a Google AI Ultra or Pro subscription with Flow access. All generations bill against the user's own Google account.
14
14
 
15
15
  ## Headed-browser dependency (architectural reality)
@@ -57,7 +57,7 @@ Or invoke the wrapper: `/gflow:check`.
57
57
 
58
58
  - Type hints everywhere; `pyright` strict on `src/gflow_cli`.
59
59
  - Structured logging only (`structlog`) — **never** raw `print()` or `import logging` in `src/`.
60
- - Errors as RFC 9457 Problem Details with stable per-class exit codes (3–27, e.g. 16 is the `DataStoreError` family, 19 `SceneConcatError`, 20 `FrameExtractionError`, 21 `ChainPartialError`, 22 `UpscaleUnavailableError`, 25 `FlowAgentUiError`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping.
60
+ - Errors as RFC 9457 Problem Details with stable per-class exit codes (3–30, e.g. 11 is `ConfigurationError` — including `ProfileLockedError` for same-profile lease contention, 16 is the `DataStoreError` family, 19 `SceneConcatError`, 20 `FrameExtractionError`, 21 `ChainPartialError`, 22 `UpscaleUnavailableError`, 25 `FlowAgentUiError`, 28 `UiModeUnavailableError`, 29 `MentionIndexUnavailableError`, 30 `QueueSchemaError`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping.
61
61
  - 100-char line length, `ruff` configured. Imports sorted by `ruff` (isort rules).
62
62
  - **YAGNI / least-code**: prefer the smallest change that works. No speculative abstractions (interface/factory with one implementation), no config or flags nobody sets, no dead constants/helpers, no reinventing the stdlib. Review carries this as its own lens — the **D14 over-engineering** dimension of [`pr-council-review`](skills/pr-council-review/SKILL.md) (baseline, always runs). Its rubric is portable; the `ponytail` plugin (see CONTRIBUTING) is an optional accelerant, not a dependency.
63
63
  - **MCP & CLI Schema Symmetry**: Any updates or additions to user-facing CLI command parameters (e.g., `gflow image t2i`, `gflow video`) must be mirrored in the corresponding MCP tool definitions. Never add option/argument fields to Click commands without updating the MCP server implementation. This symmetry is enforced programmatically in CI via `tests/mcp/test_cli_parity.py` (every CLI leaf command needs a mapped MCP tool or an explicit, reasoned exemption) plus the schema checks in `tests/mcp/test_server.py`.
@@ -78,6 +78,7 @@ These rules exist because docs alone don't bind under momentum: a "check open PR
78
78
  - **Truth is the CLI and running the code — not IDE/LSP "reminder" diagnostics.** Editor / `pyright`-in-worktree warnings go stale for an entire session and throw false positives (especially across multiple worktrees). Confirm with `ruff` / `pyright` / `pytest` from the terminal — or trust the worktree's own venv — never an IDE squiggle.
79
79
  - **Verify third-party runtime behavior empirically before wiring it in.** Don't assume how an external library, API, or browser actually behaves — exercise it once and observe, then build on the observed contract.
80
80
  - **If a claim can't be verified in the current environment, it's LIKELY — not CONFIRMED.** Keep the issue open, reference it with `Refs #N` (not `Closes #N`), and ship diagnostics rather than a blind fix. When you can't reproduce it, hand the fix to whoever can.
81
+ - **This project reverse-engineers a blackbox.** gflow-cli doesn't own Google Flow — it drives real Flow through inspected HAR/DOM/browser-log behavior. Offline checks (types, lint, unit/BDD tests) verify *our* code does what we think it does; they cannot verify Flow still behaves the way we captured it. Every feature that touches a generation path is **live-verified**, not just offline-tested, before it's called done — see `/gflow:live-verify`.
81
82
 
82
83
  ## Skills reference (cross-tool)
83
84
 
@@ -91,13 +92,14 @@ The `skills/` directory ships installable agent skill docs in plain Markdown wit
91
92
  | `plan` | [`skills/plan/SKILL.md`](skills/plan/SKILL.md) | Create a structured task-by-task implementation plan for a feature |
92
93
  | `status` | [`skills/status/SKILL.md`](skills/status/SKILL.md) | Show current plan state, progress, and next unchecked task |
93
94
  | `pr-council-review` | [`skills/pr-council-review/SKILL.md`](skills/pr-council-review/SKILL.md) | Multi-dimensional PR council review |
94
- | `llm-council` | [`skills/llm-council/SKILL.md`](skills/llm-council/SKILL.md) | Wraps `pr-council-review` with external CLI reviewers (`codex`/`gemini`, opt-in `agy`) for high-stakes reviews |
95
+ | `llm-council` | [`skills/llm-council/SKILL.md`](skills/llm-council/SKILL.md) | Wraps `pr-council-review` with external CLI reviewers (`codex` + Antigravity `agy`) for high-stakes reviews |
95
96
  | `issue-assessment` | [`skills/issue-assessment/SKILL.md`](skills/issue-assessment/SKILL.md) | Triage a GitHub issue (read-only) before any fix work |
96
97
  | `issue-resolve` | [`skills/issue-resolve/SKILL.md`](skills/issue-resolve/SKILL.md) | Drive an assessed issue to a test-first fix + draft PR |
97
98
  | `check` | [`skills/check/SKILL.md`](skills/check/SKILL.md) | Quality gates (lint/format/types/tests) before every commit |
98
99
  | `changelog` | [`skills/changelog/SKILL.md`](skills/changelog/SKILL.md) | Unreleased changes + last tagged version |
99
100
  | `known-issues` | [`skills/known-issues/SKILL.md`](skills/known-issues/SKILL.md) | Open/mitigated known issues — before auth/reCAPTCHA work |
100
101
  | `sonar` | [`skills/sonar/SKILL.md`](skills/sonar/SKILL.md) | Drive the SonarCloud quality gate to zero for a PR/branch |
102
+ | `live-verify` | [`skills/live-verify/SKILL.md`](skills/live-verify/SKILL.md) | Pre-flight state check at start of work; live-verification against real Flow before claiming done |
101
103
  | `doc-review` | [`skills/doc-review/SKILL.md`](skills/doc-review/SKILL.md) | Council-driven documentation audit before a release |
102
104
  | `release` | [`skills/release/SKILL.md`](skills/release/SKILL.md) | Cut a release — bump, CHANGELOG, tag, push, back-merge |
103
105
 
@@ -106,7 +108,7 @@ and must be resolvable by ANY agent via this file. Vendor directories hold thin
106
108
  only (`.claude/commands/gflow/*.md` are pointers into `skills/`); never put protocol
107
109
  content in a vendor directory.
108
110
 
109
- **Cursor / Aider / Codex / Gemini CLI (`agy`):** paste or include the relevant `SKILL.md` in your system context. Note: in the `agy` TUI prompt, custom slash commands (e.g. `/gflow:pr-council-review`) are blocked by the TUI's command parser. Type them as plain text without the leading slash (e.g. `gflow:pr-council-review`, `gflow:branch-review`, or `gflow:check`) to trigger the corresponding agent skill workflow.
111
+ **Cursor / Aider / Codex / Antigravity (`agy`):** paste or include the relevant `SKILL.md` in your system context. Note: in the `agy` TUI prompt, custom slash commands (e.g. `/gflow:pr-council-review`) are blocked by the TUI's command parser. Type them as plain text without the leading slash (e.g. `gflow:pr-council-review`, `gflow:branch-review`, or `gflow:check`) to trigger the corresponding agent skill workflow.
110
112
  **Claude Code:** the `/gflow:` slash commands in `.claude/commands/gflow/` are auto-discovered when the project is open — no extra setup needed. To register a skill globally, copy the command file to `~/.claude/commands/`.
111
113
  **Custom agents:** fetch `skills/gflow-cli/SKILL.md` into your knowledge base before answering gflow questions.
112
114
 
@@ -7,6 +7,121 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.42.0] — 2026-07-21
11
+
12
+ ### Fixed
13
+
14
+ - Content-safety `400` responses from Flow are now classified as
15
+ `ContentPolicyError` (exit code 5) instead of the misleading `WireFormatError`,
16
+ so callers can branch on a policy rejection deterministically. (#359)
17
+ - Corrected a false `flow_operation_id` invariant. Live verification found
18
+ `veo-lite` can produce a `remote_started` checkpoint with `operation_id` unset,
19
+ contradicting the prior claim that only `omni-flash` omits the operation name.
20
+ `flow_operation_id` is best-effort/optional; `media_id` is the canonical handle
21
+ used by polling, download, and every CLI lookup. No behaviour change; a
22
+ regression test now locks the operation-name parser against the real veo
23
+ capture fixture. (#361)
24
+
25
+ ### Changed
26
+
27
+ - **Replaced Gemini CLI with Antigravity (`agy`) as the supported Google coding
28
+ agent** across skills and docs (Google retired Gemini CLI in favor of the
29
+ Antigravity harness). Antigravity auto-discovers `AGENTS.md` natively, so the
30
+ dedicated `GEMINI.md` hub is **removed** and Antigravity is listed among the
31
+ auto-discovering tools in `AGENTS.md`. (#360)
32
+ - **`llm-council` skill:** the `high` tier's second external reviewer is now
33
+ Antigravity (`agy`) instead of Gemini CLI; `agy` is promoted from an opt-in
34
+ tool to the pinned `high`-tier slot and the `--include-agy` flag is dropped.
35
+ When `agy` is unavailable or fails non-interactively, the skill suggests
36
+ installing Antigravity or substituting another external CLI coding agent rather
37
+ than failing. (#360)
38
+ - Forward-looking agent references updated for consistency across `AGENTS.md`,
39
+ `CLAUDE.md`, `README.md`, `llms.txt`, `docs/INDEX.md`, `docs/AGENT_GUIDE.md`,
40
+ `skills/*`, and CI helper strings. Historical release notes and past
41
+ verification records are left unchanged. (#360)
42
+
43
+ ### Removed
44
+
45
+ - Removed the dead `fail_processing_tasks` daemon-recovery method, superseded by
46
+ the checkpoint-classifying `recover_processing` (internal cleanup; no
47
+ user-facing behaviour change). (#361)
48
+
49
+ ### Documentation
50
+
51
+ - Added an onboarding page and quickstart flow to the published docs site, and
52
+ anonymized personal account data across it. Security vulnerabilities now report
53
+ through GitHub's private vulnerability reporting rather than a personal email. (#362)
54
+ - Corrected the same-profile concurrency framing (MCP page and docs) to the
55
+ cross-process `ProfileLease` fail-fast contract (`ProfileLockedError`, exit 11),
56
+ and recorded that the POSIX `fcntl.flock` lease was verified green on the
57
+ Windows/macOS/Linux CI matrix. (#361)
58
+
59
+ ### Tests
60
+
61
+ - Added live-gated end-to-end tests for crash-recovery (a crashed post-submit task
62
+ recovers as `indeterminate` and is never resubmitted) and cancellation-safe
63
+ teardown (the profile lease releases on mid-launch cancel). Both were confirmed
64
+ against real Flow on 2026-07-21. (#361)
65
+
66
+ ## [0.41.0] — 2026-07-20
67
+
68
+ ### Added
69
+
70
+ - **Cross-process profile lease** ([#357]): new `ProfileLease` with
71
+ process-local guard + kernel advisory lock (`msvcrt` on Windows, `fcntl`
72
+ on POSIX), keyed by canonical profile dir. `ProfileLockedError` (exit 11)
73
+ on contention. Integrated at all 10 persistent-context-owning boundaries.
74
+ Daemon's overwriteable `profile.lock` removed.
75
+ - **Versioned worker queue payloads** ([#357]): `schema_version: 1` codec
76
+ validates before Playwright starts; unknown versions raise typed
77
+ `QueueSchemaError` (exit 30). Legacy V0 (missing field) still accepted.
78
+ - **Atomic queue task claims** ([#357]): single SQLite `BEGIN IMMEDIATE`
79
+ transaction (select → decode → fail-invalid-without-browser → conditional
80
+ `pending→processing`) shared by daemon and MCP; duplicate per-profile lock
81
+ maps removed. Checkpointed execution phases (`claimed → submit_attempted →
82
+ remote_started → terminal`) with conservative `may_have_spent`.
83
+ - **`/gflow:live-verify` skill**: pre-flight state check + per-feature
84
+ live-verification gate before claiming feature completion.
85
+ - **Driver honesty improvements** ([#357]): removed classic driver's
86
+ `await_images()` that only raised; replaced late `driver._transport = self`
87
+ mutation with typed `SupportsSendPrompt` injection; agentic submit takes
88
+ request + expected count directly. Frozen `TransportSetup` applied through
89
+ public `apply_setup()` seam replacing client writes to transport-private
90
+ fields.
91
+
92
+ ### Changed
93
+
94
+ - **Cancellation-safe browser teardown** ([#357]): per-step
95
+ `shield(wait_for(...))` bounded cleanup in required order (stop work →
96
+ cancel worker → persist state → close browser/driver → close stores →
97
+ release lease), re-raising original cancellation last.
98
+ - **Mention-index outages fail closed** ([#357]): `MentionIndexUnavailableError`
99
+ (exit 29) with unavailable source name; mention-free prompts stay
100
+ pass-through. Empty source ≠ unavailable source.
101
+ - **`OperationRecorder`/chain-repo datastore ownership** ([#357]): stores
102
+ only close the `DataStore` they create; injected stores never closed by a
103
+ non-owner.
104
+ - External-CDP browser lifecycle removed by evidence (no production
105
+ consumer, unauthenticated debug port, ambiguous ownership, recorded
106
+ WAF-rejection); Chrome discovery/channel helpers preserved.
107
+
108
+ ### Removed
109
+
110
+ - **`gflow video batch`** — the manifest-driven video batch command was
111
+ removed. It never worked end-to-end; every invocation exited immediately
112
+ with a stub error before reaching Flow. `gflow image batch` (manifest-driven
113
+ image generation) is unaffected and remains supported.
114
+ - External-CDP browser lifecycle (no production consumer).
115
+
116
+ ### Security
117
+
118
+ - Cancellation-safe teardown prevents resource leaks on interrupt.
119
+ - Profile lease kernel advisory lock prevents concurrent profile access
120
+ across processes.
121
+
122
+ [#357]: https://github.com/ffroliva/gflow-cli/pull/357
123
+ [`docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md`]: https://github.com/ffroliva/gflow-cli/blob/main/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md
124
+
10
125
  ## [0.40.0] — 2026-07-19
11
126
 
12
127
  ### Added
@@ -2110,7 +2225,9 @@ shell-script template that branches on these codes.
2110
2225
 
2111
2226
  First skeleton. Not functional end-to-end yet.
2112
2227
 
2113
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.40.0...HEAD
2228
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.42.0...HEAD
2229
+ [0.42.0]: https://github.com/ffroliva/gflow-cli/compare/v0.41.0...v0.42.0
2230
+ [0.41.0]: https://github.com/ffroliva/gflow-cli/compare/v0.40.0...v0.41.0
2114
2231
  [0.40.0]: https://github.com/ffroliva/gflow-cli/compare/v0.39.0...v0.40.0
2115
2232
  [0.39.0]: https://github.com/ffroliva/gflow-cli/compare/v0.38.1...v0.39.0
2116
2233
  [0.38.1]: https://github.com/ffroliva/gflow-cli/compare/v0.38.0...v0.38.1
@@ -1,6 +1,6 @@
1
1
  # CLAUDE.md
2
2
 
3
- > Project memory hub for **Claude Code**. The universal coding-agent rules for any tool (Cursor, Codex, Aider, Gemini CLI, etc.) live in [AGENTS.md](AGENTS.md) — this file carries Claude-Code-specific session protocol only.
3
+ > Project memory hub for **Claude Code**. The universal coding-agent rules for any tool (Cursor, Codex, Aider, Antigravity, etc.) live in [AGENTS.md](AGENTS.md) — this file carries Claude-Code-specific session protocol only.
4
4
 
5
5
  ## What this project is
6
6
 
@@ -0,0 +1,39 @@
1
+ # gflow-cli Configuration Reference
2
+
3
+ ## Environment variables
4
+
5
+ | Env var | Default | Description |
6
+ |---|---|---|
7
+ | `GFLOW_CLI_HOME` | Platform data dir | Root directory for profiles and config. |
8
+ | `GFLOW_CLI_OUTPUT_DIR` | `~/Downloads/gflow-cli` | Where generated images and videos are saved. |
9
+ | `CHROME_BINARY` | (autodetect) | Override Chrome binary path. Falls back to platform-standard locations. |
10
+ | `GFLOW_CLI_CONCURRENCY` | `4` | Maximum parallel API requests per batch. |
11
+ | `GFLOW_CLI_GEMINI_API_KEY` | _(unset)_ | Public Gemini key enabling prompt expansion (`-e`/`--expand`). Unset = expansion is a graceful no-op. [Get one](https://aistudio.google.com/apikey). |
12
+ | `GFLOW_CLI_GEMINI_MODEL` | `gemini-2.5-flash` | Gemini model used for prompt expansion. |
13
+ | `GFLOW_LIVE` | _(unset)_ | Set to `1` to enable live-API test markers (`@pytest.mark.live`). |
14
+
15
+ ---
16
+
17
+ ## Browser
18
+
19
+ There is no `GFLOW_CLI_BROWSER` mode switch — the production path is
20
+ `UiAutomationTransport`, a Playwright persistent context using Playwright's
21
+ own internal CDP port (never externally exposed). A separate packaged
22
+ CDP attach/spawn lifecycle (`auto`/`fresh`/`cdp:<port>` modes, a port-probe
23
+ range, and a `.gflow-cdp.lock` file) previously existed in
24
+ `browser_manager.py` but had no CLI wiring and no production consumer; it
25
+ was removed 2026-07-19 (see `.superpowers/sdd/cdp-decision.md`). Only Chrome
26
+ binary discovery remains, used to pick a channel for the real transport.
27
+
28
+ ### Chrome binary autodetection order
29
+
30
+ 1. `CHROME_BINARY` env var (checked first — always wins)
31
+ 2. `shutil.which("chrome")` / `shutil.which("google-chrome")` / `shutil.which("chromium")`
32
+ 3. Platform-standard paths:
33
+ - **Windows**: `C:\Program Files\Google\Chrome\Application\chrome.exe`,
34
+ `C:\Program Files (x86)\Google\Chrome\Application\chrome.exe`,
35
+ `%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe`
36
+ - **macOS**: `/Applications/Google Chrome.app/Contents/MacOS/Google Chrome`
37
+ - **Linux**: `/usr/bin/google-chrome`, `/usr/bin/chromium`, `/usr/bin/chromium-browser`
38
+
39
+ If Chrome is not found, gflow-cli raises a `ConfigurationError` with an install hint.
@@ -275,26 +275,6 @@ Re-running `auth login` reuses the existing profile dir (you typically just clic
275
275
 
276
276
  ---
277
277
 
278
- ### Same profile can't be used in parallel
279
-
280
- - **Status:** Open (by design) · **Severity:** Low · **Affects:** all versions
281
-
282
- Chromium refuses to open two persistent contexts on the same `user-data-dir` simultaneously. So running two concurrent `gflow ...` calls with the same `--profile` will fail the second one with a "ProcessSingleton: profile is locked" error.
283
-
284
- **Workaround:** use different profiles for parallel work.
285
-
286
- ```bash
287
- # Terminal 1
288
- gflow video batch ./batch-a.tsv --profile work
289
-
290
- # Terminal 2 — different profile, same time, OK
291
- gflow video batch ./batch-b.tsv --profile personal
292
- ```
293
-
294
- **Roadmap:** Phase 4 (v0.4.0a2) added concurrency *inside* one `gflow-cli` process via `GFLOW_CLI_CONCURRENCY=N` (per-worker Page pool on one shared BrowserContext). Cross-process same-profile serialization is a Chromium constraint we cannot work around without rewriting the auth model — multiple shells against the same profile remains a "use different profiles" workaround.
295
-
296
- ---
297
-
298
278
  ### Chromium cookie database locks block yt-dlp integrations (Instagram/restricted download paths)
299
279
 
300
280
  - **Status:** Mitigated · **Severity:** Low-Medium · **Affects:** any downstream helper calling `yt-dlp` (including `claude-video`, `cg-decode`/`refanalyzer`, or `experience-vault`)
@@ -364,36 +344,35 @@ playwright._impl._errors.TimeoutError: Locator.click: Timeout 30000ms exceeded.
364
344
 
365
345
  ---
366
346
 
367
- ### Aspect-ratio support depends on the Veo / Imagen model version
347
+ ### `gflow serve` / MCP worker queue: interrupted post-submit tasks need manual reconciliation
368
348
 
369
- - **Status:** Open · **Severity:** Low
349
+ - **Status:** Open (by design — no automated reconciliation) · **Severity:** Low · **Affects:** `gflow serve` daemon and MCP worker paths only (not the plain CLI, which has no queue)
370
350
 
371
- Currently confirmed:
372
- - Veo I2V: `9:16`, `16:9`, `1:1`
373
- - Imagen: `1:1`, `9:16`, `16:9`, `4:3`, `3:4`
351
+ The worker queue (`generation_queue`, used by the `gflow serve` daemon and MCP tool calls) checkpoints every task's progress through `claimed` → `submit_attempted` → `remote_started` → terminal. If a task is interrupted (daemon restart, crash, or cancellation) while still `claimed` (before any submit), gflow-cli safely marks it `failed` — nothing was spent, safe to retry. But if it's interrupted at `submit_attempted` or `remote_started` — **after** the credit-spending submit click may have fired — it is marked `indeterminate` instead: a credit *may* have been spent and the outcome is unknown. An `indeterminate` task is **never** silently reported as `failed` and **never** auto-resubmitted (that could double-spend a credit for one generation).
374
352
 
375
- Other ratios may be silently rejected or coerced server-side. We validate in the CLI to whitelisted values to fail fast.
353
+ **Why this can't be resolved automatically today:** Flow's generation-status REST endpoint rejects a bare, cookie-only `page.request` re-check with HTTP 401 — only a live, authenticated Playwright SPA re-poll (opening the project page and reading the DOM) can turn a preserved handle back into a real status, and that live re-poll path is not wired into recovery yet (tracked for a future phase; see the C1 handle-spike notes in `docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md` Appendix A).
376
354
 
377
- ---
355
+ **Manual reconciliation:** an `indeterminate` row's checkpoint retains whatever handle/project info was captured before interruption. To resolve one by hand: open the relevant Flow project in the browser and check whether the expected asset appears.
356
+ - **Found** — the generation completed; no action needed (the credit was spent as intended, just not auto-recorded locally).
357
+ - **Not found after a few minutes** — it likely never completed; safe to resubmit the same prompt manually.
378
358
 
379
- ### `gflow video batch` does not skip already-completed entries
359
+ **Queue payload schema (V0/V1):** the queue's `payload_json` carries an additive `schema_version` key. A payload with no `schema_version` key is legacy **V0** and decodes with the same field lookups as **V1** (the shape is otherwise identical) — both remain readable. The codec always *writes* the current version (`1`) on any re-encode. Any other version is treated as unknown and rejected with `QueueSchemaError` (**exit code 30**) rather than interpreted optimistically — this is a fail-closed guard against decoding a payload written by an incompatible future (or hand-edited) version.
380
360
 
381
- - **Status:** Open · **Severity:** Medium · **Affects:** v0.2.0a1+
361
+ ---
382
362
 
383
- If a `gflow video batch` run dies partway through (auth expiry, network blip, Ctrl-C) and you rerun the same TSV manifest, every row is re-submitted to Flow. Flow's private API does not expose a "have I generated this before?" predicate, and `gflow-cli` does not yet maintain a local manifest-of-outputs to compare against.
363
+ ### Aspect-ratio support depends on the Veo / Imagen model version
384
364
 
385
- **Cost implication:** re-running a partially completed manifest **may consume additional Veo / Imagen credits**. We cannot guarantee that Flow de-duplicates server-side — credit accounting on a private API is not contractual.
365
+ - **Status:** Open · **Severity:** Low
386
366
 
387
- **Workaround:** before rerunning, trim the manifest down to the rows whose `output_path` does not yet exist on disk:
388
- ```bash
389
- awk -F'\t' 'NR==1 || (system("test -e " $NF) != 0)' manifest.tsv > manifest.remaining.tsv
390
- gflow video batch manifest.remaining.tsv
391
- ```
367
+ Currently confirmed:
368
+ - Veo I2V: `9:16`, `16:9`, `1:1`
369
+ - Imagen: `1:1`, `9:16`, `16:9`, `4:3`, `3:4`
392
370
 
393
- **Roadmap:** under consideration for Phase 6 (operations history with a local SQLite ledger — see `PLAN.md`).
371
+ Other ratios may be silently rejected or coerced server-side. We validate in the CLI to whitelisted values to fail fast.
394
372
 
395
373
  ---
396
374
 
375
+
397
376
  ### REST API 401 — all `aisandbox-pa.googleapis.com` generation endpoints blocked
398
377
 
399
378
  - **Status:** **RESOLVED in v0.7.0** — image generation live-verified end-to-end
@@ -606,31 +585,37 @@ one of the 14 supported locales or in English.
606
585
 
607
586
  ---
608
587
 
609
- ### `omni-flash` t2v response omits operation name — `flow_operation_id` persists NULL
588
+ ### t2v response can omit operation name — `flow_operation_id` persists NULL
610
589
 
611
590
  - **Status:** Open · **Severity:** Low · **Affects:** v0.9.0+ (data layer)
612
591
 
613
592
  The data layer's `on_started` callback captures
614
593
  `operations[0].operation.name` from each `batchAsyncGenerateVideoText`
615
- response and persists it as `operations.flow_operation_id`. The
616
- `omni-flash` model's response shape does not carry that field, so
617
- omni-flash rows end up with `flow_operation_id` NULL while `veo-*` rows
618
- carry the expected `operations/...` identifier. The rest of the row
619
- (prompt, model, aspect, started/completed timestamps, batch ID, output
620
- paths) is recorded normally.
621
-
622
- **Impact:** cosmetic for now — `gflow data media <id>` and provenance
623
- lookup by Flow media ID still work. Any future feature that joins on
624
- `flow_operation_id` (none in the current CLI) would miss omni-flash
625
- rows.
594
+ response and persists it as `operations.flow_operation_id`. This field
595
+ is **best-effort, not guaranteed for any model**: `omni-flash`'s response
596
+ shape does not carry it, so omni-flash rows end up with
597
+ `flow_operation_id` NULL. **Update 2026-07-21 (live):** the same NULL
598
+ was observed on a live `veo-lite` t2v run (`remote_started` checkpoint
599
+ with `operation_id=None`), on an agentic-UI-cohort account — so `veo-*`
600
+ is not a reliable guarantee either; the original claim that veo-* rows
601
+ always carry the operation name was false. The rest of the row (prompt,
602
+ model, aspect, started/completed timestamps, batch ID, output paths) is
603
+ recorded normally regardless.
604
+
605
+ **Impact:** cosmetic/provenance-only — `media_id` is the canonical
606
+ handle (poll, download, and every CLI lookup use it, not
607
+ `flow_operation_id`). `gflow data media <id>` and provenance lookup by
608
+ Flow media ID still work. Nothing in the current CLI queries by
609
+ `flow_operation_id`; a future feature that did would miss rows on any
610
+ model whose response omits the operation name.
626
611
 
627
612
  **Workaround:** none needed if you don't query by `flow_operation_id`.
628
613
 
629
- **Roadmap:** capture an `omni-flash` `batchAsyncGenerateVideoText`
630
- response sample, identify the equivalent provenance handle (if any), and
631
- either map it into `flow_operation_id` or document that omni-flash
632
- legitimately has no such identifier. Track via a follow-up issue once a
633
- sample is captured.
614
+ **Roadmap:** capture response samples across models (including veo-lite)
615
+ where the operation name is absent, identify the equivalent provenance
616
+ handle (if any), and either map it into `flow_operation_id` or document
617
+ that these cases legitimately have no such identifier. Track via a
618
+ follow-up issue once samples are captured.
634
619
 
635
620
  ---
636
621
 
@@ -749,8 +734,44 @@ key — surfaces as a `RuntimeError` that `auth/cookies.py` normalizes to
749
734
 
750
735
  ---
751
736
 
737
+ ### Same profile can't be used in parallel
738
+
739
+ - **Status:** Mitigated (crash → typed fail-fast rejection) · **Severity:** Low · **Affects:** all versions
740
+
741
+ Chromium refuses to open two persistent contexts on the same `user-data-dir` simultaneously. Historically this surfaced as an unhelpful Chromium "ProcessSingleton: profile is locked" error partway through a run. As of the profile-lease hardening (production-readiness plan, slice D1/D3), gflow-cli enforces this itself: a cross-process advisory lock (`ProfileLease`, kernel `flock` on POSIX / `msvcrt.locking` on Windows) guards every profile directory. A second `gflow` invocation, `gflow serve` daemon task, or MCP call against an already-leased profile is rejected **immediately** — before any Chrome process starts — with a typed `ProfileLockedError` (**exit code 11**); it never waits and never silently corrupts the profile.
742
+
743
+ **Workaround:** use different profiles for parallel work — different profiles acquire independent leases and run fully concurrently.
744
+
745
+ ```bash
746
+ # Terminal 1
747
+ gflow image batch ./batch-a.tsv --profile work
748
+
749
+ # Terminal 2 — different profile, same time, OK
750
+ gflow image batch ./batch-b.tsv --profile personal
751
+ ```
752
+
753
+ **Roadmap:** Phase 4 (v0.4.0a2) added a per-worker Page pool on one shared BrowserContext (`GFLOW_CLI_CONCURRENCY=N`), intended to let one `gflow-cli` process fan out multiple in-flight generations, but no current CLI command drives more than one generation at a time through it — the only feature that did (a manifest-driven video batch runner) never worked and was removed. Cross-process same-profile serialization remains a hard constraint (Chromium can only own one persistent context per `user-data-dir`) — but it is now a clean, typed, fail-fast rejection instead of an unstructured crash. Multiple shells against the same profile remains a "use different profiles" workaround; there is no queueing/waiting mode.
754
+
755
+ ---
756
+
752
757
  ## Resolved
753
758
 
759
+ ### `gflow video`'s manifest-driven batch subcommand didn't skip already-completed entries — RESOLVED as obsolete
760
+
761
+ - **Status:** Resolved (obsolete) · **Severity:** Was-Medium · **Was-affecting:** v0.2.0a1 through the command's removal · **Fixed in:** n/a — removed in production-readiness hardening (see `fix: remove nonfunctional video batch command`)
762
+
763
+ This entry described a gap in `gflow video`'s `batch` subcommand: it never
764
+ maintained a local manifest-of-outputs, so rerunning a partially completed
765
+ TSV manifest after a mid-run failure would re-submit already-rendered rows
766
+ and could burn additional credits. The command itself, however, never
767
+ actually worked end-to-end — it always exited with a stub error before
768
+ reaching Flow — so no run could have been "partially completed" in the
769
+ first place. It has since been removed entirely as a nonfunctional stub.
770
+ The underlying command no longer exists, so this gap is moot rather than
771
+ fixed; kept here for searchability. `gflow image batch` (the real, working
772
+ batch command) is unaffected. For video, loop `gflow video t2v`/`i2v` from
773
+ the shell — see [`docs/USAGE.md` § Batch video generation (shell loop)](docs/USAGE.md#batch-video-generation-shell-loop).
774
+
754
775
  ### False "forced agentic — not recoverable" aborts from an icon-heuristic cohort probe
755
776
 
756
777
  - **Status:** Resolved · **Severity:** Was-Medium (spurious exit-25 aborts on profiles that could in fact reach classic mode) · **Was-affecting:** `--ui-mode classic` and classic-only operations through v0.37.0 · **Fixed in:** 0.38.0 · **Tracked:** [#299](https://github.com/ffroliva/gflow-cli/issues/299), [#332](https://github.com/ffroliva/gflow-cli/issues/332)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gflow-cli
3
- Version: 0.40.0
3
+ Version: 0.42.0
4
4
  Summary: Unofficial CLI for Google Flow — drive Veo image-to-video generations from the terminal.
5
5
  Project-URL: Homepage, https://github.com/ffroliva/gflow-cli
6
6
  Project-URL: Issues, https://github.com/ffroliva/gflow-cli/issues
@@ -58,7 +58,7 @@ Requires-Dist: numpy>=1.24; extra == 'dev'
58
58
  Requires-Dist: pyright>=1.1.0; extra == 'dev'
59
59
  Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
60
60
  Requires-Dist: pytest>=8.0.0; extra == 'dev'
61
- Requires-Dist: ruff==0.15.21; extra == 'dev'
61
+ Requires-Dist: ruff==0.15.22; extra == 'dev'
62
62
  Provides-Extra: gcs
63
63
  Requires-Dist: gcsfs>=2024.2.0; extra == 'gcs'
64
64
  Requires-Dist: universal-pathlib>=0.2.5; extra == 'gcs'
@@ -161,7 +161,7 @@ gflow-cli ships four agent entry points. Pick the one your tool reads first.
161
161
 
162
162
  | File | Audience | Tools |
163
163
  |---|---|---|
164
- | [**AGENTS.md**](AGENTS.md) | Universal coding-agent spec | Cursor · Codex · Aider · Gemini CLI · Jules · Devin · Windsurf · Zed · Warp · opencode · Copilot |
164
+ | [**AGENTS.md**](AGENTS.md) | Universal coding-agent spec | Cursor · Codex · Aider · Antigravity · Jules · Devin · Windsurf · Zed · Warp · opencode · Copilot |
165
165
  | [**CLAUDE.md**](CLAUDE.md) | Claude Code's auto-loaded memory | Claude Code |
166
166
  | [**llms.txt**](llms.txt) | LLM-readable summary (llmstxt.org format) | Paste into ChatGPT, Claude, or Gemini to onboard the model |
167
167
  | [`skills/gflow-cli/SKILL.md`](skills/gflow-cli/SKILL.md) | Claude Code Skill | Symlink into `~/.claude/skills/` |
@@ -175,7 +175,7 @@ Onboard any agent in one line. Paste this into your agent of choice:
175
175
  ```text
176
176
  gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (tests) / [planned: Official Veo]
177
177
  ↓
178
- Playwright Chromium (headed login, headless after)
178
+ Playwright Chromium (headed — login AND generation, by default)
179
179
  ↓
180
180
  aisandbox-pa.googleapis.com (Google's private Flow API)
181
181
  ```
@@ -188,7 +188,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
188
188
 
189
189
  ## Project status
190
190
 
191
- **Alpha.** Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, batch, chain) run end-to-end on `ui_automation`, with a 5-model Veo picker plus `--duration` and `--count`. Beyond single generations: `gflow movie` renders multi-scene manifests, `gflow instructions` manages persistent Agent-Mode brief cards (credits-free), `gflow character` handles reusable subjects, `gflow scene` does credit-free server-side stitching, `--tool` applies prompt-rewriting tools, and an MCP server (`gflow mcp run` stdio / `gflow serve` HTTP-SSE) exposes the core surface to AI agents with a CI-enforced CLI↔MCP parity contract.
191
+ **Alpha.** Image (t2i, i2i, upload, upscale, batch) and video (t2v, i2v, r2v, chain) run end-to-end on `ui_automation`, with a 5-model Veo picker plus `--duration` and `--count`. Beyond single generations: `gflow movie` renders multi-scene manifests, `gflow instructions` manages persistent Agent-Mode brief cards (credits-free), `gflow character` handles reusable subjects, `gflow scene` does credit-free server-side stitching, `--tool` applies prompt-rewriting tools, and an MCP server (`gflow mcp run` stdio / `gflow serve` HTTP-SSE) exposes the core surface to AI agents with a CI-enforced CLI↔MCP parity contract.
192
192
 
193
193
  Full milestone history lives in [CHANGELOG.md](CHANGELOG.md). Where the project is heading: [ROADMAP.md](ROADMAP.md).
194
194