code-puppy 0.0.214__py3-none-any.whl → 0.0.366__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.
- code_puppy/__init__.py +7 -1
- code_puppy/agents/__init__.py +2 -0
- code_puppy/agents/agent_c_reviewer.py +59 -6
- code_puppy/agents/agent_code_puppy.py +7 -1
- code_puppy/agents/agent_code_reviewer.py +12 -2
- code_puppy/agents/agent_cpp_reviewer.py +73 -6
- code_puppy/agents/agent_creator_agent.py +45 -4
- code_puppy/agents/agent_golang_reviewer.py +92 -3
- code_puppy/agents/agent_javascript_reviewer.py +101 -8
- code_puppy/agents/agent_manager.py +81 -4
- code_puppy/agents/agent_pack_leader.py +383 -0
- code_puppy/agents/agent_planning.py +163 -0
- code_puppy/agents/agent_python_programmer.py +165 -0
- code_puppy/agents/agent_python_reviewer.py +28 -6
- code_puppy/agents/agent_qa_expert.py +98 -6
- code_puppy/agents/agent_qa_kitten.py +12 -7
- code_puppy/agents/agent_security_auditor.py +113 -3
- code_puppy/agents/agent_terminal_qa.py +323 -0
- code_puppy/agents/agent_typescript_reviewer.py +106 -7
- code_puppy/agents/base_agent.py +802 -176
- code_puppy/agents/event_stream_handler.py +350 -0
- code_puppy/agents/pack/__init__.py +34 -0
- code_puppy/agents/pack/bloodhound.py +304 -0
- code_puppy/agents/pack/husky.py +321 -0
- code_puppy/agents/pack/retriever.py +393 -0
- code_puppy/agents/pack/shepherd.py +348 -0
- code_puppy/agents/pack/terrier.py +287 -0
- code_puppy/agents/pack/watchdog.py +367 -0
- code_puppy/agents/prompt_reviewer.py +145 -0
- code_puppy/agents/subagent_stream_handler.py +276 -0
- code_puppy/api/__init__.py +13 -0
- code_puppy/api/app.py +169 -0
- code_puppy/api/main.py +21 -0
- code_puppy/api/pty_manager.py +446 -0
- code_puppy/api/routers/__init__.py +12 -0
- code_puppy/api/routers/agents.py +36 -0
- code_puppy/api/routers/commands.py +217 -0
- code_puppy/api/routers/config.py +74 -0
- code_puppy/api/routers/sessions.py +232 -0
- code_puppy/api/templates/terminal.html +361 -0
- code_puppy/api/websocket.py +154 -0
- code_puppy/callbacks.py +142 -4
- code_puppy/chatgpt_codex_client.py +283 -0
- code_puppy/claude_cache_client.py +586 -0
- code_puppy/cli_runner.py +916 -0
- code_puppy/command_line/add_model_menu.py +1079 -0
- code_puppy/command_line/agent_menu.py +395 -0
- code_puppy/command_line/attachments.py +10 -5
- code_puppy/command_line/autosave_menu.py +605 -0
- code_puppy/command_line/clipboard.py +527 -0
- code_puppy/command_line/colors_menu.py +520 -0
- code_puppy/command_line/command_handler.py +176 -738
- code_puppy/command_line/command_registry.py +150 -0
- code_puppy/command_line/config_commands.py +715 -0
- code_puppy/command_line/core_commands.py +792 -0
- code_puppy/command_line/diff_menu.py +863 -0
- code_puppy/command_line/load_context_completion.py +15 -22
- code_puppy/command_line/mcp/base.py +0 -3
- code_puppy/command_line/mcp/catalog_server_installer.py +175 -0
- code_puppy/command_line/mcp/custom_server_form.py +688 -0
- code_puppy/command_line/mcp/custom_server_installer.py +195 -0
- code_puppy/command_line/mcp/edit_command.py +148 -0
- code_puppy/command_line/mcp/handler.py +9 -4
- code_puppy/command_line/mcp/help_command.py +6 -5
- code_puppy/command_line/mcp/install_command.py +15 -26
- code_puppy/command_line/mcp/install_menu.py +685 -0
- code_puppy/command_line/mcp/list_command.py +2 -2
- code_puppy/command_line/mcp/logs_command.py +174 -65
- code_puppy/command_line/mcp/remove_command.py +2 -2
- code_puppy/command_line/mcp/restart_command.py +12 -4
- code_puppy/command_line/mcp/search_command.py +16 -10
- code_puppy/command_line/mcp/start_all_command.py +18 -6
- code_puppy/command_line/mcp/start_command.py +47 -25
- code_puppy/command_line/mcp/status_command.py +4 -5
- code_puppy/command_line/mcp/stop_all_command.py +7 -1
- code_puppy/command_line/mcp/stop_command.py +8 -4
- code_puppy/command_line/mcp/test_command.py +2 -2
- code_puppy/command_line/mcp/wizard_utils.py +20 -16
- code_puppy/command_line/mcp_completion.py +174 -0
- code_puppy/command_line/model_picker_completion.py +75 -25
- code_puppy/command_line/model_settings_menu.py +884 -0
- code_puppy/command_line/motd.py +14 -8
- code_puppy/command_line/onboarding_slides.py +179 -0
- code_puppy/command_line/onboarding_wizard.py +340 -0
- code_puppy/command_line/pin_command_completion.py +329 -0
- code_puppy/command_line/prompt_toolkit_completion.py +463 -63
- code_puppy/command_line/session_commands.py +296 -0
- code_puppy/command_line/utils.py +54 -0
- code_puppy/config.py +898 -112
- code_puppy/error_logging.py +118 -0
- code_puppy/gemini_code_assist.py +385 -0
- code_puppy/gemini_model.py +602 -0
- code_puppy/http_utils.py +210 -148
- code_puppy/keymap.py +128 -0
- code_puppy/main.py +5 -698
- code_puppy/mcp_/__init__.py +17 -0
- code_puppy/mcp_/async_lifecycle.py +35 -4
- code_puppy/mcp_/blocking_startup.py +70 -43
- code_puppy/mcp_/captured_stdio_server.py +2 -2
- code_puppy/mcp_/config_wizard.py +4 -4
- code_puppy/mcp_/dashboard.py +15 -6
- code_puppy/mcp_/managed_server.py +65 -38
- code_puppy/mcp_/manager.py +146 -52
- code_puppy/mcp_/mcp_logs.py +224 -0
- code_puppy/mcp_/registry.py +6 -6
- code_puppy/mcp_/server_registry_catalog.py +24 -5
- code_puppy/messaging/__init__.py +199 -2
- code_puppy/messaging/bus.py +610 -0
- code_puppy/messaging/commands.py +167 -0
- code_puppy/messaging/markdown_patches.py +57 -0
- code_puppy/messaging/message_queue.py +17 -48
- code_puppy/messaging/messages.py +500 -0
- code_puppy/messaging/queue_console.py +1 -24
- code_puppy/messaging/renderers.py +43 -146
- code_puppy/messaging/rich_renderer.py +1027 -0
- code_puppy/messaging/spinner/__init__.py +21 -5
- code_puppy/messaging/spinner/console_spinner.py +86 -51
- code_puppy/messaging/subagent_console.py +461 -0
- code_puppy/model_factory.py +634 -83
- code_puppy/model_utils.py +167 -0
- code_puppy/models.json +66 -68
- code_puppy/models_dev_api.json +1 -0
- code_puppy/models_dev_parser.py +592 -0
- code_puppy/plugins/__init__.py +164 -10
- code_puppy/plugins/antigravity_oauth/__init__.py +10 -0
- code_puppy/plugins/antigravity_oauth/accounts.py +406 -0
- code_puppy/plugins/antigravity_oauth/antigravity_model.py +704 -0
- code_puppy/plugins/antigravity_oauth/config.py +42 -0
- code_puppy/plugins/antigravity_oauth/constants.py +136 -0
- code_puppy/plugins/antigravity_oauth/oauth.py +478 -0
- code_puppy/plugins/antigravity_oauth/register_callbacks.py +406 -0
- code_puppy/plugins/antigravity_oauth/storage.py +271 -0
- code_puppy/plugins/antigravity_oauth/test_plugin.py +319 -0
- code_puppy/plugins/antigravity_oauth/token.py +167 -0
- code_puppy/plugins/antigravity_oauth/transport.py +767 -0
- code_puppy/plugins/antigravity_oauth/utils.py +169 -0
- code_puppy/plugins/chatgpt_oauth/__init__.py +8 -0
- code_puppy/plugins/chatgpt_oauth/config.py +52 -0
- code_puppy/plugins/chatgpt_oauth/oauth_flow.py +328 -0
- code_puppy/plugins/chatgpt_oauth/register_callbacks.py +94 -0
- code_puppy/plugins/chatgpt_oauth/test_plugin.py +293 -0
- code_puppy/plugins/chatgpt_oauth/utils.py +489 -0
- code_puppy/plugins/claude_code_oauth/README.md +167 -0
- code_puppy/plugins/claude_code_oauth/SETUP.md +93 -0
- code_puppy/plugins/claude_code_oauth/__init__.py +6 -0
- code_puppy/plugins/claude_code_oauth/config.py +50 -0
- code_puppy/plugins/claude_code_oauth/register_callbacks.py +308 -0
- code_puppy/plugins/claude_code_oauth/test_plugin.py +283 -0
- code_puppy/plugins/claude_code_oauth/utils.py +518 -0
- code_puppy/plugins/customizable_commands/__init__.py +0 -0
- code_puppy/plugins/customizable_commands/register_callbacks.py +169 -0
- code_puppy/plugins/example_custom_command/README.md +280 -0
- code_puppy/plugins/example_custom_command/register_callbacks.py +2 -2
- code_puppy/plugins/file_permission_handler/__init__.py +4 -0
- code_puppy/plugins/file_permission_handler/register_callbacks.py +523 -0
- code_puppy/plugins/frontend_emitter/__init__.py +25 -0
- code_puppy/plugins/frontend_emitter/emitter.py +121 -0
- code_puppy/plugins/frontend_emitter/register_callbacks.py +261 -0
- code_puppy/plugins/oauth_puppy_html.py +228 -0
- code_puppy/plugins/shell_safety/__init__.py +6 -0
- code_puppy/plugins/shell_safety/agent_shell_safety.py +69 -0
- code_puppy/plugins/shell_safety/command_cache.py +156 -0
- code_puppy/plugins/shell_safety/register_callbacks.py +202 -0
- code_puppy/prompts/antigravity_system_prompt.md +1 -0
- code_puppy/prompts/codex_system_prompt.md +310 -0
- code_puppy/pydantic_patches.py +131 -0
- code_puppy/reopenable_async_client.py +8 -8
- code_puppy/round_robin_model.py +9 -12
- code_puppy/session_storage.py +2 -1
- code_puppy/status_display.py +21 -4
- code_puppy/summarization_agent.py +41 -13
- code_puppy/terminal_utils.py +418 -0
- code_puppy/tools/__init__.py +37 -1
- code_puppy/tools/agent_tools.py +536 -52
- code_puppy/tools/browser/__init__.py +37 -0
- code_puppy/tools/browser/browser_control.py +19 -23
- code_puppy/tools/browser/browser_interactions.py +41 -48
- code_puppy/tools/browser/browser_locators.py +36 -38
- code_puppy/tools/browser/browser_manager.py +316 -0
- code_puppy/tools/browser/browser_navigation.py +16 -16
- code_puppy/tools/browser/browser_screenshot.py +79 -143
- code_puppy/tools/browser/browser_scripts.py +32 -42
- code_puppy/tools/browser/browser_workflows.py +44 -27
- code_puppy/tools/browser/chromium_terminal_manager.py +259 -0
- code_puppy/tools/browser/terminal_command_tools.py +521 -0
- code_puppy/tools/browser/terminal_screenshot_tools.py +556 -0
- code_puppy/tools/browser/terminal_tools.py +525 -0
- code_puppy/tools/command_runner.py +930 -147
- code_puppy/tools/common.py +1113 -5
- code_puppy/tools/display.py +84 -0
- code_puppy/tools/file_modifications.py +288 -89
- code_puppy/tools/file_operations.py +226 -154
- code_puppy/tools/subagent_context.py +158 -0
- code_puppy/uvx_detection.py +242 -0
- code_puppy/version_checker.py +30 -11
- code_puppy-0.0.366.data/data/code_puppy/models.json +110 -0
- code_puppy-0.0.366.data/data/code_puppy/models_dev_api.json +1 -0
- {code_puppy-0.0.214.dist-info → code_puppy-0.0.366.dist-info}/METADATA +149 -75
- code_puppy-0.0.366.dist-info/RECORD +217 -0
- {code_puppy-0.0.214.dist-info → code_puppy-0.0.366.dist-info}/WHEEL +1 -1
- code_puppy/command_line/mcp/add_command.py +0 -183
- code_puppy/messaging/spinner/textual_spinner.py +0 -106
- code_puppy/tools/browser/camoufox_manager.py +0 -216
- code_puppy/tools/browser/vqa_agent.py +0 -70
- code_puppy/tui/__init__.py +0 -10
- code_puppy/tui/app.py +0 -1105
- code_puppy/tui/components/__init__.py +0 -21
- code_puppy/tui/components/chat_view.py +0 -551
- code_puppy/tui/components/command_history_modal.py +0 -218
- code_puppy/tui/components/copy_button.py +0 -139
- code_puppy/tui/components/custom_widgets.py +0 -63
- code_puppy/tui/components/human_input_modal.py +0 -175
- code_puppy/tui/components/input_area.py +0 -167
- code_puppy/tui/components/sidebar.py +0 -309
- code_puppy/tui/components/status_bar.py +0 -185
- code_puppy/tui/messages.py +0 -27
- code_puppy/tui/models/__init__.py +0 -8
- code_puppy/tui/models/chat_message.py +0 -25
- code_puppy/tui/models/command_history.py +0 -89
- code_puppy/tui/models/enums.py +0 -24
- code_puppy/tui/screens/__init__.py +0 -17
- code_puppy/tui/screens/autosave_picker.py +0 -175
- code_puppy/tui/screens/help.py +0 -130
- code_puppy/tui/screens/mcp_install_wizard.py +0 -803
- code_puppy/tui/screens/settings.py +0 -306
- code_puppy/tui/screens/tools.py +0 -74
- code_puppy/tui_state.py +0 -55
- code_puppy-0.0.214.data/data/code_puppy/models.json +0 -112
- code_puppy-0.0.214.dist-info/RECORD +0 -131
- {code_puppy-0.0.214.dist-info → code_puppy-0.0.366.dist-info}/entry_points.txt +0 -0
- {code_puppy-0.0.214.dist-info → code_puppy-0.0.366.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Settings modal screen.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
from textual import on
|
|
6
|
-
from textual.app import ComposeResult
|
|
7
|
-
from textual.containers import Container, VerticalScroll
|
|
8
|
-
from textual.screen import ModalScreen
|
|
9
|
-
from textual.widgets import Button, Input, Select, Static
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class SettingsScreen(ModalScreen):
|
|
13
|
-
"""Settings configuration screen."""
|
|
14
|
-
|
|
15
|
-
DEFAULT_CSS = """
|
|
16
|
-
SettingsScreen {
|
|
17
|
-
align: center middle;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
#settings-dialog {
|
|
21
|
-
width: 80;
|
|
22
|
-
height: 33;
|
|
23
|
-
border: thick $primary;
|
|
24
|
-
background: $surface;
|
|
25
|
-
padding: 1;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
#settings-form {
|
|
29
|
-
height: 1fr;
|
|
30
|
-
overflow: auto;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.setting-row {
|
|
34
|
-
layout: horizontal;
|
|
35
|
-
height: 3;
|
|
36
|
-
margin: 0 0 1 0;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
.setting-label {
|
|
40
|
-
width: 20;
|
|
41
|
-
text-align: right;
|
|
42
|
-
padding: 1 1 0 0;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
.setting-input {
|
|
46
|
-
width: 1fr;
|
|
47
|
-
margin: 0 0 0 1;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/* Additional styling for static input values */
|
|
51
|
-
#yolo-static {
|
|
52
|
-
padding: 1 0 0 0; /* Align text vertically with other inputs */
|
|
53
|
-
color: $success; /* Use success color to emphasize it's enabled */
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
#settings-buttons {
|
|
57
|
-
layout: horizontal;
|
|
58
|
-
height: 3;
|
|
59
|
-
align: center middle;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
#save-button, #cancel-button {
|
|
63
|
-
margin: 0 1;
|
|
64
|
-
}
|
|
65
|
-
"""
|
|
66
|
-
|
|
67
|
-
def __init__(self, **kwargs):
|
|
68
|
-
super().__init__(**kwargs)
|
|
69
|
-
self.settings_data = {}
|
|
70
|
-
|
|
71
|
-
def compose(self) -> ComposeResult:
|
|
72
|
-
with Container(id="settings-dialog"):
|
|
73
|
-
yield Static("⚙️ Settings Configuration", id="settings-title")
|
|
74
|
-
# Make the form scrollable so long content fits
|
|
75
|
-
with VerticalScroll(id="settings-form"):
|
|
76
|
-
with Container(classes="setting-row"):
|
|
77
|
-
yield Static("Puppy Name:", classes="setting-label")
|
|
78
|
-
yield Input(id="puppy-name-input", classes="setting-input")
|
|
79
|
-
|
|
80
|
-
with Container(classes="setting-row"):
|
|
81
|
-
yield Static("Owner Name:", classes="setting-label")
|
|
82
|
-
yield Input(id="owner-name-input", classes="setting-input")
|
|
83
|
-
|
|
84
|
-
with Container(classes="setting-row"):
|
|
85
|
-
yield Static("Model:", classes="setting-label")
|
|
86
|
-
yield Select([], id="model-select", classes="setting-input")
|
|
87
|
-
|
|
88
|
-
with Container(classes="setting-row"):
|
|
89
|
-
yield Static("YOLO Mode:", classes="setting-label")
|
|
90
|
-
yield Static(
|
|
91
|
-
"✅ Enabled (always on in TUI)",
|
|
92
|
-
id="yolo-static",
|
|
93
|
-
classes="setting-input",
|
|
94
|
-
)
|
|
95
|
-
|
|
96
|
-
with Container(classes="setting-row"):
|
|
97
|
-
yield Static("Protected Tokens:", classes="setting-label")
|
|
98
|
-
yield Input(
|
|
99
|
-
id="protected-tokens-input",
|
|
100
|
-
classes="setting-input",
|
|
101
|
-
placeholder="e.g., 50000",
|
|
102
|
-
)
|
|
103
|
-
|
|
104
|
-
with Container(classes="setting-row"):
|
|
105
|
-
yield Static("Compaction Strategy:", classes="setting-label")
|
|
106
|
-
yield Select(
|
|
107
|
-
[
|
|
108
|
-
("Summarization", "summarization"),
|
|
109
|
-
("Truncation", "truncation"),
|
|
110
|
-
],
|
|
111
|
-
id="compaction-strategy-select",
|
|
112
|
-
classes="setting-input",
|
|
113
|
-
)
|
|
114
|
-
|
|
115
|
-
with Container(classes="setting-row"):
|
|
116
|
-
yield Static("Compaction Threshold:", classes="setting-label")
|
|
117
|
-
yield Input(
|
|
118
|
-
id="compaction-threshold-input",
|
|
119
|
-
classes="setting-input",
|
|
120
|
-
placeholder="e.g., 0.85",
|
|
121
|
-
)
|
|
122
|
-
|
|
123
|
-
with Container(id="settings-buttons"):
|
|
124
|
-
yield Button("Save", id="save-button", variant="primary")
|
|
125
|
-
yield Button("Cancel", id="cancel-button")
|
|
126
|
-
|
|
127
|
-
def on_mount(self) -> None:
|
|
128
|
-
"""Load current settings when the screen mounts."""
|
|
129
|
-
from code_puppy.config import (
|
|
130
|
-
get_compaction_strategy,
|
|
131
|
-
get_compaction_threshold,
|
|
132
|
-
get_global_model_name,
|
|
133
|
-
get_owner_name,
|
|
134
|
-
get_protected_token_count,
|
|
135
|
-
get_puppy_name,
|
|
136
|
-
)
|
|
137
|
-
|
|
138
|
-
# Load current values
|
|
139
|
-
puppy_name_input = self.query_one("#puppy-name-input", Input)
|
|
140
|
-
owner_name_input = self.query_one("#owner-name-input", Input)
|
|
141
|
-
model_select = self.query_one("#model-select", Select)
|
|
142
|
-
protected_tokens_input = self.query_one("#protected-tokens-input", Input)
|
|
143
|
-
compaction_threshold_input = self.query_one(
|
|
144
|
-
"#compaction-threshold-input", Input
|
|
145
|
-
)
|
|
146
|
-
compaction_strategy_select = self.query_one(
|
|
147
|
-
"#compaction-strategy-select", Select
|
|
148
|
-
)
|
|
149
|
-
|
|
150
|
-
puppy_name_input.value = get_puppy_name() or ""
|
|
151
|
-
owner_name_input.value = get_owner_name() or ""
|
|
152
|
-
protected_tokens_input.value = str(get_protected_token_count())
|
|
153
|
-
compaction_threshold_input.value = str(get_compaction_threshold())
|
|
154
|
-
compaction_strategy_select.value = get_compaction_strategy()
|
|
155
|
-
|
|
156
|
-
# Load available models
|
|
157
|
-
self.load_model_options(model_select)
|
|
158
|
-
|
|
159
|
-
# Set current model selection
|
|
160
|
-
current_model = get_global_model_name()
|
|
161
|
-
model_select.value = current_model
|
|
162
|
-
|
|
163
|
-
# YOLO mode is always enabled in TUI mode
|
|
164
|
-
|
|
165
|
-
def load_model_options(self, model_select):
|
|
166
|
-
"""Load available models into the model select widget."""
|
|
167
|
-
try:
|
|
168
|
-
# Use the same method that interactive mode uses to load models
|
|
169
|
-
|
|
170
|
-
from code_puppy.model_factory import ModelFactory
|
|
171
|
-
|
|
172
|
-
# Load models using the same path and method as interactive mode
|
|
173
|
-
models_data = ModelFactory.load_config()
|
|
174
|
-
|
|
175
|
-
# Create options as (display_name, model_name) tuples
|
|
176
|
-
model_options = []
|
|
177
|
-
for model_name, model_config in models_data.items():
|
|
178
|
-
model_type = model_config.get("type", "unknown")
|
|
179
|
-
display_name = f"{model_name} ({model_type})"
|
|
180
|
-
model_options.append((display_name, model_name))
|
|
181
|
-
|
|
182
|
-
# Set the options on the select widget
|
|
183
|
-
model_select.set_options(model_options)
|
|
184
|
-
|
|
185
|
-
except Exception:
|
|
186
|
-
# Fallback to a basic option if loading fails
|
|
187
|
-
model_select.set_options([("gpt-4.1 (openai)", "gpt-4.1")])
|
|
188
|
-
|
|
189
|
-
@on(Button.Pressed, "#save-button")
|
|
190
|
-
def save_settings(self) -> None:
|
|
191
|
-
"""Save the modified settings."""
|
|
192
|
-
from code_puppy.config import (
|
|
193
|
-
get_model_context_length,
|
|
194
|
-
set_config_value,
|
|
195
|
-
set_model_name,
|
|
196
|
-
)
|
|
197
|
-
|
|
198
|
-
try:
|
|
199
|
-
# Get values from inputs
|
|
200
|
-
puppy_name = self.query_one("#puppy-name-input", Input).value.strip()
|
|
201
|
-
owner_name = self.query_one("#owner-name-input", Input).value.strip()
|
|
202
|
-
selected_model = self.query_one("#model-select", Select).value
|
|
203
|
-
yolo_mode = "true" # Always set to true in TUI mode
|
|
204
|
-
protected_tokens = self.query_one(
|
|
205
|
-
"#protected-tokens-input", Input
|
|
206
|
-
).value.strip()
|
|
207
|
-
compaction_threshold = self.query_one(
|
|
208
|
-
"#compaction-threshold-input", Input
|
|
209
|
-
).value.strip()
|
|
210
|
-
|
|
211
|
-
# Validate and save
|
|
212
|
-
if puppy_name:
|
|
213
|
-
set_config_value("puppy_name", puppy_name)
|
|
214
|
-
if owner_name:
|
|
215
|
-
set_config_value("owner_name", owner_name)
|
|
216
|
-
|
|
217
|
-
# Save model selection
|
|
218
|
-
if selected_model:
|
|
219
|
-
set_model_name(selected_model)
|
|
220
|
-
# Reload the active agent so model switch takes effect immediately
|
|
221
|
-
try:
|
|
222
|
-
from code_puppy.agents import get_current_agent
|
|
223
|
-
|
|
224
|
-
current_agent = get_current_agent()
|
|
225
|
-
if hasattr(current_agent, "refresh_config"):
|
|
226
|
-
try:
|
|
227
|
-
current_agent.refresh_config()
|
|
228
|
-
except Exception:
|
|
229
|
-
...
|
|
230
|
-
current_agent.reload_code_generation_agent()
|
|
231
|
-
except Exception:
|
|
232
|
-
# Non-fatal: settings saved; reload will happen on next run if needed
|
|
233
|
-
pass
|
|
234
|
-
|
|
235
|
-
set_config_value("yolo_mode", yolo_mode)
|
|
236
|
-
|
|
237
|
-
# Validate and save protected tokens
|
|
238
|
-
if protected_tokens.isdigit():
|
|
239
|
-
tokens_value = int(protected_tokens)
|
|
240
|
-
model_context_length = get_model_context_length()
|
|
241
|
-
max_protected_tokens = int(model_context_length * 0.75)
|
|
242
|
-
|
|
243
|
-
if tokens_value >= 1000: # Minimum validation
|
|
244
|
-
if tokens_value <= max_protected_tokens: # Maximum validation
|
|
245
|
-
set_config_value("protected_token_count", protected_tokens)
|
|
246
|
-
else:
|
|
247
|
-
raise ValueError(
|
|
248
|
-
f"Protected tokens must not exceed 75% of model context length ({max_protected_tokens} tokens for current model)"
|
|
249
|
-
)
|
|
250
|
-
else:
|
|
251
|
-
raise ValueError("Protected tokens must be at least 1000")
|
|
252
|
-
elif protected_tokens: # If not empty but not digit
|
|
253
|
-
raise ValueError("Protected tokens must be a valid number")
|
|
254
|
-
|
|
255
|
-
# Validate and save compaction threshold
|
|
256
|
-
if compaction_threshold:
|
|
257
|
-
try:
|
|
258
|
-
threshold_value = float(compaction_threshold)
|
|
259
|
-
if 0.8 <= threshold_value <= 0.95: # Same bounds as config function
|
|
260
|
-
set_config_value("compaction_threshold", compaction_threshold)
|
|
261
|
-
else:
|
|
262
|
-
raise ValueError(
|
|
263
|
-
"Compaction threshold must be between 0.8 and 0.95"
|
|
264
|
-
)
|
|
265
|
-
except ValueError as ve:
|
|
266
|
-
if "must be between" in str(ve):
|
|
267
|
-
raise ve
|
|
268
|
-
else:
|
|
269
|
-
raise ValueError(
|
|
270
|
-
"Compaction threshold must be a valid decimal number"
|
|
271
|
-
)
|
|
272
|
-
|
|
273
|
-
# Save compaction strategy
|
|
274
|
-
compaction_strategy = self.query_one(
|
|
275
|
-
"#compaction-strategy-select", Select
|
|
276
|
-
).value
|
|
277
|
-
if compaction_strategy in ["summarization", "truncation"]:
|
|
278
|
-
set_config_value("compaction_strategy", compaction_strategy)
|
|
279
|
-
|
|
280
|
-
# Return success message with model change info
|
|
281
|
-
message = "Settings saved successfully!"
|
|
282
|
-
if selected_model:
|
|
283
|
-
message += f" Model switched to: {selected_model}"
|
|
284
|
-
|
|
285
|
-
self.dismiss(
|
|
286
|
-
{
|
|
287
|
-
"success": True,
|
|
288
|
-
"message": message,
|
|
289
|
-
"model_changed": bool(selected_model),
|
|
290
|
-
}
|
|
291
|
-
)
|
|
292
|
-
|
|
293
|
-
except Exception as e:
|
|
294
|
-
self.dismiss(
|
|
295
|
-
{"success": False, "message": f"Error saving settings: {str(e)}"}
|
|
296
|
-
)
|
|
297
|
-
|
|
298
|
-
@on(Button.Pressed, "#cancel-button")
|
|
299
|
-
def cancel_settings(self) -> None:
|
|
300
|
-
"""Cancel settings changes."""
|
|
301
|
-
self.dismiss({"success": False, "message": "Settings cancelled"})
|
|
302
|
-
|
|
303
|
-
def on_key(self, event) -> None:
|
|
304
|
-
"""Handle key events."""
|
|
305
|
-
if event.key == "escape":
|
|
306
|
-
self.cancel_settings()
|
code_puppy/tui/screens/tools.py
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Tools modal screen.
|
|
3
|
-
"""
|
|
4
|
-
|
|
5
|
-
from textual import on
|
|
6
|
-
from textual.app import ComposeResult
|
|
7
|
-
from textual.containers import Container, VerticalScroll
|
|
8
|
-
from textual.screen import ModalScreen
|
|
9
|
-
from textual.widgets import Button, Markdown, Static
|
|
10
|
-
|
|
11
|
-
from code_puppy.tools.tools_content import tools_content
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class ToolsScreen(ModalScreen):
|
|
15
|
-
"""Tools modal screen"""
|
|
16
|
-
|
|
17
|
-
DEFAULT_CSS = """
|
|
18
|
-
ToolsScreen {
|
|
19
|
-
align: center middle;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
#tools-dialog {
|
|
23
|
-
width: 95;
|
|
24
|
-
height: 40;
|
|
25
|
-
border: thick $primary;
|
|
26
|
-
background: $surface;
|
|
27
|
-
padding: 1;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
#tools-content {
|
|
31
|
-
height: 1fr;
|
|
32
|
-
margin: 0 0 1 0;
|
|
33
|
-
overflow-y: auto;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
#tools-buttons {
|
|
37
|
-
layout: horizontal;
|
|
38
|
-
height: 3;
|
|
39
|
-
align: center middle;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
#dismiss-button {
|
|
43
|
-
margin: 0 1;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
#tools-markdown {
|
|
47
|
-
margin: 0;
|
|
48
|
-
padding: 0;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/* Style markdown elements for better readability */
|
|
52
|
-
Markdown {
|
|
53
|
-
margin: 0;
|
|
54
|
-
padding: 0;
|
|
55
|
-
}
|
|
56
|
-
"""
|
|
57
|
-
|
|
58
|
-
def compose(self) -> ComposeResult:
|
|
59
|
-
with Container(id="tools-dialog"):
|
|
60
|
-
yield Static("🛠️ Cooper's Toolkit\n", id="tools-title")
|
|
61
|
-
with VerticalScroll(id="tools-content"):
|
|
62
|
-
yield Markdown(tools_content, id="tools-markdown")
|
|
63
|
-
with Container(id="tools-buttons"):
|
|
64
|
-
yield Button("Dismiss", id="dismiss-button", variant="primary")
|
|
65
|
-
|
|
66
|
-
@on(Button.Pressed, "#dismiss-button")
|
|
67
|
-
def dismiss_tools(self) -> None:
|
|
68
|
-
"""Dismiss the tools modal."""
|
|
69
|
-
self.dismiss()
|
|
70
|
-
|
|
71
|
-
def on_key(self, event) -> None:
|
|
72
|
-
"""Handle key events."""
|
|
73
|
-
if event.key == "escape":
|
|
74
|
-
self.dismiss()
|
code_puppy/tui_state.py
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
# TUI State Management
|
|
2
|
-
# This module contains functions for managing the global TUI state
|
|
3
|
-
|
|
4
|
-
from typing import Any
|
|
5
|
-
|
|
6
|
-
# Global TUI state variables
|
|
7
|
-
_tui_mode: bool = False
|
|
8
|
-
_tui_app_instance: Any = None
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def set_tui_mode(enabled: bool) -> None:
|
|
12
|
-
"""Set the global TUI mode state.
|
|
13
|
-
|
|
14
|
-
Args:
|
|
15
|
-
enabled: True if running in TUI mode, False otherwise
|
|
16
|
-
"""
|
|
17
|
-
global _tui_mode
|
|
18
|
-
_tui_mode = enabled
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def is_tui_mode() -> bool:
|
|
22
|
-
"""Check if the application is running in TUI mode.
|
|
23
|
-
|
|
24
|
-
Returns:
|
|
25
|
-
True if running in TUI mode, False otherwise
|
|
26
|
-
"""
|
|
27
|
-
return _tui_mode
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
def set_tui_app_instance(app_instance: Any) -> None:
|
|
31
|
-
"""Set the global TUI app instance reference.
|
|
32
|
-
|
|
33
|
-
Args:
|
|
34
|
-
app_instance: The TUI app instance
|
|
35
|
-
"""
|
|
36
|
-
global _tui_app_instance
|
|
37
|
-
_tui_app_instance = app_instance
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
def get_tui_app_instance() -> Any:
|
|
41
|
-
"""Get the current TUI app instance.
|
|
42
|
-
|
|
43
|
-
Returns:
|
|
44
|
-
The TUI app instance if available, None otherwise
|
|
45
|
-
"""
|
|
46
|
-
return _tui_app_instance
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
def get_tui_mode() -> bool:
|
|
50
|
-
"""Get the current TUI mode state.
|
|
51
|
-
|
|
52
|
-
Returns:
|
|
53
|
-
True if running in TUI mode, False otherwise
|
|
54
|
-
"""
|
|
55
|
-
return _tui_mode
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"gpt-5": {
|
|
3
|
-
"type": "openai",
|
|
4
|
-
"name": "gpt-5",
|
|
5
|
-
"context_length": 400000
|
|
6
|
-
},
|
|
7
|
-
"synthetic-DeepSeek-V3.1-Terminus": {
|
|
8
|
-
"type": "custom_openai",
|
|
9
|
-
"name": "hf:deepseek-ai/DeepSeek-V3.1-Terminus",
|
|
10
|
-
"custom_endpoint": {
|
|
11
|
-
"url": "https://api.synthetic.new/openai/v1/",
|
|
12
|
-
"api_key": "$SYN_API_KEY"
|
|
13
|
-
},
|
|
14
|
-
"context_length": 128000
|
|
15
|
-
},
|
|
16
|
-
"synthetic-Kimi-K2-Instruct-0905": {
|
|
17
|
-
"type": "custom_openai",
|
|
18
|
-
"name": "hf:moonshotai/Kimi-K2-Instruct-0905",
|
|
19
|
-
"custom_endpoint": {
|
|
20
|
-
"url": "https://api.synthetic.new/openai/v1/",
|
|
21
|
-
"api_key": "$SYN_API_KEY"
|
|
22
|
-
},
|
|
23
|
-
"context_length": 256000
|
|
24
|
-
},
|
|
25
|
-
"synthetic-Qwen3-Coder-480B-A35B-Instruct": {
|
|
26
|
-
"type": "custom_openai",
|
|
27
|
-
"name": "hf:Qwen/Qwen3-Coder-480B-A35B-Instruct",
|
|
28
|
-
"custom_endpoint": {
|
|
29
|
-
"url": "https://api.synthetic.new/openai/v1/",
|
|
30
|
-
"api_key": "$SYN_API_KEY"
|
|
31
|
-
},
|
|
32
|
-
"context_length": 256000
|
|
33
|
-
},
|
|
34
|
-
"synthetic-GLM-4.6": {
|
|
35
|
-
"type": "custom_openai",
|
|
36
|
-
"name": "hf:zai-org/GLM-4.6",
|
|
37
|
-
"custom_endpoint": {
|
|
38
|
-
"url": "https://api.synthetic.new/openai/v1/",
|
|
39
|
-
"api_key": "$SYN_API_KEY"
|
|
40
|
-
},
|
|
41
|
-
"context_length": 200000
|
|
42
|
-
},
|
|
43
|
-
"Cerebras-Qwen3-Coder-480b": {
|
|
44
|
-
"type": "cerebras",
|
|
45
|
-
"name": "qwen-3-coder-480b",
|
|
46
|
-
"custom_endpoint": {
|
|
47
|
-
"url": "https://api.cerebras.ai/v1",
|
|
48
|
-
"api_key": "$CEREBRAS_API_KEY"
|
|
49
|
-
},
|
|
50
|
-
"context_length": 131072
|
|
51
|
-
},
|
|
52
|
-
"Cerebras-Qwen3-235b-a22b-instruct-2507": {
|
|
53
|
-
"type": "cerebras",
|
|
54
|
-
"name": "qwen-3-235b-a22b-instruct-2507",
|
|
55
|
-
"custom_endpoint": {
|
|
56
|
-
"url": "https://api.cerebras.ai/v1",
|
|
57
|
-
"api_key": "$CEREBRAS_API_KEY"
|
|
58
|
-
},
|
|
59
|
-
"context_length": 64000
|
|
60
|
-
},
|
|
61
|
-
"Cerebras-gpt-oss-120b": {
|
|
62
|
-
"type": "cerebras",
|
|
63
|
-
"name": "gpt-oss-120b",
|
|
64
|
-
"custom_endpoint": {
|
|
65
|
-
"url": "https://api.cerebras.ai/v1",
|
|
66
|
-
"api_key": "$CEREBRAS_API_KEY"
|
|
67
|
-
},
|
|
68
|
-
"context_length": 131072
|
|
69
|
-
},
|
|
70
|
-
"Cerebras-Qwen-3-32b": {
|
|
71
|
-
"type": "cerebras",
|
|
72
|
-
"name": "qwen-3-32b",
|
|
73
|
-
"custom_endpoint": {
|
|
74
|
-
"url": "https://api.cerebras.ai/v1",
|
|
75
|
-
"api_key": "$CEREBRAS_API_KEY"
|
|
76
|
-
},
|
|
77
|
-
"context_length": 65536
|
|
78
|
-
},
|
|
79
|
-
"claude-4-0-sonnet": {
|
|
80
|
-
"type": "anthropic",
|
|
81
|
-
"name": "claude-sonnet-4-20250514",
|
|
82
|
-
"context_length": 200000
|
|
83
|
-
},
|
|
84
|
-
"claude-4-5-sonnet": {
|
|
85
|
-
"type": "anthropic",
|
|
86
|
-
"name": "claude-sonnet-4-5-20250929",
|
|
87
|
-
"context_length": 200000
|
|
88
|
-
},
|
|
89
|
-
"claude-4-1-opus": {
|
|
90
|
-
"type": "anthropic",
|
|
91
|
-
"name": "claude-opus-4-1-20250805",
|
|
92
|
-
"context_length": 200000
|
|
93
|
-
},
|
|
94
|
-
"glm-4.5-coding": {
|
|
95
|
-
"type": "zai_coding",
|
|
96
|
-
"name": "glm-4.5"
|
|
97
|
-
},
|
|
98
|
-
"glm-4.6-coding": {
|
|
99
|
-
"type": "zai_coding",
|
|
100
|
-
"name": "glm-4.6",
|
|
101
|
-
"context_length": 200000
|
|
102
|
-
},
|
|
103
|
-
"glm-4.5-api": {
|
|
104
|
-
"type": "zai_api",
|
|
105
|
-
"name": "glm-4.5"
|
|
106
|
-
},
|
|
107
|
-
"glm-4.6-api": {
|
|
108
|
-
"type": "zai_api",
|
|
109
|
-
"name": "glm-4.6",
|
|
110
|
-
"context_length": 200000
|
|
111
|
-
}
|
|
112
|
-
}
|
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
code_puppy/__init__.py,sha256=ehbM1-wMjNmOXk_DBhhJECFyBv2dRHwwo7ucjHeM68E,107
|
|
2
|
-
code_puppy/__main__.py,sha256=pDVssJOWP8A83iFkxMLY9YteHYat0EyWDQqMkKHpWp4,203
|
|
3
|
-
code_puppy/callbacks.py,sha256=ukSgVFaEO68o6J09qFwDrnmNanrVv3toTLQhS504Meo,6162
|
|
4
|
-
code_puppy/config.py,sha256=_m0QAYcmw84yi6YbZ_dAlBhsY7Q-UZ_KK1LjRzSclbw,27455
|
|
5
|
-
code_puppy/http_utils.py,sha256=Hd9bx0nWTmCSRSQxMYF4Hh91bYB1zghqaheNRhHxabM,8957
|
|
6
|
-
code_puppy/main.py,sha256=J0mPTtMp64LMXiWHVmluvH5GWL1LQnZ6Afehv_7KuTo,25454
|
|
7
|
-
code_puppy/model_factory.py,sha256=4CHWOtMgog0X2oFkxmUjRfIuA8p_RWB9nf7iHu3RiWQ,16016
|
|
8
|
-
code_puppy/models.json,sha256=Ly2VN-I5O72unF-xbn96QsepoQ0_KmaTusvh1yG7VZs,2823
|
|
9
|
-
code_puppy/reopenable_async_client.py,sha256=4UJRaMp5np8cbef9F0zKQ7TPKOfyf5U-Kv-0zYUWDho,8274
|
|
10
|
-
code_puppy/round_robin_model.py,sha256=UEfw-Ix7GpNRWSxxuJtA-EE4_A46KXjMgFRciprfLmg,5634
|
|
11
|
-
code_puppy/session_storage.py,sha256=rDumPxvUz0VGNfeWxgl7SHs0Slu4W_WiKwYHWN525mc,9659
|
|
12
|
-
code_puppy/status_display.py,sha256=F6eEAkGePDp4StM2BWj-uLLQTDGtJrf0IufzCeP1rRg,8336
|
|
13
|
-
code_puppy/summarization_agent.py,sha256=voYbbRCKF0-BXEOWnKFmAAbuQ9FrIjdNithW3N-iUJU,3510
|
|
14
|
-
code_puppy/tui_state.py,sha256=TT76XBVapKj6fKjFzz6oxCONeN_BZwcMILxxZcxu6-Y,1171
|
|
15
|
-
code_puppy/version_checker.py,sha256=bjLDmgGPrl7XnYwX1u13O8uFlsfikV90PK6nbA9Z9QU,1150
|
|
16
|
-
code_puppy/agents/__init__.py,sha256=PtPB7Z5MSwmUKipgt_qxvIuGggcuVaYwNbnp1UP4tPc,518
|
|
17
|
-
code_puppy/agents/agent_c_reviewer.py,sha256=fTgiD9P4FfhxkfVnEonp684gIqFKFIm7r5f70tVEwBc,5020
|
|
18
|
-
code_puppy/agents/agent_code_puppy.py,sha256=vk25J5YSjt30ItfML8KyQc5QR8QumBv5_U8RhqaXUz4,7973
|
|
19
|
-
code_puppy/agents/agent_code_reviewer.py,sha256=8XHktiFrOVeFZ81WIefuTPQw_IzcNddm4bk46mW46ok,4003
|
|
20
|
-
code_puppy/agents/agent_cpp_reviewer.py,sha256=H4INgJo2OJ84QT7bfTkw4s1Ml7luwokhAgTsdig2TQQ,3653
|
|
21
|
-
code_puppy/agents/agent_creator_agent.py,sha256=IiwVirB6uoIeGOmtetut9eDv6o055ykND3V-fvyA8Lw,23042
|
|
22
|
-
code_puppy/agents/agent_golang_reviewer.py,sha256=-OMuT8hkapVf2Oox46Ck9SRHlsfd8ab8uefbVfdW72M,3348
|
|
23
|
-
code_puppy/agents/agent_javascript_reviewer.py,sha256=5YC4kRSvorcNgObjHjD2Rrgnvf8jlKhPqWdjOMjU9A0,3636
|
|
24
|
-
code_puppy/agents/agent_manager.py,sha256=RppmDEo4YP87WV66JACZhqAsGwjwAu3zfJNihakMvZE,12883
|
|
25
|
-
code_puppy/agents/agent_python_reviewer.py,sha256=D0M3VA12QKdsyg2zIBI2FECxz0IP2fSIfg24xGzDhw0,3837
|
|
26
|
-
code_puppy/agents/agent_qa_expert.py,sha256=wCGXzuAVElT5c-QigQVb8JX9Gw0JmViCUQQnADMSbVc,3796
|
|
27
|
-
code_puppy/agents/agent_qa_kitten.py,sha256=5PeFFSwCFlTUvP6h5bGntx0xv5NmRwBiw0HnMqY8nLI,9107
|
|
28
|
-
code_puppy/agents/agent_security_auditor.py,sha256=ADafi2x4gqXw6m-Nch5vjiKjO0Urcbj0x4zxHti3gDw,3712
|
|
29
|
-
code_puppy/agents/agent_typescript_reviewer.py,sha256=EDY1mFkVpuJ1BPXsJFu2wQ2pfAV-90ipc_8w9ymrKPg,4054
|
|
30
|
-
code_puppy/agents/base_agent.py,sha256=szvyM09SvMX75sFs7P3AtkshDCIVylSlxMnFnSwbLdc,48330
|
|
31
|
-
code_puppy/agents/json_agent.py,sha256=lhopDJDoiSGHvD8A6t50hi9ZBoNRKgUywfxd0Po_Dzc,4886
|
|
32
|
-
code_puppy/command_line/__init__.py,sha256=y7WeRemfYppk8KVbCGeAIiTuiOszIURCDjOMZv_YRmU,45
|
|
33
|
-
code_puppy/command_line/attachments.py,sha256=kNo2uBIod3IyiFAsieegbcDw8f3q2KqjDRLl5B5eJDY,12898
|
|
34
|
-
code_puppy/command_line/command_handler.py,sha256=hHyHJqIllLgt97Tk6XCUlQInPDQfz9DvrDzmUyGBUcw,32048
|
|
35
|
-
code_puppy/command_line/file_path_completion.py,sha256=gw8NpIxa6GOpczUJRyh7VNZwoXKKn-yvCqit7h2y6Gg,2931
|
|
36
|
-
code_puppy/command_line/load_context_completion.py,sha256=6eZxV6Bs-EFwZjN93V8ZDZUC-6RaWxvtZk-04Wtikyw,2240
|
|
37
|
-
code_puppy/command_line/model_picker_completion.py,sha256=uqwpbMYnCcWUZZ10Y4pMBKBfW52wQ-KdML2PO4Xjwr0,4501
|
|
38
|
-
code_puppy/command_line/motd.py,sha256=PEdkp3ZnydVfvd7mNJylm8YyFNUKg9jmY6uwkA1em8c,2152
|
|
39
|
-
code_puppy/command_line/prompt_toolkit_completion.py,sha256=ce0VB2TeaqcbdXolRwk_kI19tKgX-1AROhJPBbfI10s,15694
|
|
40
|
-
code_puppy/command_line/utils.py,sha256=7eyxDHjPjPB9wGDJQQcXV_zOsGdYsFgI0SGCetVmTqE,1251
|
|
41
|
-
code_puppy/command_line/mcp/__init__.py,sha256=0-OQuwjq_pLiTVJ1_NrirVwdRerghyKs_MTZkwPC7YY,315
|
|
42
|
-
code_puppy/command_line/mcp/add_command.py,sha256=lZ09RpFDIeghX1zhc2YIAqBASs5Ra52x5YAasUKvqJg,6409
|
|
43
|
-
code_puppy/command_line/mcp/base.py,sha256=0uessGekNM37X3tLrKImkhZpgxjAoR7fqskbmkBjcf8,890
|
|
44
|
-
code_puppy/command_line/mcp/handler.py,sha256=ZPWNfJEwGurNQh4KUCRRRsHXuB0kHlaGG4oLN1sFhBg,4412
|
|
45
|
-
code_puppy/command_line/mcp/help_command.py,sha256=Z55-ObpUQFMdqMWAkSJkRi_v2uZhDFVxg6DcIdjVY6Q,5250
|
|
46
|
-
code_puppy/command_line/mcp/install_command.py,sha256=kNASwQ-CUL_5zBTzJhBy_G2ClI6kRzgLJx7EeQX4TmE,8820
|
|
47
|
-
code_puppy/command_line/mcp/list_command.py,sha256=tjxCMmK6yrmjM5L-lFY_qdL_dKTPdBZ_q0bEoAmBADg,3179
|
|
48
|
-
code_puppy/command_line/mcp/logs_command.py,sha256=x_QsVGPpI5XY7RCZtiNFegc6R3csiwF_IEB_Rh2575w,4453
|
|
49
|
-
code_puppy/command_line/mcp/remove_command.py,sha256=MrWmXQ9jZTq1wrohFDO3ls0a1faTHCqRZocN-ynTzh8,2753
|
|
50
|
-
code_puppy/command_line/mcp/restart_command.py,sha256=-arZhayEVjTg3WErQKiBoFxbpbQcFlPXTzUI5o8AQLg,3254
|
|
51
|
-
code_puppy/command_line/mcp/search_command.py,sha256=k4CGiNJ1MKJ1_dPHd3wlwXo899nzizSUr7PsR0V9y4Y,4113
|
|
52
|
-
code_puppy/command_line/mcp/start_all_command.py,sha256=aipniBcS9rHg7urqayMVQXXouE4WwLH4CtHkP7QDK5I,4197
|
|
53
|
-
code_puppy/command_line/mcp/start_command.py,sha256=hfL97hz_nreuJMbIAGT3fuczp1p1uU3cU3GmA-1-0YY,3252
|
|
54
|
-
code_puppy/command_line/mcp/status_command.py,sha256=tQJrEDlN4DJ3n9jnKW-4kD0vL3TyUQbovb4V3nz-RsA,6640
|
|
55
|
-
code_puppy/command_line/mcp/stop_all_command.py,sha256=z7a9DAnTVsvuxnDSLyllejCDJv8-fdbc1a90sWC93y0,3618
|
|
56
|
-
code_puppy/command_line/mcp/stop_command.py,sha256=TG4mc5JrWh8gnABQbQ5dQkh8RyMgnp_C75tW2QxVSkc,2496
|
|
57
|
-
code_puppy/command_line/mcp/test_command.py,sha256=Pjod77DYRcA9WDZcxaCe6AUgpEXKJr42QRkxMhSjXhM,3689
|
|
58
|
-
code_puppy/command_line/mcp/utils.py,sha256=0Wt4ttYgSlVvtusYmBLKXSkjAjcsDiUxcZQAoFLUNnE,3625
|
|
59
|
-
code_puppy/command_line/mcp/wizard_utils.py,sha256=mWuE5epVgCxgGoj-VGwPO_XWVkkXjegXoIJpC9LC2TM,11075
|
|
60
|
-
code_puppy/mcp_/__init__.py,sha256=UZ6ZYEIN8At3Jq88ZTkrVQHswNMxHyIBz4hbOn71osk,1444
|
|
61
|
-
code_puppy/mcp_/async_lifecycle.py,sha256=pTQrwQCVgjad8EJeRTSHtIeSQRgT_8r5BeLv-1SgKog,7772
|
|
62
|
-
code_puppy/mcp_/blocking_startup.py,sha256=bgYln3j12kuHoBsoCUzCjVcTdcoSIAx8kSaOJVwUaRg,13484
|
|
63
|
-
code_puppy/mcp_/captured_stdio_server.py,sha256=ubINgtKdd5-oOLR7MRuavUqd40iQFJk2YCNtTFYeI5Q,8948
|
|
64
|
-
code_puppy/mcp_/circuit_breaker.py,sha256=a83YwXux9h4R6zBWBUrCIqtp2ffyl7JZEoK2tErG_0I,8601
|
|
65
|
-
code_puppy/mcp_/config_wizard.py,sha256=3dQtx4D0mLYqcDP3mPznTo0l1nIchS-cOHCmnRb8qt8,16482
|
|
66
|
-
code_puppy/mcp_/dashboard.py,sha256=y6t6trrBZU-mr8W1_29VN5DeZI8VYvOsKNz1EXxlvUg,9022
|
|
67
|
-
code_puppy/mcp_/error_isolation.py,sha256=mpPBiH17zTXPsOEAn9WmkbwQwnt4gmgiaWv87JBJbUo,12426
|
|
68
|
-
code_puppy/mcp_/health_monitor.py,sha256=n5R6EeYOYbUucUFe74qGWCU3g6Mep5UEQbLF0wbT0dU,19688
|
|
69
|
-
code_puppy/mcp_/managed_server.py,sha256=7GYo7AVi-dy1E5XjJdEvmokbssywgjpIwkZzxwru-v0,14257
|
|
70
|
-
code_puppy/mcp_/manager.py,sha256=Yx9zxukdXgdPDgeJiiQPYlPae0zQPofHWB-axuoMNc8,26426
|
|
71
|
-
code_puppy/mcp_/registry.py,sha256=IvbIL-pETQ7HS7iRgsoT5j7eY8TOJXqYczSiigT2ofU,15752
|
|
72
|
-
code_puppy/mcp_/retry_manager.py,sha256=evVxbtrsHNyo8UoI7zpO-NVDegibn82RLlgN8VKewA8,10665
|
|
73
|
-
code_puppy/mcp_/server_registry_catalog.py,sha256=5H9S2IQIF9OE__tfsXmj_T8qOXceoTHH0AxLh4kAbpw,38729
|
|
74
|
-
code_puppy/mcp_/status_tracker.py,sha256=uekxrzkzIWrv3OfSVgblaPuoGFcAh_dBYwCcaHZ_CrM,12183
|
|
75
|
-
code_puppy/mcp_/system_tools.py,sha256=7_oR8k0c8YjtCcYF9g7A946oAGuKOf_i-92aJH7VmlQ,7331
|
|
76
|
-
code_puppy/mcp_/examples/retry_example.py,sha256=Qi5K6cNmhc5-zncZa0F_dkJUEdZ6OIgt1xfG5PUxt3Q,7234
|
|
77
|
-
code_puppy/messaging/__init__.py,sha256=h2eZ7nJblKF71_dNUIBj3vL5RDw7WGy8nh6T_EYVrcA,1176
|
|
78
|
-
code_puppy/messaging/message_queue.py,sha256=A6_CVn55tA5cINrIML9N_fS6fGQP-n8gC8abnkwF034,12572
|
|
79
|
-
code_puppy/messaging/queue_console.py,sha256=hf32bKfAOdAaxYuARnmDuWhq4ET77xMWDvu5_T2JggY,10912
|
|
80
|
-
code_puppy/messaging/renderers.py,sha256=9VOpVmu7emyyg1CXgm17u4IzMNcLHvueBl7G14pLQho,16123
|
|
81
|
-
code_puppy/messaging/spinner/__init__.py,sha256=2yskPQz_hVcUjlK2nNlPdprgCbP56kjdgtOvwWiFUF0,1744
|
|
82
|
-
code_puppy/messaging/spinner/console_spinner.py,sha256=POwPdJvJE5bJ5ZWUJcEp5iouQjaS0Urw8aWE0YQELxM,7099
|
|
83
|
-
code_puppy/messaging/spinner/spinner_base.py,sha256=JiQDAhCfwrWUFunb8Xcj1caEl34JJY7Bcio7mDeckSc,2694
|
|
84
|
-
code_puppy/messaging/spinner/textual_spinner.py,sha256=NQsRtbSJoeNz-zGcxrORZ_joJ0CVJlJ0f1ESGryJXIc,3671
|
|
85
|
-
code_puppy/plugins/__init__.py,sha256=fksDqMUiXPJ5WNuMsYsVR8ulueQRCXPlvECEyicHPtQ,1312
|
|
86
|
-
code_puppy/plugins/example_custom_command/register_callbacks.py,sha256=Cy3ScPy9wLyqobVBK06ObOpvlHGDyGBSvSZToTj1IcE,1680
|
|
87
|
-
code_puppy/tools/__init__.py,sha256=BVTZ85jLHgDANwOnUSOz3UDlp8VQDq4DoGF23BRlyWw,6032
|
|
88
|
-
code_puppy/tools/agent_tools.py,sha256=pq37uVJPVe5j2jOTZVwlN-s7TZOvGKAHLTTBeI8fOec,6006
|
|
89
|
-
code_puppy/tools/command_runner.py,sha256=SRhTACgKklHUm_ztbFHnefGbLw4CJOm601or6L1cPGM,22417
|
|
90
|
-
code_puppy/tools/common.py,sha256=ICLqhGz6m1fzIcm40SmRUWBN9gDltkIubD0X2wF6Ews,11855
|
|
91
|
-
code_puppy/tools/file_modifications.py,sha256=EaDWcv6gi8wAvpgyeJdKSKPWg9fTpZoEkxQiLCE6rn4,23218
|
|
92
|
-
code_puppy/tools/file_operations.py,sha256=JDySIdVIZJMJAnlM2fqJ7bYojo1C0mAbjeBoH2KZG2o,33296
|
|
93
|
-
code_puppy/tools/tools_content.py,sha256=bsBqW-ppd1XNAS_g50B3UHDQBWEALC1UneH6-afz1zo,2365
|
|
94
|
-
code_puppy/tools/browser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
95
|
-
code_puppy/tools/browser/browser_control.py,sha256=6E_Kq63cErBk-iM9-03Cq8sTWWLh-Tk2kpdrB_rMmbg,8603
|
|
96
|
-
code_puppy/tools/browser/browser_interactions.py,sha256=m-bVsAUbdrS-P1GbS0ChO2tMMg4tMIsDX34azn_Olzs,17070
|
|
97
|
-
code_puppy/tools/browser/browser_locators.py,sha256=ZshjhYuV600vJqXUC23oNX89AZLMvY8rlvj-9oy7GMw,19574
|
|
98
|
-
code_puppy/tools/browser/browser_navigation.py,sha256=Tj_fNcM3KGpkM2UTKcGQX8BpI373Sv7xZAJf-U7pO5M,7621
|
|
99
|
-
code_puppy/tools/browser/browser_screenshot.py,sha256=YU4olUqxhqyK3_pBC0BtU6A7_EEtiRlh6saj93nkKAg,8258
|
|
100
|
-
code_puppy/tools/browser/browser_scripts.py,sha256=MMO5KRjdrhuLOoJGoKGG1jm6UAqhFhUznz02aWqhMAE,15065
|
|
101
|
-
code_puppy/tools/browser/browser_workflows.py,sha256=jplJ1T60W3G4-dhVJX-CXkm9sskUH_Qzp0Dj-oubvrE,6142
|
|
102
|
-
code_puppy/tools/browser/camoufox_manager.py,sha256=93l8KtKEZFbItYsvPK-LPf6ag940nnTROLgNRmH3J3I,7729
|
|
103
|
-
code_puppy/tools/browser/vqa_agent.py,sha256=H64VLTQUgjC8XpslXMxjdejRNeo-yW3xYMqGgNn547c,2164
|
|
104
|
-
code_puppy/tui/__init__.py,sha256=XesAxIn32zLPOmvpR2wIDxDAnnJr81a5pBJB4cZp1Xs,321
|
|
105
|
-
code_puppy/tui/app.py,sha256=WBVMnjztK_Poc5S7ZfBEX91oSZmgZBTP6owDX5WnyrU,44254
|
|
106
|
-
code_puppy/tui/messages.py,sha256=zQoToWI0eWdT36NEsY6RdCFzcDfAmfvoPlHv8jiCbgo,720
|
|
107
|
-
code_puppy/tui/components/__init__.py,sha256=uj5pnk3s6SEN3SbFI0ZnzaA2KK1NNg8TfUj6U-Z732U,455
|
|
108
|
-
code_puppy/tui/components/chat_view.py,sha256=Ff6uM6J0yENISNAOYroX7F-JL73_ajUUcP5IZSf2mng,19914
|
|
109
|
-
code_puppy/tui/components/command_history_modal.py,sha256=pUPEQvoCWa2iUnuMgNwO22y8eUbyw0HpcPH3wAosHvU,7097
|
|
110
|
-
code_puppy/tui/components/copy_button.py,sha256=E4-OJYk5YNzDf-E81NyiVGKsTRPrUX-RnQ8qFuVnabw,4375
|
|
111
|
-
code_puppy/tui/components/custom_widgets.py,sha256=qsVsPLh_oUjMWBznewH8Ya1BdGSiIwNiad2qkdfvCJk,2114
|
|
112
|
-
code_puppy/tui/components/human_input_modal.py,sha256=isj-zrSIcK5iy3L7HJNgDFWN1zhxY4f3zvp4krbs07E,5424
|
|
113
|
-
code_puppy/tui/components/input_area.py,sha256=RRnprt1_mIelXla_tmv1PFS8oTwdDAuB054S5Pnbea8,4397
|
|
114
|
-
code_puppy/tui/components/sidebar.py,sha256=nGtCiYzZalPmiFaJ4dwj2S4EJBu5wQZVzhoigYYY7U4,10369
|
|
115
|
-
code_puppy/tui/components/status_bar.py,sha256=TCtfQ0w6NXjaN-0eRsbhKrufDQNEKJ5UiBNj_r70664,6471
|
|
116
|
-
code_puppy/tui/models/__init__.py,sha256=5Eq7BMibz-z_t_v7B4H4tCdKRG41i2CaCuNQf_lteAE,140
|
|
117
|
-
code_puppy/tui/models/chat_message.py,sha256=2fSqsl4EHKgGsi_cVKWBbFq1NQwZyledGuJ9djovtLY,477
|
|
118
|
-
code_puppy/tui/models/command_history.py,sha256=bPWr_xnyQvjG5tPg_5pwqlEzn2fR170HlvBJwAXRpAE,2895
|
|
119
|
-
code_puppy/tui/models/enums.py,sha256=1ulsei95Gxy4r1sk-m-Sm5rdmejYCGRI-YtUwJmKFfM,501
|
|
120
|
-
code_puppy/tui/screens/__init__.py,sha256=qxiJKyO3MKCNdPjUuHA2-Pnpda0JN20n7e9sU25eC9M,352
|
|
121
|
-
code_puppy/tui/screens/autosave_picker.py,sha256=OW3d-GrrGINzwdY3h13mJSQjaH5Kej9sU1Xq8IIgIJI,5577
|
|
122
|
-
code_puppy/tui/screens/help.py,sha256=eJuPaOOCp7ZSUlecearqsuX6caxWv7NQszUh0tZJjBM,3232
|
|
123
|
-
code_puppy/tui/screens/mcp_install_wizard.py,sha256=vObpQwLbXjQsxmSg-WCasoev1usEi0pollKnL0SHu9U,27693
|
|
124
|
-
code_puppy/tui/screens/settings.py,sha256=EoMxiguyeF0srwV1bj4_MG9rrxkNthh6TdTNsxnXLfE,11460
|
|
125
|
-
code_puppy/tui/screens/tools.py,sha256=3pr2Xkpa9Js6Yhf1A3_wQVRzFOui-KDB82LwrsdBtyk,1715
|
|
126
|
-
code_puppy-0.0.214.data/data/code_puppy/models.json,sha256=Ly2VN-I5O72unF-xbn96QsepoQ0_KmaTusvh1yG7VZs,2823
|
|
127
|
-
code_puppy-0.0.214.dist-info/METADATA,sha256=WirGSX9-vEnae9m9MybWG8vjkydD95l5xlp852Z146w,22523
|
|
128
|
-
code_puppy-0.0.214.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
129
|
-
code_puppy-0.0.214.dist-info/entry_points.txt,sha256=Tp4eQC99WY3HOKd3sdvb22vZODRq0XkZVNpXOag_KdI,91
|
|
130
|
-
code_puppy-0.0.214.dist-info/licenses/LICENSE,sha256=31u8x0SPgdOq3izJX41kgFazWsM43zPEF9eskzqbJMY,1075
|
|
131
|
-
code_puppy-0.0.214.dist-info/RECORD,,
|