gflow-cli 0.11.0__tar.gz → 0.13.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 (436) hide show
  1. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.claude/README.md +4 -1
  2. gflow_cli-0.13.0/.claude/commands/gflow/active.md +13 -0
  3. gflow_cli-0.13.0/.claude/commands/gflow/next.md +12 -0
  4. gflow_cli-0.13.0/.claude/commands/gflow/plan.md +22 -0
  5. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.claude/commands/gflow/predict.md +7 -1
  6. gflow_cli-0.13.0/.claude/commands/gflow/status.md +12 -0
  7. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.github/workflows/ci.yml +1 -1
  8. gflow_cli-0.13.0/.github/workflows/governance-advisory.yml +33 -0
  9. gflow_cli-0.13.0/.github/workflows/governance-benchmark.yml +29 -0
  10. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.gitignore +6 -0
  11. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/AGENTS.md +5 -4
  12. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/CHANGELOG.md +137 -2
  13. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/CLAUDE.md +3 -2
  14. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/GEMINI.md +3 -2
  15. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/KNOWN_ISSUES.md +102 -0
  16. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/PKG-INFO +14 -4
  17. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/PLAN.md +1 -1
  18. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/README.md +8 -2
  19. gflow_cli-0.13.0/docs/AGENT_GUIDE.md +134 -0
  20. gflow_cli-0.13.0/docs/CHARACTER.md +505 -0
  21. gflow_cli-0.13.0/docs/CHARACTER_RECON.md +147 -0
  22. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/CONFIGURATION.md +35 -0
  23. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/DATA_LAYER.md +0 -2
  24. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/DEVELOPMENT.md +1 -0
  25. gflow_cli-0.13.0/docs/GOVERNANCE_BENCHMARK.md +107 -0
  26. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/INDEX.md +14 -3
  27. gflow_cli-0.13.0/docs/LIVE_VERIFICATION_v0.12.0.md +85 -0
  28. gflow_cli-0.13.0/docs/LIVE_VERIFICATION_v0.13.0.md +60 -0
  29. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/PROJECT_STATUS.md +9 -2
  30. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/USAGE.md +270 -15
  31. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/USER_GUIDE.md +8 -7
  32. gflow_cli-0.13.0/docs/superpowers/character-scenario.md +140 -0
  33. gflow_cli-0.13.0/docs/superpowers/plans/2026-06-01-governance-enforcement-advisory/PLAN.md +271 -0
  34. gflow_cli-0.13.0/docs/superpowers/plans/2026-06-04-character-create-recording.md +428 -0
  35. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/llms.txt +2 -1
  36. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/pyproject.toml +24 -4
  37. gflow_cli-0.13.0/samples/captured/12_create_scene.json +6 -0
  38. gflow_cli-0.13.0/samples/captured/13_sceneWorkflows_update.json +6 -0
  39. gflow_cli-0.13.0/samples/captured/14_get_scene_workflows.json +6 -0
  40. gflow_cli-0.13.0/samples/captured/15_commit_flowWorkflow.json +6 -0
  41. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/ci/check_doc_links.py +1 -0
  42. gflow_cli-0.13.0/scripts/ci/check_materiality.py +192 -0
  43. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/ci/check_repo_hygiene.py +51 -0
  44. gflow_cli-0.13.0/scripts/dev/_recording_client.py +40 -0
  45. gflow_cli-0.13.0/scripts/dev/_spike_common.py +111 -0
  46. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/dev/active_plan.py +1 -1
  47. gflow_cli-0.13.0/scripts/dev/character_create_spike.py +344 -0
  48. gflow_cli-0.13.0/scripts/dev/character_create_spike_v2.py +499 -0
  49. gflow_cli-0.13.0/scripts/dev/dump_character_selectors.js +74 -0
  50. gflow_cli-0.13.0/scripts/dev/materiality_backtest.py +223 -0
  51. gflow_cli-0.13.0/scripts/dev/record_flow_capture.py +271 -0
  52. gflow_cli-0.13.0/scripts/dev/spike_char_editor_dom.py +237 -0
  53. gflow_cli-0.13.0/scripts/dev/spike_char_gen_capture.py +349 -0
  54. gflow_cli-0.13.0/scripts/dev/spike_patch_entity.py +244 -0
  55. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/skills/README.md +11 -1
  56. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/skills/gflow-cli/SKILL.md +58 -9
  57. gflow_cli-0.13.0/skills/plan/SKILL.md +215 -0
  58. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/skills/pr-council-review/SKILL.md +1 -0
  59. gflow_cli-0.13.0/skills/status/SKILL.md +99 -0
  60. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/__init__.py +1 -1
  61. gflow_cli-0.13.0/src/gflow_cli/api/_sapisidhash.py +15 -0
  62. gflow_cli-0.13.0/src/gflow_cli/api/character.py +261 -0
  63. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/client.py +708 -36
  64. gflow_cli-0.13.0/src/gflow_cli/api/routes.py +144 -0
  65. gflow_cli-0.13.0/src/gflow_cli/api/scene.py +172 -0
  66. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +1 -8
  67. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/ui_automation.py +516 -28
  68. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/ui_automation_video.py +106 -32
  69. gflow_cli-0.13.0/src/gflow_cli/chain.py +307 -0
  70. gflow_cli-0.13.0/src/gflow_cli/chain_manifest.py +138 -0
  71. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/cli.py +4 -0
  72. gflow_cli-0.13.0/src/gflow_cli/cli_character.py +459 -0
  73. gflow_cli-0.13.0/src/gflow_cli/cli_scene.py +239 -0
  74. gflow_cli-0.13.0/src/gflow_cli/cli_video.py +1090 -0
  75. gflow_cli-0.13.0/src/gflow_cli/data/chain_repo.py +128 -0
  76. gflow_cli-0.13.0/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +29 -0
  77. gflow_cli-0.13.0/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +5 -0
  78. gflow_cli-0.13.0/src/gflow_cli/data/migrations/0005_add_chain_links.sql +27 -0
  79. gflow_cli-0.13.0/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +5 -0
  80. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/data/models.py +53 -0
  81. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/data/recorder.py +310 -0
  82. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/data/repository.py +330 -4
  83. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/errors.py +125 -0
  84. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/json_output.py +13 -2
  85. gflow_cli-0.13.0/src/gflow_cli/media.py +120 -0
  86. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/paths.py +21 -0
  87. gflow_cli-0.13.0/src/gflow_cli/services/__init__.py +6 -0
  88. gflow_cli-0.13.0/src/gflow_cli/services/character_create.py +299 -0
  89. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tasks/lessons.md +1 -1
  90. gflow_cli-0.13.0/tests/api/fixtures/character_gen_response.json +54 -0
  91. gflow_cli-0.13.0/tests/api/fixtures/patch_entity_response.json +13 -0
  92. gflow_cli-0.13.0/tests/api/test_aisandbox_auth_error.py +25 -0
  93. gflow_cli-0.13.0/tests/api/test_aisandbox_auth_headers.py +120 -0
  94. gflow_cli-0.13.0/tests/api/test_bearer_redaction.py +74 -0
  95. gflow_cli-0.13.0/tests/api/test_character.py +402 -0
  96. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/test_client.py +31 -0
  97. gflow_cli-0.13.0/tests/api/test_client_character.py +307 -0
  98. gflow_cli-0.13.0/tests/api/test_client_delete_characters.py +52 -0
  99. gflow_cli-0.13.0/tests/api/test_client_generate_character.py +429 -0
  100. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/test_client_image.py +5 -5
  101. gflow_cli-0.13.0/tests/api/test_client_launch_kwargs.py +35 -0
  102. gflow_cli-0.13.0/tests/api/test_client_patch_entity.py +158 -0
  103. gflow_cli-0.13.0/tests/api/test_client_scene.py +241 -0
  104. gflow_cli-0.13.0/tests/api/test_post_json_aisandbox_auth.py +131 -0
  105. gflow_cli-0.13.0/tests/api/test_routes_character.py +41 -0
  106. gflow_cli-0.13.0/tests/api/test_routes_scene.py +47 -0
  107. gflow_cli-0.13.0/tests/api/test_sapisidhash_helper.py +14 -0
  108. gflow_cli-0.13.0/tests/api/test_scene_models.py +120 -0
  109. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/transports/test_ui_automation.py +131 -52
  110. gflow_cli-0.13.0/tests/api/transports/test_ui_character_editor.py +912 -0
  111. gflow_cli-0.13.0/tests/cli/test_cli_character.py +378 -0
  112. gflow_cli-0.13.0/tests/cli/test_cli_character_create.py +613 -0
  113. gflow_cli-0.13.0/tests/cli/test_cli_scene.py +160 -0
  114. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/cli/test_cli_video.py +203 -0
  115. gflow_cli-0.13.0/tests/cli/test_cli_video_chain.py +373 -0
  116. gflow_cli-0.13.0/tests/data/test_chain_repo.py +221 -0
  117. gflow_cli-0.13.0/tests/data/test_find_incomplete_character.py +217 -0
  118. gflow_cli-0.13.0/tests/data/test_models.py +24 -0
  119. gflow_cli-0.13.0/tests/data/test_recorder_character.py +254 -0
  120. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/data/test_repository.py +66 -10
  121. gflow_cli-0.13.0/tests/data/test_scene_persistence.py +148 -0
  122. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/data/test_store_migrations.py +1 -1
  123. gflow_cli-0.13.0/tests/dev/test_record_flow_capture.py +88 -0
  124. gflow_cli-0.13.0/tests/dev/test_recording_client.py +31 -0
  125. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/e2e/conftest.py +13 -4
  126. gflow_cli-0.13.0/tests/e2e/test_aisandbox_auth_live.py +72 -0
  127. gflow_cli-0.13.0/tests/e2e/test_chain_e2e.py +198 -0
  128. gflow_cli-0.13.0/tests/e2e/test_character_create_e2e.py +442 -0
  129. gflow_cli-0.13.0/tests/e2e/test_i2v_flags_e2e.py +256 -0
  130. gflow_cli-0.13.0/tests/e2e/test_scene_compose_live.py +103 -0
  131. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/e2e/test_transports_e2e.py +93 -1
  132. gflow_cli-0.13.0/tests/features/character_create.feature +34 -0
  133. gflow_cli-0.13.0/tests/features/character_read.feature +10 -0
  134. gflow_cli-0.13.0/tests/features/test_character_create_steps.py +288 -0
  135. gflow_cli-0.13.0/tests/features/test_character_read_steps.py +171 -0
  136. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/features/test_step_collision_guard.py +2 -0
  137. gflow_cli-0.13.0/tests/features/test_video_chain_steps.py +291 -0
  138. gflow_cli-0.13.0/tests/features/video_chain.feature +37 -0
  139. gflow_cli-0.13.0/tests/scripts/test_check_materiality.py +93 -0
  140. gflow_cli-0.13.0/tests/scripts/test_check_repo_hygiene.py +51 -0
  141. gflow_cli-0.13.0/tests/scripts/test_materiality_backtest.py +90 -0
  142. gflow_cli-0.13.0/tests/services/test_character_create_redaction.py +312 -0
  143. gflow_cli-0.13.0/tests/services/test_character_create_saga.py +442 -0
  144. gflow_cli-0.13.0/tests/services/test_character_gen_no_direct_post.py +243 -0
  145. gflow_cli-0.13.0/tests/smoke/__init__.py +0 -0
  146. gflow_cli-0.13.0/tests/test_chain.py +372 -0
  147. gflow_cli-0.13.0/tests/test_chain_manifest.py +243 -0
  148. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/test_errors.py +44 -0
  149. gflow_cli-0.13.0/tests/test_errors_403.py +19 -0
  150. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/test_marker_registry.py +1 -1
  151. gflow_cli-0.13.0/tests/test_media.py +158 -0
  152. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/test_paths.py +18 -0
  153. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/uv.lock +145 -26
  154. gflow_cli-0.11.0/.claude/commands/gflow/plan.md +0 -39
  155. gflow_cli-0.11.0/.planning/issue-125-fix.md +0 -207
  156. gflow_cli-0.11.0/.planning/todos/pending/2026-05-11-add-project-logo-and-docs-site-promotion-plan.md +0 -38
  157. gflow_cli-0.11.0/.planning/todos/pending/pr-38-review.md +0 -8
  158. gflow_cli-0.11.0/docs/AGENT_GUIDE.md +0 -47
  159. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-09-image-mvp-orchestration.md +0 -319
  160. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-09-image-mvp.md +0 -430
  161. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-09-video-mvp-orchestration.md +0 -387
  162. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-09-video-mvp.md +0 -2006
  163. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-10-phase-4-hardening-orchestration.md +0 -358
  164. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-10-phase-4-hardening.md +0 -2736
  165. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/2026-05-14-shell-multi-prompt-orchestration.md +0 -165
  166. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_FINAL_ARCH.md +0 -34
  167. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_FINAL_SEC_UX.md +0 -47
  168. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_REVIEW_CODE.md +0 -46
  169. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_REVIEW_GEMINI.md +0 -89
  170. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_REVIEW_SECURITY.md +0 -70
  171. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/IMPLEMENTATION_REVIEW_PYTHON.md +0 -37
  172. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/IMPLEMENTATION_REVIEW_SECURITY.md +0 -33
  173. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN.md +0 -1919
  174. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_CODE.md +0 -70
  175. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_FOLLOWUP.md +0 -36
  176. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_PLANNER.md +0 -66
  177. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_SECURITY.md +0 -70
  178. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_SECURITY_FOLLOWUP.md +0 -30
  179. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/COUNCIL_FINAL_SEC_UX_VERIFIED.md +0 -30
  180. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/COUNCIL_REVIEW_PLAN_SECURITY.md +0 -57
  181. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/COUNCIL_REVIEW_SPEC_SECURITY.md +0 -37
  182. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/PLAN.md +0 -69
  183. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/orchestration.md +0 -20
  184. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-17-e2e-test-coverage.md +0 -463
  185. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-17-issue-15-auth-verification-fix.md +0 -1449
  186. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-17-issue-15-i2v-bearer-auth.md +0 -811
  187. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-17-issue-15-orchestration.md +0 -118
  188. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-18-video-phase0-submit-spike.md +0 -697
  189. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-19-video-phase-a-execution-state.md +0 -64
  190. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-19-video-phase-a-orchestration.md +0 -164
  191. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-19-video-phase-a-t2v.md +0 -2083
  192. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-20-video-download-t2v-cli.md +0 -784
  193. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-21-multi-image-prompt-orchestration.md +0 -632
  194. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-21-multi-image-prompt.md +0 -2410
  195. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-22-pr-38-review.md +0 -107
  196. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-22-stay-mounted-batch-session-plan.md +0 -1907
  197. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-23-locale-agnostic-selectors.md +0 -108
  198. gflow_cli-0.11.0/docs/superpowers/plans/2026-05-24-data-layer.md +0 -2452
  199. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-10-phase-4-hardening-design.md +0 -484
  200. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-14-shell-multi-prompt-design.md +0 -497
  201. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-15-auth-login-real-chrome-design.md +0 -45
  202. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-17-e2e-test-coverage-design.md +0 -190
  203. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-17-i2v-uploadimage-401-bearer-auth-design.md +0 -330
  204. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-17-issue-15-auth-verification-fix-design.md +0 -485
  205. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-17-issue-15-root-cause-findings.md +0 -87
  206. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-18-ui-automation-video-generation-design.md +0 -739
  207. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-21-multi-image-prompt-design.md +0 -457
  208. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-22-pr-38-review-design.md +0 -40
  209. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-22-stay-mounted-batch-session-design.md +0 -389
  210. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-23-locale-agnostic-selectors.md +0 -66
  211. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-23-readme-v0.8.1-refresh-design.md +0 -359
  212. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-24-data-layer-design.md +0 -403
  213. gflow_cli-0.11.0/docs/superpowers/specs/2026-05-27-public-event-surface-design.md +0 -397
  214. gflow_cli-0.11.0/src/gflow_cli/api/routes.py +0 -64
  215. gflow_cli-0.11.0/src/gflow_cli/cli_video.py +0 -584
  216. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.claude/commands/gflow/branch-review.md +0 -0
  217. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.claude/commands/gflow/changelog.md +0 -0
  218. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.claude/commands/gflow/check.md +0 -0
  219. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.claude/commands/gflow/doc-review.md +0 -0
  220. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.claude/commands/gflow/known-issues.md +0 -0
  221. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  222. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.claude/commands/gflow/release.md +0 -0
  223. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.claude/commands/gflow/scenario.md +0 -0
  224. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.continue-here.md +0 -0
  225. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.env.template +0 -0
  226. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.gitattributes +0 -0
  227. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.github/CODEOWNERS +0 -0
  228. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  229. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.github/copilot-instructions.md +0 -0
  230. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.github/dependabot.yml +0 -0
  231. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.github/workflows/external-pr-triage.yml +0 -0
  232. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.github/workflows/release.yml +0 -0
  233. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.gitleaks.toml +0 -0
  234. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.pre-commit-config.yaml +0 -0
  235. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/.secrets.baseline +0 -0
  236. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/CONFIGURATION.md +0 -0
  237. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/CONTRIBUTING.md +0 -0
  238. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/DISCLAIMER.md +0 -0
  239. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/LICENSE +0 -0
  240. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/RELEASE.md +0 -0
  241. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/ROADMAP.md +0 -0
  242. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/conftest.py +0 -0
  243. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docker-compose.yml +0 -0
  244. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/ARCHITECTURE.md +0 -0
  245. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/AUTHENTICATION.md +0 -0
  246. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/DEBUGGING.md +0 -0
  247. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/DEMOS.md +0 -0
  248. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/E2E_TESTING.md +0 -0
  249. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/EXTERNAL_STORAGE.md +0 -0
  250. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/GITHUB.md +0 -0
  251. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  252. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  253. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  254. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  255. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  256. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  257. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  258. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  259. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  260. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/SECURITY.md +0 -0
  261. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/assets/demo-split-pf.gif +0 -0
  262. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/assets/example-run.gif +0 -0
  263. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/superpowers/2026-05-17-issue-15-handover.md +0 -0
  264. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/docs/superpowers/verifications/2026-05-11-phase-4-stage-g.md +0 -0
  265. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/examples/README.md +0 -0
  266. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/examples/batch_from_config.py +0 -0
  267. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/examples/multi_prompt_t2i.py +0 -0
  268. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/examples/sample_config.json +0 -0
  269. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/examples/sample_prompts.txt +0 -0
  270. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/examples/single_image_t2i.py +0 -0
  271. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/examples/workflow_chain.py +0 -0
  272. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/samples/README.md +0 -0
  273. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/samples/captured/01_upload_image.json +0 -0
  274. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  275. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  276. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/samples/captured/04_archive_workflow.json +0 -0
  277. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/samples/captured/05_createProject.json +0 -0
  278. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/samples/captured/06_batchGenerateImages.json +0 -0
  279. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  280. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  281. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  282. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  283. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  284. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/debug_editor.py +0 -0
  285. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/debug_gen_settings.py +0 -0
  286. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/debug_settings.py +0 -0
  287. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  288. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  289. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  290. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  291. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  292. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/dev/capture_locale_invariants.py +0 -0
  293. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  294. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/dev/monitor_pr_38.py +0 -0
  295. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/dev/skillopt/README.md +0 -0
  296. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/dev/skillopt/harness.py +0 -0
  297. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/dev/skillopt/tasks.json +0 -0
  298. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/diag_capture_flow_traffic.py +0 -0
  299. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/diag_recaptcha_mint.py +0 -0
  300. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/record_demo.ps1 +0 -0
  301. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/smoke_image.py +0 -0
  302. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/smoke_real_chrome_image.py +0 -0
  303. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/smoke_video_editor.py +0 -0
  304. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/smoke_worker_style.py +0 -0
  305. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/scripts/verify_chrome_auth_viability.py +0 -0
  306. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/skills/predict/SKILL.md +0 -0
  307. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/skills/scenario/SKILL.md +0 -0
  308. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/sonar-project.properties +0 -0
  309. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/__main__.py +0 -0
  310. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/_cli_helpers.py +0 -0
  311. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/__init__.py +0 -0
  312. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/_retry.py +0 -0
  313. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/dto.py +0 -0
  314. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/image.py +0 -0
  315. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/recaptcha.py +0 -0
  316. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/__init__.py +0 -0
  317. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/_common.py +0 -0
  318. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  319. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/base.py +0 -0
  320. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  321. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  322. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  323. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/api/video.py +0 -0
  324. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/auth/__init__.py +0 -0
  325. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/auth/base.py +0 -0
  326. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/auth/factory.py +0 -0
  327. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  328. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  329. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/auth/strategies.py +0 -0
  330. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/auth/verification.py +0 -0
  331. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/browser_manager.py +0 -0
  332. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/cli_data.py +0 -0
  333. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/cli_image.py +0 -0
  334. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/cli_models.py +0 -0
  335. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/cli_run.py +0 -0
  336. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/config.py +0 -0
  337. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/data/__init__.py +0 -0
  338. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  339. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  340. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  341. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/data/queries.py +0 -0
  342. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/data/redaction.py +0 -0
  343. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/data/store.py +0 -0
  344. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/exceptions.py +0 -0
  345. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/image_batch.py +0 -0
  346. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/manifest.py +0 -0
  347. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/observability.py +0 -0
  348. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/profile_store.py +0 -0
  349. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/src/gflow_cli/storage.py +0 -0
  350. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/test_assets/sample_batch.json +0 -0
  351. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/test_assets/sample_batch.tsv +0 -0
  352. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/test_assets/sample_batch_invalid.tsv +0 -0
  353. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/__init__.py +0 -0
  354. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/__init__.py +0 -0
  355. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/test_concurrency.py +0 -0
  356. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/test_dto.py +0 -0
  357. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/test_image.py +0 -0
  358. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/test_image_dto.py +0 -0
  359. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/test_recaptcha.py +0 -0
  360. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/test_retry.py +0 -0
  361. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/test_routes.py +0 -0
  362. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/test_video.py +0 -0
  363. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/transports/__init__.py +0 -0
  364. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/transports/test_base.py +0 -0
  365. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/transports/test_bearer.py +0 -0
  366. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/transports/test_common.py +0 -0
  367. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/transports/test_evaluate_fetch.py +0 -0
  368. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/transports/test_factory.py +0 -0
  369. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/transports/test_fingerprint.py +0 -0
  370. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/transports/test_sapisidhash.py +0 -0
  371. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/transports/test_transport_timeout.py +0 -0
  372. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  373. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  374. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  375. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/auth/strategies/test_factory.py +0 -0
  376. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/auth/strategies/test_strategies.py +0 -0
  377. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/auth/test_verification.py +0 -0
  378. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/cli/__init__.py +0 -0
  379. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/cli/test_cli_auth_list.py +0 -0
  380. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/cli/test_cli_data.py +0 -0
  381. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/cli/test_cli_image.py +0 -0
  382. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  383. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/cli/test_cli_models.py +0 -0
  384. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/cli/test_cli_run.py +0 -0
  385. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/cli/test_error_handling.py +0 -0
  386. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/cli/test_helpers.py +0 -0
  387. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  388. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/conftest.py +0 -0
  389. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/data/__init__.py +0 -0
  390. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/data/test_packaging.py +0 -0
  391. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/data/test_recorder.py +0 -0
  392. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/data/test_redaction.py +0 -0
  393. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/data/test_settings_and_errors.py +0 -0
  394. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/e2e/__init__.py +0 -0
  395. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  396. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  397. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  398. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  399. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/e2e/test_json_output_e2e.py +0 -0
  400. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  401. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  402. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  403. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/features/__init__.py +0 -0
  404. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/features/auth.feature +0 -0
  405. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/features/auth_login.feature +0 -0
  406. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/features/conftest.py +0 -0
  407. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/features/image.feature +0 -0
  408. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/features/test_auth_login_steps.py +0 -0
  409. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/features/test_auth_steps.py +0 -0
  410. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/features/test_image_steps.py +0 -0
  411. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/fixtures/__init__.py +0 -0
  412. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/fixtures/seeded_catalog.py +0 -0
  413. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/image_batch/__init__.py +0 -0
  414. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/image_batch/test_image_manifest.py +0 -0
  415. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/image_batch/test_observability_events.py +0 -0
  416. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/integration/__init__.py +0 -0
  417. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/integration/conftest.py +0 -0
  418. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/integration/constants.py +0 -0
  419. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/integration/test_storage_gcs.py +0 -0
  420. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/integration/test_storage_s3.py +0 -0
  421. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  422. {gflow_cli-0.11.0/tests/smoke → gflow_cli-0.13.0/tests/services}/__init__.py +0 -0
  423. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  424. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/smoke/test_real_flow.py +0 -0
  425. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/test_auth.py +0 -0
  426. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/test_browser_manager.py +0 -0
  427. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/test_cli_data.py +0 -0
  428. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/test_config.py +0 -0
  429. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/test_conftest_isolation.py +0 -0
  430. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/test_data_queries.py +0 -0
  431. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/test_documentation_gate.py +0 -0
  432. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/test_json_output.py +0 -0
  433. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/test_manifest.py +0 -0
  434. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/test_observability.py +0 -0
  435. {gflow_cli-0.11.0 → gflow_cli-0.13.0}/tests/test_profile_store.py +0 -0
  436. {gflow_cli-0.11.0 → gflow_cli-0.13.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.
@@ -21,7 +21,7 @@ jobs:
21
21
  fetch-depth: 0 # full history so gitleaks can diff against base
22
22
 
23
23
  - name: Run gitleaks
24
- uses: gitleaks/gitleaks-action@v2
24
+ uses: gitleaks/gitleaks-action@v3
25
25
  env:
26
26
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
27
27
 
@@ -0,0 +1,33 @@
1
+ name: Governance advisory
2
+
3
+ # Non-blocking governance signal: classifies touched paths (material vs routine)
4
+ # and surfaces a recommendation to run /gflow:predict + council review. It NEVER
5
+ # fails the build and is NOT a required check — mirrors the reference AI-DLC
6
+ # orchestrator's advisory-by-default risk gate. Hard enforcement (--block-on +
7
+ # branch protection) is a conscious, documented deferral.
8
+
9
+ on:
10
+ pull_request:
11
+
12
+ # Least privilege: the script writes to $GITHUB_STEP_SUMMARY (no token needed).
13
+ # read-only is sufficient; we do not post comments (which forks cannot do).
14
+ permissions:
15
+ contents: read
16
+
17
+ jobs:
18
+ materiality:
19
+ name: Materiality + traceability (advisory)
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - uses: actions/checkout@v6
23
+ with:
24
+ fetch-depth: 0 # full history so `git diff origin/<base>..HEAD` resolves
25
+
26
+ - name: Install uv
27
+ uses: astral-sh/setup-uv@v7
28
+
29
+ - name: Classify touched paths (advisory, never blocks)
30
+ run: |
31
+ git fetch --no-tags origin "${{ github.base_ref }}" || true
32
+ uv run python scripts/ci/check_materiality.py \
33
+ --base "origin/${{ github.base_ref }}"
@@ -0,0 +1,29 @@
1
+ name: Governance benchmark
2
+
3
+ # Periodic calibration of the advisory materiality gate. Replays git history and
4
+ # writes the false-positive / coverage report to the job summary. This is a
5
+ # DASHBOARD, not a gate: non-blocking, read-only, no token (fork-safe). See
6
+ # docs/GOVERNANCE_BENCHMARK.md.
7
+
8
+ on:
9
+ schedule:
10
+ - cron: "0 6 1 * *" # 06:00 UTC on the 1st of each month
11
+ workflow_dispatch: # manual run from the Actions tab
12
+
13
+ permissions:
14
+ contents: read
15
+
16
+ jobs:
17
+ backtest:
18
+ name: Materiality gate backtest
19
+ runs-on: ubuntu-latest
20
+ steps:
21
+ - uses: actions/checkout@v6
22
+ with:
23
+ fetch-depth: 0 # full history — the backtest replays every commit
24
+
25
+ - name: Install uv
26
+ uses: astral-sh/setup-uv@v7
27
+
28
+ - name: Run backtest (advisory; writes to job summary)
29
+ run: uv run python scripts/dev/materiality_backtest.py >> "$GITHUB_STEP_SUMMARY"
@@ -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/rm/voices — reusable project-scoped Flow Character entities), `gflow scene` (create/show — Add Clip / Scenes, with `create --output` for credit-free server-side extended video), 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,139 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.13.0] — 2026-06-04
11
+
12
+ ### Added
13
+
14
+ - **`gflow character rm` — delete a Character entity (#150).**
15
+ `gflow character rm --project <id> (--id <entityId> | --name <name>) [-y/--yes] [--json]`
16
+ deletes a Character via `POST flow:batchDeleteAssets` (Bearer; **FREE** — no
17
+ reCAPTCHA, no credit). Resolves by id or exact name (ambiguous name exits
18
+ **11**); prompts for confirmation unless `--yes`/`--json`.
19
+
20
+ - **In-project governance enforcement (advisory-first).** Made the AI-driven
21
+ development flow followable and partly machine-enforced in-repo, modeled on the
22
+ reference AI-DLC governance orchestrator's advisory-by-default behavior:
23
+ ruff `T20` now bans raw `print()` in `src/`; an advisory branch-naming check and a
24
+ non-blocking materiality + traceability classifier (`scripts/ci/check_materiality.py`
25
+ + `governance-advisory.yml`) recommend `/gflow:predict` + council review when
26
+ sensitive paths (`auth/`, `api/transports/`, `api/client.py`, `_sapisidhash.py`,
27
+ `data/`, `recaptcha`) are touched, without ever blocking a merge. A
28
+ history-replay backtest (`scripts/dev/materiality_backtest.py`) calibrates the
29
+ gate — it measured a 1.1% false-positive rate (vs. a 20-30% estimate) and
30
+ raised fix-coverage from 61% to 74% by surfacing auth-token plumbing that lived
31
+ outside `auth/`. The backtest is a first-class, repeatable artifact (`--json`
32
+ mode, a monthly `governance-benchmark.yml` dashboard job) fully documented in
33
+ [`docs/GOVERNANCE_BENCHMARK.md`](docs/GOVERNANCE_BENCHMARK.md); the gate itself is
34
+ described in
35
+ [`docs/AGENT_GUIDE.md` § Governance & Enforcement](docs/AGENT_GUIDE.md#governance--enforcement).
36
+
37
+ ### Changed
38
+
39
+ - **`gflow video i2v` frame flags aligned with Flow UI terminology (#122).**
40
+ `--initial-frame FILE` is the new canonical flag for the start image (matches
41
+ Flow's "initial frame" label). `--end-frame FILE` replaces `--end-image` as the
42
+ canonical end-frame flag. `--end-image` is kept as a **deprecated alias** (emits
43
+ `DeprecationWarning`; will be removed in a future minor release). The positional
44
+ `IMAGE` argument remains supported for back-compatibility.
45
+
46
+ ### Fixed
47
+
48
+ - **Character editor 404 on non-English locales (#153).** `gflow character`'s
49
+ editor URL interpolated the locale verbatim, so the genuine default BCP-47
50
+ `en-US` produced `/fx/en-US/…`, which 404s the Flow character editor (only the
51
+ short primary subtag is a valid `/fx/<seg>/` segment). `character_editor_url`
52
+ now normalizes a BCP-47 tag to its lower-cased short segment (`en-US → en`,
53
+ `pt-BR → pt`), so the tool stays language-agnostic with the real default
54
+ locale.
55
+
56
+ ## [0.12.0] — 2026-06-03
57
+
58
+ ### Fixed
59
+
60
+ - **Create-project generation failing when Flow opens the Agent _chat panel_.**
61
+ A follow-up to the earlier Agent-pill fix: Flow now also surfaces Agent mode as
62
+ a docked chat side-panel ("Untitled session") on some project opens, and while
63
+ it is up the in-composer Agent pill is absent from the DOM — so the pill-only
64
+ recovery could not find anything to click and generation still failed with
65
+ "mode-switch dropdown trigger not found". `_exit_agent_mode` now handles both
66
+ Agent shapes in one pass: it dismisses the chat panel (locale-stable, aria-free
67
+ structural close anchor) which reveals the pill, then turns the pill off,
68
+ looping until the media panel re-mounts. Keyed on the outcome (`crop_*` is
69
+ back), so it covers pill-only, panel-only, and panel-then-pill without assuming
70
+ which control is present.
71
+
72
+ ### Added
73
+
74
+ - **`gflow character` command group — reusable Flow Character entities (#145).**
75
+ Mint a project-scoped **Character** (a named subject with reference images, an
76
+ optional voice, and an optional personality) so the same subject appears
77
+ consistently across generations:
78
+ - `gflow character create --project <pid> --name <name> --face-prompt "…"
79
+ [--body-prompt "…"] [--voice <Name>] [--personality "…"]
80
+ [--model nano2|nanopro]` — two-step generation: a **face** reference (slot 0),
81
+ then a self-contained **front/side/back triptych body** (slot 1) seeded by the
82
+ generated face. gflow injects its own triptych instruction, so one body
83
+ generation yields all three angles. Characters have **no aspect-ratio
84
+ control** and exactly two models — `nano2` (Nano Banana 2, default) and
85
+ `nanopro` (Nano Banana Pro). Generated images are **downloaded** to local (or
86
+ cloud) storage; the signed `fifeUrl` is used only at download and never
87
+ persisted.
88
+ - `gflow character list --project <pid>` — list every Character in a project.
89
+ - `gflow character show --project <pid> (--id <entityId> | --name <name>)` —
90
+ show one Character; an ambiguous `--name` exits 11.
91
+ - `gflow character voices` — list the 29-name Gemini voice catalog
92
+ (name / description / sample-url); `--voice` is validated case-insensitively.
93
+
94
+ The credited generation rides Flow's own page JS in the character editor
95
+ (Option B, UI passive-capture — a self-assembled direct POST is reCAPTCHA-403
96
+ walled); the structural calls (createEntity, workflow/entity PATCH,
97
+ projectInitialData) are credit-free REST. Creation runs as a
98
+ **persist-before-spend, crash-recoverable saga**: the `entityId` and each
99
+ completed slot are recorded before/as credits are spent, so a crashed run
100
+ resumes without orphaning a paid generation or double-charging. Live-verified
101
+ end-to-end on 2026-06-02 (face + triptych body, both bound, downloaded, read
102
+ back). See [docs/CHARACTER.md](docs/CHARACTER.md).
103
+
104
+ - **`gflow video chain` — last-frame I2V chaining.** Render a JSONL manifest of
105
+ *links* into one continuous sequence: link 0 is a text-to-video generation,
106
+ and every later link is an image-to-video generation **seeded by the extracted
107
+ last frame of the previous clip**, giving visual continuity with no
108
+ server-side stitching. Each link is a sequential paid Veo generation (**one
109
+ credit per link**); a cost-confirmation gate (`-y`/`--yes` to skip),
110
+ `--dry-run` plan preview, `--max-links` cap (exit 11), and
111
+ `--resume-from <chain-id>` (skips already-paid links, no re-billing) make the
112
+ spend explicit and recoverable. Per-link wire-route checking aborts loudly if
113
+ Flow drops the seed frame and routes an i2v link to the text-only endpoint
114
+ (issue #125), so a misroute can never be reported as a successful chain.
115
+ Only the Veo 3.1 models (`veo-lite`/`veo-fast`/`veo-quality`/`veo-lite-lp`)
116
+ are accepted; `omni-flash` is rejected. Chain links are recorded locally
117
+ (SQLite migration `0005`) to drive `--resume-from`. The frame extractor uses
118
+ PyAV via a new optional **`[chain]`** extra (`pip install 'gflow-cli[chain]'`)
119
+ — no system ffmpeg required. Each link is saved as its own mp4; concatenating
120
+ the clips into one file is a separate step — use `gflow scene` (auto-concat is
121
+ deferred, see [KNOWN_ISSUES.md](KNOWN_ISSUES.md)).
122
+
123
+ - **`gflow scene` command group (Add Clip / Scenes).** Compose ordered,
124
+ trimmable video clips into a Flow **Scene** over the credit-free aisandbox
125
+ REST surface (no reCAPTCHA, no credits):
126
+ - `gflow scene create --project <pid> <workflowId>[:<start>-<end>] [...]` —
127
+ compose a scene from one or more existing clips (repeat an id to duplicate;
128
+ optional per-clip trim in seconds).
129
+ - `gflow scene show --scene <sid> --project <pid>` — read back a scene's clip
130
+ order and trims.
131
+ - `gflow scene create … --output extended.mp4` — render the composed scene
132
+ into a single **extended video** via Flow's server-side concatenation
133
+ (`runVideoFxConcatenation`) — credit-free, no reCAPTCHA, **no ffmpeg**. The
134
+ combined MP4 is fetched inline and written locally (or to the configured
135
+ cloud `storage_uri`). `--force` overwrites an existing output.
136
+
137
+ Scene compositions are recorded locally (SQLite migration `0003`) — including
138
+ each clip's media id + trims, and the rendered extended-video path (migration
139
+ `0004`) — so a compose survives a later render failure and the output is
140
+ discoverable for recovery. The append-to-existing-scene verb (`add-clip`) is
141
+ deferred — see the project backlog.
142
+
10
143
  ## [0.11.0] — 2026-05-31
11
144
 
12
145
  ### Changed
@@ -557,7 +690,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
557
690
  - `gflow image batch` now actually shares one Flow project across all
558
691
  prompts in a batch. Previously the `--same-project=1` flag was a no-op
559
692
  at the `ui_automation` transport layer; each prompt landed in its own
560
- Flow project. ([spec](docs/superpowers/specs/2026-05-22-stay-mounted-batch-session-design.md))
693
+ Flow project.
561
694
  - `gflow image t2i -n N` now makes one transport call using Flow's native
562
695
  xN count selector instead of fanning out N parallel single-image
563
696
  submissions. Closes [#14](https://github.com/ffroliva/gflow-cli/issues/14) part 1.
@@ -1269,7 +1402,9 @@ shell-script template that branches on these codes.
1269
1402
 
1270
1403
  First skeleton. Not functional end-to-end yet.
1271
1404
 
1272
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.11.0...HEAD
1405
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.13.0...HEAD
1406
+ [0.13.0]: https://github.com/ffroliva/gflow-cli/compare/v0.12.0...v0.13.0
1407
+ [0.12.0]: https://github.com/ffroliva/gflow-cli/compare/v0.11.0...v0.12.0
1273
1408
  [0.11.0]: https://github.com/ffroliva/gflow-cli/compare/v0.10.0...v0.11.0
1274
1409
  [0.10.0]: https://github.com/ffroliva/gflow-cli/compare/v0.9.1...v0.10.0
1275
1410
  [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.13.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,11 +45,15 @@ 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'
52
- Requires-Dist: ruff>=0.5.0; extra == 'dev'
56
+ Requires-Dist: ruff>=0.15.15; extra == 'dev'
53
57
  Provides-Extra: gcs
54
58
  Requires-Dist: gcsfs>=2024.2.0; extra == 'gcs'
55
59
  Requires-Dist: universal-pathlib>=0.2.5; extra == 'gcs'
@@ -77,11 +81,13 @@ Description-Content-Type: text/markdown
77
81
  >
78
82
  > 🌐 **Headed-browser today.** gflow drives Flow via a persistent Playwright Chromium profile — Google's auth + reCAPTCHA gates currently require it. See [Architecture & current limitations](#architecture--current-limitations) for the contributor opportunity.
79
83
 
84
+
80
85
  ## Why gflow-cli?
81
86
 
82
87
  For Google AI Ultra / Pro subscribers with Veo credits and batch workloads:
83
88
 
84
89
  - **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)_
90
+ - **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
91
  - **Build pipelines** — wire Veo into your content automation, AI video stack, or batch experiments
86
92
  - **Stay in the terminal** — no Chromium UI, no clicking through dialogs (after a one-time `gflow auth login`)
87
93
 
@@ -101,6 +107,8 @@ gflow auth login --browser chrome
101
107
  gflow image t2i "a hot air balloon over Tokyo at sunrise"
102
108
  # or:
103
109
  gflow video t2v "Slow cinematic push-in on a sunlit forest clearing" --aspect 16:9
110
+ # or mint a reusable Character (face + body reference):
111
+ gflow character create --project <id> --name "Aria" --face-prompt "..." --body-prompt "..."
104
112
  ```
105
113
 
106
114
  Outputs land under `$GFLOW_CLI_OUTPUT_DIR` unless
@@ -132,11 +140,13 @@ Reproduce the recording: [`scripts/record_demo.ps1`](scripts/record_demo.ps1) (W
132
140
  |---|---|
133
141
  | 🎯 **Getting started** | [User Guide](docs/USER_GUIDE.md) · [Usage](docs/USAGE.md) · [Configuration](docs/CONFIGURATION.md) |
134
142
  | **Storage & catalog** | [External Storage](docs/EXTERNAL_STORAGE.md) · [Data Layer](docs/DATA_LAYER.md) |
143
+ | 🎭 **Characters** | [Characters](docs/CHARACTER.md) — reusable subjects (`gflow character`) |
135
144
  | 🔐 **Auth & sessions** | [Authentication](docs/AUTHENTICATION.md) · [Known issues](KNOWN_ISSUES.md) |
136
- | 🏗️ **Internals** | [Architecture](docs/ARCHITECTURE.md) · [Security](docs/SECURITY.md) · [Debugging](docs/DEBUGGING.md) |
145
+ | 🏗️ **Internals** | [Architecture](docs/ARCHITECTURE.md) · [Security](docs/SECURITY.md) · [Debugging](docs/DEBUGGING.md) |
137
146
  | 📦 **Releases** | [Changelog](CHANGELOG.md) · [Roadmap](ROADMAP.md) · [Release protocol](RELEASE.md) · [Project status](docs/PROJECT_STATUS.md) |
138
147
  | 🤝 **Contributing** | [Contributing](CONTRIBUTING.md) · [Development](docs/DEVELOPMENT.md) · [GitHub workflow](docs/GITHUB.md) |
139
148
 
149
+
140
150
  ## For AI agents & LLMs
141
151
 
142
152
  gflow-cli ships three agent entry points — pick the one your tool reads first.
@@ -170,7 +180,7 @@ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (te
170
180
 
171
181
  ## Project status
172
182
 
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).
183
+ **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
184
 
175
185
  ## License & legal
176
186
 
@@ -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