superqode 0.1.5__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.
- superqode/__init__.py +33 -0
- superqode/acp/__init__.py +23 -0
- superqode/acp/client.py +913 -0
- superqode/acp/permission_screen.py +457 -0
- superqode/acp/types.py +480 -0
- superqode/acp_discovery.py +856 -0
- superqode/agent/__init__.py +22 -0
- superqode/agent/edit_strategies.py +334 -0
- superqode/agent/loop.py +892 -0
- superqode/agent/qe_report_templates.py +39 -0
- superqode/agent/system_prompts.py +353 -0
- superqode/agent_output.py +721 -0
- superqode/agent_stream.py +953 -0
- superqode/agents/__init__.py +59 -0
- superqode/agents/acp_registry.py +305 -0
- superqode/agents/client.py +249 -0
- superqode/agents/data/augmentcode.com.toml +51 -0
- superqode/agents/data/cagent.dev.toml +51 -0
- superqode/agents/data/claude.com.toml +60 -0
- superqode/agents/data/codeassistant.dev.toml +51 -0
- superqode/agents/data/codex.openai.com.toml +57 -0
- superqode/agents/data/fastagent.ai.toml +66 -0
- superqode/agents/data/geminicli.com.toml +77 -0
- superqode/agents/data/goose.block.xyz.toml +54 -0
- superqode/agents/data/junie.jetbrains.com.toml +56 -0
- superqode/agents/data/kimi.moonshot.cn.toml +57 -0
- superqode/agents/data/llmlingagent.dev.toml +51 -0
- superqode/agents/data/molt.bot.toml +49 -0
- superqode/agents/data/opencode.ai.toml +60 -0
- superqode/agents/data/stakpak.dev.toml +51 -0
- superqode/agents/data/vtcode.dev.toml +51 -0
- superqode/agents/discovery.py +266 -0
- superqode/agents/messaging.py +160 -0
- superqode/agents/persona.py +166 -0
- superqode/agents/registry.py +421 -0
- superqode/agents/schema.py +72 -0
- superqode/agents/unified.py +367 -0
- superqode/app/__init__.py +111 -0
- superqode/app/constants.py +314 -0
- superqode/app/css.py +366 -0
- superqode/app/models.py +118 -0
- superqode/app/suggester.py +125 -0
- superqode/app/widgets.py +1591 -0
- superqode/app_enhanced.py +399 -0
- superqode/app_main.py +17187 -0
- superqode/approval.py +312 -0
- superqode/atomic.py +296 -0
- superqode/commands/__init__.py +1 -0
- superqode/commands/acp.py +965 -0
- superqode/commands/agents.py +180 -0
- superqode/commands/auth.py +278 -0
- superqode/commands/config.py +374 -0
- superqode/commands/init.py +826 -0
- superqode/commands/providers.py +819 -0
- superqode/commands/qe.py +1145 -0
- superqode/commands/roles.py +380 -0
- superqode/commands/serve.py +172 -0
- superqode/commands/suggestions.py +127 -0
- superqode/commands/superqe.py +460 -0
- superqode/config/__init__.py +51 -0
- superqode/config/loader.py +812 -0
- superqode/config/schema.py +498 -0
- superqode/core/__init__.py +111 -0
- superqode/core/roles.py +281 -0
- superqode/danger.py +386 -0
- superqode/data/superqode-template.yaml +1522 -0
- superqode/design_system.py +1080 -0
- superqode/dialogs/__init__.py +6 -0
- superqode/dialogs/base.py +39 -0
- superqode/dialogs/model.py +130 -0
- superqode/dialogs/provider.py +870 -0
- superqode/diff_view.py +919 -0
- superqode/enterprise.py +21 -0
- superqode/evaluation/__init__.py +25 -0
- superqode/evaluation/adapters.py +93 -0
- superqode/evaluation/behaviors.py +89 -0
- superqode/evaluation/engine.py +209 -0
- superqode/evaluation/scenarios.py +96 -0
- superqode/execution/__init__.py +36 -0
- superqode/execution/linter.py +538 -0
- superqode/execution/modes.py +347 -0
- superqode/execution/resolver.py +283 -0
- superqode/execution/runner.py +642 -0
- superqode/file_explorer.py +811 -0
- superqode/file_viewer.py +471 -0
- superqode/flash.py +183 -0
- superqode/guidance/__init__.py +58 -0
- superqode/guidance/config.py +203 -0
- superqode/guidance/prompts.py +71 -0
- superqode/harness/__init__.py +54 -0
- superqode/harness/accelerator.py +291 -0
- superqode/harness/config.py +319 -0
- superqode/harness/validator.py +147 -0
- superqode/history.py +279 -0
- superqode/integrations/superopt_runner.py +124 -0
- superqode/logging/__init__.py +49 -0
- superqode/logging/adapters.py +219 -0
- superqode/logging/formatter.py +923 -0
- superqode/logging/integration.py +341 -0
- superqode/logging/sinks.py +170 -0
- superqode/logging/unified_log.py +417 -0
- superqode/lsp/__init__.py +26 -0
- superqode/lsp/client.py +544 -0
- superqode/main.py +1069 -0
- superqode/mcp/__init__.py +89 -0
- superqode/mcp/auth_storage.py +380 -0
- superqode/mcp/client.py +1236 -0
- superqode/mcp/config.py +319 -0
- superqode/mcp/integration.py +337 -0
- superqode/mcp/oauth.py +436 -0
- superqode/mcp/oauth_callback.py +385 -0
- superqode/mcp/types.py +290 -0
- superqode/memory/__init__.py +31 -0
- superqode/memory/feedback.py +342 -0
- superqode/memory/store.py +522 -0
- superqode/notifications.py +369 -0
- superqode/optimization/__init__.py +5 -0
- superqode/optimization/config.py +33 -0
- superqode/permissions/__init__.py +25 -0
- superqode/permissions/rules.py +488 -0
- superqode/plan.py +323 -0
- superqode/providers/__init__.py +33 -0
- superqode/providers/gateway/__init__.py +165 -0
- superqode/providers/gateway/base.py +228 -0
- superqode/providers/gateway/litellm_gateway.py +1170 -0
- superqode/providers/gateway/openresponses_gateway.py +436 -0
- superqode/providers/health.py +297 -0
- superqode/providers/huggingface/__init__.py +74 -0
- superqode/providers/huggingface/downloader.py +472 -0
- superqode/providers/huggingface/endpoints.py +442 -0
- superqode/providers/huggingface/hub.py +531 -0
- superqode/providers/huggingface/inference.py +394 -0
- superqode/providers/huggingface/transformers_runner.py +516 -0
- superqode/providers/local/__init__.py +100 -0
- superqode/providers/local/base.py +438 -0
- superqode/providers/local/discovery.py +418 -0
- superqode/providers/local/lmstudio.py +256 -0
- superqode/providers/local/mlx.py +457 -0
- superqode/providers/local/ollama.py +486 -0
- superqode/providers/local/sglang.py +268 -0
- superqode/providers/local/tgi.py +260 -0
- superqode/providers/local/tool_support.py +477 -0
- superqode/providers/local/vllm.py +258 -0
- superqode/providers/manager.py +1338 -0
- superqode/providers/models.py +1016 -0
- superqode/providers/models_dev.py +578 -0
- superqode/providers/openresponses/__init__.py +87 -0
- superqode/providers/openresponses/converters/__init__.py +17 -0
- superqode/providers/openresponses/converters/messages.py +343 -0
- superqode/providers/openresponses/converters/tools.py +268 -0
- superqode/providers/openresponses/schema/__init__.py +56 -0
- superqode/providers/openresponses/schema/models.py +585 -0
- superqode/providers/openresponses/streaming/__init__.py +5 -0
- superqode/providers/openresponses/streaming/parser.py +338 -0
- superqode/providers/openresponses/tools/__init__.py +21 -0
- superqode/providers/openresponses/tools/apply_patch.py +352 -0
- superqode/providers/openresponses/tools/code_interpreter.py +290 -0
- superqode/providers/openresponses/tools/file_search.py +333 -0
- superqode/providers/openresponses/tools/mcp_adapter.py +252 -0
- superqode/providers/registry.py +716 -0
- superqode/providers/usage.py +332 -0
- superqode/pure_mode.py +384 -0
- superqode/qr/__init__.py +23 -0
- superqode/qr/dashboard.py +781 -0
- superqode/qr/generator.py +1018 -0
- superqode/qr/templates.py +135 -0
- superqode/safety/__init__.py +41 -0
- superqode/safety/sandbox.py +413 -0
- superqode/safety/warnings.py +256 -0
- superqode/server/__init__.py +33 -0
- superqode/server/lsp_server.py +775 -0
- superqode/server/web.py +250 -0
- superqode/session/__init__.py +25 -0
- superqode/session/persistence.py +580 -0
- superqode/session/sharing.py +477 -0
- superqode/session.py +475 -0
- superqode/sidebar.py +2991 -0
- superqode/stream_view.py +648 -0
- superqode/styles/__init__.py +3 -0
- superqode/superqe/__init__.py +184 -0
- superqode/superqe/acp_runner.py +1064 -0
- superqode/superqe/constitution/__init__.py +62 -0
- superqode/superqe/constitution/evaluator.py +308 -0
- superqode/superqe/constitution/loader.py +432 -0
- superqode/superqe/constitution/schema.py +250 -0
- superqode/superqe/events.py +591 -0
- superqode/superqe/frameworks/__init__.py +65 -0
- superqode/superqe/frameworks/base.py +234 -0
- superqode/superqe/frameworks/e2e.py +263 -0
- superqode/superqe/frameworks/executor.py +237 -0
- superqode/superqe/frameworks/javascript.py +409 -0
- superqode/superqe/frameworks/python.py +373 -0
- superqode/superqe/frameworks/registry.py +92 -0
- superqode/superqe/mcp_tools/__init__.py +47 -0
- superqode/superqe/mcp_tools/core_tools.py +418 -0
- superqode/superqe/mcp_tools/registry.py +230 -0
- superqode/superqe/mcp_tools/testing_tools.py +167 -0
- superqode/superqe/noise.py +89 -0
- superqode/superqe/orchestrator.py +778 -0
- superqode/superqe/roles.py +609 -0
- superqode/superqe/session.py +713 -0
- superqode/superqe/skills/__init__.py +57 -0
- superqode/superqe/skills/base.py +106 -0
- superqode/superqe/skills/core_skills.py +899 -0
- superqode/superqe/skills/registry.py +90 -0
- superqode/superqe/verifier.py +101 -0
- superqode/superqe_cli.py +76 -0
- superqode/tool_call.py +358 -0
- superqode/tools/__init__.py +93 -0
- superqode/tools/agent_tools.py +496 -0
- superqode/tools/base.py +324 -0
- superqode/tools/batch_tool.py +133 -0
- superqode/tools/diagnostics.py +311 -0
- superqode/tools/edit_tools.py +653 -0
- superqode/tools/enhanced_base.py +515 -0
- superqode/tools/file_tools.py +269 -0
- superqode/tools/file_tracking.py +45 -0
- superqode/tools/lsp_tools.py +610 -0
- superqode/tools/network_tools.py +350 -0
- superqode/tools/permissions.py +400 -0
- superqode/tools/question_tool.py +324 -0
- superqode/tools/search_tools.py +598 -0
- superqode/tools/shell_tools.py +259 -0
- superqode/tools/todo_tools.py +121 -0
- superqode/tools/validation.py +80 -0
- superqode/tools/web_tools.py +639 -0
- superqode/tui.py +1152 -0
- superqode/tui_integration.py +875 -0
- superqode/tui_widgets/__init__.py +27 -0
- superqode/tui_widgets/widgets/__init__.py +18 -0
- superqode/tui_widgets/widgets/progress.py +185 -0
- superqode/tui_widgets/widgets/tool_display.py +188 -0
- superqode/undo_manager.py +574 -0
- superqode/utils/__init__.py +5 -0
- superqode/utils/error_handling.py +323 -0
- superqode/utils/fuzzy.py +257 -0
- superqode/widgets/__init__.py +477 -0
- superqode/widgets/agent_collab.py +390 -0
- superqode/widgets/agent_store.py +936 -0
- superqode/widgets/agent_switcher.py +395 -0
- superqode/widgets/animation_manager.py +284 -0
- superqode/widgets/code_context.py +356 -0
- superqode/widgets/command_palette.py +412 -0
- superqode/widgets/connection_status.py +537 -0
- superqode/widgets/conversation_history.py +470 -0
- superqode/widgets/diff_indicator.py +155 -0
- superqode/widgets/enhanced_status_bar.py +385 -0
- superqode/widgets/enhanced_toast.py +476 -0
- superqode/widgets/file_browser.py +809 -0
- superqode/widgets/file_reference.py +585 -0
- superqode/widgets/issue_timeline.py +340 -0
- superqode/widgets/leader_key.py +264 -0
- superqode/widgets/mode_switcher.py +445 -0
- superqode/widgets/model_picker.py +234 -0
- superqode/widgets/permission_preview.py +1205 -0
- superqode/widgets/prompt.py +358 -0
- superqode/widgets/provider_connect.py +725 -0
- superqode/widgets/pty_shell.py +587 -0
- superqode/widgets/qe_dashboard.py +321 -0
- superqode/widgets/resizable_sidebar.py +377 -0
- superqode/widgets/response_changes.py +218 -0
- superqode/widgets/response_display.py +528 -0
- superqode/widgets/rich_tool_display.py +613 -0
- superqode/widgets/sidebar_panels.py +1180 -0
- superqode/widgets/slash_complete.py +356 -0
- superqode/widgets/split_view.py +612 -0
- superqode/widgets/status_bar.py +273 -0
- superqode/widgets/superqode_display.py +786 -0
- superqode/widgets/thinking_display.py +815 -0
- superqode/widgets/throbber.py +87 -0
- superqode/widgets/toast.py +206 -0
- superqode/widgets/unified_output.py +1073 -0
- superqode/workspace/__init__.py +75 -0
- superqode/workspace/artifacts.py +472 -0
- superqode/workspace/coordinator.py +353 -0
- superqode/workspace/diff_tracker.py +429 -0
- superqode/workspace/git_guard.py +373 -0
- superqode/workspace/git_snapshot.py +526 -0
- superqode/workspace/manager.py +750 -0
- superqode/workspace/snapshot.py +357 -0
- superqode/workspace/watcher.py +535 -0
- superqode/workspace/worktree.py +440 -0
- superqode-0.1.5.dist-info/METADATA +204 -0
- superqode-0.1.5.dist-info/RECORD +288 -0
- superqode-0.1.5.dist-info/WHEEL +5 -0
- superqode-0.1.5.dist-info/entry_points.txt +3 -0
- superqode-0.1.5.dist-info/licenses/LICENSE +648 -0
- superqode-0.1.5.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,498 @@
|
|
|
1
|
+
"""Configuration schema definitions for SuperQode."""
|
|
2
|
+
|
|
3
|
+
from typing import Dict, List, Optional, Any, Literal
|
|
4
|
+
from dataclasses import dataclass, field
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class ProviderConfig:
|
|
10
|
+
"""Configuration for an AI provider."""
|
|
11
|
+
|
|
12
|
+
api_key_env: str = ""
|
|
13
|
+
description: str = ""
|
|
14
|
+
base_url: Optional[str] = None
|
|
15
|
+
recommended_models: List[str] = field(default_factory=list)
|
|
16
|
+
custom_models_allowed: bool = True
|
|
17
|
+
# New: Provider type for custom providers
|
|
18
|
+
type: Optional[str] = None # "openai-compatible" for custom endpoints
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@dataclass
|
|
22
|
+
class HandoffConfig:
|
|
23
|
+
"""Configuration for role handoff."""
|
|
24
|
+
|
|
25
|
+
to: str # Target role (e.g., "qa.reviewer")
|
|
26
|
+
when: str = "task_complete" # Trigger condition
|
|
27
|
+
include: List[str] = field(default_factory=lambda: ["summary", "files_modified"])
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
@dataclass
|
|
31
|
+
class CrossValidationConfig:
|
|
32
|
+
"""Configuration for cross-model validation."""
|
|
33
|
+
|
|
34
|
+
enabled: bool = True
|
|
35
|
+
exclude_same_model: bool = True
|
|
36
|
+
exclude_same_provider: bool = False
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@dataclass
|
|
40
|
+
class AgentConfigBlock:
|
|
41
|
+
"""Configuration for an ACP agent's internal LLM settings."""
|
|
42
|
+
|
|
43
|
+
provider: Optional[str] = None
|
|
44
|
+
model: Optional[str] = None
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
@dataclass
|
|
48
|
+
class RoleConfig:
|
|
49
|
+
"""Configuration for a team role.
|
|
50
|
+
|
|
51
|
+
Supports three execution modes:
|
|
52
|
+
- BYOK (mode="byok"): Direct LLM API calls via gateway
|
|
53
|
+
- ACP (mode="acp"): Full coding agent via Agent Client Protocol
|
|
54
|
+
- LOCAL (mode="local"): Local/self-hosted models (no API keys)
|
|
55
|
+
"""
|
|
56
|
+
|
|
57
|
+
description: str
|
|
58
|
+
|
|
59
|
+
# Execution mode: "byok", "acp", or "local"
|
|
60
|
+
mode: Literal["byok", "acp", "local"] = "byok"
|
|
61
|
+
|
|
62
|
+
# BYOK mode settings
|
|
63
|
+
provider: Optional[str] = None # LLM provider (e.g., "anthropic")
|
|
64
|
+
model: Optional[str] = None # Model ID (e.g., "claude-sonnet-4")
|
|
65
|
+
|
|
66
|
+
# ACP mode settings
|
|
67
|
+
agent: Optional[str] = None # Agent ID (e.g., "opencode")
|
|
68
|
+
agent_config: Optional[AgentConfigBlock] = None # Agent's internal LLM config
|
|
69
|
+
|
|
70
|
+
# Common settings
|
|
71
|
+
job_description: str = ""
|
|
72
|
+
enabled: bool = True
|
|
73
|
+
mcp_servers: List[str] = field(default_factory=list)
|
|
74
|
+
handoff: Optional[HandoffConfig] = None
|
|
75
|
+
cross_validation: Optional[CrossValidationConfig] = None
|
|
76
|
+
|
|
77
|
+
# Expert prompt configuration (for QE roles)
|
|
78
|
+
expert_prompt_enabled: bool = False # Default: OSS disables expert prompts
|
|
79
|
+
expert_prompt: Optional[str] = None # Optional: custom expert prompt override
|
|
80
|
+
|
|
81
|
+
# Legacy field (deprecated, use 'agent' instead)
|
|
82
|
+
coding_agent: str = "superqode"
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
@dataclass
|
|
86
|
+
class ModeConfig:
|
|
87
|
+
"""Configuration for a team mode (category of roles)."""
|
|
88
|
+
|
|
89
|
+
description: str
|
|
90
|
+
enabled: bool = True
|
|
91
|
+
roles: Dict[str, RoleConfig] = field(default_factory=dict)
|
|
92
|
+
# For QE mode: specify which roles to run in deep analysis
|
|
93
|
+
# If empty, uses all enabled QE roles
|
|
94
|
+
deep_analysis_roles: List[str] = field(default_factory=list)
|
|
95
|
+
# For direct modes (no sub-roles)
|
|
96
|
+
coding_agent: Optional[str] = None
|
|
97
|
+
provider: Optional[str] = None
|
|
98
|
+
model: Optional[str] = None
|
|
99
|
+
job_description: Optional[str] = None
|
|
100
|
+
mcp_servers: List[str] = field(default_factory=list)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@dataclass
|
|
104
|
+
class TeamConfig:
|
|
105
|
+
"""Configuration for the development team."""
|
|
106
|
+
|
|
107
|
+
modes: Dict[str, ModeConfig] = field(default_factory=dict)
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
@dataclass
|
|
111
|
+
class MCPServerConfigYAML:
|
|
112
|
+
"""MCP server configuration in YAML format."""
|
|
113
|
+
|
|
114
|
+
transport: Literal["stdio", "http", "sse"] = "stdio"
|
|
115
|
+
enabled: bool = True
|
|
116
|
+
auto_connect: bool = True
|
|
117
|
+
# Stdio transport
|
|
118
|
+
command: Optional[str] = None
|
|
119
|
+
args: List[str] = field(default_factory=list)
|
|
120
|
+
env: Dict[str, str] = field(default_factory=dict)
|
|
121
|
+
cwd: Optional[str] = None
|
|
122
|
+
# HTTP/SSE transport
|
|
123
|
+
url: Optional[str] = None
|
|
124
|
+
headers: Dict[str, str] = field(default_factory=dict)
|
|
125
|
+
timeout: float = 30.0
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
@dataclass
|
|
129
|
+
class BYOKConfig:
|
|
130
|
+
"""Configuration for BYOK persistent settings."""
|
|
131
|
+
|
|
132
|
+
last_provider: str = ""
|
|
133
|
+
last_model: str = ""
|
|
134
|
+
favorites: List[str] = field(default_factory=list) # "provider/model" format
|
|
135
|
+
history: List[str] = field(default_factory=list) # Recent connections
|
|
136
|
+
auto_connect: bool = False # Auto-connect on startup
|
|
137
|
+
show_pricing: bool = True # Show pricing in model list
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
@dataclass
|
|
141
|
+
class OpenResponsesConfig:
|
|
142
|
+
"""Configuration for Open Responses gateway.
|
|
143
|
+
|
|
144
|
+
Open Responses provides a unified API for local and custom AI providers
|
|
145
|
+
with support for reasoning/thinking, built-in tools, and streaming.
|
|
146
|
+
"""
|
|
147
|
+
|
|
148
|
+
# API endpoint
|
|
149
|
+
base_url: str = "http://localhost:11434"
|
|
150
|
+
api_key: Optional[str] = None
|
|
151
|
+
|
|
152
|
+
# Reasoning configuration
|
|
153
|
+
reasoning_effort: Literal["low", "medium", "high"] = "medium"
|
|
154
|
+
|
|
155
|
+
# Context handling
|
|
156
|
+
truncation: Literal["auto", "disabled"] = "auto"
|
|
157
|
+
|
|
158
|
+
# Request settings
|
|
159
|
+
timeout: float = 300.0
|
|
160
|
+
|
|
161
|
+
# Built-in tools
|
|
162
|
+
enable_apply_patch: bool = True
|
|
163
|
+
enable_code_interpreter: bool = True
|
|
164
|
+
enable_file_search: bool = False
|
|
165
|
+
enable_web_search: bool = False
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
@dataclass
|
|
169
|
+
class GatewayConfig:
|
|
170
|
+
"""Configuration for the LLM gateway (BYOK mode).
|
|
171
|
+
|
|
172
|
+
Supports multiple gateway types:
|
|
173
|
+
- litellm: LiteLLM for unified access to 100+ providers (default)
|
|
174
|
+
- openresponses: Open Responses specification for local/custom providers
|
|
175
|
+
"""
|
|
176
|
+
|
|
177
|
+
type: Literal["litellm", "openresponses"] = "litellm"
|
|
178
|
+
byok: BYOKConfig = field(default_factory=BYOKConfig)
|
|
179
|
+
openresponses: OpenResponsesConfig = field(default_factory=OpenResponsesConfig)
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
@dataclass
|
|
183
|
+
class CostTrackingConfig:
|
|
184
|
+
"""Configuration for cost tracking."""
|
|
185
|
+
|
|
186
|
+
enabled: bool = True
|
|
187
|
+
show_after_task: bool = True
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
@dataclass
|
|
191
|
+
class ErrorConfig:
|
|
192
|
+
"""Configuration for error handling."""
|
|
193
|
+
|
|
194
|
+
surface_rate_limits: bool = True
|
|
195
|
+
surface_auth_errors: bool = True
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
@dataclass
|
|
199
|
+
class OutputConfig:
|
|
200
|
+
"""Configuration for QE output."""
|
|
201
|
+
|
|
202
|
+
directory: str = ".superqode"
|
|
203
|
+
reports_format: Literal["markdown", "html", "json"] = "markdown"
|
|
204
|
+
keep_history: bool = True
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
@dataclass
|
|
208
|
+
class QEModeConfig:
|
|
209
|
+
"""Configuration for a QE execution mode."""
|
|
210
|
+
|
|
211
|
+
timeout: int = 60 # Timeout in seconds
|
|
212
|
+
depth: Literal["shallow", "full"] = "shallow"
|
|
213
|
+
generate_tests: bool = False
|
|
214
|
+
destructive: bool = False # Can run stress/load tests
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
@dataclass
|
|
218
|
+
class ExecutionRoleConfig:
|
|
219
|
+
"""Configuration for execution roles (smoke/sanity/regression).
|
|
220
|
+
|
|
221
|
+
These are hard-constraint runners - they execute existing tests only.
|
|
222
|
+
No discovery, no inference, no generation.
|
|
223
|
+
"""
|
|
224
|
+
|
|
225
|
+
test_pattern: str = "**/test_*.py"
|
|
226
|
+
fail_fast: bool = False
|
|
227
|
+
allow_generation: bool = False # Always False for execution roles
|
|
228
|
+
detect_flakes: bool = False
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
@dataclass
|
|
232
|
+
class TestGenerationConfig:
|
|
233
|
+
"""Configuration for test generation."""
|
|
234
|
+
|
|
235
|
+
output_dir: str = ".superqode/qe-artifacts/generated-tests"
|
|
236
|
+
frameworks: Dict[str, str] = field(
|
|
237
|
+
default_factory=lambda: {
|
|
238
|
+
"python": "pytest",
|
|
239
|
+
"javascript": "jest",
|
|
240
|
+
"go": "go test",
|
|
241
|
+
}
|
|
242
|
+
)
|
|
243
|
+
coverage_target: int = 80
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
@dataclass
|
|
247
|
+
class HarnessToolConfig:
|
|
248
|
+
"""Configuration for a harness validation tool."""
|
|
249
|
+
|
|
250
|
+
name: str = ""
|
|
251
|
+
enabled: bool = True
|
|
252
|
+
args: List[str] = field(default_factory=list)
|
|
253
|
+
timeout_seconds: int = 10
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
@dataclass
|
|
257
|
+
class HarnessLanguageConfig:
|
|
258
|
+
"""Configuration for a language's harness validators."""
|
|
259
|
+
|
|
260
|
+
enabled: bool = True
|
|
261
|
+
tools: List[str] = field(default_factory=list)
|
|
262
|
+
extensions: List[str] = field(default_factory=list)
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
@dataclass
|
|
266
|
+
class HarnessConfig:
|
|
267
|
+
"""Configuration for patch harness validation."""
|
|
268
|
+
|
|
269
|
+
enabled: bool = True
|
|
270
|
+
timeout_seconds: int = 30
|
|
271
|
+
fail_on_error: bool = False
|
|
272
|
+
|
|
273
|
+
# Structural validators (JSON, YAML, TOML)
|
|
274
|
+
structural_formats: List[str] = field(default_factory=lambda: ["json", "yaml", "toml"])
|
|
275
|
+
|
|
276
|
+
# Language validators
|
|
277
|
+
python_tools: List[str] = field(default_factory=lambda: ["ruff", "mypy"])
|
|
278
|
+
javascript_tools: List[str] = field(default_factory=lambda: ["eslint"])
|
|
279
|
+
typescript_tools: List[str] = field(default_factory=lambda: ["tsc", "eslint"])
|
|
280
|
+
go_tools: List[str] = field(default_factory=lambda: ["go vet", "golangci-lint"])
|
|
281
|
+
rust_tools: List[str] = field(default_factory=lambda: ["cargo check"])
|
|
282
|
+
shell_tools: List[str] = field(default_factory=lambda: ["shellcheck"])
|
|
283
|
+
|
|
284
|
+
|
|
285
|
+
@dataclass
|
|
286
|
+
class GuidanceModeConfig:
|
|
287
|
+
"""Configuration for QE guidance mode."""
|
|
288
|
+
|
|
289
|
+
timeout_seconds: int = 60
|
|
290
|
+
verification_first: bool = True
|
|
291
|
+
fail_fast: bool = False
|
|
292
|
+
exploration_allowed: bool = False
|
|
293
|
+
destructive_testing: bool = False
|
|
294
|
+
focus_areas: List[str] = field(default_factory=list)
|
|
295
|
+
forbidden_actions: List[str] = field(default_factory=list)
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
@dataclass
|
|
299
|
+
class GuidanceConfig:
|
|
300
|
+
"""Configuration for QE guidance prompts."""
|
|
301
|
+
|
|
302
|
+
enabled: bool = True
|
|
303
|
+
require_proof: bool = True # Must verify before claiming success
|
|
304
|
+
|
|
305
|
+
# Mode-specific settings
|
|
306
|
+
quick_scan: GuidanceModeConfig = field(
|
|
307
|
+
default_factory=lambda: GuidanceModeConfig(
|
|
308
|
+
timeout_seconds=60,
|
|
309
|
+
verification_first=True,
|
|
310
|
+
fail_fast=True,
|
|
311
|
+
focus_areas=["Run smoke tests", "Validate critical paths"],
|
|
312
|
+
)
|
|
313
|
+
)
|
|
314
|
+
|
|
315
|
+
deep_qe: GuidanceModeConfig = field(
|
|
316
|
+
default_factory=lambda: GuidanceModeConfig(
|
|
317
|
+
timeout_seconds=1800,
|
|
318
|
+
verification_first=True,
|
|
319
|
+
exploration_allowed=True,
|
|
320
|
+
destructive_testing=True,
|
|
321
|
+
focus_areas=["Comprehensive coverage", "Edge cases", "Security", "Performance"],
|
|
322
|
+
)
|
|
323
|
+
)
|
|
324
|
+
|
|
325
|
+
# Anti-patterns to detect
|
|
326
|
+
anti_patterns: List[str] = field(
|
|
327
|
+
default_factory=lambda: [
|
|
328
|
+
"skip_verification",
|
|
329
|
+
"unconditional_success",
|
|
330
|
+
"weaken_tests",
|
|
331
|
+
]
|
|
332
|
+
)
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
@dataclass
|
|
336
|
+
class NoiseConfig:
|
|
337
|
+
"""Configuration for noise filtering in QE findings."""
|
|
338
|
+
|
|
339
|
+
min_confidence: float = 0.7 # Filter findings below this threshold
|
|
340
|
+
deduplicate: bool = True # Remove similar findings
|
|
341
|
+
min_severity: Literal["low", "medium", "high", "critical"] = "low"
|
|
342
|
+
suppress_known_risks: bool = False # Suppress acknowledged risks
|
|
343
|
+
max_per_file: int = 10 # Max findings per file
|
|
344
|
+
max_total: int = 100 # Max total findings
|
|
345
|
+
|
|
346
|
+
|
|
347
|
+
@dataclass
|
|
348
|
+
class SuggestionConfig:
|
|
349
|
+
"""Configuration for the allow_suggestions workflow.
|
|
350
|
+
|
|
351
|
+
When enabled, SuperQode will:
|
|
352
|
+
1. Detect bugs during QE analysis
|
|
353
|
+
2. Fix bugs in an isolated workspace (Add-on)
|
|
354
|
+
3. Verify fixes by running tests
|
|
355
|
+
4. Prove improvement with before/after metrics
|
|
356
|
+
5. Report outcomes with evidence
|
|
357
|
+
6. Add findings to QIR with fix verification
|
|
358
|
+
7. REVERT all changes (original code restored)
|
|
359
|
+
8. Preserve patches for user to accept/reject
|
|
360
|
+
"""
|
|
361
|
+
|
|
362
|
+
enabled: bool = False # OFF by default - never modify without consent
|
|
363
|
+
verify_fixes: bool = True # Run tests to verify suggested fixes
|
|
364
|
+
require_proof: bool = True # Require before/after metrics
|
|
365
|
+
auto_generate_tests: bool = False # Generate regression tests for fixes
|
|
366
|
+
max_fix_attempts: int = 3 # Max attempts to fix an issue
|
|
367
|
+
revert_on_failure: bool = True # Revert if fix verification fails
|
|
368
|
+
|
|
369
|
+
|
|
370
|
+
@dataclass
|
|
371
|
+
class QEConfig:
|
|
372
|
+
"""QE-specific configuration."""
|
|
373
|
+
|
|
374
|
+
# Output settings
|
|
375
|
+
output: OutputConfig = field(default_factory=OutputConfig)
|
|
376
|
+
|
|
377
|
+
# Suggestion workflow (allow_suggestions mode)
|
|
378
|
+
# When enabled, agents can demonstrate fixes in an isolated workspace, then revert
|
|
379
|
+
allow_suggestions: bool = False # CRITICAL: OFF by default
|
|
380
|
+
suggestions: SuggestionConfig = field(default_factory=SuggestionConfig)
|
|
381
|
+
|
|
382
|
+
# Noise filtering
|
|
383
|
+
noise: NoiseConfig = field(default_factory=NoiseConfig)
|
|
384
|
+
|
|
385
|
+
# Execution modes
|
|
386
|
+
modes: Dict[str, QEModeConfig] = field(
|
|
387
|
+
default_factory=lambda: {
|
|
388
|
+
"quick_scan": QEModeConfig(
|
|
389
|
+
timeout=60, depth="shallow", generate_tests=False, destructive=False
|
|
390
|
+
),
|
|
391
|
+
"deep_qe": QEModeConfig(
|
|
392
|
+
timeout=1800, depth="full", generate_tests=True, destructive=True
|
|
393
|
+
),
|
|
394
|
+
}
|
|
395
|
+
)
|
|
396
|
+
|
|
397
|
+
# Execution roles (hard constraints)
|
|
398
|
+
execution_roles: Dict[str, ExecutionRoleConfig] = field(
|
|
399
|
+
default_factory=lambda: {
|
|
400
|
+
"smoke": ExecutionRoleConfig(test_pattern="**/test_smoke*.py", fail_fast=True),
|
|
401
|
+
"sanity": ExecutionRoleConfig(test_pattern="**/test_sanity*.py", fail_fast=False),
|
|
402
|
+
"regression": ExecutionRoleConfig(test_pattern="**/test_*.py", detect_flakes=True),
|
|
403
|
+
}
|
|
404
|
+
)
|
|
405
|
+
|
|
406
|
+
# Test generation settings
|
|
407
|
+
test_generation: TestGenerationConfig = field(default_factory=TestGenerationConfig)
|
|
408
|
+
|
|
409
|
+
# Patch Harness - validates patches before including in QIR
|
|
410
|
+
harness: HarnessConfig = field(default_factory=HarnessConfig)
|
|
411
|
+
|
|
412
|
+
# QE Guidance - system prompts for time-constrained QE
|
|
413
|
+
guidance: GuidanceConfig = field(default_factory=GuidanceConfig)
|
|
414
|
+
|
|
415
|
+
# SuperOpt optimization hook (command-based)
|
|
416
|
+
optimize: "OptimizeConfig" = field(default_factory=lambda: OptimizeConfig())
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
@dataclass
|
|
420
|
+
class OptimizeConfig:
|
|
421
|
+
"""Configuration for SuperOpt command-based optimization."""
|
|
422
|
+
|
|
423
|
+
enabled: bool = False
|
|
424
|
+
command: str = ""
|
|
425
|
+
timeout_seconds: int = 300
|
|
426
|
+
|
|
427
|
+
|
|
428
|
+
@dataclass
|
|
429
|
+
class SuperQodeConfig:
|
|
430
|
+
"""Top-level SuperQode configuration."""
|
|
431
|
+
|
|
432
|
+
version: str = "1.0"
|
|
433
|
+
team_name: str = "My Development Team"
|
|
434
|
+
description: str = "Multi-agent software development team"
|
|
435
|
+
|
|
436
|
+
# Gateway and error handling config
|
|
437
|
+
gateway: GatewayConfig = field(default_factory=GatewayConfig)
|
|
438
|
+
cost_tracking: CostTrackingConfig = field(default_factory=CostTrackingConfig)
|
|
439
|
+
errors: ErrorConfig = field(default_factory=ErrorConfig)
|
|
440
|
+
|
|
441
|
+
# QE-specific configuration
|
|
442
|
+
qe: QEConfig = field(default_factory=QEConfig)
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
@dataclass
|
|
446
|
+
class Config:
|
|
447
|
+
"""Complete SuperQode configuration."""
|
|
448
|
+
|
|
449
|
+
superqode: SuperQodeConfig = field(default_factory=SuperQodeConfig)
|
|
450
|
+
default: Optional[RoleConfig] = None
|
|
451
|
+
team: TeamConfig = field(default_factory=TeamConfig)
|
|
452
|
+
providers: Dict[str, ProviderConfig] = field(default_factory=dict)
|
|
453
|
+
agents: Dict[str, Dict[str, Any]] = field(default_factory=dict)
|
|
454
|
+
code_agents: List[str] = field(default_factory=list)
|
|
455
|
+
custom_models: Dict[str, Dict[str, Any]] = field(default_factory=dict)
|
|
456
|
+
model_aliases: Dict[str, str] = field(default_factory=dict)
|
|
457
|
+
mcp_servers: Dict[str, MCPServerConfigYAML] = field(default_factory=dict)
|
|
458
|
+
workflows: Dict[str, Any] = field(default_factory=dict) # Workflow definitions
|
|
459
|
+
legacy: Dict[str, Any] = field(default_factory=dict)
|
|
460
|
+
|
|
461
|
+
|
|
462
|
+
@dataclass
|
|
463
|
+
class ResolvedRole:
|
|
464
|
+
"""A resolved role with all configuration details."""
|
|
465
|
+
|
|
466
|
+
mode: str
|
|
467
|
+
role: Optional[str]
|
|
468
|
+
description: str
|
|
469
|
+
coding_agent: str
|
|
470
|
+
agent_type: Literal["acp", "superqode", "byok"]
|
|
471
|
+
provider: Optional[str] = None
|
|
472
|
+
model: Optional[str] = None
|
|
473
|
+
job_description: str = ""
|
|
474
|
+
enabled: bool = True
|
|
475
|
+
mcp_servers: List[str] = field(default_factory=list)
|
|
476
|
+
handoff: Optional[HandoffConfig] = None
|
|
477
|
+
cross_validation: Optional[CrossValidationConfig] = None
|
|
478
|
+
|
|
479
|
+
# New: Execution mode info
|
|
480
|
+
execution_mode: Literal["byok", "acp"] = "byok"
|
|
481
|
+
agent_id: Optional[str] = None # For ACP mode
|
|
482
|
+
agent_config: Optional[AgentConfigBlock] = None # For ACP mode
|
|
483
|
+
|
|
484
|
+
# Expert prompt configuration
|
|
485
|
+
expert_prompt_enabled: bool = False # Default: OSS disables expert prompts
|
|
486
|
+
expert_prompt: Optional[str] = None # Optional: custom expert prompt override
|
|
487
|
+
|
|
488
|
+
|
|
489
|
+
@dataclass
|
|
490
|
+
class ResolvedMode:
|
|
491
|
+
"""A resolved mode with all its roles."""
|
|
492
|
+
|
|
493
|
+
name: str
|
|
494
|
+
description: str
|
|
495
|
+
enabled: bool = True
|
|
496
|
+
roles: Dict[str, ResolvedRole] = field(default_factory=dict)
|
|
497
|
+
# For direct modes
|
|
498
|
+
direct_role: Optional[ResolvedRole] = None
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SuperQode Core Module - Unified types and interfaces.
|
|
3
|
+
|
|
4
|
+
This module provides a single import point for core SuperQode types:
|
|
5
|
+
- Configuration types (RoleConfig, TeamConfig, etc.)
|
|
6
|
+
- Execution modes (BYOK, ACP, Quick Scan, Deep QE)
|
|
7
|
+
- Role definitions (dev, qe, devops categories)
|
|
8
|
+
|
|
9
|
+
Usage:
|
|
10
|
+
from superqode.core import (
|
|
11
|
+
ExecutionMode,
|
|
12
|
+
QEMode,
|
|
13
|
+
RoleConfig,
|
|
14
|
+
TeamConfig,
|
|
15
|
+
)
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
# Execution modes
|
|
19
|
+
from ..execution.modes import (
|
|
20
|
+
ExecutionMode,
|
|
21
|
+
QEMode,
|
|
22
|
+
GatewayType,
|
|
23
|
+
BYOKConfig,
|
|
24
|
+
ACPConfig,
|
|
25
|
+
ExecutionConfig,
|
|
26
|
+
QuickScanConfig,
|
|
27
|
+
DeepQEConfig,
|
|
28
|
+
get_qe_mode_config,
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
# Configuration schema
|
|
32
|
+
from ..config.schema import (
|
|
33
|
+
ProviderConfig,
|
|
34
|
+
HandoffConfig,
|
|
35
|
+
CrossValidationConfig,
|
|
36
|
+
AgentConfigBlock,
|
|
37
|
+
RoleConfig,
|
|
38
|
+
ModeConfig,
|
|
39
|
+
TeamConfig,
|
|
40
|
+
MCPServerConfigYAML,
|
|
41
|
+
GatewayConfig,
|
|
42
|
+
CostTrackingConfig,
|
|
43
|
+
ErrorConfig,
|
|
44
|
+
OutputConfig,
|
|
45
|
+
QEModeConfig,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
# Configuration loader
|
|
49
|
+
from ..config.loader import (
|
|
50
|
+
load_config,
|
|
51
|
+
SuperQodeConfig,
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
# Unified roles
|
|
55
|
+
from .roles import (
|
|
56
|
+
Role,
|
|
57
|
+
RoleCategory,
|
|
58
|
+
QERoleType,
|
|
59
|
+
get_default_roles,
|
|
60
|
+
get_role,
|
|
61
|
+
list_all_roles,
|
|
62
|
+
list_roles_by_category,
|
|
63
|
+
list_qe_execution_roles,
|
|
64
|
+
list_qe_detection_roles,
|
|
65
|
+
DEFAULT_DEV_ROLES,
|
|
66
|
+
DEFAULT_QE_ROLES,
|
|
67
|
+
DEFAULT_DEVOPS_ROLES,
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
__all__ = [
|
|
71
|
+
# Execution modes
|
|
72
|
+
"ExecutionMode",
|
|
73
|
+
"QEMode",
|
|
74
|
+
"GatewayType",
|
|
75
|
+
"BYOKConfig",
|
|
76
|
+
"ACPConfig",
|
|
77
|
+
"ExecutionConfig",
|
|
78
|
+
"QuickScanConfig",
|
|
79
|
+
"DeepQEConfig",
|
|
80
|
+
"get_qe_mode_config",
|
|
81
|
+
# Configuration schema
|
|
82
|
+
"ProviderConfig",
|
|
83
|
+
"HandoffConfig",
|
|
84
|
+
"CrossValidationConfig",
|
|
85
|
+
"AgentConfigBlock",
|
|
86
|
+
"RoleConfig",
|
|
87
|
+
"ModeConfig",
|
|
88
|
+
"TeamConfig",
|
|
89
|
+
"MCPServerConfigYAML",
|
|
90
|
+
"GatewayConfig",
|
|
91
|
+
"CostTrackingConfig",
|
|
92
|
+
"ErrorConfig",
|
|
93
|
+
"OutputConfig",
|
|
94
|
+
"QEModeConfig",
|
|
95
|
+
# Configuration loader
|
|
96
|
+
"load_config",
|
|
97
|
+
"SuperQodeConfig",
|
|
98
|
+
# Unified roles
|
|
99
|
+
"Role",
|
|
100
|
+
"RoleCategory",
|
|
101
|
+
"QERoleType",
|
|
102
|
+
"get_default_roles",
|
|
103
|
+
"get_role",
|
|
104
|
+
"list_all_roles",
|
|
105
|
+
"list_roles_by_category",
|
|
106
|
+
"list_qe_execution_roles",
|
|
107
|
+
"list_qe_detection_roles",
|
|
108
|
+
"DEFAULT_DEV_ROLES",
|
|
109
|
+
"DEFAULT_QE_ROLES",
|
|
110
|
+
"DEFAULT_DEVOPS_ROLES",
|
|
111
|
+
]
|