gflow-cli 0.8.0__tar.gz → 0.8.1__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 (256) hide show
  1. gflow_cli-0.8.1/.claude/commands/gflow/doc-review.md +259 -0
  2. gflow_cli-0.8.1/AGENTS.md +78 -0
  3. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/CHANGELOG.md +17 -0
  4. gflow_cli-0.8.1/CLAUDE.md +27 -0
  5. gflow_cli-0.8.1/PKG-INFO +170 -0
  6. gflow_cli-0.8.1/README.md +116 -0
  7. gflow_cli-0.8.1/docs/AGENT_GUIDE.md +33 -0
  8. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/ARCHITECTURE.md +88 -4
  9. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/INDEX.md +7 -3
  10. gflow_cli-0.8.1/docs/LIVE_VERIFICATION_v0.8.1.md +46 -0
  11. gflow_cli-0.8.1/docs/PROJECT_STATUS.md +47 -0
  12. gflow_cli-0.8.1/llms.txt +28 -0
  13. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/pyproject.toml +1 -1
  14. gflow_cli-0.8.1/scripts/ci/check_doc_links.py +82 -0
  15. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/__init__.py +1 -1
  16. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/uv.lock +1 -1
  17. gflow_cli-0.8.0/.claude/commands/gflow/doc-review.md +0 -137
  18. gflow_cli-0.8.0/CLAUDE.md +0 -219
  19. gflow_cli-0.8.0/PKG-INFO +0 -451
  20. gflow_cli-0.8.0/README.md +0 -397
  21. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.claude/README.md +0 -0
  22. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.claude/commands/gflow/changelog.md +0 -0
  23. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.claude/commands/gflow/check.md +0 -0
  24. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.claude/commands/gflow/known-issues.md +0 -0
  25. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.claude/commands/gflow/plan.md +0 -0
  26. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.claude/commands/gflow/release.md +0 -0
  27. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.continue-here.md +0 -0
  28. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.env.template +0 -0
  29. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.gitattributes +0 -0
  30. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.github/CODEOWNERS +0 -0
  31. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  32. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.github/copilot-instructions.md +0 -0
  33. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.github/dependabot.yml +0 -0
  34. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.github/workflows/ci.yml +0 -0
  35. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.github/workflows/external-pr-triage.yml +0 -0
  36. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.github/workflows/release.yml +0 -0
  37. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.gitignore +0 -0
  38. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.gitleaks.toml +0 -0
  39. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.planning/todos/pending/2026-05-11-add-project-logo-and-docs-site-promotion-plan.md +0 -0
  40. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.planning/todos/pending/pr-38-review.md +0 -0
  41. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.pre-commit-config.yaml +0 -0
  42. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/.secrets.baseline +0 -0
  43. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/CONFIGURATION.md +0 -0
  44. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/CONTRIBUTING.md +0 -0
  45. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/DISCLAIMER.md +0 -0
  46. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/KNOWN_ISSUES.md +0 -0
  47. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/LICENSE +0 -0
  48. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/PLAN.md +0 -0
  49. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/RELEASE.md +0 -0
  50. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/AUTHENTICATION.md +0 -0
  51. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/CONFIGURATION.md +0 -0
  52. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/DEBUGGING.md +0 -0
  53. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/DEVELOPMENT.md +0 -0
  54. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/GITHUB.md +0 -0
  55. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  56. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  57. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  58. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/SECURITY.md +0 -0
  59. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/USAGE.md +0 -0
  60. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/USER_GUIDE.md +0 -0
  61. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/assets/example-run.gif +0 -0
  62. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/2026-05-17-issue-15-handover.md +0 -0
  63. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-09-image-mvp-orchestration.md +0 -0
  64. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-09-image-mvp.md +0 -0
  65. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-09-video-mvp-orchestration.md +0 -0
  66. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-09-video-mvp.md +0 -0
  67. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-10-phase-4-hardening-orchestration.md +0 -0
  68. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-10-phase-4-hardening.md +0 -0
  69. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/2026-05-14-shell-multi-prompt-orchestration.md +0 -0
  70. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_FINAL_ARCH.md +0 -0
  71. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_FINAL_SEC_UX.md +0 -0
  72. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_REVIEW_CODE.md +0 -0
  73. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_REVIEW_GEMINI.md +0 -0
  74. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/COUNCIL_REVIEW_SECURITY.md +0 -0
  75. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/IMPLEMENTATION_REVIEW_PYTHON.md +0 -0
  76. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/IMPLEMENTATION_REVIEW_SECURITY.md +0 -0
  77. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN.md +0 -0
  78. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_CODE.md +0 -0
  79. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_FOLLOWUP.md +0 -0
  80. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_PLANNER.md +0 -0
  81. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_SECURITY.md +0 -0
  82. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-14-shell-multi-prompt/PLAN_REVIEW_SECURITY_FOLLOWUP.md +0 -0
  83. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/COUNCIL_FINAL_SEC_UX_VERIFIED.md +0 -0
  84. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/COUNCIL_REVIEW_PLAN_SECURITY.md +0 -0
  85. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/COUNCIL_REVIEW_SPEC_SECURITY.md +0 -0
  86. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/PLAN.md +0 -0
  87. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-15-auth-login-real-chrome/orchestration.md +0 -0
  88. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-17-e2e-test-coverage.md +0 -0
  89. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-17-issue-15-auth-verification-fix.md +0 -0
  90. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-17-issue-15-i2v-bearer-auth.md +0 -0
  91. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-17-issue-15-orchestration.md +0 -0
  92. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-18-video-phase0-submit-spike.md +0 -0
  93. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-19-video-phase-a-execution-state.md +0 -0
  94. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-19-video-phase-a-orchestration.md +0 -0
  95. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-19-video-phase-a-t2v.md +0 -0
  96. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-20-video-download-t2v-cli.md +0 -0
  97. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-21-multi-image-prompt-orchestration.md +0 -0
  98. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-21-multi-image-prompt.md +0 -0
  99. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-22-pr-38-review.md +0 -0
  100. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/plans/2026-05-22-stay-mounted-batch-session-plan.md +0 -0
  101. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/specs/2026-05-10-phase-4-hardening-design.md +0 -0
  102. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/specs/2026-05-14-shell-multi-prompt-design.md +0 -0
  103. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/specs/2026-05-15-auth-login-real-chrome-design.md +0 -0
  104. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/specs/2026-05-17-e2e-test-coverage-design.md +0 -0
  105. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/specs/2026-05-17-i2v-uploadimage-401-bearer-auth-design.md +0 -0
  106. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/specs/2026-05-17-issue-15-auth-verification-fix-design.md +0 -0
  107. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/specs/2026-05-17-issue-15-root-cause-findings.md +0 -0
  108. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/specs/2026-05-18-ui-automation-video-generation-design.md +0 -0
  109. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/specs/2026-05-21-multi-image-prompt-design.md +0 -0
  110. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/specs/2026-05-22-pr-38-review-design.md +0 -0
  111. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/specs/2026-05-22-stay-mounted-batch-session-design.md +0 -0
  112. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/docs/superpowers/verifications/2026-05-11-phase-4-stage-g.md +0 -0
  113. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/examples/README.md +0 -0
  114. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/examples/batch_from_config.py +0 -0
  115. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/examples/multi_prompt_t2i.py +0 -0
  116. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/examples/sample_config.json +0 -0
  117. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/examples/sample_prompts.txt +0 -0
  118. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/examples/single_image_t2i.py +0 -0
  119. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/samples/README.md +0 -0
  120. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/samples/captured/01_upload_image.json +0 -0
  121. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  122. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  123. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/samples/captured/04_archive_workflow.json +0 -0
  124. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/samples/captured/05_createProject.json +0 -0
  125. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/samples/captured/06_batchGenerateImages.json +0 -0
  126. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  127. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  128. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  129. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  130. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  131. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/scripts/ci/check_repo_hygiene.py +0 -0
  132. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/scripts/debug_editor.py +0 -0
  133. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/scripts/debug_gen_settings.py +0 -0
  134. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/scripts/debug_settings.py +0 -0
  135. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/scripts/dev/active_plan.py +0 -0
  136. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/scripts/dev/monitor_pr_38.py +0 -0
  137. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/scripts/diag_capture_flow_traffic.py +0 -0
  138. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/scripts/diag_recaptcha_mint.py +0 -0
  139. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/scripts/record_demo.ps1 +0 -0
  140. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/scripts/smoke_image.py +0 -0
  141. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/scripts/smoke_real_chrome_image.py +0 -0
  142. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/scripts/smoke_video_editor.py +0 -0
  143. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/scripts/smoke_worker_style.py +0 -0
  144. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/scripts/verify_chrome_auth_viability.py +0 -0
  145. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/skills/README.md +0 -0
  146. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/skills/gflow-cli/SKILL.md +0 -0
  147. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/sonar-project.properties +0 -0
  148. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/__main__.py +0 -0
  149. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/_cli_helpers.py +0 -0
  150. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/__init__.py +0 -0
  151. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/_retry.py +0 -0
  152. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/client.py +0 -0
  153. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/dto.py +0 -0
  154. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/image.py +0 -0
  155. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/recaptcha.py +0 -0
  156. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/routes.py +0 -0
  157. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/transports/__init__.py +0 -0
  158. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/transports/_common.py +0 -0
  159. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  160. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/transports/base.py +0 -0
  161. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  162. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  163. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  164. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  165. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/transports/ui_automation.py +0 -0
  166. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/transports/ui_automation_video.py +0 -0
  167. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/api/video.py +0 -0
  168. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/auth/__init__.py +0 -0
  169. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/auth/base.py +0 -0
  170. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/auth/factory.py +0 -0
  171. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/auth/internal_chromium.py +0 -0
  172. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/auth/real_chrome.py +0 -0
  173. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/auth/strategies.py +0 -0
  174. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/auth/verification.py +0 -0
  175. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/browser_manager.py +0 -0
  176. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/cli.py +0 -0
  177. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/cli_image.py +0 -0
  178. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/cli_run.py +0 -0
  179. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/cli_video.py +0 -0
  180. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/config.py +0 -0
  181. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/errors.py +0 -0
  182. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/exceptions.py +0 -0
  183. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/image_batch.py +0 -0
  184. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/manifest.py +0 -0
  185. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/observability.py +0 -0
  186. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/paths.py +0 -0
  187. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/src/gflow_cli/profile_store.py +0 -0
  188. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tasks/lessons.md +0 -0
  189. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/test_assets/sample_batch.json +0 -0
  190. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/test_assets/sample_batch.tsv +0 -0
  191. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/test_assets/sample_batch_invalid.tsv +0 -0
  192. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/__init__.py +0 -0
  193. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/__init__.py +0 -0
  194. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/test_client.py +0 -0
  195. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/test_client_image.py +0 -0
  196. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/test_concurrency.py +0 -0
  197. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/test_dto.py +0 -0
  198. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/test_image.py +0 -0
  199. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/test_image_dto.py +0 -0
  200. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/test_recaptcha.py +0 -0
  201. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/test_retry.py +0 -0
  202. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/test_routes.py +0 -0
  203. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/test_video.py +0 -0
  204. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/transports/__init__.py +0 -0
  205. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/transports/test_base.py +0 -0
  206. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/transports/test_bearer.py +0 -0
  207. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/transports/test_common.py +0 -0
  208. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/transports/test_evaluate_fetch.py +0 -0
  209. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/transports/test_factory.py +0 -0
  210. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/transports/test_fingerprint.py +0 -0
  211. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/transports/test_sapisidhash.py +0 -0
  212. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/transports/test_ui_automation.py +0 -0
  213. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/transports/test_ui_automation_batch.py +0 -0
  214. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/transports/test_ui_automation_image_mode.py +0 -0
  215. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/api/transports/test_ui_automation_video.py +0 -0
  216. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/auth/strategies/test_factory.py +0 -0
  217. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/auth/strategies/test_strategies.py +0 -0
  218. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/auth/test_verification.py +0 -0
  219. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/cli/__init__.py +0 -0
  220. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/cli/test_cli_image.py +0 -0
  221. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/cli/test_cli_image_seed_removed.py +0 -0
  222. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/cli/test_cli_run.py +0 -0
  223. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/cli/test_cli_video.py +0 -0
  224. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/cli/test_error_handling.py +0 -0
  225. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/cli/test_helpers.py +0 -0
  226. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/cli/test_t2i_multi_prompt.py +0 -0
  227. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/conftest.py +0 -0
  228. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/e2e/__init__.py +0 -0
  229. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/e2e/conftest.py +0 -0
  230. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/e2e/test_auth_verification_e2e.py +0 -0
  231. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/e2e/test_image_batch_e2e.py +0 -0
  232. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/e2e/test_transports_e2e.py +0 -0
  233. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/e2e/test_video_t2v_e2e.py +0 -0
  234. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/features/__init__.py +0 -0
  235. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/features/auth.feature +0 -0
  236. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/features/auth_login.feature +0 -0
  237. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/features/conftest.py +0 -0
  238. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/features/image.feature +0 -0
  239. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/features/test_auth_login_steps.py +0 -0
  240. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/features/test_auth_steps.py +0 -0
  241. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/features/test_image_steps.py +0 -0
  242. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/features/test_step_collision_guard.py +0 -0
  243. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/image_batch/__init__.py +0 -0
  244. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/image_batch/test_image_manifest.py +0 -0
  245. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/image_batch/test_observability_events.py +0 -0
  246. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/smoke/__init__.py +0 -0
  247. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/smoke/test_real_flow.py +0 -0
  248. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/test_auth.py +0 -0
  249. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/test_browser_manager.py +0 -0
  250. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/test_config.py +0 -0
  251. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/test_errors.py +0 -0
  252. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/test_manifest.py +0 -0
  253. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/test_observability.py +0 -0
  254. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/test_paths.py +0 -0
  255. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/test_profile_store.py +0 -0
  256. {gflow_cli-0.8.0 → gflow_cli-0.8.1}/tests/test_smoke.py +0 -0
@@ -0,0 +1,259 @@
1
+ ---
2
+ description: Use before cutting any gflow-cli release or after a major documentation change — systematic council-driven audit that combines a mechanical 7-section checklist with a 3-agent parallel review (completeness / cross-reference / drift). Produces a consensus verdict and a concrete fix list.
3
+ ---
4
+
5
+ # `/gflow:doc-review` — Documentation Review Gate
6
+
7
+ Run this gate before cutting a release. Two phases:
8
+
9
+ 1. **Mechanical checks** (sections 1–7 below) — fast, scripted, deterministic. Run inline.
10
+ 2. **LLM council audit** (section 8) — 3 parallel review subagents, then consensus synthesis. The mechanical pass catches stale strings and dead links; the council catches drift between docs, fictional claims, and gaps a human reader would notice.
11
+
12
+ Every item reports **PASS / UPDATED / WARN / FAIL**. Any **FAIL** or any **RED** council verdict blocks the release.
13
+
14
+ > **Provenance:** the council protocol below was validated on the v0.8.1 docs refresh release (2026-05-23). The audit found 11 fixable issues that the mechanical checklist alone missed (e.g., the `experimental/` subpackage fiction in 3 files, the `gflow video i2v` non-working hero snippet in README). Keep the council step — it pays for itself.
15
+
16
+ ---
17
+
18
+ ## 0 · Pre-flight
19
+
20
+ - Confirm you are on the release branch (`release/vX.Y.Z` or `hotfix/...`), not on `develop` or `main`.
21
+ - If a release spec exists at `docs/superpowers/specs/YYYY-MM-DD-*-design.md`, identify it now — the council auditors will use it as the ground truth for "what was supposed to ship."
22
+ - If there is no spec, that is also fine — the council will work from the docs alone, but flag the absence as a process risk.
23
+
24
+ ---
25
+
26
+ ## 1 · Version references
27
+
28
+ Check these files for stale version strings (old numbers, outdated status labels):
29
+
30
+ | File | What to verify |
31
+ |---|---|
32
+ | `README.md` | Status badge, "Project status" section, install example |
33
+ | `AGENTS.md` | Module list, exit-code range, dev-environment commands |
34
+ | `llms.txt` | Header summary (Python version, stable surface claims) |
35
+ | `CLAUDE.md` | "Active phase" pointer if present |
36
+ | `PLAN.md` | Phase status (`IN PROGRESS` / `DONE`) and version annotations |
37
+ | `KNOWN_ISSUES.md` | `Open` entries resolved by this release → move to `Resolved` with evidence |
38
+ | `CHANGELOG.md` | `[Unreleased]` empty; link footer matches new version |
39
+ | `pyproject.toml` + `src/gflow_cli/__init__.py` | Both set to the new version |
40
+ | `docs/PROJECT_STATUS.md` | "Current release" subsection + milestone-history row for this version |
41
+
42
+ Quick grep:
43
+
44
+ ```bash
45
+ grep -rn "v[0-9]\+\.[0-9]" README.md AGENTS.md llms.txt CLAUDE.md PLAN.md KNOWN_ISSUES.md CHANGELOG.md pyproject.toml docs/PROJECT_STATUS.md
46
+ ```
47
+
48
+ Historical references in `CHANGELOG.md`, `docs/LIVE_VERIFICATION_v*.md`, and milestone-history rows in `docs/PROJECT_STATUS.md` are allowed.
49
+
50
+ ---
51
+
52
+ ## 2 · `docs/INDEX.md` completeness
53
+
54
+ Every `.md` in `docs/` needs an entry; every entry must point to a real file. AGENTS.md and llms.txt also need rows since they are agent-facing entry points.
55
+
56
+ ```bash
57
+ # Files in docs/ missing from INDEX.md
58
+ for f in docs/*.md; do
59
+ grep -q "$(basename "$f")" docs/INDEX.md || echo "MISSING from INDEX: $f"
60
+ done
61
+
62
+ # Entries in INDEX.md pointing to deleted files
63
+ grep -o 'docs/[^)]*\.md' docs/INDEX.md | while read path; do
64
+ [ -f "$path" ] || echo "DEAD LINK in INDEX: $path"
65
+ done
66
+
67
+ # AGENTS.md, llms.txt rows present?
68
+ grep -E "AGENTS\.md|llms\.txt" docs/INDEX.md || echo "MISSING: agent-facing root files row"
69
+ ```
70
+
71
+ ---
72
+
73
+ ## 3 · Per-release evidence file
74
+
75
+ After each release a `docs/LIVE_VERIFICATION_vX.Y.Z.md` must exist.
76
+
77
+ - Latest version has one (create stub if live run already documented elsewhere).
78
+ - `docs/INDEX.md` "latest release" cue points to it.
79
+ - Previous versions' files are preserved (historical record — never delete).
80
+ - File contains both a **Pre-tag gates** section (filled before signing) and a **Post-tag evidence** section (filled after publish).
81
+
82
+ ---
83
+
84
+ ## 4 · Doc-link validation
85
+
86
+ Run the link checker:
87
+
88
+ ```powershell
89
+ $env:PYTHONUTF8=1
90
+ uv run python scripts/ci/check_doc_links.py
91
+ ```
92
+
93
+ Expected: `All links resolved across N files.` (exit 0). Broken links must be fixed in source docs before continuing — do not edit the script to ignore them.
94
+
95
+ If `scripts/ci/check_doc_links.py` is absent, create it from the v0.8.1 plan (it is a 30-line stdlib-only Python script).
96
+
97
+ ---
98
+
99
+ ## 5 · `.claude/commands/gflow/` skill files
100
+
101
+ Scan all skills for stale phase/version references:
102
+
103
+ ```bash
104
+ grep -rn "v[0-9]\+\.[0-9]\|Phase [A-Z0-9]" .claude/commands/gflow/
105
+ ```
106
+
107
+ Update in the release prep commit if any references are wrong. The `release.md` skill's step list and the `plan.md` skill's phase pointers age fastest.
108
+
109
+ ---
110
+
111
+ ## 6 · CHANGELOG link footer
112
+
113
+ ```bash
114
+ tail -10 CHANGELOG.md
115
+ ```
116
+
117
+ Must read: `[Unreleased]: …compare/vNEW_VERSION…HEAD` and each prior `[X.Y.Z]: …compare/vPREV…vCURR`.
118
+
119
+ ---
120
+
121
+ ## 7 · Memory files
122
+
123
+ Check `C:\Users\ffrol\.claude\projects\C--development-github-gflow-cli\memory\`:
124
+
125
+ | File | What to verify |
126
+ |---|---|
127
+ | `MEMORY.md` | All listed files exist; no dangling entries |
128
+ | `phase-b-followups.md` | Items shipped in this release marked done |
129
+ | `video-generation-spec.md` | PR/status accurate |
130
+ | `image-generation-401-next.md` | Resolution status and evidence pointer still valid |
131
+ | `release-signing.md` | Procedure section matches what was actually done |
132
+ | `release-back-merge-gap-recovery.md` | Still relevant; gap from any prior release recorded |
133
+
134
+ ```bash
135
+ cd "C:\Users\ffrol\.claude\projects\C--development-github-gflow-cli\memory"
136
+ grep -o '\[.*\]([^)]*\.md)' MEMORY.md | grep -o '([^)]*)' | tr -d '()' | while read f; do
137
+ [ -f "$f" ] || echo "DEAD LINK: $f"
138
+ done
139
+ ```
140
+
141
+ ---
142
+
143
+ ## 8 · LLM council audit (NEW — required for every release ≥ v0.8.1)
144
+
145
+ The mechanical checks above catch stale strings, dead links, and missing files. They do **not** catch:
146
+
147
+ - A doc claiming a subpackage exists when it does not (no string sweep would notice).
148
+ - Two docs covering the same topic with subtly different facts.
149
+ - A working-looking hero snippet that points to a stub command (`gflow video i2v` returned "not yet available" but appeared as a production loop above the fold in v0.8.1).
150
+ - A user-facing onboarding gap that a fresh reader would hit immediately.
151
+
152
+ The council does. Dispatch three review subagents **in parallel** (they are read-only and independent). Each writes its verdict to `tmp/council/`.
153
+
154
+ ### Setup
155
+
156
+ ```bash
157
+ mkdir -p tmp/council
158
+ ```
159
+
160
+ ### Auditor 1 — Completeness
161
+
162
+ Role: as a fresh user / fresh AI agent, **what do you need that isn't there?**
163
+
164
+ Audit:
165
+ - `README.md`, `AGENTS.md`, `llms.txt`, `CLAUDE.md`, `docs/INDEX.md`, `docs/PROJECT_STATUS.md`
166
+ - `docs/ARCHITECTURE.md` (especially any new sections)
167
+ - `docs/LIVE_VERIFICATION_v*.md` (latest)
168
+ - `CHANGELOG.md` (just the new entry)
169
+ - `pyproject.toml`
170
+ - The release spec at `docs/superpowers/specs/` (if present)
171
+ - The implementation plan at `docs/superpowers/plans/` (if present)
172
+
173
+ Output to `tmp/council/01-completeness.md` with verdict GREEN / YELLOW / RED and four sections:
174
+ 1. Critical gaps (block release)
175
+ 2. Important gaps (fix before next release)
176
+ 3. Nice-to-haves (track for next version)
177
+ 4. What's done well (preserve)
178
+
179
+ ### Auditor 2 — Cross-reference & alignment
180
+
181
+ Role: do the docs **agree with each other**? Where two files cover the same topic, do they say the same thing?
182
+
183
+ Check:
184
+ - Install instructions, auth flow, headed-browser story, version number, Python requirement — all match exactly?
185
+ - Internal `[X](path)` links — files exist AND claims at the link target equivalent to the linking-doc's claim?
186
+ - Routing chain (README → AGENTS.md → CLAUDE.md → docs/INDEX.md) — consistent? Any contradictions?
187
+ - CHANGELOG vs PROJECT_STATUS — milestone history matches changelog entries?
188
+ - Spec vs implementation — does the shipped state match the design spec?
189
+
190
+ Output to `tmp/council/02-crossref.md` with verdict + four sections (inconsistencies / drift / broken anchors / well-aligned).
191
+
192
+ ### Auditor 3 — Drift & staleness
193
+
194
+ Role: does the documentation match the actual code and project state? **Where are claims unverifiable, contradicted by reality, or referencing things that no longer exist?**
195
+
196
+ Check empirically (every claim needs `ls` / `grep` / `cat` evidence cited inline):
197
+ - Version claims — `pyproject.toml`, `__init__.py`, every "v0.8.1 — alpha" statement agree?
198
+ - Module / file claims — every `src/gflow_cli/{...}` module list verified against the actual source tree?
199
+ - Subpackage claims (e.g., `experimental/`) — do those directories exist?
200
+ - CLI command claims in hero snippets — is the subcommand really implemented? Does it actually do what the example shows, or is it a stub?
201
+ - Exit-code claims — verify the range against `errors.py::EXIT_CODE_MAP`.
202
+ - Skill files, GIF assets, slash-command files — exist at the paths claimed?
203
+
204
+ Output to `tmp/council/03-drift.md` with verdict + three sections (fictional claims / stale references / verified-real).
205
+
206
+ ### Consensus
207
+
208
+ After all three reports return:
209
+
210
+ 1. Read all three. List every distinct finding.
211
+ 2. Tier the findings:
212
+ - **Tier 1 (release-blocking)** — any RED verdict, any "block release" finding, any fictional claim that ships to PyPI.
213
+ - **Tier 2 (important polish)** — drift between related docs, minor mismatches, missing-but-recoverable references.
214
+ - **Tier 3 (track for later)** — nice-to-haves, prose improvements, deferred features.
215
+ 3. Apply Tier 1 fixes immediately (block the release until done).
216
+ 4. Apply Tier 2 fixes if the release schedule permits, otherwise open issues.
217
+ 5. Tier 3 → backlog (memory `phase-X-followups.md` or a new GitHub issue).
218
+
219
+ Synthesize a single fix-plan comment under the relevant `LIVE_VERIFICATION_vX.Y.Z.md` `Pre-tag gates` entry for `/gflow:doc-review`:
220
+
221
+ > _Council verdict: <GREEN|YELLOW|RED> across all 3 auditors. <N> findings; <M> Tier 1 fixed in commit <SHA>, <K> Tier 2 fixed in commit <SHA2>, <J> Tier 3 deferred to backlog. Council reports at `tmp/council/0{1,2,3}-*.md` (local-only)._
222
+
223
+ If any auditor returns RED, **stop and escalate to the user**. Do not apply fixes blindly to a RED finding — it usually means the doc is wrong about the code, the code is wrong about the doc, or both.
224
+
225
+ ---
226
+
227
+ ## Output format
228
+
229
+ After each section write one line:
230
+
231
+ ```
232
+ [0] Pre-flight — PASS (release spec at docs/superpowers/specs/YYYY-MM-DD-*.md)
233
+ [1] Version refs — PASS
234
+ [2] INDEX completeness — UPDATED (added AGENTS.md row)
235
+ [3] Evidence file — PASS
236
+ [4] Doc-link check — PASS (9 files, 0 broken)
237
+ [5] Skill files — UPDATED (refreshed /gflow:plan phase pointer)
238
+ [6] CHANGELOG footer — PASS
239
+ [7] Memory files — WARN: phase-b-followups.md has shipped items not yet ticked
240
+ [8] Council audit — YELLOW (11 findings, all fixed in commit abc1234)
241
+ ```
242
+
243
+ Then list every **UPDATED** change, every **WARN** / **FAIL** finding, and the council fix list for the user to review.
244
+
245
+ ---
246
+
247
+ ## Integration with `/gflow:release`
248
+
249
+ This skill is invoked at **step 9** of `/gflow:release` (between "review commands for staleness" and "commit the release prep"). The mechanical pass (sections 1–7) is the same as before; the council audit (section 8) is the new requirement and runs after the mechanical pass succeeds.
250
+
251
+ All discovered fixes are folded into the release prep commit unless genuinely unrelated to the release.
252
+
253
+ ---
254
+
255
+ ## Post-release: memory consolidation
256
+
257
+ After the release ships and the back-merge completes, the **release spec** and **implementation plan** under `docs/superpowers/{specs,plans}/` are project-management artifacts, not user-facing docs. The durable knowledge they contain (patterns learned, governance rules, architecture decisions) should be extracted into project memory at `~/.claude/projects/<...>/memory/`, then the spec/plan files **deleted from the repo** in a final cleanup commit.
258
+
259
+ This keeps the public-facing `docs/` tree focused on what users and contributors need, while the planning artifacts live on as memory entries usable by future Claude Code sessions. See the `release-back-merge-gap-recovery` memory and the v0.8.1 release commit history for an example.
@@ -0,0 +1,78 @@
1
+ # AGENTS.md — gflow-cli
2
+
3
+ > Universal entry point for AI coding agents. Read this first; everything else routes from here.
4
+
5
+ Supported tools that auto-discover this file: Cursor, Codex, Aider, Gemini CLI, Jules, Devin, Windsurf, Zed, Warp, opencode, RooCode, Amp, Junie, Phoenix, GitHub Copilot, VS Code, Factory, Augment, Semgrep, Kilo Code, UiPath. Claude Code reads [CLAUDE.md](CLAUDE.md), which cross-references this file.
6
+
7
+ ## Project at a glance
8
+
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
+ - 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_image.py`, `cli_run.py`, `cli_video.py`, `config.py`, `errors.py`, `exceptions.py`, `image_batch.py`, `manifest.py`, `observability.py`, `paths.py`, `profile_store.py`.
12
+ - Requires a Google AI Ultra or Pro subscription with Flow access. All generations bill against the user's own Google account.
13
+
14
+ ## Headed-browser dependency (architectural reality)
15
+
16
+ gflow-cli currently drives Flow via a **real Chrome session managed by Playwright** — `ui_automation` transport. Google's auth + reCAPTCHA stack rejects Playwright's bundled Chromium and most headless approaches. This is the project's defining trade-off:
17
+
18
+ - ✅ Works end-to-end against live Pro/Ultra accounts.
19
+ - ❌ Requires a saved Chrome profile, a display server for one-time login, and ~150 MB for Chromium.
20
+ - ❌ Cannot run on serverless / headless CI workers without prerecorded profile transplant.
21
+ - ❌ Per-account horizontal concurrency is capped by what one warm Page pool can drive.
22
+
23
+ If you can help unblock a pure HTTP transport (especially for video generation, where HTTP 401 + reCAPTCHA mints currently block us), please open an issue — see the README "Architecture & current limitations" section.
24
+
25
+ ## Dev environment tips
26
+
27
+ - `uv sync` then `uv run playwright install chromium`. No global Python install needed.
28
+ - Copy `.env.template` to `.env.local`; never commit `.env.local`. It documents every env var.
29
+ - Output goes to `./tmp/` for scripts/tests or `$GFLOW_CLI_OUTPUT_DIR` for CLI outputs (defaults to `./out/`).
30
+ - 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
+
33
+ ## Testing instructions — The Impeccable Routine
34
+
35
+ Run these gates in order before every commit:
36
+
37
+ ```powershell
38
+ $env:PYTHONUTF8=1
39
+ uv run python scripts/ci/check_repo_hygiene.py
40
+ uv run ruff check src tests
41
+ uv run ruff format --check src tests
42
+ uv run pyright src
43
+ uv run python -m pytest -q --cov=gflow_cli
44
+ ```
45
+
46
+ Or invoke the wrapper: `/gflow:check`.
47
+
48
+ - Use `pytest -m "not live and not e2e"` locally; full suite OOMs on small dev machines. Scope to changed dirs; trust CI for the full sweep.
49
+ - TDD is non-negotiable. Coverage floor: 80% overall.
50
+ - Live tests (`@pytest.mark.live`) opt in via `GFLOW_LIVE=1`. E2E tests require `GFLOW_CLI_E2E_PROFILE`.
51
+
52
+ ## Code style
53
+
54
+ - Type hints everywhere; `pyright` strict on `src/gflow_cli`.
55
+ - Structured logging only (`structlog`) — **never** raw `print()` or `import logging` in `src/`.
56
+ - Errors as RFC 9457 Problem Details with stable per-class exit codes (3–15). See `src/gflow_cli/errors.py::EXIT_CODE_MAP` for the complete mapping.
57
+ - 100-char line length, `ruff` configured. Imports sorted by `ruff` (isort rules).
58
+
59
+ ## PR instructions
60
+
61
+ - Branch naming: `feature/`, `bugfix/`, `hotfix/`, `chore/`, `docs/`, `test/`, `release/` — never `claude/` or unprefixed.
62
+ - `develop` is the integration branch; `main` is protected. Releases tag off `main` only.
63
+ - **Never add AI attribution to commit messages.** `Co-Authored-By:` trailers are fine if the user asks for them; auto-generated "🤖 Generated with Claude Code" footers are not.
64
+ - Run `/gflow:check` (or the Impeccable Routine) before every commit.
65
+ - All releases require a signed annotated tag (`git tag -s vX.Y.Z`); CI rejects unsigned tags.
66
+
67
+ ## Where to look next
68
+
69
+ - **Architecture & target shape** → [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)
70
+ - **Mandates & routing rules** → [docs/AGENT_GUIDE.md](docs/AGENT_GUIDE.md)
71
+ - **Full docs index** → [docs/INDEX.md](docs/INDEX.md)
72
+ - **Known issues** (read before touching auth / reCAPTCHA) → [KNOWN_ISSUES.md](KNOWN_ISSUES.md)
73
+ - **Active phase & backlog** → [PLAN.md](PLAN.md) or run `/gflow:plan`
74
+ - **Release protocol** → [RELEASE.md](RELEASE.md)
75
+
76
+ ## Claude Code-specific notes
77
+
78
+ [CLAUDE.md](CLAUDE.md) carries the auto-load instructions Claude Code reads natively. It cross-references this file for the universal rules; Claude-Code-specific session protocol (skills, slash commands, memory) stays in CLAUDE.md.
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.8.1] — 2026-05-23
11
+
12
+ ### Documentation
13
+
14
+ - README rewritten as a hybrid router (~150 lines, was 398). New: prominent unofficial-tool + headed-browser callouts above the fold, polished 60-second quick start, in-depth-quick-start link, "For AI agents & LLMs" routing table, ripgrep-style documentation TOC.
15
+ - New [AGENTS.md](AGENTS.md) at repo root — universal agent spec consumed by 60k+ repos' tooling (Cursor, Codex, Aider, Gemini CLI, Claude Code, Copilot, opencode, etc.). Closes the gap left by having Claude-Code-only memory.
16
+ - New [llms.txt](llms.txt) at repo root — llmstxt.org-format summary for end-users feeding the project into an LLM. Forward-staged for a future docs site.
17
+ - New [docs/PROJECT_STATUS.md](docs/PROJECT_STATUS.md) — moved the full milestone table out of README; added lifecycle policy section.
18
+ - [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) absorbed the ASCII system diagram + Auth strategy paragraphs from README; gained a new "Headed-browser dependency — current limitation" subsection that documents the three retired HTTP transports and invites contributor work on a pure-REST path.
19
+ - [CLAUDE.md](CLAUDE.md) trimmed from ~80 to ~25 lines; universal coding-agent rules now live in AGENTS.md, with CLAUDE.md carrying Claude-Code-specific session protocol only.
20
+ - All `v0.7.0` references that meant "current" updated to `v0.8.1`. Historical mentions preserved in CHANGELOG and `docs/LIVE_VERIFICATION_v0.7.0.md`.
21
+ - New per-release evidence file [docs/LIVE_VERIFICATION_v0.8.1.md](docs/LIVE_VERIFICATION_v0.8.1.md).
22
+
23
+ ### Released
24
+
25
+ - PyPI: https://pypi.org/project/gflow-cli/0.8.1/ — refreshes the stale README rendering left over from v0.8.0.
26
+
10
27
  ## [0.8.0] — 2026-05-23
11
28
 
12
29
  > **Multi-image-prompt release + transport hardening.** Introduces the
@@ -0,0 +1,27 @@
1
+ # CLAUDE.md
2
+
3
+ > Project memory hub for **Claude Code**. The universal coding-agent rules for any tool (Cursor, Codex, Aider, Gemini CLI, etc.) live in [AGENTS.md](AGENTS.md) — this file carries Claude-Code-specific session protocol only.
4
+
5
+ ## What this project is
6
+
7
+ `gflow-cli` is an unofficial Python CLI that drives [Google Flow](https://labs.google/fx/tools/flow) (Veo image-to-video, Imagen text-to-image) from the terminal by reverse-engineering Flow's private REST API. See [README.md](README.md) for the user-facing overview.
8
+
9
+ ## On every session start
10
+
11
+ 1. Read **[AGENTS.md](AGENTS.md)** — universal rules every agent must follow.
12
+ 2. Read **[docs/INDEX.md](docs/INDEX.md)** — routing layer for all project docs and commands.
13
+ 3. Pull deeper context on demand:
14
+ - Starting a feature → `/gflow:plan`
15
+ - Touching auth or reCAPTCHA → `/gflow:known-issues`
16
+ - Cutting a release → `/gflow:release`
17
+ - Before any commit → `/gflow:check`
18
+
19
+ ## Claude-Code-specific
20
+
21
+ - Slash commands live under `.claude/commands/gflow/` (all prefixed `/gflow:`).
22
+ - Skills under `skills/` are auto-discoverable; `gflow-cli` ships its own at [`skills/gflow-cli/SKILL.md`](skills/gflow-cli/SKILL.md).
23
+ - Auto-memory at `~/.claude/projects/C--development-github-gflow-cli/memory/MEMORY.md` carries cross-session feedback and project state.
24
+
25
+ ## Active phase
26
+
27
+ See [PLAN.md](PLAN.md) or run `/gflow:plan` for the current detailed plan.
@@ -0,0 +1,170 @@
1
+ Metadata-Version: 2.4
2
+ Name: gflow-cli
3
+ Version: 0.8.1
4
+ Summary: Unofficial CLI for Google Flow — drive Veo image-to-video generations from the terminal.
5
+ Project-URL: Homepage, https://github.com/ffroliva/gflow-cli
6
+ Project-URL: Issues, https://github.com/ffroliva/gflow-cli/issues
7
+ Author-email: Flavio Oliva <ffroliva@gmail.com>
8
+ License: MIT License
9
+
10
+ Copyright (c) 2026 Flavio Oliva (ffroliva)
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+ License-File: LICENSE
30
+ Keywords: ai,cli,flow,google,veo,video
31
+ Classifier: Development Status :: 3 - Alpha
32
+ Classifier: Environment :: Console
33
+ Classifier: Intended Audience :: Developers
34
+ Classifier: License :: OSI Approved :: MIT License
35
+ Classifier: Programming Language :: Python :: 3.11
36
+ Classifier: Programming Language :: Python :: 3.12
37
+ Classifier: Programming Language :: Python :: 3.13
38
+ Classifier: Topic :: Multimedia :: Video
39
+ Requires-Python: >=3.11
40
+ Requires-Dist: click>=8.1.0
41
+ Requires-Dist: httpx>=0.27.0
42
+ Requires-Dist: platformdirs>=4.0.0
43
+ Requires-Dist: playwright>=1.45.0
44
+ Requires-Dist: pydantic-settings>=2.5.0
45
+ Requires-Dist: rich>=13.7.0
46
+ Requires-Dist: structlog>=24.0.0
47
+ Requires-Dist: tenacity>=8.2
48
+ Provides-Extra: dev
49
+ Requires-Dist: pyright>=1.1.0; extra == 'dev'
50
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
51
+ Requires-Dist: pytest>=8.0.0; extra == 'dev'
52
+ Requires-Dist: ruff>=0.5.0; extra == 'dev'
53
+ Description-Content-Type: text/markdown
54
+
55
+ # gflow-cli
56
+
57
+ > **Unofficial Python CLI for Google Flow.** Drive [Veo](https://labs.google/fx/tools/flow) (image-to-video, text-to-video) and Imagen (text-to-image) generations from your terminal — scripted, batched, pipeline-friendly.
58
+
59
+ [![PyPI version](https://img.shields.io/pypi/v/gflow-cli.svg)](https://pypi.org/project/gflow-cli/)
60
+ [![CI](https://github.com/ffroliva/gflow-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/ffroliva/gflow-cli/actions/workflows/ci.yml)
61
+ [![Python versions](https://img.shields.io/pypi/pyversions/gflow-cli.svg)](https://pypi.org/project/gflow-cli/)
62
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
63
+ [![Status: alpha](https://img.shields.io/badge/status-alpha-orange.svg)](docs/PROJECT_STATUS.md)
64
+
65
+ > ⚠️ **Unofficial. Reverse-engineered. Not affiliated with Google.** Endpoints can change at any time. Full [DISCLAIMER](DISCLAIMER.md).
66
+ >
67
+ > 🌐 **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.
68
+
69
+ ## Why gflow-cli?
70
+
71
+ For Google AI Ultra / Pro subscribers with Veo credits and batch workloads:
72
+
73
+ - **Burn credits efficiently** — `for p in $(cat prompts.txt); do gflow image t2i "$p"; done` _(image batching ships today; `gflow video i2v` lands in Phase B)_
74
+ - **Build pipelines** — wire Veo into your content automation, AI video stack, or batch experiments
75
+ - **Stay in the terminal** — no Chromium UI, no clicking through dialogs (after a one-time `gflow auth login`)
76
+
77
+ Same Veo + Imagen models, same quality, same Ultra/Pro billing — programmatic.
78
+
79
+ ## 60-second quick start
80
+
81
+ ```bash
82
+ # 1 · Install (uv recommended — also: pip install gflow-cli)
83
+ uv tool install gflow-cli
84
+ uv tool run --from gflow-cli playwright install chromium # one-time, ~150 MB
85
+
86
+ # 2 · Authenticate (one-time, opens a real Chrome window)
87
+ gflow auth login --browser chrome
88
+
89
+ # 3 · Generate
90
+ gflow image t2i "a hot air balloon over Tokyo at sunrise"
91
+ # or:
92
+ gflow video t2v "Slow cinematic push-in on a sunlit forest clearing" --aspect 16:9
93
+ ```
94
+
95
+ Outputs land under `./out/` (or `$GFLOW_CLI_OUTPUT_DIR`). First call is ~30–90 s while Chromium warms; subsequent calls reuse the warm session.
96
+
97
+ > **Why `--browser chrome`?** Google rejects Playwright's bundled Chromium. The CLI fails fast with a friendly error (`AuthBrowserRejectedError`, exit code 14) if you pick anything else.
98
+
99
+ ## In-depth quick start
100
+
101
+ See **[USER_GUIDE — Journey 1: First-time setup](docs/USER_GUIDE.md#journey-1--first-time-setup-10-minutes)** for the 10-minute walkthrough with troubleshooting, multi-account setup, and the structured-log primer.
102
+
103
+ ## Demo
104
+
105
+ ![gflow image t2i — single 9:16 prompt, streaming structlog output, PNG on disk](docs/assets/example-run.gif)
106
+
107
+ *A single `gflow image t2i "..." --aspect 9:16 --model nano2` call against a logged-in Pro/Ultra profile. Terminal shows the streaming `structlog` JSON for the run, the final `ls` of the written PNG, and nothing else — Chromium drives the Flow editor silently in the background.*
108
+
109
+ Reproduce the recording: [`scripts/record_demo.ps1`](scripts/record_demo.ps1) (Windows + OBS + ffmpeg + gifski).
110
+
111
+ ## Documentation
112
+
113
+ [**docs/INDEX.md**](docs/INDEX.md) is the master routing layer. Quick links:
114
+
115
+ | Topic | Read |
116
+ |---|---|
117
+ | 🎯 **Getting started** | [User Guide](docs/USER_GUIDE.md) · [Usage](docs/USAGE.md) · [Configuration](docs/CONFIGURATION.md) |
118
+ | 🔐 **Auth & sessions** | [Authentication](docs/AUTHENTICATION.md) · [Known issues](KNOWN_ISSUES.md) |
119
+ | 🏗️ **Internals** | [Architecture](docs/ARCHITECTURE.md) · [Security](docs/SECURITY.md) · [Debugging](docs/DEBUGGING.md) |
120
+ | 📦 **Releases** | [Changelog](CHANGELOG.md) · [Release protocol](RELEASE.md) · [Project status](docs/PROJECT_STATUS.md) |
121
+ | 🤝 **Contributing** | [Contributing](CONTRIBUTING.md) · [Development](docs/DEVELOPMENT.md) · [GitHub workflow](docs/GITHUB.md) |
122
+
123
+ ## For AI agents & LLMs
124
+
125
+ gflow-cli ships three agent entry points — pick the one your tool reads first.
126
+
127
+ | File | Audience | Tools |
128
+ |---|---|---|
129
+ | [**AGENTS.md**](AGENTS.md) | Universal coding-agent spec | Cursor · Codex · Aider · Gemini CLI · Jules · Devin · Windsurf · Zed · Warp · opencode · Copilot · 60k+ repos |
130
+ | [**CLAUDE.md**](CLAUDE.md) | Claude Code's auto-loaded memory | Claude Code |
131
+ | [**llms.txt**](llms.txt) | LLM-readable summary (llmstxt.org format) | Paste into ChatGPT / Claude / Gemini to onboard the model |
132
+ | [`skills/gflow-cli/SKILL.md`](skills/gflow-cli/SKILL.md) | Claude Code Skill | Symlink into `~/.claude/skills/` |
133
+
134
+ **Onboarding any agent in one line:** paste this into your agent of choice —
135
+
136
+ > *"Read [AGENTS.md](https://github.com/ffroliva/gflow-cli/blob/main/AGENTS.md) and [docs/INDEX.md](https://github.com/ffroliva/gflow-cli/blob/main/docs/INDEX.md), then help me with my Flow batch."*
137
+
138
+ ## Architecture & current limitations
139
+
140
+ ```text
141
+ gflow CLI → Provider (interchangeable) → Flow (ui_automation) / Mock (tests) / [planned: Official Veo]
142
+
143
+ Playwright Chromium (headed login, headless after)
144
+
145
+ aisandbox-pa.googleapis.com (Google's private Flow API)
146
+ ```
147
+
148
+ **Current transport:** `ui_automation` — drives Flow via a persistent Playwright Chromium profile. Production-stable, end-to-end verified per release (see [LIVE_VERIFICATION_*](docs/) per-release evidence files).
149
+
150
+ **What's blocked:** A pure HTTP transport for video generation. The video upload endpoint returns HTTP 401 under non-Chrome browsers + a reCAPTCHA mint we cannot reproduce headlessly. Three earlier HTTP strategies (`evaluate_fetch` / `bearer` / `sapisidhash`) are named in the codebase history; the actual transport modules have not yet been extracted into a subpackage.
151
+
152
+ **How you can help:** If you have successfully driven `aisandbox-pa.googleapis.com` from outside a real Chrome session — or have insight into Google's anti-bot stack here — please open an issue. A working REST transport would unlock serverless deployments, true horizontal concurrency, and roughly 10× the project's reach. Details: [docs/ARCHITECTURE.md § Headed-browser dependency](docs/ARCHITECTURE.md#headed-browser-dependency--current-limitation).
153
+
154
+ ## Project status
155
+
156
+ **v0.8.1 — alpha (docs refresh).** Image (T2I / I2I / upload) + Video T2V live end-to-end on `ui_automation`. Video I2V + batch are queued for Phase B. Full milestone history → [docs/PROJECT_STATUS.md](docs/PROJECT_STATUS.md). Changelog → [CHANGELOG.md](CHANGELOG.md).
157
+
158
+ ## License & legal
159
+
160
+ [MIT License](LICENSE) © 2026 Flavio Oliva (`ffroliva`). The MIT license covers `gflow-cli`'s code only — it does not grant rights to Flow, Veo model output, or any Google service. Google's own terms (Labs Additional Terms, Ultra/Pro subscription terms) govern your generations. See [DISCLAIMER](DISCLAIMER.md).
161
+
162
+ ## Acknowledgements
163
+
164
+ - [`edge-tts`](https://github.com/rany2/edge-tts) — design inspiration for community SDKs over private cloud APIs.
165
+ - [`googleapis/python-genai`](https://github.com/googleapis/python-genai) — the official Veo SDK that a future provider release may alias.
166
+ - [Keysight — *Google Labs – Flow AI with Veo3: A Network Traffic Analysis*](https://www.keysight.com/blogs/en/tech/nwvs/2025/08/04/google-flow-ai-har-analysis) — independent capture that helped validate the captured route patterns.
167
+
168
+ ---
169
+
170
+ If `gflow-cli` saves you time, please ⭐ the repo — it is the cheapest way to support the project.