gflow-cli 0.42.0__tar.gz → 0.44.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 (667) hide show
  1. gflow_cli-0.44.0/.agents/plugins/marketplace.json +20 -0
  2. gflow_cli-0.44.0/.codex-plugin/plugin.json +34 -0
  3. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.env.template +10 -1
  4. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.github/workflows/ci.yml +6 -0
  5. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/AGENTS.md +16 -1
  6. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/CHANGELOG.md +162 -1
  7. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/CONTRIBUTING.md +16 -0
  8. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/KNOWN_ISSUES.md +68 -0
  9. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/PKG-INFO +1 -1
  10. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/PLAN.md +1 -1
  11. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/RELEASE.md +2 -1
  12. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/ARCHITECTURE.md +37 -0
  13. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/CHARACTER.md +20 -10
  14. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/CONFIGURATION.md +9 -0
  15. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/DATA_LAYER.md +40 -5
  16. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/DEBUGGING.md +91 -0
  17. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/E2E_TESTING.md +14 -0
  18. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/INDEX.md +2 -1
  19. gflow_cli-0.44.0/docs/LIVE_VERIFICATION_v0.43.0.md +118 -0
  20. gflow_cli-0.44.0/docs/LIVE_VERIFICATION_v0.44.0.md +37 -0
  21. {gflow_cli-0.42.0/website → gflow_cli-0.44.0}/docs/MCP.md +17 -0
  22. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/PROJECT_STATUS.md +13 -1
  23. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/SECURITY.md +28 -0
  24. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/USAGE.md +53 -2
  25. {gflow_cli-0.42.0/website → gflow_cli-0.44.0}/docs/USER_GUIDE.md +56 -0
  26. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-18-asset-tagging/PLAN.md +9 -2
  27. gflow_cli-0.44.0/docs/superpowers/plans/2026-07-26-project-name-management/PLAN.md +176 -0
  28. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/llms.txt +2 -0
  29. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/pyproject.toml +1 -1
  30. gflow_cli-0.44.0/scripts/ci/check_website_docs_pii.py +91 -0
  31. gflow_cli-0.44.0/scripts/ci/generate_website_docs.py +151 -0
  32. gflow_cli-0.44.0/scripts/dev/incident_bundle_quality.py +291 -0
  33. gflow_cli-0.44.0/scripts/dev/spike_incident_live.py +182 -0
  34. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/check/SKILL.md +7 -1
  35. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/doc-review/SKILL.md +73 -2
  36. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/release/SKILL.md +14 -5
  37. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/__init__.py +1 -1
  38. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/_cli_helpers.py +50 -1
  39. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/_engine.py +9 -1
  40. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/_retry.py +28 -5
  41. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/client.py +312 -20
  42. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/routes.py +1 -0
  43. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/__init__.py +24 -1
  44. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/ui_automation.py +318 -52
  45. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/ui_automation_video.py +124 -8
  46. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/cli.py +2 -0
  47. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_data.py +123 -9
  48. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_image.py +22 -10
  49. gflow_cli-0.44.0/src/gflow_cli/cli_project.py +214 -0
  50. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_video.py +33 -16
  51. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/config.py +12 -0
  52. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/queries.py +79 -18
  53. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/repository.py +99 -1
  54. gflow_cli-0.44.0/src/gflow_cli/diagnostics.py +1720 -0
  55. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/errors.py +82 -4
  56. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/image_batch.py +11 -10
  57. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/json_output.py +31 -32
  58. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/tools.py +35 -9
  59. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/profile_lease.py +107 -10
  60. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/worker/daemon.py +15 -1
  61. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/worker/queue.py +3 -1
  62. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_client.py +67 -1
  63. gflow_cli-0.44.0/tests/api/test_client_incidents.py +381 -0
  64. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_client_launch_kwargs.py +15 -8
  65. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_retry.py +10 -0
  66. gflow_cli-0.44.0/tests/api/transports/test_agentic_cohort_detection.py +192 -0
  67. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_evaluate_fetch.py +30 -18
  68. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_factory.py +26 -0
  69. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_automation.py +105 -26
  70. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_automation_image_mode.py +14 -5
  71. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_character_editor.py +410 -51
  72. gflow_cli-0.44.0/tests/cli/test_cli_data_errors_retention.py +202 -0
  73. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_image.py +1 -1
  74. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_helpers.py +27 -0
  75. gflow_cli-0.44.0/tests/cli/test_incident_output.py +64 -0
  76. gflow_cli-0.44.0/tests/e2e/test_incident_quality_e2e.py +144 -0
  77. gflow_cli-0.44.0/tests/e2e/test_project_naming_e2e.py +184 -0
  78. gflow_cli-0.44.0/tests/features/incident_diagnostics.feature +43 -0
  79. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/test_image_steps.py +1 -0
  80. gflow_cli-0.44.0/tests/features/test_incident_diagnostics_steps.py +354 -0
  81. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/test_video_agent_ui_steps.py +2 -0
  82. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/mcp/test_cli_parity.py +6 -0
  83. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/mcp/test_server.py +49 -0
  84. gflow_cli-0.44.0/tests/scripts/test_check_website_docs_pii.py +66 -0
  85. gflow_cli-0.44.0/tests/scripts/test_codex_plugin.py +73 -0
  86. gflow_cli-0.44.0/tests/scripts/test_generate_website_docs.py +70 -0
  87. gflow_cli-0.44.0/tests/scripts/test_incident_bundle_quality.py +293 -0
  88. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/services/test_character_gen_no_direct_post.py +17 -11
  89. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_cli_data.py +24 -0
  90. gflow_cli-0.44.0/tests/test_cli_project.py +212 -0
  91. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_config.py +20 -0
  92. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_data_queries.py +42 -0
  93. gflow_cli-0.44.0/tests/test_diagnostics_bundle.py +170 -0
  94. gflow_cli-0.44.0/tests/test_diagnostics_events.py +153 -0
  95. gflow_cli-0.44.0/tests/test_diagnostics_journal.py +148 -0
  96. gflow_cli-0.44.0/tests/test_diagnostics_recorder.py +369 -0
  97. gflow_cli-0.44.0/tests/test_diagnostics_retention.py +259 -0
  98. gflow_cli-0.44.0/tests/test_diagnostics_sanitize.py +212 -0
  99. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_errors.py +29 -0
  100. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_json_output.py +67 -1
  101. gflow_cli-0.44.0/tests/test_profile_lease.py +328 -0
  102. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_profile_lease_subprocess.py +13 -2
  103. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/worker/test_daemon.py +33 -0
  104. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/worker/test_queue.py +3 -0
  105. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/uv.lock +1 -1
  106. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/ARCHITECTURE.md +37 -0
  107. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/AUTHENTICATION.md +7 -7
  108. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/CHARACTER.md +45 -24
  109. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/CONFIGURATION.md +34 -0
  110. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/DATA_LAYER.md +41 -2
  111. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/DEBUGGING.md +91 -0
  112. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/E2E_TESTING.md +21 -2
  113. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/KNOWN_ISSUES.md +129 -23
  114. {gflow_cli-0.42.0 → gflow_cli-0.44.0/website}/docs/MCP.md +17 -0
  115. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/SECURITY.md +44 -0
  116. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/USAGE.md +54 -3
  117. {gflow_cli-0.42.0 → gflow_cli-0.44.0/website}/docs/USER_GUIDE.md +56 -0
  118. gflow_cli-0.42.0/tests/test_profile_lease.py +0 -148
  119. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/README.md +0 -0
  120. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/active.md +0 -0
  121. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/branch-review.md +0 -0
  122. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/changelog.md +0 -0
  123. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/check.md +0 -0
  124. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/doc-review.md +0 -0
  125. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/issue-assessment.md +0 -0
  126. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/issue-resolve.md +0 -0
  127. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/known-issues.md +0 -0
  128. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/live-verify.md +0 -0
  129. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/llm-council.md +0 -0
  130. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/next.md +0 -0
  131. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/plan.md +0 -0
  132. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/pr-council-review.md +0 -0
  133. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/predict.md +0 -0
  134. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/release.md +0 -0
  135. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/scenario.md +0 -0
  136. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/sonar.md +0 -0
  137. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.claude/commands/gflow/status.md +0 -0
  138. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.gitattributes +0 -0
  139. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.github/CODEOWNERS +0 -0
  140. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  141. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.github/copilot-instructions.md +0 -0
  142. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.github/dependabot.yml +0 -0
  143. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.github/workflows/external-pr-triage.yml +0 -0
  144. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.github/workflows/governance-advisory.yml +0 -0
  145. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.github/workflows/governance-benchmark.yml +0 -0
  146. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.github/workflows/main-base-guard.yml +0 -0
  147. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.github/workflows/pages.yml +0 -0
  148. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.github/workflows/release.yml +0 -0
  149. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.gitignore +0 -0
  150. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.gitleaks.toml +0 -0
  151. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.pre-commit-config.yaml +0 -0
  152. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/.secrets.baseline +0 -0
  153. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/CLAUDE.md +0 -0
  154. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/CONFIGURATION.md +0 -0
  155. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/DISCLAIMER.md +0 -0
  156. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/LICENSE +0 -0
  157. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/README.md +0 -0
  158. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/ROADMAP.md +0 -0
  159. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/conftest.py +0 -0
  160. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/deploy/PR-TRIAGE-AUTOPILOT-OPS.md +0 -0
  161. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docker-compose.yml +0 -0
  162. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/AGENT_GUIDE.md +0 -0
  163. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/AGENT_UI_E2E.md +0 -0
  164. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/AGENT_UI_RECON.md +0 -0
  165. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/ASSET_TAGGING_RECON.md +0 -0
  166. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/AUTHENTICATION.md +0 -0
  167. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/CHARACTER_RECON.md +0 -0
  168. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/DEMOS.md +0 -0
  169. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/DEVELOPMENT.md +0 -0
  170. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/EXTERNAL_STORAGE.md +0 -0
  171. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/GITHUB.md +0 -0
  172. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/GOVERNANCE_BENCHMARK.md +0 -0
  173. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/IMAGE_UPSCALE_RECON.md +0 -0
  174. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/INSTRUCTIONS.md +0 -0
  175. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_data_layer.md +0 -0
  176. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_image_batch.md +0 -0
  177. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.10.0.md +0 -0
  178. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.11.0.md +0 -0
  179. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.12.0.md +0 -0
  180. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.13.0.md +0 -0
  181. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.16.0.md +0 -0
  182. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.17.0.md +0 -0
  183. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.18.0.md +0 -0
  184. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.19.0.md +0 -0
  185. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.20.0.md +0 -0
  186. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.20.1.md +0 -0
  187. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.21.0.md +0 -0
  188. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.22.0.md +0 -0
  189. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.23.0.md +0 -0
  190. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.24.0.md +0 -0
  191. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.25.0.md +0 -0
  192. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.26.0.md +0 -0
  193. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.27.0.md +0 -0
  194. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.27.1.md +0 -0
  195. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.28.0.md +0 -0
  196. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.29.0.md +0 -0
  197. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.30.0.md +0 -0
  198. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.31.0.md +0 -0
  199. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.32.0.md +0 -0
  200. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.32.1.md +0 -0
  201. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.33.0.md +0 -0
  202. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.34.0.md +0 -0
  203. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.35.0.md +0 -0
  204. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.36.0.md +0 -0
  205. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.37.0.md +0 -0
  206. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.38.0.md +0 -0
  207. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.38.1.md +0 -0
  208. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.39.0.md +0 -0
  209. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.40.0-production-readiness.md +0 -0
  210. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.40.0.md +0 -0
  211. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.41.0.md +0 -0
  212. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.42.0.md +0 -0
  213. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.7.0.md +0 -0
  214. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.8.1.md +0 -0
  215. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.9.0.md +0 -0
  216. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_v0.9.1.md +0 -0
  217. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/LIVE_VERIFICATION_video_download.md +0 -0
  218. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/MOVIE.md +0 -0
  219. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/PROMPT_EXPANSION.md +0 -0
  220. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/REFERENCE_STRATEGIES.md +0 -0
  221. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/TOOLS.md +0 -0
  222. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/assets/demo-split-pf.gif +0 -0
  223. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/assets/example-run.gif +0 -0
  224. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/assets/examples.webp +0 -0
  225. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/medium_tutorial.md +0 -0
  226. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/schemas/movie-handoff.schema.json +0 -0
  227. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/sonar-cleanup-tracker.md +0 -0
  228. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-12-issue-174-library-ui-attach/PLAN.md +0 -0
  229. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md +0 -0
  230. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md +0 -0
  231. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md +0 -0
  232. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PLAN.md +0 -0
  233. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/PREDICT.md +0 -0
  234. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-22-prompt-expansion/SCENARIO.md +0 -0
  235. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-24-gflow-studio-scaffold/PLAN.md +0 -0
  236. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-24-rest-api-layer/PLAN.md +0 -0
  237. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-06-26-mcp-e2e-test/PLAN.md +0 -0
  238. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-08-pr-triage-autopilot/PLAN.md +0 -0
  239. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-09-camoufox-adoption/PLAN.md +0 -0
  240. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-14-storyboarding-and-visual-curation/PLAN.md +0 -0
  241. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-live-verify/PLAN.md +0 -0
  242. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-production-readiness-browser-lifecycle.md +0 -0
  243. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-production-readiness-driver-cdp-verification.md +0 -0
  244. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-production-readiness-public-truth.md +0 -0
  245. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/plans/2026-07-19-production-readiness-queue-safety.md +0 -0
  246. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/research/2026-06-27-tool-abstraction-evaluation.md +0 -0
  247. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-06-29-issue-assessment-workflow-design.md +0 -0
  248. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-07-04-pr-triage-autopilot-design.md +0 -0
  249. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-07-18-asset-tagging-design.md +0 -0
  250. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-07-19-live-verify-design.md +0 -0
  251. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md +0 -0
  252. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/spikes/2026-07-09-camoufox-waf-403.md +0 -0
  253. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/spikes/2026-07-12-ui-cohort-backend-config.md +0 -0
  254. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/docs/superpowers/spikes/2026-07-17-production-readiness-assessment.md +0 -0
  255. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/eval/pr_triage_eval.py +0 -0
  256. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/eval/pr_triage_fixtures.json +0 -0
  257. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/examples/README.md +0 -0
  258. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/examples/batch_from_config.py +0 -0
  259. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/examples/multi_prompt_t2i.py +0 -0
  260. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/examples/sample_config.json +0 -0
  261. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/examples/sample_prompts.txt +0 -0
  262. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/examples/single_image_t2i.py +0 -0
  263. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/examples/workflow_chain.py +0 -0
  264. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/index.html +0 -0
  265. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/README.md +0 -0
  266. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/01_upload_image.json +0 -0
  267. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/02_batchAsyncGenerateVideoText.json +0 -0
  268. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/03_batchCheckAsyncVideoGenerationStatus.json +0 -0
  269. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/04_archive_workflow.json +0 -0
  270. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/05_createProject.json +0 -0
  271. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/06_batchGenerateImages.json +0 -0
  272. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/07_batchGenerateImages_seeded.json +0 -0
  273. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/08_batchAsyncGenerateVideoStartAndEndImage.json +0 -0
  274. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/09_batchAsyncGenerateVideoReferenceImages.json +0 -0
  275. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/10_batchCheckAsyncVideoGenerationStatus_successful.json +0 -0
  276. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/11_batchCheckAsyncVideoGenerationStatus_failed.json +0 -0
  277. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/12_create_scene.json +0 -0
  278. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/13_sceneWorkflows_update.json +0 -0
  279. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/14_get_scene_workflows.json +0 -0
  280. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/samples/captured/15_commit_flowWorkflow.json +0 -0
  281. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/autopilot/Dockerfile.triage +0 -0
  282. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/autopilot/entrypoint.sh +0 -0
  283. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/autopilot/pr_triage_autopilot.py +0 -0
  284. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/autopilot/pr_triage_gate.py +0 -0
  285. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/autopilot/run_sandboxed_review.sh +0 -0
  286. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/ci/check_doc_links.py +0 -0
  287. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/ci/check_materiality.py +0 -0
  288. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/ci/check_release_artifacts.py +0 -0
  289. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/ci/check_repo_hygiene.py +0 -0
  290. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/debug_editor.py +0 -0
  291. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/debug_gen_settings.py +0 -0
  292. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/debug_settings.py +0 -0
  293. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/_recording_client.py +0 -0
  294. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/_spike_common.py +0 -0
  295. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/active_plan.py +0 -0
  296. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/analyze_agent_ui_capture.py +0 -0
  297. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/capture_i2v_frame_slots_dom.py +0 -0
  298. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/capture_i2v_intercept_submit.py +0 -0
  299. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/capture_i2v_model_select_repro.py +0 -0
  300. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/capture_i2v_post_bind_state.py +0 -0
  301. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/capture_image_add_media_dom.py +0 -0
  302. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/capture_locale_invariants.py +0 -0
  303. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/cdp_drive_and_probe.py +0 -0
  304. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/character_create_spike.py +0 -0
  305. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/character_create_spike_v2.py +0 -0
  306. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/dump_character_selectors.js +0 -0
  307. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/make_project.py +0 -0
  308. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/materiality_backtest.py +0 -0
  309. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/monitor_pr_38.py +0 -0
  310. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/patch_character.py +0 -0
  311. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/skillopt/README.md +0 -0
  312. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/skillopt/harness.py +0 -0
  313. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/skillopt/tasks.json +0 -0
  314. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/sonar-local-scan.sh +0 -0
  315. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/sonar-pre-push-gate.sh +0 -0
  316. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_char_editor_dom.py +0 -0
  317. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_char_gen_capture.py +0 -0
  318. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_image_upscale_capture.py +0 -0
  319. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_image_upscale_drive.py +0 -0
  320. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_image_upscale_recaptcha_action.py +0 -0
  321. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_image_upscale_rest_probe.py +0 -0
  322. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_issue170_picker_locale_recon.py +0 -0
  323. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_issue174_library_ui_recon.py +0 -0
  324. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_issue313_agent_mode_controls.py +0 -0
  325. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_issue314_picker_filename_search.py +0 -0
  326. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_mode_roundtrip.py +0 -0
  327. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_mode_switch_agentic_to_classic.py +0 -0
  328. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_attach_payload.py +0 -0
  329. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_entity_recon.py +0 -0
  330. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_gen_capture.py +0 -0
  331. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_picker_select.py +0 -0
  332. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_movie_voice_list.py +0 -0
  333. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_patch_entity.py +0 -0
  334. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/dev/spike_patchright.py +0 -0
  335. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/diag/README.md +0 -0
  336. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/diag/capture_flow_traffic.py +0 -0
  337. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/diag/memory_profile.py +0 -0
  338. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/diag/recaptcha_mint.py +0 -0
  339. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/e2e/agentic_image_e2e.ps1 +0 -0
  340. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/e2e/capture_agent_toggle.py +0 -0
  341. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/record_demo.ps1 +0 -0
  342. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/smoke_image.py +0 -0
  343. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/smoke_video_editor.py +0 -0
  344. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/smoke_worker_style.py +0 -0
  345. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/spike_waf_camoufox.py +0 -0
  346. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/scripts/verify_chrome_auth_viability.py +0 -0
  347. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/README.md +0 -0
  348. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/changelog/SKILL.md +0 -0
  349. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/gflow-cli/SKILL.md +0 -0
  350. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/issue-assessment/SKILL.md +0 -0
  351. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/issue-resolve/SKILL.md +0 -0
  352. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/known-issues/SKILL.md +0 -0
  353. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/live-verify/SKILL.md +0 -0
  354. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/llm-council/SKILL.md +0 -0
  355. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/plan/SKILL.md +0 -0
  356. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/pr-council-review/SKILL.md +0 -0
  357. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/predict/SKILL.md +0 -0
  358. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/scenario/SKILL.md +0 -0
  359. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/sonar/SKILL.md +0 -0
  360. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/skills/status/SKILL.md +0 -0
  361. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/sonar-project.properties +0 -0
  362. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/__main__.py +0 -0
  363. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/__init__.py +0 -0
  364. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/_sapisidhash.py +0 -0
  365. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/character.py +0 -0
  366. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/dto.py +0 -0
  367. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/image.py +0 -0
  368. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/image_upscale.py +0 -0
  369. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/recaptcha.py +0 -0
  370. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/scene.py +0 -0
  371. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/_common.py +0 -0
  372. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/_fingerprint.py +0 -0
  373. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/base.py +0 -0
  374. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/__init__.py +0 -0
  375. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/agentic.py +0 -0
  376. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/base.py +0 -0
  377. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/classic.py +0 -0
  378. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/drivers/factory.py +0 -0
  379. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/experimental/__init__.py +0 -0
  380. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/experimental/bearer.py +0 -0
  381. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/experimental/evaluate_fetch.py +0 -0
  382. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/experimental/sapisidhash.py +0 -0
  383. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/transports/mode_control.py +0 -0
  384. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/api/video.py +0 -0
  385. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/__init__.py +0 -0
  386. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/base.py +0 -0
  387. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/cookies.py +0 -0
  388. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/factory.py +0 -0
  389. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/internal_chromium.py +0 -0
  390. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/real_chrome.py +0 -0
  391. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/strategies.py +0 -0
  392. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/auth/verification.py +0 -0
  393. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/browser_manager.py +0 -0
  394. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/chain.py +0 -0
  395. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/chain_manifest.py +0 -0
  396. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_character.py +0 -0
  397. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_instructions.py +0 -0
  398. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_models.py +0 -0
  399. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_movie.py +0 -0
  400. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_run.py +0 -0
  401. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_scene.py +0 -0
  402. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/cli_tools.py +0 -0
  403. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/composition.py +0 -0
  404. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/__init__.py +0 -0
  405. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/chain_repo.py +0 -0
  406. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0001_initial.sql +0 -0
  407. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0002_add_cloud_storage.sql +0 -0
  408. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0003_add_scene_tables.sql +0 -0
  409. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0004_add_scene_output_path.sql +0 -0
  410. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0005_add_chain_links.sql +0 -0
  411. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0006_add_operations_metadata.sql +0 -0
  412. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0007_queue.sql +0 -0
  413. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0008_add_operation_expanded_prompt.sql +0 -0
  414. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/0009_queue_claims.sql +0 -0
  415. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/migrations/__init__.py +0 -0
  416. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/models.py +0 -0
  417. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/recorder.py +0 -0
  418. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/redaction.py +0 -0
  419. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/data/store.py +0 -0
  420. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/exceptions.py +0 -0
  421. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/__init__.py +0 -0
  422. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/prompts.py +0 -0
  423. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/resources.py +0 -0
  424. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/mcp/server.py +0 -0
  425. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/media.py +0 -0
  426. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/movie_manifest.py +0 -0
  427. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/observability.py +0 -0
  428. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/paths.py +0 -0
  429. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/profile_store.py +0 -0
  430. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/services/__init__.py +0 -0
  431. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/services/character_create.py +0 -0
  432. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/services/mentions.py +0 -0
  433. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/storage.py +0 -0
  434. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/__init__.py +0 -0
  435. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/banned.py +0 -0
  436. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/builtin/__init__.py +0 -0
  437. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/builtin/creative-director.toml +0 -0
  438. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/builtin/reverse-engineer.toml +0 -0
  439. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/builtin/storyboard.toml +0 -0
  440. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/expander.py +0 -0
  441. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/invocation.py +0 -0
  442. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/loader.py +0 -0
  443. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/registry.py +0 -0
  444. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/runtime.py +0 -0
  445. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/tools/spec.py +0 -0
  446. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/ui/app.py +0 -0
  447. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/ui/server.py +0 -0
  448. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/src/gflow_cli/worker/codec.py +0 -0
  449. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tasks/lessons.md +0 -0
  450. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/test_assets/sample_batch.json +0 -0
  451. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/test_assets/sample_batch.tsv +0 -0
  452. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/test_assets/sample_batch_invalid.tsv +0 -0
  453. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/__init__.py +0 -0
  454. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/__init__.py +0 -0
  455. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/fixtures/character_gen_response.json +0 -0
  456. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/fixtures/patch_entity_response.json +0 -0
  457. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_aisandbox_auth_error.py +0 -0
  458. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_aisandbox_auth_headers.py +0 -0
  459. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_bearer_redaction.py +0 -0
  460. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_character.py +0 -0
  461. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_client_character.py +0 -0
  462. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_client_delete_characters.py +0 -0
  463. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_client_generate_character.py +0 -0
  464. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_client_image.py +0 -0
  465. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_client_patch_entity.py +0 -0
  466. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_client_scene.py +0 -0
  467. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_client_upscale.py +0 -0
  468. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_concurrency.py +0 -0
  469. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_dto.py +0 -0
  470. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_engine.py +0 -0
  471. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_image.py +0 -0
  472. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_image_dto.py +0 -0
  473. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_image_upscale.py +0 -0
  474. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_post_json_aisandbox_auth.py +0 -0
  475. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_recaptcha.py +0 -0
  476. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_routes.py +0 -0
  477. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_routes_character.py +0 -0
  478. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_routes_scene.py +0 -0
  479. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_sapisidhash_helper.py +0 -0
  480. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_scene_models.py +0 -0
  481. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_video.py +0 -0
  482. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/test_video_request.py +0 -0
  483. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/__init__.py +0 -0
  484. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/conftest.py +0 -0
  485. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/__init__.py +0 -0
  486. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/test_agentic.py +0 -0
  487. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/test_classic.py +0 -0
  488. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/test_factory.py +0 -0
  489. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/drivers/test_ui_mode.py +0 -0
  490. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_base.py +0 -0
  491. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_bearer.py +0 -0
  492. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_common.py +0 -0
  493. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_fingerprint.py +0 -0
  494. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_mode_control.py +0 -0
  495. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_sapisidhash.py +0 -0
  496. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_selector_symmetry.py +0 -0
  497. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_transport_timeout.py +0 -0
  498. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_automation_batch.py +0 -0
  499. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/api/transports/test_ui_automation_video.py +0 -0
  500. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/auth/strategies/test_factory.py +0 -0
  501. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/auth/strategies/test_strategies.py +0 -0
  502. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/auth/test_cookies.py +0 -0
  503. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/auth/test_real_chrome.py +0 -0
  504. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/auth/test_verification.py +0 -0
  505. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/autopilot/test_pr_triage_autopilot.py +0 -0
  506. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/__init__.py +0 -0
  507. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_auth_list.py +0 -0
  508. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_character.py +0 -0
  509. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_character_create.py +0 -0
  510. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_data.py +0 -0
  511. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_data_errors.py +0 -0
  512. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_image_seed_removed.py +0 -0
  513. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_image_selector_drift.py +0 -0
  514. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_image_upscale.py +0 -0
  515. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_instructions.py +0 -0
  516. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_models.py +0 -0
  517. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_movie.py +0 -0
  518. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_run.py +0 -0
  519. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_scene.py +0 -0
  520. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_tools.py +0 -0
  521. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_video.py +0 -0
  522. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_cli_video_chain.py +0 -0
  523. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_error_handling.py +0 -0
  524. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_failure_funnel.py +0 -0
  525. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_movie_manifest.py +0 -0
  526. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_movie_manifest_style_variants.py +0 -0
  527. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_settings_validation.py +0 -0
  528. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/cli/test_t2i_multi_prompt.py +0 -0
  529. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/composition/test_character.py +0 -0
  530. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/composition/test_compose_prompt.py +0 -0
  531. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/composition/test_handoff.py +0 -0
  532. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/composition/test_style_variants.py +0 -0
  533. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/composition/test_style_variants_e2e.py +0 -0
  534. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/conftest.py +0 -0
  535. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/data/__init__.py +0 -0
  536. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/data/test_chain_repo.py +0 -0
  537. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/data/test_failure_recording.py +0 -0
  538. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/data/test_find_incomplete_character.py +0 -0
  539. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/data/test_models.py +0 -0
  540. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/data/test_packaging.py +0 -0
  541. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/data/test_recorder.py +0 -0
  542. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/data/test_recorder_character.py +0 -0
  543. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/data/test_redaction.py +0 -0
  544. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/data/test_repository.py +0 -0
  545. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/data/test_scene_persistence.py +0 -0
  546. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/data/test_settings_and_errors.py +0 -0
  547. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/data/test_store_migrations.py +0 -0
  548. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/dev/test_recording_client.py +0 -0
  549. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/__init__.py +0 -0
  550. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/conftest.py +0 -0
  551. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_agentic_count_enforcement_e2e.py +0 -0
  552. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_aisandbox_auth_live.py +0 -0
  553. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_asset_tagging_e2e.py +0 -0
  554. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_auth_verification_e2e.py +0 -0
  555. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_cancellation_e2e.py +0 -0
  556. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_chain_e2e.py +0 -0
  557. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_character_create_e2e.py +0 -0
  558. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_crash_recovery_e2e.py +0 -0
  559. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_daemon_e2e.py +0 -0
  560. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_data_layer_e2e.py +0 -0
  561. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_entity_smuggling_e2e.py +0 -0
  562. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_i2v_flags_e2e.py +0 -0
  563. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_image_batch_e2e.py +0 -0
  564. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_image_i2i_ref_cap_e2e.py +0 -0
  565. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_json_output_e2e.py +0 -0
  566. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_live_agentic_instructions.py +0 -0
  567. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_locale_selectors_e2e.py +0 -0
  568. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_scene_compose_live.py +0 -0
  569. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_tools_e2e.py +0 -0
  570. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_transports_e2e.py +0 -0
  571. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_video_r2v_ref_cap_e2e.py +0 -0
  572. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/e2e/test_video_t2v_e2e.py +0 -0
  573. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/__init__.py +0 -0
  574. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/asset_tagging.feature +0 -0
  575. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/auth.feature +0 -0
  576. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/auth_login.feature +0 -0
  577. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/character_create.feature +0 -0
  578. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/character_read.feature +0 -0
  579. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/conftest.py +0 -0
  580. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/image.feature +0 -0
  581. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/image_upscale.feature +0 -0
  582. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/instructions.feature +0 -0
  583. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/locale_picker_include.feature +0 -0
  584. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/test_asset_tagging_steps.py +0 -0
  585. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/test_auth_login_steps.py +0 -0
  586. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/test_auth_steps.py +0 -0
  587. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/test_character_create_steps.py +0 -0
  588. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/test_character_read_steps.py +0 -0
  589. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/test_image_upscale_steps.py +0 -0
  590. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/test_instructions_steps.py +0 -0
  591. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/test_locale_picker_include_steps.py +0 -0
  592. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/test_step_collision_guard.py +0 -0
  593. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/test_video_chain_steps.py +0 -0
  594. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/video_agent_ui.feature +0 -0
  595. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/features/video_chain.feature +0 -0
  596. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/fixtures/__init__.py +0 -0
  597. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/fixtures/seeded_catalog.py +0 -0
  598. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/image_batch/__init__.py +0 -0
  599. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/image_batch/test_image_manifest.py +0 -0
  600. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/image_batch/test_jitter_config.py +0 -0
  601. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/image_batch/test_observability_events.py +0 -0
  602. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/integration/__init__.py +0 -0
  603. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/integration/conftest.py +0 -0
  604. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/integration/constants.py +0 -0
  605. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/integration/test_storage_gcs.py +0 -0
  606. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/integration/test_storage_s3.py +0 -0
  607. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/mcp/__init__.py +0 -0
  608. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/mcp/conftest.py +0 -0
  609. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/mcp/test_stdio_transport.py +0 -0
  610. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/mcp/test_tools_helpers.py +0 -0
  611. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/mcp/test_tools_instructions.py +0 -0
  612. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/mcp/test_tools_wired.py +0 -0
  613. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/scripts/test_analyze_agent_ui_capture.py +0 -0
  614. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/scripts/test_capture_locale_invariants.py +0 -0
  615. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/scripts/test_check_materiality.py +0 -0
  616. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/scripts/test_check_release_artifacts.py +0 -0
  617. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/scripts/test_check_repo_hygiene.py +0 -0
  618. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/scripts/test_materiality_backtest.py +0 -0
  619. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/services/__init__.py +0 -0
  620. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/services/test_character_create_redaction.py +0 -0
  621. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/services/test_character_create_saga.py +0 -0
  622. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/services/test_mentions_observability.py +0 -0
  623. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/services/test_mentions_parse.py +0 -0
  624. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/services/test_mentions_resolve.py +0 -0
  625. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/services/test_resolve_and_apply.py +0 -0
  626. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/smoke/__init__.py +0 -0
  627. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/smoke/test_profile_account_smoke.py +0 -0
  628. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/smoke/test_real_flow.py +0 -0
  629. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_auth.py +0 -0
  630. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_browser_manager.py +0 -0
  631. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_chain.py +0 -0
  632. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_chain_manifest.py +0 -0
  633. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_conftest_isolation.py +0 -0
  634. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_documentation_gate.py +0 -0
  635. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_errors_classification.py +0 -0
  636. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_marker_registry.py +0 -0
  637. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_media.py +0 -0
  638. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_observability.py +0 -0
  639. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_paths.py +0 -0
  640. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_profile_store.py +0 -0
  641. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/test_smoke.py +0 -0
  642. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/tools/__init__.py +0 -0
  643. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/tools/test_banned.py +0 -0
  644. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/tools/test_expander.py +0 -0
  645. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/tools/test_invocation.py +0 -0
  646. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/tools/test_loader.py +0 -0
  647. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/tools/test_registry.py +0 -0
  648. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/tools/test_runtime.py +0 -0
  649. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/tools/test_spec.py +0 -0
  650. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/ui/test_app.py +0 -0
  651. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/worker/test_codec.py +0 -0
  652. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/worker/test_mcp_daemon_race.py +0 -0
  653. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/worker/test_queue_multiprocess.py +0 -0
  654. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/tests/worker/test_queue_reconciliation.py +0 -0
  655. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/DEVELOPMENT.md +0 -0
  656. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/EXTERNAL_STORAGE.md +0 -0
  657. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/INSTRUCTIONS.md +0 -0
  658. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/MOVIE.md +0 -0
  659. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/PROMPT_EXPANSION.md +0 -0
  660. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/TOOLS.md +0 -0
  661. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/agents.md +0 -0
  662. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/index.md +0 -0
  663. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/installation.md +0 -0
  664. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/onboarding-mockup.html +0 -0
  665. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/onboarding.md +0 -0
  666. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/docs/stylesheets/extra.css +0 -0
  667. {gflow_cli-0.42.0 → gflow_cli-0.44.0}/website/mkdocs.yml +0 -0
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "gflow-cli",
3
+ "interface": {
4
+ "displayName": "gflow-cli"
5
+ },
6
+ "plugins": [
7
+ {
8
+ "name": "gflow",
9
+ "source": {
10
+ "source": "local",
11
+ "path": "./"
12
+ },
13
+ "policy": {
14
+ "installation": "AVAILABLE",
15
+ "authentication": "ON_INSTALL"
16
+ },
17
+ "category": "Developer Tools"
18
+ }
19
+ ]
20
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "gflow",
3
+ "version": "0.44.0",
4
+ "description": "Reusable development and operations workflows for gflow-cli",
5
+ "author": {
6
+ "name": "Flavio Oliva",
7
+ "url": "https://github.com/ffroliva"
8
+ },
9
+ "homepage": "https://github.com/ffroliva/gflow-cli",
10
+ "repository": "https://github.com/ffroliva/gflow-cli",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "gflow-cli",
14
+ "codex",
15
+ "google-flow"
16
+ ],
17
+ "skills": "./skills/",
18
+ "interface": {
19
+ "displayName": "gflow-cli",
20
+ "shortDescription": "Develop, validate, review, and operate gflow-cli.",
21
+ "longDescription": "Project workflows for planning, validation, issue handling, reviews, releases, and Google Flow CLI operations.",
22
+ "developerName": "Flavio Oliva",
23
+ "category": "Developer Tools",
24
+ "capabilities": [
25
+ "Interactive",
26
+ "Write"
27
+ ],
28
+ "websiteURL": "https://github.com/ffroliva/gflow-cli",
29
+ "defaultPrompt": [
30
+ "Show the current gflow-cli task with $gflow:status.",
31
+ "Run the gflow-cli quality gates with $gflow:check."
32
+ ]
33
+ }
34
+ }
@@ -160,9 +160,18 @@
160
160
  # GFLOW_CLI_PROJECT_NAME=
161
161
 
162
162
  # -----------------------------------------------------------------------------
163
- # Debugging (opt-in only — both can expose secrets, see docs/CONFIGURATION.md)
163
+ # Debugging (see docs/CONFIGURATION.md; HAR/traceback are opt-in and can
164
+ # expose secrets)
164
165
  # -----------------------------------------------------------------------------
165
166
 
167
+ # Automatic private incident bundles (DEFAULT: true). On relevant operational
168
+ # failures (Flow app crash, UI drift, transport timeout, WAF/network errors,
169
+ # profile-lock contention) gflow writes a bounded diagnostic bundle under
170
+ # <GFLOW_CLI_HOME>/incidents/. Automatic JSON is allowlisted structural
171
+ # metadata only; screenshots live under sensitive/ and must be reviewed
172
+ # before sharing. Nothing is ever uploaded. Set false to disable.
173
+ # GFLOW_CLI_INCIDENT_CAPTURE=true
174
+
166
175
  # Captures full Playwright network traffic (requests, responses, headers,
167
176
  # cookies) to this HAR file for the session. SECURITY: a HAR file contains
168
177
  # live auth cookies and bearer tokens -- never share one publicly.
@@ -63,6 +63,12 @@ jobs:
63
63
  - name: Documentation links
64
64
  run: uv run python scripts/ci/check_doc_links.py
65
65
 
66
+ - name: Website docs PII guard (no private identifiers in the published mirror)
67
+ run: uv run python scripts/ci/check_website_docs_pii.py
68
+
69
+ - name: Website docs mirror in sync (regenerate-and-diff)
70
+ run: uv run python scripts/ci/generate_website_docs.py --check
71
+
66
72
  - name: Lint
67
73
  run: uv run ruff check src tests
68
74
 
@@ -39,6 +39,7 @@ Run these gates in order before every commit:
39
39
  $env:PYTHONUTF8=1
40
40
  uv run python scripts/ci/check_repo_hygiene.py
41
41
  uv run python scripts/ci/check_doc_links.py
42
+ uv run python scripts/ci/check_website_docs_pii.py
42
43
  uv run ruff check src tests
43
44
  uv run ruff format --check src tests
44
45
  uv run pyright src
@@ -108,7 +109,21 @@ and must be resolvable by ANY agent via this file. Vendor directories hold thin
108
109
  only (`.claude/commands/gflow/*.md` are pointers into `skills/`); never put protocol
109
110
  content in a vendor directory.
110
111
 
111
- **Cursor / Aider / Codex / Antigravity (`agy`):** paste or include the relevant `SKILL.md` in your system context. Note: in the `agy` TUI prompt, custom slash commands (e.g. `/gflow:pr-council-review`) are blocked by the TUI's command parser. Type them as plain text without the leading slash (e.g. `gflow:pr-council-review`, `gflow:branch-review`, or `gflow:check`) to trigger the corresponding agent skill workflow.
112
+ **Codex CLI / desktop app:** install the repo's skills-only plugin from the repository root,
113
+ then start a new session:
114
+
115
+ ```powershell
116
+ codex plugin marketplace add .
117
+ codex plugin add gflow@gflow-cli
118
+ ```
119
+
120
+ Invoke skills with Codex's `$` syntax, for example `$gflow:status`, `$gflow:check`, or
121
+ `$gflow:pr-council-review`. Codex reserves slash commands for its own command surface; the
122
+ Claude Code spelling `/gflow:*` is therefore intentionally not reproduced. The Codex IDE
123
+ extension does not currently load plugins, so IDE-only users should include the relevant
124
+ `skills/<name>/SKILL.md` directly.
125
+
126
+ **Cursor / Aider / Antigravity (`agy`):** paste or include the relevant `SKILL.md` in your system context. Note: in the `agy` TUI prompt, custom slash commands (e.g. `/gflow:pr-council-review`) are blocked by the TUI's command parser. Type them as plain text without the leading slash (e.g. `gflow:pr-council-review`, `gflow:branch-review`, or `gflow:check`) to trigger the corresponding agent skill workflow.
112
127
  **Claude Code:** the `/gflow:` slash commands in `.claude/commands/gflow/` are auto-discovered when the project is open — no extra setup needed. To register a skill globally, copy the command file to `~/.claude/commands/`.
113
128
  **Custom agents:** fetch `skills/gflow-cli/SKILL.md` into your knowledge base before answering gflow questions.
114
129
 
@@ -7,6 +7,165 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.44.0] — 2026-07-26
11
+
12
+ ### Added
13
+
14
+ - **Dual-Side Project Naming & Management (`gflow project`)** (#381). Added
15
+ `gflow project` subcommand group (`list`, `show`, `rename`, `create`),
16
+ `--project-name` / `--project-title` options across `gflow image` and `gflow video`
17
+ generation commands, prompt slugging for scratch projects, and dual-side title sync
18
+ updating Google Flow's tRPC server/UI and local SQLite catalog in lockstep.
19
+ - **Namespaced Codex project skills.** The canonical workflows under `skills/`
20
+ now ship as a repo-local, skills-only Codex plugin. Register and install it
21
+ with `codex plugin marketplace add .` followed by
22
+ `codex plugin add gflow@gflow-cli`, then invoke workflows such as
23
+ `$gflow:status`, `$gflow:check`, and `$gflow:pr-council-review` in a new
24
+ Codex CLI or desktop-app session. Claude Code's `/gflow:*` commands and the
25
+ agent-agnostic skill files remain unchanged.
26
+ - **`gflow data errors` — bounded retention + export for failed-operation
27
+ history** (#345). `gflow data errors export [--older-than AGE] [-o FILE]`
28
+ dumps failed operations as JSONL (unbounded, newest-first) for offline
29
+ archival — also closing the export path deferred from #341. `gflow data
30
+ errors prune --older-than AGE [--dry-run]` deletes failures older than AGE
31
+ (`90d` / `24h` / `30m`); `--older-than` is **required** and there is no
32
+ automatic/background pruning — deletion is always an explicit operator
33
+ action. Both honor `--profile` and the exit-16 `DataStoreError` convention.
34
+
35
+ ### Fixed
36
+
37
+ - **`gflow character create` safely activates the current Create-Body
38
+ composer.** Flow can autosave the body triptych over the stored portrait
39
+ prompt when the mode switch has not settled (observed live 2026-07-25 on
40
+ 0.43.0). Current Flow reuses one Slate editor and exposes Create Body through
41
+ the locale-independent `accessibility_new` icon beside the portrait image;
42
+ gflow now clicks that scoped mode control, requires a new generated-face
43
+ reference chip to mount, and verifies the shared editor owns focus **before
44
+ any clearing or typing**. Readback failures abort before submit. The older
45
+ `add_2`/second-box cohort remains supported through its count-rise gate.
46
+ Post-type isolation still aborts before the credited submit. Live DOM
47
+ evidence and the one-box failure were captured on 2026-07-26. Face-only
48
+ creates are unchanged.
49
+
50
+ - **Profile-lock remediation message** now names the real cause and recovery.
51
+ `ProfileLockedError` (exit 11) previously told operators to "wait for it to
52
+ finish" — implying an unbounded wait — and to hunt for a `gflow`/Chrome
53
+ process. In practice a blocking lock is a kernel *advisory* lock held by a
54
+ **live** process (often a `python.exe` a `chrome.exe` scan misses); the OS
55
+ releases it the instant the holder dies, so a leftover lock *file* never
56
+ blocks acquisition. The message now points to the recorded owner PID
57
+ (surfaced locally since v0.43.0) and says to just retry when nothing is
58
+ running. The lock itself is unchanged — auto-reclaim was considered and
59
+ rejected as unsafe (an unlink→new-inode race could put two browsers on one
60
+ profile, the exact corruption the lease prevents). Refs #370.
61
+
62
+ ## [0.43.0] — 2026-07-23
63
+
64
+ ### Added
65
+
66
+ - **Private incident diagnostics** (`GFLOW_CLI_INCIDENT_CAPTURE`, default
67
+ **on**). Relevant operational failures — Flow app crashes, agentic-cohort /
68
+ UI-mode errors, selector drift, transport timeouts, WAF/network/wire-format
69
+ errors, profile-lock contention, unexpected exceptions — now automatically
70
+ write a bounded, **private** incident bundle under
71
+ `<GFLOW_CLI_HOME>/incidents/`: an allowlisted `manifest.json`, structural
72
+ `ui.json` (ligatures/signals/overlay geometry — never raw text),
73
+ `network.json` + `browser.json` ring journals (host categories, canonical
74
+ routes, status codes, text lengths — never prompts/tokens/cookies/bodies/
75
+ signed URLs), and a `sensitive/screenshot.png` for UI-state failures that
76
+ every surface marks review-before-sharing. Nothing is ever uploaded; remote
77
+ MCP/HTTP/worker error envelopes carry only an opaque `{id, capture_status}`
78
+ while the local CLI prints the bundle path. Retention is bounded
79
+ (50 bundles / 250 MiB) and validates ownership before pruning. Raw HAR
80
+ stays separate and opt-in; the manifest's `har_state` now reports honestly
81
+ whether the session's HAR demonstrably finalized. See
82
+ [DEBUGGING § Automatic incident bundles](docs/DEBUGGING.md#automatic-incident-bundles).
83
+ Refs #369, #370, #174, #183.
84
+ - **Profile-lock owner evidence.** `ProfileLockedError` contention now
85
+ surfaces the recorded lease owner's PID and observed start time locally
86
+ (never in remote envelopes or logs; identities are per-command HMACs, never
87
+ the raw owner token). The lock-file layout is v1-versioned: byte 0 is the
88
+ kernel-locked sentinel and metadata starts at offset 1, so Windows
89
+ contenders can read it while the lock is held (legacy byte-0 files degrade
90
+ to "evidence unavailable"). The kernel lock remains authoritative — no
91
+ reclaim, unlink, or PID kill is ever performed from metadata. Refs #370.
92
+ - **UI-drift debug engine** (`capture_ui_diagnostics`). On a `mode_switch_trigger`
93
+ failure, gflow dumps the composer's **structural** DOM signature — the
94
+ Material-Symbols ligature inventory, `crop_*` presence, textbox count, and
95
+ bounded overlay geometry — to a JSON alongside a **full-page** screenshot,
96
+ so a Flow frontend change is diagnosable from one artifact instead of a
97
+ bare (often black) viewport shot. Consolidated onto the incident-bundle
98
+ engine: the earlier in-development raw URL/title/body-text fields were
99
+ removed before release. (#183)
100
+ - **`website/docs/` PII-leak CI guard** (`scripts/ci/check_website_docs_pii.py`).
101
+ The published mkdocs mirror under `website/docs/` is an anonymized copy of
102
+ canonical `docs/`; this new gate fails CI (and runs in `/gflow:check`) if a
103
+ known private identifier — `denon82`, the OS username `ffrol`, a real
104
+ name/email — appears in a published file, catching an anonymization miss
105
+ before it ships (the failure mode of #362). Public references such as
106
+ `github.com/ffroliva/gflow-cli` and the APP_AUTHOR path are trap-free by
107
+ construction, so the guard needs no allow-list.
108
+
109
+ ### Fixed
110
+
111
+ - **Incident-capture hardening from the max-effort review** (14 confirmed
112
+ findings fixed pre-release): journals now stage first and page artifacts
113
+ share the 8s budget via a deadline, so a fully wedged renderer can no longer
114
+ cost the whole bundle or bypass suppression; the legacy mode-switch debug
115
+ dump writes structural JSON only (the unmarked full-page screenshot that
116
+ previously landed in the plain output dir on every ordinary run is gone —
117
+ the bundle's `sensitive/` screenshot is the one imagery artifact); capture
118
+ now also covers `generate_character_image` (which additionally gains the
119
+ exit-15 closed-browser mapping) and `upsample_image`, plus the common
120
+ stale-Chrome launch-crash contention path (#293); manifests report
121
+ `har_state: complete` only when the context demonstrably closed gracefully;
122
+ bundles staged for unexpected non-typed exceptions are now surfaced (path in
123
+ human output and `--json`); retention runs even when capture is disabled
124
+ (an opt-out no longer freezes previously captured bundles on disk), runs off
125
+ the event loop, and an undeletable pending bundle can no longer condemn
126
+ healthy ones; a Windows sharing violation during manifest finalization gets
127
+ a bounded retry; `browser.json` records the real JS error class
128
+ (`TypeError`/`ReferenceError`) instead of the constant `Error`; worker
129
+ daemon tasks rebind a per-task correlation id so incident ids are unique
130
+ and joinable to queue rows.
131
+ - **`FlowAppError` and `FlowAgentUiError` now report `retryable: true` on
132
+ every machine-readable surface.** Both are documented (and presented to
133
+ humans) as transient/retryable, but the CLI `--json` payload said
134
+ `retryable: false` and the MCP / worker-queue error envelopes carried no
135
+ retry signal at all. The classification now lives in one shared
136
+ `errors.is_retryable()` consumed by CLI JSON, MCP tool envelopes, and
137
+ persisted worker-queue error payloads — the three surfaces can no longer
138
+ drift.
139
+ - **Documentation drift corrected against the code:** `gflow image batch` docs
140
+ claimed generations run in parallel inside Flow (the transport is strictly
141
+ serial — each prompt's generation is awaited before the next submission)
142
+ and listed `--fail-fast` as the default (the CLI default is
143
+ `--continue-on-error`); the root plan still labeled the MCP server as
144
+ unshipped (shipped v0.21.0/v0.23.0).
145
+ - **Flow's new media-library / agentic A/B cohort now fails cleanly.** When a
146
+ project opens into Flow's full-page media-library (or agentic chat) composer —
147
+ which has no classic `crop_*` aspect/mode control — `gflow image` and
148
+ `gflow video` now raise a clear, retryable `FlowAgentUiError` ("this cohort
149
+ flaps; retry shortly") instead of the misleading `UiSelectorDriftError`
150
+ "file a bug". Detection is a runtime DOM scan at a new shared
151
+ `_mode_switch_error` raise site covering **both** the image and video paths.
152
+ Refs #174, #183.
153
+ - **Flow web-app crashes now fail cleanly instead of "file a bug".** When Flow's
154
+ web app renders its client-side-exception error boundary (a transient Flow
155
+ crash) instead of the editor, the mode-switch raise site now raises a retryable
156
+ `FlowAppError` (exit code 31) — "transient Flow error, retry shortly" — rather
157
+ than the misleading `UiSelectorDriftError`. Detected via the Flow error-page
158
+ title; surfaced by the #183 UI-drift debug engine.
159
+ - **Experimental transport self-lockout.** The `bearer` and `sapisidhash`
160
+ transports discard a caller-supplied Playwright page and re-acquire the profile
161
+ `ProfileLease` in their own `setup()`. Driving one via `GFLOW_CLI_TRANSPORT`
162
+ inside a `FlowApiClient` (which already holds the lease) self-locked with an
163
+ opaque `ProfileLockedError`. `FlowApiClient` now refuses these standalone-only
164
+ transports up front with a clear `ConfigurationError` naming the transport and
165
+ pointing to `ui_automation`/`evaluate_fetch` or standalone use. `evaluate_fetch`
166
+ is unaffected (it shares the client's page). New `STANDALONE_ONLY_TRANSPORTS`
167
+ set + `resolve_transport_name()` helper in `api/transports`.
168
+
10
169
  ## [0.42.0] — 2026-07-21
11
170
 
12
171
  ### Fixed
@@ -2225,7 +2384,9 @@ shell-script template that branches on these codes.
2225
2384
 
2226
2385
  First skeleton. Not functional end-to-end yet.
2227
2386
 
2228
- [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.42.0...HEAD
2387
+ [Unreleased]: https://github.com/ffroliva/gflow-cli/compare/v0.44.0...HEAD
2388
+ [0.44.0]: https://github.com/ffroliva/gflow-cli/compare/v0.43.0...v0.44.0
2389
+ [0.43.0]: https://github.com/ffroliva/gflow-cli/compare/v0.42.0...v0.43.0
2229
2390
  [0.42.0]: https://github.com/ffroliva/gflow-cli/compare/v0.41.0...v0.42.0
2230
2391
  [0.41.0]: https://github.com/ffroliva/gflow-cli/compare/v0.40.0...v0.41.0
2231
2392
  [0.40.0]: https://github.com/ffroliva/gflow-cli/compare/v0.39.0...v0.40.0
@@ -11,6 +11,22 @@ uv sync --extra dev
11
11
  uv run playwright install chromium
12
12
  ```
13
13
 
14
+ ### Codex project skills
15
+
16
+ Codex CLI and the Codex desktop app can install the repository's canonical `skills/`
17
+ workflows as the `gflow` plugin. From the repository root, run:
18
+
19
+ ```bash
20
+ codex plugin marketplace add .
21
+ codex plugin add gflow@gflow-cli
22
+ ```
23
+
24
+ Start a new Codex session after installation, then invoke a workflow with `$gflow:<skill>`
25
+ (for example, `$gflow:status`, `$gflow:check`, or `$gflow:pr-council-review`). Claude Code
26
+ continues to use the equivalent `/gflow:*` commands. The Codex IDE extension does not
27
+ currently load plugins; include the relevant `skills/<name>/SKILL.md` directly when using
28
+ that surface.
29
+
14
30
  ## Test-driven development (mandatory)
15
31
 
16
32
  `gflow-cli` is built test-first. Every change must include tests, and CI rejects PRs that lower coverage.
@@ -14,6 +14,61 @@ Living list of behaviour that's broken, surprising, or limited by design — alo
14
14
 
15
15
  ## Open
16
16
 
17
+ ### One-time Flow banner/modal can cover the composer on first load
18
+
19
+ - **Status:** Open ([#369](https://github.com/ffroliva/gflow-cli/issues/369))
20
+ - **Severity:** Low (transient) · **Affected:** any UI-automation command on a profile that hasn't seen the banner yet
21
+
22
+ A Flow-side one-time announcement banner/modal can overlay the composer and
23
+ make the mode-switch / settings probes miss. It shows once per
24
+ profile+cookie state, so it is gone on re-run and cannot be reproduced on
25
+ demand. gflow does **not** guess a dismiss selector for unknown overlays
26
+ (clicking unknown UI is riskier than failing). Since v0.43.0 the automatic
27
+ incident bundle records the overlay's bounded geometry, `role`,
28
+ `aria-modal`, `z-index`, `pointer-events`, and inner Material-Symbol
29
+ ligatures (no raw text) plus a `sensitive/` screenshot — enough to write a
30
+ targeted dismissal once the next occurrence is captured. **Workaround:**
31
+ re-run the command; open the project once manually in Chrome to consume the
32
+ banner.
33
+
34
+ ### Profile lock reported as "held by another process" with no obvious owner
35
+
36
+ - **Status:** Resolved ([#370](https://github.com/ffroliva/gflow-cli/issues/370)) · remediation message clarified
37
+ - **Severity:** Low (by design; fails closed — never corrupts) · **Affected:** `ProfileLease` acquisition (exit 11)
38
+
39
+ `ProfileLockedError` can surface when no `chrome.exe` / `gflow` process is
40
+ obvious. This is **working as intended, not a stale-file bug.** The profile
41
+ lock is a kernel *advisory* byte-range lock, which the OS releases the instant
42
+ its holder dies — so a leftover lock *file* can never block acquisition. If
43
+ `acquire` is blocked, a **live** process genuinely holds it, most often a
44
+ `python.exe` (a prior gflow run, or a pytest child that outlived its shell)
45
+ that a scan for `chrome.exe` misses. gflow deliberately never auto-deletes a
46
+ lock file or kills a recorded PID from metadata: an unlink→new-inode race could
47
+ put two browsers on one profile — the exact corruption the lease exists to
48
+ prevent. Since v0.43.0 contention reports the recorded owner's PID and observed
49
+ start time locally (metadata starts at offset 1 so Windows contenders can read
50
+ it while byte 0 is kernel-locked), and the remediation message now names the
51
+ live-owner reality and tells you to just retry when nothing is running.
52
+ **Workaround:** close the process at the PID the error prints
53
+ (`Get-Process -Id <pid>` / `ps -p <pid>`, then `Stop-Process -Id <pid>` /
54
+ `kill <pid>`), or use a different `--profile`.
55
+
56
+ ### Unexplained image-generation HTTP 400 (observed live 2026-07-22)
57
+
58
+ - **Status:** Open (no issue yet — evidence-gathering)
59
+ - **Severity:** Low (single occurrence) · **Affected:** `image t2i` wire path
60
+
61
+ One live `batchGenerateImages` call returned an HTTP 400 that was neither a
62
+ content-safety rejection nor a known wire shape; the retry succeeded. Root
63
+ cause unidentified and **not** claimed fixed by v0.43.0. A 400 that resolves
64
+ on retry writes **no** incident bundle (successful commands capture nothing).
65
+ The diagnostics help only when such a 400 *terminates* the command as a
66
+ captured failure (e.g. a `WireFormatError`): its incident bundle's
67
+ `network.json` then carries allowlisted discovery evidence for the failed
68
+ request (numeric error code, status enum, known-key booleans, unknown-key
69
+ count, message length — never the raw body), which is the evidence this entry
70
+ is waiting on. **Workaround:** retry; the failure has not recurred.
71
+
17
72
  ### Flow's `uploadImage` endpoint rejects some JPEGs with HTTP 400 (metadata-sensitive)
18
73
 
19
74
  - **Status:** Open ([#287](https://github.com/ffroliva/gflow-cli/issues/287))
@@ -109,6 +164,17 @@ reaches the submit** — the request carries no `referenceEntities`, so the
109
164
  submit backstops raise `WireFormatError` (**exit 7**) instead of silently
110
165
  returning a text-only generation as success.
111
166
 
167
+ **Plain generation on this cohort now fails cleanly (#183).** When a project
168
+ opens into this full-page library (or the agentic chat composer) there is no
169
+ classic `crop_*` aspect/mode control, so `gflow image`/`gflow video` can't drive
170
+ generation. Rather than the old opaque `UiSelectorDriftError` "file a bug", the
171
+ mode-switch raise site now runs a runtime DOM scan and raises a clear, **retryable**
172
+ `FlowAgentUiError` (**exit 25**, "this cohort flaps; retry shortly"), and dumps a
173
+ DOM-signature diagnostics artifact (`diag_mode_switch_miss.json` + a full-page
174
+ screenshot) for reporting. The cohort is server-assigned per page load and flaps
175
+ within ~12h, so a re-run often lands the classic UI. Driving the new UI directly
176
+ is still out of scope.
177
+
112
178
  **How to tell which UI your account has:** in the Flow web editor, click
113
179
  **Add Media** — a small dialog means the old (working) UI; a navigation to a
114
180
  full-page library means the affected new UI.
@@ -352,6 +418,8 @@ The worker queue (`generation_queue`, used by the `gflow serve` daemon and MCP t
352
418
 
353
419
  **Why this can't be resolved automatically today:** Flow's generation-status REST endpoint rejects a bare, cookie-only `page.request` re-check with HTTP 401 — only a live, authenticated Playwright SPA re-poll (opening the project page and reading the DOM) can turn a preserved handle back into a real status, and that live re-poll path is not wired into recovery yet (tracked for a future phase; see the C1 handle-spike notes in `docs/superpowers/specs/2026-07-19-production-readiness-hardening-design.md` Appendix A).
354
420
 
421
+ **Decision (2026-07-21):** keep the safe stub — `recover_processing` marks post-submit interruptions `indeterminate` and never auto-resubmits, which is already correct. Building the auto-reconciler is deferred until **F1** (credit-free project-page re-entry) is confirmed against live Flow; until then a blind reconciler would be speculative code against unverified blackbox behavior. The `client` reconcile-hook seam and the live-gated `tests/e2e/test_crash_recovery_e2e.py` are already in place for when F1 lands.
422
+
355
423
  **Manual reconciliation:** an `indeterminate` row's checkpoint retains whatever handle/project info was captured before interruption. To resolve one by hand: open the relevant Flow project in the browser and check whether the expected asset appears.
356
424
  - **Found** — the generation completed; no action needed (the credit was spent as intended, just not auto-recorded locally).
357
425
  - **Not found after a few minutes** — it likely never completed; safe to resubmit the same prompt manually.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gflow-cli
3
- Version: 0.42.0
3
+ Version: 0.44.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
@@ -358,7 +358,7 @@ The video-generation feature has its own sub-phase plan (spike → Phase A → P
358
358
  - **Phase 3 (PR #90 / [#63](https://github.com/ffroliva/gflow-cli/issues/63), 2026-05-26, develop `9a0896a8`):** replaced `FRAME_SLOTS_STRUCT` with the locale-free pattern `div[type='button'][aria-haspopup='dialog']` (verified via DOM probe — matches exactly 2). Also fixed the End-frame OOB index after Start is attached. **I2V live-proof on de-DE: 124 s, mp4 with `ftyp` magic bytes, both `frame_attached` events fired (Start + End).**
359
359
  - **Phase 4 (Task #6, 2026-05-26, branch `claude/next-quick-win-gBPqS`, PR #93):** `NEW_PROJECT_SELECTORS` expanded to all 14 locales (icon-first tier + 14-locale text tier); English-only ARIA fallbacks (`[aria-label*='New project']`, `[aria-label*='Project']`) removed. `SUBMIT_BUTTON_SELECTORS` drops its English-only `button[aria-label*="Create"]` entry — `arrow_forward` icon selectors cover it in all locales. Both tuples are now fully locale-invariant. Note: issue #24 was closed 2026-05-24 after Phases 1–3; Phase 4 is cosmetic tail work. `--lang=en-US` retained only to stabilise `IMAGE_MODEL_OPTION_SELECTORS` (product names like "Nano Banana 2" may be localised). Removing it requires converting the image model picker to a structural anchor — tracked as issue #94 (Phase 5 below). **R2V live e2e on non-EN not yet exercised** — still open.
360
360
  - **Phase 5 (2026-05-30, branch `claude/issue-94-staleness-check-MnsEY`, PR #127):** `IMAGE_MODEL_OPTION_SELECTORS` and `VIDEO_MODEL_OPTION_SELECTORS` converted from `dict[Model, str]` to `dict[Model, tuple[str, ...]]` (cascade discipline; Tier 1 structural slots reserved for future DOM-probe-confirmed anchors). `--lang=en-US` removed from Chromium launch args — locale controlled by `locale=locale_env` Playwright kwarg (persists across all navigations including `/project/<uuid>` deep-links) + `FLOW_URL`'s `?hl=en` on initial load. Branded model names confirmed locale-stable. Four new `TestSelectorLocaleInvariance` tests + four `TestSelectImageModel` runtime tests. **R2V live e2e on non-EN still pending (owner gate — requires authenticated non-EN Chrome profile).**
361
- - [ ] **Model Context Protocol (MCP) Server.** (Backlog) Expose core gflow-cli tools via MCP for language-agnostic agentic access. Planned in [PREDICT.md](file:///C:/development/github/gflow-cli/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md) / [SCENARIO.md](file:///C:/development/github/gflow-cli/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md) / [PLAN.md](file:///C:/development/github/gflow-cli/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md).
361
+ - [x] **Model Context Protocol (MCP) Server — SHIPPED** (stdio + HTTP/SSE server in v0.21.0, MCP→FlowWorker generation wiring in v0.23.0/PR #228; `gflow mcp run/setup` + `gflow serve`). Planned in [PREDICT.md](file:///C:/development/github/gflow-cli/docs/superpowers/plans/2026-06-22-mcp-server/PREDICT.md) / [SCENARIO.md](file:///C:/development/github/gflow-cli/docs/superpowers/plans/2026-06-22-mcp-server/SCENARIO.md) / [PLAN.md](file:///C:/development/github/gflow-cli/docs/superpowers/plans/2026-06-22-mcp-server/PLAN.md).
362
362
  - [x] **Tools framework + Prompt Expansion ("Creative Director") — shipped → develop (PRs #210 + #211, 2026-06-28).** Prompt expansion evolved from the never-released `-e`/`--expand` flag into a TOML-defined **Tools framework**: `creative-director` is the first built-in tool, invoked uniformly via `--tool/-t <name>[:k=v]` on every generation command (`image t2i`/`i2i`/`batch`, `video t2v`/`i2v`/`r2v`/`chain`) or standalone via `gflow tools list/show/run`. The tool rewrites a terse prompt via Gemini's 5-component formula (`src/gflow_cli/tools/`, stdlib-urllib expander, never-fatal: missing key / 429-backoff / network / empty-clean all fall back to the original), with 15 domain styles and deterministic banned-keyword stripping. `operations.expanded_prompt` records original + submitted expansion (withheld under `history_prompts=redacted`); `metadata_json.tool` records `{name, version, model, params, config_hash}` provenance (minimized in redacted mode). Reuses `GFLOW_CLI_GEMINI_API_KEY`; `GFLOW_CLI_GEMINI_MODEL` overrides. MCP parity: `gflow_list_tools` + a `tools` array param per AGENTS.md §61. Docs: [TOOLS.md](file:///C:/development/github/gflow-cli/docs/TOOLS.md) + [PROMPT_EXPANSION.md](file:///C:/development/github/gflow-cli/docs/PROMPT_EXPANSION.md). Memory `[[prompt-expansion-feature]]`.
363
363
  - **PR #210 (framework):** `tools/` package (spec/loader/registry/runtime/expander/banned/invocation), `creative-director.toml`, `gflow tools list/show/run`, `--tool` on t2i/t2v (single-prompt guard kept), MCP `gflow_list_tools` + `tools` param.
364
364
  - **PR #211 (broaden surface):** `original_prompt`/`tool` carried on the request DTOs (`GenerateImageRequest`/`GenerateVideoRequest`/`BatchPromptItem`/`ChainLinkSpec`); recorder reads `request.original_prompt` (kwarg retired); `metadata_json.tool` recording; `--tool` wired into i2i/batch/i2v/r2v/chain; single-prompt guard removed. Silent-misrecord hazard resolved by carrying `original_prompt` on the DTO rather than re-threading a kwarg through each recorder method.
@@ -85,13 +85,14 @@ python -m pip install --pre gflow-cli
85
85
  see the root-doc allowlist.)
86
86
  6. Update the version in:
87
87
  - `pyproject.toml`
88
+ - `.codex-plugin/plugin.json`
88
89
  - `src/gflow_cli/__init__.py`
89
90
  - any tests that assert the package version
90
91
  7. Move user-visible changes from `CHANGELOG.md` `[Unreleased]` into a dated
91
92
  release section.
92
93
  8. Commit the release prep:
93
94
  ```bash
94
- git add pyproject.toml src/gflow_cli/__init__.py CHANGELOG.md tests docs
95
+ git add pyproject.toml .codex-plugin/plugin.json src/gflow_cli/__init__.py CHANGELOG.md tests docs
95
96
  git commit -m "chore(release): vX.Y.Z"
96
97
  ```
97
98
  9. Tag and push. **Must be a signed annotated tag** (`-s`) — `.github/workflows/release.yml` rejects unsigned or lightweight tags. Requires a GPG or SSH signing key registered with your GitHub account.
@@ -303,6 +303,41 @@ Format defaults to **human-readable on TTY**, **JSON when piped or `GFLOW_CLI_LO
303
303
 
304
304
  Pipes cleanly into `jq` / Loki / Datadog without configuration. See [`docs/USER_GUIDE.md` § Journey 6](USER_GUIDE.md#journey-6--read-the-structured-logs) for `jq` recipes.
305
305
 
306
+ ## Incident diagnostics (shipped, v0.43.0)
307
+
308
+ `FlowApiClient` owns one session-scoped `IncidentRecorder`
309
+ (`gflow_cli.diagnostics`) because it already owns the persistent
310
+ `BrowserContext`, the Page pool, teardown ordering, settings, and the
311
+ profile lease. Lifecycle, in order:
312
+
313
+ 1. **Construct before lease acquisition** (plus best-effort retention
314
+ pruning), so `ProfileLockedError` contention can produce a metadata-only
315
+ bundle without ever launching Chrome.
316
+ 2. **Attach listeners after context launch, before the bootstrap
317
+ navigation:** context-level `request`/`response`/`requestfailed` plus a
318
+ `page` hook, and `console`/`pageerror` on every pooled page. Callbacks do
319
+ synchronous primitive extraction into bounded ring journals only — they
320
+ never retain Playwright objects, read bodies, touch the DOM, or perform
321
+ I/O.
322
+ 3. **Capture at the generation boundaries** (`generate_image` /
323
+ `generate_images_batch` / `generate_video`) while the page is still
324
+ alive: structural DOM + sensitive screenshot + journal snapshots are
325
+ *staged*; the manifest is not yet written. Capture is observation-only
326
+ and serialized by a recorder-local lock; repeats of one failure
327
+ fingerprint only bump a suppression counter (max 3 bundles/command).
328
+ 4. **Teardown order (load-bearing):** detach + freeze journals → bounded
329
+ context close → resolve HAR state honestly from a pre-launch file
330
+ snapshot → atomically finalize staged manifests (`manifest.json` last)
331
+ → driver stop → lease release. Finalization runs through the same
332
+ bounded/shielded teardown-step helper as everything else and can never
333
+ mask a close/driver/lease failure or swallow a cancellation.
334
+
335
+ The legacy `capture_ui_diagnostics` debug dump consumes the same structural
336
+ DOM engine (`STRUCTURAL_DOM_JS` + `validate_structural_dom`) — there is one
337
+ DOM/screenshot engine, not two artifact formats. See
338
+ [DEBUGGING § Automatic incident bundles](DEBUGGING.md#automatic-incident-bundles)
339
+ and [SECURITY § Automatic incident bundles](SECURITY.md#automatic-incident-bundles-gflow_cli_incident_capture-default-on).
340
+
306
341
  ## Testing topology
307
342
 
308
343
  | Layer | Test type | Where | Network? |
@@ -395,6 +430,8 @@ We attempted three pure-HTTP transport strategies before settling on `ui_automat
395
430
 
396
431
  All three now live as standalone modules under `src/gflow_cli/api/transports/experimental/` (`evaluate_fetch.py` / `bearer.py` / `sapisidhash.py`), preserved for reference and future iteration. None survives Google's anti-bot stack for mutation/generation endpoints, so the production path is `ui_automation`.
397
432
 
433
+ **Standalone-only transports.** `bearer` and `sapisidhash` discard any caller-supplied Playwright page and launch their own browser under a fresh `ProfileLease`, so they are **standalone-only** — they cannot run inside a `FlowApiClient` that already holds the profile lease (the second acquire would self-lock with `ProfileLockedError`). Selecting either via `GFLOW_CLI_TRANSPORT` (or the Python API) while the client owns the profile now fails fast with a clear `ConfigurationError` naming the transport, rather than the opaque lock error. `evaluate_fetch` is exempt: it reuses the client's shared page and takes no second lease. The standalone-only set lives in `STANDALONE_ONLY_TRANSPORTS` (`api/transports/__init__.py`); to drive `bearer`/`sapisidhash`, run them outside an owning client.
434
+
398
435
  ### What this costs users
399
436
 
400
437
  - A **persistent Chrome profile** on disk (~150 MB after `playwright install chromium`).
@@ -38,12 +38,22 @@ seeding the second step with the first:
38
38
 
39
39
  1. **Face (slot 0).** gflow submits your `--face-prompt` and Flow generates the **face** image. This becomes
40
40
  the character's first reference image.
41
- 2. **Body (slot 1).** gflow clicks the editor's slot-add ("+") button, which **auto-attaches the just-generated
42
- face image as the reference seed** for the new slot. gflow then submits its **own self-contained
41
+ 2. **Body (slot 1).** gflow activates the editor's Create-Body mode, which **auto-attaches the just-generated
42
+ face image as the reference seed**. gflow then submits its **own self-contained
43
43
  front/side/back triptych prompt** (it wraps your `--body-prompt` body/outfit description). Because the face
44
44
  is attached as the seed, a **single credited generation** produces all three body angles — front, side, and
45
45
  back — that match the face.
46
46
 
47
+ The character editor is a **two-mode surface** ("Portrait" / "Create Body"). Current Flow reuses one Slate
48
+ editor across both modes, so gflow anchors Create Body by the locale-independent `accessibility_new` icon
49
+ beside the portrait-image button and requires a new generated-face reference chip to mount before using the
50
+ shared box. Older cohorts that mount a second prompt box remain supported through a Slate-count-rise gate. In
51
+ both cases gflow verifies the selected
52
+ body box still owns focus **before clearing or typing**. If the structural mode signal or focus check fails,
53
+ the body step aborts before any autosaved prompt edit; post-type isolation failures abort before the credited
54
+ submit. This guards the race that corrupted a stored portrait prompt live on 2026-07-25/0.43.0. Re-run
55
+ `gflow character create` to retry; the saga reuses the entity and completed face slot (§4).
56
+
47
57
  The result: two generations (face + body-triptych), the body kept on-model by the face seed. Everything else —
48
58
  naming the character, setting the voice/personality, and saving — is free metadata (REST), not generation. See
49
59
  §4 for the full saga and §6.2 for the wire payload.
@@ -269,7 +279,7 @@ is **shipped** (see the table below).
269
279
 
270
280
  | Command | Maps to |
271
281
  |---|---|
272
- | `gflow character create --project <id> --name <name> --face-prompt … [--body-prompt …] [--voice <Name>] [--personality …] [--model nano2\|nanopro] [--profile …] [--locale en-US] [--json]` *(SHIPPED v0.12.0 — shipped option names; characters have NO aspect-ratio control)* | createEntity → gen face (slot 0) → commit_workflow → optional gen body (slot 1) → commit_workflow → patch_entity, via the persist-before-spend saga (§4). `--body-prompt` is a **body/outfit DESCRIPTION** — gflow wraps it in a self-contained **front/side/back triptych** instruction and seeds it with the generated face (auto-attached as the slot-add reference), so one body generation yields all three angles. Generated images are **downloaded** to storage; the result reports each slot's local path. |
282
+ | `gflow character create --project <id> --name <name> --face-prompt … [--body-prompt …] [--voice <Name>] [--personality …] [--model nano2\|nanopro] [--profile …] [--locale en-US] [--json]` *(SHIPPED v0.12.0 — shipped option names; characters have NO aspect-ratio control)* | createEntity → gen face (slot 0) → commit_workflow → optional gen body (slot 1) → commit_workflow → patch_entity, via the persist-before-spend saga (§4). `--body-prompt` is a **body/outfit DESCRIPTION** — gflow wraps it in a self-contained **front/side/back triptych** instruction and seeds it with the generated face (auto-attached as the body-mode reference), so one body generation yields all three angles. Generated images are **downloaded** to storage; the result reports each slot's local path. |
273
283
  | `gflow character list --project <id> [--json]` *(SHIPPED v0.12.0)* | projectInitialData → entities[CHARACTER] |
274
284
  | `gflow character show --project <id> (--id <entityId> \| --name <displayName>) [--json]` *(SHIPPED v0.12.0)* | projectInitialData (single); name collision → exit 11 with disambiguation hint |
275
285
  | `gflow character voices [--json]` *(SHIPPED v0.12.0)* | list the 29 preset voices (name / description / sample-url); language-agnostic discovery, mirrors `gflow models --json` |
@@ -403,7 +413,7 @@ Built by `routes.character_editor_url(locale, projectId, entityId)`. The **`/fx/
403
413
  without it Flow 404s (caught by spike T-A; the fix sourced the URL from `LABS_FX_BASE`). Navigating to this
404
414
  URL (not the new-project flow) is what makes Flow's JS set `entityContext` on the generation. Name / voice /
405
415
  personality are REST `PATCH flow/entities`. The only *new* generation selectors are the prompt/submit (already
406
- owned by gflow) and the slot-add.
416
+ owned by gflow) and the body-mode activation/settle signals.
407
417
 
408
418
  | Purpose | Selector | Conf. |
409
419
  |---|---|---|
@@ -413,7 +423,7 @@ owned by gflow) and the slot-add.
413
423
  | Name field | `input[placeholder]` — localized placeholder; **do NOT rely on the text** (structural: it is the editor's lone placeholdered input) | **VERIFIED** |
414
424
  | Personality field | the panel `textarea` (localized placeholder) — **prefer REST PATCH** | **VERIFIED** |
415
425
  | Slot 0 image (face) | aria-label `"Imagem do personagem 1"` — **localized**, note only (do not load-bear on the text) | med (localized) |
416
- | **Slot-add (body / slot 1)** | `add_2` google-symbols ligature; the editor has **TWO** `add_2` buttons → slot-add is **`.nth(1)`** (`_CHARACTER_SLOT_ADD_SELECTOR = "button:has(i.google-symbols:text('add_2'))"`). The **first** `add_2` is the gallery "+ New project" CTA → positional disambiguation. ⚠️ confirm `.nth(1)` in the live body-gen e2e (Task 12). | **VERIFIED** (selector) / ⚠️ ordering |
426
+ | **Body mode (slot 1)** | Current cohort: portrait-image sibling `button:has(img) + button:has(i.google-symbols:text-is('accessibility_new'))`; settle signal: a newly mounted generated-media card with an `img` and exact `cancel` icon. Legacy cohort fallback: icon-only `[role=button]` carrying exact `add_2`, followed by Slate-box count rise. No localized button text or positional index. | **VERIFIED** live 2026-07-26 |
417
427
  | Model picker (char editor) | `button[aria-haspopup='menu']:has(i.google-symbols:text-is('arrow_drop_down'))` *(normal editor uses `crop_16_9`)* | **VERIFIED** |
418
428
  | Voice picker | `voice_selection` google-symbols ligature | **VERIFIED** (ligature) |
419
429
  | Personagens nav (project) | `button:has(i.google-symbols:text-is('accessibility_new'))` (cards are `div[role=button]`; tag disambiguates) | high |
@@ -421,10 +431,10 @@ owned by gflow) and the slot-add.
421
431
  | Picker tab → Personagens | `[role=dialog] button[role=tab]:has(i.google-symbols:text-is('accessibility_new'))` | high |
422
432
  | **Picker "include in command"** | primary `button` in the dialog footer — **no ligature → structural anchor (last/primary dialog button)**; only appears *after* an option is selected | low ⚠️ |
423
433
 
424
- ⚠️ **Documented risk (Task-12 e2e):** the slot-add `.nth(1)` ordering and the picker include button (no
425
- ligature, localized text only) are positional/structural anchors that must be confirmed under a live non-EN
426
- locale. Slot 0's `"Imagem do personagem N"` aria-label is **localized** — used as a note, never as a
427
- load-bearing selector.
434
+ ⚠️ **Documented risk (Task-12 e2e):** the picker include button (no ligature, localized text only) remains a
435
+ positional/structural anchor to confirm under a live non-EN locale. Body mode no longer uses the stale
436
+ `.nth(1)` selector; its mode and settle icons are locale-independent. Slot 0's `"Imagem do personagem N"`
437
+ aria-label is **localized** — used as a note, never as a load-bearing selector.
428
438
 
429
439
  Shared chrome already automated by gflow (reuse as-is): `add_2` (+/Criar add-media → opens picker),
430
440
  `arrow_forward` (submit), the Slate prompt box, model dropdown, `check`/Concluir.
@@ -472,7 +482,7 @@ table → test mapping):
472
482
 
473
483
  **Remaining LIVE-e2e-only (Task 12):** the live binding/recovery/UTF-8 e2e on denon82 — real
474
484
  `parentEntityId == entityId` against Flow's wire, mid-saga crash recovery against the real DB, and the
475
- slot-add `.nth(1)` + picker-include structural selectors under a non-EN locale.
485
+ body-mode icon/reference settle signals + picker-include structural selectors under a non-EN locale.
476
486
 
477
487
  ## 13.1 Known issues
478
488
 
@@ -261,6 +261,15 @@ GFLOW_CLI_HISTORY_PROMPTS=redacted gflow image t2i "confidential brief"
261
261
  **When to set it:** capturing locale-invariant DOM via `scripts/dev/capture_locale_invariants.py`, or live-verifying a generation under a non-EN account language.
262
262
  **Important:** Chrome's *UI* language is independently forced to `en-US` via the `--lang=en-US` launch arg (so Flow keeps serving `/fx/tools/flow/` and the editor's localized text selectors keep working). This env var only affects request headers — not the editor UI you see. See [KNOWN_ISSUES § issue #24](../KNOWN_ISSUES.md) for the path to dropping `--lang=en-US`.
263
263
 
264
+ ### `GFLOW_CLI_INCIDENT_CAPTURE`
265
+
266
+ **What:** Automatically writes a **private incident bundle** on relevant operational failures (Flow app crash, agentic-cohort/UI-mode errors, selector drift, transport timeouts, WAF/network/wire-format errors, profile-lock contention, unexpected exceptions while a page is alive) under `<GFLOW_CLI_HOME>/incidents/<YYYY-MM-DD>/<UTC-stamp>-<incident-id>-<rand>/`. See [DEBUGGING § Automatic incident bundles](DEBUGGING.md#automatic-incident-bundles) for the bundle layout and triggers.
267
+ **Values:** `true` | `false`
268
+ **Default:** `true`
269
+ **When to disable:** shared machines where even structural failure metadata should not persist, or scripted runs that must write nothing outside the output dir.
270
+
271
+ **Privacy:** the automatic JSON artifacts (`manifest.json`, `ui.json`, `network.json`, `browser.json`) are built from an explicit allowlist — no prompts, tokens, cookies, headers, request/response bodies, signed URLs, raw page titles, raw error/console text, or unknown hosts/routes ever enter them. The screenshot is inherently sensitive (it can show your account identity, prompts, and media) and therefore lives under the bundle's `sensitive/` subdirectory — **review it before sharing**. Nothing is ever uploaded; retention is bounded (at most 50 complete bundles / 250 MiB, pruned oldest-first at startup). Raw HAR capture stays separate and strictly opt-in via `GFLOW_CLI_HAR_PATH`.
272
+
264
273
  ### `GFLOW_CLI_HAR_PATH`
265
274
 
266
275
  **What:** Captures full Playwright network traffic (requests, responses, headers, cookies) to a HAR file for the session — useful for diagnosing wire-format surprises or WAF rejections.