codeframe-ai 0.9.0__tar.gz → 0.9.2__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.
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/PKG-INFO +76 -26
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/README.md +59 -19
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/adapters/e2b/adapter.py +130 -25
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/adapters/e2b/budget.py +4 -2
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/adapters/e2b/credential_scanner.py +12 -7
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/adapters/llm/__init__.py +30 -4
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/adapters/llm/anthropic.py +72 -33
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/adapters/llm/base.py +17 -5
- codeframe_ai-0.9.2/codeframe/adapters/llm/errors.py +189 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/adapters/llm/openai.py +48 -19
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/auth/api_key_router.py +48 -2
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/auth/api_keys.py +15 -7
- codeframe_ai-0.9.2/codeframe/auth/dependencies.py +916 -0
- codeframe_ai-0.9.2/codeframe/auth/manager.py +389 -0
- codeframe_ai-0.9.2/codeframe/auth/router.py +324 -0
- codeframe_ai-0.9.2/codeframe/auth/stream_tickets.py +106 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/api_client.py +35 -1
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/app.py +1142 -285
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/auth.py +22 -8
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/auth_commands.py +335 -26
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/engines_commands.py +34 -4
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/env_commands.py +29 -12
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/hooks_commands.py +66 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/pr_commands.py +159 -15
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/proof_commands.py +175 -20
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/stats_commands.py +70 -74
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/validators.py +53 -23
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/adapters/__init__.py +0 -2
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/adapters/agent_adapter.py +6 -10
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/adapters/builtin.py +94 -12
- codeframe_ai-0.9.2/codeframe/core/adapters/claude_code.py +245 -0
- codeframe_ai-0.9.2/codeframe/core/adapters/codex.py +593 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/adapters/git_utils.py +29 -1
- codeframe_ai-0.9.2/codeframe/core/adapters/kilocode.py +276 -0
- codeframe_ai-0.9.2/codeframe/core/adapters/opencode.py +210 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/adapters/streaming_chat.py +142 -34
- codeframe_ai-0.9.2/codeframe/core/adapters/subprocess_adapter.py +459 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/adapters/verification_wrapper.py +41 -12
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/agent.py +96 -103
- codeframe_ai-0.9.2/codeframe/core/agent_env.py +284 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/api_key_service.py +12 -1
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/artifacts.py +53 -21
- codeframe_ai-0.9.2/codeframe/core/atomic_io.py +214 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/blockers.py +132 -104
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/checkpoints.py +2 -0
- codeframe_ai-0.9.2/codeframe/core/claude_code_guard.py +87 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/conductor.py +743 -203
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/config.py +167 -41
- codeframe_ai-0.9.2/codeframe/core/cost_tracker.py +247 -0
- codeframe_ai-0.9.2/codeframe/core/credentials.py +1062 -0
- codeframe_ai-0.9.2/codeframe/core/dangerous_commands.py +105 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/dependency_analyzer.py +83 -26
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/diagnostics.py +19 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/editor.py +27 -4
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/engine_registry.py +70 -5
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/engine_stats.py +0 -13
- codeframe_ai-0.9.2/codeframe/core/env_provenance.py +315 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/environment.py +2 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/events.py +23 -6
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/executor.py +100 -61
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/gates.py +339 -90
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/git.py +158 -20
- codeframe_ai-0.9.2/codeframe/core/github_integration_config.py +208 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/github_issues_service.py +119 -26
- codeframe_ai-0.9.2/codeframe/core/hook_trust.py +116 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/hooks.py +81 -9
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/installer.py +51 -25
- codeframe_ai-0.9.2/codeframe/core/llm_json.py +62 -0
- codeframe_ai-0.9.2/codeframe/core/llm_resolution.py +179 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/models.py +4 -2
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/notifications_config.py +101 -10
- codeframe_ai-0.9.2/codeframe/core/path_safety.py +35 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/prd.py +102 -6
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/prd_discovery.py +137 -35
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/prd_stress_test.py +140 -17
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/proof/capture.py +14 -9
- codeframe_ai-0.9.2/codeframe/core/proof/evidence.py +203 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/proof/ledger.py +331 -40
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/proof/models.py +16 -1
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/proof/obligations.py +33 -16
- codeframe_ai-0.9.2/codeframe/core/proof/runner.py +437 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/proof/scope.py +43 -11
- codeframe_ai-0.9.2/codeframe/core/proof/stubs.py +307 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/quick_fixes.py +82 -5
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/react_agent.py +296 -47
- codeframe_ai-0.9.2/codeframe/core/reconciliation.py +430 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/review.py +114 -12
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/runtime.py +427 -186
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/sandbox/__init__.py +2 -2
- codeframe_ai-0.9.2/codeframe/core/sandbox/context.py +199 -0
- codeframe_ai-0.9.2/codeframe/core/sandbox/worktree.py +23 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/schedule.py +20 -9
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/state_machine.py +28 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/streaming.py +133 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/task_tree.py +109 -31
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/tasks.py +610 -146
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/telemetry.py +1 -1
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/templates.py +27 -10
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/tools.py +49 -25
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/workspace.py +420 -245
- codeframe_ai-0.9.2/codeframe/core/worktrees.py +313 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/git/github_integration.py +55 -15
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/lib/audit_logger.py +130 -9
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/lib/metrics_tracker.py +240 -111
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/lib/quality/complexity_analyzer.py +1 -1
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/lib/quality/owasp_patterns.py +1 -1
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/lib/quality/security_scanner.py +38 -3
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/lib/rate_limiter.py +210 -32
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/notifications/webhook.py +123 -146
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/planning/__init__.py +0 -9
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/planning/prd_templates.py +24 -50
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/platform_store/database.py +26 -7
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/platform_store/repositories/api_key_repository.py +20 -13
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/platform_store/repositories/audit_repository.py +8 -3
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/platform_store/repositories/base.py +45 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/platform_store/repositories/interactive_sessions.py +49 -23
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/platform_store/repositories/token_repository.py +260 -254
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/platform_store/repositories/workspace_registry_repository.py +36 -15
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/platform_store/schema_manager.py +137 -3
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/tui/app.py +44 -8
- codeframe_ai-0.9.2/codeframe/tui/data_service.py +113 -0
- codeframe_ai-0.9.2/codeframe/ui/dependencies.py +235 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/response_models.py +40 -0
- codeframe_ai-0.9.2/codeframe/ui/routers/_helpers.py +9 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/batches_v2.py +18 -12
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/blockers_v2.py +15 -1
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/checkpoints_v2.py +0 -2
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/costs_v2.py +25 -17
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/diagnose_v2.py +3 -1
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/discovery_v2.py +65 -16
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/environment_v2.py +13 -3
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/events_v2.py +0 -3
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/gates_v2.py +8 -1
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/git_v2.py +52 -20
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/github_integrations_v2.py +210 -58
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/interactive_sessions_v2.py +69 -19
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/pr_v2.py +248 -61
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/prd_v2.py +151 -60
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/proof_v2.py +172 -48
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/review_v2.py +51 -18
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/schedule_v2.py +0 -2
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/session_chat_ws.py +108 -55
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/settings_v2.py +153 -23
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/streaming_v2.py +19 -1
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/tasks_v2.py +414 -142
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/templates_v2.py +0 -2
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/terminal_ws.py +49 -51
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/workspace_v2.py +48 -17
- codeframe_ai-0.9.2/codeframe/ui/server.py +962 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/shared.py +12 -1
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe_ai.egg-info/PKG-INFO +76 -26
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe_ai.egg-info/SOURCES.txt +21 -5
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe_ai.egg-info/requires.txt +16 -6
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/pyproject.toml +24 -9
- codeframe_ai-0.9.2/tests/test_ambient_workspace_guard.py +100 -0
- codeframe_ai-0.9.2/tests/test_claude_review_workflow_1011.py +143 -0
- codeframe_ai-0.9.2/tests/test_deploy_config.py +308 -0
- codeframe_ai-0.9.2/tests/test_lifecycle_gates_948.py +267 -0
- codeframe_ai-0.9.2/tests/test_offline_default_946.py +223 -0
- codeframe_ai-0.9.2/tests/test_pm2_scoping_912.py +112 -0
- codeframe_ai-0.9.2/tests/test_root_docs_950.py +264 -0
- codeframe_ai-0.9.2/tests/test_workflow_lint_wiring_1122.py +167 -0
- codeframe_ai-0.9.0/codeframe/auth/dependencies.py +0 -358
- codeframe_ai-0.9.0/codeframe/auth/manager.py +0 -178
- codeframe_ai-0.9.0/codeframe/auth/router.py +0 -93
- codeframe_ai-0.9.0/codeframe/core/adapters/claude_code.py +0 -62
- codeframe_ai-0.9.0/codeframe/core/adapters/codex.py +0 -393
- codeframe_ai-0.9.0/codeframe/core/adapters/kilocode.py +0 -126
- codeframe_ai-0.9.0/codeframe/core/adapters/opencode.py +0 -48
- codeframe_ai-0.9.0/codeframe/core/adapters/subprocess_adapter.py +0 -213
- codeframe_ai-0.9.0/codeframe/core/credentials.py +0 -735
- codeframe_ai-0.9.0/codeframe/core/github_integration_config.py +0 -118
- codeframe_ai-0.9.0/codeframe/core/proof/evidence.py +0 -56
- codeframe_ai-0.9.0/codeframe/core/proof/runner.py +0 -233
- codeframe_ai-0.9.0/codeframe/core/proof/stubs.py +0 -156
- codeframe_ai-0.9.0/codeframe/core/reconciliation.py +0 -183
- codeframe_ai-0.9.0/codeframe/core/sandbox/context.py +0 -98
- codeframe_ai-0.9.0/codeframe/core/sandbox/worktree.py +0 -20
- codeframe_ai-0.9.0/codeframe/core/worktrees.py +0 -276
- codeframe_ai-0.9.0/codeframe/planning/issue_generator.py +0 -219
- codeframe_ai-0.9.0/codeframe/planning/prd_template_functions.py +0 -137
- codeframe_ai-0.9.0/codeframe/tui/data_service.py +0 -103
- codeframe_ai-0.9.0/codeframe/ui/dependencies.py +0 -103
- codeframe_ai-0.9.0/codeframe/ui/routers/_helpers.py +0 -29
- codeframe_ai-0.9.0/codeframe/ui/server.py +0 -568
- codeframe_ai-0.9.0/codeframe/workspace/__init__.py +0 -5
- codeframe_ai-0.9.0/codeframe/workspace/manager.py +0 -249
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/LICENSE +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/__main__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/adapters/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/adapters/e2b/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/adapters/llm/mock.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/agents/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/agents/dependency_resolver.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/auth/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/auth/models.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/auth/schemas.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/auth/scopes.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/__main__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/commands/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/config_commands.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/dashboard_commands.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/helpers.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/import_commands.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/cli/telemetry_runtime.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/config/rate_limits.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/agents_config.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/blocker_detection.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/config_watcher.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/context.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/context_packager.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/dependency_graph.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/diagnostic_agent.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/fix_tracker.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/github_connect_service.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/importers/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/importers/ralph.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/planner.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/progress.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/proof/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/replay.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/stall_detector.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/core/stall_monitor.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/git/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/lib/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/lib/quality/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/notifications/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/planning/task_scheduler.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/planning/task_templates.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/platform_store/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/platform_store/repositories/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/templates/AGENTS.md.default +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/tui/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/models.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe/ui/routers/__init__.py +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe_ai.egg-info/dependency_links.txt +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe_ai.egg-info/entry_points.txt +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/codeframe_ai.egg-info/top_level.txt +0 -0
- {codeframe_ai-0.9.0 → codeframe_ai-0.9.2}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codeframe-ai
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.2
|
|
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
|
|
@@ -18,24 +18,24 @@ Requires-Python: >=3.11
|
|
|
18
18
|
Description-Content-Type: text/markdown
|
|
19
19
|
License-File: LICENSE
|
|
20
20
|
Requires-Dist: anthropic>=0.18.0
|
|
21
|
+
Requires-Dist: bandit>=1.8.6
|
|
21
22
|
Requires-Dist: tenacity>=8.2.0
|
|
22
|
-
Requires-Dist: claude-agent-sdk>=0.1.10
|
|
23
23
|
Requires-Dist: openai>=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
|
|
27
27
|
Requires-Dist: pydantic>=2.6.0
|
|
28
28
|
Requires-Dist: pydantic-settings>=2.1.0
|
|
29
|
-
Requires-Dist: python-dotenv>=1.
|
|
29
|
+
Requires-Dist: python-dotenv>=1.2.2
|
|
30
30
|
Requires-Dist: sqlalchemy>=2.0.0
|
|
31
31
|
Requires-Dist: aiosqlite>=0.19.0
|
|
32
|
-
Requires-Dist: aiohttp>=3.
|
|
32
|
+
Requires-Dist: aiohttp>=3.14.0
|
|
33
33
|
Requires-Dist: httpx>=0.27.0
|
|
34
34
|
Requires-Dist: typer>=0.9.0
|
|
35
35
|
Requires-Dist: rich>=13.7.0
|
|
36
36
|
Requires-Dist: textual>=0.86.0
|
|
37
|
-
Requires-Dist: requests>=2.
|
|
38
|
-
Requires-Dist: gitpython>=3.1.
|
|
37
|
+
Requires-Dist: requests>=2.33.0
|
|
38
|
+
Requires-Dist: gitpython>=3.1.50
|
|
39
39
|
Requires-Dist: pyyaml>=6.0.0
|
|
40
40
|
Requires-Dist: tree-sitter>=0.20.4
|
|
41
41
|
Requires-Dist: tree-sitter-python>=0.20.4
|
|
@@ -49,12 +49,21 @@ Requires-Dist: pytest-asyncio>=1.2.0
|
|
|
49
49
|
Requires-Dist: pytest-json-report>=1.5.0
|
|
50
50
|
Requires-Dist: hypothesis>=6.148.0
|
|
51
51
|
Requires-Dist: fastapi-users[sqlalchemy]>=15.0.2
|
|
52
|
+
Requires-Dist: filelock>=3.0
|
|
52
53
|
Requires-Dist: python-jose[cryptography]>=3.4.0
|
|
53
54
|
Requires-Dist: passlib[argon2]>=1.7.4
|
|
54
55
|
Requires-Dist: keyring>=24.0.0
|
|
55
56
|
Requires-Dist: jinja2>=3.1.6
|
|
56
57
|
Requires-Dist: slowapi>=0.1.9
|
|
57
58
|
Requires-Dist: rapidfuzz>=3.0.0
|
|
59
|
+
Requires-Dist: starlette>=1.0.1
|
|
60
|
+
Requires-Dist: python-multipart>=0.0.27
|
|
61
|
+
Requires-Dist: pyjwt>=2.12.0
|
|
62
|
+
Requires-Dist: cryptography>=46.0.7
|
|
63
|
+
Requires-Dist: urllib3>=2.7.0
|
|
64
|
+
Requires-Dist: pyasn1>=0.6.3
|
|
65
|
+
Requires-Dist: mcp>=1.23.0
|
|
66
|
+
Requires-Dist: idna>=3.15
|
|
58
67
|
Provides-Extra: cloud
|
|
59
68
|
Requires-Dist: e2b>=2.0.0; extra == "cloud"
|
|
60
69
|
Provides-Extra: dev
|
|
@@ -63,28 +72,29 @@ Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
|
|
|
63
72
|
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
64
73
|
Requires-Dist: pytest-json-report>=1.5.0; extra == "dev"
|
|
65
74
|
Requires-Dist: pytest-timeout>=2.3.0; extra == "dev"
|
|
66
|
-
Requires-Dist: black>=
|
|
75
|
+
Requires-Dist: black>=26.3.1; extra == "dev"
|
|
67
76
|
Requires-Dist: ruff>=0.2.0; extra == "dev"
|
|
68
77
|
Requires-Dist: mypy>=1.8.0; extra == "dev"
|
|
69
78
|
Requires-Dist: pre-commit>=3.5.0; extra == "dev"
|
|
70
79
|
Requires-Dist: hypothesis>=6.0.0; extra == "dev"
|
|
71
80
|
Requires-Dist: e2b>=2.0.0; extra == "dev"
|
|
81
|
+
Requires-Dist: jsonschema>=4.0.0; extra == "dev"
|
|
72
82
|
Dynamic: license-file
|
|
73
83
|
|
|
74
84
|

|
|
75
85
|
|
|
76
|
-
# CodeFRAME
|
|
86
|
+
# CodeFRAME™
|
|
77
87
|
|
|
78
88
|

|
|
79
89
|
[](https://pypi.org/project/codeframe-ai/)
|
|
80
90
|

|
|
81
91
|

|
|
82
92
|
[](https://github.com/frankbria/codeframe/actions/workflows/test.yml)
|
|
83
|
-

|
|
84
94
|
[](https://x.com/FrankBria18044)
|
|
85
95
|
|
|
86
96
|
> [!WARNING]
|
|
87
|
-
> **Prerequisite:** CodeFRAME requires an `ANTHROPIC_API_KEY` from [console.anthropic.com](https://console.anthropic.com/). Get your key before running any `cf` command.
|
|
97
|
+
> **Prerequisite:** CodeFRAME requires an API key matching your LLM provider — by default an `ANTHROPIC_API_KEY` from [console.anthropic.com](https://console.anthropic.com/), or `OPENAI_API_KEY` when using `--llm-provider openai` (local providers like Ollama need no key). Get your key before running any `cf` command.
|
|
88
98
|
|
|
89
99
|
---
|
|
90
100
|
|
|
@@ -147,7 +157,7 @@ THE CLOSED LOOP
|
|
|
147
157
|
---
|
|
148
158
|
|
|
149
159
|
> [!NOTE]
|
|
150
|
-
> **CodeFRAME is in public beta (`0.9.
|
|
160
|
+
> **CodeFRAME is in public beta (`0.9.2`).** The vision and the Golden Path CLI
|
|
151
161
|
> (`cf init/prd/tasks/work/proof/pr`) and v2 API are stable enough to build on;
|
|
152
162
|
> the web UI and anything marked "in progress" in
|
|
153
163
|
> [`docs/PRODUCT_ROADMAP.md`](docs/PRODUCT_ROADMAP.md) are still moving, and
|
|
@@ -199,7 +209,20 @@ cf tasks generate # Decompose PRD into atomic tasks with dependencies
|
|
|
199
209
|
cf tasks list # Review what was generated
|
|
200
210
|
```
|
|
201
211
|
|
|
202
|
-
**Step 5 —
|
|
212
|
+
**Step 5 — Promote the tasks you want to run**
|
|
213
|
+
|
|
214
|
+
`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`:
|
|
216
|
+
|
|
217
|
+
```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)
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
Skipping this step is why `--all-ready` below would otherwise report
|
|
223
|
+
`No READY tasks found` and do nothing.
|
|
224
|
+
|
|
225
|
+
**Step 6 — Build, Prove, and Ship**
|
|
203
226
|
|
|
204
227
|
```bash
|
|
205
228
|
cf work batch run --all-ready # Execute all READY tasks (delegates to agent)
|
|
@@ -209,6 +232,11 @@ cf pr create # Open a PR with proof report attached
|
|
|
209
232
|
|
|
210
233
|
That is the entire workflow. Everything else is optional.
|
|
211
234
|
|
|
235
|
+
> **See it run from scratch.** [Cold start on a clean machine](docs/demos/quickstart-cleanroom.md)
|
|
236
|
+
> is a narrated walkthrough of exactly these steps in a throwaway container —
|
|
237
|
+
> real transcripts, per-step timings, and the rough edges left in. Reproduce it
|
|
238
|
+
> with `scripts/quickstart-cleanroom/run.sh`.
|
|
239
|
+
|
|
212
240
|
---
|
|
213
241
|
|
|
214
242
|
## Architecture
|
|
@@ -336,6 +364,21 @@ cf proof list # List all proof requirements
|
|
|
336
364
|
cf proof status # Summary status across all gates
|
|
337
365
|
cf proof show <id> # Detail for a specific requirement
|
|
338
366
|
cf proof waive <id> --reason "..." # Waive a requirement with justification
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
**How each gate is verified.** `UNIT` and `CONTRACT` run pytest and `SEC` runs
|
|
370
|
+
ruff directly. The other gates — `E2E`, `VISUAL`, `A11Y`, `PERF`, `DEMO` — have
|
|
371
|
+
no dedicated tool runner and are enforced through their **evidence rules**:
|
|
372
|
+
`cf proof capture` generates a `test_a11y_*` / `test_perf_*` / … stub per
|
|
373
|
+
obligation, and once you implement that test it is run scoped by name, so the
|
|
374
|
+
obligation passes or fails on real evidence. A named test that does not exist
|
|
375
|
+
is a failure, not a pass.
|
|
376
|
+
|
|
377
|
+
`MANUAL` is deliberately never machine-verified — its `manual_check_*` rules
|
|
378
|
+
mean a human has to look — so a MANUAL obligation reports `unverifiable` and is
|
|
379
|
+
resolved by waiving it with a justification.
|
|
380
|
+
|
|
381
|
+
```bash
|
|
339
382
|
|
|
340
383
|
# Checkpoints and gates
|
|
341
384
|
cf review # Run verification gates
|
|
@@ -345,16 +388,18 @@ cf checkpoint restore <id> # Roll back to checkpoint
|
|
|
345
388
|
|
|
346
389
|
# Debugging
|
|
347
390
|
cf work replay <id> # Replay and debug a past execution
|
|
348
|
-
cf
|
|
391
|
+
cf dashboard # Launch TUI dashboard
|
|
349
392
|
```
|
|
350
393
|
|
|
351
394
|
### SHIP -- Delivery
|
|
352
395
|
|
|
353
396
|
```bash
|
|
354
397
|
cf pr create # Create PR from current branch
|
|
355
|
-
cf pr
|
|
356
|
-
cf pr
|
|
398
|
+
cf pr list # List open PRs
|
|
399
|
+
cf pr status # PR status, review state and CI checks
|
|
400
|
+
cf pr get <number> # Details for one PR
|
|
357
401
|
cf pr merge # Merge approved PR
|
|
402
|
+
cf pr close <number> # Close a PR without merging
|
|
358
403
|
cf commit # Commit verified changes
|
|
359
404
|
cf patch export # Export changes as patch
|
|
360
405
|
```
|
|
@@ -366,14 +411,14 @@ cf patch export # Export changes as patch
|
|
|
366
411
|
CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser:
|
|
367
412
|
|
|
368
413
|
- **THINK**: Socratic PRD generation with recursive stress-testing, LLM-powered task decomposition with dependency graphs, 5 PRD templates, 7 task templates, CPM-based scheduling
|
|
369
|
-
- **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
|
|
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`)
|
|
370
415
|
- **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
|
|
371
416
|
- **SHIP**: GitHub PR workflow, environment validation, task self-diagnosis
|
|
372
417
|
- **Engine adapters**: Claude Code, Codex, OpenCode, Kilocode, and built-in ReAct — all via `--engine` flag
|
|
373
418
|
- **Multi-provider LLM**: Anthropic (default) or any OpenAI-compatible endpoint (OpenAI, Ollama, vLLM, LM Studio, Qwen, Deepseek) via `--llm-provider` / `--llm-model` or env vars
|
|
374
419
|
- **Server layer** (optional): FastAPI with 16+ v2 routers, API key auth, rate limiting, SSE streaming, WebSocket endpoints (agent chat, interactive terminal), OpenAPI docs
|
|
375
420
|
- **Web UI**: Workspace view, PRD discovery, Task board, Blocker resolution, Review/commit, PROOF9 requirements list + per-gate evidence display + run history panel + waiver audit trail, agent chat panel with streaming tool-call display, interactive terminal for session workspaces, Sessions list with active-session badge
|
|
376
|
-
- **Test suite**:
|
|
421
|
+
- **Test suite**: 5100+ tests, 81.9% measured coverage (CI enforces an 80% floor)
|
|
377
422
|
|
|
378
423
|
---
|
|
379
424
|
|
|
@@ -389,7 +434,7 @@ CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser
|
|
|
389
434
|
- [x] Worktree isolation for parallel agent execution
|
|
390
435
|
- [x] Reconciliation layer for multi-agent output
|
|
391
436
|
- [x] Replay/debug mode (`cf work replay`)
|
|
392
|
-
- [x] TUI dashboard (`cf
|
|
437
|
+
- [x] TUI dashboard (`cf dashboard`)
|
|
393
438
|
- [x] Dynamic config reload during batch execution
|
|
394
439
|
- [x] Multi-provider LLM -- Anthropic, OpenAI, or any OpenAI-compatible endpoint
|
|
395
440
|
- [ ] Engine performance tracking and automatic routing
|
|
@@ -398,12 +443,12 @@ CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser
|
|
|
398
443
|
- [x] PROOF9 -- 9-gate evidence-based quality system
|
|
399
444
|
- [x] `cf proof capture` -- Glitch-to-requirement closed loop
|
|
400
445
|
- [x] Quality compounding: every failure becomes a permanent proof obligation
|
|
401
|
-
- [
|
|
402
|
-
- [
|
|
403
|
-
- [
|
|
446
|
+
- [x] Run gates from the web UI -- live progress, per-gate evidence, run history
|
|
447
|
+
- [x] Glitch capture web UI -- `CaptureGlitchModal` plus the REQ detail view at `/proof/[req_id]`
|
|
448
|
+
- [x] Merge gating on PROOF9 pass -- enforced server-side at the merge API, with an explicit audited override (actor + reason)
|
|
404
449
|
|
|
405
450
|
### SHIP (delivery confidence)
|
|
406
|
-
- [
|
|
451
|
+
- [x] PR status tracking + CI check display in web UI (`PRStatusPanel` on `/review`)
|
|
407
452
|
- [ ] Post-merge glitch capture loop
|
|
408
453
|
|
|
409
454
|
### Web UI
|
|
@@ -415,8 +460,8 @@ CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser
|
|
|
415
460
|
- [x] PROOF9 requirements list, detail, evidence history, sort/filter controls, waiver with audit trail
|
|
416
461
|
- [x] Interactive Agent Sessions — chat panel (tool calls, thinking blocks), XTerm.js terminal, SplitPane layout
|
|
417
462
|
- [x] Run gates button, live gate progress, per-gate evidence display, run history panel (PROOF9 page)
|
|
418
|
-
- [
|
|
419
|
-
- [
|
|
463
|
+
- [x] Glitch capture form and REQ detail view (markdown description, scope metadata, obligations table, sortable evidence history)
|
|
464
|
+
- [x] PR status panel with PROOF9-gated merge button (gate also enforced server-side)
|
|
420
465
|
|
|
421
466
|
---
|
|
422
467
|
|
|
@@ -434,7 +479,7 @@ export OPENAI_BASE_URL=http://localhost:11434/v1 # for Ollama, vLLM, LM Studio,
|
|
|
434
479
|
# Per-workspace: .codeframe/config.yaml supports an `llm:` block for the same options
|
|
435
480
|
|
|
436
481
|
# Optional
|
|
437
|
-
export DATABASE_PATH=./codeframe.db # Default:
|
|
482
|
+
export DATABASE_PATH=./codeframe.db # Default: ./.codeframe/state.db
|
|
438
483
|
export RATE_LIMIT_ENABLED=true # API rate limiting
|
|
439
484
|
export RATE_LIMIT_DEFAULT=100/minute # Default limit
|
|
440
485
|
```
|
|
@@ -489,7 +534,7 @@ cd web-ui && npm run build # Production build verification
|
|
|
489
534
|
4. Run tests: `uv run pytest`
|
|
490
535
|
5. Submit PR with tests and clear description
|
|
491
536
|
|
|
492
|
-
Code standards: PEP 8, `ruff` for linting, type hints required,
|
|
537
|
+
Code standards: PEP 8, `ruff` for linting, type hints required, 80%+ test coverage (enforced by CI via `.coveragerc`).
|
|
493
538
|
|
|
494
539
|
During the beta, feature ideas go to [Discussions -> Ideas](https://github.com/frankbria/codeframe/discussions/categories/ideas) before code. See [CONTRIBUTING.md](CONTRIBUTING.md) for what's stable, what isn't, and how to propose changes.
|
|
495
540
|
|
|
@@ -501,6 +546,7 @@ CodeFRAME is in **public beta**.
|
|
|
501
546
|
|
|
502
547
|
- **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.
|
|
503
548
|
- **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
|
+
- **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.
|
|
504
550
|
- **Early access / design partners:** email `hello@codeframe.sh` or reply to the pinned [Discussion](https://github.com/frankbria/codeframe/discussions) to be included.
|
|
505
551
|
- **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.
|
|
506
552
|
|
|
@@ -510,8 +556,12 @@ CodeFRAME is in **public beta**.
|
|
|
510
556
|
|
|
511
557
|
[AGPL-3.0](LICENSE) -- Free to use, modify, and distribute. Derivative works and network services must release source code under the same license. See [LICENSING.md](LICENSING.md) for a plain-language explanation and commercial options.
|
|
512
558
|
|
|
559
|
+
The code is AGPL-3.0; the **CodeFRAME™ name and logo are trademarks** of Noatak Enterprises, LLC, dba Bria Strategy Group, and are not licensed under the AGPL -- see [TRADEMARKS.md](TRADEMARKS.md).
|
|
560
|
+
|
|
513
561
|
---
|
|
514
562
|
|
|
515
563
|
**Built by [Frank Bria](https://x.com/FrankBria18044)**
|
|
516
564
|
|
|
517
565
|
[Issues](https://github.com/frankbria/codeframe/issues) | [Discussions](https://github.com/frankbria/codeframe/discussions) | [Documentation](https://github.com/frankbria/codeframe/tree/main/docs)
|
|
566
|
+
|
|
567
|
+
_CodeFRAME™ is a trademark of Noatak Enterprises, LLC, dba Bria Strategy Group. All rights reserved._
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|

|
|
2
2
|
|
|
3
|
-
# CodeFRAME
|
|
3
|
+
# CodeFRAME™
|
|
4
4
|
|
|
5
5
|

|
|
6
6
|
[](https://pypi.org/project/codeframe-ai/)
|
|
7
7
|

|
|
8
8
|

|
|
9
9
|
[](https://github.com/frankbria/codeframe/actions/workflows/test.yml)
|
|
10
|
-

|
|
11
11
|
[](https://x.com/FrankBria18044)
|
|
12
12
|
|
|
13
13
|
> [!WARNING]
|
|
14
|
-
> **Prerequisite:** CodeFRAME requires an `ANTHROPIC_API_KEY` from [console.anthropic.com](https://console.anthropic.com/). Get your key before running any `cf` command.
|
|
14
|
+
> **Prerequisite:** CodeFRAME requires an API key matching your LLM provider — by default an `ANTHROPIC_API_KEY` from [console.anthropic.com](https://console.anthropic.com/), or `OPENAI_API_KEY` when using `--llm-provider openai` (local providers like Ollama need no key). Get your key before running any `cf` command.
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -74,7 +74,7 @@ THE CLOSED LOOP
|
|
|
74
74
|
---
|
|
75
75
|
|
|
76
76
|
> [!NOTE]
|
|
77
|
-
> **CodeFRAME is in public beta (`0.9.
|
|
77
|
+
> **CodeFRAME is in public beta (`0.9.2`).** 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
|
|
@@ -126,7 +126,20 @@ cf tasks generate # Decompose PRD into atomic tasks with dependencies
|
|
|
126
126
|
cf tasks list # Review what was generated
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
-
**Step 5 —
|
|
129
|
+
**Step 5 — Promote the tasks you want to run**
|
|
130
|
+
|
|
131
|
+
`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
|
+
|
|
134
|
+
```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
|
+
```
|
|
138
|
+
|
|
139
|
+
Skipping this step is why `--all-ready` below would otherwise report
|
|
140
|
+
`No READY tasks found` and do nothing.
|
|
141
|
+
|
|
142
|
+
**Step 6 — Build, Prove, and Ship**
|
|
130
143
|
|
|
131
144
|
```bash
|
|
132
145
|
cf work batch run --all-ready # Execute all READY tasks (delegates to agent)
|
|
@@ -136,6 +149,11 @@ cf pr create # Open a PR with proof report attached
|
|
|
136
149
|
|
|
137
150
|
That is the entire workflow. Everything else is optional.
|
|
138
151
|
|
|
152
|
+
> **See it run from scratch.** [Cold start on a clean machine](docs/demos/quickstart-cleanroom.md)
|
|
153
|
+
> is a narrated walkthrough of exactly these steps in a throwaway container —
|
|
154
|
+
> real transcripts, per-step timings, and the rough edges left in. Reproduce it
|
|
155
|
+
> with `scripts/quickstart-cleanroom/run.sh`.
|
|
156
|
+
|
|
139
157
|
---
|
|
140
158
|
|
|
141
159
|
## Architecture
|
|
@@ -263,6 +281,21 @@ cf proof list # List all proof requirements
|
|
|
263
281
|
cf proof status # Summary status across all gates
|
|
264
282
|
cf proof show <id> # Detail for a specific requirement
|
|
265
283
|
cf proof waive <id> --reason "..." # Waive a requirement with justification
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**How each gate is verified.** `UNIT` and `CONTRACT` run pytest and `SEC` runs
|
|
287
|
+
ruff directly. The other gates — `E2E`, `VISUAL`, `A11Y`, `PERF`, `DEMO` — have
|
|
288
|
+
no dedicated tool runner and are enforced through their **evidence rules**:
|
|
289
|
+
`cf proof capture` generates a `test_a11y_*` / `test_perf_*` / … stub per
|
|
290
|
+
obligation, and once you implement that test it is run scoped by name, so the
|
|
291
|
+
obligation passes or fails on real evidence. A named test that does not exist
|
|
292
|
+
is a failure, not a pass.
|
|
293
|
+
|
|
294
|
+
`MANUAL` is deliberately never machine-verified — its `manual_check_*` rules
|
|
295
|
+
mean a human has to look — so a MANUAL obligation reports `unverifiable` and is
|
|
296
|
+
resolved by waiving it with a justification.
|
|
297
|
+
|
|
298
|
+
```bash
|
|
266
299
|
|
|
267
300
|
# Checkpoints and gates
|
|
268
301
|
cf review # Run verification gates
|
|
@@ -272,16 +305,18 @@ cf checkpoint restore <id> # Roll back to checkpoint
|
|
|
272
305
|
|
|
273
306
|
# Debugging
|
|
274
307
|
cf work replay <id> # Replay and debug a past execution
|
|
275
|
-
cf
|
|
308
|
+
cf dashboard # Launch TUI dashboard
|
|
276
309
|
```
|
|
277
310
|
|
|
278
311
|
### SHIP -- Delivery
|
|
279
312
|
|
|
280
313
|
```bash
|
|
281
314
|
cf pr create # Create PR from current branch
|
|
282
|
-
cf pr
|
|
283
|
-
cf pr
|
|
315
|
+
cf pr list # List open PRs
|
|
316
|
+
cf pr status # PR status, review state and CI checks
|
|
317
|
+
cf pr get <number> # Details for one PR
|
|
284
318
|
cf pr merge # Merge approved PR
|
|
319
|
+
cf pr close <number> # Close a PR without merging
|
|
285
320
|
cf commit # Commit verified changes
|
|
286
321
|
cf patch export # Export changes as patch
|
|
287
322
|
```
|
|
@@ -293,14 +328,14 @@ cf patch export # Export changes as patch
|
|
|
293
328
|
CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser:
|
|
294
329
|
|
|
295
330
|
- **THINK**: Socratic PRD generation with recursive stress-testing, LLM-powered task decomposition with dependency graphs, 5 PRD templates, 7 task templates, CPM-based scheduling
|
|
296
|
-
- **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
|
|
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`)
|
|
297
332
|
- **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
|
|
298
333
|
- **SHIP**: GitHub PR workflow, environment validation, task self-diagnosis
|
|
299
334
|
- **Engine adapters**: Claude Code, Codex, OpenCode, Kilocode, and built-in ReAct — all via `--engine` flag
|
|
300
335
|
- **Multi-provider LLM**: Anthropic (default) or any OpenAI-compatible endpoint (OpenAI, Ollama, vLLM, LM Studio, Qwen, Deepseek) via `--llm-provider` / `--llm-model` or env vars
|
|
301
336
|
- **Server layer** (optional): FastAPI with 16+ v2 routers, API key auth, rate limiting, SSE streaming, WebSocket endpoints (agent chat, interactive terminal), OpenAPI docs
|
|
302
337
|
- **Web UI**: Workspace view, PRD discovery, Task board, Blocker resolution, Review/commit, PROOF9 requirements list + per-gate evidence display + run history panel + waiver audit trail, agent chat panel with streaming tool-call display, interactive terminal for session workspaces, Sessions list with active-session badge
|
|
303
|
-
- **Test suite**:
|
|
338
|
+
- **Test suite**: 5100+ tests, 81.9% measured coverage (CI enforces an 80% floor)
|
|
304
339
|
|
|
305
340
|
---
|
|
306
341
|
|
|
@@ -316,7 +351,7 @@ CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser
|
|
|
316
351
|
- [x] Worktree isolation for parallel agent execution
|
|
317
352
|
- [x] Reconciliation layer for multi-agent output
|
|
318
353
|
- [x] Replay/debug mode (`cf work replay`)
|
|
319
|
-
- [x] TUI dashboard (`cf
|
|
354
|
+
- [x] TUI dashboard (`cf dashboard`)
|
|
320
355
|
- [x] Dynamic config reload during batch execution
|
|
321
356
|
- [x] Multi-provider LLM -- Anthropic, OpenAI, or any OpenAI-compatible endpoint
|
|
322
357
|
- [ ] Engine performance tracking and automatic routing
|
|
@@ -325,12 +360,12 @@ CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser
|
|
|
325
360
|
- [x] PROOF9 -- 9-gate evidence-based quality system
|
|
326
361
|
- [x] `cf proof capture` -- Glitch-to-requirement closed loop
|
|
327
362
|
- [x] Quality compounding: every failure becomes a permanent proof obligation
|
|
328
|
-
- [
|
|
329
|
-
- [
|
|
330
|
-
- [
|
|
363
|
+
- [x] Run gates from the web UI -- live progress, per-gate evidence, run history
|
|
364
|
+
- [x] Glitch capture web UI -- `CaptureGlitchModal` plus the REQ detail view at `/proof/[req_id]`
|
|
365
|
+
- [x] Merge gating on PROOF9 pass -- enforced server-side at the merge API, with an explicit audited override (actor + reason)
|
|
331
366
|
|
|
332
367
|
### SHIP (delivery confidence)
|
|
333
|
-
- [
|
|
368
|
+
- [x] PR status tracking + CI check display in web UI (`PRStatusPanel` on `/review`)
|
|
334
369
|
- [ ] Post-merge glitch capture loop
|
|
335
370
|
|
|
336
371
|
### Web UI
|
|
@@ -342,8 +377,8 @@ CodeFRAME delivers the full Think-Build-Prove-Ship loop from the CLI and browser
|
|
|
342
377
|
- [x] PROOF9 requirements list, detail, evidence history, sort/filter controls, waiver with audit trail
|
|
343
378
|
- [x] Interactive Agent Sessions — chat panel (tool calls, thinking blocks), XTerm.js terminal, SplitPane layout
|
|
344
379
|
- [x] Run gates button, live gate progress, per-gate evidence display, run history panel (PROOF9 page)
|
|
345
|
-
- [
|
|
346
|
-
- [
|
|
380
|
+
- [x] Glitch capture form and REQ detail view (markdown description, scope metadata, obligations table, sortable evidence history)
|
|
381
|
+
- [x] PR status panel with PROOF9-gated merge button (gate also enforced server-side)
|
|
347
382
|
|
|
348
383
|
---
|
|
349
384
|
|
|
@@ -361,7 +396,7 @@ export OPENAI_BASE_URL=http://localhost:11434/v1 # for Ollama, vLLM, LM Studio,
|
|
|
361
396
|
# Per-workspace: .codeframe/config.yaml supports an `llm:` block for the same options
|
|
362
397
|
|
|
363
398
|
# Optional
|
|
364
|
-
export DATABASE_PATH=./codeframe.db # Default:
|
|
399
|
+
export DATABASE_PATH=./codeframe.db # Default: ./.codeframe/state.db
|
|
365
400
|
export RATE_LIMIT_ENABLED=true # API rate limiting
|
|
366
401
|
export RATE_LIMIT_DEFAULT=100/minute # Default limit
|
|
367
402
|
```
|
|
@@ -416,7 +451,7 @@ cd web-ui && npm run build # Production build verification
|
|
|
416
451
|
4. Run tests: `uv run pytest`
|
|
417
452
|
5. Submit PR with tests and clear description
|
|
418
453
|
|
|
419
|
-
Code standards: PEP 8, `ruff` for linting, type hints required,
|
|
454
|
+
Code standards: PEP 8, `ruff` for linting, type hints required, 80%+ test coverage (enforced by CI via `.coveragerc`).
|
|
420
455
|
|
|
421
456
|
During the beta, feature ideas go to [Discussions -> Ideas](https://github.com/frankbria/codeframe/discussions/categories/ideas) before code. See [CONTRIBUTING.md](CONTRIBUTING.md) for what's stable, what isn't, and how to propose changes.
|
|
422
457
|
|
|
@@ -428,6 +463,7 @@ CodeFRAME is in **public beta**.
|
|
|
428
463
|
|
|
429
464
|
- **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.
|
|
430
465
|
- **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
|
+
- **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.
|
|
431
467
|
- **Early access / design partners:** email `hello@codeframe.sh` or reply to the pinned [Discussion](https://github.com/frankbria/codeframe/discussions) to be included.
|
|
432
468
|
- **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.
|
|
433
469
|
|
|
@@ -437,8 +473,12 @@ CodeFRAME is in **public beta**.
|
|
|
437
473
|
|
|
438
474
|
[AGPL-3.0](LICENSE) -- Free to use, modify, and distribute. Derivative works and network services must release source code under the same license. See [LICENSING.md](LICENSING.md) for a plain-language explanation and commercial options.
|
|
439
475
|
|
|
476
|
+
The code is AGPL-3.0; the **CodeFRAME™ name and logo are trademarks** of Noatak Enterprises, LLC, dba Bria Strategy Group, and are not licensed under the AGPL -- see [TRADEMARKS.md](TRADEMARKS.md).
|
|
477
|
+
|
|
440
478
|
---
|
|
441
479
|
|
|
442
480
|
**Built by [Frank Bria](https://x.com/FrankBria18044)**
|
|
443
481
|
|
|
444
482
|
[Issues](https://github.com/frankbria/codeframe/issues) | [Discussions](https://github.com/frankbria/codeframe/discussions) | [Documentation](https://github.com/frankbria/codeframe/tree/main/docs)
|
|
483
|
+
|
|
484
|
+
_CodeFRAME™ is a trademark of Noatak Enterprises, LLC, dba Bria Strategy Group. All rights reserved._
|