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,39 @@
|
|
|
1
|
+
"""Base dialog class for interactive dialogs."""
|
|
2
|
+
|
|
3
|
+
from abc import ABC, abstractmethod
|
|
4
|
+
from typing import Any, Optional, List
|
|
5
|
+
from prompt_toolkit import Application
|
|
6
|
+
from prompt_toolkit.layout import Layout, HSplit, VSplit
|
|
7
|
+
from prompt_toolkit.widgets import TextArea, Label
|
|
8
|
+
from prompt_toolkit.key_binding import KeyBindings
|
|
9
|
+
from prompt_toolkit.styles import Style
|
|
10
|
+
from rich.console import Console
|
|
11
|
+
|
|
12
|
+
_console = Console()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class Dialog(ABC):
|
|
16
|
+
"""Base class for interactive dialogs."""
|
|
17
|
+
|
|
18
|
+
def __init__(self, title: str):
|
|
19
|
+
self.title = title
|
|
20
|
+
self.result: Optional[Any] = None
|
|
21
|
+
self.cancelled = False
|
|
22
|
+
|
|
23
|
+
@abstractmethod
|
|
24
|
+
def show(self) -> Optional[Any]:
|
|
25
|
+
"""Show the dialog and return the result."""
|
|
26
|
+
pass
|
|
27
|
+
|
|
28
|
+
def _create_style(self) -> Style:
|
|
29
|
+
"""Create a style for the dialog."""
|
|
30
|
+
return Style.from_dict(
|
|
31
|
+
{
|
|
32
|
+
"dialog": "bg:#1e1e1e",
|
|
33
|
+
"dialog.frame": "bg:#2d2d2d #ffffff",
|
|
34
|
+
"dialog.body": "bg:#1e1e1e #ffffff",
|
|
35
|
+
"dialog.title": "bg:#2d2d2d #ffffff bold",
|
|
36
|
+
"selected": "bg:#0078d4 #ffffff",
|
|
37
|
+
"unselected": "bg:#1e1e1e #ffffff",
|
|
38
|
+
}
|
|
39
|
+
)
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"""Model selection dialog."""
|
|
2
|
+
|
|
3
|
+
from typing import Optional, List
|
|
4
|
+
from prompt_toolkit import prompt
|
|
5
|
+
from prompt_toolkit.completion import Completer, Completion
|
|
6
|
+
from rich.console import Console
|
|
7
|
+
from rich.panel import Panel
|
|
8
|
+
from rich.table import Table
|
|
9
|
+
from rich.text import Text
|
|
10
|
+
|
|
11
|
+
from superqode.providers import ProviderManager, ModelInfo
|
|
12
|
+
|
|
13
|
+
_console = Console()
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ModelCompleter(Completer):
|
|
17
|
+
"""Completer for model selection."""
|
|
18
|
+
|
|
19
|
+
def __init__(self, models: List[ModelInfo]):
|
|
20
|
+
self.models = models
|
|
21
|
+
|
|
22
|
+
def get_completions(self, document, complete_event):
|
|
23
|
+
"""Get completions for model names."""
|
|
24
|
+
text = document.text_before_cursor.lower()
|
|
25
|
+
for model in self.models:
|
|
26
|
+
if text in model.name.lower() or text in model.id.lower():
|
|
27
|
+
yield Completion(
|
|
28
|
+
model.id,
|
|
29
|
+
start_position=-len(text),
|
|
30
|
+
display=f"{model.name} ({model.id})",
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class ModelDialog:
|
|
35
|
+
"""Dialog for selecting a model."""
|
|
36
|
+
|
|
37
|
+
def __init__(self, provider_id: str, manager: Optional[ProviderManager] = None):
|
|
38
|
+
self.provider_id = provider_id
|
|
39
|
+
self.manager = manager or ProviderManager()
|
|
40
|
+
self.selected_model: Optional[ModelInfo] = None
|
|
41
|
+
|
|
42
|
+
def show(self) -> Optional[str]:
|
|
43
|
+
"""
|
|
44
|
+
Show the model selection dialog.
|
|
45
|
+
|
|
46
|
+
Returns:
|
|
47
|
+
Selected model ID, or None if cancelled
|
|
48
|
+
"""
|
|
49
|
+
models = self.manager.get_models(self.provider_id, refresh=True)
|
|
50
|
+
|
|
51
|
+
if not models:
|
|
52
|
+
_console.print(f"[red]No models available for provider '{self.provider_id}'.[/red]")
|
|
53
|
+
_console.print("[dim]Make sure the provider is configured correctly.[/dim]")
|
|
54
|
+
return None
|
|
55
|
+
|
|
56
|
+
# Get provider info for display
|
|
57
|
+
providers = self.manager.list_providers()
|
|
58
|
+
provider = next((p for p in providers if p.id == self.provider_id), None)
|
|
59
|
+
provider_name = provider.name if provider else self.provider_id
|
|
60
|
+
|
|
61
|
+
# Display model selection
|
|
62
|
+
_console.print()
|
|
63
|
+
_console.print(
|
|
64
|
+
Panel.fit(
|
|
65
|
+
f"[bold cyan]Select Model ({provider_name})[/bold cyan]", border_style="bright_cyan"
|
|
66
|
+
)
|
|
67
|
+
)
|
|
68
|
+
_console.print()
|
|
69
|
+
|
|
70
|
+
# Create table
|
|
71
|
+
table = Table(show_header=True, header_style="bold magenta", box=None)
|
|
72
|
+
table.add_column("#", style="dim", width=3)
|
|
73
|
+
table.add_column("Model", style="cyan", width=30)
|
|
74
|
+
table.add_column("Description", style="dim")
|
|
75
|
+
|
|
76
|
+
for idx, model in enumerate(models, 1):
|
|
77
|
+
desc = model.description or f"Model ID: {model.id}"
|
|
78
|
+
table.add_row(
|
|
79
|
+
str(idx),
|
|
80
|
+
model.name,
|
|
81
|
+
desc,
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
_console.print(table)
|
|
85
|
+
_console.print()
|
|
86
|
+
|
|
87
|
+
# Get user selection
|
|
88
|
+
completer = ModelCompleter(models)
|
|
89
|
+
|
|
90
|
+
while True:
|
|
91
|
+
try:
|
|
92
|
+
choice = prompt(
|
|
93
|
+
"Select model (number or name, 'q' to cancel): ",
|
|
94
|
+
completer=completer,
|
|
95
|
+
).strip()
|
|
96
|
+
|
|
97
|
+
if choice.lower() in ("q", "quit", "exit", ""):
|
|
98
|
+
return None
|
|
99
|
+
|
|
100
|
+
# Try number selection
|
|
101
|
+
try:
|
|
102
|
+
idx = int(choice) - 1
|
|
103
|
+
if 0 <= idx < len(models):
|
|
104
|
+
selected = models[idx]
|
|
105
|
+
break
|
|
106
|
+
except ValueError:
|
|
107
|
+
pass
|
|
108
|
+
|
|
109
|
+
# Try name/ID selection
|
|
110
|
+
choice_lower = choice.lower()
|
|
111
|
+
for model in models:
|
|
112
|
+
if (
|
|
113
|
+
choice_lower == model.id.lower()
|
|
114
|
+
or choice_lower in model.name.lower()
|
|
115
|
+
or choice_lower in model.id.lower()
|
|
116
|
+
):
|
|
117
|
+
selected = model
|
|
118
|
+
break
|
|
119
|
+
else:
|
|
120
|
+
_console.print(f"[red]Invalid selection: {choice}[/red]")
|
|
121
|
+
continue
|
|
122
|
+
|
|
123
|
+
break
|
|
124
|
+
|
|
125
|
+
except KeyboardInterrupt:
|
|
126
|
+
return None
|
|
127
|
+
|
|
128
|
+
self.selected_model = selected
|
|
129
|
+
_console.print(f"[green]✓ Selected: {selected.name} ({selected.id})[/green]")
|
|
130
|
+
return selected.id
|