codeframe-ai 0.9.2__tar.gz → 0.9.4__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 (238) hide show
  1. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/PKG-INFO +126 -40
  2. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/README.md +110 -26
  3. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/__init__.py +7 -1
  4. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/adapters/llm/anthropic.py +109 -67
  5. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/adapters/llm/base.py +15 -2
  6. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/adapters/llm/errors.py +68 -4
  7. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/adapters/llm/mock.py +55 -3
  8. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/adapters/llm/openai.py +67 -25
  9. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/auth/api_key_router.py +3 -8
  10. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/auth/dependencies.py +18 -3
  11. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/auth/manager.py +63 -6
  12. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/auth/router.py +57 -41
  13. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/auth/schemas.py +3 -0
  14. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/auth/scopes.py +0 -10
  15. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/auth/stream_tickets.py +17 -4
  16. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/__init__.py +2 -2
  17. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/app.py +493 -493
  18. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/auth_commands.py +108 -23
  19. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/config_commands.py +2 -1
  20. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/dashboard_commands.py +3 -1
  21. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/engines_commands.py +7 -5
  22. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/env_commands.py +9 -8
  23. codeframe_ai-0.9.4/codeframe/cli/helpers.py +41 -0
  24. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/hooks_commands.py +46 -23
  25. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/import_commands.py +9 -6
  26. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/pr_commands.py +203 -52
  27. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/proof_commands.py +145 -131
  28. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/stats_commands.py +5 -4
  29. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/telemetry_runtime.py +7 -4
  30. codeframe_ai-0.9.4/codeframe/cli/validators.py +194 -0
  31. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/config/rate_limits.py +16 -21
  32. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/__init__.py +0 -2
  33. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/adapters/builtin.py +18 -2
  34. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/adapters/codex.py +206 -60
  35. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/adapters/git_utils.py +33 -0
  36. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/adapters/kilocode.py +50 -8
  37. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/adapters/opencode.py +53 -32
  38. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/adapters/streaming_chat.py +125 -82
  39. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/adapters/subprocess_adapter.py +103 -87
  40. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/adapters/verification_wrapper.py +16 -1
  41. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/agent.py +58 -11
  42. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/agent_env.py +45 -2
  43. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/blockers.py +26 -4
  44. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/checkpoints.py +52 -7
  45. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/conductor.py +487 -139
  46. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/config.py +18 -230
  47. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/config_watcher.py +51 -28
  48. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/cost_tracker.py +24 -4
  49. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/credentials.py +150 -7
  50. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/dangerous_commands.py +8 -2
  51. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/engine_registry.py +36 -2
  52. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/env_provenance.py +0 -1
  53. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/events.py +13 -4
  54. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/gates.py +255 -138
  55. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/github_integration_config.py +154 -7
  56. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/github_issues_service.py +11 -4
  57. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/importers/ralph.py +32 -2
  58. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/installer.py +2 -13
  59. codeframe_ai-0.9.4/codeframe/core/llm_json.py +113 -0
  60. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/llm_resolution.py +141 -4
  61. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/models.py +10 -0
  62. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/prd.py +6 -3
  63. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/prd_discovery.py +369 -60
  64. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/prd_stress_test.py +32 -2
  65. codeframe_ai-0.9.4/codeframe/core/proof/capture.py +92 -0
  66. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/proof/evidence.py +42 -3
  67. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/proof/ledger.py +191 -102
  68. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/proof/models.py +6 -0
  69. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/proof/obligations.py +21 -0
  70. codeframe_ai-0.9.4/codeframe/core/proof/report.py +54 -0
  71. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/proof/runner.py +215 -4
  72. codeframe_ai-0.9.4/codeframe/core/proof/scope.py +345 -0
  73. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/proof/stubs.py +76 -56
  74. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/react_agent.py +35 -4
  75. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/reconciliation.py +18 -9
  76. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/replay.py +23 -2
  77. codeframe_ai-0.9.4/codeframe/core/run_control.py +435 -0
  78. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/runtime.py +159 -17
  79. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/sandbox/context.py +133 -25
  80. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/schedule.py +3 -3
  81. codeframe_ai-0.9.4/codeframe/core/spend_limit.py +228 -0
  82. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/streaming.py +32 -6
  83. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/task_tree.py +45 -43
  84. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/tasks.py +67 -34
  85. codeframe_ai-0.9.4/codeframe/core/tech_stack.py +135 -0
  86. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/telemetry.py +1 -1
  87. codeframe_ai-0.9.4/codeframe/core/usage_recording.py +249 -0
  88. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/workspace.py +86 -37
  89. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/git/github_integration.py +57 -2
  90. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/lib/audit_logger.py +6 -107
  91. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/lib/metrics_tracker.py +5 -288
  92. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/lib/quality/security_scanner.py +10 -2
  93. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/lib/rate_limiter.py +73 -65
  94. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/notifications/webhook.py +119 -53
  95. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/platform_store/database.py +250 -9
  96. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/platform_store/repositories/base.py +0 -131
  97. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/platform_store/repositories/interactive_sessions.py +3 -1
  98. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/platform_store/repositories/workspace_registry_repository.py +22 -0
  99. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/platform_store/schema_manager.py +34 -65
  100. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/dependencies.py +206 -8
  101. codeframe_ai-0.9.4/codeframe/ui/models.py +92 -0
  102. codeframe_ai-0.9.4/codeframe/ui/response_models.py +188 -0
  103. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/batches_v2.py +23 -6
  104. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/checkpoints_v2.py +4 -1
  105. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/costs_v2.py +5 -6
  106. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/discovery_v2.py +112 -13
  107. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/environment_v2.py +2 -2
  108. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/events_v2.py +7 -1
  109. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/gates_v2.py +2 -2
  110. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/github_integrations_v2.py +60 -76
  111. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/interactive_sessions_v2.py +3 -2
  112. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/pr_v2.py +89 -11
  113. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/prd_v2.py +93 -15
  114. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/proof_v2.py +56 -5
  115. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/session_chat_ws.py +120 -7
  116. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/settings_v2.py +52 -92
  117. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/tasks_v2.py +156 -33
  118. codeframe_ai-0.9.4/codeframe/ui/routers/terminal_ws.py +376 -0
  119. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/workspace_v2.py +57 -94
  120. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/server.py +31 -65
  121. codeframe_ai-0.9.4/codeframe/ui/shared.py +83 -0
  122. codeframe_ai-0.9.2/codeframe/ui/routers/streaming_v2.py → codeframe_ai-0.9.4/codeframe/ui/streaming_utils.py +28 -20
  123. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe_ai.egg-info/PKG-INFO +126 -40
  124. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe_ai.egg-info/SOURCES.txt +10 -2
  125. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe_ai.egg-info/requires.txt +16 -13
  126. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/pyproject.toml +45 -15
  127. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/tests/test_claude_review_workflow_1011.py +2 -1
  128. codeframe_ai-0.9.4/tests/test_deploy_audit_gate_1131.py +143 -0
  129. codeframe_ai-0.9.4/tests/test_deploy_config.py +491 -0
  130. codeframe_ai-0.9.4/tests/test_design_partners_619.py +91 -0
  131. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/tests/test_lifecycle_gates_948.py +169 -35
  132. codeframe_ai-0.9.4/tests/test_ops_hygiene_969.py +212 -0
  133. codeframe_ai-0.9.4/tests/test_pm2_scoping_912.py +156 -0
  134. codeframe_ai-0.9.4/tests/test_roadmap_status_1246.py +136 -0
  135. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/tests/test_root_docs_950.py +15 -0
  136. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/tests/test_workflow_lint_wiring_1122.py +84 -19
  137. codeframe_ai-0.9.2/codeframe/cli/commands/__init__.py +0 -5
  138. codeframe_ai-0.9.2/codeframe/cli/helpers.py +0 -56
  139. codeframe_ai-0.9.2/codeframe/cli/validators.py +0 -153
  140. codeframe_ai-0.9.2/codeframe/core/llm_json.py +0 -62
  141. codeframe_ai-0.9.2/codeframe/core/proof/capture.py +0 -84
  142. codeframe_ai-0.9.2/codeframe/core/proof/scope.py +0 -113
  143. codeframe_ai-0.9.2/codeframe/ui/models.py +0 -999
  144. codeframe_ai-0.9.2/codeframe/ui/response_models.py +0 -241
  145. codeframe_ai-0.9.2/codeframe/ui/routers/terminal_ws.py +0 -265
  146. codeframe_ai-0.9.2/codeframe/ui/shared.py +0 -252
  147. codeframe_ai-0.9.2/tests/test_deploy_config.py +0 -308
  148. codeframe_ai-0.9.2/tests/test_pm2_scoping_912.py +0 -112
  149. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/LICENSE +0 -0
  150. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/__main__.py +0 -0
  151. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/adapters/__init__.py +0 -0
  152. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/adapters/e2b/__init__.py +0 -0
  153. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/adapters/e2b/adapter.py +0 -0
  154. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/adapters/e2b/budget.py +0 -0
  155. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/adapters/e2b/credential_scanner.py +0 -0
  156. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/adapters/llm/__init__.py +0 -0
  157. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/agents/__init__.py +0 -0
  158. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/agents/dependency_resolver.py +0 -0
  159. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/auth/__init__.py +0 -0
  160. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/auth/api_keys.py +0 -0
  161. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/auth/models.py +0 -0
  162. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/__main__.py +0 -0
  163. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/api_client.py +0 -0
  164. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/cli/auth.py +0 -0
  165. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/adapters/__init__.py +0 -0
  166. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/adapters/agent_adapter.py +0 -0
  167. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/adapters/claude_code.py +0 -0
  168. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/agents_config.py +0 -0
  169. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/api_key_service.py +0 -0
  170. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/artifacts.py +0 -0
  171. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/atomic_io.py +0 -0
  172. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/blocker_detection.py +0 -0
  173. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/claude_code_guard.py +0 -0
  174. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/context.py +0 -0
  175. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/context_packager.py +0 -0
  176. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/dependency_analyzer.py +0 -0
  177. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/dependency_graph.py +0 -0
  178. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/diagnostic_agent.py +0 -0
  179. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/diagnostics.py +0 -0
  180. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/editor.py +0 -0
  181. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/engine_stats.py +0 -0
  182. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/environment.py +0 -0
  183. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/executor.py +0 -0
  184. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/fix_tracker.py +0 -0
  185. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/git.py +0 -0
  186. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/github_connect_service.py +0 -0
  187. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/hook_trust.py +0 -0
  188. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/hooks.py +0 -0
  189. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/importers/__init__.py +0 -0
  190. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/notifications_config.py +0 -0
  191. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/path_safety.py +0 -0
  192. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/planner.py +0 -0
  193. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/progress.py +0 -0
  194. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/proof/__init__.py +0 -0
  195. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/quick_fixes.py +0 -0
  196. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/review.py +0 -0
  197. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/sandbox/__init__.py +0 -0
  198. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/sandbox/worktree.py +0 -0
  199. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/stall_detector.py +0 -0
  200. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/stall_monitor.py +0 -0
  201. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/state_machine.py +0 -0
  202. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/templates.py +0 -0
  203. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/tools.py +0 -0
  204. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/core/worktrees.py +0 -0
  205. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/git/__init__.py +0 -0
  206. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/lib/__init__.py +0 -0
  207. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/lib/quality/__init__.py +0 -0
  208. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/lib/quality/complexity_analyzer.py +0 -0
  209. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/lib/quality/owasp_patterns.py +0 -0
  210. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/notifications/__init__.py +0 -0
  211. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/planning/__init__.py +0 -0
  212. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/planning/prd_templates.py +0 -0
  213. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/planning/task_scheduler.py +0 -0
  214. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/planning/task_templates.py +0 -0
  215. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/platform_store/__init__.py +0 -0
  216. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/platform_store/repositories/__init__.py +0 -0
  217. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/platform_store/repositories/api_key_repository.py +0 -0
  218. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/platform_store/repositories/audit_repository.py +0 -0
  219. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/platform_store/repositories/token_repository.py +0 -0
  220. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/templates/AGENTS.md.default +0 -0
  221. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/tui/__init__.py +0 -0
  222. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/tui/app.py +0 -0
  223. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/tui/data_service.py +0 -0
  224. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/__init__.py +0 -0
  225. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/__init__.py +0 -0
  226. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/_helpers.py +0 -0
  227. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/blockers_v2.py +0 -0
  228. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/diagnose_v2.py +0 -0
  229. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/git_v2.py +0 -0
  230. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/review_v2.py +0 -0
  231. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/schedule_v2.py +0 -0
  232. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe/ui/routers/templates_v2.py +0 -0
  233. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe_ai.egg-info/dependency_links.txt +0 -0
  234. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe_ai.egg-info/entry_points.txt +0 -0
  235. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/codeframe_ai.egg-info/top_level.txt +0 -0
  236. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/setup.cfg +0 -0
  237. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/tests/test_ambient_workspace_guard.py +0 -0
  238. {codeframe_ai-0.9.2 → codeframe_ai-0.9.4}/tests/test_offline_default_946.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codeframe-ai
3
- Version: 0.9.2
3
+ Version: 0.9.4
4
4
  Summary: A project delivery system that orchestrates frontier coding agents: Think, Build, Prove, Ship.
5
5
  Author-email: Frank Bria <hello@codeframe.sh>
6
6
  License: AGPL-3.0-or-later
@@ -17,10 +17,10 @@ Classifier: Programming Language :: Python :: 3.13
17
17
  Requires-Python: >=3.11
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: anthropic>=0.18.0
20
+ Requires-Dist: anthropic<2,>=1.0
21
21
  Requires-Dist: bandit>=1.8.6
22
22
  Requires-Dist: tenacity>=8.2.0
23
- Requires-Dist: openai>=1.12.0
23
+ Requires-Dist: openai<3,>=1.12.0
24
24
  Requires-Dist: fastapi>=0.109.0
25
25
  Requires-Dist: uvicorn[standard]>=0.27.0
26
26
  Requires-Dist: websockets>=12.0
@@ -30,12 +30,13 @@ Requires-Dist: python-dotenv>=1.2.2
30
30
  Requires-Dist: sqlalchemy>=2.0.0
31
31
  Requires-Dist: aiosqlite>=0.19.0
32
32
  Requires-Dist: aiohttp>=3.14.0
33
+ Requires-Dist: yarl<2,>=1.22
33
34
  Requires-Dist: httpx>=0.27.0
34
- Requires-Dist: typer>=0.9.0
35
+ Requires-Dist: typer<0.28,>=0.27
35
36
  Requires-Dist: rich>=13.7.0
36
37
  Requires-Dist: textual>=0.86.0
37
38
  Requires-Dist: requests>=2.33.0
38
- Requires-Dist: gitpython>=3.1.50
39
+ Requires-Dist: gitpython<4,>=3.1.60
39
40
  Requires-Dist: pyyaml>=6.0.0
40
41
  Requires-Dist: tree-sitter>=0.20.4
41
42
  Requires-Dist: tree-sitter-python>=0.20.4
@@ -43,32 +44,32 @@ Requires-Dist: tree-sitter-javascript>=0.20.3
43
44
  Requires-Dist: tree-sitter-typescript>=0.20.3
44
45
  Requires-Dist: tiktoken>=0.12.0
45
46
  Requires-Dist: radon>=6.0.1
46
- Requires-Dist: pytest>=8.4.2
47
+ Requires-Dist: pytest<10,>=9.0.3
47
48
  Requires-Dist: ruff>=0.14.0
48
- Requires-Dist: pytest-asyncio>=1.2.0
49
+ Requires-Dist: pytest-asyncio>=1.4.0
49
50
  Requires-Dist: pytest-json-report>=1.5.0
50
51
  Requires-Dist: hypothesis>=6.148.0
51
52
  Requires-Dist: fastapi-users[sqlalchemy]>=15.0.2
52
53
  Requires-Dist: filelock>=3.0
53
- Requires-Dist: python-jose[cryptography]>=3.4.0
54
- Requires-Dist: passlib[argon2]>=1.7.4
54
+ Requires-Dist: bcrypt>=4.2.0
55
55
  Requires-Dist: keyring>=24.0.0
56
56
  Requires-Dist: jinja2>=3.1.6
57
57
  Requires-Dist: slowapi>=0.1.9
58
58
  Requires-Dist: rapidfuzz>=3.0.0
59
59
  Requires-Dist: starlette>=1.0.1
60
60
  Requires-Dist: python-multipart>=0.0.27
61
- Requires-Dist: pyjwt>=2.12.0
61
+ Requires-Dist: pyjwt>=2.15.0
62
62
  Requires-Dist: cryptography>=46.0.7
63
- Requires-Dist: urllib3>=2.7.0
64
- Requires-Dist: pyasn1>=0.6.3
63
+ Requires-Dist: urllib3>=2.8.0
65
64
  Requires-Dist: mcp>=1.23.0
66
65
  Requires-Dist: idna>=3.15
67
66
  Provides-Extra: cloud
68
67
  Requires-Dist: e2b>=2.0.0; extra == "cloud"
68
+ Provides-Extra: redis
69
+ Requires-Dist: limits[redis]; extra == "redis"
69
70
  Provides-Extra: dev
70
- Requires-Dist: pytest>=8.0.0; extra == "dev"
71
- Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
71
+ Requires-Dist: pytest<10,>=9.0.3; extra == "dev"
72
+ Requires-Dist: pytest-asyncio>=1.4.0; extra == "dev"
72
73
  Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
73
74
  Requires-Dist: pytest-json-report>=1.5.0; extra == "dev"
74
75
  Requires-Dist: pytest-timeout>=2.3.0; extra == "dev"
@@ -79,6 +80,7 @@ Requires-Dist: pre-commit>=3.5.0; extra == "dev"
79
80
  Requires-Dist: hypothesis>=6.0.0; extra == "dev"
80
81
  Requires-Dist: e2b>=2.0.0; extra == "dev"
81
82
  Requires-Dist: jsonschema>=4.0.0; extra == "dev"
83
+ Requires-Dist: limits[redis]; extra == "dev"
82
84
  Dynamic: license-file
83
85
 
84
86
  ![CodeFRAME Header](./codeframe_github_header_1600x500.png)
@@ -119,7 +121,7 @@ THINK What are you building? How should it be broken down?
119
121
  cf tasks generate Atomic tasks with dependency graphs
120
122
 
121
123
  BUILD Delegate to the best coding agent for the job
122
- cf work start --engine Claude Code, Codex, OpenCode, Kilocode, or built-in
124
+ cf work start <task> --engine Claude Code, Codex, OpenCode, Kilocode, or built-in
123
125
  CodeFRAME owns: verification gates, self-correction, stall detection
124
126
 
125
127
  PROVE Is the output any good?
@@ -132,7 +134,7 @@ PROVE Is the output any good?
132
134
 
133
135
  SHIP Deploy with confidence
134
136
  cf pr create PR with proof report attached
135
- cf pr merge Only merges if proof passes
137
+ cf pr merge <number> Only merges if proof passes
136
138
 
137
139
  THE CLOSED LOOP
138
140
  Glitch in production
@@ -157,7 +159,7 @@ THE CLOSED LOOP
157
159
  ---
158
160
 
159
161
  > [!NOTE]
160
- > **CodeFRAME is in public beta (`0.9.2`).** The vision and the Golden Path CLI
162
+ > **CodeFRAME is in public beta (`0.9.4`).** The vision and the Golden Path CLI
161
163
  > (`cf init/prd/tasks/work/proof/pr`) and v2 API are stable enough to build on;
162
164
  > the web UI and anything marked "in progress" in
163
165
  > [`docs/PRODUCT_ROADMAP.md`](docs/PRODUCT_ROADMAP.md) are still moving, and
@@ -193,6 +195,7 @@ When working from source, prefix the commands below with `uv run`.
193
195
 
194
196
  ```bash
195
197
  export ANTHROPIC_API_KEY="sk-ant-..." # get yours at https://console.anthropic.com/
198
+ # or store it once instead: cf auth setup --provider anthropic
196
199
  ```
197
200
 
198
201
  **Step 3 — Initialize your project**
@@ -209,28 +212,111 @@ cf tasks generate # Decompose PRD into atomic tasks with dependencies
209
212
  cf tasks list # Review what was generated
210
213
  ```
211
214
 
212
- **Step 5 — Promote the tasks you want to run**
215
+ **Step 5 — Promote one task**
213
216
 
214
217
  `cf tasks generate` creates tasks in `BACKLOG` so you can review them before an
215
- agent touches your code. Move the ones you approve to `READY`:
218
+ agent touches your code. Pick one and move it to `READY` — `cf tasks list` prints
219
+ an 8-character ID for each task, and that prefix is all you need:
216
220
 
217
221
  ```bash
218
- cf tasks set status READY --all --from BACKLOG # every BACKLOG task
219
- cf tasks set status <task-id> READY # one task (note: id before status)
222
+ cf tasks list # copy the ID of the task you want
223
+ cf tasks set status <task-id> READY # note: id before status
224
+ ```
225
+
226
+ Start with one. A generated backlog is typically 20+ tasks, and your first run
227
+ should show you the loop, not build the whole project in one sitting.
228
+
229
+ **Step 6 — Build: hand the task to an agent**
230
+
231
+ ```bash
232
+ cf work start <task-id> --execute
233
+ ```
234
+
235
+ **Step 7 — Prove: capture a requirement, then verify it**
236
+
237
+ PROOF9 verifies *obligations*, and a new workspace has none — so verifying it
238
+ first would report that nothing was checked and exit `2`. That is deliberate: a
239
+ run that checked nothing is not a pass. Give it something to check.
240
+
241
+ ```bash
242
+ cf proof capture \
243
+ --title "add() returns the wrong sum for negative numbers" \
244
+ --description "Calculation is wrong: add(-1, -1) returned 0 instead of -2" \
245
+ --where src/calc.py --severity high --source qa
246
+ ```
247
+
248
+ That creates a requirement, picks the gates that would have caught it, and
249
+ writes a **draft** test stub per gate under `tests/proof/<REQ-ID>/`. The stubs
250
+ are named `draft_*.py` so pytest does not collect them yet, and each one is a
251
+ placeholder `assert False`. Turn them into real tests — drop the `draft_`
252
+ prefix from each filename, and replace the placeholder with an assertion that
253
+ actually proves the bug is fixed:
254
+
255
+ ```bash
256
+ ls tests/proof/REQ-0001/ # draft_test_..._unit.py, draft_test_..._contract.py
257
+ # rename each to test_*.py and write the real assertion
258
+ ```
259
+
260
+ Now the gates have evidence to collect:
261
+
262
+ ```bash
263
+ cf proof run --full # -> All obligations satisfied. (exit 0)
220
264
  ```
221
265
 
222
- Skipping this step is why `--all-ready` below would otherwise report
223
- `No READY tasks found` and do nothing.
266
+ `--full` checks every open requirement; plain `cf proof run` checks only the
267
+ ones your current diff touches. The `unit` and `contract` gates run **your
268
+ project's** pytest, so the project needs pytest available (`uv add --dev
269
+ pytest`) — a gate with no way to run is reported as unverified, never as a pass.
270
+
271
+ This is the loop that compounds: every glitch you capture stays a permanent
272
+ check, and `cf pr merge` refuses to merge while any of them is open.
273
+
274
+ **Step 8 — Ship**
275
+
276
+ `cf pr` talks to GitHub, so it needs a token and the repository: connect them in
277
+ the web UI (Settings → Integrations), or export `GITHUB_TOKEN` (a PAT with
278
+ `repo` scope) and `GITHUB_REPO=owner/repo`.
279
+
280
+ ```bash
281
+ cf pr create # Open a PR with proof report attached
282
+ ```
283
+
284
+ The title defaults to the branch's newest commit (`--title` overrides it), and
285
+ the body ends with the workspace's PROOF9 status: requirement counts, the open
286
+ ones by name, and the latest `cf proof run` verdict.
287
+
288
+ That is the entire workflow. An empty directory through a green `cf proof run`
289
+ is **5m59s** of wall clock on a clean machine — measured, not estimated, in
290
+ [this walkthrough](docs/demos/quickstart-cleanroom.md) — most of it in
291
+ `cf prd generate` and the agent run; Step 7 costs 7 seconds of it. `cf pr create`
292
+ needs a GitHub remote, so it is outside that measurement.
224
293
 
225
- **Step 6 — Build, Prove, and Ship**
294
+ If the agent needs a decision it cannot make, it stops and files a blocker
295
+ rather than guessing — `cf blocker list` shows it and `cf blocker answer <id>
296
+ "..."` unblocks the task.
297
+
298
+ <details>
299
+ <summary>Running the whole backlog</summary>
300
+
301
+ Once you trust the loop, promote everything and let it run:
226
302
 
227
303
  ```bash
228
- cf work batch run --all-ready # Execute all READY tasks (delegates to agent)
229
- cf proof run # Run PROOF9 quality gates
230
- cf pr create # Open a PR with proof report attached
304
+ cf tasks set status READY --all --from BACKLOG # every BACKLOG task
305
+ cf work batch run --all-ready # execute them
231
306
  ```
232
307
 
233
- That is the entire workflow. Everything else is optional.
308
+ This is **long-running** — each task is a full agent run, and serial is the
309
+ default strategy — so start it and watch it from another terminal rather than
310
+ waiting on the prompt:
311
+
312
+ ```bash
313
+ cf work batch status # lists recent batches and their IDs
314
+ cf work batch follow <batch-id> # live progress for one of them
315
+ ```
316
+
317
+ `--strategy parallel --max-parallel 4` and `--retry 2` are worth knowing about
318
+ before you kick off a large batch; see [`docs/QUICKSTART.md`](docs/QUICKSTART.md).
319
+ </details>
234
320
 
235
321
  > **See it run from scratch.** [Cold start on a clean machine](docs/demos/quickstart-cleanroom.md)
236
322
  > is a narrated walkthrough of exactly these steps in a throwaway container —
@@ -252,7 +338,7 @@ That is the entire workflow. Everything else is optional.
252
338
  |
253
339
  v
254
340
  +-BUILD---------------------------------------------+
255
- | cf work start --engine <agent> |
341
+ | cf work start <task> --engine <agent> |
256
342
  | |
257
343
  | +-- Claude Code / Codex / OpenCode / Kilocode / ReAct |
258
344
  | | |
@@ -270,7 +356,7 @@ That is the entire workflow. Everything else is optional.
270
356
  v
271
357
  +-SHIP----------------------------------------------+
272
358
  | cf pr create PR with proof report |
273
- | cf pr merge Merge if proof passes |
359
+ | cf pr merge <n> Merge if proof passes |
274
360
  +---------------------------------------------------+
275
361
  |
276
362
  Glitch in production?
@@ -349,7 +435,7 @@ cf blocker show <id> # Blocker details
349
435
  cf blocker answer <id> "answer" # Unblock the agent
350
436
 
351
437
  # Diagnostics
352
- cf work diagnose <id> # AI-powered failure analysis
438
+ cf work diagnose <id> # Pattern-based failure analysis
353
439
  cf env check # Validate environment
354
440
  cf env doctor # Comprehensive health check
355
441
  ```
@@ -384,23 +470,23 @@ resolved by waiving it with a justification.
384
470
  cf review # Run verification gates
385
471
  cf checkpoint create "milestone" # Snapshot project state
386
472
  cf checkpoint list # List checkpoints
387
- cf checkpoint restore <id> # Roll back to checkpoint
473
+ cf checkpoint restore <id> # Restore task statuses (files untouched)
388
474
 
389
475
  # Debugging
390
- cf work replay <id> # Replay and debug a past execution
476
+ cf work replay <run-id> # Replay and debug a past run (built-in react engine)
391
477
  cf dashboard # Launch TUI dashboard
392
478
  ```
393
479
 
394
480
  ### SHIP -- Delivery
395
481
 
396
482
  ```bash
397
- cf pr create # Create PR from current branch
483
+ cf pr create --title "Add search" # PR from the current branch, PROOF9 report appended
398
484
  cf pr list # List open PRs
399
485
  cf pr status # PR status, review state and CI checks
400
486
  cf pr get <number> # Details for one PR
401
- cf pr merge # Merge approved PR
487
+ cf pr merge <number> # Merge it (refused while a requirement is open)
402
488
  cf pr close <number> # Close a PR without merging
403
- cf commit # Commit verified changes
489
+ cf commit create -m "feat: search" # Commit verified changes
404
490
  cf patch export # Export changes as patch
405
491
  ```
406
492
 
@@ -411,7 +497,7 @@ cf patch export # Export changes as patch
411
497
  CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser:
412
498
 
413
499
  - **THINK**: Socratic PRD generation with recursive stress-testing, LLM-powered task decomposition with dependency graphs, 5 PRD templates, 7 task templates, CPM-based scheduling
414
- - **BUILD**: ReAct agent with 7 tools, self-correction with loop prevention, verification gates (ruff/pytest/BUILD), stall detection with configurable recovery (retry/blocker/fail), batch execution (serial/parallel/auto), human-in-the-loop blockers, checkpointing, state persistence, replay/debug mode (`cf work replay`), dynamic config reload, TUI dashboard (`cf dashboard`)
500
+ - **BUILD**: ReAct agent with 7 tools, self-correction with loop prevention, verification gates (ruff/pytest/BUILD), stall detection with configurable recovery (retry/blocker/fail), batch execution (serial/parallel/auto), human-in-the-loop blockers, checkpointing, state persistence, replay/debug mode for built-in react runs (`cf work replay`), dynamic config reload, TUI dashboard (`cf dashboard`)
415
501
  - **PROVE**: PROOF9 quality memory system — 9-gate evidence-based verification (`cf proof run/capture/list/status/show/waive`), every glitch becomes a permanent proof obligation
416
502
  - **SHIP**: GitHub PR workflow, environment validation, task self-diagnosis
417
503
  - **Engine adapters**: Claude Code, Codex, OpenCode, Kilocode, and built-in ReAct — all via `--engine` flag
@@ -433,7 +519,7 @@ CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser
433
519
  - [x] Agent adapter architecture -- delegate to Claude Code, Codex, OpenCode, Kilocode via workspace hooks
434
520
  - [x] Worktree isolation for parallel agent execution
435
521
  - [x] Reconciliation layer for multi-agent output
436
- - [x] Replay/debug mode (`cf work replay`)
522
+ - [x] Replay/debug mode (`cf work replay`, built-in react engine)
437
523
  - [x] TUI dashboard (`cf dashboard`)
438
524
  - [x] Dynamic config reload during batch execution
439
525
  - [x] Multi-provider LLM -- Anthropic, OpenAI, or any OpenAI-compatible endpoint
@@ -479,7 +565,7 @@ export OPENAI_BASE_URL=http://localhost:11434/v1 # for Ollama, vLLM, LM Studio,
479
565
  # Per-workspace: .codeframe/config.yaml supports an `llm:` block for the same options
480
566
 
481
567
  # Optional
482
- export DATABASE_PATH=./codeframe.db # Default: ./.codeframe/state.db
568
+ export DATABASE_PATH=./codeframe.db # Server accounts/keys; default ./.codeframe/platform.db
483
569
  export RATE_LIMIT_ENABLED=true # API rate limiting
484
570
  export RATE_LIMIT_DEFAULT=100/minute # Default limit
485
571
  ```
@@ -547,7 +633,7 @@ CodeFRAME is in **public beta**.
547
633
  - **Security:** found a vulnerability? Report it privately via [GitHub private vulnerability reporting](https://github.com/frankbria/codeframe/security/advisories/new) (or `security@codeframe.sh`) -- never a public issue. See [SECURITY.md](SECURITY.md) for scope and response expectations.
548
634
  - **Licensing:** CodeFRAME is [AGPL-3.0](LICENSE), an open-core stance. [LICENSING.md](LICENSING.md) explains what that means for individuals, internal company use, and embedding -- and how to reach us about **commercial licensing or a hosted offering** (both planned). Commercial inquiries: `licensing@codeframe.sh`.
549
635
  - **Trademark:** the code is AGPL-3.0, but the **CodeFRAME name and logo are trademarks** and are *not* covered by the code license. See [TRADEMARKS.md](TRADEMARKS.md) before using the name for a fork or product.
550
- - **Early access / design partners:** email `hello@codeframe.sh` or reply to the pinned [Discussion](https://github.com/frankbria/codeframe/discussions) to be included.
636
+ - **Early access / design partners:** we are recruiting 5-10 teams for the beta design-partner cohort -- see [DESIGN_PARTNERS.md](DESIGN_PARTNERS.md) for what partners get and commit. To be included, email `hello@codeframe.sh` or reply to the pinned [Discussion](https://github.com/frankbria/codeframe/discussions).
551
637
  - **Help & community:** [Discussions -> Q&A](https://github.com/frankbria/codeframe/discussions/categories/q-a) for questions, [Ideas](https://github.com/frankbria/codeframe/discussions/categories/ideas) for feature requests, and [bug reports](https://github.com/frankbria/codeframe/issues/new/choose) for confirmed bugs.
552
638
 
553
639
  ---
@@ -36,7 +36,7 @@ THINK What are you building? How should it be broken down?
36
36
  cf tasks generate Atomic tasks with dependency graphs
37
37
 
38
38
  BUILD Delegate to the best coding agent for the job
39
- cf work start --engine Claude Code, Codex, OpenCode, Kilocode, or built-in
39
+ cf work start <task> --engine Claude Code, Codex, OpenCode, Kilocode, or built-in
40
40
  CodeFRAME owns: verification gates, self-correction, stall detection
41
41
 
42
42
  PROVE Is the output any good?
@@ -49,7 +49,7 @@ PROVE Is the output any good?
49
49
 
50
50
  SHIP Deploy with confidence
51
51
  cf pr create PR with proof report attached
52
- cf pr merge Only merges if proof passes
52
+ cf pr merge <number> Only merges if proof passes
53
53
 
54
54
  THE CLOSED LOOP
55
55
  Glitch in production
@@ -74,7 +74,7 @@ THE CLOSED LOOP
74
74
  ---
75
75
 
76
76
  > [!NOTE]
77
- > **CodeFRAME is in public beta (`0.9.2`).** The vision and the Golden Path CLI
77
+ > **CodeFRAME is in public beta (`0.9.4`).** The vision and the Golden Path CLI
78
78
  > (`cf init/prd/tasks/work/proof/pr`) and v2 API are stable enough to build on;
79
79
  > the web UI and anything marked "in progress" in
80
80
  > [`docs/PRODUCT_ROADMAP.md`](docs/PRODUCT_ROADMAP.md) are still moving, and
@@ -110,6 +110,7 @@ When working from source, prefix the commands below with `uv run`.
110
110
 
111
111
  ```bash
112
112
  export ANTHROPIC_API_KEY="sk-ant-..." # get yours at https://console.anthropic.com/
113
+ # or store it once instead: cf auth setup --provider anthropic
113
114
  ```
114
115
 
115
116
  **Step 3 — Initialize your project**
@@ -126,28 +127,111 @@ cf tasks generate # Decompose PRD into atomic tasks with dependencies
126
127
  cf tasks list # Review what was generated
127
128
  ```
128
129
 
129
- **Step 5 — Promote the tasks you want to run**
130
+ **Step 5 — Promote one task**
130
131
 
131
132
  `cf tasks generate` creates tasks in `BACKLOG` so you can review them before an
132
- agent touches your code. Move the ones you approve to `READY`:
133
+ agent touches your code. Pick one and move it to `READY` — `cf tasks list` prints
134
+ an 8-character ID for each task, and that prefix is all you need:
133
135
 
134
136
  ```bash
135
- cf tasks set status READY --all --from BACKLOG # every BACKLOG task
136
- cf tasks set status <task-id> READY # one task (note: id before status)
137
+ cf tasks list # copy the ID of the task you want
138
+ cf tasks set status <task-id> READY # note: id before status
139
+ ```
140
+
141
+ Start with one. A generated backlog is typically 20+ tasks, and your first run
142
+ should show you the loop, not build the whole project in one sitting.
143
+
144
+ **Step 6 — Build: hand the task to an agent**
145
+
146
+ ```bash
147
+ cf work start <task-id> --execute
148
+ ```
149
+
150
+ **Step 7 — Prove: capture a requirement, then verify it**
151
+
152
+ PROOF9 verifies *obligations*, and a new workspace has none — so verifying it
153
+ first would report that nothing was checked and exit `2`. That is deliberate: a
154
+ run that checked nothing is not a pass. Give it something to check.
155
+
156
+ ```bash
157
+ cf proof capture \
158
+ --title "add() returns the wrong sum for negative numbers" \
159
+ --description "Calculation is wrong: add(-1, -1) returned 0 instead of -2" \
160
+ --where src/calc.py --severity high --source qa
161
+ ```
162
+
163
+ That creates a requirement, picks the gates that would have caught it, and
164
+ writes a **draft** test stub per gate under `tests/proof/<REQ-ID>/`. The stubs
165
+ are named `draft_*.py` so pytest does not collect them yet, and each one is a
166
+ placeholder `assert False`. Turn them into real tests — drop the `draft_`
167
+ prefix from each filename, and replace the placeholder with an assertion that
168
+ actually proves the bug is fixed:
169
+
170
+ ```bash
171
+ ls tests/proof/REQ-0001/ # draft_test_..._unit.py, draft_test_..._contract.py
172
+ # rename each to test_*.py and write the real assertion
173
+ ```
174
+
175
+ Now the gates have evidence to collect:
176
+
177
+ ```bash
178
+ cf proof run --full # -> All obligations satisfied. (exit 0)
137
179
  ```
138
180
 
139
- Skipping this step is why `--all-ready` below would otherwise report
140
- `No READY tasks found` and do nothing.
181
+ `--full` checks every open requirement; plain `cf proof run` checks only the
182
+ ones your current diff touches. The `unit` and `contract` gates run **your
183
+ project's** pytest, so the project needs pytest available (`uv add --dev
184
+ pytest`) — a gate with no way to run is reported as unverified, never as a pass.
185
+
186
+ This is the loop that compounds: every glitch you capture stays a permanent
187
+ check, and `cf pr merge` refuses to merge while any of them is open.
188
+
189
+ **Step 8 — Ship**
190
+
191
+ `cf pr` talks to GitHub, so it needs a token and the repository: connect them in
192
+ the web UI (Settings → Integrations), or export `GITHUB_TOKEN` (a PAT with
193
+ `repo` scope) and `GITHUB_REPO=owner/repo`.
194
+
195
+ ```bash
196
+ cf pr create # Open a PR with proof report attached
197
+ ```
198
+
199
+ The title defaults to the branch's newest commit (`--title` overrides it), and
200
+ the body ends with the workspace's PROOF9 status: requirement counts, the open
201
+ ones by name, and the latest `cf proof run` verdict.
202
+
203
+ That is the entire workflow. An empty directory through a green `cf proof run`
204
+ is **5m59s** of wall clock on a clean machine — measured, not estimated, in
205
+ [this walkthrough](docs/demos/quickstart-cleanroom.md) — most of it in
206
+ `cf prd generate` and the agent run; Step 7 costs 7 seconds of it. `cf pr create`
207
+ needs a GitHub remote, so it is outside that measurement.
141
208
 
142
- **Step 6 — Build, Prove, and Ship**
209
+ If the agent needs a decision it cannot make, it stops and files a blocker
210
+ rather than guessing — `cf blocker list` shows it and `cf blocker answer <id>
211
+ "..."` unblocks the task.
212
+
213
+ <details>
214
+ <summary>Running the whole backlog</summary>
215
+
216
+ Once you trust the loop, promote everything and let it run:
143
217
 
144
218
  ```bash
145
- cf work batch run --all-ready # Execute all READY tasks (delegates to agent)
146
- cf proof run # Run PROOF9 quality gates
147
- cf pr create # Open a PR with proof report attached
219
+ cf tasks set status READY --all --from BACKLOG # every BACKLOG task
220
+ cf work batch run --all-ready # execute them
148
221
  ```
149
222
 
150
- That is the entire workflow. Everything else is optional.
223
+ This is **long-running** — each task is a full agent run, and serial is the
224
+ default strategy — so start it and watch it from another terminal rather than
225
+ waiting on the prompt:
226
+
227
+ ```bash
228
+ cf work batch status # lists recent batches and their IDs
229
+ cf work batch follow <batch-id> # live progress for one of them
230
+ ```
231
+
232
+ `--strategy parallel --max-parallel 4` and `--retry 2` are worth knowing about
233
+ before you kick off a large batch; see [`docs/QUICKSTART.md`](docs/QUICKSTART.md).
234
+ </details>
151
235
 
152
236
  > **See it run from scratch.** [Cold start on a clean machine](docs/demos/quickstart-cleanroom.md)
153
237
  > is a narrated walkthrough of exactly these steps in a throwaway container —
@@ -169,7 +253,7 @@ That is the entire workflow. Everything else is optional.
169
253
  |
170
254
  v
171
255
  +-BUILD---------------------------------------------+
172
- | cf work start --engine <agent> |
256
+ | cf work start <task> --engine <agent> |
173
257
  | |
174
258
  | +-- Claude Code / Codex / OpenCode / Kilocode / ReAct |
175
259
  | | |
@@ -187,7 +271,7 @@ That is the entire workflow. Everything else is optional.
187
271
  v
188
272
  +-SHIP----------------------------------------------+
189
273
  | cf pr create PR with proof report |
190
- | cf pr merge Merge if proof passes |
274
+ | cf pr merge <n> Merge if proof passes |
191
275
  +---------------------------------------------------+
192
276
  |
193
277
  Glitch in production?
@@ -266,7 +350,7 @@ cf blocker show <id> # Blocker details
266
350
  cf blocker answer <id> "answer" # Unblock the agent
267
351
 
268
352
  # Diagnostics
269
- cf work diagnose <id> # AI-powered failure analysis
353
+ cf work diagnose <id> # Pattern-based failure analysis
270
354
  cf env check # Validate environment
271
355
  cf env doctor # Comprehensive health check
272
356
  ```
@@ -301,23 +385,23 @@ resolved by waiving it with a justification.
301
385
  cf review # Run verification gates
302
386
  cf checkpoint create "milestone" # Snapshot project state
303
387
  cf checkpoint list # List checkpoints
304
- cf checkpoint restore <id> # Roll back to checkpoint
388
+ cf checkpoint restore <id> # Restore task statuses (files untouched)
305
389
 
306
390
  # Debugging
307
- cf work replay <id> # Replay and debug a past execution
391
+ cf work replay <run-id> # Replay and debug a past run (built-in react engine)
308
392
  cf dashboard # Launch TUI dashboard
309
393
  ```
310
394
 
311
395
  ### SHIP -- Delivery
312
396
 
313
397
  ```bash
314
- cf pr create # Create PR from current branch
398
+ cf pr create --title "Add search" # PR from the current branch, PROOF9 report appended
315
399
  cf pr list # List open PRs
316
400
  cf pr status # PR status, review state and CI checks
317
401
  cf pr get <number> # Details for one PR
318
- cf pr merge # Merge approved PR
402
+ cf pr merge <number> # Merge it (refused while a requirement is open)
319
403
  cf pr close <number> # Close a PR without merging
320
- cf commit # Commit verified changes
404
+ cf commit create -m "feat: search" # Commit verified changes
321
405
  cf patch export # Export changes as patch
322
406
  ```
323
407
 
@@ -328,7 +412,7 @@ cf patch export # Export changes as patch
328
412
  CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser:
329
413
 
330
414
  - **THINK**: Socratic PRD generation with recursive stress-testing, LLM-powered task decomposition with dependency graphs, 5 PRD templates, 7 task templates, CPM-based scheduling
331
- - **BUILD**: ReAct agent with 7 tools, self-correction with loop prevention, verification gates (ruff/pytest/BUILD), stall detection with configurable recovery (retry/blocker/fail), batch execution (serial/parallel/auto), human-in-the-loop blockers, checkpointing, state persistence, replay/debug mode (`cf work replay`), dynamic config reload, TUI dashboard (`cf dashboard`)
415
+ - **BUILD**: ReAct agent with 7 tools, self-correction with loop prevention, verification gates (ruff/pytest/BUILD), stall detection with configurable recovery (retry/blocker/fail), batch execution (serial/parallel/auto), human-in-the-loop blockers, checkpointing, state persistence, replay/debug mode for built-in react runs (`cf work replay`), dynamic config reload, TUI dashboard (`cf dashboard`)
332
416
  - **PROVE**: PROOF9 quality memory system — 9-gate evidence-based verification (`cf proof run/capture/list/status/show/waive`), every glitch becomes a permanent proof obligation
333
417
  - **SHIP**: GitHub PR workflow, environment validation, task self-diagnosis
334
418
  - **Engine adapters**: Claude Code, Codex, OpenCode, Kilocode, and built-in ReAct — all via `--engine` flag
@@ -350,7 +434,7 @@ CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser
350
434
  - [x] Agent adapter architecture -- delegate to Claude Code, Codex, OpenCode, Kilocode via workspace hooks
351
435
  - [x] Worktree isolation for parallel agent execution
352
436
  - [x] Reconciliation layer for multi-agent output
353
- - [x] Replay/debug mode (`cf work replay`)
437
+ - [x] Replay/debug mode (`cf work replay`, built-in react engine)
354
438
  - [x] TUI dashboard (`cf dashboard`)
355
439
  - [x] Dynamic config reload during batch execution
356
440
  - [x] Multi-provider LLM -- Anthropic, OpenAI, or any OpenAI-compatible endpoint
@@ -396,7 +480,7 @@ export OPENAI_BASE_URL=http://localhost:11434/v1 # for Ollama, vLLM, LM Studio,
396
480
  # Per-workspace: .codeframe/config.yaml supports an `llm:` block for the same options
397
481
 
398
482
  # Optional
399
- export DATABASE_PATH=./codeframe.db # Default: ./.codeframe/state.db
483
+ export DATABASE_PATH=./codeframe.db # Server accounts/keys; default ./.codeframe/platform.db
400
484
  export RATE_LIMIT_ENABLED=true # API rate limiting
401
485
  export RATE_LIMIT_DEFAULT=100/minute # Default limit
402
486
  ```
@@ -464,7 +548,7 @@ CodeFRAME is in **public beta**.
464
548
  - **Security:** found a vulnerability? Report it privately via [GitHub private vulnerability reporting](https://github.com/frankbria/codeframe/security/advisories/new) (or `security@codeframe.sh`) -- never a public issue. See [SECURITY.md](SECURITY.md) for scope and response expectations.
465
549
  - **Licensing:** CodeFRAME is [AGPL-3.0](LICENSE), an open-core stance. [LICENSING.md](LICENSING.md) explains what that means for individuals, internal company use, and embedding -- and how to reach us about **commercial licensing or a hosted offering** (both planned). Commercial inquiries: `licensing@codeframe.sh`.
466
550
  - **Trademark:** the code is AGPL-3.0, but the **CodeFRAME name and logo are trademarks** and are *not* covered by the code license. See [TRADEMARKS.md](TRADEMARKS.md) before using the name for a fork or product.
467
- - **Early access / design partners:** email `hello@codeframe.sh` or reply to the pinned [Discussion](https://github.com/frankbria/codeframe/discussions) to be included.
551
+ - **Early access / design partners:** we are recruiting 5-10 teams for the beta design-partner cohort -- see [DESIGN_PARTNERS.md](DESIGN_PARTNERS.md) for what partners get and commit. To be included, email `hello@codeframe.sh` or reply to the pinned [Discussion](https://github.com/frankbria/codeframe/discussions).
468
552
  - **Help & community:** [Discussions -> Q&A](https://github.com/frankbria/codeframe/discussions/categories/q-a) for questions, [Ideas](https://github.com/frankbria/codeframe/discussions/categories/ideas) for feature requests, and [bug reports](https://github.com/frankbria/codeframe/issues/new/choose) for confirmed bugs.
469
553
 
470
554
  ---
@@ -5,7 +5,13 @@ An autonomous AI development system where multiple specialized agents
5
5
  collaborate to build software projects from requirements to deployment.
6
6
  """
7
7
 
8
- __version__ = "0.1.0"
8
+ from importlib.metadata import PackageNotFoundError, version
9
+
10
+ try:
11
+ __version__ = version("codeframe-ai")
12
+ except PackageNotFoundError: # source checkout, never installed
13
+ __version__ = "0.0.0+unknown"
14
+
9
15
  __author__ = "Frank Bria"
10
16
 
11
17
  __all__ = ["__version__", "__author__"]