gflow-cli 0.35.0__tar.gz → 0.36.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 (574) hide show
  1. gflow_cli-0.36.0/.claude/commands/gflow/llm-council.md +13 -0
  2. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.env.template +14 -0
  3. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/AGENTS.md +1 -0
  4. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/CHANGELOG.md +15 -1
  5. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/PKG-INFO +1 -1
  6. gflow_cli-0.36.0/docs/CONFIGURATION.md +429 -0
  7. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/INDEX.md +2 -1
  8. gflow_cli-0.36.0/docs/LIVE_VERIFICATION_v0.36.0.md +46 -0
  9. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/PROJECT_STATUS.md +8 -1
  10. gflow_cli-0.36.0/docs/SECURITY.md +259 -0
  11. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/pyproject.toml +1 -1
  12. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/ci/check_materiality.py +16 -0
  13. gflow_cli-0.36.0/skills/llm-council/SKILL.md +72 -0
  14. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/__init__.py +1 -1
  15. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/_cli_helpers.py +22 -7
  16. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/client.py +24 -2
  17. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/ui_automation.py +41 -35
  18. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/ui_automation_video.py +91 -2
  19. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/config.py +28 -0
  20. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/json_output.py +16 -11
  21. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/tools/expander.py +59 -92
  22. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/tools/runtime.py +72 -70
  23. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_client_launch_kwargs.py +60 -0
  24. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/test_ui_automation.py +68 -1
  25. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_error_handling.py +146 -0
  26. gflow_cli-0.36.0/tests/e2e/test_entity_smuggling_e2e.py +91 -0
  27. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/scripts/test_check_materiality.py +20 -0
  28. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_json_output.py +16 -2
  29. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/tools/test_expander.py +57 -0
  30. gflow_cli-0.36.0/tests/tools/test_runtime.py +222 -0
  31. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/uv.lock +1 -1
  32. gflow_cli-0.36.0/website/docs/ARCHITECTURE.md +414 -0
  33. gflow_cli-0.36.0/website/docs/AUTHENTICATION.md +412 -0
  34. gflow_cli-0.36.0/website/docs/CHARACTER.md +506 -0
  35. gflow_cli-0.36.0/website/docs/DATA_LAYER.md +463 -0
  36. gflow_cli-0.36.0/website/docs/DEBUGGING.md +228 -0
  37. gflow_cli-0.36.0/website/docs/DEVELOPMENT.md +138 -0
  38. gflow_cli-0.36.0/website/docs/E2E_TESTING.md +272 -0
  39. gflow_cli-0.36.0/website/docs/EXTERNAL_STORAGE.md +140 -0
  40. gflow_cli-0.36.0/website/docs/INSTRUCTIONS.md +169 -0
  41. gflow_cli-0.36.0/website/docs/KNOWN_ISSUES.md +964 -0
  42. gflow_cli-0.36.0/website/docs/MCP.md +182 -0
  43. gflow_cli-0.36.0/website/docs/MOVIE.md +242 -0
  44. gflow_cli-0.36.0/website/docs/PROMPT_EXPANSION.md +247 -0
  45. gflow_cli-0.36.0/website/docs/TOOLS.md +301 -0
  46. gflow_cli-0.36.0/website/docs/USAGE.md +1386 -0
  47. gflow_cli-0.36.0/website/docs/USER_GUIDE.md +943 -0
  48. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/website/docs/agents.md +1 -1
  49. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/website/docs/installation.md +3 -3
  50. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/website/docs/quickstart.md +2 -2
  51. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/website/mkdocs.yml +21 -4
  52. gflow_cli-0.35.0/tests/tools/test_runtime.py +0 -64
  53. gflow_cli-0.35.0/website/docs/authentication.md +0 -29
  54. gflow_cli-0.35.0/website/docs/known-issues.md +0 -29
  55. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/README.md +0 -0
  56. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/active.md +0 -0
  57. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/branch-review.md +0 -0
  58. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/changelog.md +0 -0
  59. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/check.md +0 -0
  60. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/doc-review.md +0 -0
  61. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  62. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  63. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/known-issues.md +0 -0
  64. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/next.md +0 -0
  65. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/plan.md +0 -0
  66. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  67. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/predict.md +0 -0
  68. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/release.md +0 -0
  69. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/scenario.md +0 -0
  70. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/sonar.md +0 -0
  71. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.claude/commands/gflow/status.md +0 -0
  72. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.gitattributes +0 -0
  73. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.github/CODEOWNERS +0 -0
  74. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  75. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.github/copilot-instructions.md +0 -0
  76. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.github/dependabot.yml +0 -0
  77. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.github/workflows/ci.yml +0 -0
  78. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.github/workflows/external-pr-triage.yml +0 -0
  79. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.github/workflows/governance-advisory.yml +0 -0
  80. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.github/workflows/governance-benchmark.yml +0 -0
  81. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.github/workflows/main-base-guard.yml +0 -0
  82. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.github/workflows/pages.yml +0 -0
  83. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.github/workflows/release.yml +0 -0
  84. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.gitignore +0 -0
  85. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.gitleaks.toml +0 -0
  86. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.pre-commit-config.yaml +0 -0
  87. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/.secrets.baseline +0 -0
  88. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/CLAUDE.md +0 -0
  89. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/CONFIGURATION.md +0 -0
  90. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/CONTRIBUTING.md +0 -0
  91. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/DISCLAIMER.md +0 -0
  92. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/GEMINI.md +0 -0
  93. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/KNOWN_ISSUES.md +0 -0
  94. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/LICENSE +0 -0
  95. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/PLAN.md +0 -0
  96. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/README.md +0 -0
  97. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/RELEASE.md +0 -0
  98. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/ROADMAP.md +0 -0
  99. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/conftest.py +0 -0
  100. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docker-compose.yml +0 -0
  101. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/AGENT_GUIDE.md +0 -0
  102. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/AGENT_UI_E2E.md +0 -0
  103. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/AGENT_UI_RECON.md +0 -0
  104. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/ARCHITECTURE.md +0 -0
  105. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/AUTHENTICATION.md +0 -0
  106. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/CHARACTER.md +0 -0
  107. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/CHARACTER_RECON.md +0 -0
  108. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/DATA_LAYER.md +0 -0
  109. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/DEBUGGING.md +0 -0
  110. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/DEMOS.md +0 -0
  111. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/DEVELOPMENT.md +0 -0
  112. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/E2E_TESTING.md +0 -0
  113. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/EXTERNAL_STORAGE.md +0 -0
  114. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/GITHUB.md +0 -0
  115. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  116. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  117. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/INSTRUCTIONS.md +0 -0
  118. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  119. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  120. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  121. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  122. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  123. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  124. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  125. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  126. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  127. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  128. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  129. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  130. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  131. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  132. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  133. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  134. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  135. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  136. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  137. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  138. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  139. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  140. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  141. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  142. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  143. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  144. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  145. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  146. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  147. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  148. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  149. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  150. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  151. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  152. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/MCP.md +0 -0
  153. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/MOVIE.md +0 -0
  154. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/PROMPT_EXPANSION.md +0 -0
  155. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/TOOLS.md +0 -0
  156. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/USAGE.md +0 -0
  157. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/USER_GUIDE.md +0 -0
  158. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/assets/demo-split-pf.gif +0 -0
  159. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/assets/example-run.gif +0 -0
  160. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/assets/examples.webp +0 -0
  161. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/medium_tutorial.md +0 -0
  162. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/schemas/movie-handoff.schema.json +0 -0
  163. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/sonar-cleanup-tracker.md +0 -0
  164. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  165. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  166. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  167. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  168. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  169. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  170. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  171. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  172. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  173. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  174. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  175. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  176. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  177. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  178. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  179. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  180. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/examples/README.md +0 -0
  181. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/examples/batch_from_config.py +0 -0
  182. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/examples/multi_prompt_t2i.py +0 -0
  183. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/examples/sample_config.json +0 -0
  184. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/examples/sample_prompts.txt +0 -0
  185. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/examples/single_image_t2i.py +0 -0
  186. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/examples/workflow_chain.py +0 -0
  187. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/index.html +0 -0
  188. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/llms.txt +0 -0
  189. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/README.md +0 -0
  190. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/01_upload_image.json +0 -0
  191. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  192. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  193. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/04_archive_workflow.json +0 -0
  194. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/05_createProject.json +0 -0
  195. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/06_batchGenerateImages.json +0 -0
  196. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  197. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  198. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  199. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  200. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  201. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/12_create_scene.json +0 -0
  202. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  203. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/14_get_scene_workflows.json +0 -0
  204. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  205. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/ci/check_doc_links.py +0 -0
  206. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/ci/check_repo_hygiene.py +0 -0
  207. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/debug_editor.py +0 -0
  208. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/debug_gen_settings.py +0 -0
  209. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/debug_settings.py +0 -0
  210. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/_recording_client.py +0 -0
  211. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/_spike_common.py +0 -0
  212. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/active_plan.py +0 -0
  213. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  214. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  215. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  216. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  217. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  218. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  219. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/capture_locale_invariants.py +0 -0
  220. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  221. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/character_create_spike.py +0 -0
  222. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/character_create_spike_v2.py +0 -0
  223. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/dump_character_selectors.js +0 -0
  224. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/make_project.py +0 -0
  225. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/materiality_backtest.py +0 -0
  226. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/monitor_pr_38.py +0 -0
  227. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/patch_character.py +0 -0
  228. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/skillopt/README.md +0 -0
  229. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/skillopt/harness.py +0 -0
  230. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/skillopt/tasks.json +0 -0
  231. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  232. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  233. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  234. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  235. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  236. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  237. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  238. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  239. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  240. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  241. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  242. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  243. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  244. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_patch_entity.py +0 -0
  245. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/dev/spike_patchright.py +0 -0
  246. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/diag/README.md +0 -0
  247. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/diag/capture_flow_traffic.py +0 -0
  248. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/diag/memory_profile.py +0 -0
  249. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/diag/recaptcha_mint.py +0 -0
  250. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  251. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  252. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/record_demo.ps1 +0 -0
  253. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/smoke_image.py +0 -0
  254. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/smoke_real_chrome_image.py +0 -0
  255. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/smoke_video_editor.py +0 -0
  256. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/smoke_worker_style.py +0 -0
  257. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/spike_waf_camoufox.py +0 -0
  258. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/scripts/verify_chrome_auth_viability.py +0 -0
  259. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/README.md +0 -0
  260. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/changelog/SKILL.md +0 -0
  261. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/check/SKILL.md +0 -0
  262. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/doc-review/SKILL.md +0 -0
  263. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/gflow-cli/SKILL.md +0 -0
  264. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/issue-assessment/SKILL.md +0 -0
  265. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/issue-resolve/SKILL.md +0 -0
  266. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/known-issues/SKILL.md +0 -0
  267. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/plan/SKILL.md +0 -0
  268. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/pr-council-review/SKILL.md +0 -0
  269. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/predict/SKILL.md +0 -0
  270. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/release/SKILL.md +0 -0
  271. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/scenario/SKILL.md +0 -0
  272. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/sonar/SKILL.md +0 -0
  273. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/skills/status/SKILL.md +0 -0
  274. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/sonar-project.properties +0 -0
  275. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/__main__.py +0 -0
  276. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/__init__.py +0 -0
  277. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/_engine.py +0 -0
  278. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/_retry.py +0 -0
  279. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  280. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/character.py +0 -0
  281. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/dto.py +0 -0
  282. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/image.py +0 -0
  283. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/image_upscale.py +0 -0
  284. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/recaptcha.py +0 -0
  285. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/routes.py +0 -0
  286. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/scene.py +0 -0
  287. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  288. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/_common.py +0 -0
  289. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  290. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/base.py +0 -0
  291. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  292. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  293. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  294. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  295. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  296. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  297. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  298. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  299. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  300. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/api/video.py +0 -0
  301. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/auth/__init__.py +0 -0
  302. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/auth/base.py +0 -0
  303. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/auth/cookies.py +0 -0
  304. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/auth/factory.py +0 -0
  305. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  306. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  307. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/auth/strategies.py +0 -0
  308. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/auth/verification.py +0 -0
  309. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/browser_manager.py +0 -0
  310. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/chain.py +0 -0
  311. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/chain_manifest.py +0 -0
  312. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/cli.py +0 -0
  313. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/cli_character.py +0 -0
  314. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/cli_data.py +0 -0
  315. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/cli_image.py +0 -0
  316. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/cli_instructions.py +0 -0
  317. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/cli_models.py +0 -0
  318. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/cli_movie.py +0 -0
  319. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/cli_run.py +0 -0
  320. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/cli_scene.py +0 -0
  321. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/cli_tools.py +0 -0
  322. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/cli_video.py +0 -0
  323. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/composition.py +0 -0
  324. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/__init__.py +0 -0
  325. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/chain_repo.py +0 -0
  326. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  327. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  328. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  329. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  330. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  331. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  332. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  333. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  334. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  335. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/models.py +0 -0
  336. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/queries.py +0 -0
  337. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/recorder.py +0 -0
  338. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/redaction.py +0 -0
  339. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/repository.py +0 -0
  340. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/data/store.py +0 -0
  341. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/errors.py +0 -0
  342. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/exceptions.py +0 -0
  343. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/image_batch.py +0 -0
  344. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/manifest.py +0 -0
  345. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/mcp/__init__.py +0 -0
  346. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/mcp/prompts.py +0 -0
  347. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/mcp/resources.py +0 -0
  348. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/mcp/server.py +0 -0
  349. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/mcp/tools.py +0 -0
  350. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/media.py +0 -0
  351. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/movie_manifest.py +0 -0
  352. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/observability.py +0 -0
  353. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/paths.py +0 -0
  354. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/profile_store.py +0 -0
  355. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/services/__init__.py +0 -0
  356. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/services/character_create.py +0 -0
  357. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/storage.py +0 -0
  358. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/tools/__init__.py +0 -0
  359. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/tools/banned.py +0 -0
  360. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  361. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  362. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  363. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  364. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/tools/invocation.py +0 -0
  365. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/tools/loader.py +0 -0
  366. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/tools/registry.py +0 -0
  367. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/tools/spec.py +0 -0
  368. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/ui/app.py +0 -0
  369. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/ui/server.py +0 -0
  370. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/worker/daemon.py +0 -0
  371. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/src/gflow_cli/worker/queue.py +0 -0
  372. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tasks/lessons.md +0 -0
  373. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/test_assets/sample_batch.json +0 -0
  374. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/test_assets/sample_batch.tsv +0 -0
  375. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/test_assets/sample_batch_invalid.tsv +0 -0
  376. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/__init__.py +0 -0
  377. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/__init__.py +0 -0
  378. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/fixtures/character_gen_response.json +0 -0
  379. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  380. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  381. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  382. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_bearer_redaction.py +0 -0
  383. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_character.py +0 -0
  384. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_client.py +0 -0
  385. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_client_character.py +0 -0
  386. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_client_delete_characters.py +0 -0
  387. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_client_generate_character.py +0 -0
  388. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_client_image.py +0 -0
  389. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_client_patch_entity.py +0 -0
  390. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_client_scene.py +0 -0
  391. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_client_upscale.py +0 -0
  392. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_concurrency.py +0 -0
  393. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_dto.py +0 -0
  394. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_engine.py +0 -0
  395. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_image.py +0 -0
  396. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_image_dto.py +0 -0
  397. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_image_upscale.py +0 -0
  398. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  399. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_recaptcha.py +0 -0
  400. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_retry.py +0 -0
  401. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_routes.py +0 -0
  402. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_routes_character.py +0 -0
  403. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_routes_scene.py +0 -0
  404. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_sapisidhash_helper.py +0 -0
  405. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_scene_models.py +0 -0
  406. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_video.py +0 -0
  407. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/test_video_request.py +0 -0
  408. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/__init__.py +0 -0
  409. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/conftest.py +0 -0
  410. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/drivers/__init__.py +0 -0
  411. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  412. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/drivers/test_classic.py +0 -0
  413. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/drivers/test_factory.py +0 -0
  414. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
  415. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/test_base.py +0 -0
  416. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/test_bearer.py +0 -0
  417. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/test_common.py +0 -0
  418. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  419. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/test_factory.py +0 -0
  420. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/test_fingerprint.py +0 -0
  421. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/test_sapisidhash.py +0 -0
  422. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  423. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/test_transport_timeout.py +0 -0
  424. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  425. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  426. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  427. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/api/transports/test_ui_character_editor.py +0 -0
  428. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/auth/strategies/test_factory.py +0 -0
  429. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/auth/strategies/test_strategies.py +0 -0
  430. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/auth/test_cookies.py +0 -0
  431. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/auth/test_verification.py +0 -0
  432. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/__init__.py +0 -0
  433. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_auth_list.py +0 -0
  434. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_character.py +0 -0
  435. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_character_create.py +0 -0
  436. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_data.py +0 -0
  437. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_image.py +0 -0
  438. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  439. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  440. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_image_upscale.py +0 -0
  441. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_instructions.py +0 -0
  442. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_models.py +0 -0
  443. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_movie.py +0 -0
  444. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_run.py +0 -0
  445. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_scene.py +0 -0
  446. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_tools.py +0 -0
  447. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_video.py +0 -0
  448. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_cli_video_chain.py +0 -0
  449. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_helpers.py +0 -0
  450. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_movie_manifest.py +0 -0
  451. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  452. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_settings_validation.py +0 -0
  453. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  454. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/composition/test_character.py +0 -0
  455. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/composition/test_compose_prompt.py +0 -0
  456. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/composition/test_handoff.py +0 -0
  457. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/composition/test_style_variants.py +0 -0
  458. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/composition/test_style_variants_e2e.py +0 -0
  459. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/conftest.py +0 -0
  460. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/data/__init__.py +0 -0
  461. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/data/test_chain_repo.py +0 -0
  462. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/data/test_find_incomplete_character.py +0 -0
  463. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/data/test_models.py +0 -0
  464. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/data/test_packaging.py +0 -0
  465. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/data/test_recorder.py +0 -0
  466. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/data/test_recorder_character.py +0 -0
  467. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/data/test_redaction.py +0 -0
  468. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/data/test_repository.py +0 -0
  469. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/data/test_scene_persistence.py +0 -0
  470. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/data/test_settings_and_errors.py +0 -0
  471. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/data/test_store_migrations.py +0 -0
  472. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/dev/test_recording_client.py +0 -0
  473. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/__init__.py +0 -0
  474. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/conftest.py +0 -0
  475. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  476. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  477. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_chain_e2e.py +0 -0
  478. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_character_create_e2e.py +0 -0
  479. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_daemon_e2e.py +0 -0
  480. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  481. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  482. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  483. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  484. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_json_output_e2e.py +0 -0
  485. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  486. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  487. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_scene_compose_live.py +0 -0
  488. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_tools_e2e.py +0 -0
  489. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_transports_e2e.py +0 -0
  490. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  491. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  492. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/__init__.py +0 -0
  493. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/auth.feature +0 -0
  494. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/auth_login.feature +0 -0
  495. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/character_create.feature +0 -0
  496. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/character_read.feature +0 -0
  497. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/conftest.py +0 -0
  498. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/image.feature +0 -0
  499. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/image_upscale.feature +0 -0
  500. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/instructions.feature +0 -0
  501. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/locale_picker_include.feature +0 -0
  502. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/test_auth_login_steps.py +0 -0
  503. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/test_auth_steps.py +0 -0
  504. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/test_character_create_steps.py +0 -0
  505. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/test_character_read_steps.py +0 -0
  506. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/test_image_steps.py +0 -0
  507. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/test_image_upscale_steps.py +0 -0
  508. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/test_instructions_steps.py +0 -0
  509. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  510. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/test_step_collision_guard.py +0 -0
  511. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/test_video_agent_ui_steps.py +0 -0
  512. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/test_video_chain_steps.py +0 -0
  513. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/video_agent_ui.feature +0 -0
  514. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/features/video_chain.feature +0 -0
  515. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/fixtures/__init__.py +0 -0
  516. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/fixtures/seeded_catalog.py +0 -0
  517. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/image_batch/__init__.py +0 -0
  518. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/image_batch/test_image_manifest.py +0 -0
  519. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/image_batch/test_jitter_config.py +0 -0
  520. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/image_batch/test_observability_events.py +0 -0
  521. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/integration/__init__.py +0 -0
  522. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/integration/conftest.py +0 -0
  523. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/integration/constants.py +0 -0
  524. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/integration/test_storage_gcs.py +0 -0
  525. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/integration/test_storage_s3.py +0 -0
  526. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/mcp/__init__.py +0 -0
  527. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/mcp/conftest.py +0 -0
  528. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/mcp/test_cli_parity.py +0 -0
  529. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/mcp/test_server.py +0 -0
  530. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/mcp/test_stdio_transport.py +0 -0
  531. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/mcp/test_tools_helpers.py +0 -0
  532. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/mcp/test_tools_instructions.py +0 -0
  533. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/mcp/test_tools_wired.py +0 -0
  534. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  535. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  536. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  537. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/scripts/test_materiality_backtest.py +0 -0
  538. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/services/__init__.py +0 -0
  539. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/services/test_character_create_redaction.py +0 -0
  540. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/services/test_character_create_saga.py +0 -0
  541. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/services/test_character_gen_no_direct_post.py +0 -0
  542. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/smoke/__init__.py +0 -0
  543. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  544. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/smoke/test_real_flow.py +0 -0
  545. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_auth.py +0 -0
  546. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_browser_manager.py +0 -0
  547. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_chain.py +0 -0
  548. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_chain_manifest.py +0 -0
  549. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_cli_data.py +0 -0
  550. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_config.py +0 -0
  551. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_conftest_isolation.py +0 -0
  552. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_data_queries.py +0 -0
  553. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_documentation_gate.py +0 -0
  554. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_errors.py +0 -0
  555. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_errors_403.py +0 -0
  556. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_manifest.py +0 -0
  557. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_marker_registry.py +0 -0
  558. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_media.py +0 -0
  559. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_observability.py +0 -0
  560. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_paths.py +0 -0
  561. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_profile_store.py +0 -0
  562. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/test_smoke.py +0 -0
  563. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/tools/__init__.py +0 -0
  564. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/tools/test_banned.py +0 -0
  565. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/tools/test_invocation.py +0 -0
  566. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/tools/test_loader.py +0 -0
  567. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/tools/test_registry.py +0 -0
  568. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/tools/test_spec.py +0 -0
  569. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/ui/test_app.py +0 -0
  570. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/tests/worker/test_daemon.py +0 -0
  571. {gflow_cli-0.35.0 → gflow_cli-0.36.0/website}/docs/CONFIGURATION.md +0 -0
  572. {gflow_cli-0.35.0 → gflow_cli-0.36.0/website}/docs/SECURITY.md +0 -0
  573. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/website/docs/index.md +0 -0
  574. {gflow_cli-0.35.0 → gflow_cli-0.36.0}/website/docs/stylesheets/extra.css +0 -0
@@ -0,0 +1,13 @@
1
+ ---
2
+ description: Run pr-council-review (PR or branch mode) plus an external-tools corroboration layer (codex, gemini, opt-in agy) for high-stakes reviews where a same-model-family blind spot is a real risk. Tiers: small (internal only, default) / medium (+codex) / high (+codex+gemini). Wrapper around skills/llm-council/SKILL.md.
3
+ ---
4
+
5
+ # `/gflow:llm-council [PR# | --base <ref>] [--tier small|medium|high] [--include-agy]`
6
+
7
+ **Read `skills/llm-council/SKILL.md` and follow its protocol now**, treating `$ARGUMENTS` as: the PR number or `--base <ref>` (branch mode, same as `/gflow:pr-council-review` / `/gflow:branch-review`), plus `--tier <small|medium|high>` (default `small`) and the optional `--include-agy` flag.
8
+
9
+ > Do **not** call `Skill(skill="llm-council")` or `Skill(skill="pr-council-review")` — the repo's `skills/*/SKILL.md` files are plain Markdown, not registered as Skill-tool-invocable (only `.claude/commands/gflow/*` are). Invoking either errors with `Unknown skill: ...`. Read the files directly instead.
10
+
11
+ `skills/llm-council/SKILL.md` is the canonical body: tier resolution, the tool registry (fixed invocation recipes per external tool — read this before running any external tool, `codex review` in particular is a known trap), the availability-probe step, dispatch flow, and synthesis. It wraps `skills/pr-council-review/SKILL.md` unchanged for the internal dimension council.
12
+
13
+ Siblings: `/gflow:pr-council-review <N>` (internal-only, PR mode), `/gflow:branch-review` (internal-only, branch mode) — use either directly when external corroboration isn't warranted.
@@ -155,6 +155,20 @@
155
155
  # derivation (tab title / page hints) fails.
156
156
  # GFLOW_CLI_PROJECT_NAME=
157
157
 
158
+ # -----------------------------------------------------------------------------
159
+ # Debugging (opt-in only — both can expose secrets, see docs/CONFIGURATION.md)
160
+ # -----------------------------------------------------------------------------
161
+
162
+ # Captures full Playwright network traffic (requests, responses, headers,
163
+ # cookies) to this HAR file for the session. SECURITY: a HAR file contains
164
+ # live auth cookies and bearer tokens -- never share one publicly.
165
+ # GFLOW_CLI_HAR_PATH=
166
+
167
+ # Prints the real exception message + traceback for unhandled errors, to the
168
+ # console and (under --json) into the payload, instead of the generic
169
+ # placeholder. SECURITY: may leak tokens/cookies present in exception text.
170
+ # GFLOW_CLI_DEBUG_TRACEBACK=
171
+
158
172
  # -----------------------------------------------------------------------------
159
173
  # Headless Daemon (gflow serve)
160
174
  # -----------------------------------------------------------------------------
@@ -91,6 +91,7 @@ The `skills/` directory ships installable agent skill docs in plain Markdown wit
91
91
  | `plan` | [`skills/plan/SKILL.md`](skills/plan/SKILL.md) | Create a structured task-by-task implementation plan for a feature |
92
92
  | `status` | [`skills/status/SKILL.md`](skills/status/SKILL.md) | Show current plan state, progress, and next unchecked task |
93
93
  | `pr-council-review` | [`skills/pr-council-review/SKILL.md`](skills/pr-council-review/SKILL.md) | Multi-dimensional PR council review |
94
+ | `llm-council` | [`skills/llm-council/SKILL.md`](skills/llm-council/SKILL.md) | Wraps `pr-council-review` with external CLI reviewers (`codex`/`gemini`, opt-in `agy`) for high-stakes reviews |
94
95
  | `issue-assessment` | [`skills/issue-assessment/SKILL.md`](skills/issue-assessment/SKILL.md) | Triage a GitHub issue (read-only) before any fix work |
95
96
  | `issue-resolve` | [`skills/issue-resolve/SKILL.md`](skills/issue-resolve/SKILL.md) | Drive an assessed issue to a test-first fix + draft PR |
96
97
  | `check` | [`skills/check/SKILL.md`](skills/check/SKILL.md) | Quality gates (lint/format/types/tests) before every commit |
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.36.0] — 2026-07-16
11
+
12
+ ### Added
13
+
14
+ - **`GFLOW_CLI_HAR_PATH`:** captures full Playwright network traffic (requests, responses, headers, cookies) to a HAR file for the session — useful for diagnosing wire-format surprises or WAF rejections. Opt-in, env-var only; the file is hardened to `0600` on POSIX after Playwright writes it (#316).
15
+ - **`GFLOW_CLI_DEBUG_TRACEBACK`:** prints the real exception message + traceback for unhandled errors — to the console and, under `--json`, into the payload's `error.detail`/`error.traceback` fields — instead of the generic placeholder. The structured telemetry event stays SHA-256-hashed unconditionally either way; this only changes what the operator/caller sees (#316).
16
+ - **`llm-council` skill:** `/gflow:llm-council` composes with `pr-council-review`, adding `codex`/`gemini` (opt-in `agy`) as independent external reviewers alongside the internal Claude-subagent council for high-stakes reviews (#320).
17
+
18
+ ### Fixed
19
+
20
+ - **Reference entity smuggling:** a poisoned character entity (from a `gflow character create` that failed mid-workflow, e.g. the body-triptych step) could leak its `referenceEntities` into unrelated `gflow image i2i` calls in the same project workspace, even when the caller never passed `--reference-entity`. The UI-automation interceptor now strips unrequested `referenceEntities` before submit (#312).
21
+
10
22
  ## [0.35.0] — 2026-07-14
11
23
 
12
24
  ### Added
@@ -1980,7 +1992,9 @@ shell-script template that branches on these codes.
1980
1992
 
1981
1993
  First skeleton. Not functional end-to-end yet.
1982
1994
 
1983
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.34.0...HEAD
1995
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.36.0...HEAD
1996
+ [0.36.0]: https://github.com/ffroliva/gflow-cli/compare/v0.35.0...v0.36.0
1997
+ [0.35.0]: https://github.com/ffroliva/gflow-cli/compare/v0.34.0...v0.35.0
1984
1998
  [0.34.0]: https://github.com/ffroliva/gflow-cli/compare/v0.33.0...v0.34.0
1985
1999
  [0.33.0]: https://github.com/ffroliva/gflow-cli/compare/v0.32.1...v0.33.0
1986
2000
  [0.32.1]: https://github.com/ffroliva/gflow-cli/compare/v0.32.0...v0.32.1
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gflow-cli
3
- Version: 0.35.0
3
+ Version: 0.36.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
@@ -0,0 +1,429 @@
1
+ # Configuration
2
+
3
+ `gflow-cli` is configured via three layers, with a strict precedence order:
4
+
5
+ ```text
6
+ CLI flag (highest) > environment variable > .env file > built-in default (lowest)
7
+ ```
8
+
9
+ Every setting validates at startup via [`pydantic-settings`](https://docs.pydantic.dev/latest/concepts/pydantic_settings/). Bad values fail loudly with the offending key + the rule it violated, never silently.
10
+
11
+ ## Reference
12
+
13
+ Each variable in `.env.template` documented here:
14
+
15
+ ### `GFLOW_CLI_HOME`
16
+
17
+ **What:** Root directory for Playwright persistent contexts (signed-in Google sessions).
18
+ **Default:** Per-OS user-data-dir via [`platformdirs`](https://github.com/platformdirs/platformdirs):
19
+ - Windows: `%LOCALAPPDATA%\gflow-cli` (e.g. `C:\Users\<you>\AppData\Local\gflow-cli`)
20
+ - macOS: `~/Library/Application Support/gflow-cli`
21
+ - Linux (XDG): `$XDG_DATA_HOME/gflow-cli` (typically `~/.local/share/gflow-cli`)
22
+
23
+ **Override examples:**
24
+ ```bash
25
+ export GFLOW_CLI_HOME=/secure-volume/gflow-cli # POSIX
26
+ $env:GFLOW_CLI_HOME = "D:\gflow-cli" # PowerShell
27
+ ```
28
+
29
+ See [AUTHENTICATION § Session storage](AUTHENTICATION.md#session-storage) for the full layout.
30
+ `$GFLOW_CLI_HOME` also holds `config.toml`, the SQLite catalog (`gflow.db`), and — if you
31
+ create it — a `tools/` directory of user-authored "My Tools" TOMLs
32
+ (`<GFLOW_CLI_HOME>/tools/*.toml`, auto-loaded; see [TOOLS.md § My Tools](TOOLS.md)).
33
+
34
+ ### `GFLOW_CLI_PROFILE`
35
+
36
+ **What:** Default profile name used when `--profile` isn't passed on the CLI.
37
+ **Default:** Resolved from `$GFLOW_CLI_HOME/config.toml` → auto-pick if exactly one profile → otherwise prompts the user to choose.
38
+ **CLI override:** `--profile <name>`
39
+
40
+ A profile maps to a directory `$GFLOW_CLI_HOME/profile_<name>/`. Profiles are isolated — different Google accounts, different cookies, different Flow project histories. See [AUTHENTICATION § Multiple accounts](AUTHENTICATION.md#multiple-accounts).
41
+
42
+ #### Default-profile resolution chain
43
+
44
+ 1. CLI flag `--profile <name>` (highest)
45
+ 2. Env var `GFLOW_CLI_PROFILE`
46
+ 3. `$GFLOW_CLI_HOME/config.toml` → `default_profile = "..."` (set by `gflow auth use <name>`)
47
+ 4. Auto: if exactly one `profile_*` dir exists, it's the de-facto default
48
+ 5. Fail with the list of available profiles (lowest)
49
+
50
+ ### `GFLOW_CLI_OUTPUT_DIR`
51
+
52
+ **What:** Root directory where downloaded assets land. Subfolders are created per kind/date.
53
+ **Default:** Per-OS Downloads dir + `/gflow-cli`:
54
+ - Windows: `%USERPROFILE%\Downloads\gflow-cli`
55
+ - macOS: `~/Downloads/gflow-cli`
56
+ - Linux (XDG): `$XDG_DOWNLOAD_DIR/gflow-cli` (falls back to `~/Downloads/gflow-cli`)
57
+
58
+ **CLI override:** command-specific output flags such as `--out` for image
59
+ commands and `--out-dir` for video commands.
60
+
61
+ If [`GFLOW_CLI_STORAGE_URI`](#gflow_cli_storage_uri) is set, generated asset
62
+ bytes are uploaded to the configured cloud bucket instead of this local output
63
+ root. `GFLOW_CLI_OUTPUT_DIR` still matters for local mode and for deriving the
64
+ default image/video key layout. See [EXTERNAL_STORAGE.md](EXTERNAL_STORAGE.md).
65
+
66
+ ### `GFLOW_CLI_STORAGE_URI`
67
+
68
+ **What:** Optional cloud storage URI prefix for generated assets.
69
+ **Values:** `gs://bucket/prefix/` for Google Cloud Storage or
70
+ `s3://bucket/prefix/` for S3-compatible storage, including MinIO.
71
+ **Default:** unset, which means local filesystem output.
72
+ **Requires:** install the matching optional extra:
73
+
74
+ ```bash
75
+ uv tool install "gflow-cli[gcs]"
76
+ uv tool install "gflow-cli[s3]"
77
+ ```
78
+
79
+ When set, `gflow-cli` uploads generated assets to the cloud prefix instead of
80
+ saving local asset copies. It does not dual-write local + cloud copies. The
81
+ local SQLite catalog still records the operation and stores `storage_provider`
82
+ plus `cloud_uri` for each uploaded asset.
83
+
84
+ Examples:
85
+
86
+ ```bash
87
+ # Choose one:
88
+ export GFLOW_CLI_STORAGE_URI=gs://my-gcs-bucket/gflow/
89
+ export GFLOW_CLI_STORAGE_URI=s3://my-s3-bucket/gflow/
90
+ export GFLOW_CLI_STORAGE_URI=s3://gflow-test/dev/ # MinIO local dev
91
+ ```
92
+
93
+ S3 and MinIO use the standard AWS SDK environment variables:
94
+
95
+ ```bash
96
+ export AWS_ACCESS_KEY_ID=minioadmin
97
+ export AWS_SECRET_ACCESS_KEY=minioadmin
98
+ export AWS_ENDPOINT_URL=http://localhost:9000 # omit for real AWS
99
+ export AWS_DEFAULT_REGION=us-east-1
100
+ ```
101
+
102
+ GCS uses Application Default Credentials, a service-account file through
103
+ `GOOGLE_APPLICATION_CREDENTIALS`, or `STORAGE_EMULATOR_HOST` for local emulator
104
+ runs.
105
+
106
+ Deep setup, verification, and security notes live in
107
+ [EXTERNAL_STORAGE.md](EXTERNAL_STORAGE.md).
108
+
109
+ ### `GFLOW_CLI_PROVIDER`
110
+
111
+ **What:** Backend to use for generations.
112
+ **Values:** `flow` (default — reverse-engineered, requires Ultra/Pro) | `official` (planned v0.5+ — Phase 5 official Veo SDK swap, will require a Gemini API key).
113
+ **Default:** `flow`
114
+ **CLI override:** none yet — set the env var to switch backends once `official` is wired.
115
+
116
+ ### `GFLOW_CLI_GEMINI_API_KEY`
117
+
118
+ **What:** Public Gemini API key. Used by the **`creative-director`** prompt tool
119
+ (`--tool creative-director` / `gflow tools run creative-director`, see
120
+ [TOOLS.md](TOOLS.md) and [PROMPT_EXPANSION.md](PROMPT_EXPANSION.md)) and, in future, by the
121
+ official Veo 3.1 SDK.
122
+ **Required when:** you apply the `creative-director` tool (via `--tool` on any generation
123
+ command, or `gflow tools run`), or `GFLOW_CLI_PROVIDER=official`.
124
+ **Default:** unset
125
+ **Behavior when unset:** the tool is a no-op — gflow logs an `INFO` notice and generates
126
+ from your original prompt (it never fails the run). API errors (rate limit, network) fall
127
+ back the same way after a short exponential-backoff retry, bounded by an overall ~60s
128
+ wall-clock budget per call.
129
+ **Get one:** <https://aistudio.google.com/apikey>
130
+
131
+ ### `GFLOW_CLI_GEMINI_MODEL`
132
+
133
+ **What:** Gemini model used by the `creative-director` prompt tool.
134
+ **Default:** `gemini-2.5-flash`
135
+ **Note:** Override to select a newer Flash revision without upgrading gflow-cli, e.g.
136
+ `GFLOW_CLI_GEMINI_MODEL=gemini-2.5-flash-lite`.
137
+
138
+ ### `GFLOW_CLI_AUTH_LOGIN_TIMEOUT`
139
+
140
+ **What:** Maximum time (seconds) that `gflow auth login` waits for the user to complete the Google sign-in flow in the browser.
141
+ **Default:** `600` (10 minutes)
142
+ **Range:** 1–86400
143
+ **Exit code on expiry:** 12 (`AuthLoginTimeoutError`)
144
+ **Note:** Useful for CI/CD or agent pipelines where a hung login should surface as a definite failure rather than blocking indefinitely. Set to a large value (e.g. `3600`) for interactive sessions over slow connections.
145
+
146
+ ```bash
147
+ GFLOW_CLI_AUTH_LOGIN_TIMEOUT=120 gflow auth login # abort after 2 minutes
148
+ ```
149
+
150
+ ### `GFLOW_CLI_TIMEOUT_SECONDS`
151
+
152
+ **What:** Per-request HTTP timeout. Veo videos can take 60–180 s each.
153
+ **Default:** `600`
154
+ **Note:** This is a single-request ceiling; the *batch* timeout you experience is sum of all per-clip waits.
155
+
156
+ ### `GFLOW_CLI_JITTER_RANGE`
157
+
158
+ **What:** Anti-bot pause between prompt submissions in multi-prompt image runs (`gflow image batch`, `gflow image t2i --prompts-file` / `--stdin` / multiple positional prompts, and `gflow run` image batches). Spaces out the *submission clicks* only — generations still run in parallel inside Flow.
159
+ **Values:** `MIN-MAX` seconds (e.g. `10-30`), a single number `N` (uniform `0`–`N`, mirrors `video chain --jitter`), or `0` to disable.
160
+ **Default:** `0.5-1.5` — deliberately small so runs don't waste wall-clock. **Widen (e.g. `10-30`) when runs start hitting WAF 403s**, then dial back once the score decays.
161
+ **CLI override:** `--jitter` on `image t2i` and `image batch` (flag beats env).
162
+ **Why:** Flow's WAF reacts to cumulative submission cadence — see [DEBUGGING § WAF cadence](DEBUGGING.md#waf-cadence).
163
+
164
+ ### `GFLOW_CLI_LOG_LEVEL`
165
+
166
+ **What:** Logging verbosity.
167
+ **Values:** `DEBUG` | `INFO` | `WARNING` | `ERROR`
168
+ **Default:** `INFO`
169
+ **CLI override:** `-v` / `--verbose` flag flips to `DEBUG`.
170
+
171
+ ### `GFLOW_CLI_LOG_FORMAT`
172
+
173
+ **What:** Output format for log lines.
174
+ **Values:**
175
+ - `auto` (default) — text on TTY, JSON when stdout is piped/redirected
176
+ - `text` — always pretty (Rich-styled, colours)
177
+ - `json` — always machine-readable (one JSON object per line)
178
+
179
+ ### `GFLOW_CLI_CONCURRENCY`
180
+
181
+ **What:** Per-worker Playwright Page-pool size for batch runs. `FlowApiClient.__aenter__` opens N Pages inside one shared persistent BrowserContext; operations check out a Page via an `asyncio.Queue` (FIFO, bounded by `maxsize=N`). `gflow video batch` fans out manifest entries via `asyncio.gather`.
182
+ **Values:** `1`–`16`
183
+ **Default:** `1` (no fan-out)
184
+ **Recommended starting point:** `4`. Each Page costs ~30–60 MiB of memory on Chromium headless; don't exceed `8` without measuring resident-set size. Cookies and storage state are shared at Context level, so every Page inherits the signed-in profile for free.
185
+ **Shipped in:** v0.4.0a2.
186
+
187
+ ### `GFLOW_CLI_DB_PATH`
188
+
189
+ **What:** Override the path to the local SQLite operations database.
190
+ **Default:** `<GFLOW_CLI_HOME>/gflow.db`
191
+ **Override examples:**
192
+ ```bash
193
+ export GFLOW_CLI_DB_PATH=/secure-volume/gflow.db # POSIX
194
+ $env:GFLOW_CLI_DB_PATH = "D:\gflow-data\gflow.db" # PowerShell
195
+ ```
196
+
197
+ Use this when you want the DB on a different volume, outside `GFLOW_CLI_HOME`, or when running multiple isolated environments that share the same home dir.
198
+
199
+ ### `GFLOW_CLI_HISTORY_PROMPTS`
200
+
201
+ **What:** Controls how prompt text is persisted in the local database.
202
+ **Values:**
203
+ - `store` (default) — the full prompt text is saved to the database alongside the operation record.
204
+ - `redacted` — only the SHA-256 hash of the prompt is stored; the prompt text itself is never written to disk. Use this when prompts may contain sensitive content.
205
+
206
+ **Default:** `store`
207
+
208
+ **Tool provenance:** when a prompt tool (e.g. `creative-director`) rewrites a prompt, `store`
209
+ mode also records the submitted `expanded_prompt` and a full `metadata_json.tool` descriptor;
210
+ `redacted` withholds the expanded prompt and reduces the descriptor to
211
+ `{name, version, params_hash, config_hash}`. See [PROMPT_EXPANSION.md](PROMPT_EXPANSION.md).
212
+
213
+ ```bash
214
+ GFLOW_CLI_HISTORY_PROMPTS=redacted gflow image t2i "confidential brief"
215
+ ```
216
+
217
+ ### `GFLOW_CLI_HEADLESS`
218
+
219
+ **What:** Run Playwright in headless mode for non-`auth login` commands.
220
+ **Values:** `true` | `false`
221
+ **Default:** `true`
222
+ **When to flip to `false`:** if reCAPTCHA Enterprise refuses to mint tokens (Google's bot-detection sometimes refuses headless Chromium but accepts a visible window). Set to `false` and re-run; the browser will appear during generation but the session is still reused from the persistent profile.
223
+
224
+ ### `GFLOW_CLI_BROWSER_ENGINE`
225
+
226
+ **What:** Selects the browser-automation engine backing the Playwright API.
227
+ **Values:** `playwright` | `patchright`
228
+ **Default:** `playwright`
229
+ **What `patchright` is:** an opt-in, drop-in patched Playwright (Chromium) that runs page evaluations in an isolated execution context to avoid the `Runtime.enable` CDP leak, for stronger reCAPTCHA-Enterprise evasion on the **headed** path. It is **not** a headless unlock — Google still detects headless Chromium regardless of engine.
230
+ **Install:** `pip install 'gflow-cli[patchright]'` (or `pip install patchright`). Selecting `patchright` without it installed fails fast with exit code 24 and a pip remediation hint. When using system Chrome (the gflow default, `channel=chrome`) you do **not** need `patchright install chromium`.
231
+ **Reverting:** unset the variable (or set `playwright`) — the default path is byte-identical to a build without this feature, with no profile migration.
232
+ **Security note:** the `patchright` extra ships a *patched Chromium driver* that handles your live Google session cookies; it is exact-pinned and treated as a security-review-required dependency. See [SECURITY.md § Dependencies](SECURITY.md).
233
+
234
+ ### `GFLOW_CLI_UI_MODE`
235
+
236
+ **What:** Which Flow UI arm to use for generation. Flow serves a **classic** composer (hard crop/aspect controls) or an **agentic** chat cohort, server-assigned and flapping per page load ([#299](https://github.com/ffroliva/gflow-cli/issues/299)).
237
+ **Values:**
238
+ - `auto` (default) — bind whatever the composer renders.
239
+ - `classic` — require the classic composer (hard aspect controls). gflow switches to it, re-probes to verify, and if the arm is still agentic **aborts before submitting** with `UiModeUnavailableError` (**exit 28**) — no credits spent.
240
+ - `agentic` — require the agentic chat surface (needed for `-i` agent instructions). gflow switches to it, verifies, and aborts (exit 28) if it can't be reached.
241
+ **Default:** `auto`
242
+ **How it works:** before each generation, gflow determines the required arm, clicks the classic↔agentic toggle as a **prerequisite**, **verifies** with a DOM re-probe, then binds — or fails fast. The required arm is also **inferred**: `-i` instructions are agentic-only, so they force `agentic` automatically (and `--ui-mode classic` + `-i` is a hard conflict, not a silent drop).
243
+ **Why `classic`:** the agentic cohort treats aspect ratio as a soft prompt hint (portrait 9:16 can come back landscape). `classic` enforces it or fails fast instead of silently degrading.
244
+ **Retry note:** the cohort flaps per load, so an exit-28 abort is **retryable** — a re-run often lands the wanted arm. A server experiment can pin the arm, in which case it's unreachable from the client (the abort still saves the credits).
245
+ **Supersedes:** `GFLOW_CLI_PREFER_CLASSIC` and `GFLOW_CLI_FORCE_AGENT_UI` (below).
246
+
247
+ ### `GFLOW_CLI_PREFER_CLASSIC` *(deprecated — use `GFLOW_CLI_UI_MODE=classic`)*
248
+
249
+ **Deprecated** in favor of [`GFLOW_CLI_UI_MODE`](#gflow_cli_ui_mode). `true` now maps to `ui_mode=classic` (emits a `DeprecationWarning`). **Behavior change:** the old silent fallback to agentic when the toggle was unavailable is gone — a classic-required run now **aborts with exit 28** instead of producing an agentic-cohort result. `GFLOW_CLI_UI_MODE` (and `--ui-mode`) take precedence when both are set.
250
+
251
+ ### `GFLOW_CLI_FORCE_AGENT_UI` *(deprecated — use `GFLOW_CLI_UI_MODE=agentic`)*
252
+
253
+ **Deprecated** in favor of [`GFLOW_CLI_UI_MODE`](#gflow_cli_ui_mode). `true` maps to `ui_mode=agentic` (emits a `DeprecationWarning`). `-i` instructions already force agentic automatically, so this is rarely needed explicitly.
254
+
255
+ ### `GFLOW_CLI_LOCALE`
256
+
257
+ **What:** BCP-47 locale tag passed to Playwright's `launch_persistent_context(locale=...)` — controls the `Accept-Language` HTTP header only.
258
+ **Values:** any BCP-47 tag (e.g. `en-US`, `pt-BR`, `es-ES`, `ja-JP`)
259
+ **Default:** `en-US`
260
+ **Shipped in:** post-v0.8.1 develop (PR #51).
261
+ **When to set it:** capturing locale-invariant DOM via `scripts/dev/capture_locale_invariants.py`, or live-verifying a generation under a non-EN account language.
262
+ **Important:** Chrome's *UI* language is independently forced to `en-US` via the `--lang=en-US` launch arg (so Flow keeps serving `/fx/tools/flow/` and the editor's localized text selectors keep working). This env var only affects request headers — not the editor UI you see. See [KNOWN_ISSUES § issue #24](../KNOWN_ISSUES.md) for the path to dropping `--lang=en-US`.
263
+
264
+ ### `GFLOW_CLI_HAR_PATH`
265
+
266
+ **What:** Captures full Playwright network traffic (requests, responses, headers, cookies) to a HAR file for the session — useful for diagnosing wire-format surprises or WAF rejections.
267
+ **Default:** unset (no capture).
268
+ **Override examples:**
269
+ ```bash
270
+ export GFLOW_CLI_HAR_PATH=/tmp/gflow-debug/session.har # POSIX
271
+ $env:GFLOW_CLI_HAR_PATH = "C:\gflow-debug\session.har" # PowerShell
272
+ ```
273
+
274
+ **SECURITY:** a HAR file contains live auth cookies and bearer tokens — never share one publicly. The file is chmod'd `0o600` on POSIX after Playwright writes it (best-effort; no-op on Windows). Two concurrent `gflow` processes pointed at the same path will overwrite each other's HAR (last-writer-wins, no error) — use a distinct path per run if running more than one profile/command at once.
275
+
276
+ ### `GFLOW_CLI_DEBUG_TRACEBACK`
277
+
278
+ **What:** Prints the real exception message + full traceback for unhandled (non-typed) errors — to the console, and under `--json`, into the payload's `error.detail` / `error.traceback` fields — instead of the default generic "Unexpected error" placeholder. This CLI's structured telemetry event is always SHA-256-hashed regardless of this setting; this flag only changes what you see, not what's logged.
279
+ **Values:** `true` | `false`
280
+ **Default:** `false`
281
+ **Override examples:**
282
+ ```bash
283
+ GFLOW_CLI_DEBUG_TRACEBACK=1 gflow image t2i "a cat" --profile dev # POSIX
284
+ $env:GFLOW_CLI_DEBUG_TRACEBACK = "1" # PowerShell
285
+ ```
286
+
287
+ **SECURITY:** the real error text may contain tokens/cookies present in exception state — for local debugging only. `--json` output under this flag is a materially higher-risk surface than the interactive console: a human watches the console live and can react to the yellow warning, but `--json` output is designed to be piped into CI logs, log aggregators, and webhooks that persist or forward it unreviewed. **Never pipe `--json` output under this flag to a shared or persistent system without redacting it first.**
288
+
289
+ ## Output paths
290
+
291
+ The default output scheme keeps generated assets sortable, dated, and grouped by job:
292
+
293
+ ```text
294
+ $GFLOW_CLI_OUTPUT_DIR/
295
+ ├── images/<YYYY-MM-DD>/<media_name>_<index>.png
296
+ └── videos/<YYYY-MM-DD>/<media_name>.mp4
297
+ ```
298
+
299
+ `<media_name>` is the per-asset UUID Flow assigns; `<index>` is the 1-based shot number for multi-image runs (`-n 2..4`).
300
+
301
+ With `GFLOW_CLI_STORAGE_URI` set, the same default layout is used under the
302
+ configured bucket prefix, and `gflow data media <media_id>` reports `cloud_uri_N`
303
+ rows instead of local paths.
304
+
305
+ ### Per-call override
306
+
307
+ ```bash
308
+ # Image: --out is a directory; files written flat (no date subdir)
309
+ gflow image t2i "..." --out ./shots/
310
+
311
+ # Video: --out-dir is a directory for the generated mp4
312
+ gflow video t2v "..." --out-dir ./out/
313
+
314
+ # Video batch: --out-dir overrides the videos/<date>/ root
315
+ gflow video batch ./manifest.tsv --out-dir ./batch-out/
316
+
317
+ # Video chain: --out-dir holds the per-link mp4s + seed frames
318
+ gflow video chain ./story.jsonl --out-dir ./chain-out/ --yes
319
+ ```
320
+
321
+ For images, `--out DIR` writes flat as `<DIR>/<media_name>_<n>.png` — file paths are not accepted (rename after the fact if needed). For videos, `--out-dir DIR` controls the local output directory.
322
+
323
+ ## `gflow video chain` flags
324
+
325
+ `gflow video chain` (last-frame I2V chaining — see
326
+ [USAGE § gflow video chain](USAGE.md#gflow-video-chain)) is configured entirely
327
+ by command-line flags; it adds **no new environment variables**. It reuses
328
+ `GFLOW_CLI_OUTPUT_DIR` (default output root), `GFLOW_CLI_PROFILE`,
329
+ `GFLOW_CLI_DB_PATH` (chain links are recorded for `--resume-from`), and
330
+ `GFLOW_CLI_TIMEOUT_SECONDS` (per-link generation ceiling — the chain waits for
331
+ each link in turn, so total wallclock is the sum of all link waits).
332
+
333
+ | Flag | Default | Notes |
334
+ |---|---|---|
335
+ | `--model` | `veo-lite` | `veo-lite` / `veo-fast` / `veo-quality` / `veo-lite-lp`. `omni-flash` is rejected — it can't seed i2v links (issue #125). |
336
+ | `--max-links N` | unset | Cap link count; exit 11 (`ConfigurationError`) if the manifest has more. A spend guardrail. |
337
+ | `-y` / `--yes` | off | Skip the per-credit cost confirmation prompt. |
338
+ | `--dry-run` | off | Print the plan + credit estimate and spend nothing. |
339
+ | `--resume-from CHAIN_ID` | unset | Resume a prior chain by its id; already-paid links are skipped (not re-billed). |
340
+ | `--jitter F` | `0.0` | Random `0..F` second pause **between** links (anti-bot cadence; never before link 0). |
341
+ | `--seed-offset MS` | `0` | Extract the seed frame this many ms before EOF (fade-to-black guard). |
342
+ | `--aspect` | `9:16` | `9:16` / `16:9`. Applied uniformly to every link (continuity requirement). |
343
+ | `--out-dir DIR` | output root | Directory for the link mp4s + `linkN_lastframe.jpg` seed frames. |
344
+ | `--profile NAME` | default profile | Per-subcommand profile override. |
345
+ | `--json` | off | Emit a machine-readable JSON result. |
346
+
347
+ The last-frame extractor needs the **`chain` optional extra** (PyAV — no system
348
+ ffmpeg required):
349
+
350
+ ```bash
351
+ pip install 'gflow-cli[chain]'
352
+ # or: uv tool install 'gflow-cli[chain]'
353
+ ```
354
+
355
+ Per-call local output flags are not intended as bucket-prefix controls. For
356
+ predictable external storage keys, set the bucket prefix in
357
+ `GFLOW_CLI_STORAGE_URI` and leave per-command output flags unset.
358
+
359
+ ## .env loading
360
+
361
+ `gflow-cli` (via [`pydantic-settings`](https://docs.pydantic.dev/latest/concepts/pydantic_settings/)) loads **two** `.env` files at startup: `$GFLOW_CLI_HOME/.env` (machine-wide defaults — useful for processes whose working directory is arbitrary, like the MCP server or a worker service) and a `.env` in the **current working directory** (project-local overrides). On conflicting keys the CWD file wins.
362
+
363
+ The home used for the first file is resolved from the `GFLOW_CLI_HOME` env var, else a `GFLOW_CLI_HOME` entry in the CWD `.env`, else the platform default — the same home `Settings.home` reports. (By construction the home `.env` cannot relocate home itself; set the env var or the CWD `.env` instead.)
364
+
365
+ Variables already set in the actual environment always beat both `.env` files. Anything explicitly passed on the CLI beats everything else.
366
+
367
+ Use [`.env.template`](../.env.template) as your starting point:
368
+
369
+ ```bash
370
+ cp .env.template .env
371
+ $EDITOR .env
372
+ ```
373
+
374
+ ## Worked examples
375
+
376
+ ### "I want all output on a different drive"
377
+
378
+ ```bash
379
+ # .env in CWD or $GFLOW_CLI_HOME
380
+ GFLOW_CLI_OUTPUT_DIR=/mnt/big-disk/flow-output
381
+ ```
382
+
383
+ ### "I want generated assets in S3 or GCS"
384
+
385
+ ```bash
386
+ GFLOW_CLI_STORAGE_URI=s3://my-bucket/gflow/ \
387
+ AWS_ACCESS_KEY_ID=... \
388
+ AWS_SECRET_ACCESS_KEY=... \
389
+ AWS_DEFAULT_REGION=us-east-1 \
390
+ gflow image t2i "product photo on a white sweep"
391
+ ```
392
+
393
+ See [EXTERNAL_STORAGE.md](EXTERNAL_STORAGE.md) for MinIO and GCS examples.
394
+
395
+ ### "I'm running in CI — I want JSON logs and a strict timeout"
396
+
397
+ ```bash
398
+ GFLOW_CLI_LOG_FORMAT=json \
399
+ GFLOW_CLI_TIMEOUT_SECONDS=300 \
400
+ gflow video batch ./manifest.tsv
401
+ ```
402
+
403
+ ### "I want to test against the official Veo SDK"
404
+
405
+ ```bash
406
+ GFLOW_CLI_PROVIDER=official \
407
+ GFLOW_CLI_GEMINI_API_KEY=AIza... \
408
+ gflow video t2v "test"
409
+ ```
410
+
411
+ (planned v0.5+ — current scaffold accepts but ignores `GFLOW_CLI_PROVIDER=official`.)
412
+
413
+ ### "I want a sandbox profile that doesn't pollute my main one"
414
+
415
+ ```bash
416
+ gflow auth login --profile experiments
417
+ gflow image t2i "test idea" --profile experiments
418
+ # sandbox dir lives at $GFLOW_CLI_HOME/profile_experiments/
419
+ ```
420
+
421
+ ## Troubleshooting
422
+
423
+ | Symptom | Likely cause | Fix |
424
+ |---|---|---|
425
+ | `ValidationError: GFLOW_CLI_TIMEOUT_SECONDS must be a positive integer` | Bad `.env` value | Set to a number ≥ 1 |
426
+ | `FileNotFoundError: $GFLOW_CLI_HOME/profile_default not found` | First run, no auth yet | `gflow auth login` |
427
+ | `AuthExpiredError` | Cookies expired or revoked | `gflow auth login --profile <name>` |
428
+ | Output files don't appear where I expect | Flag > env > .env > default — check actual resolved path | `gflow image t2i ... --verbose` shows the resolved output path |
429
+ | Two concurrent calls fail with "Chromium profile locked" | Same profile used twice | Use `--profile other` for the second call |
@@ -66,6 +66,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
66
66
  | `/gflow:scenario <feature>` | 12-dimension edge-case explorer → severity-ranked scenario table + BDD skeleton | After predict GO/CAUTION; before `/gflow:plan` |
67
67
  | `/gflow:pr-council-review [PR#]` | Multi-dimensional council review of an open PR (5 baseline + adaptive dimensions) | Before merging any non-trivial PR; mandatory for auth/transport/data changes |
68
68
  | `/gflow:branch-review` | Same council review run against the current local feature branch (no PR needed) | Pre-PR self-audit; after predict/scenario on a high-stakes branch |
69
+ | `/gflow:llm-council [PR#\|--base <ref>] [--tier small\|medium\|high]` | Wraps `pr-council-review` with external CLI reviewers (`codex`/`gemini`, opt-in `agy`) for cross-model corroboration | High-stakes reviews where a same-model-family blind spot is a real risk |
69
70
  | `/gflow:doc-review` | Systematic council-driven audit of documentation completeness and drift | Before cutting a release; after major documentation changes |
70
71
 
71
72
  **Governance:** commands are executable docs — they decay like any doc. When a phase advances or a file path changes, update the relevant command in the same commit. `/gflow:release` includes a staleness review step.
@@ -122,7 +123,7 @@ Slash commands for Claude Code, stored in `.claude/commands/gflow/`. All prefixe
122
123
  **"A gflow command hangs / fails — where do I start?"** → [DEBUGGING § Quick reference](DEBUGGING.md#quick-reference)
123
124
  **"Flow's UI broke a selector — how do I diagnose it?"** → [DEBUGGING § Inspecting Flow's live UI](DEBUGGING.md#inspecting-flows-live-ui)
124
125
  **"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.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
+ **What was actually live-verified for the latest release?** → latest: [LIVE_VERIFICATION_v0.36.0](LIVE_VERIFICATION_v0.36.0.md) (**#316 diagnostic tooling live-verified against real Flow traffic** — `GFLOW_CLI_HAR_PATH` captured a real 54-entry HAR [real Flow domains, 34× 200s, and a genuine 401 the tool exists to diagnose]; `GFLOW_CLI_DEBUG_TRACEBACK`'s typed-error scoping confirmed live [console output identical with/without the flag on a `GFlowError`]; unhandled-path behavior covered by 6 new tests (30 total across both files) + SDD task review; #312 reference-entity-smuggling fix covered by its own dedicated e2e test). Prior: [v0.35.0](LIVE_VERIFICATION_v0.35.0.md) (**#305-follow-up multimodal reverse-engineering & storyboard tool proven live e2e** — `gflow tools run storyboard` successfully deconstructed a cyberpunk scene into a cohesive 4-panel sequence; `reverse-engineer` tool extracts frames from video streams/URLs using `claude-video`'s `watch.py` and produces structured prompt components using Gemini multimodal models; dynamic token budgeting and strict Pyright types verified via test suite). Prior: [v0.34.0](LIVE_VERIFICATION_v0.34.0.md) (**#299 `--ui-mode` gate proven live, ZERO credits** — drove `get_ui_driver` directly over 4 real editor loads, never generated: bidirectional switch works [classic→agentic via `_force_agent_mode`, agentic→classic via `_exit_agent_mode`, each DOM-reverified], `agentic`-when-already-agentic is idempotent, and a timed-out toggle → **exit-28 fail-fast before submission**; deprecation behavior-change [`prefer_classic`→exit 28] confirmed). Prior: [v0.33.0](LIVE_VERIFICATION_v0.33.0.md) (**#287-follow-up picker fix proven live on the original repro** — the v0.32.1-failing `i2v <uuid> --project <crowded>` command now exits 0 with a real 3.0 MB `ftyp` mp4, `frame_ref_attached` + `video_saved`, zero uploads; **#241 jitter live-verified on both paths** — flag `--jitter 4-6` → `batch_jitter_sleep seconds=4.98`, and the new 0.5–1.5 s default → `seconds=1.47`, each firing exactly once between two t2i submissions; environment note: the denon82 cohort is now natively agentic and round-2 generations hit the pre-existing #281 `MediaAttributionError`, not a regression). Prior: [v0.32.1](LIVE_VERIFICATION_v0.32.1.md) (**#293 teardown fix live-verified credit-free** — error-path aborts leave ZERO chrome.exe holding the profile [3× leak reproduced pre-fix same day]; force-close fallback + ProfileLockedError translation unit-pinned; #283 wave logic fixes mock-verified to exact call counts). Prior: [v0.32.0](LIVE_VERIFICATION_v0.32.0.md) (**#287 UUID i2v frames proven live e2e** — an in-project asset selected by media UUID in the frame-slot dialog [frame_ref_attached, startImage bound on the wire, ZERO upload events] produced a real 720×1280 interpolation, resolving the #237 negative prior; foreign UUID → exit 9 pre-generation with screenshot; **#288 duration fail-fast proven live** — exit 23 pre-submit saved a 10-credit generation, and the debug screenshot confirmed the duration control is ABSENT from the cohort's settings popover [locale hypothesis refuted]; upload-400 exit-27 repro deferred-with-reason — the original rejected JPEG no longer exists). Prior: [v0.31.0](LIVE_VERIFICATION_v0.31.0.md) (**#281 wrong-media defenses live-verified in BOTH directions, credit-free** — correct attribution downloads with real wire metadata [seed, 768×1376]; the incident-class lazy-render ambiguity reproduced live and hard-stopped with `MediaAttributionError` exit 26 naming every candidate UUID, no file written; **#282 two-UUID-ref i2i proven e2e** — both freshly generated portrait UUIDs picker-selected into one scene with both canonical identities visually transferred). Prior: [v0.30.0](LIVE_VERIFICATION_v0.30.0.md) (**agentic-cohort image path + both fixes live-verified credit-free** — native 768×1376 stills, i2i-chain + canonical-ref identity hold; the character-create `DataIntegrityError` and the `prefer_classic` WARNING were observed live then fixed [recorder idempotent + INFO log]; MCP video-param feature deferred-with-reason on Veo credits, per the stills-only goal). Prior: [v0.29.0](LIVE_VERIFICATION_v0.29.0.md) (**persistent `gflow instructions` CRUD proven live e2e GREEN, credit-free** — 11-command sequence on a fresh project: add incl. `--ref <image-UUID>` attach, list/enable/disable, master toggle both ways, TOML `apply` destructive full-sync with `enabled=false` honored, `rm` with server card-id preserved across mutations; movie brief-sync code-path-verified via the same primitives, deferred-with-reason on credits; MCP `gflow_instructions_*` tools are thin adapters over the live-verified primitives). Prior: [v0.28.0](LIVE_VERIFICATION_v0.28.0.md) (**agent instructions `-i` now steer agentic generation — crayon e2e GREEN**: a style-neutral prompt + an enabled "crayon" card produced an unmistakable crayon drawing through the real transport; root causes were conversational phrasing + the `project_brief.enabled` master switch). Prior: [v0.27.1](LIVE_VERIFICATION_v0.27.1.md) (**v0.27.0 release follow-up fixes and documentation sync**). Prior: [v0.27.0](LIVE_VERIFICATION_v0.27.0.md) (**`[style]` block with named variants + prompt-aware resume — credit-free CLI verification**: real `movie run --dry-run` 3-way ledger proving resolved-style display, `skip (done)` on matching `style_hash`, and `re-run (style changed)` after a style edit; composition is local, wire path untouched, so no Veo credits spent — first credited styled run will confirm visually). Prior: [v0.26.0](LIVE_VERIFICATION_v0.26.0.md) (**image i2i by generated-image UUID proven live e2e GREEN** — the existing asset is *selected in place* by its media UUID, no duplicate upload, producing an i2i output that references it; plus generated-image `display_name` capture, credited @C1ph3r404). Prior: [v0.25.0](LIVE_VERIFICATION_v0.25.0.md) (**#237 remote-UUID i2v proven live e2e GREEN** — a real 8s 720×1280 interpolation from a generated image's UUID, after the picker-search attach was reworked to local upload; #240 home-`.env` matrix live; plus two silent-failure guards root-caused live: video-as-image download rejection and rejected-upload fail-loud). Prior: [v0.24.0](LIVE_VERIFICATION_v0.24.0.md) (--project parity across CLI + MCP — automated coverage; live gen auth-gated). Prior: [v0.23.0](LIVE_VERIFICATION_v0.23.0.md) (MCP generation wiring proven live end-to-end — tool→worker→real Flow REST→structured-error translation; final image-write blocked by an expired session, environmental. #222 macOS fix reporter-verified e2e on Apple Silicon). Prior: [v0.22.0](LIVE_VERIFICATION_v0.22.0.md) (Tools framework — automated/CI coverage complete; credit/key-gated live feature run is a pending owner gate, see the doc) · [v0.21.0](LIVE_VERIFICATION_v0.21.0.md) (MCP server over stdio + HTTP/SSE — credit-free protocol handshake; 4 tools / 2 prompts / 3 resources confirmed on stdout) · [v0.20.1](LIVE_VERIFICATION_v0.20.1.md) · [v0.20.0](LIVE_VERIFICATION_v0.20.0.md) · [v0.19.0](LIVE_VERIFICATION_v0.19.0.md) · [v0.18.0](LIVE_VERIFICATION_v0.18.0.md) · [v0.17.0](LIVE_VERIFICATION_v0.17.0.md) · [v0.16.0](LIVE_VERIFICATION_v0.16.0.md) · [v0.13.0](LIVE_VERIFICATION_v0.13.0.md) · [v0.12.0](LIVE_VERIFICATION_v0.12.0.md) · [v0.11.0](LIVE_VERIFICATION_v0.11.0.md) · [v0.10.0](LIVE_VERIFICATION_v0.10.0.md) · [v0.9.1](LIVE_VERIFICATION_v0.9.1.md) · [v0.9.0](LIVE_VERIFICATION_v0.9.0.md) · [v0.8.1](LIVE_VERIFICATION_v0.8.1.md) · [v0.7.0](LIVE_VERIFICATION_v0.7.0.md)
126
127
  **"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
128
  **"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
129
  **"What was live-verified for the video-download feature (#29)?"** → [LIVE_VERIFICATION_video_download](LIVE_VERIFICATION_video_download.md)
@@ -0,0 +1,46 @@
1
+ # Live Verification — v0.36.0 (2026-07-16)
2
+
3
+ The release's new user-facing features — `GFLOW_CLI_HAR_PATH` and `GFLOW_CLI_DEBUG_TRACEBACK` — were exercised against a live Flow session and verified. The third change in this release, the reference-entity-smuggling fix (#312), already carries its own dedicated e2e regression test (`tests/e2e/test_entity_smuggling_e2e.py`) from the PR that introduced it; not re-run here.
4
+
5
+ ---
6
+
7
+ ## 1. Verified Features
8
+
9
+ ### A. `GFLOW_CLI_HAR_PATH` (Playwright network capture)
10
+
11
+ * **Command:** `GFLOW_CLI_HAR_PATH=<path> gflow character list --project 74a0ffb6-ccff-4bd2-a6a2-3c5b9b805256 --profile ffroliva`
12
+ * **Ledger Details:**
13
+ * **File written:** 9.4 MB HAR file at the configured path, valid JSON (HAR 1.2 format).
14
+ * **Structlog invariant:** `client.har_capture_enabled` fired with the security hint before launch, correlated to the run's `correlation_id`.
15
+ * **Real traffic captured:** 54 entries across 9 domains including `labs.google`, `aisandbox-pa.googleapis.com`, `lh3.googleusercontent.com`. 34 successful (200) responses, including the Flow editor shell (`GET https://labs.google/fx/tools/flow?hl=en` → 200) and static assets.
16
+ * **Genuine failure captured too:** the profile's session token had expired since its last use — the HAR correctly captured the resulting real `401` on the `projectInitialData` call, which the CLI surfaced as a typed `AuthExpiredError` (exit 3) with the standard remediation hint. This is exactly the diagnostic scenario the feature exists for.
17
+ * **Permissions:** `os.stat().st_mode` reports `0o666` on this Windows run — expected, not a bug: NTFS has no POSIX permission bits, and the design's own chmod call is a documented no-op there (`tests/api/test_client_launch_kwargs.py::test_close_browser_resources_chmods_har_file` skips the permission assertion on `win32` for the same reason). POSIX hardening is covered by unit tests with a real `stat.S_IMODE` assertion; not independently live-verified on this Windows machine.
18
+
19
+ ### B. `GFLOW_CLI_DEBUG_TRACEBACK` (unhandled-exception visibility)
20
+
21
+ * **Command:** `GFLOW_CLI_DEBUG_TRACEBACK=1 gflow character list --project not-a-real-project-id-!!! --profile ffroliva`
22
+ * **Ledger Details:**
23
+ * **Correct scoping confirmed live:** the run hit the same typed `AuthExpiredError` (a `GFlowError`, not the unhandled catch-all this flag gates) — console output was identical with and without the flag, confirming `GFLOW_CLI_DEBUG_TRACEBACK` does not alter typed-error output, exactly as designed (typed errors already show full `detail`/`remediation_hint` unconditionally; only the unhandled/catch-all path is gated).
24
+ * **Unhandled-path behavior:** not independently re-triggered live in this pass (the available live sessions only reached typed-error paths). Covered by 6 tests added specifically for this feature (2 console-path, 2 JSON-path, 1 Rich-markup regression, plus 1 env-var-parsing test) across `tests/cli/test_error_handling.py` and `tests/test_json_output.py` — 30 tests total in those two files after this change, including pre-existing coverage — each individually reviewed by a task-scoped code reviewer during implementation (see PR #321) — including the Rich-markup regression test for a real crash the review process caught (bracketed exception text, e.g. this codebase's own Playwright selector strings, previously risked crashing or silently corrupting the debug output).
25
+
26
+ ### C. Reference entity smuggling fix (#312)
27
+
28
+ * **Verification:** covered by its own dedicated e2e test added in the fix's PR (`test(e2e): add E2E test for reference entity smuggling prevention`, commit `1c53e42`, file `tests/e2e/test_entity_smuggling_e2e.py`), part of `develop` before this release cycle. Not re-exercised live in this pass.
29
+
30
+ ---
31
+
32
+ ## 2. Verification Ledger Summary
33
+
34
+ | Feature | Verification Method | Status | Evidence |
35
+ |---|---|---|---|
36
+ | `GFLOW_CLI_HAR_PATH` | Live run against real Flow session | ✅ Verified | 54-entry HAR, real domains + a genuine captured 401 |
37
+ | `GFLOW_CLI_DEBUG_TRACEBACK` (typed-error scoping) | Live run, compared with/without flag | ✅ Verified | Identical console output on a typed `GFlowError` |
38
+ | `GFLOW_CLI_DEBUG_TRACEBACK` (unhandled path) | 6 new tests (30 total in both files) + SDD task review | ✅ Verified | `tests/cli/test_error_handling.py`, `tests/test_json_output.py` |
39
+ | Reference entity smuggling fix (#312) | Dedicated e2e test (prior PR) | ✅ Verified | `tests/e2e/test_entity_smuggling_e2e.py` |
40
+
41
+ ---
42
+
43
+ ## 3. Not Verified This Cycle
44
+
45
+ * `GFLOW_CLI_HAR_PATH`'s POSIX `0600` file-permission hardening — only unit-tested (real assertion, real `stat` check), not live-verified, since this session's development machine is Windows and the hardening is a documented POSIX-only no-op there.
46
+ * `GFLOW_CLI_DEBUG_TRACEBACK`'s unhandled-exception path — not re-triggered against a live Flow session in this pass (both available live-auth attempts surfaced typed errors instead); covered by extensive unit/integration coverage instead (see above).
@@ -4,9 +4,15 @@
4
4
 
5
5
  ## Current release
6
6
 
7
+ **v0.36.0 — alpha.** **Diagnostic tooling (`GFLOW_CLI_HAR_PATH` + `GFLOW_CLI_DEBUG_TRACEBACK`) + reference-entity-smuggling fix (#312/#316).** Two opt-in, env-var-only debug knobs: `GFLOW_CLI_HAR_PATH` captures full Playwright network traffic to a HAR file (0600-hardened on POSIX); `GFLOW_CLI_DEBUG_TRACEBACK` prints the real exception + traceback for unhandled errors (console and `--json`) instead of the generic placeholder, while structured telemetry stays hashed unconditionally either way. Also fixes a poisoned character entity leaking `referenceEntities` into unrelated `image i2i` calls in the same project workspace. Also ships the `llm-council` skill (`/gflow:llm-council`), adding external CLI reviewers (`codex`/`gemini`, opt-in `agy`) alongside the internal council for high-stakes reviews. Verification: [LIVE_VERIFICATION_v0.36.0](LIVE_VERIFICATION_v0.36.0.md) (live HAR capture against real Flow traffic; typed-error scoping confirmed live; unhandled path covered by 6 new tests, 30 total across both files).
8
+
9
+ **Develop (unreleased, post-v0.36.0):** *(empty — develop is the staging branch for the next release).*
10
+
11
+ <details><summary>v0.35.0 — multimodal reverse-engineering + storyboard tool</summary>
12
+
7
13
  **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
14
 
9
- **Develop (unreleased, post-v0.35.0):** *(empty — develop is the staging branch for the next release).*
15
+ </details>
10
16
 
11
17
  <details><summary>v0.34.0 — bidirectional UI cohort switching</summary>
12
18
 
@@ -202,6 +208,7 @@ reporter-verified e2e on macOS).
202
208
  | `movie.toml` `[style]` block with named variants + prompt-aware resume (`style_hash`) (#239) | ✅ done (v0.27.0) |
203
209
  | Agent instructions (`-i`/`--instruction`) steer agentic generation — conversational directive + brief master switch (PR #263) | ✅ done (v0.28.0) |
204
210
  | Persistent `gflow instructions` CRUD + `movie.toml` instructions brief-sync + `gflow_instructions_*` MCP tools + CI-enforced MCP↔CLI parity (#192) | ✅ done (v0.29.0) |
211
+ | Diagnostic tooling (`GFLOW_CLI_HAR_PATH` + `GFLOW_CLI_DEBUG_TRACEBACK`) + reference-entity-smuggling fix (#312/#316) | ✅ done (v0.36.0) |
205
212
  | `gflow video batch` (TSV manifest) on `ui_automation` | ⏳ Phase B |
206
213
  | Persistence layer (stay-mounted batch sessions across project boundaries) | ⏳ Phase B |
207
214
  | Provider abstraction for official Veo 3.1 API | ⏳ planned |