gflow-cli 0.11.0__tar.gz → 0.12.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 (423) hide show
  1. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.claude/README.md +4 -1
  2. gflow_cli-0.12.0/.claude/commands/gflow/active.md +13 -0
  3. gflow_cli-0.12.0/.claude/commands/gflow/next.md +12 -0
  4. gflow_cli-0.12.0/.claude/commands/gflow/plan.md +22 -0
  5. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.claude/commands/gflow/predict.md +7 -1
  6. gflow_cli-0.12.0/.claude/commands/gflow/status.md +12 -0
  7. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.gitignore +6 -0
  8. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/AGENTS.md +5 -4
  9. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/CHANGELOG.md +89 -1
  10. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/CLAUDE.md +3 -2
  11. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/GEMINI.md +3 -2
  12. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/KNOWN_ISSUES.md +102 -0
  13. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/PKG-INFO +10 -2
  14. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/PLAN.md +1 -1
  15. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/README.md +5 -1
  16. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/AGENT_GUIDE.md +12 -1
  17. gflow_cli-0.12.0/docs/CHARACTER.md +506 -0
  18. gflow_cli-0.12.0/docs/CHARACTER_RECON.md +147 -0
  19. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/CONFIGURATION.md +35 -0
  20. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/INDEX.md +11 -3
  21. gflow_cli-0.12.0/docs/LIVE_VERIFICATION_v0.12.0.md +83 -0
  22. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/PROJECT_STATUS.md +6 -2
  23. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/USAGE.md +239 -0
  24. gflow_cli-0.12.0/docs/superpowers/character-scenario.md +140 -0
  25. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-30-l0-sapisidhash-aisandbox-auth.md +697 -0
  26. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-31-l0-bearer-pivot.md +97 -0
  27. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-31-l1-scene-compose.md +1480 -0
  28. gflow_cli-0.12.0/docs/superpowers/plans/2026-05-31-scene-concat-extend.md +100 -0
  29. gflow_cli-0.12.0/docs/superpowers/plans/2026-06-02-character-creation-phase2.md +293 -0
  30. gflow_cli-0.12.0/docs/superpowers/plans/2026-06-02-character-creation.md +300 -0
  31. gflow_cli-0.12.0/docs/superpowers/specs/2026-05-30-add-clip-scene-timeline-design.md +195 -0
  32. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/llms.txt +2 -1
  33. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/pyproject.toml +14 -1
  34. gflow_cli-0.12.0/samples/captured/12_create_scene.json +6 -0
  35. gflow_cli-0.12.0/samples/captured/13_sceneWorkflows_update.json +6 -0
  36. gflow_cli-0.12.0/samples/captured/14_get_scene_workflows.json +6 -0
  37. gflow_cli-0.12.0/samples/captured/15_commit_flowWorkflow.json +6 -0
  38. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/ci/check_doc_links.py +1 -0
  39. gflow_cli-0.12.0/scripts/dev/_spike_common.py +111 -0
  40. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/dev/active_plan.py +1 -1
  41. gflow_cli-0.12.0/scripts/dev/character_create_spike.py +344 -0
  42. gflow_cli-0.12.0/scripts/dev/character_create_spike_v2.py +499 -0
  43. gflow_cli-0.12.0/scripts/dev/dump_character_selectors.js +74 -0
  44. gflow_cli-0.12.0/scripts/dev/spike_char_editor_dom.py +237 -0
  45. gflow_cli-0.12.0/scripts/dev/spike_char_gen_capture.py +349 -0
  46. gflow_cli-0.12.0/scripts/dev/spike_patch_entity.py +244 -0
  47. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/skills/README.md +11 -1
  48. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/skills/gflow-cli/SKILL.md +48 -0
  49. gflow_cli-0.12.0/skills/plan/SKILL.md +215 -0
  50. gflow_cli-0.12.0/skills/status/SKILL.md +99 -0
  51. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/__init__.py +1 -1
  52. gflow_cli-0.12.0/src/gflow_cli/api/_sapisidhash.py +15 -0
  53. gflow_cli-0.12.0/src/gflow_cli/api/character.py +261 -0
  54. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/client.py +647 -18
  55. gflow_cli-0.12.0/src/gflow_cli/api/routes.py +132 -0
  56. gflow_cli-0.12.0/src/gflow_cli/api/scene.py +172 -0
  57. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +1 -8
  58. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/transports/ui_automation.py +516 -28
  59. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/transports/ui_automation_video.py +106 -32
  60. gflow_cli-0.12.0/src/gflow_cli/chain.py +307 -0
  61. gflow_cli-0.12.0/src/gflow_cli/chain_manifest.py +138 -0
  62. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/cli.py +4 -0
  63. gflow_cli-0.12.0/src/gflow_cli/cli_character.py +379 -0
  64. gflow_cli-0.12.0/src/gflow_cli/cli_scene.py +239 -0
  65. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/cli_video.py +447 -1
  66. gflow_cli-0.12.0/src/gflow_cli/data/chain_repo.py +128 -0
  67. gflow_cli-0.12.0/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +29 -0
  68. gflow_cli-0.12.0/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +5 -0
  69. gflow_cli-0.12.0/src/gflow_cli/data/migrations/0005_add_chain_links.sql +27 -0
  70. gflow_cli-0.12.0/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +5 -0
  71. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/data/models.py +53 -0
  72. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/data/recorder.py +310 -0
  73. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/data/repository.py +330 -4
  74. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/errors.py +125 -0
  75. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/json_output.py +13 -2
  76. gflow_cli-0.12.0/src/gflow_cli/media.py +120 -0
  77. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/paths.py +21 -0
  78. gflow_cli-0.12.0/src/gflow_cli/services/__init__.py +6 -0
  79. gflow_cli-0.12.0/src/gflow_cli/services/character_create.py +299 -0
  80. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tasks/lessons.md +1 -1
  81. gflow_cli-0.12.0/tests/api/fixtures/character_gen_response.json +54 -0
  82. gflow_cli-0.12.0/tests/api/fixtures/patch_entity_response.json +13 -0
  83. gflow_cli-0.12.0/tests/api/test_aisandbox_auth_error.py +25 -0
  84. gflow_cli-0.12.0/tests/api/test_aisandbox_auth_headers.py +120 -0
  85. gflow_cli-0.12.0/tests/api/test_bearer_redaction.py +74 -0
  86. gflow_cli-0.12.0/tests/api/test_character.py +402 -0
  87. gflow_cli-0.12.0/tests/api/test_client_character.py +307 -0
  88. gflow_cli-0.12.0/tests/api/test_client_generate_character.py +429 -0
  89. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/test_client_image.py +5 -5
  90. gflow_cli-0.12.0/tests/api/test_client_patch_entity.py +158 -0
  91. gflow_cli-0.12.0/tests/api/test_client_scene.py +241 -0
  92. gflow_cli-0.12.0/tests/api/test_post_json_aisandbox_auth.py +131 -0
  93. gflow_cli-0.12.0/tests/api/test_routes_character.py +20 -0
  94. gflow_cli-0.12.0/tests/api/test_routes_scene.py +47 -0
  95. gflow_cli-0.12.0/tests/api/test_sapisidhash_helper.py +14 -0
  96. gflow_cli-0.12.0/tests/api/test_scene_models.py +120 -0
  97. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/transports/test_ui_automation.py +131 -52
  98. gflow_cli-0.12.0/tests/api/transports/test_ui_character_editor.py +912 -0
  99. gflow_cli-0.12.0/tests/cli/test_cli_character.py +275 -0
  100. gflow_cli-0.12.0/tests/cli/test_cli_character_create.py +613 -0
  101. gflow_cli-0.12.0/tests/cli/test_cli_scene.py +160 -0
  102. gflow_cli-0.12.0/tests/cli/test_cli_video_chain.py +373 -0
  103. gflow_cli-0.12.0/tests/data/test_chain_repo.py +221 -0
  104. gflow_cli-0.12.0/tests/data/test_find_incomplete_character.py +217 -0
  105. gflow_cli-0.12.0/tests/data/test_models.py +24 -0
  106. gflow_cli-0.12.0/tests/data/test_recorder_character.py +254 -0
  107. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/data/test_repository.py +66 -10
  108. gflow_cli-0.12.0/tests/data/test_scene_persistence.py +148 -0
  109. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/data/test_store_migrations.py +1 -1
  110. gflow_cli-0.12.0/tests/e2e/test_aisandbox_auth_live.py +72 -0
  111. gflow_cli-0.12.0/tests/e2e/test_chain_e2e.py +198 -0
  112. gflow_cli-0.12.0/tests/e2e/test_character_create_e2e.py +442 -0
  113. gflow_cli-0.12.0/tests/e2e/test_scene_compose_live.py +103 -0
  114. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/e2e/test_transports_e2e.py +93 -1
  115. gflow_cli-0.12.0/tests/features/character_create.feature +34 -0
  116. gflow_cli-0.12.0/tests/features/character_read.feature +10 -0
  117. gflow_cli-0.12.0/tests/features/test_character_create_steps.py +288 -0
  118. gflow_cli-0.12.0/tests/features/test_character_read_steps.py +171 -0
  119. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/features/test_step_collision_guard.py +2 -0
  120. gflow_cli-0.12.0/tests/features/test_video_chain_steps.py +291 -0
  121. gflow_cli-0.12.0/tests/features/video_chain.feature +37 -0
  122. gflow_cli-0.12.0/tests/services/test_character_create_redaction.py +312 -0
  123. gflow_cli-0.12.0/tests/services/test_character_create_saga.py +442 -0
  124. gflow_cli-0.12.0/tests/services/test_character_gen_no_direct_post.py +243 -0
  125. gflow_cli-0.12.0/tests/smoke/__init__.py +0 -0
  126. gflow_cli-0.12.0/tests/test_chain.py +372 -0
  127. gflow_cli-0.12.0/tests/test_chain_manifest.py +243 -0
  128. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_errors.py +44 -0
  129. gflow_cli-0.12.0/tests/test_errors_403.py +19 -0
  130. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_marker_registry.py +1 -1
  131. gflow_cli-0.12.0/tests/test_media.py +158 -0
  132. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_paths.py +18 -0
  133. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/uv.lock +121 -2
  134. gflow_cli-0.11.0/.claude/commands/gflow/plan.md +0 -39
  135. gflow_cli-0.11.0/src/gflow_cli/api/routes.py +0 -64
  136. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.claude/commands/gflow/branch-review.md +0 -0
  137. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.claude/commands/gflow/changelog.md +0 -0
  138. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.claude/commands/gflow/check.md +0 -0
  139. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.claude/commands/gflow/doc-review.md +0 -0
  140. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.claude/commands/gflow/known-issues.md +0 -0
  141. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  142. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.claude/commands/gflow/release.md +0 -0
  143. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.claude/commands/gflow/scenario.md +0 -0
  144. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.continue-here.md +0 -0
  145. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.env.template +0 -0
  146. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.gitattributes +0 -0
  147. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.github/CODEOWNERS +0 -0
  148. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  149. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.github/copilot-instructions.md +0 -0
  150. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.github/dependabot.yml +0 -0
  151. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.github/workflows/ci.yml +0 -0
  152. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.github/workflows/external-pr-triage.yml +0 -0
  153. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.github/workflows/release.yml +0 -0
  154. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.gitleaks.toml +0 -0
  155. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.planning/issue-125-fix.md +0 -0
  156. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.planning/todos/pending/2026-05-11-add-project-logo-and-docs-site-promotion-plan.md +0 -0
  157. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.planning/todos/pending/pr-38-review.md +0 -0
  158. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.pre-commit-config.yaml +0 -0
  159. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/.secrets.baseline +0 -0
  160. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/CONFIGURATION.md +0 -0
  161. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/CONTRIBUTING.md +0 -0
  162. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/DISCLAIMER.md +0 -0
  163. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/LICENSE +0 -0
  164. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/RELEASE.md +0 -0
  165. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/ROADMAP.md +0 -0
  166. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/conftest.py +0 -0
  167. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docker-compose.yml +0 -0
  168. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/ARCHITECTURE.md +0 -0
  169. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/AUTHENTICATION.md +0 -0
  170. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/DATA_LAYER.md +0 -0
  171. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/DEBUGGING.md +0 -0
  172. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/DEMOS.md +0 -0
  173. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/DEVELOPMENT.md +0 -0
  174. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/E2E_TESTING.md +0 -0
  175. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/EXTERNAL_STORAGE.md +0 -0
  176. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/GITHUB.md +0 -0
  177. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  178. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  179. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  180. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  181. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  182. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  183. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  184. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  185. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  186. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/SECURITY.md +0 -0
  187. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/USER_GUIDE.md +0 -0
  188. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/assets/demo-split-pf.gif +0 -0
  189. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/assets/example-run.gif +0 -0
  190. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/2026-05-17-issue-15-handover.md +0 -0
  191. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-09-image-mvp-orchestration.md +0 -0
  192. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-09-image-mvp.md +0 -0
  193. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-09-video-mvp-orchestration.md +0 -0
  194. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-09-video-mvp.md +0 -0
  195. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-10-phase-4-hardening-orchestration.md +0 -0
  196. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-10-phase-4-hardening.md +0 -0
  197. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/2026-05-14-shell-multi-prompt-orchestration.md +0 -0
  198. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_FINAL_ARCH.md +0 -0
  199. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_FINAL_SEC_UX.md +0 -0
  200. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_REVIEW_CODE.md +0 -0
  201. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_REVIEW_GEMINI.md +0 -0
  202. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_REVIEW_SECURITY.md +0 -0
  203. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/IMPLEMENTATION_REVIEW_PYTHON.md +0 -0
  204. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/IMPLEMENTATION_REVIEW_SECURITY.md +0 -0
  205. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN.md +0 -0
  206. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_CODE.md +0 -0
  207. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_FOLLOWUP.md +0 -0
  208. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_PLANNER.md +0 -0
  209. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_SECURITY.md +0 -0
  210. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_SECURITY_FOLLOWUP.md +0 -0
  211. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/COUNCIL_FINAL_SEC_UX_VERIFIED.md +0 -0
  212. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/COUNCIL_REVIEW_PLAN_SECURITY.md +0 -0
  213. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/COUNCIL_REVIEW_SPEC_SECURITY.md +0 -0
  214. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/PLAN.md +0 -0
  215. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/orchestration.md +0 -0
  216. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-17-e2e-test-coverage.md +0 -0
  217. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-17-issue-15-auth-verification-fix.md +0 -0
  218. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-17-issue-15-i2v-bearer-auth.md +0 -0
  219. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-17-issue-15-orchestration.md +0 -0
  220. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-18-video-phase0-submit-spike.md +0 -0
  221. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-19-video-phase-a-execution-state.md +0 -0
  222. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-19-video-phase-a-orchestration.md +0 -0
  223. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-19-video-phase-a-t2v.md +0 -0
  224. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-20-video-download-t2v-cli.md +0 -0
  225. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-21-multi-image-prompt-orchestration.md +0 -0
  226. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-21-multi-image-prompt.md +0 -0
  227. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-22-pr-38-review.md +0 -0
  228. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-22-stay-mounted-batch-session-plan.md +0 -0
  229. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-23-locale-agnostic-selectors.md +0 -0
  230. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/plans/2026-05-24-data-layer.md +0 -0
  231. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-10-phase-4-hardening-design.md +0 -0
  232. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-14-shell-multi-prompt-design.md +0 -0
  233. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-15-auth-login-real-chrome-design.md +0 -0
  234. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-17-e2e-test-coverage-design.md +0 -0
  235. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-17-i2v-uploadimage-401-bearer-auth-design.md +0 -0
  236. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-17-issue-15-auth-verification-fix-design.md +0 -0
  237. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-17-issue-15-root-cause-findings.md +0 -0
  238. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-18-ui-automation-video-generation-design.md +0 -0
  239. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-21-multi-image-prompt-design.md +0 -0
  240. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-22-pr-38-review-design.md +0 -0
  241. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-22-stay-mounted-batch-session-design.md +0 -0
  242. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-23-locale-agnostic-selectors.md +0 -0
  243. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-23-readme-v0.8.1-refresh-design.md +0 -0
  244. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-24-data-layer-design.md +0 -0
  245. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/specs/2026-05-27-public-event-surface-design.md +0 -0
  246. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/docs/superpowers/verifications/2026-05-11-phase-4-stage-g.md +0 -0
  247. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/examples/README.md +0 -0
  248. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/examples/batch_from_config.py +0 -0
  249. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/examples/multi_prompt_t2i.py +0 -0
  250. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/examples/sample_config.json +0 -0
  251. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/examples/sample_prompts.txt +0 -0
  252. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/examples/single_image_t2i.py +0 -0
  253. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/examples/workflow_chain.py +0 -0
  254. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/samples/README.md +0 -0
  255. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/samples/captured/01_upload_image.json +0 -0
  256. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  257. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  258. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/samples/captured/04_archive_workflow.json +0 -0
  259. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/samples/captured/05_createProject.json +0 -0
  260. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/samples/captured/06_batchGenerateImages.json +0 -0
  261. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  262. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  263. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  264. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  265. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  266. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/ci/check_repo_hygiene.py +0 -0
  267. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/debug_editor.py +0 -0
  268. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/debug_gen_settings.py +0 -0
  269. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/debug_settings.py +0 -0
  270. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  271. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  272. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  273. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  274. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  275. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/dev/capture_locale_invariants.py +0 -0
  276. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  277. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/dev/monitor_pr_38.py +0 -0
  278. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/dev/skillopt/README.md +0 -0
  279. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/dev/skillopt/harness.py +0 -0
  280. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/dev/skillopt/tasks.json +0 -0
  281. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/diag_capture_flow_traffic.py +0 -0
  282. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/diag_recaptcha_mint.py +0 -0
  283. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/record_demo.ps1 +0 -0
  284. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/smoke_image.py +0 -0
  285. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/smoke_real_chrome_image.py +0 -0
  286. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/smoke_video_editor.py +0 -0
  287. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/smoke_worker_style.py +0 -0
  288. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/scripts/verify_chrome_auth_viability.py +0 -0
  289. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/skills/pr-council-review/SKILL.md +0 -0
  290. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/skills/predict/SKILL.md +0 -0
  291. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/skills/scenario/SKILL.md +0 -0
  292. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/sonar-project.properties +0 -0
  293. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/__main__.py +0 -0
  294. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/_cli_helpers.py +0 -0
  295. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/__init__.py +0 -0
  296. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/_retry.py +0 -0
  297. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/dto.py +0 -0
  298. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/image.py +0 -0
  299. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/recaptcha.py +0 -0
  300. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  301. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/transports/_common.py +0 -0
  302. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  303. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/transports/base.py +0 -0
  304. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  305. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  306. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  307. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/api/video.py +0 -0
  308. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/auth/__init__.py +0 -0
  309. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/auth/base.py +0 -0
  310. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/auth/factory.py +0 -0
  311. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  312. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  313. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/auth/strategies.py +0 -0
  314. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/auth/verification.py +0 -0
  315. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/browser_manager.py +0 -0
  316. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/cli_data.py +0 -0
  317. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/cli_image.py +0 -0
  318. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/cli_models.py +0 -0
  319. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/cli_run.py +0 -0
  320. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/config.py +0 -0
  321. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/data/__init__.py +0 -0
  322. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  323. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  324. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  325. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/data/queries.py +0 -0
  326. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/data/redaction.py +0 -0
  327. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/data/store.py +0 -0
  328. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/exceptions.py +0 -0
  329. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/image_batch.py +0 -0
  330. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/manifest.py +0 -0
  331. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/observability.py +0 -0
  332. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/profile_store.py +0 -0
  333. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/src/gflow_cli/storage.py +0 -0
  334. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/test_assets/sample_batch.json +0 -0
  335. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/test_assets/sample_batch.tsv +0 -0
  336. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/test_assets/sample_batch_invalid.tsv +0 -0
  337. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/__init__.py +0 -0
  338. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/__init__.py +0 -0
  339. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/test_client.py +0 -0
  340. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/test_concurrency.py +0 -0
  341. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/test_dto.py +0 -0
  342. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/test_image.py +0 -0
  343. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/test_image_dto.py +0 -0
  344. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/test_recaptcha.py +0 -0
  345. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/test_retry.py +0 -0
  346. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/test_routes.py +0 -0
  347. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/test_video.py +0 -0
  348. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/transports/__init__.py +0 -0
  349. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/transports/test_base.py +0 -0
  350. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/transports/test_bearer.py +0 -0
  351. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/transports/test_common.py +0 -0
  352. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  353. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/transports/test_factory.py +0 -0
  354. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/transports/test_fingerprint.py +0 -0
  355. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/transports/test_sapisidhash.py +0 -0
  356. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/transports/test_transport_timeout.py +0 -0
  357. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  358. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  359. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  360. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/auth/strategies/test_factory.py +0 -0
  361. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/auth/strategies/test_strategies.py +0 -0
  362. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/auth/test_verification.py +0 -0
  363. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/cli/__init__.py +0 -0
  364. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/cli/test_cli_auth_list.py +0 -0
  365. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/cli/test_cli_data.py +0 -0
  366. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/cli/test_cli_image.py +0 -0
  367. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  368. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/cli/test_cli_models.py +0 -0
  369. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/cli/test_cli_run.py +0 -0
  370. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/cli/test_cli_video.py +0 -0
  371. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/cli/test_error_handling.py +0 -0
  372. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/cli/test_helpers.py +0 -0
  373. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  374. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/conftest.py +0 -0
  375. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/data/__init__.py +0 -0
  376. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/data/test_packaging.py +0 -0
  377. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/data/test_recorder.py +0 -0
  378. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/data/test_redaction.py +0 -0
  379. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/data/test_settings_and_errors.py +0 -0
  380. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/e2e/__init__.py +0 -0
  381. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/e2e/conftest.py +0 -0
  382. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  383. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  384. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  385. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  386. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/e2e/test_json_output_e2e.py +0 -0
  387. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  388. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  389. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  390. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/features/__init__.py +0 -0
  391. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/features/auth.feature +0 -0
  392. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/features/auth_login.feature +0 -0
  393. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/features/conftest.py +0 -0
  394. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/features/image.feature +0 -0
  395. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/features/test_auth_login_steps.py +0 -0
  396. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/features/test_auth_steps.py +0 -0
  397. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/features/test_image_steps.py +0 -0
  398. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/fixtures/__init__.py +0 -0
  399. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/fixtures/seeded_catalog.py +0 -0
  400. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/image_batch/__init__.py +0 -0
  401. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/image_batch/test_image_manifest.py +0 -0
  402. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/image_batch/test_observability_events.py +0 -0
  403. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/integration/__init__.py +0 -0
  404. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/integration/conftest.py +0 -0
  405. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/integration/constants.py +0 -0
  406. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/integration/test_storage_gcs.py +0 -0
  407. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/integration/test_storage_s3.py +0 -0
  408. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  409. {gflow_cli-0.11.0/tests/smoke → gflow_cli-0.12.0/tests/services}/__init__.py +0 -0
  410. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  411. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/smoke/test_real_flow.py +0 -0
  412. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_auth.py +0 -0
  413. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_browser_manager.py +0 -0
  414. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_cli_data.py +0 -0
  415. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_config.py +0 -0
  416. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_conftest_isolation.py +0 -0
  417. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_data_queries.py +0 -0
  418. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_documentation_gate.py +0 -0
  419. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_json_output.py +0 -0
  420. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_manifest.py +0 -0
  421. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_observability.py +0 -0
  422. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_profile_store.py +0 -0
  423. {gflow_cli-0.11.0 → gflow_cli-0.12.0}/tests/test_smoke.py +0 -0
@@ -12,7 +12,10 @@ This directory holds **internal maintainer workflows** that are bundled with the
12
12
  └── commands/ ← repo-local slash commands
13
13
  └── gflow/ ← `/gflow:*` namespace (avoids collision with built-ins)
14
14
  ├── check.md ← `/gflow:check` — hygiene + ruff + pyright + pytest
15
- ├── plan.md ← `/gflow:plan` — show active phase / superpowers plan
15
+ ├── status.md ← `/gflow:status` — full plan state (file, goal, progress, next task)
16
+ ├── next.md ← `/gflow:next` — next unchecked task only
17
+ ├── active.md ← `/gflow:active` — which plan is active, goal only
18
+ ├── plan.md ← `/gflow:plan <feature>` — create a task-by-task implementation plan
16
19
  ├── known-issues.md← `/gflow:known-issues` — open/mitigated items
17
20
  ├── changelog.md ← `/gflow:changelog` — [Unreleased] + last tagged
18
21
  └── release.md ← `/gflow:release` — full release flow (signed tags)
@@ -0,0 +1,13 @@
1
+ ---
2
+ description: Show which plan is active and its goal — orientation without task detail.
3
+ ---
4
+
5
+ # `/gflow:active` — Active plan identity
6
+
7
+ **Read `skills/status/SKILL.md` and follow the `active` variant protocol.**
8
+
9
+ > Do **not** call `Skill(skill="status")` — read the file directly.
10
+
11
+ The skill at `skills/status/SKILL.md` runs `scripts/dev/active_plan.py` and returns
12
+ only the header lines (Plan path, Title, Goal, Progress count). Stops before the
13
+ `--- Next task ---` separator.
@@ -0,0 +1,12 @@
1
+ ---
2
+ description: Show only the next unchecked task — minimal output, no context noise.
3
+ ---
4
+
5
+ # `/gflow:next [feature]` — Next task
6
+
7
+ **Read `skills/status/SKILL.md` and follow the `next` variant protocol**, passing `$ARGUMENTS` as the optional feature slug.
8
+
9
+ > Do **not** call `Skill(skill="status")` — read the file directly.
10
+
11
+ The skill at `skills/status/SKILL.md` runs `scripts/dev/active_plan.py` and returns
12
+ only the `--- Next task ---` block. Header lines (Plan, Title, Goal, Progress) are omitted.
@@ -0,0 +1,22 @@
1
+ ---
2
+ description: Create a structured task-by-task implementation plan for a feature and write it to docs/superpowers/plans/.
3
+ ---
4
+
5
+ # `/gflow:plan <feature>` — Create a feature plan
6
+
7
+ **Read `skills/plan/SKILL.md` and follow its protocol now**, passing `$ARGUMENTS` as the feature description.
8
+
9
+ > Do **not** call `Skill(skill="plan")` — the repo's `skills/*/SKILL.md` files are plain Markdown, not registered as Skill-tool-invocable. Read the file directly instead.
10
+
11
+ The skill at `skills/plan/SKILL.md` gathers predict/scenario context, asks ≤3
12
+ clarifying questions, decomposes the feature into atomic committable tasks with
13
+ step + test checklists, and writes `docs/superpowers/plans/<date>-<slug>/PLAN.md`.
14
+
15
+ **Typical workflow:**
16
+ ```
17
+ /gflow:predict <proposal> → GO / CAUTION / STOP
18
+ /gflow:scenario <feature> → edge cases + BDD skeleton
19
+ /gflow:plan <feature> → writes PLAN.md ← this command
20
+ /gflow:status → surfaces next task
21
+ /gflow:check → before each commit
22
+ ```
@@ -16,4 +16,10 @@ The skill at `skills/predict/SKILL.md` runs five independent expert personas
16
16
  (Architect · Security/reCAPTCHA · Performance/Playwright · CLI UX · Devil's Advocate),
17
17
  resolves conflicts, and returns a GO / CAUTION / STOP verdict with a confidence score.
18
18
 
19
- **Pair with `/gflow:scenario`** after a GO or CAUTION to enumerate edge cases before EXECUTE.
19
+ **Typical workflow after a GO or CAUTION:**
20
+ ```
21
+ /gflow:scenario <feature> → edge cases + BDD skeleton
22
+ /gflow:plan <feature> → writes PLAN.md task checklist
23
+ /gflow:status → surfaces next task during execution
24
+ /gflow:check → before each commit
25
+ ```
@@ -0,0 +1,12 @@
1
+ ---
2
+ description: Show current plan state — active plan file, goal, progress, and next unchecked task.
3
+ ---
4
+
5
+ # `/gflow:status [feature]` — Current plan state
6
+
7
+ **Read `skills/status/SKILL.md` and follow the `status` variant protocol**, passing `$ARGUMENTS` as the optional feature slug.
8
+
9
+ > Do **not** call `Skill(skill="status")` — read the file directly.
10
+
11
+ The skill at `skills/status/SKILL.md` runs `scripts/dev/active_plan.py` and returns
12
+ the full output: plan file path, title, goal, progress (X/N), and next task block.
@@ -63,6 +63,9 @@ samples/*.captured.json # sandbox-recorded API exchanges may contain PII
63
63
  test_assets/smoke_*/
64
64
  test_assets/debug_*/
65
65
 
66
+ # Phase-2 live-spike capture outputs — NEVER commit (may contain real API payloads)
67
+ scripts/dev/_spike_out/
68
+
66
69
  # Live Flow traffic captures — NEVER commit (contain real Bearer tokens / API keys).
67
70
  # Diagnostic scripts MUST default-write here, NOT to samples/captured/.
68
71
  # Sanitised reference samples (no secrets) can still live under samples/captured/.
@@ -83,3 +86,6 @@ worktrees/
83
86
 
84
87
  # E2E test logs (live Flow runs — may contain account/profile names)
85
88
  .planning/e2e-logs/
89
+
90
+ # Understand Anything (local knowledge graph)
91
+ .understand-anything/
@@ -8,7 +8,8 @@ Supported tools that auto-discover this file: Cursor, Codex, Aider, Jules, Devin
8
8
 
9
9
  - Unofficial Python CLI for [Google Flow](https://labs.google/fx/tools/flow) — drives Veo (image-to-video, text-to-video) and Imagen (text-to-image) generations from the terminal by reverse-engineering Flow's private REST API at `aisandbox-pa.googleapis.com`.
10
10
  - Python 3.11+ · `uv`-managed · `hatchling` builds · Playwright Chromium transport · `pyright` strict · `ruff` · `pytest`.
11
- - Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `cli_data.py`, `cli_image.py`, `cli_run.py`, `cli_video.py`, `config.py`, `data/`, `errors.py`, `exceptions.py`, `image_batch.py`, `manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
11
+ - Single-package modular monolith. Top-level modules under `src/gflow_cli/`: `api/`, `auth/`, `browser_manager.py`, `cli.py`, `_cli_helpers.py`, `cli_character.py`, `cli_data.py`, `cli_image.py`, `cli_models.py`, `cli_run.py`, `cli_scene.py`, `cli_video.py`, `config.py`, `data/`, `errors.py`, `exceptions.py`, `image_batch.py`, `manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
12
+ - Command surface: `gflow auth`, `gflow image` (t2i/i2i/upload), `gflow video` (t2v/i2v/r2v/batch/chain), `gflow character` (create/list/show/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), and `gflow data` (catalog queries).
12
13
  - Requires a Google AI Ultra or Pro subscription with Flow access. All generations bill against the user's own Google account.
13
14
 
14
15
  ## Headed-browser dependency (architectural reality)
@@ -28,7 +29,7 @@ If you can help unblock a pure HTTP transport (especially for video generation,
28
29
  - Copy `.env.template` to `.env.local`; never commit `.env.local`. It documents every env var.
29
30
  - Output goes to `./tmp/` for scripts/tests or `$GFLOW_CLI_OUTPUT_DIR` for CLI outputs (defaults to `./out/`).
30
31
  - One-time auth: `gflow auth login --browser chrome`. The `--browser chrome` flag is mandatory; the CLI fails fast on other strategies.
31
- - Use `/gflow:plan` to see the active phase before starting work; `/gflow:known-issues` before touching auth or reCAPTCHA code paths.
32
+ - Use `/gflow:status` to see the current task before starting work; `/gflow:known-issues` before touching auth or reCAPTCHA code paths.
32
33
 
33
34
  ## Testing instructions — The Impeccable Routine
34
35
 
@@ -55,7 +56,7 @@ Or invoke the wrapper: `/gflow:check`.
55
56
 
56
57
  - Type hints everywhere; `pyright` strict on `src/gflow_cli`.
57
58
  - Structured logging only (`structlog`) — **never** raw `print()` or `import logging` in `src/`.
58
- - Errors as RFC 9457 Problem Details with stable per-class exit codes (3–16, where 16 is the `DataStoreError` family from `gflow_cli.data`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping.
59
+ - Errors as RFC 9457 Problem Details with stable per-class exit codes (3–21, e.g. 16 is the `DataStoreError` family, 19 `SceneConcatError`, 20 `FrameExtractionError`, 21 `ChainPartialError`). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping.
59
60
  - 100-char line length, `ruff` configured. Imports sorted by `ruff` (isort rules).
60
61
 
61
62
  ## PR instructions
@@ -89,7 +90,7 @@ The SkillOpt harness at `scripts/dev/skillopt/` measures how accurately each ski
89
90
  - **Mandates & routing rules** → [docs/AGENT_GUIDE.md](docs/AGENT_GUIDE.md)
90
91
  - **Full docs index** → [docs/INDEX.md](docs/INDEX.md)
91
92
  - **Known issues** (read before touching auth / reCAPTCHA) → [KNOWN_ISSUES.md](KNOWN_ISSUES.md)
92
- - **Active phase & backlog** → [PLAN.md](PLAN.md) or run `/gflow:plan`
93
+ - **Current task** `/gflow:status` · **Create a feature plan** `/gflow:plan <feature>` · **Full roadmap** → [PLAN.md](PLAN.md)
93
94
  - **Release protocol** → [RELEASE.md](RELEASE.md)
94
95
 
95
96
  ## Claude Code-specific notes
@@ -7,6 +7,93 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.12.0] — 2026-06-03
11
+
12
+ ### Fixed
13
+
14
+ - **Create-project generation failing when Flow opens the Agent _chat panel_.**
15
+ A follow-up to the earlier Agent-pill fix: Flow now also surfaces Agent mode as
16
+ a docked chat side-panel ("Untitled session") on some project opens, and while
17
+ it is up the in-composer Agent pill is absent from the DOM — so the pill-only
18
+ recovery could not find anything to click and generation still failed with
19
+ "mode-switch dropdown trigger not found". `_exit_agent_mode` now handles both
20
+ Agent shapes in one pass: it dismisses the chat panel (locale-stable, aria-free
21
+ structural close anchor) which reveals the pill, then turns the pill off,
22
+ looping until the media panel re-mounts. Keyed on the outcome (`crop_*` is
23
+ back), so it covers pill-only, panel-only, and panel-then-pill without assuming
24
+ which control is present.
25
+
26
+ ### Added
27
+
28
+ - **`gflow character` command group — reusable Flow Character entities (#145).**
29
+ Mint a project-scoped **Character** (a named subject with reference images, an
30
+ optional voice, and an optional personality) so the same subject appears
31
+ consistently across generations:
32
+ - `gflow character create --project <pid> --name <name> --face-prompt "…"
33
+ [--body-prompt "…"] [--voice <Name>] [--personality "…"]
34
+ [--model nano2|nanopro]` — two-step generation: a **face** reference (slot 0),
35
+ then a self-contained **front/side/back triptych body** (slot 1) seeded by the
36
+ generated face. gflow injects its own triptych instruction, so one body
37
+ generation yields all three angles. Characters have **no aspect-ratio
38
+ control** and exactly two models — `nano2` (Nano Banana 2, default) and
39
+ `nanopro` (Nano Banana Pro). Generated images are **downloaded** to local (or
40
+ cloud) storage; the signed `fifeUrl` is used only at download and never
41
+ persisted.
42
+ - `gflow character list --project <pid>` — list every Character in a project.
43
+ - `gflow character show --project <pid> (--id <entityId> | --name <name>)` —
44
+ show one Character; an ambiguous `--name` exits 11.
45
+ - `gflow character voices` — list the 29-name Gemini voice catalog
46
+ (name / description / sample-url); `--voice` is validated case-insensitively.
47
+
48
+ The credited generation rides Flow's own page JS in the character editor
49
+ (Option B, UI passive-capture — a self-assembled direct POST is reCAPTCHA-403
50
+ walled); the structural calls (createEntity, workflow/entity PATCH,
51
+ projectInitialData) are credit-free REST. Creation runs as a
52
+ **persist-before-spend, crash-recoverable saga**: the `entityId` and each
53
+ completed slot are recorded before/as credits are spent, so a crashed run
54
+ resumes without orphaning a paid generation or double-charging. Live-verified
55
+ end-to-end on 2026-06-02 (face + triptych body, both bound, downloaded, read
56
+ back). See [docs/CHARACTER.md](docs/CHARACTER.md).
57
+
58
+ - **`gflow video chain` — last-frame I2V chaining.** Render a JSONL manifest of
59
+ *links* into one continuous sequence: link 0 is a text-to-video generation,
60
+ and every later link is an image-to-video generation **seeded by the extracted
61
+ last frame of the previous clip**, giving visual continuity with no
62
+ server-side stitching. Each link is a sequential paid Veo generation (**one
63
+ credit per link**); a cost-confirmation gate (`-y`/`--yes` to skip),
64
+ `--dry-run` plan preview, `--max-links` cap (exit 11), and
65
+ `--resume-from <chain-id>` (skips already-paid links, no re-billing) make the
66
+ spend explicit and recoverable. Per-link wire-route checking aborts loudly if
67
+ Flow drops the seed frame and routes an i2v link to the text-only endpoint
68
+ (issue #125), so a misroute can never be reported as a successful chain.
69
+ Only the Veo 3.1 models (`veo-lite`/`veo-fast`/`veo-quality`/`veo-lite-lp`)
70
+ are accepted; `omni-flash` is rejected. Chain links are recorded locally
71
+ (SQLite migration `0005`) to drive `--resume-from`. The frame extractor uses
72
+ PyAV via a new optional **`[chain]`** extra (`pip install 'gflow-cli[chain]'`)
73
+ — no system ffmpeg required. Each link is saved as its own mp4; concatenating
74
+ the clips into one file is a separate step — use `gflow scene` (auto-concat is
75
+ deferred, see [KNOWN_ISSUES.md](KNOWN_ISSUES.md)).
76
+
77
+ - **`gflow scene` command group (Add Clip / Scenes).** Compose ordered,
78
+ trimmable video clips into a Flow **Scene** over the credit-free aisandbox
79
+ REST surface (no reCAPTCHA, no credits):
80
+ - `gflow scene create --project <pid> <workflowId>[:<start>-<end>] [...]` —
81
+ compose a scene from one or more existing clips (repeat an id to duplicate;
82
+ optional per-clip trim in seconds).
83
+ - `gflow scene show --scene <sid> --project <pid>` — read back a scene's clip
84
+ order and trims.
85
+ - `gflow scene create … --output extended.mp4` — render the composed scene
86
+ into a single **extended video** via Flow's server-side concatenation
87
+ (`runVideoFxConcatenation`) — credit-free, no reCAPTCHA, **no ffmpeg**. The
88
+ combined MP4 is fetched inline and written locally (or to the configured
89
+ cloud `storage_uri`). `--force` overwrites an existing output.
90
+
91
+ Scene compositions are recorded locally (SQLite migration `0003`) — including
92
+ each clip's media id + trims, and the rendered extended-video path (migration
93
+ `0004`) — so a compose survives a later render failure and the output is
94
+ discoverable for recovery. The append-to-existing-scene verb (`add-clip`) is
95
+ deferred — see the project backlog.
96
+
10
97
  ## [0.11.0] — 2026-05-31
11
98
 
12
99
  ### Changed
@@ -1269,7 +1356,8 @@ shell-script template that branches on these codes.
1269
1356
 
1270
1357
  First skeleton. Not functional end-to-end yet.
1271
1358
 
1272
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.11.0...HEAD
1359
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.12.0...HEAD
1360
+ [0.12.0]: https://github.com/ffroliva/gflow-cli/compare/v0.11.0...v0.12.0
1273
1361
  [0.11.0]: https://github.com/ffroliva/gflow-cli/compare/v0.10.0...v0.11.0
1274
1362
  [0.10.0]: https://github.com/ffroliva/gflow-cli/compare/v0.9.1...v0.10.0
1275
1363
  [0.9.1]: https://github.com/ffroliva/gflow-cli/compare/v0.9.0...v0.9.1
@@ -11,7 +11,8 @@
11
11
  1. Read **[AGENTS.md](AGENTS.md)** — universal rules every agent must follow.
12
12
  2. Read **[docs/INDEX.md](docs/INDEX.md)** — routing layer for all project docs and commands.
13
13
  3. Pull deeper context on demand:
14
- - Starting a feature → `/gflow:plan`
14
+ - Current task / where we left off → `/gflow:status`
15
+ - Starting a new feature → `/gflow:predict` → `/gflow:scenario` → `/gflow:plan <feature>`
15
16
  - Touching auth or reCAPTCHA → `/gflow:known-issues`
16
17
  - Cutting a release → `/gflow:release`
17
18
  - Before any commit → `/gflow:check`
@@ -38,4 +39,4 @@ The heredoc pattern (`$(cat <<'EOF' ... EOF)`) is only valid inside a `Bash` too
38
39
 
39
40
  ## Active phase
40
41
 
41
- See [PLAN.md](PLAN.md) or run `/gflow:plan` for the current detailed plan.
42
+ See [PLAN.md](PLAN.md) or run `/gflow:status` for current task. Run `/gflow:plan <feature>` to create a new feature plan.
@@ -11,7 +11,8 @@
11
11
  1. Read **[AGENTS.md](AGENTS.md)** — universal rules every agent must follow.
12
12
  2. Read **[docs/INDEX.md](docs/INDEX.md)** — routing layer for all project docs and commands.
13
13
  3. Pull deeper context on demand:
14
- - Starting a feature → `/gflow:plan`
14
+ - Current task / where we left off → `/gflow:status`
15
+ - Starting a new feature → `/gflow:predict` → `/gflow:scenario` → `/gflow:plan <feature>`
15
16
  - Touching auth or reCAPTCHA → `/gflow:known-issues`
16
17
  - Cutting a release → `/gflow:release`
17
18
  - Before any commit → `/gflow:check`
@@ -24,4 +25,4 @@
24
25
 
25
26
  ## Active phase
26
27
 
27
- See [PLAN.md](PLAN.md) or run `/gflow:plan` for the current detailed plan.
28
+ See [PLAN.md](PLAN.md) or run `/gflow:status` for current task. Run `/gflow:plan <feature>` to create a new feature plan.
@@ -65,6 +65,21 @@ a different 401** — it occurs on a profile that *is* verified and *can* create
65
65
  projects, specifically on the `aisandbox-pa.googleapis.com` generation
66
66
  endpoint, a different surface from the `labs.google` tRPC API.
67
67
 
68
+ > **Related — L0 aisandbox Bearer auth (`feature/scene-add-clip`, 2026-05-31):**
69
+ > the `aisandbox-pa` 401 is NOT a SAPISIDHASH issue — live verification proved
70
+ > the real header is **`Authorization: Bearer ya29.<oauth>`** (the SPA's OAuth2
71
+ > access token, fetched from `GET /fx/api/auth/session`). `page.request` 401s
72
+ > because it sends cookies but not that token. The `gflow scene` groundwork now
73
+ > fetches+caches the token and attaches the Bearer to the **`page.request` REST
74
+ > path** (`_post_json` / `_patch_json`, host-scoped to `aisandbox-pa`) so
75
+ > `uploadImage` / `scenes` / `commit` authenticate — see
76
+ > [`docs/superpowers/plans/2026-05-31-l0-bearer-pivot.md`](docs/superpowers/plans/2026-05-31-l0-bearer-pivot.md).
77
+ > **Live-verified 2026-05-31:** REST `uploadImage` returns 200
78
+ > (`tests/e2e/test_aisandbox_auth_live.py`, credit-free).
79
+ > **Liberating follow-up:** the same Bearer likely unlocks the `evaluate_fetch`
80
+ > generation 401 above (and REST generation generally, modulo reCAPTCHA) —
81
+ > deferred, not yet applied to that transport.
82
+
68
83
  **Scope.** The 401 affects every image-generation path uniformly on the
69
84
  `evaluate_fetch` transport (the live one): `test_e2e_single_image_gen` (C2,
70
85
  pre-existing), `test_e2e_generate_image_without_project_id` (PR #20,
@@ -446,6 +461,93 @@ sample is captured.
446
461
 
447
462
  ---
448
463
 
464
+ ### `gflow video chain` re-exposes the i2v→t2v silent-route risk (issue #125)
465
+
466
+ - **Status:** Mitigated · **Severity:** Medium · **Affects:** `gflow video chain` (v0.12.0)
467
+
468
+ Every chain link after the first is an image-to-video (I2V) generation seeded by
469
+ the previous clip's last frame. The same silent-route defect that affects
470
+ `gflow video i2v` ([issue #125](https://github.com/ffroliva/gflow-cli/issues/125))
471
+ applies here: if the chosen model can't do i2v interpolation, Flow drops the
472
+ seed frame and routes the request to the plain text-to-video endpoint
473
+ (`batchAsyncGenerateVideoText`) — burning a credit for a text-only clip that
474
+ breaks continuity, with no error from Flow.
475
+
476
+ **Mitigation (two layers):**
477
+ 1. **Model pin.** `omni-flash` (the only model known to silently drop frames) is
478
+ removed from the chain `--model` choices, and the orchestrator rejects any
479
+ model whose `supports_i2v_interpolation()` is false **before any spend**
480
+ (`ModelModeIncompatibilityError`, exit 17).
481
+ 2. **Per-link wire-route abort.** For each seeded link the transport inspects the
482
+ captured generate-response URL; if it observes `batchAsyncGenerateVideoText`
483
+ for an i2v link it raises `WireFormatError` (logged
484
+ `ui_automation_video.i2v_routed_to_t2v`, issue #125) rather than reporting a
485
+ fake success. The chain aborts and preserves every link completed before the
486
+ failure (`ChainPartialError`).
487
+
488
+ **Workaround:** stick to the Veo 3.1 models (`veo-lite` / `veo-fast` /
489
+ `veo-quality` / `veo-lite-lp`); these are the only accepted chain models.
490
+
491
+ ---
492
+
493
+ ### `gflow video chain` continuity caveat — black / fade-out final frame
494
+
495
+ - **Status:** Open · **Severity:** Low · **Affects:** `gflow video chain` (v0.12.0)
496
+
497
+ Chain seeds each link with the **last frame** of the previous clip. If a clip
498
+ fades to black (or to a near-empty frame) at its very end — common with
499
+ cinematic prompts — the extracted seed frame is mostly black, so the next link
500
+ starts from black and continuity visibly breaks.
501
+
502
+ **Workaround:** pass `--seed-offset MS` to extract the seed frame a few hundred
503
+ milliseconds **before** end-of-file, skipping the fade. For example
504
+ `--seed-offset 200` seeds from 200 ms before EOF. Tune per the fade length of
505
+ your prompts.
506
+
507
+ ---
508
+
509
+ ### `gflow video chain` outputs N clips, not one file — auto-concat is deferred
510
+
511
+ - **Status:** Open (by design) · **Severity:** Low · **Affects:** `gflow video chain` (v0.12.0)
512
+
513
+ A chain produces **N separate mp4s** (one per link), not a single stitched
514
+ video. Auto-concatenation is deferred: Flow's server-side concatenation
515
+ (`runVideoFxConcatenation`, used by `gflow scene`) is **project-scoped** — every
516
+ clip must live in the same Flow project to be concatenated. But chain links are
517
+ *generated* sequentially and generation cannot pin all links to one shared
518
+ project, so there is no clip set the concat endpoint could combine at the end of
519
+ a chain run.
520
+
521
+ **Workaround:** stitch the link clips into one file with `gflow scene`
522
+ (server-side, credit-free, no ffmpeg) after the chain completes. The chain
523
+ prints its `chain_id` and a reminder to do this on success.
524
+
525
+ **Roadmap:** wiring chain links into a single Flow project so the chain can
526
+ auto-concat its own output is under consideration — tracked as backlog.
527
+
528
+ ---
529
+
530
+ ### `gflow video chain --resume-from` re-seeds the first resumed link as T2V
531
+
532
+ - **Status:** Open · **Severity:** Low · **Affects:** `gflow video chain` (v0.12.0)
533
+
534
+ `--resume-from <chain-id>` skips links already paid for in a prior run (they are
535
+ **not** re-billed) and continues from the first incomplete link. However, the
536
+ first resumed link is generated as a **text-to-video** link, not seeded from the
537
+ last frame of the last completed link — there is no cross-run seed-frame
538
+ hand-off yet. The resume is **credit-safe** (no double-billing), but visual
539
+ continuity restarts at the resume point: the first resumed clip will not flow
540
+ seamlessly from the clip before it.
541
+
542
+ **Workaround:** if seamless continuity across a resume boundary matters, re-run
543
+ the affected tail of the chain from scratch rather than resuming, or stitch with
544
+ `gflow scene` and accept the cut at the resume boundary.
545
+
546
+ **Roadmap:** persist and re-extract the boundary seed frame so a resumed link can
547
+ continue as a seeded I2V generation — tracked as backlog.
548
+
549
+ ---
550
+
449
551
  ## Mitigated
450
552
 
451
553
  ### Auth verification depends on Google's NextAuth session endpoint
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gflow-cli
3
- Version: 0.11.0
3
+ Version: 0.12.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
@@ -45,7 +45,11 @@ Requires-Dist: pydantic-settings>=2.5.0
45
45
  Requires-Dist: rich>=13.7.0
46
46
  Requires-Dist: structlog>=24.0.0
47
47
  Requires-Dist: tenacity>=8.2
48
+ Provides-Extra: chain
49
+ Requires-Dist: av>=12; extra == 'chain'
48
50
  Provides-Extra: dev
51
+ Requires-Dist: av>=12; extra == 'dev'
52
+ Requires-Dist: numpy>=1.24; extra == 'dev'
49
53
  Requires-Dist: pyright>=1.1.0; extra == 'dev'
50
54
  Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
51
55
  Requires-Dist: pytest>=8.0.0; extra == 'dev'
@@ -82,6 +86,7 @@ Description-Content-Type: text/markdown
82
86
  For Google AI Ultra / Pro subscribers with Veo credits and batch workloads:
83
87
 
84
88
  - **Burn credits efficiently** — `for p in $(cat prompts.txt); do gflow image t2i "$p"; done` _(image batching, plus `gflow video t2v`/`i2v`/`r2v`, all ship today)_
89
+ - **Reuse a subject across shots** — `gflow character create` mints a Flow **Character** (face + body reference) so the same person appears consistently from generation to generation
85
90
  - **Build pipelines** — wire Veo into your content automation, AI video stack, or batch experiments
86
91
  - **Stay in the terminal** — no Chromium UI, no clicking through dialogs (after a one-time `gflow auth login`)
87
92
 
@@ -101,6 +106,8 @@ gflow auth login --browser chrome
101
106
  gflow image t2i "a hot air balloon over Tokyo at sunrise"
102
107
  # or:
103
108
  gflow video t2v "Slow cinematic push-in on a sunlit forest clearing" --aspect 16:9
109
+ # or mint a reusable Character (face + body reference):
110
+ gflow character create --project <id> --name "Aria" --face-prompt "..." --body-prompt "..."
104
111
  ```
105
112
 
106
113
  Outputs land under `$GFLOW_CLI_OUTPUT_DIR` unless
@@ -132,6 +139,7 @@ Reproduce the recording: [`scripts/record_demo.ps1`](scripts/record_demo.ps1) (W
132
139
  |---|---|
133
140
  | 🎯 **Getting started** | [User Guide](docs/USER_GUIDE.md) · [Usage](docs/USAGE.md) · [Configuration](docs/CONFIGURATION.md) |
134
141
  | **Storage & catalog** | [External Storage](docs/EXTERNAL_STORAGE.md) · [Data Layer](docs/DATA_LAYER.md) |
142
+ | 🎭 **Characters** | [Characters](docs/CHARACTER.md) — reusable subjects (`gflow character`) |
135
143
  | 🔐 **Auth & sessions** | [Authentication](docs/AUTHENTICATION.md) · [Known issues](KNOWN_ISSUES.md) |
136
144
  | 🏗️ **Internals** | [Architecture](docs/ARCHITECTURE.md) · [Security](docs/SECURITY.md) · [Debugging](docs/DEBUGGING.md) |
137
145
  | 📦 **Releases** | [Changelog](CHANGELOG.md) · [Roadmap](ROADMAP.md) · [Release protocol](RELEASE.md) · [Project status](docs/PROJECT_STATUS.md) |
@@ -170,7 +178,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
170
178
 
171
179
  ## Project status
172
180
 
173
- **v0.11.0 — alpha.** Image (T2I / I2I / upload) + Video T2V / I2V / R2V live end-to-end on `ui_automation`, with a video `--model` picker (5 Veo models) + `--duration` / `--count`. v0.11.0 is a reliability release: it repairs `gflow video i2v` — on v0.10.0 every i2v run silently produced text-to-video output that ignored the start/end frames (issue #125) — fixes create-project generation when Flow's "Agent" composer mode is active, and hardens image-model selection for non-English Flow UIs (#94). New in v0.10.0: `--json` output across every generation command (`image t2i/i2i`, `video t2v/i2v/r2v`, `auth list`) plus a `gflow models` catalog so worker schedulers can drive the CLI machine-to-machine; per-model reference-image caps for `i2i`/`r2v`; profile Google-account identity persisted to disk (with auto-rename of the first-run `default` profile); external cloud storage (S3 / MinIO / GCS) via `GFLOW_CLI_STORAGE_URI`; and a `gflow data prune` maintenance command. Only video `batch` (manifest runner) is still queued for Phase B — use a shell for-loop until then ([USAGE](docs/USAGE.md#gflow-video-batch)). Full milestone history → [docs/PROJECT_STATUS.md](docs/PROJECT_STATUS.md). Changelog → [CHANGELOG.md](CHANGELOG.md). Where the project is heading → [ROADMAP.md](ROADMAP.md).
181
+ **v0.12.0 — alpha.** Three new capabilities. **`gflow character`** mints reusable, project-scoped Flow **Character** entities — a named subject with reference images, an optional voice, and an optional personality — so the same subject stays consistent across generations (`create` / `list` / `show` / `voices`, #145). **`gflow scene`** composes ordered clips into a scene and renders a credit-free, server-side **extended video** (no local ffmpeg). **`gflow video chain`** links last-frame image-to-video clips from a JSONL manifest into one continuous sequence. This release also fixes create-project generation when Flow surfaces Agent mode as a docked chat panel. Baseline: Image (T2I / I2I / upload) + Video T2V / I2V / R2V live end-to-end on `ui_automation`, with a video `--model` picker (5 Veo models) + `--duration` / `--count` (v0.11.0 repaired `gflow video i2v`, issue #125, and hardened image-model selection for non-English Flow UIs, #94; v0.10.0 added `--json` across every generation command, a `gflow models` catalog, per-model reference caps, persisted profile identity, external S3 / MinIO / GCS storage, and `gflow data prune`). Only video `batch` (manifest runner) is still queued for Phase B — use a shell for-loop until then ([USAGE](docs/USAGE.md#gflow-video-batch)). Full milestone history → [docs/PROJECT_STATUS.md](docs/PROJECT_STATUS.md). Changelog → [CHANGELOG.md](CHANGELOG.md). Where the project is heading → [ROADMAP.md](ROADMAP.md).
174
182
 
175
183
  ## License & legal
176
184
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  > **Status:** Living document. Updated as phases complete.
4
4
  > **Owner:** [@ffroliva](https://github.com/ffroliva)
5
- > **Last revised:** 2026-05-31 (v0.11.0 release — `gflow video i2v` silent-T2V fix + `veo-lite` default (#125), create-project fix under Flow's "Agent" composer mode, image-model selector cascade for non-English UIs (#94))
5
+ > **Last revised:** 2026-06-03 (v0.12.0 release — `gflow character` reusable Flow Character entities (#145), `gflow scene` Add Clip + credit-free server-side extended video, `gflow video chain` last-frame I2V chaining, create-project fix under Flow's Agent chat panel)
6
6
 
7
7
  This plan turns the v0.1 scaffold into a production-grade CLI for Google AI Ultra/Pro subscribers who want to spend their Flow credits via batch automation. The plan is opinionated, treating this repo as a portfolio-grade benchmark.
8
8
 
@@ -22,6 +22,7 @@
22
22
  For Google AI Ultra / Pro subscribers with Veo credits and batch workloads:
23
23
 
24
24
  - **Burn credits efficiently** — `for p in $(cat prompts.txt); do gflow image t2i "$p"; done` _(image batching, plus `gflow video t2v`/`i2v`/`r2v`, all ship today)_
25
+ - **Reuse a subject across shots** — `gflow character create` mints a Flow **Character** (face + body reference) so the same person appears consistently from generation to generation
25
26
  - **Build pipelines** — wire Veo into your content automation, AI video stack, or batch experiments
26
27
  - **Stay in the terminal** — no Chromium UI, no clicking through dialogs (after a one-time `gflow auth login`)
27
28
 
@@ -41,6 +42,8 @@ gflow auth login --browser chrome
41
42
  gflow image t2i "a hot air balloon over Tokyo at sunrise"
42
43
  # or:
43
44
  gflow video t2v "Slow cinematic push-in on a sunlit forest clearing" --aspect 16:9
45
+ # or mint a reusable Character (face + body reference):
46
+ gflow character create --project <id> --name "Aria" --face-prompt "..." --body-prompt "..."
44
47
  ```
45
48
 
46
49
  Outputs land under `$GFLOW_CLI_OUTPUT_DIR` unless
@@ -72,6 +75,7 @@ Reproduce the recording: [`scripts/record_demo.ps1`](scripts/record_demo.ps1) (W
72
75
  |---|---|
73
76
  | 🎯 **Getting started** | [User Guide](docs/USER_GUIDE.md) · [Usage](docs/USAGE.md) · [Configuration](docs/CONFIGURATION.md) |
74
77
  | **Storage & catalog** | [External Storage](docs/EXTERNAL_STORAGE.md) · [Data Layer](docs/DATA_LAYER.md) |
78
+ | 🎭 **Characters** | [Characters](docs/CHARACTER.md) — reusable subjects (`gflow character`) |
75
79
  | 🔐 **Auth & sessions** | [Authentication](docs/AUTHENTICATION.md) · [Known issues](KNOWN_ISSUES.md) |
76
80
  | 🏗️ **Internals** | [Architecture](docs/ARCHITECTURE.md) · [Security](docs/SECURITY.md) · [Debugging](docs/DEBUGGING.md) |
77
81
  | 📦 **Releases** | [Changelog](CHANGELOG.md) · [Roadmap](ROADMAP.md) · [Release protocol](RELEASE.md) · [Project status](docs/PROJECT_STATUS.md) |
@@ -110,7 +114,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
110
114
 
111
115
  ## Project status
112
116
 
113
- **v0.11.0 — alpha.** Image (T2I / I2I / upload) + Video T2V / I2V / R2V live end-to-end on `ui_automation`, with a video `--model` picker (5 Veo models) + `--duration` / `--count`. v0.11.0 is a reliability release: it repairs `gflow video i2v` — on v0.10.0 every i2v run silently produced text-to-video output that ignored the start/end frames (issue #125) — fixes create-project generation when Flow's "Agent" composer mode is active, and hardens image-model selection for non-English Flow UIs (#94). New in v0.10.0: `--json` output across every generation command (`image t2i/i2i`, `video t2v/i2v/r2v`, `auth list`) plus a `gflow models` catalog so worker schedulers can drive the CLI machine-to-machine; per-model reference-image caps for `i2i`/`r2v`; profile Google-account identity persisted to disk (with auto-rename of the first-run `default` profile); external cloud storage (S3 / MinIO / GCS) via `GFLOW_CLI_STORAGE_URI`; and a `gflow data prune` maintenance command. Only video `batch` (manifest runner) is still queued for Phase B — use a shell for-loop until then ([USAGE](docs/USAGE.md#gflow-video-batch)). Full milestone history → [docs/PROJECT_STATUS.md](docs/PROJECT_STATUS.md). Changelog → [CHANGELOG.md](CHANGELOG.md). Where the project is heading → [ROADMAP.md](ROADMAP.md).
117
+ **v0.12.0 — alpha.** Three new capabilities. **`gflow character`** mints reusable, project-scoped Flow **Character** entities — a named subject with reference images, an optional voice, and an optional personality — so the same subject stays consistent across generations (`create` / `list` / `show` / `voices`, #145). **`gflow scene`** composes ordered clips into a scene and renders a credit-free, server-side **extended video** (no local ffmpeg). **`gflow video chain`** links last-frame image-to-video clips from a JSONL manifest into one continuous sequence. This release also fixes create-project generation when Flow surfaces Agent mode as a docked chat panel. Baseline: Image (T2I / I2I / upload) + Video T2V / I2V / R2V live end-to-end on `ui_automation`, with a video `--model` picker (5 Veo models) + `--duration` / `--count` (v0.11.0 repaired `gflow video i2v`, issue #125, and hardened image-model selection for non-English Flow UIs, #94; v0.10.0 added `--json` across every generation command, a `gflow models` catalog, per-model reference caps, persisted profile identity, external S3 / MinIO / GCS storage, and `gflow data prune`). Only video `batch` (manifest runner) is still queued for Phase B — use a shell for-loop until then ([USAGE](docs/USAGE.md#gflow-video-batch)). Full milestone history → [docs/PROJECT_STATUS.md](docs/PROJECT_STATUS.md). Changelog → [CHANGELOG.md](CHANGELOG.md). Where the project is heading → [ROADMAP.md](ROADMAP.md).
114
118
 
115
119
  ## License & legal
116
120
 
@@ -23,9 +23,20 @@ These are non-negotiable. They override default agent behavior where conflicts e
23
23
  - **Back-merge `main → develop` after every release.** See the `release-back-merge-gap-recovery` runbook in agent memory.
24
24
  - **Enforce model-dependent reference caps.** Flow's R2V (reference-to-video) and I2I (image-to-image) reference image caps are model-dependent (Omni=7, Veo Lite/Fast=3, Quality=0). These MUST be enforced at both the Domain layer (`GenerateVideoRequest`) and the CLI layer. Use `reference_cap_for(model)` and include event-based tripwires in E2E tests.
25
25
 
26
+ ## Command surfaces
27
+
28
+ The `gflow` CLI exposes these command groups (full reference in [docs/USAGE.md](USAGE.md)):
29
+
30
+ - `gflow auth` — one-time Chrome login, status, logout.
31
+ - `gflow image` — `t2i` / `i2i` / `upload` (Imagen / Nano Banana).
32
+ - `gflow video` — `t2v` / `i2v` / `r2v` / `batch`, plus `chain` (last-frame I2V chaining from a JSONL manifest; link 0 is t2v, later links are i2v seeded by the previous clip's last frame; veo models only).
33
+ - `gflow character` — `create` / `list` / `show` / `voices`: reusable, project-scoped Flow Character entities (a named subject with reference images, optional voice and personality) for consistent subjects across generations. See [docs/CHARACTER.md](CHARACTER.md).
34
+ - `gflow scene` — `create` / `show`: compose ordered clips into a scene; `create --output` renders a credit-free server-side extended video via `runVideoFxConcatenation` (no local ffmpeg).
35
+ - `gflow data` — query the local SQLite catalog.
36
+
26
37
  ## Routing rules
27
38
 
28
- - **Starting a feature?** Run `/gflow:plan` first to see the active phase scope and definition of done.
39
+ - **Starting a feature?** Run `/gflow:status` to see the active phase scope, then `/gflow:predict` `/gflow:scenario` → `/gflow:plan <feature>` to create a task checklist.
29
40
  - **Touching auth, reCAPTCHA, browser flow, or anything previously flagged?** Run `/gflow:known-issues` first.
30
41
  - **Cutting a release?** Run `/gflow:release` — it sequences `/gflow:changelog`, `/gflow:check`, `/gflow:doc-review`.
31
42
  - **Before any commit:** Run `/gflow:check` (or the Impeccable Routine in AGENTS.md), including the documentation link gate.