code-puppy 0.0.169__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 (243) hide show
  1. code_puppy/__init__.py +7 -1
  2. code_puppy/agents/__init__.py +8 -8
  3. code_puppy/agents/agent_c_reviewer.py +155 -0
  4. code_puppy/agents/agent_code_puppy.py +9 -2
  5. code_puppy/agents/agent_code_reviewer.py +90 -0
  6. code_puppy/agents/agent_cpp_reviewer.py +132 -0
  7. code_puppy/agents/agent_creator_agent.py +48 -9
  8. code_puppy/agents/agent_golang_reviewer.py +151 -0
  9. code_puppy/agents/agent_javascript_reviewer.py +160 -0
  10. code_puppy/agents/agent_manager.py +146 -199
  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 +90 -0
  15. code_puppy/agents/agent_qa_expert.py +163 -0
  16. code_puppy/agents/agent_qa_kitten.py +208 -0
  17. code_puppy/agents/agent_security_auditor.py +181 -0
  18. code_puppy/agents/agent_terminal_qa.py +323 -0
  19. code_puppy/agents/agent_typescript_reviewer.py +166 -0
  20. code_puppy/agents/base_agent.py +1713 -1
  21. code_puppy/agents/event_stream_handler.py +350 -0
  22. code_puppy/agents/json_agent.py +12 -1
  23. code_puppy/agents/pack/__init__.py +34 -0
  24. code_puppy/agents/pack/bloodhound.py +304 -0
  25. code_puppy/agents/pack/husky.py +321 -0
  26. code_puppy/agents/pack/retriever.py +393 -0
  27. code_puppy/agents/pack/shepherd.py +348 -0
  28. code_puppy/agents/pack/terrier.py +287 -0
  29. code_puppy/agents/pack/watchdog.py +367 -0
  30. code_puppy/agents/prompt_reviewer.py +145 -0
  31. code_puppy/agents/subagent_stream_handler.py +276 -0
  32. code_puppy/api/__init__.py +13 -0
  33. code_puppy/api/app.py +169 -0
  34. code_puppy/api/main.py +21 -0
  35. code_puppy/api/pty_manager.py +446 -0
  36. code_puppy/api/routers/__init__.py +12 -0
  37. code_puppy/api/routers/agents.py +36 -0
  38. code_puppy/api/routers/commands.py +217 -0
  39. code_puppy/api/routers/config.py +74 -0
  40. code_puppy/api/routers/sessions.py +232 -0
  41. code_puppy/api/templates/terminal.html +361 -0
  42. code_puppy/api/websocket.py +154 -0
  43. code_puppy/callbacks.py +174 -4
  44. code_puppy/chatgpt_codex_client.py +283 -0
  45. code_puppy/claude_cache_client.py +586 -0
  46. code_puppy/cli_runner.py +916 -0
  47. code_puppy/command_line/add_model_menu.py +1079 -0
  48. code_puppy/command_line/agent_menu.py +395 -0
  49. code_puppy/command_line/attachments.py +395 -0
  50. code_puppy/command_line/autosave_menu.py +605 -0
  51. code_puppy/command_line/clipboard.py +527 -0
  52. code_puppy/command_line/colors_menu.py +520 -0
  53. code_puppy/command_line/command_handler.py +233 -627
  54. code_puppy/command_line/command_registry.py +150 -0
  55. code_puppy/command_line/config_commands.py +715 -0
  56. code_puppy/command_line/core_commands.py +792 -0
  57. code_puppy/command_line/diff_menu.py +863 -0
  58. code_puppy/command_line/load_context_completion.py +15 -22
  59. code_puppy/command_line/mcp/base.py +1 -4
  60. code_puppy/command_line/mcp/catalog_server_installer.py +175 -0
  61. code_puppy/command_line/mcp/custom_server_form.py +688 -0
  62. code_puppy/command_line/mcp/custom_server_installer.py +195 -0
  63. code_puppy/command_line/mcp/edit_command.py +148 -0
  64. code_puppy/command_line/mcp/handler.py +9 -4
  65. code_puppy/command_line/mcp/help_command.py +6 -5
  66. code_puppy/command_line/mcp/install_command.py +16 -27
  67. code_puppy/command_line/mcp/install_menu.py +685 -0
  68. code_puppy/command_line/mcp/list_command.py +3 -3
  69. code_puppy/command_line/mcp/logs_command.py +174 -65
  70. code_puppy/command_line/mcp/remove_command.py +2 -2
  71. code_puppy/command_line/mcp/restart_command.py +12 -4
  72. code_puppy/command_line/mcp/search_command.py +17 -11
  73. code_puppy/command_line/mcp/start_all_command.py +22 -13
  74. code_puppy/command_line/mcp/start_command.py +50 -31
  75. code_puppy/command_line/mcp/status_command.py +6 -7
  76. code_puppy/command_line/mcp/stop_all_command.py +11 -8
  77. code_puppy/command_line/mcp/stop_command.py +11 -10
  78. code_puppy/command_line/mcp/test_command.py +2 -2
  79. code_puppy/command_line/mcp/utils.py +1 -1
  80. code_puppy/command_line/mcp/wizard_utils.py +22 -18
  81. code_puppy/command_line/mcp_completion.py +174 -0
  82. code_puppy/command_line/model_picker_completion.py +89 -30
  83. code_puppy/command_line/model_settings_menu.py +884 -0
  84. code_puppy/command_line/motd.py +14 -8
  85. code_puppy/command_line/onboarding_slides.py +179 -0
  86. code_puppy/command_line/onboarding_wizard.py +340 -0
  87. code_puppy/command_line/pin_command_completion.py +329 -0
  88. code_puppy/command_line/prompt_toolkit_completion.py +626 -75
  89. code_puppy/command_line/session_commands.py +296 -0
  90. code_puppy/command_line/utils.py +54 -0
  91. code_puppy/config.py +1181 -51
  92. code_puppy/error_logging.py +118 -0
  93. code_puppy/gemini_code_assist.py +385 -0
  94. code_puppy/gemini_model.py +602 -0
  95. code_puppy/http_utils.py +220 -104
  96. code_puppy/keymap.py +128 -0
  97. code_puppy/main.py +5 -594
  98. code_puppy/{mcp → mcp_}/__init__.py +17 -0
  99. code_puppy/{mcp → mcp_}/async_lifecycle.py +35 -4
  100. code_puppy/{mcp → mcp_}/blocking_startup.py +70 -43
  101. code_puppy/{mcp → mcp_}/captured_stdio_server.py +2 -2
  102. code_puppy/{mcp → mcp_}/config_wizard.py +5 -5
  103. code_puppy/{mcp → mcp_}/dashboard.py +15 -6
  104. code_puppy/{mcp → mcp_}/examples/retry_example.py +4 -1
  105. code_puppy/{mcp → mcp_}/managed_server.py +66 -39
  106. code_puppy/{mcp → mcp_}/manager.py +146 -52
  107. code_puppy/mcp_/mcp_logs.py +224 -0
  108. code_puppy/{mcp → mcp_}/registry.py +6 -6
  109. code_puppy/{mcp → mcp_}/server_registry_catalog.py +25 -8
  110. code_puppy/messaging/__init__.py +199 -2
  111. code_puppy/messaging/bus.py +610 -0
  112. code_puppy/messaging/commands.py +167 -0
  113. code_puppy/messaging/markdown_patches.py +57 -0
  114. code_puppy/messaging/message_queue.py +17 -48
  115. code_puppy/messaging/messages.py +500 -0
  116. code_puppy/messaging/queue_console.py +1 -24
  117. code_puppy/messaging/renderers.py +43 -146
  118. code_puppy/messaging/rich_renderer.py +1027 -0
  119. code_puppy/messaging/spinner/__init__.py +33 -5
  120. code_puppy/messaging/spinner/console_spinner.py +92 -52
  121. code_puppy/messaging/spinner/spinner_base.py +29 -0
  122. code_puppy/messaging/subagent_console.py +461 -0
  123. code_puppy/model_factory.py +686 -80
  124. code_puppy/model_utils.py +167 -0
  125. code_puppy/models.json +86 -104
  126. code_puppy/models_dev_api.json +1 -0
  127. code_puppy/models_dev_parser.py +592 -0
  128. code_puppy/plugins/__init__.py +164 -10
  129. code_puppy/plugins/antigravity_oauth/__init__.py +10 -0
  130. code_puppy/plugins/antigravity_oauth/accounts.py +406 -0
  131. code_puppy/plugins/antigravity_oauth/antigravity_model.py +704 -0
  132. code_puppy/plugins/antigravity_oauth/config.py +42 -0
  133. code_puppy/plugins/antigravity_oauth/constants.py +136 -0
  134. code_puppy/plugins/antigravity_oauth/oauth.py +478 -0
  135. code_puppy/plugins/antigravity_oauth/register_callbacks.py +406 -0
  136. code_puppy/plugins/antigravity_oauth/storage.py +271 -0
  137. code_puppy/plugins/antigravity_oauth/test_plugin.py +319 -0
  138. code_puppy/plugins/antigravity_oauth/token.py +167 -0
  139. code_puppy/plugins/antigravity_oauth/transport.py +767 -0
  140. code_puppy/plugins/antigravity_oauth/utils.py +169 -0
  141. code_puppy/plugins/chatgpt_oauth/__init__.py +8 -0
  142. code_puppy/plugins/chatgpt_oauth/config.py +52 -0
  143. code_puppy/plugins/chatgpt_oauth/oauth_flow.py +328 -0
  144. code_puppy/plugins/chatgpt_oauth/register_callbacks.py +94 -0
  145. code_puppy/plugins/chatgpt_oauth/test_plugin.py +293 -0
  146. code_puppy/plugins/chatgpt_oauth/utils.py +489 -0
  147. code_puppy/plugins/claude_code_oauth/README.md +167 -0
  148. code_puppy/plugins/claude_code_oauth/SETUP.md +93 -0
  149. code_puppy/plugins/claude_code_oauth/__init__.py +6 -0
  150. code_puppy/plugins/claude_code_oauth/config.py +50 -0
  151. code_puppy/plugins/claude_code_oauth/register_callbacks.py +308 -0
  152. code_puppy/plugins/claude_code_oauth/test_plugin.py +283 -0
  153. code_puppy/plugins/claude_code_oauth/utils.py +518 -0
  154. code_puppy/plugins/customizable_commands/__init__.py +0 -0
  155. code_puppy/plugins/customizable_commands/register_callbacks.py +169 -0
  156. code_puppy/plugins/example_custom_command/README.md +280 -0
  157. code_puppy/plugins/example_custom_command/register_callbacks.py +51 -0
  158. code_puppy/plugins/file_permission_handler/__init__.py +4 -0
  159. code_puppy/plugins/file_permission_handler/register_callbacks.py +523 -0
  160. code_puppy/plugins/frontend_emitter/__init__.py +25 -0
  161. code_puppy/plugins/frontend_emitter/emitter.py +121 -0
  162. code_puppy/plugins/frontend_emitter/register_callbacks.py +261 -0
  163. code_puppy/plugins/oauth_puppy_html.py +228 -0
  164. code_puppy/plugins/shell_safety/__init__.py +6 -0
  165. code_puppy/plugins/shell_safety/agent_shell_safety.py +69 -0
  166. code_puppy/plugins/shell_safety/command_cache.py +156 -0
  167. code_puppy/plugins/shell_safety/register_callbacks.py +202 -0
  168. code_puppy/prompts/antigravity_system_prompt.md +1 -0
  169. code_puppy/prompts/codex_system_prompt.md +310 -0
  170. code_puppy/pydantic_patches.py +131 -0
  171. code_puppy/reopenable_async_client.py +8 -8
  172. code_puppy/round_robin_model.py +10 -15
  173. code_puppy/session_storage.py +294 -0
  174. code_puppy/status_display.py +21 -4
  175. code_puppy/summarization_agent.py +52 -14
  176. code_puppy/terminal_utils.py +418 -0
  177. code_puppy/tools/__init__.py +139 -6
  178. code_puppy/tools/agent_tools.py +548 -49
  179. code_puppy/tools/browser/__init__.py +37 -0
  180. code_puppy/tools/browser/browser_control.py +289 -0
  181. code_puppy/tools/browser/browser_interactions.py +545 -0
  182. code_puppy/tools/browser/browser_locators.py +640 -0
  183. code_puppy/tools/browser/browser_manager.py +316 -0
  184. code_puppy/tools/browser/browser_navigation.py +251 -0
  185. code_puppy/tools/browser/browser_screenshot.py +179 -0
  186. code_puppy/tools/browser/browser_scripts.py +462 -0
  187. code_puppy/tools/browser/browser_workflows.py +221 -0
  188. code_puppy/tools/browser/chromium_terminal_manager.py +259 -0
  189. code_puppy/tools/browser/terminal_command_tools.py +521 -0
  190. code_puppy/tools/browser/terminal_screenshot_tools.py +556 -0
  191. code_puppy/tools/browser/terminal_tools.py +525 -0
  192. code_puppy/tools/command_runner.py +941 -153
  193. code_puppy/tools/common.py +1146 -6
  194. code_puppy/tools/display.py +84 -0
  195. code_puppy/tools/file_modifications.py +288 -89
  196. code_puppy/tools/file_operations.py +352 -266
  197. code_puppy/tools/subagent_context.py +158 -0
  198. code_puppy/uvx_detection.py +242 -0
  199. code_puppy/version_checker.py +30 -11
  200. code_puppy-0.0.366.data/data/code_puppy/models.json +110 -0
  201. code_puppy-0.0.366.data/data/code_puppy/models_dev_api.json +1 -0
  202. {code_puppy-0.0.169.dist-info → code_puppy-0.0.366.dist-info}/METADATA +184 -67
  203. code_puppy-0.0.366.dist-info/RECORD +217 -0
  204. {code_puppy-0.0.169.dist-info → code_puppy-0.0.366.dist-info}/WHEEL +1 -1
  205. {code_puppy-0.0.169.dist-info → code_puppy-0.0.366.dist-info}/entry_points.txt +1 -0
  206. code_puppy/agent.py +0 -231
  207. code_puppy/agents/agent_orchestrator.json +0 -26
  208. code_puppy/agents/runtime_manager.py +0 -272
  209. code_puppy/command_line/mcp/add_command.py +0 -183
  210. code_puppy/command_line/meta_command_handler.py +0 -153
  211. code_puppy/message_history_processor.py +0 -490
  212. code_puppy/messaging/spinner/textual_spinner.py +0 -101
  213. code_puppy/state_management.py +0 -200
  214. code_puppy/tui/__init__.py +0 -10
  215. code_puppy/tui/app.py +0 -986
  216. code_puppy/tui/components/__init__.py +0 -21
  217. code_puppy/tui/components/chat_view.py +0 -550
  218. code_puppy/tui/components/command_history_modal.py +0 -218
  219. code_puppy/tui/components/copy_button.py +0 -139
  220. code_puppy/tui/components/custom_widgets.py +0 -63
  221. code_puppy/tui/components/human_input_modal.py +0 -175
  222. code_puppy/tui/components/input_area.py +0 -167
  223. code_puppy/tui/components/sidebar.py +0 -309
  224. code_puppy/tui/components/status_bar.py +0 -182
  225. code_puppy/tui/messages.py +0 -27
  226. code_puppy/tui/models/__init__.py +0 -8
  227. code_puppy/tui/models/chat_message.py +0 -25
  228. code_puppy/tui/models/command_history.py +0 -89
  229. code_puppy/tui/models/enums.py +0 -24
  230. code_puppy/tui/screens/__init__.py +0 -15
  231. code_puppy/tui/screens/help.py +0 -130
  232. code_puppy/tui/screens/mcp_install_wizard.py +0 -803
  233. code_puppy/tui/screens/settings.py +0 -290
  234. code_puppy/tui/screens/tools.py +0 -74
  235. code_puppy-0.0.169.data/data/code_puppy/models.json +0 -128
  236. code_puppy-0.0.169.dist-info/RECORD +0 -112
  237. /code_puppy/{mcp → mcp_}/circuit_breaker.py +0 -0
  238. /code_puppy/{mcp → mcp_}/error_isolation.py +0 -0
  239. /code_puppy/{mcp → mcp_}/health_monitor.py +0 -0
  240. /code_puppy/{mcp → mcp_}/retry_manager.py +0 -0
  241. /code_puppy/{mcp → mcp_}/status_tracker.py +0 -0
  242. /code_puppy/{mcp → mcp_}/system_tools.py +0 -0
  243. {code_puppy-0.0.169.dist-info → code_puppy-0.0.366.dist-info}/licenses/LICENSE +0 -0
@@ -1,290 +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
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
- }
31
-
32
- .setting-row {
33
- layout: horizontal;
34
- height: 3;
35
- margin: 0 0 1 0;
36
- }
37
-
38
- .setting-label {
39
- width: 20;
40
- text-align: right;
41
- padding: 1 1 0 0;
42
- }
43
-
44
- .setting-input {
45
- width: 1fr;
46
- margin: 0 0 0 1;
47
- }
48
-
49
- /* Additional styling for static input values */
50
- #yolo-static {
51
- padding: 1 0 0 0; /* Align text vertically with other inputs */
52
- color: $success; /* Use success color to emphasize it's enabled */
53
- }
54
-
55
- #settings-buttons {
56
- layout: horizontal;
57
- height: 3;
58
- align: center middle;
59
- }
60
-
61
- #save-button, #cancel-button {
62
- margin: 0 1;
63
- }
64
- """
65
-
66
- def __init__(self, **kwargs):
67
- super().__init__(**kwargs)
68
- self.settings_data = {}
69
-
70
- def compose(self) -> ComposeResult:
71
- with Container(id="settings-dialog"):
72
- yield Static("⚙️ Settings Configuration", id="settings-title")
73
- with Container(id="settings-form"):
74
- with Container(classes="setting-row"):
75
- yield Static("Puppy Name:", classes="setting-label")
76
- yield Input(id="puppy-name-input", classes="setting-input")
77
-
78
- with Container(classes="setting-row"):
79
- yield Static("Owner Name:", classes="setting-label")
80
- yield Input(id="owner-name-input", classes="setting-input")
81
-
82
- with Container(classes="setting-row"):
83
- yield Static("Model:", classes="setting-label")
84
- yield Select([], id="model-select", classes="setting-input")
85
-
86
- with Container(classes="setting-row"):
87
- yield Static("YOLO Mode:", classes="setting-label")
88
- yield Static(
89
- "✅ Enabled (always on in TUI)",
90
- id="yolo-static",
91
- classes="setting-input",
92
- )
93
-
94
- with Container(classes="setting-row"):
95
- yield Static("Protected Tokens:", classes="setting-label")
96
- yield Input(
97
- id="protected-tokens-input",
98
- classes="setting-input",
99
- placeholder="e.g., 50000",
100
- )
101
-
102
- with Container(classes="setting-row"):
103
- yield Static("Compaction Strategy:", classes="setting-label")
104
- yield Select(
105
- [
106
- ("Summarization", "summarization"),
107
- ("Truncation", "truncation"),
108
- ],
109
- id="compaction-strategy-select",
110
- classes="setting-input",
111
- )
112
-
113
- with Container(classes="setting-row"):
114
- yield Static("Compaction Threshold:", classes="setting-label")
115
- yield Input(
116
- id="compaction-threshold-input",
117
- classes="setting-input",
118
- placeholder="e.g., 0.85",
119
- )
120
-
121
- with Container(id="settings-buttons"):
122
- yield Button("Save", id="save-button", variant="primary")
123
- yield Button("Cancel", id="cancel-button")
124
-
125
- def on_mount(self) -> None:
126
- """Load current settings when the screen mounts."""
127
- from code_puppy.config import (
128
- get_model_name,
129
- get_owner_name,
130
- get_protected_token_count,
131
- get_puppy_name,
132
- get_compaction_strategy,
133
- get_compaction_threshold,
134
- )
135
-
136
- # Load current values
137
- puppy_name_input = self.query_one("#puppy-name-input", Input)
138
- owner_name_input = self.query_one("#owner-name-input", Input)
139
- model_select = self.query_one("#model-select", Select)
140
- protected_tokens_input = self.query_one("#protected-tokens-input", Input)
141
- compaction_threshold_input = self.query_one(
142
- "#compaction-threshold-input", Input
143
- )
144
- compaction_strategy_select = self.query_one(
145
- "#compaction-strategy-select", Select
146
- )
147
-
148
- puppy_name_input.value = get_puppy_name() or ""
149
- owner_name_input.value = get_owner_name() or ""
150
- protected_tokens_input.value = str(get_protected_token_count())
151
- compaction_threshold_input.value = str(get_compaction_threshold())
152
- compaction_strategy_select.value = get_compaction_strategy()
153
-
154
- # Load available models
155
- self.load_model_options(model_select)
156
-
157
- # Set current model selection
158
- current_model = get_model_name()
159
- model_select.value = current_model
160
-
161
- # YOLO mode is always enabled in TUI mode
162
-
163
- def load_model_options(self, model_select):
164
- """Load available models into the model select widget."""
165
- try:
166
- # Use the same method that interactive mode uses to load models
167
-
168
- from code_puppy.model_factory import ModelFactory
169
-
170
- # Load models using the same path and method as interactive mode
171
- models_data = ModelFactory.load_config()
172
-
173
- # Create options as (display_name, model_name) tuples
174
- model_options = []
175
- for model_name, model_config in models_data.items():
176
- model_type = model_config.get("type", "unknown")
177
- display_name = f"{model_name} ({model_type})"
178
- model_options.append((display_name, model_name))
179
-
180
- # Set the options on the select widget
181
- model_select.set_options(model_options)
182
-
183
- except Exception:
184
- # Fallback to a basic option if loading fails
185
- model_select.set_options([("gpt-4.1 (openai)", "gpt-4.1")])
186
-
187
- @on(Button.Pressed, "#save-button")
188
- def save_settings(self) -> None:
189
- """Save the modified settings."""
190
- from code_puppy.config import (
191
- set_config_value,
192
- set_model_name,
193
- get_model_context_length,
194
- )
195
-
196
- try:
197
- # Get values from inputs
198
- puppy_name = self.query_one("#puppy-name-input", Input).value.strip()
199
- owner_name = self.query_one("#owner-name-input", Input).value.strip()
200
- selected_model = self.query_one("#model-select", Select).value
201
- yolo_mode = "true" # Always set to true in TUI mode
202
- protected_tokens = self.query_one(
203
- "#protected-tokens-input", Input
204
- ).value.strip()
205
- compaction_threshold = self.query_one(
206
- "#compaction-threshold-input", Input
207
- ).value.strip()
208
-
209
- # Validate and save
210
- if puppy_name:
211
- set_config_value("puppy_name", puppy_name)
212
- if owner_name:
213
- set_config_value("owner_name", owner_name)
214
-
215
- # Save model selection
216
- if selected_model:
217
- set_model_name(selected_model)
218
-
219
- set_config_value("yolo_mode", yolo_mode)
220
-
221
- # Validate and save protected tokens
222
- if protected_tokens.isdigit():
223
- tokens_value = int(protected_tokens)
224
- model_context_length = get_model_context_length()
225
- max_protected_tokens = int(model_context_length * 0.75)
226
-
227
- if tokens_value >= 1000: # Minimum validation
228
- if tokens_value <= max_protected_tokens: # Maximum validation
229
- set_config_value("protected_token_count", protected_tokens)
230
- else:
231
- raise ValueError(
232
- f"Protected tokens must not exceed 75% of model context length ({max_protected_tokens} tokens for current model)"
233
- )
234
- else:
235
- raise ValueError("Protected tokens must be at least 1000")
236
- elif protected_tokens: # If not empty but not digit
237
- raise ValueError("Protected tokens must be a valid number")
238
-
239
- # Validate and save compaction threshold
240
- if compaction_threshold:
241
- try:
242
- threshold_value = float(compaction_threshold)
243
- if 0.8 <= threshold_value <= 0.95: # Same bounds as config function
244
- set_config_value("compaction_threshold", compaction_threshold)
245
- else:
246
- raise ValueError(
247
- "Compaction threshold must be between 0.8 and 0.95"
248
- )
249
- except ValueError as ve:
250
- if "must be between" in str(ve):
251
- raise ve
252
- else:
253
- raise ValueError(
254
- "Compaction threshold must be a valid decimal number"
255
- )
256
-
257
- # Save compaction strategy
258
- compaction_strategy = self.query_one(
259
- "#compaction-strategy-select", Select
260
- ).value
261
- if compaction_strategy in ["summarization", "truncation"]:
262
- set_config_value("compaction_strategy", compaction_strategy)
263
-
264
- # Return success message with model change info
265
- message = "Settings saved successfully!"
266
- if selected_model:
267
- message += f" Model switched to: {selected_model}"
268
-
269
- self.dismiss(
270
- {
271
- "success": True,
272
- "message": message,
273
- "model_changed": bool(selected_model),
274
- }
275
- )
276
-
277
- except Exception as e:
278
- self.dismiss(
279
- {"success": False, "message": f"Error saving settings: {str(e)}"}
280
- )
281
-
282
- @on(Button.Pressed, "#cancel-button")
283
- def cancel_settings(self) -> None:
284
- """Cancel settings changes."""
285
- self.dismiss({"success": False, "message": "Settings cancelled"})
286
-
287
- def on_key(self, event) -> None:
288
- """Handle key events."""
289
- if event.key == "escape":
290
- 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()
@@ -1,128 +0,0 @@
1
- {
2
- "gpt-5": {
3
- "type": "openai",
4
- "name": "gpt-5",
5
- "context_length": 400000
6
- },
7
- "Cerebras-Qwen3-Coder-480b": {
8
- "type": "cerebras",
9
- "name": "qwen-3-coder-480b",
10
- "custom_endpoint": {
11
- "url": "https://api.cerebras.ai/v1",
12
- "api_key": "$CEREBRAS_API_KEY"
13
- },
14
- "context_length": 131072
15
- },
16
- "Cerebras-Qwen3-235b-a22b-instruct-2507": {
17
- "type": "cerebras",
18
- "name": "qwen-3-235b-a22b-instruct-2507",
19
- "custom_endpoint": {
20
- "url": "https://api.cerebras.ai/v1",
21
- "api_key": "$CEREBRAS_API_KEY"
22
- },
23
- "context_length": 64000
24
- },
25
- "Cerebras-gpt-oss-120b": {
26
- "type": "cerebras",
27
- "name": "gpt-oss-120b",
28
- "custom_endpoint": {
29
- "url": "https://api.cerebras.ai/v1",
30
- "api_key": "$CEREBRAS_API_KEY"
31
- },
32
- "context_length": 131072
33
- },
34
- "Cerebras-Qwen-3-32b": {
35
- "type": "cerebras",
36
- "name": "qwen-3-32b",
37
- "custom_endpoint": {
38
- "url": "https://api.cerebras.ai/v1",
39
- "api_key": "$CEREBRAS_API_KEY"
40
- },
41
- "context_length": 65536
42
- },
43
- "claude-4-0-sonnet": {
44
- "type": "anthropic",
45
- "name": "claude-sonnet-4-20250514",
46
- "context_length": 200000
47
- },
48
- "o3": {
49
- "type": "openai",
50
- "name": "o3",
51
- "context_length": 200000
52
- },
53
- "grok-4": {
54
- "type": "custom_openai",
55
- "name": "grok-4",
56
- "custom_endpoint": {
57
- "url": "https://api.x.ai/v1",
58
- "api_key": "$XAI_API_KEY"
59
- },
60
- "context_length": 256000
61
- },
62
- "grok-code-fast-1": {
63
- "type": "custom_openai",
64
- "name": "grok-code-fast-1",
65
- "custom_endpoint": {
66
- "url": "https://api.x.ai/v1",
67
- "api_key": "$XAI_API_KEY"
68
- },
69
- "context_length": 256000
70
- },
71
- "gemini-2.5-flash-preview-05-20": {
72
- "type": "gemini",
73
- "name": "gemini-2.5-flash-preview-05-20",
74
- "context_length": 1048576
75
- },
76
- "gpt-4.1": {
77
- "type": "openai",
78
- "name": "gpt-4.1",
79
- "context_length": 1000000
80
- },
81
- "Qwen/Qwen3-235B-A22B-fp8-tput": {
82
- "type": "custom_openai",
83
- "name": "Qwen/Qwen3-235B-A22B-fp8-tput",
84
- "custom_endpoint": {
85
- "url": "https://api.together.xyz/v1",
86
- "api_key": "$TOGETHER_API_KEY"
87
- },
88
- "context_length": 64000
89
- },
90
- "azure-gpt-4.1": {
91
- "type": "azure_openai",
92
- "name": "gpt-4.1",
93
- "api_version": "2024-12-01-preview",
94
- "api_key": "$AZURE_OPENAI_API_KEY",
95
- "azure_endpoint": "$AZURE_OPENAI_ENDPOINT",
96
- "context_length": 128000
97
- },
98
- "gpt-4.1-mini": {
99
- "type": "openai",
100
- "name": "gpt-4.1-mini",
101
- "context_length": 128000
102
- },
103
- "gpt-4.1-nano": {
104
- "type": "openai",
105
- "name": "gpt-4.1-nano",
106
- "context_length": 128000
107
- },
108
- "gpt-4.1-custom": {
109
- "type": "custom_openai",
110
- "name": "gpt-4.1-custom",
111
- "custom_endpoint": {
112
- "url": "https://my.cute.endpoint:8080",
113
- "headers": {
114
- "X-Api-Key": "$OPENAI_API_KEY"
115
- },
116
- "ca_certs_path": "/path/to/cert.pem"
117
- },
118
- "context_length": 128000
119
- },
120
- "ollama-llama3.3": {
121
- "type": "custom_openai",
122
- "name": "llama3.3",
123
- "custom_endpoint": {
124
- "url": "http://localhost:11434/v1"
125
- },
126
- "context_length": 8192
127
- }
128
- }
@@ -1,112 +0,0 @@
1
- code_puppy/__init__.py,sha256=ehbM1-wMjNmOXk_DBhhJECFyBv2dRHwwo7ucjHeM68E,107
2
- code_puppy/__main__.py,sha256=pDVssJOWP8A83iFkxMLY9YteHYat0EyWDQqMkKHpWp4,203
3
- code_puppy/agent.py,sha256=wCARhq7PcD38c4l83fuXm4Us_6c1TXVa0U7TnBnNPEY,8064
4
- code_puppy/callbacks.py,sha256=6wYB6K_fGSCkKKEFaYOYkJT45WaV5W_NhUIzcvVH_nU,5060
5
- code_puppy/config.py,sha256=J8XU0iOPtfzrkDD49b4TdrdHoQmW2kaP-25PPbGGdKU,16386
6
- code_puppy/http_utils.py,sha256=XJ1ItAW3I4zdJNzybV17Z8Y58NoFyAJEjUg7I69SXlw,8096
7
- code_puppy/main.py,sha256=tYLfhUjPTJ-4S1r-pr-jSbn6kIU1iYvt2Z8lxI7zDFY,22220
8
- code_puppy/message_history_processor.py,sha256=zzeOSUC1Wpsry-z2MD6pQWk2wt1axGSOKaGR2v22_qQ,18825
9
- code_puppy/model_factory.py,sha256=z9vQbcGllgMwU0On8rPvzYxkygW2Uyd3NJmRzbKv-is,13759
10
- code_puppy/models.json,sha256=iXmLZGflnQcu2DRh4WUlgAhoXdvoxUc7KBhB8YxawXM,3088
11
- code_puppy/reopenable_async_client.py,sha256=4UJRaMp5np8cbef9F0zKQ7TPKOfyf5U-Kv-0zYUWDho,8274
12
- code_puppy/round_robin_model.py,sha256=SEN3VSwTgC5wHjx2sZsHQLPWOycf4jGwzB-EydgqkdY,5643
13
- code_puppy/state_management.py,sha256=o4mNBCPblRyVrNBH-992-1YqffgH6AKHU7iZRqgP1LI,5925
14
- code_puppy/status_display.py,sha256=F6eEAkGePDp4StM2BWj-uLLQTDGtJrf0IufzCeP1rRg,8336
15
- code_puppy/summarization_agent.py,sha256=kos4_YK-l_YjYRq4Fs4X5YoTUbmAcDhhPqefL-rdenI,3197
16
- code_puppy/version_checker.py,sha256=bjLDmgGPrl7XnYwX1u13O8uFlsfikV90PK6nbA9Z9QU,1150
17
- code_puppy/agents/__init__.py,sha256=SwtHGNG1GIgDBv7y3EGIXOXEWrG_Ou7fEknNgFbrHv8,594
18
- code_puppy/agents/agent_code_puppy.py,sha256=sbuQxLzlkMbPOyLbILbXOAHecRsxbFdQt13HJ_GEqQo,7972
19
- code_puppy/agents/agent_creator_agent.py,sha256=chxZlvvl_12ol1d9V2WF7cjE1Px9d-S6NEH3CaKg_lc,23270
20
- code_puppy/agents/agent_manager.py,sha256=nXvro6fpX8KA-NedRoVJuhJW966trrePOrH4eAnqq40,17034
21
- code_puppy/agents/agent_orchestrator.json,sha256=Iqnc0p6ICoAlUTMkEsi1XXMXJi4pdxVnWZUMaih6s5o,1267
22
- code_puppy/agents/base_agent.py,sha256=XYSff6IQX9Z6C7hPVbN_YXC2xfjwd268e2jtG3ZGnVk,3450
23
- code_puppy/agents/json_agent.py,sha256=y6AYE3Fx9LhmemcPzt46d7359MNnkGIjU83YBGNer2g,4533
24
- code_puppy/agents/runtime_manager.py,sha256=fUOBpmETo3wTyLc5wWBfGKSX1HFRQWSpuwxYAOyA-_8,10059
25
- code_puppy/command_line/__init__.py,sha256=y7WeRemfYppk8KVbCGeAIiTuiOszIURCDjOMZv_YRmU,45
26
- code_puppy/command_line/command_handler.py,sha256=Owf5ZFipN25XTy_wNrw7nOb22T0D0WVRxnGdB3A-4Cs,25960
27
- code_puppy/command_line/file_path_completion.py,sha256=gw8NpIxa6GOpczUJRyh7VNZwoXKKn-yvCqit7h2y6Gg,2931
28
- code_puppy/command_line/load_context_completion.py,sha256=6eZxV6Bs-EFwZjN93V8ZDZUC-6RaWxvtZk-04Wtikyw,2240
29
- code_puppy/command_line/meta_command_handler.py,sha256=80aK5JQOaqjt149qBmSsM02uy2Cikkee8zaQnu5u2KQ,5712
30
- code_puppy/command_line/model_picker_completion.py,sha256=adxp3NZaDV67YqaGv0SG7WVvOTXN0UwkkLqxTsknAvs,4126
31
- code_puppy/command_line/motd.py,sha256=PEdkp3ZnydVfvd7mNJylm8YyFNUKg9jmY6uwkA1em8c,2152
32
- code_puppy/command_line/prompt_toolkit_completion.py,sha256=PLb1Yt_65iQI2mzPEPxPsSaRww5Ur951Qn-K-TLMCGQ,10006
33
- code_puppy/command_line/utils.py,sha256=7eyxDHjPjPB9wGDJQQcXV_zOsGdYsFgI0SGCetVmTqE,1251
34
- code_puppy/command_line/mcp/__init__.py,sha256=0-OQuwjq_pLiTVJ1_NrirVwdRerghyKs_MTZkwPC7YY,315
35
- code_puppy/command_line/mcp/add_command.py,sha256=RghGmOCjwwYJfrbLiV5UZojMA4-FNPlM04LKci0rpAw,6415
36
- code_puppy/command_line/mcp/base.py,sha256=nIDv0S5LmGuYtYjVAa9yw3NuSvldxDB17YEEvhbEL1s,889
37
- code_puppy/command_line/mcp/handler.py,sha256=ZPWNfJEwGurNQh4KUCRRRsHXuB0kHlaGG4oLN1sFhBg,4412
38
- code_puppy/command_line/mcp/help_command.py,sha256=Z55-ObpUQFMdqMWAkSJkRi_v2uZhDFVxg6DcIdjVY6Q,5250
39
- code_puppy/command_line/mcp/install_command.py,sha256=AgrEp-MynkbLsrOZL54dod5jUsc0Zw_VbHcS3EFz8N4,8826
40
- code_puppy/command_line/mcp/list_command.py,sha256=9ggXgoqMyzCp9_XGMLbA0WOdIDTynRfJC0VRxnjG7uk,3178
41
- code_puppy/command_line/mcp/logs_command.py,sha256=x_QsVGPpI5XY7RCZtiNFegc6R3csiwF_IEB_Rh2575w,4453
42
- code_puppy/command_line/mcp/remove_command.py,sha256=MrWmXQ9jZTq1wrohFDO3ls0a1faTHCqRZocN-ynTzh8,2753
43
- code_puppy/command_line/mcp/restart_command.py,sha256=-arZhayEVjTg3WErQKiBoFxbpbQcFlPXTzUI5o8AQLg,3254
44
- code_puppy/command_line/mcp/search_command.py,sha256=oBJaCMo07IQJyn4X17iP_Ek--WM61W_g_IoUjlO4qjs,4112
45
- code_puppy/command_line/mcp/start_all_command.py,sha256=Sfkx83X0KCid9lDGyVS7nfWoGvRCIgZ3JhU3aBsR6tk,4294
46
- code_puppy/command_line/mcp/start_command.py,sha256=r00onOpfSSL-gtJLDOvmD-8G4RZhhmd-nv3TyIWGMUI,3350
47
- code_puppy/command_line/mcp/status_command.py,sha256=xInCR0WDUBfoIJzMYC8rzDmj_muIz7YAs-e5yoXFGEo,6638
48
- code_puppy/command_line/mcp/stop_all_command.py,sha256=-HbIE-WXzfWEMFVZhFtxf7pfeTh1F8LrzQiQyWL4R2I,3715
49
- code_puppy/command_line/mcp/stop_command.py,sha256=zuZO8pIP2Ix11LATf-cwwX3fPFIGAbRDaZ6qnfPTqLY,2594
50
- code_puppy/command_line/mcp/test_command.py,sha256=Pjod77DYRcA9WDZcxaCe6AUgpEXKJr42QRkxMhSjXhM,3689
51
- code_puppy/command_line/mcp/utils.py,sha256=FqaeJMPEp39suMq_R3_xb-e8zcNpw1Rcluwvdgum3Uo,3624
52
- code_puppy/command_line/mcp/wizard_utils.py,sha256=HabnT3y6EWLP6w1llRwVO_P25Wi15bYFddTM_2kxAq8,11073
53
- code_puppy/mcp/__init__.py,sha256=UZ6ZYEIN8At3Jq88ZTkrVQHswNMxHyIBz4hbOn71osk,1444
54
- code_puppy/mcp/async_lifecycle.py,sha256=pTQrwQCVgjad8EJeRTSHtIeSQRgT_8r5BeLv-1SgKog,7772
55
- code_puppy/mcp/blocking_startup.py,sha256=bgYln3j12kuHoBsoCUzCjVcTdcoSIAx8kSaOJVwUaRg,13484
56
- code_puppy/mcp/captured_stdio_server.py,sha256=ubINgtKdd5-oOLR7MRuavUqd40iQFJk2YCNtTFYeI5Q,8948
57
- code_puppy/mcp/circuit_breaker.py,sha256=a83YwXux9h4R6zBWBUrCIqtp2ffyl7JZEoK2tErG_0I,8601
58
- code_puppy/mcp/config_wizard.py,sha256=SIsm8uhDInfRYy_2W8wPIZcmoxk24680ikhMT93VuvQ,16481
59
- code_puppy/mcp/dashboard.py,sha256=y6t6trrBZU-mr8W1_29VN5DeZI8VYvOsKNz1EXxlvUg,9022
60
- code_puppy/mcp/error_isolation.py,sha256=mpPBiH17zTXPsOEAn9WmkbwQwnt4gmgiaWv87JBJbUo,12426
61
- code_puppy/mcp/health_monitor.py,sha256=n5R6EeYOYbUucUFe74qGWCU3g6Mep5UEQbLF0wbT0dU,19688
62
- code_puppy/mcp/managed_server.py,sha256=EZwWsQGxzgnjL6TGJTm58Pj6fw7kkYpLuolYQY-GbXY,14256
63
- code_puppy/mcp/manager.py,sha256=Yx9zxukdXgdPDgeJiiQPYlPae0zQPofHWB-axuoMNc8,26426
64
- code_puppy/mcp/registry.py,sha256=IvbIL-pETQ7HS7iRgsoT5j7eY8TOJXqYczSiigT2ofU,15752
65
- code_puppy/mcp/retry_manager.py,sha256=evVxbtrsHNyo8UoI7zpO-NVDegibn82RLlgN8VKewA8,10665
66
- code_puppy/mcp/server_registry_catalog.py,sha256=U0HJMgEeF8Ntq3ZWepA0Z9t8ZG82Toa9JCGBjiDAzh8,38760
67
- code_puppy/mcp/status_tracker.py,sha256=uekxrzkzIWrv3OfSVgblaPuoGFcAh_dBYwCcaHZ_CrM,12183
68
- code_puppy/mcp/system_tools.py,sha256=7_oR8k0c8YjtCcYF9g7A946oAGuKOf_i-92aJH7VmlQ,7331
69
- code_puppy/mcp/examples/retry_example.py,sha256=En3LiqECYmG00gWaa7K9L9vvGk1VJyYtKWcv3p3gzCc,7220
70
- code_puppy/messaging/__init__.py,sha256=h2eZ7nJblKF71_dNUIBj3vL5RDw7WGy8nh6T_EYVrcA,1176
71
- code_puppy/messaging/message_queue.py,sha256=CDVpstLee_RbCBeJWv2eON3c3qhlEISf2i9aSXJTLU4,12600
72
- code_puppy/messaging/queue_console.py,sha256=hf32bKfAOdAaxYuARnmDuWhq4ET77xMWDvu5_T2JggY,10912
73
- code_puppy/messaging/renderers.py,sha256=9VOpVmu7emyyg1CXgm17u4IzMNcLHvueBl7G14pLQho,16123
74
- code_puppy/messaging/spinner/__init__.py,sha256=9mkXPYojafydBOAMh9ZUrB4X6uH5Iqz_-E-Obpd72ko,1365
75
- code_puppy/messaging/spinner/console_spinner.py,sha256=DhEXjD37_FuJwcNNfIP2D0y1ruGlFmuCCuaUW4DFrNg,6932
76
- code_puppy/messaging/spinner/spinner_base.py,sha256=474qMrTYpNfWcprFzmhaOJEOC-2rRHpTFCLsnl54bXA,1689
77
- code_puppy/messaging/spinner/textual_spinner.py,sha256=Omx9A-FSPkxYDMYgBXgYMBQnK-DMlyqLOgkFVG8cmo4,3465
78
- code_puppy/plugins/__init__.py,sha256=fksDqMUiXPJ5WNuMsYsVR8ulueQRCXPlvECEyicHPtQ,1312
79
- code_puppy/tools/__init__.py,sha256=YiiXRqxU1BEJ5t0Oe163lSqOneI9sKtwDW0swCPgBt4,2119
80
- code_puppy/tools/agent_tools.py,sha256=bHMrFIbYRhuubR41G_XdLsk3cUKWfIPl2O4bVzo2pE0,5591
81
- code_puppy/tools/command_runner.py,sha256=TeKbUY1BeHpUEYtBbmEXnYd4ESI-RGNXRlI-7I1UNHU,22427
82
- code_puppy/tools/common.py,sha256=pL-9xcRs3rxU7Fl9X9EUgbDp2-csh2LLJ5DHH_KAHKY,10596
83
- code_puppy/tools/file_modifications.py,sha256=EaDWcv6gi8wAvpgyeJdKSKPWg9fTpZoEkxQiLCE6rn4,23218
84
- code_puppy/tools/file_operations.py,sha256=dEnsGCbDF12ctegCm9Kiu-mgNCrvopf64ij_CQbikW4,32460
85
- code_puppy/tools/tools_content.py,sha256=bsBqW-ppd1XNAS_g50B3UHDQBWEALC1UneH6-afz1zo,2365
86
- code_puppy/tui/__init__.py,sha256=XesAxIn32zLPOmvpR2wIDxDAnnJr81a5pBJB4cZp1Xs,321
87
- code_puppy/tui/app.py,sha256=nPOzwlusjdWzBfu__EbC3Q0etkPrqRq-2g-mk4IcfG4,39378
88
- code_puppy/tui/messages.py,sha256=zQoToWI0eWdT36NEsY6RdCFzcDfAmfvoPlHv8jiCbgo,720
89
- code_puppy/tui/components/__init__.py,sha256=uj5pnk3s6SEN3SbFI0ZnzaA2KK1NNg8TfUj6U-Z732U,455
90
- code_puppy/tui/components/chat_view.py,sha256=NfyNXuN2idPht1rKJB4YhHVXb1AIRNO5q_nLdt8Ocug,19913
91
- code_puppy/tui/components/command_history_modal.py,sha256=pUPEQvoCWa2iUnuMgNwO22y8eUbyw0HpcPH3wAosHvU,7097
92
- code_puppy/tui/components/copy_button.py,sha256=E4-OJYk5YNzDf-E81NyiVGKsTRPrUX-RnQ8qFuVnabw,4375
93
- code_puppy/tui/components/custom_widgets.py,sha256=y-ZodibwL_GNaWntmFMn7eeC93wJNss590D43rGMO6A,2122
94
- code_puppy/tui/components/human_input_modal.py,sha256=isj-zrSIcK5iy3L7HJNgDFWN1zhxY4f3zvp4krbs07E,5424
95
- code_puppy/tui/components/input_area.py,sha256=R4R32eXPZ2R8KFisIbldNGq60KMk7kCxWrdbeTgJUr8,4395
96
- code_puppy/tui/components/sidebar.py,sha256=nGtCiYzZalPmiFaJ4dwj2S4EJBu5wQZVzhoigYYY7U4,10369
97
- code_puppy/tui/components/status_bar.py,sha256=GgznJqF8Wk6XkurBuKohLyu75eT_ucBTvl9oPcySmnM,6338
98
- code_puppy/tui/models/__init__.py,sha256=5Eq7BMibz-z_t_v7B4H4tCdKRG41i2CaCuNQf_lteAE,140
99
- code_puppy/tui/models/chat_message.py,sha256=2fSqsl4EHKgGsi_cVKWBbFq1NQwZyledGuJ9djovtLY,477
100
- code_puppy/tui/models/command_history.py,sha256=bPWr_xnyQvjG5tPg_5pwqlEzn2fR170HlvBJwAXRpAE,2895
101
- code_puppy/tui/models/enums.py,sha256=1ulsei95Gxy4r1sk-m-Sm5rdmejYCGRI-YtUwJmKFfM,501
102
- code_puppy/tui/screens/__init__.py,sha256=tJ00d0aYQ9kzOGHRChqy6cCQ6JUKKXBzLUTEbk_eA2Y,286
103
- code_puppy/tui/screens/help.py,sha256=eJuPaOOCp7ZSUlecearqsuX6caxWv7NQszUh0tZJjBM,3232
104
- code_puppy/tui/screens/mcp_install_wizard.py,sha256=xqwN5omltMkfxWZwXj3D2PbXbtrxUi1dT0XT77oxOKk,27685
105
- code_puppy/tui/screens/settings.py,sha256=GMpv-qa08rorAE9mj3AjmqjZFPhmeJ_GWd-DBHG6iAA,10671
106
- code_puppy/tui/screens/tools.py,sha256=3pr2Xkpa9Js6Yhf1A3_wQVRzFOui-KDB82LwrsdBtyk,1715
107
- code_puppy-0.0.169.data/data/code_puppy/models.json,sha256=iXmLZGflnQcu2DRh4WUlgAhoXdvoxUc7KBhB8YxawXM,3088
108
- code_puppy-0.0.169.dist-info/METADATA,sha256=-cW4srdgLTHw8gOC4LFKiZ6RjmO9SQVKRHnp8vl8N3s,20039
109
- code_puppy-0.0.169.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
110
- code_puppy-0.0.169.dist-info/entry_points.txt,sha256=d8YkBvIUxF-dHNJAj-x4fPEqizbY5d_TwvYpc01U5kw,58
111
- code_puppy-0.0.169.dist-info/licenses/LICENSE,sha256=31u8x0SPgdOq3izJX41kgFazWsM43zPEF9eskzqbJMY,1075
112
- code_puppy-0.0.169.dist-info/RECORD,,
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes