gflow-cli 0.33.0__tar.gz → 0.35.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 (552) hide show
  1. gflow_cli-0.35.0/.claude/commands/gflow/changelog.md +9 -0
  2. gflow_cli-0.35.0/.claude/commands/gflow/check.md +9 -0
  3. gflow_cli-0.35.0/.claude/commands/gflow/doc-review.md +9 -0
  4. gflow_cli-0.35.0/.claude/commands/gflow/known-issues.md +9 -0
  5. gflow_cli-0.35.0/.claude/commands/gflow/release.md +9 -0
  6. gflow_cli-0.35.0/.claude/commands/gflow/sonar.md +9 -0
  7. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.env.template +12 -3
  8. gflow_cli-0.35.0/.github/workflows/pages.yml +55 -0
  9. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.gitignore +3 -0
  10. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/AGENTS.md +14 -0
  11. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/CHANGELOG.md +31 -1
  12. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/CONTRIBUTING.md +13 -0
  13. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/KNOWN_ISSUES.md +29 -1
  14. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/PKG-INFO +2 -2
  15. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/CONFIGURATION.md +19 -6
  16. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/INDEX.md +1 -1
  17. gflow_cli-0.35.0/docs/LIVE_VERIFICATION_v0.34.0.md +49 -0
  18. gflow_cli-0.35.0/docs/LIVE_VERIFICATION_v0.35.0.md +45 -0
  19. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/PROJECT_STATUS.md +40 -2
  20. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/USAGE.md +6 -0
  21. gflow_cli-0.35.0/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +107 -0
  22. gflow_cli-0.35.0/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +87 -0
  23. gflow_cli-0.35.0/index.html +306 -0
  24. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/pyproject.toml +4 -4
  25. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/skills/README.md +8 -0
  26. gflow_cli-0.33.0/.claude/commands/gflow/changelog.md → gflow_cli-0.35.0/skills/changelog/SKILL.md +5 -2
  27. gflow_cli-0.33.0/.claude/commands/gflow/check.md → gflow_cli-0.35.0/skills/check/SKILL.md +4 -1
  28. gflow_cli-0.33.0/.claude/commands/gflow/doc-review.md → gflow_cli-0.35.0/skills/doc-review/SKILL.md +4 -1
  29. gflow_cli-0.33.0/.claude/commands/gflow/known-issues.md → gflow_cli-0.35.0/skills/known-issues/SKILL.md +5 -2
  30. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/skills/pr-council-review/SKILL.md +15 -3
  31. gflow_cli-0.33.0/.claude/commands/gflow/release.md → gflow_cli-0.35.0/skills/release/SKILL.md +7 -4
  32. gflow_cli-0.33.0/.claude/commands/gflow/sonar.md → gflow_cli-0.35.0/skills/sonar/SKILL.md +4 -1
  33. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/__init__.py +1 -1
  34. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/image.py +4 -0
  35. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/drivers/factory.py +38 -9
  36. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/ui_automation.py +24 -52
  37. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/cli_image.py +36 -1
  38. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/config.py +92 -5
  39. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/errors.py +42 -0
  40. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/mcp/tools.py +15 -1
  41. gflow_cli-0.35.0/src/gflow_cli/tools/builtin/reverse-engineer.toml +52 -0
  42. gflow_cli-0.35.0/src/gflow_cli/tools/builtin/storyboard.toml +44 -0
  43. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/tools/expander.py +83 -1
  44. gflow_cli-0.35.0/src/gflow_cli/tools/runtime.py +180 -0
  45. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/worker/daemon.py +2 -1
  46. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/drivers/test_factory.py +4 -36
  47. gflow_cli-0.35.0/tests/api/transports/drivers/test_ui_mode.py +276 -0
  48. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/test_ui_automation.py +41 -46
  49. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/test_ui_automation_batch.py +5 -4
  50. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/tools/test_expander.py +32 -0
  51. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/tools/test_registry.py +1 -1
  52. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/uv.lock +108 -110
  53. gflow_cli-0.35.0/website/docs/agents.md +43 -0
  54. gflow_cli-0.35.0/website/docs/authentication.md +29 -0
  55. gflow_cli-0.35.0/website/docs/index.md +49 -0
  56. gflow_cli-0.35.0/website/docs/installation.md +45 -0
  57. gflow_cli-0.35.0/website/docs/known-issues.md +29 -0
  58. gflow_cli-0.35.0/website/docs/quickstart.md +63 -0
  59. gflow_cli-0.35.0/website/docs/stylesheets/extra.css +115 -0
  60. gflow_cli-0.35.0/website/mkdocs.yml +83 -0
  61. gflow_cli-0.33.0/src/gflow_cli/tools/runtime.py +0 -63
  62. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.claude/README.md +0 -0
  63. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.claude/commands/gflow/active.md +0 -0
  64. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.claude/commands/gflow/branch-review.md +0 -0
  65. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  66. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  67. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.claude/commands/gflow/next.md +0 -0
  68. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.claude/commands/gflow/plan.md +0 -0
  69. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  70. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.claude/commands/gflow/predict.md +0 -0
  71. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.claude/commands/gflow/scenario.md +0 -0
  72. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.claude/commands/gflow/status.md +0 -0
  73. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.gitattributes +0 -0
  74. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.github/CODEOWNERS +0 -0
  75. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  76. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.github/copilot-instructions.md +0 -0
  77. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.github/dependabot.yml +0 -0
  78. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.github/workflows/ci.yml +0 -0
  79. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.github/workflows/external-pr-triage.yml +0 -0
  80. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.github/workflows/governance-advisory.yml +0 -0
  81. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.github/workflows/governance-benchmark.yml +0 -0
  82. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.github/workflows/main-base-guard.yml +0 -0
  83. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.github/workflows/release.yml +0 -0
  84. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.gitleaks.toml +0 -0
  85. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.pre-commit-config.yaml +0 -0
  86. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/.secrets.baseline +0 -0
  87. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/CLAUDE.md +0 -0
  88. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/CONFIGURATION.md +0 -0
  89. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/DISCLAIMER.md +0 -0
  90. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/GEMINI.md +0 -0
  91. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/LICENSE +0 -0
  92. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/PLAN.md +0 -0
  93. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/README.md +0 -0
  94. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/RELEASE.md +0 -0
  95. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/ROADMAP.md +0 -0
  96. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/conftest.py +0 -0
  97. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docker-compose.yml +0 -0
  98. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/AGENT_GUIDE.md +0 -0
  99. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/AGENT_UI_E2E.md +0 -0
  100. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/AGENT_UI_RECON.md +0 -0
  101. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/ARCHITECTURE.md +0 -0
  102. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/AUTHENTICATION.md +0 -0
  103. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/CHARACTER.md +0 -0
  104. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/CHARACTER_RECON.md +0 -0
  105. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/DATA_LAYER.md +0 -0
  106. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/DEBUGGING.md +0 -0
  107. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/DEMOS.md +0 -0
  108. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/DEVELOPMENT.md +0 -0
  109. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/E2E_TESTING.md +0 -0
  110. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/EXTERNAL_STORAGE.md +0 -0
  111. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/GITHUB.md +0 -0
  112. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  113. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  114. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/INSTRUCTIONS.md +0 -0
  115. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  116. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  117. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  118. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  119. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  120. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  121. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  122. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  123. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  124. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  125. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  126. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  127. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  128. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  129. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  130. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  131. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  132. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  133. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  134. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  135. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  136. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  137. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  138. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  139. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  140. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  141. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  142. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  143. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  144. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  145. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  146. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  147. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/MCP.md +0 -0
  148. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/MOVIE.md +0 -0
  149. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/PROMPT_EXPANSION.md +0 -0
  150. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/SECURITY.md +0 -0
  151. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/TOOLS.md +0 -0
  152. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/USER_GUIDE.md +0 -0
  153. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/assets/demo-split-pf.gif +0 -0
  154. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/assets/example-run.gif +0 -0
  155. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/assets/examples.webp +0 -0
  156. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/medium_tutorial.md +0 -0
  157. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/schemas/movie-handoff.schema.json +0 -0
  158. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/sonar-cleanup-tracker.md +0 -0
  159. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  160. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  161. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  162. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  163. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  164. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  165. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  166. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  167. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  168. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  169. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  170. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  171. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  172. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  173. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/examples/README.md +0 -0
  174. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/examples/batch_from_config.py +0 -0
  175. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/examples/multi_prompt_t2i.py +0 -0
  176. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/examples/sample_config.json +0 -0
  177. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/examples/sample_prompts.txt +0 -0
  178. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/examples/single_image_t2i.py +0 -0
  179. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/examples/workflow_chain.py +0 -0
  180. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/llms.txt +0 -0
  181. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/README.md +0 -0
  182. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/01_upload_image.json +0 -0
  183. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  184. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  185. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/04_archive_workflow.json +0 -0
  186. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/05_createProject.json +0 -0
  187. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/06_batchGenerateImages.json +0 -0
  188. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  189. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  190. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  191. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  192. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  193. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/12_create_scene.json +0 -0
  194. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  195. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/14_get_scene_workflows.json +0 -0
  196. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  197. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/ci/check_doc_links.py +0 -0
  198. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/ci/check_materiality.py +0 -0
  199. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/ci/check_repo_hygiene.py +0 -0
  200. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/debug_editor.py +0 -0
  201. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/debug_gen_settings.py +0 -0
  202. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/debug_settings.py +0 -0
  203. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/_recording_client.py +0 -0
  204. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/_spike_common.py +0 -0
  205. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/active_plan.py +0 -0
  206. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  207. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  208. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  209. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  210. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  211. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  212. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/capture_locale_invariants.py +0 -0
  213. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  214. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/character_create_spike.py +0 -0
  215. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/character_create_spike_v2.py +0 -0
  216. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/dump_character_selectors.js +0 -0
  217. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/make_project.py +0 -0
  218. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/materiality_backtest.py +0 -0
  219. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/monitor_pr_38.py +0 -0
  220. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/patch_character.py +0 -0
  221. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/skillopt/README.md +0 -0
  222. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/skillopt/harness.py +0 -0
  223. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/skillopt/tasks.json +0 -0
  224. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  225. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  226. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  227. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  228. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  229. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  230. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  231. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  232. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  233. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  234. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  235. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  236. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  237. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_patch_entity.py +0 -0
  238. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/dev/spike_patchright.py +0 -0
  239. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/diag/README.md +0 -0
  240. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/diag/capture_flow_traffic.py +0 -0
  241. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/diag/memory_profile.py +0 -0
  242. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/diag/recaptcha_mint.py +0 -0
  243. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  244. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  245. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/record_demo.ps1 +0 -0
  246. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/smoke_image.py +0 -0
  247. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/smoke_real_chrome_image.py +0 -0
  248. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/smoke_video_editor.py +0 -0
  249. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/smoke_worker_style.py +0 -0
  250. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/spike_waf_camoufox.py +0 -0
  251. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/scripts/verify_chrome_auth_viability.py +0 -0
  252. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/skills/gflow-cli/SKILL.md +0 -0
  253. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/skills/issue-assessment/SKILL.md +0 -0
  254. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/skills/issue-resolve/SKILL.md +0 -0
  255. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/skills/plan/SKILL.md +0 -0
  256. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/skills/predict/SKILL.md +0 -0
  257. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/skills/scenario/SKILL.md +0 -0
  258. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/skills/status/SKILL.md +0 -0
  259. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/sonar-project.properties +0 -0
  260. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/__main__.py +0 -0
  261. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/_cli_helpers.py +0 -0
  262. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/__init__.py +0 -0
  263. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/_engine.py +0 -0
  264. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/_retry.py +0 -0
  265. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  266. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/character.py +0 -0
  267. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/client.py +0 -0
  268. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/dto.py +0 -0
  269. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/image_upscale.py +0 -0
  270. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/recaptcha.py +0 -0
  271. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/routes.py +0 -0
  272. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/scene.py +0 -0
  273. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  274. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/_common.py +0 -0
  275. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  276. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/base.py +0 -0
  277. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  278. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  279. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  280. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  281. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  282. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  283. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  284. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  285. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/transports/ui_automation_video.py +0 -0
  286. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/api/video.py +0 -0
  287. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/auth/__init__.py +0 -0
  288. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/auth/base.py +0 -0
  289. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/auth/cookies.py +0 -0
  290. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/auth/factory.py +0 -0
  291. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  292. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  293. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/auth/strategies.py +0 -0
  294. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/auth/verification.py +0 -0
  295. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/browser_manager.py +0 -0
  296. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/chain.py +0 -0
  297. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/chain_manifest.py +0 -0
  298. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/cli.py +0 -0
  299. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/cli_character.py +0 -0
  300. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/cli_data.py +0 -0
  301. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/cli_instructions.py +0 -0
  302. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/cli_models.py +0 -0
  303. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/cli_movie.py +0 -0
  304. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/cli_run.py +0 -0
  305. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/cli_scene.py +0 -0
  306. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/cli_tools.py +0 -0
  307. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/cli_video.py +0 -0
  308. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/composition.py +0 -0
  309. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/__init__.py +0 -0
  310. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/chain_repo.py +0 -0
  311. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  312. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  313. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  314. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  315. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  316. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  317. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  318. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  319. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  320. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/models.py +0 -0
  321. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/queries.py +0 -0
  322. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/recorder.py +0 -0
  323. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/redaction.py +0 -0
  324. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/repository.py +0 -0
  325. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/data/store.py +0 -0
  326. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/exceptions.py +0 -0
  327. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/image_batch.py +0 -0
  328. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/json_output.py +0 -0
  329. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/manifest.py +0 -0
  330. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/mcp/__init__.py +0 -0
  331. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/mcp/prompts.py +0 -0
  332. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/mcp/resources.py +0 -0
  333. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/mcp/server.py +0 -0
  334. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/media.py +0 -0
  335. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/movie_manifest.py +0 -0
  336. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/observability.py +0 -0
  337. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/paths.py +0 -0
  338. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/profile_store.py +0 -0
  339. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/services/__init__.py +0 -0
  340. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/services/character_create.py +0 -0
  341. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/storage.py +0 -0
  342. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/tools/__init__.py +0 -0
  343. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/tools/banned.py +0 -0
  344. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  345. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  346. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/tools/invocation.py +0 -0
  347. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/tools/loader.py +0 -0
  348. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/tools/registry.py +0 -0
  349. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/tools/spec.py +0 -0
  350. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/ui/app.py +0 -0
  351. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/ui/server.py +0 -0
  352. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/src/gflow_cli/worker/queue.py +0 -0
  353. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tasks/lessons.md +0 -0
  354. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/test_assets/sample_batch.json +0 -0
  355. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/test_assets/sample_batch.tsv +0 -0
  356. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/test_assets/sample_batch_invalid.tsv +0 -0
  357. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/__init__.py +0 -0
  358. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/__init__.py +0 -0
  359. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/fixtures/character_gen_response.json +0 -0
  360. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  361. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  362. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  363. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_bearer_redaction.py +0 -0
  364. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_character.py +0 -0
  365. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_client.py +0 -0
  366. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_client_character.py +0 -0
  367. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_client_delete_characters.py +0 -0
  368. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_client_generate_character.py +0 -0
  369. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_client_image.py +0 -0
  370. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_client_launch_kwargs.py +0 -0
  371. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_client_patch_entity.py +0 -0
  372. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_client_scene.py +0 -0
  373. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_client_upscale.py +0 -0
  374. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_concurrency.py +0 -0
  375. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_dto.py +0 -0
  376. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_engine.py +0 -0
  377. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_image.py +0 -0
  378. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_image_dto.py +0 -0
  379. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_image_upscale.py +0 -0
  380. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  381. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_recaptcha.py +0 -0
  382. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_retry.py +0 -0
  383. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_routes.py +0 -0
  384. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_routes_character.py +0 -0
  385. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_routes_scene.py +0 -0
  386. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_sapisidhash_helper.py +0 -0
  387. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_scene_models.py +0 -0
  388. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_video.py +0 -0
  389. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/test_video_request.py +0 -0
  390. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/__init__.py +0 -0
  391. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/conftest.py +0 -0
  392. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/drivers/__init__.py +0 -0
  393. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  394. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/drivers/test_classic.py +0 -0
  395. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/test_base.py +0 -0
  396. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/test_bearer.py +0 -0
  397. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/test_common.py +0 -0
  398. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  399. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/test_factory.py +0 -0
  400. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/test_fingerprint.py +0 -0
  401. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/test_sapisidhash.py +0 -0
  402. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  403. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/test_transport_timeout.py +0 -0
  404. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  405. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  406. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/api/transports/test_ui_character_editor.py +0 -0
  407. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/auth/strategies/test_factory.py +0 -0
  408. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/auth/strategies/test_strategies.py +0 -0
  409. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/auth/test_cookies.py +0 -0
  410. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/auth/test_verification.py +0 -0
  411. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/__init__.py +0 -0
  412. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_auth_list.py +0 -0
  413. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_character.py +0 -0
  414. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_character_create.py +0 -0
  415. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_data.py +0 -0
  416. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_image.py +0 -0
  417. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  418. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  419. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_image_upscale.py +0 -0
  420. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_instructions.py +0 -0
  421. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_models.py +0 -0
  422. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_movie.py +0 -0
  423. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_run.py +0 -0
  424. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_scene.py +0 -0
  425. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_tools.py +0 -0
  426. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_video.py +0 -0
  427. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_cli_video_chain.py +0 -0
  428. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_error_handling.py +0 -0
  429. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_helpers.py +0 -0
  430. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_movie_manifest.py +0 -0
  431. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  432. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_settings_validation.py +0 -0
  433. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  434. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/composition/test_character.py +0 -0
  435. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/composition/test_compose_prompt.py +0 -0
  436. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/composition/test_handoff.py +0 -0
  437. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/composition/test_style_variants.py +0 -0
  438. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/composition/test_style_variants_e2e.py +0 -0
  439. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/conftest.py +0 -0
  440. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/data/__init__.py +0 -0
  441. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/data/test_chain_repo.py +0 -0
  442. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/data/test_find_incomplete_character.py +0 -0
  443. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/data/test_models.py +0 -0
  444. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/data/test_packaging.py +0 -0
  445. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/data/test_recorder.py +0 -0
  446. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/data/test_recorder_character.py +0 -0
  447. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/data/test_redaction.py +0 -0
  448. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/data/test_repository.py +0 -0
  449. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/data/test_scene_persistence.py +0 -0
  450. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/data/test_settings_and_errors.py +0 -0
  451. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/data/test_store_migrations.py +0 -0
  452. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/dev/test_recording_client.py +0 -0
  453. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/__init__.py +0 -0
  454. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/conftest.py +0 -0
  455. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  456. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  457. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_chain_e2e.py +0 -0
  458. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_character_create_e2e.py +0 -0
  459. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_daemon_e2e.py +0 -0
  460. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  461. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  462. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  463. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  464. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_json_output_e2e.py +0 -0
  465. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  466. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  467. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_scene_compose_live.py +0 -0
  468. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_tools_e2e.py +0 -0
  469. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_transports_e2e.py +0 -0
  470. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  471. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  472. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/__init__.py +0 -0
  473. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/auth.feature +0 -0
  474. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/auth_login.feature +0 -0
  475. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/character_create.feature +0 -0
  476. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/character_read.feature +0 -0
  477. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/conftest.py +0 -0
  478. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/image.feature +0 -0
  479. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/image_upscale.feature +0 -0
  480. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/instructions.feature +0 -0
  481. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/locale_picker_include.feature +0 -0
  482. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/test_auth_login_steps.py +0 -0
  483. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/test_auth_steps.py +0 -0
  484. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/test_character_create_steps.py +0 -0
  485. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/test_character_read_steps.py +0 -0
  486. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/test_image_steps.py +0 -0
  487. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/test_image_upscale_steps.py +0 -0
  488. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/test_instructions_steps.py +0 -0
  489. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  490. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/test_step_collision_guard.py +0 -0
  491. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/test_video_agent_ui_steps.py +0 -0
  492. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/test_video_chain_steps.py +0 -0
  493. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/video_agent_ui.feature +0 -0
  494. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/features/video_chain.feature +0 -0
  495. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/fixtures/__init__.py +0 -0
  496. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/fixtures/seeded_catalog.py +0 -0
  497. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/image_batch/__init__.py +0 -0
  498. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/image_batch/test_image_manifest.py +0 -0
  499. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/image_batch/test_jitter_config.py +0 -0
  500. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/image_batch/test_observability_events.py +0 -0
  501. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/integration/__init__.py +0 -0
  502. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/integration/conftest.py +0 -0
  503. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/integration/constants.py +0 -0
  504. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/integration/test_storage_gcs.py +0 -0
  505. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/integration/test_storage_s3.py +0 -0
  506. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/mcp/__init__.py +0 -0
  507. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/mcp/conftest.py +0 -0
  508. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/mcp/test_cli_parity.py +0 -0
  509. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/mcp/test_server.py +0 -0
  510. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/mcp/test_stdio_transport.py +0 -0
  511. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/mcp/test_tools_helpers.py +0 -0
  512. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/mcp/test_tools_instructions.py +0 -0
  513. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/mcp/test_tools_wired.py +0 -0
  514. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  515. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  516. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/scripts/test_check_materiality.py +0 -0
  517. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  518. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/scripts/test_materiality_backtest.py +0 -0
  519. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/services/__init__.py +0 -0
  520. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/services/test_character_create_redaction.py +0 -0
  521. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/services/test_character_create_saga.py +0 -0
  522. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  523. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/smoke/__init__.py +0 -0
  524. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  525. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/smoke/test_real_flow.py +0 -0
  526. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_auth.py +0 -0
  527. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_browser_manager.py +0 -0
  528. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_chain.py +0 -0
  529. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_chain_manifest.py +0 -0
  530. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_cli_data.py +0 -0
  531. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_config.py +0 -0
  532. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_conftest_isolation.py +0 -0
  533. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_data_queries.py +0 -0
  534. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_documentation_gate.py +0 -0
  535. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_errors.py +0 -0
  536. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_errors_403.py +0 -0
  537. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_json_output.py +0 -0
  538. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_manifest.py +0 -0
  539. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_marker_registry.py +0 -0
  540. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_media.py +0 -0
  541. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_observability.py +0 -0
  542. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_paths.py +0 -0
  543. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_profile_store.py +0 -0
  544. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/test_smoke.py +0 -0
  545. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/tools/__init__.py +0 -0
  546. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/tools/test_banned.py +0 -0
  547. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/tools/test_invocation.py +0 -0
  548. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/tools/test_loader.py +0 -0
  549. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/tools/test_runtime.py +0 -0
  550. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/tools/test_spec.py +0 -0
  551. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/ui/test_app.py +0 -0
  552. {gflow_cli-0.33.0 → gflow_cli-0.35.0}/tests/worker/test_daemon.py +0 -0
@@ -0,0 +1,9 @@
1
+ ---
2
+ description: Show unreleased changes and last tagged version — insight into recent work.
3
+ ---
4
+
5
+ # `/gflow:changelog` — Recent changes
6
+
7
+ **Read `skills/changelog/SKILL.md` and follow the protocol**, passing `$ARGUMENTS` if given.
8
+
9
+ > Do **not** call `Skill(skill="changelog")` — read the file directly.
@@ -0,0 +1,9 @@
1
+ ---
2
+ description: Auto-fix lint and formatting, then report types and tests. Run before every commit.
3
+ ---
4
+
5
+ # `/gflow:check` — Quality gates
6
+
7
+ **Read `skills/check/SKILL.md` and follow the protocol**, passing `$ARGUMENTS` if given.
8
+
9
+ > Do **not** call `Skill(skill="check")` — read the file directly.
@@ -0,0 +1,9 @@
1
+ ---
2
+ description: Use before cutting any gflow-cli release or after a major documentation change — systematic council-driven audit that combines a mechanical 7-section checklist with a 3-agent parallel review (completeness / cross-reference / drift). Produces a consensus verdict and a concrete fix list.
3
+ ---
4
+
5
+ # `/gflow:doc-review` — Documentation Review Gate
6
+
7
+ **Read `skills/doc-review/SKILL.md` and follow the protocol**, passing `$ARGUMENTS` if given.
8
+
9
+ > Do **not** call `Skill(skill="doc-review")` — read the file directly.
@@ -0,0 +1,9 @@
1
+ ---
2
+ description: Surface open known issues. Call before touching auth, reCAPTCHA, or anything previously flagged.
3
+ ---
4
+
5
+ # `/gflow:known-issues` — Open issues
6
+
7
+ **Read `skills/known-issues/SKILL.md` and follow the protocol**, passing `$ARGUMENTS` if given.
8
+
9
+ > Do **not** call `Skill(skill="known-issues")` — read the file directly.
@@ -0,0 +1,9 @@
1
+ ---
2
+ description: Cut a new gflow-cli release — bump version, update CHANGELOG, tag, push, and back-merge.
3
+ ---
4
+
5
+ # `/gflow:release` — Cut a new release
6
+
7
+ **Read `skills/release/SKILL.md` and follow the protocol**, passing `$ARGUMENTS` if given.
8
+
9
+ > Do **not** call `Skill(skill="release")` — read the file directly.
@@ -0,0 +1,9 @@
1
+ ---
2
+ description: Check the SonarCloud quality gate for a PR (or the current branch) and drive it to zero. Reports GREEN, or the exact PR-scoped new issues/hotspots/coverage gaps to fix.
3
+ ---
4
+
5
+ # `/gflow:sonar [PR#]` — SonarCloud quality gate
6
+
7
+ **Read `skills/sonar/SKILL.md` and follow the protocol**, passing `$ARGUMENTS` if given.
8
+
9
+ > Do **not** call `Skill(skill="sonar")` — read the file directly.
@@ -123,11 +123,20 @@
123
123
  # `patchright install chromium`. Unset to revert to the default playwright engine.
124
124
  # GFLOW_CLI_BROWSER_ENGINE=playwright
125
125
 
126
- # Try to force the Classic Flow UI mode for image generation by clicking the Agent toggle pill
127
- # if the page mounts in Agentic mode. This ensures deterministic aspect ratio controls.
128
- # If the page cannot be switched back to Classic, falls back to Agentic mode.
126
+ # Which Flow UI arm a command needs: auto (bind whatever renders) | classic
127
+ # (require the hard aspect controls) | agentic (require the chat surface; needed
128
+ # for -i instructions). gflow switches to the required arm, verifies via re-probe,
129
+ # and aborts with exit 28 (retryable — the cohort flaps per load) if it can't be
130
+ # reached. -i instructions force agentic automatically. See docs/CONFIGURATION.md.
131
+ # GFLOW_CLI_UI_MODE=auto
132
+
133
+ # DEPRECATED — use GFLOW_CLI_UI_MODE=classic. true maps to ui_mode=classic, but the
134
+ # old silent agentic fallback is gone: a classic-required run now aborts (exit 28).
129
135
  # GFLOW_CLI_PREFER_CLASSIC=false
130
136
 
137
+ # DEPRECATED — use GFLOW_CLI_UI_MODE=agentic. true maps to ui_mode=agentic.
138
+ # GFLOW_CLI_FORCE_AGENT_UI=false
139
+
131
140
 
132
141
  # BCP-47 locale tag passed to Playwright's launch `locale=` parameter
133
142
  # (controls Accept-Language only — Chrome's UI language is forced to
@@ -0,0 +1,55 @@
1
+ name: Deploy site to GitHub Pages
2
+
3
+ # Publishes the marketing landing (index.html) at the site root and the
4
+ # Material for MkDocs docs portal (website/) at /docs. One site, two parts.
5
+
6
+ on:
7
+ push:
8
+ branches: [develop]
9
+ paths:
10
+ - "index.html"
11
+ - "website/**"
12
+ - ".github/workflows/pages.yml"
13
+ workflow_dispatch:
14
+
15
+ permissions:
16
+ contents: read
17
+ pages: write
18
+ id-token: write
19
+
20
+ # Never cancel an in-progress deploy; queue instead.
21
+ concurrency:
22
+ group: pages
23
+ cancel-in-progress: false
24
+
25
+ jobs:
26
+ build:
27
+ runs-on: ubuntu-latest
28
+ steps:
29
+ - uses: actions/checkout@v4
30
+ - uses: actions/setup-python@v5
31
+ with:
32
+ python-version: "3.12"
33
+ - name: Install MkDocs Material
34
+ run: pip install "mkdocs-material>=9,<10"
35
+ - name: Build docs portal
36
+ working-directory: website
37
+ run: mkdocs build
38
+ - name: Assemble site (landing at /, docs at /docs)
39
+ run: |
40
+ mkdir -p _site
41
+ cp index.html _site/
42
+ cp -r website/site _site/docs
43
+ - uses: actions/upload-pages-artifact@v3
44
+ with:
45
+ path: _site
46
+
47
+ deploy:
48
+ needs: build
49
+ runs-on: ubuntu-latest
50
+ environment:
51
+ name: github-pages
52
+ url: ${{ steps.deployment.outputs.page_url }}
53
+ steps:
54
+ - id: deployment
55
+ uses: actions/deploy-pages@v4
@@ -99,3 +99,6 @@ worktrees/
99
99
 
100
100
  # Subagent-driven-development scratch (ledger + task reports)
101
101
  .superpowers/
102
+
103
+ # MkDocs build output
104
+ website/site/
@@ -59,6 +59,7 @@ Or invoke the wrapper: `/gflow:check`.
59
59
  - Structured logging only (`structlog`) — **never** raw `print()` or `import logging` in `src/`.
60
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.
61
61
  - 100-char line length, `ruff` configured. Imports sorted by `ruff` (isort rules).
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.
62
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`.
63
64
 
64
65
  ## PR instructions
@@ -90,6 +91,19 @@ The `skills/` directory ships installable agent skill docs in plain Markdown wit
90
91
  | `plan` | [`skills/plan/SKILL.md`](skills/plan/SKILL.md) | Create a structured task-by-task implementation plan for a feature |
91
92
  | `status` | [`skills/status/SKILL.md`](skills/status/SKILL.md) | Show current plan state, progress, and next unchecked task |
92
93
  | `pr-council-review` | [`skills/pr-council-review/SKILL.md`](skills/pr-council-review/SKILL.md) | Multi-dimensional PR council review |
94
+ | `issue-assessment` | [`skills/issue-assessment/SKILL.md`](skills/issue-assessment/SKILL.md) | Triage a GitHub issue (read-only) before any fix work |
95
+ | `issue-resolve` | [`skills/issue-resolve/SKILL.md`](skills/issue-resolve/SKILL.md) | Drive an assessed issue to a test-first fix + draft PR |
96
+ | `check` | [`skills/check/SKILL.md`](skills/check/SKILL.md) | Quality gates (lint/format/types/tests) before every commit |
97
+ | `changelog` | [`skills/changelog/SKILL.md`](skills/changelog/SKILL.md) | Unreleased changes + last tagged version |
98
+ | `known-issues` | [`skills/known-issues/SKILL.md`](skills/known-issues/SKILL.md) | Open/mitigated known issues — before auth/reCAPTCHA work |
99
+ | `sonar` | [`skills/sonar/SKILL.md`](skills/sonar/SKILL.md) | Drive the SonarCloud quality gate to zero for a PR/branch |
100
+ | `doc-review` | [`skills/doc-review/SKILL.md`](skills/doc-review/SKILL.md) | Council-driven documentation audit before a release |
101
+ | `release` | [`skills/release/SKILL.md`](skills/release/SKILL.md) | Cut a release — bump, CHANGELOG, tag, push, back-merge |
102
+
103
+ **RULE — agent-agnostic by construction.** Core skills live in `skills/<name>/SKILL.md`
104
+ and must be resolvable by ANY agent via this file. Vendor directories hold thin wrappers
105
+ only (`.claude/commands/gflow/*.md` are pointers into `skills/`); never put protocol
106
+ content in a vendor directory.
93
107
 
94
108
  **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.
95
109
  **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/`.
@@ -7,6 +7,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.35.0] — 2026-07-14
11
+
12
+ ### Added
13
+
14
+ - **Multimodal Reverse-Engineering:** Integrated `gflow reverse-engineer` with `claude-video`'s `watch.py` script. When a video file or URL is passed, gflow now automatically extracts frames and uses the multimodal capabilities of Gemini to reconstruct a detailed, structured prompt.
15
+ - **Storyboard Creator:** Added a new built-in tool `storyboard` designed to scaffold a cohesive multi-panel storyboard from a narrative concept or scene description, ensuring visual and stylistic continuity across all panels.
16
+ - **GitHub Pages Site:** Created a static site structure for GitHub Pages, including a landing page and material-based documentation layout, with a polished theme aligned with project aesthetics (#308, #309).
17
+
18
+ ### Changed
19
+
20
+ - **Dynamic Token Budget:** The `maxOutputTokens` parameter for Gemini prompt expansion now dynamically scales as a fraction of `max_output_chars` (approx. 1 token per 4 characters), clamped to a minimum floor of 512 tokens.
21
+ - **Agent-Agnostic Skills:** Refactored six command protocols and relocated them to the `skills/` directory to ensure they are accessible by any developer or AI coding agent regardless of the tool being used (#305).
22
+ - **Security Updates:** Bumped the `pillow` dependency to `>=12.3.0` to address 5 CVEs (PYSEC-2026-2253..2257) (#306).
23
+ - **Ruff Dependency:** Updated the dev-dependency `ruff` from `0.15.20` to `0.15.21` (#304).
24
+
25
+ ### Fixed
26
+
27
+ - **Type Safety:** Added explicit `dict[str, object]` type annotations to the payload building in `PromptExpander` to satisfy strict Pyright invariance checks on dictionary values.
28
+
29
+ ## [0.34.0] — 2026-07-12
30
+
31
+ ### Added
32
+
33
+ - **`--ui-mode` / `GFLOW_CLI_UI_MODE` — the CLI can drive the Flow UI arm the command needs, both directions (#299).** Flow serves a **classic** composer or an **agentic** chat cohort, server-assigned and flapping per page load. Before generating, gflow now determines the **required** arm, switches to it as a prerequisite (classic↔agentic DOM toggle), **verifies** via a DOM re-probe, and — if the arm is unreachable — aborts *before* submitting with the new `UiModeUnavailableError` (**exit 28**, retryable), no credits spent. Values: `auto` (default; bind whatever renders), `classic` (require the hard aspect controls), `agentic` (require the chat surface). The required arm is also **inferred**: agent instructions (`-i`) are agentic-only, so they force agentic — closing the #267 gap where `-i` on a classic roll was *silently dropped* (now it either binds agentic or fails fast). Exposed as the **`--ui-mode` flag** on `gflow image t2i` / `i2i` (single-prompt; batch uses the env var) and the **`ui_mode` param** on the `gflow_generate_image` MCP tool; `--ui-mode classic` + `-i` is a fail-fast usage error. Grounded in the #299 spike (`docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md`). Applies to every image generation via the shared driver seam. Honest ceiling: a server-side experiment can pin the arm, in which case the switch can't win — the abort still saves the credits.
34
+
35
+ ### Changed
36
+
37
+ - **`GFLOW_CLI_PREFER_CLASSIC` and `GFLOW_CLI_FORCE_AGENT_UI` are deprecated (#299)** in favor of `GFLOW_CLI_UI_MODE=classic` / `=agentic` (both still work, mapping to the new modes with a `DeprecationWarning`). **Behavior change:** the old `prefer_classic` silent fallback to agentic when the classic toggle was unavailable is gone — a classic-required run now aborts with exit 28 instead. Pipelines that relied on "always yields a file" from `PREFER_CLASSIC=1` must handle exit 28 (retry / switch profile / `GFLOW_CLI_UI_MODE=agentic`).
38
+
10
39
  ## [0.33.0] — 2026-07-12
11
40
 
12
41
  ### Added
@@ -1951,7 +1980,8 @@ shell-script template that branches on these codes.
1951
1980
 
1952
1981
  First skeleton. Not functional end-to-end yet.
1953
1982
 
1954
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.33.0...HEAD
1983
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.34.0...HEAD
1984
+ [0.34.0]: https://github.com/ffroliva/gflow-cli/compare/v0.33.0...v0.34.0
1955
1985
  [0.33.0]: https://github.com/ffroliva/gflow-cli/compare/v0.32.1...v0.33.0
1956
1986
  [0.32.1]: https://github.com/ffroliva/gflow-cli/compare/v0.32.0...v0.32.1
1957
1987
  [0.32.0]: https://github.com/ffroliva/gflow-cli/compare/v0.31.0...v0.32.0
@@ -102,6 +102,19 @@ pip install pre-commit && pre-commit install
102
102
 
103
103
  The `.pre-commit-config.yaml` already ships ruff and the hygiene gate.
104
104
 
105
+ ### Review lenses (over-engineering matters)
106
+
107
+ `gflow-cli` values **YAGNI / least-code** (see [AGENTS.md § Code style](AGENTS.md)):
108
+ the smallest change that works, no speculative abstractions, no dead code. This is a
109
+ first-class review dimension — **D14 over-engineering** in
110
+ [`pr-council-review`](skills/pr-council-review/SKILL.md), which always runs and carries
111
+ its own portable rubric.
112
+
113
+ Optionally, the `ponytail` Claude Code plugin (from the plugin marketplace) encodes
114
+ exactly this review taste — `/ponytail-review` audits a diff for over-engineering. It's a
115
+ **recommended, not required** accelerant: the D14 rubric applies with or without it, so no
116
+ contributor is blocked for lacking the plugin.
117
+
105
118
  ### SonarCloud quality gate
106
119
 
107
120
  On top of the six gates, CI runs a **SonarCloud** analysis whose quality gate must be
@@ -291,10 +291,38 @@ gflow video batch ./batch-a.tsv --profile work
291
291
  gflow video batch ./batch-b.tsv --profile personal
292
292
  ```
293
293
 
294
- **Roadmap:** Phase 4 (v0.4.0a2) added concurrency *inside* one `gflow video batch` 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.
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
295
 
296
296
  ---
297
297
 
298
+ ### Chromium cookie database locks block yt-dlp integrations (Instagram/restricted download paths)
299
+
300
+ - **Status:** Mitigated · **Severity:** Low-Medium · **Affects:** any downstream helper calling `yt-dlp` (including `claude-video`, `cg-decode`/`refanalyzer`, or `experience-vault`)
301
+
302
+ When executing `yt-dlp` from automated shell calls or Python wrappers while a Chromium-based browser (Chrome or Edge) is active, you may see:
303
+ ```text
304
+ ERROR: Could not copy Chrome cookie database.
305
+ ```
306
+ This is because Chromium holds an exclusive lock on its SQLite cookie database while active, causing `yt-dlp` to crash when attempting to extract cookies from the browser.
307
+
308
+ **Mitigation & Workaround:**
309
+ 1. **Cookie Export:** Export Netscape-formatted cookies from your logged-in browser session to a static file (e.g. `ig_cookies.txt` or `.auth/ig_cookies.txt`).
310
+ 2. **Configuration Isolation:** Prevent `yt-dlp` from reading global user configurations that might force browser-cookie loading (e.g. `%APPDATA%\yt-dlp\config.txt` containing `--cookies-from-browser chrome`).
311
+ - In CLI calls, pass `--no-config` (or `--ignore-config`):
312
+ ```bash
313
+ yt-dlp --no-config --cookies path/to/cookies.txt [URL]
314
+ ```
315
+ - In Python `YoutubeDL` constructors, pass `"ignoreconfig": True` in the options dictionary:
316
+ ```python
317
+ opts = {
318
+ "cookiefile": "path/to/cookies.txt",
319
+ "ignoreconfig": True,
320
+ }
321
+ ```
322
+
323
+ ---
324
+
325
+
298
326
  ### Flow's first-upload terms-of-use dialog ("Aviso") blocks the worker (worker-only)
299
327
 
300
328
  - **Status:** Open · **Severity:** Low · **Affects:** the legacy in-tree Compiled Growth worker, NOT `gflow-cli` itself
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gflow-cli
3
- Version: 0.33.0
3
+ Version: 0.35.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.20; extra == 'dev'
61
+ Requires-Dist: ruff==0.15.21; 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'
@@ -231,13 +231,26 @@ GFLOW_CLI_HISTORY_PROMPTS=redacted gflow image t2i "confidential brief"
231
231
  **Reverting:** unset the variable (or set `playwright`) — the default path is byte-identical to a build without this feature, with no profile migration.
232
232
  **Security note:** the `patchright` extra ships a *patched Chromium driver* that handles your live Google session cookies; it is exact-pinned and treated as a security-review-required dependency. See [SECURITY.md § Dependencies](SECURITY.md).
233
233
 
234
- ### `GFLOW_CLI_PREFER_CLASSIC`
234
+ ### `GFLOW_CLI_UI_MODE`
235
235
 
236
- **What:** Try to force the Classic Flow UI mode for image generation by clicking the Agent toggle pill if the page mounts in Agentic mode.
237
- **Values:** `true` | `false`
238
- **Default:** `false`
239
- **Why use it:** The Agentic UI cohort (conversational chat) treats requested aspect ratios as a soft prompt hint, which can result in inconsistent aspect ratios (e.g. producing landscape when portrait 9:16 was requested). Exposing this setting allows callers to opt into switching the UI back to Classic mode where aspect ratios are enforced deterministically (via hard Flow crop controls).
240
- **Fallback:** If the page cannot be switched back to Classic (e.g., in a forced A/B cohort where the toggle is not available), the driver gracefully falls back to Agentic mode rather than blocking execution.
236
+ **What:** Which Flow UI arm to use for generation. Flow serves a **classic** composer (hard crop/aspect controls) or an **agentic** chat cohort, server-assigned and flapping per page load ([#299](https://github.com/ffroliva/gflow-cli/issues/299)).
237
+ **Values:**
238
+ - `auto` (default) — bind whatever the composer renders.
239
+ - `classic` — require the classic composer (hard aspect controls). gflow switches to it, re-probes to verify, and if the arm is still agentic **aborts before submitting** with `UiModeUnavailableError` (**exit 28**) — no credits spent.
240
+ - `agentic` — require the agentic chat surface (needed for `-i` agent instructions). gflow switches to it, verifies, and aborts (exit 28) if it can't be reached.
241
+ **Default:** `auto`
242
+ **How it works:** before each generation, gflow determines the required arm, clicks the classic↔agentic toggle as a **prerequisite**, **verifies** with a DOM re-probe, then binds — or fails fast. The required arm is also **inferred**: `-i` instructions are agentic-only, so they force `agentic` automatically (and `--ui-mode classic` + `-i` is a hard conflict, not a silent drop).
243
+ **Why `classic`:** the agentic cohort treats aspect ratio as a soft prompt hint (portrait 9:16 can come back landscape). `classic` enforces it or fails fast instead of silently degrading.
244
+ **Retry note:** the cohort flaps per load, so an exit-28 abort is **retryable** — a re-run often lands the wanted arm. A server experiment can pin the arm, in which case it's unreachable from the client (the abort still saves the credits).
245
+ **Supersedes:** `GFLOW_CLI_PREFER_CLASSIC` and `GFLOW_CLI_FORCE_AGENT_UI` (below).
246
+
247
+ ### `GFLOW_CLI_PREFER_CLASSIC` *(deprecated — use `GFLOW_CLI_UI_MODE=classic`)*
248
+
249
+ **Deprecated** in favor of [`GFLOW_CLI_UI_MODE`](#gflow_cli_ui_mode). `true` now maps to `ui_mode=classic` (emits a `DeprecationWarning`). **Behavior change:** the old silent fallback to agentic when the toggle was unavailable is gone — a classic-required run now **aborts with exit 28** instead of producing an agentic-cohort result. `GFLOW_CLI_UI_MODE` (and `--ui-mode`) take precedence when both are set.
250
+
251
+ ### `GFLOW_CLI_FORCE_AGENT_UI` *(deprecated — use `GFLOW_CLI_UI_MODE=agentic`)*
252
+
253
+ **Deprecated** in favor of [`GFLOW_CLI_UI_MODE`](#gflow_cli_ui_mode). `true` maps to `ui_mode=agentic` (emits a `DeprecationWarning`). `-i` instructions already force agentic automatically, so this is rarely needed explicitly.
241
254
 
242
255
  ### `GFLOW_CLI_LOCALE`
243
256
 
@@ -122,7 +122,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
122
122
  **"A gflow command hangs / fails — where do I start?"** → [DEBUGGING § Quick reference](DEBUGGING.md#quick-reference)
123
123
  **"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
124
124
  **"What does each `ui_automation.*` log event mean?"** → [DEBUGGING § Listener & HTTP-layer debugging](DEBUGGING.md#listener--http-layer-debugging)
125
- **"What was actually live-verified for the latest release?"** → latest: [LIVE_VERIFICATION_v0.33.0](LIVE_VERIFICATION_v0.33.0.md) (**#287-follow-up picker fix proven live on the original repro** — the v0.32.1-failing `i2v <uuid> --project <crowded>` command now exits 0 with a real 3.0 MB `ftyp` mp4, `frame_ref_attached` + `video_saved`, zero uploads; **#241 jitter live-verified on both paths** — flag `--jitter 4-6` → `batch_jitter_sleep seconds=4.98`, and the new 0.5–1.5 s default → `seconds=1.47`, each firing exactly once between two t2i submissions; environment note: the denon82 cohort is now natively agentic and round-2 generations hit the pre-existing #281 `MediaAttributionError`, not a regression). Prior: [v0.32.1](LIVE_VERIFICATION_v0.32.1.md) (**#293 teardown fix live-verified credit-free** — error-path aborts leave ZERO chrome.exe holding the profile [3× leak reproduced pre-fix same day]; force-close fallback + ProfileLockedError translation unit-pinned; #283 wave logic fixes mock-verified to exact call counts). Prior: [v0.32.0](LIVE_VERIFICATION_v0.32.0.md) (**#287 UUID i2v frames proven live e2e** — an in-project asset selected by media UUID in the frame-slot dialog [frame_ref_attached, startImage bound on the wire, ZERO upload events] produced a real 720×1280 interpolation, resolving the #237 negative prior; foreign UUID → exit 9 pre-generation with screenshot; **#288 duration fail-fast proven live** — exit 23 pre-submit saved a 10-credit generation, and the debug screenshot confirmed the duration control is ABSENT from the cohort's settings popover [locale hypothesis refuted]; upload-400 exit-27 repro deferred-with-reason — the original rejected JPEG no longer exists). Prior: [v0.31.0](LIVE_VERIFICATION_v0.31.0.md) (**#281 wrong-media defenses live-verified in BOTH directions, credit-free** — correct attribution downloads with real wire metadata [seed, 768×1376]; the incident-class lazy-render ambiguity reproduced live and hard-stopped with `MediaAttributionError` exit 26 naming every candidate UUID, no file written; **#282 two-UUID-ref i2i proven e2e** — both freshly generated portrait UUIDs picker-selected into one scene with both canonical identities visually transferred). Prior: [v0.30.0](LIVE_VERIFICATION_v0.30.0.md) (**agentic-cohort image path + both fixes live-verified credit-free** — native 768×1376 stills, i2i-chain + canonical-ref identity hold; the character-create `DataIntegrityError` and the `prefer_classic` WARNING were observed live then fixed [recorder idempotent + INFO log]; MCP video-param feature deferred-with-reason on Veo credits, per the stills-only goal). Prior: [v0.29.0](LIVE_VERIFICATION_v0.29.0.md) (**persistent `gflow instructions` CRUD proven live e2e GREEN, credit-free** — 11-command sequence on a fresh project: add incl. `--ref <image-UUID>` attach, list/enable/disable, master toggle both ways, TOML `apply` destructive full-sync with `enabled=false` honored, `rm` with server card-id preserved across mutations; movie brief-sync code-path-verified via the same primitives, deferred-with-reason on credits; MCP `gflow_instructions_*` tools are thin adapters over the live-verified primitives). Prior: [v0.28.0](LIVE_VERIFICATION_v0.28.0.md) (**agent instructions `-i` now steer agentic generation — crayon e2e GREEN**: a style-neutral prompt + an enabled "crayon" card produced an unmistakable crayon drawing through the real transport; root causes were conversational phrasing + the `project_brief.enabled` master switch). Prior: [v0.27.1](LIVE_VERIFICATION_v0.27.1.md) (**v0.27.0 release follow-up fixes and documentation sync**). Prior: [v0.27.0](LIVE_VERIFICATION_v0.27.0.md) (**`[style]` block with named variants + prompt-aware resume — credit-free CLI verification**: real `movie run --dry-run` 3-way ledger proving resolved-style display, `skip (done)` on matching `style_hash`, and `re-run (style changed)` after a style edit; composition is local, wire path untouched, so no Veo credits spent — first credited styled run will confirm visually). Prior: [v0.26.0](LIVE_VERIFICATION_v0.26.0.md) (**image i2i by generated-image UUID proven live e2e GREEN** — the existing asset is *selected in place* by its media UUID, no duplicate upload, producing an i2i output that references it; plus generated-image `display_name` capture, credited @C1ph3r404). Prior: [v0.25.0](LIVE_VERIFICATION_v0.25.0.md) (**#237 remote-UUID i2v proven live e2e GREEN** — a real 8s 720×1280 interpolation from a generated image's UUID, after the picker-search attach was reworked to local upload; #240 home-`.env` matrix live; plus two silent-failure guards root-caused live: video-as-image download rejection and rejected-upload fail-loud). Prior: [v0.24.0](LIVE_VERIFICATION_v0.24.0.md) (--project parity across CLI + MCP — automated coverage; live gen auth-gated). Prior: [v0.23.0](LIVE_VERIFICATION_v0.23.0.md) (MCP generation wiring proven live end-to-end — tool→worker→real Flow REST→structured-error translation; final image-write blocked by an expired session, environmental. #222 macOS fix reporter-verified e2e on Apple Silicon). Prior: [v0.22.0](LIVE_VERIFICATION_v0.22.0.md) (Tools framework — automated/CI coverage complete; credit/key-gated live feature run is a pending owner gate, see the doc) · [v0.21.0](LIVE_VERIFICATION_v0.21.0.md) (MCP server over stdio + HTTP/SSE — credit-free protocol handshake; 4 tools / 2 prompts / 3 resources confirmed on stdout) · [v0.20.1](LIVE_VERIFICATION_v0.20.1.md) · [v0.20.0](LIVE_VERIFICATION_v0.20.0.md) · [v0.19.0](LIVE_VERIFICATION_v0.19.0.md) · [v0.18.0](LIVE_VERIFICATION_v0.18.0.md) · [v0.17.0](LIVE_VERIFICATION_v0.17.0.md) · [v0.16.0](LIVE_VERIFICATION_v0.16.0.md) · [v0.13.0](LIVE_VERIFICATION_v0.13.0.md) · [v0.12.0](LIVE_VERIFICATION_v0.12.0.md) · [v0.11.0](LIVE_VERIFICATION_v0.11.0.md) · [v0.10.0](LIVE_VERIFICATION_v0.10.0.md) · [v0.9.1](LIVE_VERIFICATION_v0.9.1.md) · [v0.9.0](LIVE_VERIFICATION_v0.9.0.md) · [v0.8.1](LIVE_VERIFICATION_v0.8.1.md) · [v0.7.0](LIVE_VERIFICATION_v0.7.0.md)
125
+ **What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.35.0](LIVE_VERIFICATION_v0.35.0.md) (**#305-follow-up multimodal reverse-engineering & storyboard tool proven live e2e** — `gflow tools run storyboard` successfully deconstructed a cyberpunk scene into a cohesive 4-panel sequence; `reverse-engineer` tool extracts frames from video streams/URLs using `claude-video`'s `watch.py` and produces structured prompt components using Gemini multimodal models; dynamic token budgeting and strict Pyright types verified via test suite). Prior: [v0.34.0](LIVE_VERIFICATION_v0.34.0.md) (**#299 `--ui-mode` gate proven live, ZERO credits** — drove `get_ui_driver` directly over 4 real editor loads, never generated: bidirectional switch works [classic→agentic via `_force_agent_mode`, agentic→classic via `_exit_agent_mode`, each DOM-reverified], `agentic`-when-already-agentic is idempotent, and a timed-out toggle → **exit-28 fail-fast before submission**; deprecation behavior-change [`prefer_classic`→exit 28] confirmed). Prior: [v0.33.0](LIVE_VERIFICATION_v0.33.0.md) (**#287-follow-up picker fix proven live on the original repro** — the v0.32.1-failing `i2v <uuid> --project <crowded>` command now exits 0 with a real 3.0 MB `ftyp` mp4, `frame_ref_attached` + `video_saved`, zero uploads; **#241 jitter live-verified on both paths** — flag `--jitter 4-6` → `batch_jitter_sleep seconds=4.98`, and the new 0.5–1.5 s default → `seconds=1.47`, each firing exactly once between two t2i submissions; environment note: the denon82 cohort is now natively agentic and round-2 generations hit the pre-existing #281 `MediaAttributionError`, not a regression). Prior: [v0.32.1](LIVE_VERIFICATION_v0.32.1.md) (**#293 teardown fix live-verified credit-free** — error-path aborts leave ZERO chrome.exe holding the profile [3× leak reproduced pre-fix same day]; force-close fallback + ProfileLockedError translation unit-pinned; #283 wave logic fixes mock-verified to exact call counts). Prior: [v0.32.0](LIVE_VERIFICATION_v0.32.0.md) (**#287 UUID i2v frames proven live e2e** — an in-project asset selected by media UUID in the frame-slot dialog [frame_ref_attached, startImage bound on the wire, ZERO upload events] produced a real 720×1280 interpolation, resolving the #237 negative prior; foreign UUID → exit 9 pre-generation with screenshot; **#288 duration fail-fast proven live** — exit 23 pre-submit saved a 10-credit generation, and the debug screenshot confirmed the duration control is ABSENT from the cohort's settings popover [locale hypothesis refuted]; upload-400 exit-27 repro deferred-with-reason — the original rejected JPEG no longer exists). Prior: [v0.31.0](LIVE_VERIFICATION_v0.31.0.md) (**#281 wrong-media defenses live-verified in BOTH directions, credit-free** — correct attribution downloads with real wire metadata [seed, 768×1376]; the incident-class lazy-render ambiguity reproduced live and hard-stopped with `MediaAttributionError` exit 26 naming every candidate UUID, no file written; **#282 two-UUID-ref i2i proven e2e** — both freshly generated portrait UUIDs picker-selected into one scene with both canonical identities visually transferred). Prior: [v0.30.0](LIVE_VERIFICATION_v0.30.0.md) (**agentic-cohort image path + both fixes live-verified credit-free** — native 768×1376 stills, i2i-chain + canonical-ref identity hold; the character-create `DataIntegrityError` and the `prefer_classic` WARNING were observed live then fixed [recorder idempotent + INFO log]; MCP video-param feature deferred-with-reason on Veo credits, per the stills-only goal). Prior: [v0.29.0](LIVE_VERIFICATION_v0.29.0.md) (**persistent `gflow instructions` CRUD proven live e2e GREEN, credit-free** — 11-command sequence on a fresh project: add incl. `--ref <image-UUID>` attach, list/enable/disable, master toggle both ways, TOML `apply` destructive full-sync with `enabled=false` honored, `rm` with server card-id preserved across mutations; movie brief-sync code-path-verified via the same primitives, deferred-with-reason on credits; MCP `gflow_instructions_*` tools are thin adapters over the live-verified primitives). Prior: [v0.28.0](LIVE_VERIFICATION_v0.28.0.md) (**agent instructions `-i` now steer agentic generation — crayon e2e GREEN**: a style-neutral prompt + an enabled "crayon" card produced an unmistakable crayon drawing through the real transport; root causes were conversational phrasing + the `project_brief.enabled` master switch). Prior: [v0.27.1](LIVE_VERIFICATION_v0.27.1.md) (**v0.27.0 release follow-up fixes and documentation sync**). Prior: [v0.27.0](LIVE_VERIFICATION_v0.27.0.md) (**`[style]` block with named variants + prompt-aware resume — credit-free CLI verification**: real `movie run --dry-run` 3-way ledger proving resolved-style display, `skip (done)` on matching `style_hash`, and `re-run (style changed)` after a style edit; composition is local, wire path untouched, so no Veo credits spent — first credited styled run will confirm visually). Prior: [v0.26.0](LIVE_VERIFICATION_v0.26.0.md) (**image i2i by generated-image UUID proven live e2e GREEN** — the existing asset is *selected in place* by its media UUID, no duplicate upload, producing an i2i output that references it; plus generated-image `display_name` capture, credited @C1ph3r404). Prior: [v0.25.0](LIVE_VERIFICATION_v0.25.0.md) (**#237 remote-UUID i2v proven live e2e GREEN** — a real 8s 720×1280 interpolation from a generated image's UUID, after the picker-search attach was reworked to local upload; #240 home-`.env` matrix live; plus two silent-failure guards root-caused live: video-as-image download rejection and rejected-upload fail-loud). Prior: [v0.24.0](LIVE_VERIFICATION_v0.24.0.md) (--project parity across CLI + MCP — automated coverage; live gen auth-gated). Prior: [v0.23.0](LIVE_VERIFICATION_v0.23.0.md) (MCP generation wiring proven live end-to-end — tool→worker→real Flow REST→structured-error translation; final image-write blocked by an expired session, environmental. #222 macOS fix reporter-verified e2e on Apple Silicon). Prior: [v0.22.0](LIVE_VERIFICATION_v0.22.0.md) (Tools framework — automated/CI coverage complete; credit/key-gated live feature run is a pending owner gate, see the doc) · [v0.21.0](LIVE_VERIFICATION_v0.21.0.md) (MCP server over stdio + HTTP/SSE — credit-free protocol handshake; 4 tools / 2 prompts / 3 resources confirmed on stdout) · [v0.20.1](LIVE_VERIFICATION_v0.20.1.md) · [v0.20.0](LIVE_VERIFICATION_v0.20.0.md) · [v0.19.0](LIVE_VERIFICATION_v0.19.0.md) · [v0.18.0](LIVE_VERIFICATION_v0.18.0.md) · [v0.17.0](LIVE_VERIFICATION_v0.17.0.md) · [v0.16.0](LIVE_VERIFICATION_v0.16.0.md) · [v0.13.0](LIVE_VERIFICATION_v0.13.0.md) · [v0.12.0](LIVE_VERIFICATION_v0.12.0.md) · [v0.11.0](LIVE_VERIFICATION_v0.11.0.md) · [v0.10.0](LIVE_VERIFICATION_v0.10.0.md) · [v0.9.1](LIVE_VERIFICATION_v0.9.1.md) · [v0.9.0](LIVE_VERIFICATION_v0.9.0.md) · [v0.8.1](LIVE_VERIFICATION_v0.8.1.md) · [v0.7.0](LIVE_VERIFICATION_v0.7.0.md)
126
126
  **"Where is the reverse-engineered wire protocol for a feature?"** → the `*_RECON.md` design docs: [CHARACTER_RECON](CHARACTER_RECON.md) (Flow character entity protocol), [IMAGE_UPSCALE_RECON](IMAGE_UPSCALE_RECON.md) (`/v1/flow/upsampleImage` wire). Naming convention: one `<FEATURE>_RECON.md` per reverse-engineered surface, kept as the durable spec after the feature ships.
127
127
  **"What was live-verified for the data layer (PR #58)?"** → [LIVE_VERIFICATION_data_layer](LIVE_VERIFICATION_data_layer.md) — 1 Imagen + 1 Veo credit on denon82, 6-layer ledger (file + magic + Pillow + DB rows + CLI round-trip + structlog)
128
128
  **"What was live-verified for the video-download feature (#29)?"** → [LIVE_VERIFICATION_video_download](LIVE_VERIFICATION_video_download.md)
@@ -0,0 +1,49 @@
1
+ # Live verification — v0.34.0 (2026-07-12)
2
+
3
+ The release's one user-facing feature — the `--ui-mode` / `GFLOW_CLI_UI_MODE`
4
+ ensure-required-mode gate (#299) — exercised against live Flow on the merged
5
+ `develop` tip, profile `denon82`. **Zero credits:** the production
6
+ `get_ui_driver(page, ui_mode=…)` gate was driven directly over 4 real editor
7
+ loads; generation was **never** called.
8
+
9
+ Ledger adapted for a control-plane feature (no generated artifact): exit-code /
10
+ raise outcome · structlog switch invariants · observed DOM arm transition
11
+ (before → after) · a re-runnable probe. `scratchpad/ui_mode_gate_e2e.py`.
12
+
13
+ ## What was confirmed (all four gate behaviors)
14
+
15
+ | Requested | Live mount | Switch attempt (structlog) | Outcome |
16
+ |---|---|---|---|
17
+ | `auto` | agentic | (none) | binds `agentic` (whatever renders) |
18
+ | `agentic` | classic | `ui_driver.ui_mode.attempt_force_agent` → `ui_automation.agent_mode_forced activated=True` | arm before=classic → **after=agentic**, binds `agentic` |
19
+ | `classic` | agentic | `ui_driver.ui_mode.attempt_exit_agent` → `ui_automation_video.exited_agent_mode` | arm before=agentic → **after=classic**, binds `classic` |
20
+ | `agentic` | agentic | `ui_automation.agent_mode_already_active` | idempotent no-op, binds `agentic` |
21
+ | `classic` | agentic (toggle click **timed out**: `agent_toggle_probe_failed`) | switch did not take | **`UiModeUnavailableError` — exit 28 fail-fast** (`requested=classic`), before any submission |
22
+
23
+ - **Bidirectional switch proven live** — classic→agentic (`_force_agent_mode`)
24
+ and agentic→classic (`_exit_agent_mode`), each verified by a DOM re-probe.
25
+ - **Fail-fast proven live** — when the toggle genuinely could not reach the
26
+ required arm, the gate raised exit 28 *before* submitting, spending no credits
27
+ (the money-shot: the honest terminal state fires on a real unreachable arm).
28
+ - **Inference / flag / MCP surfaces** — covered by 1529 automated tests
29
+ (flag→request threading, both CLI guards, worker payload→request); the CLI
30
+ guards (`--ui-mode classic` + `-i`, `--ui-mode` single-prompt-only) were also
31
+ smoke-verified at exit 2.
32
+
33
+ `denon82` rolled agentic on most loads (the current natively-agentic cohort
34
+ behavior), which conveniently exercised both switch directions in one run.
35
+
36
+ ## Behavior-change note (carried from the CHANGELOG)
37
+
38
+ `GFLOW_CLI_PREFER_CLASSIC` is deprecated → maps to `--ui-mode classic`, and the
39
+ old silent agentic fallback is gone: a classic-required run now aborts with exit
40
+ 28 instead of producing an agentic-cohort result. Verified above (the timed-out
41
+ case is exactly that abort).
42
+
43
+ ## Not verified this cycle
44
+
45
+ - The exit-28 abort's *auto-reload-retry* is intentionally **not implemented**
46
+ (deferred; see the design note) — today the retry is the user re-running the
47
+ command. Nothing to verify.
48
+ - Item 3a/3b (agentic driver parity) and item 2 (enforce-via-mutation) are not in
49
+ this release.
@@ -0,0 +1,45 @@
1
+ # Live Verification — v0.35.0 (2026-07-14)
2
+
3
+ The release's new user-facing features — Multimodal Reverse-Engineering, the Storyboard Creator tool, and Dynamic Token Budgeting — were exercised against live environments and verified using the 5-layer ledger.
4
+
5
+ ---
6
+
7
+ ## 1. Verified Features
8
+
9
+ ### A. Multimodal Reverse-Engineering (`gflow tools run reverse-engineer`)
10
+ * **Input:** Video Reel URL (`https://www.instagram.com/reel/Dag0kcwMrX0/`)
11
+ * **Command:** `gflow tools run reverse-engineer "https://www.instagram.com/reel/Dag0kcwMrX0/"`
12
+ * **Ledger Details:**
13
+ * **File Count:** 30 frames extracted from the video stream into `tmp/watch/Dag0kcwMrX0/frames/`.
14
+ * **Image Properties:** Verified extracted frames are standard JPEGs (JPEG magic bytes `\xff\xd8\xff`) with a 9:16 vertical aspect ratio.
15
+ * **Structlog Invariants:** Logs captured frame extraction start, frame extraction complete, selecting 5 representative frames, and calling Gemini Multimodal model.
16
+ * **Artifacts:** Created `desert_race_storyboard.md` detailing the extracted prompts, celebrity bypass strategies, and generated panels.
17
+
18
+ ### B. Storyboard Creator (`gflow tools run storyboard`)
19
+ * **Input:** Narrative Concept ("A retro cyberpunk motorcycle chase scene")
20
+ * **Command:** `gflow tools run storyboard "A retro cyberpunk motorcycle chase scene"`
21
+ * **Ledger Details:**
22
+ * **Output Structure:** The model successfully deconstructed the narrative into 4 distinct panels.
23
+ * **Continuity Check:** The panels maintain stylistic consistency (neon lights, rain-slicked asphalt, retro-futuristic aesthetic) and subject continuity across shots.
24
+
25
+ ### C. Dynamic Token Budgeting
26
+ * **Verification:** Covered by unit tests in `tests/tools/test_expander.py` checking various `max_output_chars` limits:
27
+ * 1000 chars $\to$ 512 tokens (clamped to floor)
28
+ * 4000 chars $\to$ 1000 tokens (scaled 1:4)
29
+ * 10000 chars $\to$ 2500 tokens (scaled 1:4)
30
+
31
+ ---
32
+
33
+ ## 2. Verification Ledger Summary
34
+
35
+ | Feature | Verification Method | Status | Evidence |
36
+ |---|---|---|---|
37
+ | Multimodal Reverse-Eng | Live reel run + Frame Extraction | ✅ Verified | `tmp/watch/Dag0kcwMrX0/` + `desert_race_storyboard.md` |
38
+ | Storyboard Creator | Live run (Cyberpunk Chase) | ✅ Verified | Console Output / Panel Prompts generated successfully |
39
+ | Dynamic Token Budget | Unit tests | ✅ Verified | `tests/tools/test_expander.py` |
40
+ | CLI / MCP Parity | Programmatic check | ✅ Verified | `tests/mcp/test_cli_parity.py` |
41
+
42
+ ---
43
+
44
+ ## 3. Not Verified This Cycle
45
+ * None. All new/modified user-facing capabilities in `v0.35.0` have been fully exercised and verified.
@@ -4,9 +4,47 @@
4
4
 
5
5
  ## Current release
6
6
 
7
- **v0.29.0 — alpha.** **Persistent `gflow instructions` CRUD + movie-manifest instructions + `gflow_instructions_*` MCP parity tools (#192).** CRUD over a project's Agent-Mode brief cards (add/list/enable/disable/rm/apply/toggle-mode, title/ID selection, `--ref` image-UUID attach), declarative TOML/JSON full-sync, `movie.toml` `[instructions]` / `[scene.instructions]` brief-sync, six MCP instructions tools, and a CI-enforced MCP↔CLI parity contract (`tests/mcp/test_cli_parity.py`). Also consolidates the agentic-indicator selectors onto `drivers/factory.py` and makes `/gflow:check` + the PR council CI-faithful (D0 gate). Verification: [LIVE_VERIFICATION_v0.29.0](LIVE_VERIFICATION_v0.29.0.md) (credit-free live e2e, 11-command CRUD ledger).
7
+ **v0.35.0 — alpha.** **Multimodal reverse-engineering + Storyboard tool + Dynamic Token Budgeting (#305-follow-up).** Adds `gflow tools run storyboard` to generate sequential visual prompts from single ideas, and integrates `gflow tools run reverse-engineer` with `claude-video`'s `watch.py` script for frame extraction and multimodal deconstruction of video/URL references using Gemini. Token budgets now scale dynamically with character limits. Verification: [LIVE_VERIFICATION_v0.35.0](LIVE_VERIFICATION_v0.35.0.md) (proven live storyboard expansion + frame extraction).
8
8
 
9
- **Develop (unreleased, post-v0.29.0):** *(empty — develop is the staging branch for the next release).*
9
+ **Develop (unreleased, post-v0.35.0):** *(empty — develop is the staging branch for the next release).*
10
+
11
+ <details><summary>v0.34.0 — bidirectional UI cohort switching</summary>
12
+
13
+ **v0.34.0 — alpha.** **Bidirectional UI cohort switching (#299).** Introduces `--ui-mode` / `GFLOW_CLI_UI_MODE` to force classic or agentic Flow UI cohort layouts on the fly, with verification and an exit-28 fail-fast when a required layout cannot be reached. Verification: [LIVE_VERIFICATION_v0.34.0](LIVE_VERIFICATION_v0.34.0.md).
14
+
15
+ </details>
16
+
17
+ <details><summary>v0.33.0 — anti-bot jitter and video i2v project name overrides</summary>
18
+
19
+ **v0.33.0 — alpha.** **Anti-bot jitter and video i2v project name overrides (#241, #287).** Configurable anti-bot jitter range via `--jitter` / `GFLOW_CLI_JITTER_RANGE`, lower default batch jitter (0.5–1.5 s), and `--project-name` overrides for resolving in-project assets on localized or virtualized project dropdowns. Verification: [LIVE_VERIFICATION_v0.33.0](LIVE_VERIFICATION_v0.33.0.md).
20
+
21
+ </details>
22
+
23
+ <details><summary>v0.32.1 — browser teardown hardening</summary>
24
+
25
+ **v0.32.1 — alpha.** **Browser teardown hardening and profile lock translation (#293, #283).** Fixed Chrome process leaks on aborted context teardowns, translated launch failures to `ProfileLockedError` (exit 11), and fixed picker grid off-by-one scroll bounds. Verification: [LIVE_VERIFICATION_v0.32.1](LIVE_VERIFICATION_v0.32.1.md).
26
+
27
+ </details>
28
+
29
+ <details><summary>v0.32.0 — in-project asset i2v frame selection</summary>
30
+
31
+ **v0.32.0 — alpha.** **In-project asset i2v frame selection by UUID (#287, #288).** Select existing assets for video initial/end frames by UUID in place without re-uploading, and add fail-fast for duration settings control presence. Verification: [LIVE_VERIFICATION_v0.32.0](LIVE_VERIFICATION_v0.32.0.md).
32
+
33
+ </details>
34
+
35
+ <details><summary>v0.31.0 — wrong-media attribution defenses</summary>
36
+
37
+ **v0.31.0 — alpha.** **Wrong-media attribution defenses and multi-ref picker scrolling (#281, #282).** Added pre-download verification guards against ambiguous agentic-cohort image downloads (`MediaAttributionError` exit 26), and added viewport-scrolling fallback to resolve multiple sequential `--ref` selections in the virtualized picker grid. Verification: [LIVE_VERIFICATION_v0.31.0](LIVE_VERIFICATION_v0.31.0.md).
38
+
39
+ </details>
40
+
41
+ <details><summary>v0.30.0 — agentic-cohort image path support</summary>
42
+
43
+ **v0.30.0 — alpha.** **Agentic-cohort image path support and MCP video parameters (#258).** Supported native 768x1376 still generations in the agentic cohort, added character-creation integrity guards, and mapped model/duration/count video parameters on the MCP server. Verification: [LIVE_VERIFICATION_v0.30.0](LIVE_VERIFICATION_v0.30.0.md).
44
+
45
+ </details>
46
+
47
+ <details><summary>v0.29.0 — persistent gflow instructions CRUD</summary>
10
48
 
11
49
  <details><summary>v0.28.0 — agent instructions (-i) steer agentic generation</summary>
12
50
 
@@ -184,6 +184,11 @@ Options:
184
184
  -t, --tool NAME[:k=v] Apply a prompt tool before generating, e.g.
185
185
  `creative-director:style=cinema`. Repeatable; applied
186
186
  per prompt on multi-prompt/batch. See "Prompt tools".
187
+ --ui-mode [auto|classic|agentic]
188
+ Require a Flow UI arm: classic (hard aspect
189
+ controls) / agentic (chat surface; forced by -i) /
190
+ auto (default). Aborts exit 28 if unreachable.
191
+ Single-prompt only; batch uses GFLOW_CLI_UI_MODE.
187
192
  --profile NAME Profile name (overrides default).
188
193
  ```
189
194
 
@@ -1249,6 +1254,7 @@ shell scripts can branch on the failure mode without parsing stderr.
1249
1254
  | `25` | `FlowAgentUiError` | The profile is on Flow's Agentic UI cohort and the classic media panel is unrecoverable for this operation | Use a Classic-cohort profile; see KNOWN_ISSUES on the agentic cohort |
1250
1255
  | `26` | `MediaAttributionError` | Generated media could not be reliably attributed to this request (issue #281) | Re-run; a dedicated project with fewer pre-existing assets avoids the ambiguity |
1251
1256
  | `27` | `MediaUploadRejectedError` | Flow's upload endpoint refused the input file (`uploadImage` 4xx, issue #287) | Re-encode the image (`ffmpeg -q:v 2 -map_metadata -1`), or reference the asset by its media UUID |
1257
+ | `28` | `UiModeUnavailableError` | The Flow UI arm this command required (`GFLOW_CLI_UI_MODE`, or inferred — `-i` forces agentic) couldn't be reached after a switch attempt; aborted before submitting — no credits spent (issue #299) | Retry (the cohort flaps per load); try another `--profile`; or relax `GFLOW_CLI_UI_MODE` |
1252
1258
  | `130`| SIGINT | User-interrupted (Ctrl-C) | — |
1253
1259
 
1254
1260
  **Exit code 16 — data store / migration error.** Fires when: