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.
Files changed (231) hide show
  1. code_puppy/__init__.py +7 -1
  2. code_puppy/agents/__init__.py +2 -0
  3. code_puppy/agents/agent_c_reviewer.py +59 -6
  4. code_puppy/agents/agent_code_puppy.py +7 -1
  5. code_puppy/agents/agent_code_reviewer.py +12 -2
  6. code_puppy/agents/agent_cpp_reviewer.py +73 -6
  7. code_puppy/agents/agent_creator_agent.py +45 -4
  8. code_puppy/agents/agent_golang_reviewer.py +92 -3
  9. code_puppy/agents/agent_javascript_reviewer.py +101 -8
  10. code_puppy/agents/agent_manager.py +81 -4
  11. code_puppy/agents/agent_pack_leader.py +383 -0
  12. code_puppy/agents/agent_planning.py +163 -0
  13. code_puppy/agents/agent_python_programmer.py +165 -0
  14. code_puppy/agents/agent_python_reviewer.py +28 -6
  15. code_puppy/agents/agent_qa_expert.py +98 -6
  16. code_puppy/agents/agent_qa_kitten.py +12 -7
  17. code_puppy/agents/agent_security_auditor.py +113 -3
  18. code_puppy/agents/agent_terminal_qa.py +323 -0
  19. code_puppy/agents/agent_typescript_reviewer.py +106 -7
  20. code_puppy/agents/base_agent.py +802 -176
  21. code_puppy/agents/event_stream_handler.py +350 -0
  22. code_puppy/agents/pack/__init__.py +34 -0
  23. code_puppy/agents/pack/bloodhound.py +304 -0
  24. code_puppy/agents/pack/husky.py +321 -0
  25. code_puppy/agents/pack/retriever.py +393 -0
  26. code_puppy/agents/pack/shepherd.py +348 -0
  27. code_puppy/agents/pack/terrier.py +287 -0
  28. code_puppy/agents/pack/watchdog.py +367 -0
  29. code_puppy/agents/prompt_reviewer.py +145 -0
  30. code_puppy/agents/subagent_stream_handler.py +276 -0
  31. code_puppy/api/__init__.py +13 -0
  32. code_puppy/api/app.py +169 -0
  33. code_puppy/api/main.py +21 -0
  34. code_puppy/api/pty_manager.py +446 -0
  35. code_puppy/api/routers/__init__.py +12 -0
  36. code_puppy/api/routers/agents.py +36 -0
  37. code_puppy/api/routers/commands.py +217 -0
  38. code_puppy/api/routers/config.py +74 -0
  39. code_puppy/api/routers/sessions.py +232 -0
  40. code_puppy/api/templates/terminal.html +361 -0
  41. code_puppy/api/websocket.py +154 -0
  42. code_puppy/callbacks.py +142 -4
  43. code_puppy/chatgpt_codex_client.py +283 -0
  44. code_puppy/claude_cache_client.py +586 -0
  45. code_puppy/cli_runner.py +916 -0
  46. code_puppy/command_line/add_model_menu.py +1079 -0
  47. code_puppy/command_line/agent_menu.py +395 -0
  48. code_puppy/command_line/attachments.py +10 -5
  49. code_puppy/command_line/autosave_menu.py +605 -0
  50. code_puppy/command_line/clipboard.py +527 -0
  51. code_puppy/command_line/colors_menu.py +520 -0
  52. code_puppy/command_line/command_handler.py +176 -738
  53. code_puppy/command_line/command_registry.py +150 -0
  54. code_puppy/command_line/config_commands.py +715 -0
  55. code_puppy/command_line/core_commands.py +792 -0
  56. code_puppy/command_line/diff_menu.py +863 -0
  57. code_puppy/command_line/load_context_completion.py +15 -22
  58. code_puppy/command_line/mcp/base.py +0 -3
  59. code_puppy/command_line/mcp/catalog_server_installer.py +175 -0
  60. code_puppy/command_line/mcp/custom_server_form.py +688 -0
  61. code_puppy/command_line/mcp/custom_server_installer.py +195 -0
  62. code_puppy/command_line/mcp/edit_command.py +148 -0
  63. code_puppy/command_line/mcp/handler.py +9 -4
  64. code_puppy/command_line/mcp/help_command.py +6 -5
  65. code_puppy/command_line/mcp/install_command.py +15 -26
  66. code_puppy/command_line/mcp/install_menu.py +685 -0
  67. code_puppy/command_line/mcp/list_command.py +2 -2
  68. code_puppy/command_line/mcp/logs_command.py +174 -65
  69. code_puppy/command_line/mcp/remove_command.py +2 -2
  70. code_puppy/command_line/mcp/restart_command.py +12 -4
  71. code_puppy/command_line/mcp/search_command.py +16 -10
  72. code_puppy/command_line/mcp/start_all_command.py +18 -6
  73. code_puppy/command_line/mcp/start_command.py +47 -25
  74. code_puppy/command_line/mcp/status_command.py +4 -5
  75. code_puppy/command_line/mcp/stop_all_command.py +7 -1
  76. code_puppy/command_line/mcp/stop_command.py +8 -4
  77. code_puppy/command_line/mcp/test_command.py +2 -2
  78. code_puppy/command_line/mcp/wizard_utils.py +20 -16
  79. code_puppy/command_line/mcp_completion.py +174 -0
  80. code_puppy/command_line/model_picker_completion.py +75 -25
  81. code_puppy/command_line/model_settings_menu.py +884 -0
  82. code_puppy/command_line/motd.py +14 -8
  83. code_puppy/command_line/onboarding_slides.py +179 -0
  84. code_puppy/command_line/onboarding_wizard.py +340 -0
  85. code_puppy/command_line/pin_command_completion.py +329 -0
  86. code_puppy/command_line/prompt_toolkit_completion.py +463 -63
  87. code_puppy/command_line/session_commands.py +296 -0
  88. code_puppy/command_line/utils.py +54 -0
  89. code_puppy/config.py +898 -112
  90. code_puppy/error_logging.py +118 -0
  91. code_puppy/gemini_code_assist.py +385 -0
  92. code_puppy/gemini_model.py +602 -0
  93. code_puppy/http_utils.py +210 -148
  94. code_puppy/keymap.py +128 -0
  95. code_puppy/main.py +5 -698
  96. code_puppy/mcp_/__init__.py +17 -0
  97. code_puppy/mcp_/async_lifecycle.py +35 -4
  98. code_puppy/mcp_/blocking_startup.py +70 -43
  99. code_puppy/mcp_/captured_stdio_server.py +2 -2
  100. code_puppy/mcp_/config_wizard.py +4 -4
  101. code_puppy/mcp_/dashboard.py +15 -6
  102. code_puppy/mcp_/managed_server.py +65 -38
  103. code_puppy/mcp_/manager.py +146 -52
  104. code_puppy/mcp_/mcp_logs.py +224 -0
  105. code_puppy/mcp_/registry.py +6 -6
  106. code_puppy/mcp_/server_registry_catalog.py +24 -5
  107. code_puppy/messaging/__init__.py +199 -2
  108. code_puppy/messaging/bus.py +610 -0
  109. code_puppy/messaging/commands.py +167 -0
  110. code_puppy/messaging/markdown_patches.py +57 -0
  111. code_puppy/messaging/message_queue.py +17 -48
  112. code_puppy/messaging/messages.py +500 -0
  113. code_puppy/messaging/queue_console.py +1 -24
  114. code_puppy/messaging/renderers.py +43 -146
  115. code_puppy/messaging/rich_renderer.py +1027 -0
  116. code_puppy/messaging/spinner/__init__.py +21 -5
  117. code_puppy/messaging/spinner/console_spinner.py +86 -51
  118. code_puppy/messaging/subagent_console.py +461 -0
  119. code_puppy/model_factory.py +634 -83
  120. code_puppy/model_utils.py +167 -0
  121. code_puppy/models.json +66 -68
  122. code_puppy/models_dev_api.json +1 -0
  123. code_puppy/models_dev_parser.py +592 -0
  124. code_puppy/plugins/__init__.py +164 -10
  125. code_puppy/plugins/antigravity_oauth/__init__.py +10 -0
  126. code_puppy/plugins/antigravity_oauth/accounts.py +406 -0
  127. code_puppy/plugins/antigravity_oauth/antigravity_model.py +704 -0
  128. code_puppy/plugins/antigravity_oauth/config.py +42 -0
  129. code_puppy/plugins/antigravity_oauth/constants.py +136 -0
  130. code_puppy/plugins/antigravity_oauth/oauth.py +478 -0
  131. code_puppy/plugins/antigravity_oauth/register_callbacks.py +406 -0
  132. code_puppy/plugins/antigravity_oauth/storage.py +271 -0
  133. code_puppy/plugins/antigravity_oauth/test_plugin.py +319 -0
  134. code_puppy/plugins/antigravity_oauth/token.py +167 -0
  135. code_puppy/plugins/antigravity_oauth/transport.py +767 -0
  136. code_puppy/plugins/antigravity_oauth/utils.py +169 -0
  137. code_puppy/plugins/chatgpt_oauth/__init__.py +8 -0
  138. code_puppy/plugins/chatgpt_oauth/config.py +52 -0
  139. code_puppy/plugins/chatgpt_oauth/oauth_flow.py +328 -0
  140. code_puppy/plugins/chatgpt_oauth/register_callbacks.py +94 -0
  141. code_puppy/plugins/chatgpt_oauth/test_plugin.py +293 -0
  142. code_puppy/plugins/chatgpt_oauth/utils.py +489 -0
  143. code_puppy/plugins/claude_code_oauth/README.md +167 -0
  144. code_puppy/plugins/claude_code_oauth/SETUP.md +93 -0
  145. code_puppy/plugins/claude_code_oauth/__init__.py +6 -0
  146. code_puppy/plugins/claude_code_oauth/config.py +50 -0
  147. code_puppy/plugins/claude_code_oauth/register_callbacks.py +308 -0
  148. code_puppy/plugins/claude_code_oauth/test_plugin.py +283 -0
  149. code_puppy/plugins/claude_code_oauth/utils.py +518 -0
  150. code_puppy/plugins/customizable_commands/__init__.py +0 -0
  151. code_puppy/plugins/customizable_commands/register_callbacks.py +169 -0
  152. code_puppy/plugins/example_custom_command/README.md +280 -0
  153. code_puppy/plugins/example_custom_command/register_callbacks.py +2 -2
  154. code_puppy/plugins/file_permission_handler/__init__.py +4 -0
  155. code_puppy/plugins/file_permission_handler/register_callbacks.py +523 -0
  156. code_puppy/plugins/frontend_emitter/__init__.py +25 -0
  157. code_puppy/plugins/frontend_emitter/emitter.py +121 -0
  158. code_puppy/plugins/frontend_emitter/register_callbacks.py +261 -0
  159. code_puppy/plugins/oauth_puppy_html.py +228 -0
  160. code_puppy/plugins/shell_safety/__init__.py +6 -0
  161. code_puppy/plugins/shell_safety/agent_shell_safety.py +69 -0
  162. code_puppy/plugins/shell_safety/command_cache.py +156 -0
  163. code_puppy/plugins/shell_safety/register_callbacks.py +202 -0
  164. code_puppy/prompts/antigravity_system_prompt.md +1 -0
  165. code_puppy/prompts/codex_system_prompt.md +310 -0
  166. code_puppy/pydantic_patches.py +131 -0
  167. code_puppy/reopenable_async_client.py +8 -8
  168. code_puppy/round_robin_model.py +9 -12
  169. code_puppy/session_storage.py +2 -1
  170. code_puppy/status_display.py +21 -4
  171. code_puppy/summarization_agent.py +41 -13
  172. code_puppy/terminal_utils.py +418 -0
  173. code_puppy/tools/__init__.py +37 -1
  174. code_puppy/tools/agent_tools.py +536 -52
  175. code_puppy/tools/browser/__init__.py +37 -0
  176. code_puppy/tools/browser/browser_control.py +19 -23
  177. code_puppy/tools/browser/browser_interactions.py +41 -48
  178. code_puppy/tools/browser/browser_locators.py +36 -38
  179. code_puppy/tools/browser/browser_manager.py +316 -0
  180. code_puppy/tools/browser/browser_navigation.py +16 -16
  181. code_puppy/tools/browser/browser_screenshot.py +79 -143
  182. code_puppy/tools/browser/browser_scripts.py +32 -42
  183. code_puppy/tools/browser/browser_workflows.py +44 -27
  184. code_puppy/tools/browser/chromium_terminal_manager.py +259 -0
  185. code_puppy/tools/browser/terminal_command_tools.py +521 -0
  186. code_puppy/tools/browser/terminal_screenshot_tools.py +556 -0
  187. code_puppy/tools/browser/terminal_tools.py +525 -0
  188. code_puppy/tools/command_runner.py +930 -147
  189. code_puppy/tools/common.py +1113 -5
  190. code_puppy/tools/display.py +84 -0
  191. code_puppy/tools/file_modifications.py +288 -89
  192. code_puppy/tools/file_operations.py +226 -154
  193. code_puppy/tools/subagent_context.py +158 -0
  194. code_puppy/uvx_detection.py +242 -0
  195. code_puppy/version_checker.py +30 -11
  196. code_puppy-0.0.366.data/data/code_puppy/models.json +110 -0
  197. code_puppy-0.0.366.data/data/code_puppy/models_dev_api.json +1 -0
  198. {code_puppy-0.0.214.dist-info → code_puppy-0.0.366.dist-info}/METADATA +149 -75
  199. code_puppy-0.0.366.dist-info/RECORD +217 -0
  200. {code_puppy-0.0.214.dist-info → code_puppy-0.0.366.dist-info}/WHEEL +1 -1
  201. code_puppy/command_line/mcp/add_command.py +0 -183
  202. code_puppy/messaging/spinner/textual_spinner.py +0 -106
  203. code_puppy/tools/browser/camoufox_manager.py +0 -216
  204. code_puppy/tools/browser/vqa_agent.py +0 -70
  205. code_puppy/tui/__init__.py +0 -10
  206. code_puppy/tui/app.py +0 -1105
  207. code_puppy/tui/components/__init__.py +0 -21
  208. code_puppy/tui/components/chat_view.py +0 -551
  209. code_puppy/tui/components/command_history_modal.py +0 -218
  210. code_puppy/tui/components/copy_button.py +0 -139
  211. code_puppy/tui/components/custom_widgets.py +0 -63
  212. code_puppy/tui/components/human_input_modal.py +0 -175
  213. code_puppy/tui/components/input_area.py +0 -167
  214. code_puppy/tui/components/sidebar.py +0 -309
  215. code_puppy/tui/components/status_bar.py +0 -185
  216. code_puppy/tui/messages.py +0 -27
  217. code_puppy/tui/models/__init__.py +0 -8
  218. code_puppy/tui/models/chat_message.py +0 -25
  219. code_puppy/tui/models/command_history.py +0 -89
  220. code_puppy/tui/models/enums.py +0 -24
  221. code_puppy/tui/screens/__init__.py +0 -17
  222. code_puppy/tui/screens/autosave_picker.py +0 -175
  223. code_puppy/tui/screens/help.py +0 -130
  224. code_puppy/tui/screens/mcp_install_wizard.py +0 -803
  225. code_puppy/tui/screens/settings.py +0 -306
  226. code_puppy/tui/screens/tools.py +0 -74
  227. code_puppy/tui_state.py +0 -55
  228. code_puppy-0.0.214.data/data/code_puppy/models.json +0 -112
  229. code_puppy-0.0.214.dist-info/RECORD +0 -131
  230. {code_puppy-0.0.214.dist-info → code_puppy-0.0.366.dist-info}/entry_points.txt +0 -0
  231. {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()
@@ -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,,