codeframe-ai 0.9.0__py3-none-any.whl
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/__init__.py +11 -0
- codeframe/__main__.py +20 -0
- codeframe/adapters/__init__.py +5 -0
- codeframe/adapters/e2b/__init__.py +13 -0
- codeframe/adapters/e2b/adapter.py +342 -0
- codeframe/adapters/e2b/budget.py +71 -0
- codeframe/adapters/e2b/credential_scanner.py +134 -0
- codeframe/adapters/llm/__init__.py +92 -0
- codeframe/adapters/llm/anthropic.py +414 -0
- codeframe/adapters/llm/base.py +444 -0
- codeframe/adapters/llm/mock.py +281 -0
- codeframe/adapters/llm/openai.py +483 -0
- codeframe/agents/__init__.py +8 -0
- codeframe/agents/dependency_resolver.py +714 -0
- codeframe/auth/__init__.py +16 -0
- codeframe/auth/api_key_router.py +238 -0
- codeframe/auth/api_keys.py +156 -0
- codeframe/auth/dependencies.py +358 -0
- codeframe/auth/manager.py +178 -0
- codeframe/auth/models.py +30 -0
- codeframe/auth/router.py +93 -0
- codeframe/auth/schemas.py +15 -0
- codeframe/auth/scopes.py +53 -0
- codeframe/cli/__init__.py +12 -0
- codeframe/cli/__main__.py +20 -0
- codeframe/cli/api_client.py +275 -0
- codeframe/cli/app.py +5688 -0
- codeframe/cli/auth.py +122 -0
- codeframe/cli/auth_commands.py +958 -0
- codeframe/cli/commands/__init__.py +5 -0
- codeframe/cli/config_commands.py +79 -0
- codeframe/cli/dashboard_commands.py +67 -0
- codeframe/cli/engines_commands.py +205 -0
- codeframe/cli/env_commands.py +409 -0
- codeframe/cli/helpers.py +56 -0
- codeframe/cli/hooks_commands.py +208 -0
- codeframe/cli/import_commands.py +129 -0
- codeframe/cli/pr_commands.py +549 -0
- codeframe/cli/proof_commands.py +415 -0
- codeframe/cli/stats_commands.py +311 -0
- codeframe/cli/telemetry_runtime.py +153 -0
- codeframe/cli/validators.py +123 -0
- codeframe/config/rate_limits.py +165 -0
- codeframe/core/__init__.py +15 -0
- codeframe/core/adapters/__init__.py +43 -0
- codeframe/core/adapters/agent_adapter.py +114 -0
- codeframe/core/adapters/builtin.py +326 -0
- codeframe/core/adapters/claude_code.py +62 -0
- codeframe/core/adapters/codex.py +393 -0
- codeframe/core/adapters/git_utils.py +40 -0
- codeframe/core/adapters/kilocode.py +126 -0
- codeframe/core/adapters/opencode.py +48 -0
- codeframe/core/adapters/streaming_chat.py +483 -0
- codeframe/core/adapters/subprocess_adapter.py +213 -0
- codeframe/core/adapters/verification_wrapper.py +269 -0
- codeframe/core/agent.py +2183 -0
- codeframe/core/agents_config.py +569 -0
- codeframe/core/api_key_service.py +211 -0
- codeframe/core/artifacts.py +428 -0
- codeframe/core/blocker_detection.py +218 -0
- codeframe/core/blockers.py +433 -0
- codeframe/core/checkpoints.py +481 -0
- codeframe/core/conductor.py +2255 -0
- codeframe/core/config.py +827 -0
- codeframe/core/config_watcher.py +268 -0
- codeframe/core/context.py +542 -0
- codeframe/core/context_packager.py +234 -0
- codeframe/core/credentials.py +735 -0
- codeframe/core/dependency_analyzer.py +229 -0
- codeframe/core/dependency_graph.py +290 -0
- codeframe/core/diagnostic_agent.py +712 -0
- codeframe/core/diagnostics.py +616 -0
- codeframe/core/editor.py +556 -0
- codeframe/core/engine_registry.py +256 -0
- codeframe/core/engine_stats.py +231 -0
- codeframe/core/environment.py +697 -0
- codeframe/core/events.py +375 -0
- codeframe/core/executor.py +1005 -0
- codeframe/core/fix_tracker.py +480 -0
- codeframe/core/gates.py +1322 -0
- codeframe/core/git.py +477 -0
- codeframe/core/github_connect_service.py +178 -0
- codeframe/core/github_integration_config.py +118 -0
- codeframe/core/github_issues_service.py +449 -0
- codeframe/core/hooks.py +184 -0
- codeframe/core/importers/__init__.py +1 -0
- codeframe/core/importers/ralph.py +540 -0
- codeframe/core/installer.py +650 -0
- codeframe/core/models.py +1026 -0
- codeframe/core/notifications_config.py +183 -0
- codeframe/core/planner.py +437 -0
- codeframe/core/prd.py +670 -0
- codeframe/core/prd_discovery.py +1118 -0
- codeframe/core/prd_stress_test.py +499 -0
- codeframe/core/progress.py +126 -0
- codeframe/core/proof/__init__.py +34 -0
- codeframe/core/proof/capture.py +79 -0
- codeframe/core/proof/evidence.py +56 -0
- codeframe/core/proof/ledger.py +574 -0
- codeframe/core/proof/models.py +162 -0
- codeframe/core/proof/obligations.py +103 -0
- codeframe/core/proof/runner.py +233 -0
- codeframe/core/proof/scope.py +81 -0
- codeframe/core/proof/stubs.py +156 -0
- codeframe/core/quick_fixes.py +558 -0
- codeframe/core/react_agent.py +1650 -0
- codeframe/core/reconciliation.py +183 -0
- codeframe/core/replay.py +788 -0
- codeframe/core/review.py +285 -0
- codeframe/core/runtime.py +1134 -0
- codeframe/core/sandbox/__init__.py +27 -0
- codeframe/core/sandbox/context.py +98 -0
- codeframe/core/sandbox/worktree.py +20 -0
- codeframe/core/schedule.py +396 -0
- codeframe/core/stall_detector.py +71 -0
- codeframe/core/stall_monitor.py +134 -0
- codeframe/core/state_machine.py +121 -0
- codeframe/core/streaming.py +502 -0
- codeframe/core/task_tree.py +400 -0
- codeframe/core/tasks.py +1022 -0
- codeframe/core/telemetry.py +232 -0
- codeframe/core/templates.py +221 -0
- codeframe/core/tools.py +942 -0
- codeframe/core/workspace.py +887 -0
- codeframe/core/worktrees.py +276 -0
- codeframe/git/__init__.py +5 -0
- codeframe/git/github_integration.py +505 -0
- codeframe/lib/__init__.py +0 -0
- codeframe/lib/audit_logger.py +248 -0
- codeframe/lib/metrics_tracker.py +800 -0
- codeframe/lib/quality/__init__.py +7 -0
- codeframe/lib/quality/complexity_analyzer.py +316 -0
- codeframe/lib/quality/owasp_patterns.py +284 -0
- codeframe/lib/quality/security_scanner.py +250 -0
- codeframe/lib/rate_limiter.py +312 -0
- codeframe/notifications/__init__.py +0 -0
- codeframe/notifications/webhook.py +380 -0
- codeframe/planning/__init__.py +30 -0
- codeframe/planning/issue_generator.py +219 -0
- codeframe/planning/prd_template_functions.py +137 -0
- codeframe/planning/prd_templates.py +975 -0
- codeframe/planning/task_scheduler.py +511 -0
- codeframe/planning/task_templates.py +533 -0
- codeframe/platform_store/__init__.py +5 -0
- codeframe/platform_store/database.py +277 -0
- codeframe/platform_store/repositories/__init__.py +24 -0
- codeframe/platform_store/repositories/api_key_repository.py +245 -0
- codeframe/platform_store/repositories/audit_repository.py +67 -0
- codeframe/platform_store/repositories/base.py +295 -0
- codeframe/platform_store/repositories/interactive_sessions.py +165 -0
- codeframe/platform_store/repositories/token_repository.py +598 -0
- codeframe/platform_store/repositories/workspace_registry_repository.py +175 -0
- codeframe/platform_store/schema_manager.py +321 -0
- codeframe/templates/AGENTS.md.default +94 -0
- codeframe/tui/__init__.py +5 -0
- codeframe/tui/app.py +256 -0
- codeframe/tui/data_service.py +103 -0
- codeframe/ui/__init__.py +0 -0
- codeframe/ui/dependencies.py +103 -0
- codeframe/ui/models.py +999 -0
- codeframe/ui/response_models.py +201 -0
- codeframe/ui/routers/__init__.py +5 -0
- codeframe/ui/routers/_helpers.py +29 -0
- codeframe/ui/routers/batches_v2.py +315 -0
- codeframe/ui/routers/blockers_v2.py +320 -0
- codeframe/ui/routers/checkpoints_v2.py +310 -0
- codeframe/ui/routers/costs_v2.py +322 -0
- codeframe/ui/routers/diagnose_v2.py +225 -0
- codeframe/ui/routers/discovery_v2.py +417 -0
- codeframe/ui/routers/environment_v2.py +284 -0
- codeframe/ui/routers/events_v2.py +75 -0
- codeframe/ui/routers/gates_v2.py +166 -0
- codeframe/ui/routers/git_v2.py +284 -0
- codeframe/ui/routers/github_integrations_v2.py +532 -0
- codeframe/ui/routers/interactive_sessions_v2.py +238 -0
- codeframe/ui/routers/pr_v2.py +709 -0
- codeframe/ui/routers/prd_v2.py +695 -0
- codeframe/ui/routers/proof_v2.py +755 -0
- codeframe/ui/routers/review_v2.py +360 -0
- codeframe/ui/routers/schedule_v2.py +214 -0
- codeframe/ui/routers/session_chat_ws.py +354 -0
- codeframe/ui/routers/settings_v2.py +562 -0
- codeframe/ui/routers/streaming_v2.py +155 -0
- codeframe/ui/routers/tasks_v2.py +1098 -0
- codeframe/ui/routers/templates_v2.py +232 -0
- codeframe/ui/routers/terminal_ws.py +267 -0
- codeframe/ui/routers/workspace_v2.py +527 -0
- codeframe/ui/server.py +568 -0
- codeframe/ui/shared.py +241 -0
- codeframe/workspace/__init__.py +5 -0
- codeframe/workspace/manager.py +249 -0
- codeframe_ai-0.9.0.dist-info/METADATA +517 -0
- codeframe_ai-0.9.0.dist-info/RECORD +197 -0
- codeframe_ai-0.9.0.dist-info/WHEEL +5 -0
- codeframe_ai-0.9.0.dist-info/entry_points.txt +3 -0
- codeframe_ai-0.9.0.dist-info/licenses/LICENSE +661 -0
- codeframe_ai-0.9.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"""Jinja2 template functions for PRD rendering.
|
|
2
|
+
|
|
3
|
+
This module provides custom filters and functions for use in PRD templates:
|
|
4
|
+
- bullet_list: Convert list to markdown bullets
|
|
5
|
+
- numbered_list: Convert list to numbered list
|
|
6
|
+
- table: Generate markdown table
|
|
7
|
+
- summarize: Summarize long text (placeholder for LLM call)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def bullet_list(items: list[str]) -> str:
|
|
14
|
+
"""Convert a list to markdown bullet points.
|
|
15
|
+
|
|
16
|
+
Args:
|
|
17
|
+
items: List of strings to convert
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
Markdown formatted bullet list
|
|
21
|
+
"""
|
|
22
|
+
if not items:
|
|
23
|
+
return ""
|
|
24
|
+
return "\n".join(f"- {item}" for item in items)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def numbered_list(items: list[str]) -> str:
|
|
28
|
+
"""Convert a list to a numbered markdown list.
|
|
29
|
+
|
|
30
|
+
Args:
|
|
31
|
+
items: List of strings to convert
|
|
32
|
+
|
|
33
|
+
Returns:
|
|
34
|
+
Markdown formatted numbered list
|
|
35
|
+
"""
|
|
36
|
+
if not items:
|
|
37
|
+
return ""
|
|
38
|
+
return "\n".join(f"{i}. {item}" for i, item in enumerate(items, 1))
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def table(items: list[dict[str, Any]], columns: list[str]) -> str:
|
|
42
|
+
"""Generate a markdown table from a list of dictionaries.
|
|
43
|
+
|
|
44
|
+
Args:
|
|
45
|
+
items: List of dictionaries with data
|
|
46
|
+
columns: Column names to include in table
|
|
47
|
+
|
|
48
|
+
Returns:
|
|
49
|
+
Markdown formatted table
|
|
50
|
+
"""
|
|
51
|
+
if not items or not columns:
|
|
52
|
+
return ""
|
|
53
|
+
|
|
54
|
+
# Header row
|
|
55
|
+
header = "| " + " | ".join(columns) + " |"
|
|
56
|
+
|
|
57
|
+
# Separator row
|
|
58
|
+
separator = "| " + " | ".join("---" for _ in columns) + " |"
|
|
59
|
+
|
|
60
|
+
# Data rows
|
|
61
|
+
rows = []
|
|
62
|
+
for item in items:
|
|
63
|
+
row_values = [str(item.get(col, "")) for col in columns]
|
|
64
|
+
rows.append("| " + " | ".join(row_values) + " |")
|
|
65
|
+
|
|
66
|
+
return "\n".join([header, separator] + rows)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def summarize(text: str, max_words: int = 50) -> str:
|
|
70
|
+
"""Summarize long text (placeholder - truncates for now).
|
|
71
|
+
|
|
72
|
+
In a future version, this could call an LLM for proper summarization.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
text: Text to summarize
|
|
76
|
+
max_words: Maximum words in summary
|
|
77
|
+
|
|
78
|
+
Returns:
|
|
79
|
+
Summarized text
|
|
80
|
+
"""
|
|
81
|
+
if not text:
|
|
82
|
+
return ""
|
|
83
|
+
|
|
84
|
+
words = text.split()
|
|
85
|
+
if len(words) <= max_words:
|
|
86
|
+
return text
|
|
87
|
+
|
|
88
|
+
return " ".join(words[:max_words]) + "..."
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def join_list(items: list[str], separator: str = ", ") -> str:
|
|
92
|
+
"""Join a list into a string with separator.
|
|
93
|
+
|
|
94
|
+
Args:
|
|
95
|
+
items: List of strings to join
|
|
96
|
+
separator: Separator between items
|
|
97
|
+
|
|
98
|
+
Returns:
|
|
99
|
+
Joined string
|
|
100
|
+
"""
|
|
101
|
+
if not items:
|
|
102
|
+
return ""
|
|
103
|
+
return separator.join(str(item) for item in items)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def format_constraints(constraints: dict[str, Any]) -> str:
|
|
107
|
+
"""Format constraints dictionary as markdown.
|
|
108
|
+
|
|
109
|
+
Args:
|
|
110
|
+
constraints: Dictionary of constraint types to values
|
|
111
|
+
|
|
112
|
+
Returns:
|
|
113
|
+
Markdown formatted constraints
|
|
114
|
+
"""
|
|
115
|
+
if not constraints:
|
|
116
|
+
return "No specific constraints defined."
|
|
117
|
+
|
|
118
|
+
lines = []
|
|
119
|
+
for key, value in constraints.items():
|
|
120
|
+
if isinstance(value, list):
|
|
121
|
+
value_str = ", ".join(str(v) for v in value)
|
|
122
|
+
else:
|
|
123
|
+
value_str = str(value)
|
|
124
|
+
lines.append(f"- **{key.title()}**: {value_str}")
|
|
125
|
+
|
|
126
|
+
return "\n".join(lines)
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
# Registry of all template functions
|
|
130
|
+
TEMPLATE_FUNCTIONS = {
|
|
131
|
+
"bullet_list": bullet_list,
|
|
132
|
+
"numbered_list": numbered_list,
|
|
133
|
+
"table": table,
|
|
134
|
+
"summarize": summarize,
|
|
135
|
+
"join_list": join_list,
|
|
136
|
+
"format_constraints": format_constraints,
|
|
137
|
+
}
|