code-puppy 0.0.325__py3-none-any.whl → 0.0.336__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 (44) hide show
  1. code_puppy/agents/base_agent.py +41 -103
  2. code_puppy/cli_runner.py +105 -2
  3. code_puppy/command_line/add_model_menu.py +4 -0
  4. code_puppy/command_line/autosave_menu.py +5 -0
  5. code_puppy/command_line/colors_menu.py +5 -0
  6. code_puppy/command_line/config_commands.py +24 -1
  7. code_puppy/command_line/core_commands.py +51 -0
  8. code_puppy/command_line/diff_menu.py +5 -0
  9. code_puppy/command_line/mcp/custom_server_form.py +4 -0
  10. code_puppy/command_line/mcp/install_menu.py +5 -1
  11. code_puppy/command_line/model_settings_menu.py +5 -0
  12. code_puppy/command_line/motd.py +13 -7
  13. code_puppy/command_line/onboarding_slides.py +180 -0
  14. code_puppy/command_line/onboarding_wizard.py +340 -0
  15. code_puppy/config.py +3 -2
  16. code_puppy/http_utils.py +155 -196
  17. code_puppy/keymap.py +10 -8
  18. code_puppy/messaging/rich_renderer.py +101 -19
  19. code_puppy/model_factory.py +86 -15
  20. code_puppy/plugins/antigravity_oauth/__init__.py +10 -0
  21. code_puppy/plugins/antigravity_oauth/accounts.py +406 -0
  22. code_puppy/plugins/antigravity_oauth/antigravity_model.py +653 -0
  23. code_puppy/plugins/antigravity_oauth/config.py +42 -0
  24. code_puppy/plugins/antigravity_oauth/constants.py +136 -0
  25. code_puppy/plugins/antigravity_oauth/oauth.py +478 -0
  26. code_puppy/plugins/antigravity_oauth/register_callbacks.py +406 -0
  27. code_puppy/plugins/antigravity_oauth/storage.py +271 -0
  28. code_puppy/plugins/antigravity_oauth/test_plugin.py +319 -0
  29. code_puppy/plugins/antigravity_oauth/token.py +167 -0
  30. code_puppy/plugins/antigravity_oauth/transport.py +664 -0
  31. code_puppy/plugins/antigravity_oauth/utils.py +169 -0
  32. code_puppy/plugins/chatgpt_oauth/register_callbacks.py +2 -0
  33. code_puppy/plugins/claude_code_oauth/register_callbacks.py +2 -0
  34. code_puppy/reopenable_async_client.py +8 -8
  35. code_puppy/terminal_utils.py +168 -3
  36. code_puppy/tools/command_runner.py +42 -54
  37. code_puppy/uvx_detection.py +242 -0
  38. {code_puppy-0.0.325.dist-info → code_puppy-0.0.336.dist-info}/METADATA +30 -1
  39. {code_puppy-0.0.325.dist-info → code_puppy-0.0.336.dist-info}/RECORD +44 -29
  40. {code_puppy-0.0.325.data → code_puppy-0.0.336.data}/data/code_puppy/models.json +0 -0
  41. {code_puppy-0.0.325.data → code_puppy-0.0.336.data}/data/code_puppy/models_dev_api.json +0 -0
  42. {code_puppy-0.0.325.dist-info → code_puppy-0.0.336.dist-info}/WHEEL +0 -0
  43. {code_puppy-0.0.325.dist-info → code_puppy-0.0.336.dist-info}/entry_points.txt +0 -0
  44. {code_puppy-0.0.325.dist-info → code_puppy-0.0.336.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,242 @@
1
+ """Detect if code-puppy was launched via uvx on Windows.
2
+
3
+ This module provides utilities to detect the launch method of code-puppy,
4
+ specifically to handle signal differences when running via uvx on Windows.
5
+
6
+ On Windows, when launched via `uvx code-puppy`, Ctrl+C (SIGINT) gets captured
7
+ by uvx's process handling before reaching our Python process. To work around
8
+ this, we detect the uvx launch scenario and switch to Ctrl+K for cancellation.
9
+
10
+ Note: This issue is specific to uvx.exe, NOT uv.exe. Running via `uv run`
11
+ handles SIGINT correctly on Windows.
12
+
13
+ On non-Windows platforms, this is not an issue - Ctrl+C works fine with uvx.
14
+ """
15
+
16
+ import os
17
+ import platform
18
+ import sys
19
+ from functools import lru_cache
20
+ from typing import Optional
21
+
22
+ # Cache the detection result - it won't change during runtime
23
+ _uvx_detection_cache: Optional[bool] = None
24
+
25
+
26
+ def _get_parent_process_name_psutil(pid: int) -> Optional[str]:
27
+ """Get parent process name using psutil (if available).
28
+
29
+ Args:
30
+ pid: Process ID to get parent name for
31
+
32
+ Returns:
33
+ Parent process name (lowercase) or None if not found
34
+ """
35
+ try:
36
+ import psutil
37
+
38
+ proc = psutil.Process(pid)
39
+ parent = proc.parent()
40
+ if parent:
41
+ return parent.name().lower()
42
+ except Exception:
43
+ pass
44
+ return None
45
+
46
+
47
+ def _get_parent_process_chain_psutil() -> list[str]:
48
+ """Get the entire parent process chain using psutil.
49
+
50
+ Returns:
51
+ List of process names from current process up to init/System
52
+ """
53
+ chain = []
54
+ try:
55
+ import psutil
56
+
57
+ proc = psutil.Process(os.getpid())
58
+ while proc:
59
+ chain.append(proc.name().lower())
60
+ parent = proc.parent()
61
+ if parent is None or parent.pid in (0, proc.pid):
62
+ break
63
+ proc = parent
64
+ except Exception:
65
+ pass
66
+ return chain
67
+
68
+
69
+ def _get_parent_process_chain_windows_ctypes() -> list[str]:
70
+ """Get parent process chain on Windows using ctypes (no external deps).
71
+
72
+ This is a fallback when psutil is not available.
73
+
74
+ Returns:
75
+ List of process names from current process up to System
76
+ """
77
+ if platform.system() != "Windows":
78
+ return []
79
+
80
+ chain = []
81
+ try:
82
+ import ctypes
83
+ from ctypes import wintypes
84
+
85
+ # Windows API constants
86
+ TH32CS_SNAPPROCESS = 0x00000002
87
+ INVALID_HANDLE_VALUE = -1
88
+
89
+ class PROCESSENTRY32(ctypes.Structure):
90
+ _fields_ = [
91
+ ("dwSize", wintypes.DWORD),
92
+ ("cntUsage", wintypes.DWORD),
93
+ ("th32ProcessID", wintypes.DWORD),
94
+ ("th32DefaultHeapID", ctypes.POINTER(wintypes.ULONG)),
95
+ ("th32ModuleID", wintypes.DWORD),
96
+ ("cntThreads", wintypes.DWORD),
97
+ ("th32ParentProcessID", wintypes.DWORD),
98
+ ("pcPriClassBase", wintypes.LONG),
99
+ ("dwFlags", wintypes.DWORD),
100
+ ("szExeFile", ctypes.c_char * 260),
101
+ ]
102
+
103
+ kernel32 = ctypes.windll.kernel32
104
+
105
+ # Take a snapshot of all processes
106
+ snapshot = kernel32.CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
107
+ if snapshot == INVALID_HANDLE_VALUE:
108
+ return chain
109
+
110
+ try:
111
+ # Build a map of PID -> (parent_pid, exe_name)
112
+ process_map: dict[int, tuple[int, str]] = {}
113
+ pe = PROCESSENTRY32()
114
+ pe.dwSize = ctypes.sizeof(PROCESSENTRY32)
115
+
116
+ if kernel32.Process32First(snapshot, ctypes.byref(pe)):
117
+ while True:
118
+ pid = pe.th32ProcessID
119
+ parent_pid = pe.th32ParentProcessID
120
+ exe_name = pe.szExeFile.decode("utf-8", errors="ignore").lower()
121
+ process_map[pid] = (parent_pid, exe_name)
122
+
123
+ if not kernel32.Process32Next(snapshot, ctypes.byref(pe)):
124
+ break
125
+
126
+ # Traverse from current PID up the parent chain
127
+ current_pid = os.getpid()
128
+ visited = set() # Prevent infinite loops
129
+
130
+ while current_pid in process_map and current_pid not in visited:
131
+ visited.add(current_pid)
132
+ parent_pid, exe_name = process_map[current_pid]
133
+ chain.append(exe_name)
134
+
135
+ if parent_pid == 0 or parent_pid == current_pid:
136
+ break
137
+ current_pid = parent_pid
138
+
139
+ finally:
140
+ kernel32.CloseHandle(snapshot)
141
+
142
+ except Exception:
143
+ pass
144
+
145
+ return chain
146
+
147
+
148
+ def _get_parent_process_chain() -> list[str]:
149
+ """Get the parent process chain using best available method.
150
+
151
+ Returns:
152
+ List of process names from current process up to init/System
153
+ """
154
+ # Try psutil first (more reliable, cross-platform)
155
+ try:
156
+ import psutil # noqa: F401
157
+
158
+ return _get_parent_process_chain_psutil()
159
+ except ImportError:
160
+ pass
161
+
162
+ # Fall back to ctypes on Windows
163
+ if platform.system() == "Windows":
164
+ return _get_parent_process_chain_windows_ctypes()
165
+
166
+ return []
167
+
168
+
169
+ def _is_uvx_in_chain(chain: list[str]) -> bool:
170
+ """Check if uvx is in the process chain.
171
+
172
+ Note: We only check for uvx.exe, NOT uv.exe. The uv.exe binary
173
+ (used by `uv run`) handles SIGINT correctly on Windows, but
174
+ uvx.exe captures it before it reaches Python.
175
+
176
+ Args:
177
+ chain: List of process names (lowercase)
178
+
179
+ Returns:
180
+ True if uvx.exe is found in the chain
181
+ """
182
+ # Only uvx.exe has the SIGINT issue, not uv.exe
183
+ uvx_names = {"uvx.exe", "uvx"}
184
+ return any(name in uvx_names for name in chain)
185
+
186
+
187
+ @lru_cache(maxsize=1)
188
+ def is_launched_via_uvx() -> bool:
189
+ """Detect if code-puppy was launched via uvx.
190
+
191
+ Traverses the parent process chain to find uvx.exe or uv.exe.
192
+ Result is cached for the lifetime of the process.
193
+
194
+ Returns:
195
+ True if launched via uvx, False otherwise
196
+ """
197
+ chain = _get_parent_process_chain()
198
+ return _is_uvx_in_chain(chain)
199
+
200
+
201
+ def is_windows() -> bool:
202
+ """Check if we're running on Windows.
203
+
204
+ Returns:
205
+ True if running on Windows, False otherwise
206
+ """
207
+ return platform.system() == "Windows"
208
+
209
+
210
+ def should_use_alternate_cancel_key() -> bool:
211
+ """Determine if we should use an alternate cancel key (Ctrl+K) instead of Ctrl+C.
212
+
213
+ This returns True when:
214
+ - Running on Windows AND
215
+ - Launched via uvx
216
+
217
+ In this scenario, Ctrl+C is captured by uvx before reaching Python,
218
+ so we need to use a different key (Ctrl+K) for agent cancellation.
219
+
220
+ Returns:
221
+ True if alternate cancel key should be used, False otherwise
222
+ """
223
+ return is_windows() and is_launched_via_uvx()
224
+
225
+
226
+ def get_uvx_detection_info() -> dict:
227
+ """Get diagnostic information about uvx detection.
228
+
229
+ Useful for debugging and testing.
230
+
231
+ Returns:
232
+ Dictionary with detection details
233
+ """
234
+ chain = _get_parent_process_chain()
235
+ return {
236
+ "is_windows": is_windows(),
237
+ "is_launched_via_uvx": is_launched_via_uvx(),
238
+ "should_use_alternate_cancel_key": should_use_alternate_cancel_key(),
239
+ "parent_process_chain": chain,
240
+ "current_pid": os.getpid(),
241
+ "python_executable": sys.executable,
242
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-puppy
3
- Version: 0.0.325
3
+ Version: 0.0.336
4
4
  Summary: Code generation agent
5
5
  Project-URL: repository, https://github.com/mpfaffenberger/code_puppy
6
6
  Project-URL: HomePage, https://github.com/mpfaffenberger/code_puppy
@@ -100,6 +100,8 @@ uvx code-puppy -i
100
100
 
101
101
  ### UV (Recommended)
102
102
 
103
+ #### macOS / Linux
104
+
103
105
  ```bash
104
106
  # Install UV if you don't have it
105
107
  curl -LsSf https://astral.sh/uv/install.sh | sh
@@ -112,6 +114,33 @@ source ~/.zshrc # or ~/.bashrc
112
114
  uvx code-puppy -i
113
115
  ```
114
116
 
117
+ #### Windows
118
+
119
+ On Windows, we recommend installing code-puppy as a global tool for the best experience with keyboard shortcuts (Ctrl+C/Ctrl+X cancellation):
120
+
121
+ ```powershell
122
+ # Install UV if you don't have it (run in PowerShell as Admin)
123
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
124
+
125
+ # Install code-puppy as a global tool
126
+ uv tool install code-puppy
127
+
128
+ # Run code-puppy
129
+ code-puppy -i
130
+ ```
131
+
132
+ **Why `uv tool install` on Windows?** Running with `uvx` creates an extra process layer that can interfere with keyboard signal handling (Ctrl+C, Ctrl+X). Installing as a tool runs code-puppy directly for reliable cancellation.
133
+
134
+ #### Upgrading
135
+
136
+ ```bash
137
+ # Upgrade code-puppy to the latest version
138
+ uv tool upgrade code-puppy
139
+
140
+ # Or upgrade all installed tools
141
+ uv tool upgrade --all
142
+ ```
143
+
115
144
  UV will automatically download the latest compatible Python version (3.11+) if your system doesn't have one.
116
145
 
117
146
  ### pip (Alternative)
@@ -3,25 +3,26 @@ code_puppy/__main__.py,sha256=pDVssJOWP8A83iFkxMLY9YteHYat0EyWDQqMkKHpWp4,203
3
3
  code_puppy/callbacks.py,sha256=hqTV--dNxG5vwWWm3MrEjmb8MZuHFFdmHePl23NXPHk,8621
4
4
  code_puppy/chatgpt_codex_client.py,sha256=Om0ANB_kpHubhCwNzF9ENf8RvKBqs0IYzBLl_SNw0Vk,9833
5
5
  code_puppy/claude_cache_client.py,sha256=hZr_YtXZSQvBoJFtRbbecKucYqJgoMopqUmm0IxFYGY,6071
6
- code_puppy/cli_runner.py,sha256=UIM04pqMb3qkVKG0lKtHQuVSrevsQhEqDC__wAdjqy8,29646
7
- code_puppy/config.py,sha256=qqeJrQP7gqADqeYqVzfksP7NYGROLrBQCuYic5PuQfY,52295
6
+ code_puppy/cli_runner.py,sha256=4iosJ_zXv9WcG4764yFW-VOLjE3B7Og9yclp6Q4kaSQ,33875
7
+ code_puppy/config.py,sha256=RlnrLkyFXm7h2Htf8rQA7vqoAyzLPMrESle417uLmFw,52373
8
8
  code_puppy/error_logging.py,sha256=a80OILCUtJhexI6a9GM-r5LqIdjvSRzggfgPp2jv1X0,3297
9
9
  code_puppy/gemini_code_assist.py,sha256=KGS7sO5OLc83nDF3xxS-QiU6vxW9vcm6hmzilu79Ef8,13867
10
- code_puppy/http_utils.py,sha256=w5mWYIGIWJZJvgvMahXs9BmdidoJvGn4CASDRY88a8o,13414
11
- code_puppy/keymap.py,sha256=kbC6S_s57rXcONdE2e1xdj2XNRJ4nHJI32RxbI83DC4,3400
10
+ code_puppy/http_utils.py,sha256=BV_bf0i5iPh7HC7T1vlsbz3hvlVwdIzwpS2pfBBKPRo,11823
11
+ code_puppy/keymap.py,sha256=IvMkTlB_bIqOWpbTpmftkdyjhtD5todXuEIw1zCZ4u0,3584
12
12
  code_puppy/main.py,sha256=82r3vZy_XcyEsenLn82BnUusaoyL3Bpm_Th_jKgqecE,273
13
- code_puppy/model_factory.py,sha256=H_a5nX462Q-dhX3g3ZY7dmBCIAUOd1aOSZa4HMxF1o4,34191
13
+ code_puppy/model_factory.py,sha256=Djhp_ukLTMNi8UdZsodhIU6D2X4DmJXnjZy_bzfce3k,37517
14
14
  code_puppy/model_utils.py,sha256=NU8W8NW5F7QS_PXHaLeh55Air1koUV7IVYFP7Rz3XpY,3615
15
15
  code_puppy/models.json,sha256=IPABdOrDw2OZJxa0XGBWSWmBRerV6_pIEmKVLRtUbAk,3105
16
16
  code_puppy/models_dev_api.json,sha256=wHjkj-IM_fx1oHki6-GqtOoCrRMR0ScK0f-Iz0UEcy8,548187
17
17
  code_puppy/models_dev_parser.py,sha256=8ndmWrsSyKbXXpRZPXc0w6TfWMuCcgaHiMifmlaBaPc,20611
18
18
  code_puppy/pydantic_patches.py,sha256=YecAEeCOjSIwIBu2O5vEw72atMSL37cXGrbEuukI07o,4582
19
- code_puppy/reopenable_async_client.py,sha256=4UJRaMp5np8cbef9F0zKQ7TPKOfyf5U-Kv-0zYUWDho,8274
19
+ code_puppy/reopenable_async_client.py,sha256=pD34chyBFcC7_OVPJ8fp6aRI5jYdN-7VDycObMZPwG8,8292
20
20
  code_puppy/round_robin_model.py,sha256=kSawwPUiPgg0yg8r4AAVgvjzsWkptxpSORd75-HP7W4,5335
21
21
  code_puppy/session_storage.py,sha256=T4hOsAl9z0yz2JZCptjJBOnN8fCmkLZx5eLy1hTdv6Q,9631
22
22
  code_puppy/status_display.py,sha256=qHzIQGAPEa2_-4gQSg7_rE1ihOosBq8WO73MWFNmmlo,8938
23
23
  code_puppy/summarization_agent.py,sha256=6Pu_Wp_rF-HAhoX9u2uXTabRVkOZUYwRoMP1lzNS4ew,4485
24
- code_puppy/terminal_utils.py,sha256=oa8SF7Pel4o15Erd7a7vA7Y9wi6SJx196qxXITebDqA,3650
24
+ code_puppy/terminal_utils.py,sha256=CxcNLfPwTDblI0AEtEwhfZ4DTfqqwHjM_A10QslaMBk,8220
25
+ code_puppy/uvx_detection.py,sha256=tP9X9Nvzow--KIqtqjgrHQkSxMJ3EevfoaeoB9VLY2o,7224
25
26
  code_puppy/version_checker.py,sha256=aq2Mwxl1CR9sEFBgrPt3OQOowLOBUp9VaQYWJhuUv8Q,1780
26
27
  code_puppy/agents/__init__.py,sha256=PtPB7Z5MSwmUKipgt_qxvIuGggcuVaYwNbnp1UP4tPc,518
27
28
  code_puppy/agents/agent_c_reviewer.py,sha256=1kO_89hcrhlS4sJ6elDLSEx-h43jAaWGgvIL0SZUuKo,8214
@@ -39,25 +40,27 @@ code_puppy/agents/agent_qa_expert.py,sha256=5Ikb4U3SZQknUEfwlHZiyZXKqnffnOTQagr_
39
40
  code_puppy/agents/agent_qa_kitten.py,sha256=5PeFFSwCFlTUvP6h5bGntx0xv5NmRwBiw0HnMqY8nLI,9107
40
41
  code_puppy/agents/agent_security_auditor.py,sha256=SpiYNA0XAsIwBj7S2_EQPRslRUmF_-b89pIJyW7DYtY,12022
41
42
  code_puppy/agents/agent_typescript_reviewer.py,sha256=vsnpp98xg6cIoFAEJrRTUM_i4wLEWGm5nJxs6fhHobM,10275
42
- code_puppy/agents/base_agent.py,sha256=ptca2ZgoNbWv9oTnCw1G3vE87U3mmqm6TOVUXuXofds,85399
43
+ code_puppy/agents/base_agent.py,sha256=r_znuUZJMv97Lh8zeSdS_KJzVGe7X3rAgBk3NZpIO7I,82855
43
44
  code_puppy/agents/json_agent.py,sha256=lhopDJDoiSGHvD8A6t50hi9ZBoNRKgUywfxd0Po_Dzc,4886
44
45
  code_puppy/agents/prompt_reviewer.py,sha256=JJrJ0m5q0Puxl8vFsyhAbY9ftU9n6c6UxEVdNct1E-Q,5558
45
46
  code_puppy/command_line/__init__.py,sha256=y7WeRemfYppk8KVbCGeAIiTuiOszIURCDjOMZv_YRmU,45
46
- code_puppy/command_line/add_model_menu.py,sha256=6hefLnlcVJGWdjxEBEmSHrEOWRZWMjUB1es2nHuw19E,43057
47
+ code_puppy/command_line/add_model_menu.py,sha256=caXxSQc6dgx0qQ68RRFrDTsiH-wZjl4nUv2r0javhaM,43262
47
48
  code_puppy/command_line/attachments.py,sha256=4Q5I2Es4j0ltnz5wjw2z0QXMsiMJvEfWRkPf_lJeITM,13093
48
- code_puppy/command_line/autosave_menu.py,sha256=7w2SXfEfR-SGFZcHxM-QZfT0p42KxJjX36UWS66QObc,19987
49
- code_puppy/command_line/colors_menu.py,sha256=F_OYuApwXWGP2w9o0CMEbIHtqwdKUh5eDhi7qtDP9h0,17144
49
+ code_puppy/command_line/autosave_menu.py,sha256=vW-2UqX8qT2Rb07ZSbsCG1MMwCPIH4MQ4YM9PEkcPyo,20105
50
+ code_puppy/command_line/colors_menu.py,sha256=LoFVfJ-Mo-Eq9hnb2Rj5mn7oBCnadAGr-8NNHsHlu18,17273
50
51
  code_puppy/command_line/command_handler.py,sha256=CY9F27eovZJK_kpU1YmbroYLWGTCuouCOQ-TXfDp-nw,10916
51
52
  code_puppy/command_line/command_registry.py,sha256=qFySsw1g8dol3kgi0p6cXrIDlP11_OhOoaQ5nAadWXg,4416
52
- code_puppy/command_line/config_commands.py,sha256=YQzc6y5NMOW9EsrfpoldNYew4BR3bEKqph_00FLPdKw,24627
53
- code_puppy/command_line/core_commands.py,sha256=qxIZ5tCAPkNDfDYjcG86h0tsi7RUQ4ueQ5C2BZ2H214,24809
54
- code_puppy/command_line/diff_menu.py,sha256=6qolM8ECpXTAo2q0Yvqw8Oohsj3MLPxQI8PJvYuKGS4,24014
53
+ code_puppy/command_line/config_commands.py,sha256=qS9Cm758DPz2QGvHLhAV4Tp_Xfgo3PyoCoLDusbnmCw,25742
54
+ code_puppy/command_line/core_commands.py,sha256=MhnyqcTIMheT8W1cqmfZTGLWo8iGM-fAAo8E3dNORro,26468
55
+ code_puppy/command_line/diff_menu.py,sha256=_Gr9SP9fbItk-08dya9WTAR53s_PlyAvEnbt-8VWKPk,24141
55
56
  code_puppy/command_line/file_path_completion.py,sha256=gw8NpIxa6GOpczUJRyh7VNZwoXKKn-yvCqit7h2y6Gg,2931
56
57
  code_puppy/command_line/load_context_completion.py,sha256=a3JvLDeLLSYxVgTjAdqWzS4spjv6ccCrK2LKZgVJ1IM,2202
57
58
  code_puppy/command_line/mcp_completion.py,sha256=eKzW2O7gun7HoHekOW0XVXhNS5J2xCtK7aaWyA8bkZk,6952
58
59
  code_puppy/command_line/model_picker_completion.py,sha256=nDnlf0qFCG2zAm_mWW2eMYwVC7eROVQrFe92hZqOKa8,6810
59
- code_puppy/command_line/model_settings_menu.py,sha256=O5nPp_OyShFcXzpSmsCeYsnnVNrSwcTBFY9bzcayvj0,32263
60
- code_puppy/command_line/motd.py,sha256=OoNxwewsckexSgJ5H5y40IawP-TzqlqY-rqFUdRbIhs,2186
60
+ code_puppy/command_line/model_settings_menu.py,sha256=AI97IusDgMmWoCOp7C0Yrk_Uy6M9cmVhoZfVWgFWwXg,32392
61
+ code_puppy/command_line/motd.py,sha256=XuIk3UTLawwVFM-NfoaJGU5F2hPLASTFXq84UdDMT0Q,2408
62
+ code_puppy/command_line/onboarding_slides.py,sha256=tHob7rB_n32dfjtPH-RSG0WLMjDHhlmNxfsF7WCgcVc,7191
63
+ code_puppy/command_line/onboarding_wizard.py,sha256=U5lV_1P3IwDYZUHar0zKgdp121zzkvOwwORvdCZwFcw,10241
61
64
  code_puppy/command_line/pin_command_completion.py,sha256=juSvdqRpk7AdfkPy1DJx5NzfEUU5KYGlChvP0hisM18,11667
62
65
  code_puppy/command_line/prompt_toolkit_completion.py,sha256=x4Of32g8oH9ckhx-P6BigV7HUUhhjL8xkvK03uq9HRw,27308
63
66
  code_puppy/command_line/session_commands.py,sha256=Jh8GGfhlfBAEVfucKLbcZjNaXYd0twImiOwq2ZnGdQQ,9902
@@ -66,13 +69,13 @@ code_puppy/command_line/mcp/__init__.py,sha256=0-OQuwjq_pLiTVJ1_NrirVwdRerghyKs_
66
69
  code_puppy/command_line/mcp/add_command.py,sha256=iWqHReWbVOO3kuPE4NTMs3dv_BluxTBaasDPm9P1lU0,5892
67
70
  code_puppy/command_line/mcp/base.py,sha256=pPeNnSyM0GGqD6mhYN-qA22rAT9bEapxliwH_YiIu3Q,823
68
71
  code_puppy/command_line/mcp/catalog_server_installer.py,sha256=vY7MAy6O92bs-gRoZOO9jVPx23omr0jpSZucfjVkeOY,6170
69
- code_puppy/command_line/mcp/custom_server_form.py,sha256=9J-XzZeS5uok0y_z0HtAWr0V-phTbAYKvOr2iO0IGgQ,21940
72
+ code_puppy/command_line/mcp/custom_server_form.py,sha256=iLEe30NI_01PP7xETgckBqwlyVrPzbHmzx7by8QKiVA,22082
70
73
  code_puppy/command_line/mcp/custom_server_installer.py,sha256=4NhHxf4wGUh4OvdIurZAlC7TrNcmm4j8dWucIKrekWg,5733
71
74
  code_puppy/command_line/mcp/edit_command.py,sha256=_WxxpaTgxo9pbvMogG9yvh2mcLE5SYf0Qbi8a8IpZ0k,4603
72
75
  code_puppy/command_line/mcp/handler.py,sha256=S8KSgf78w7vL7_ReArdcxTgZRoIi0Z0jCksNuELnCFU,4616
73
76
  code_puppy/command_line/mcp/help_command.py,sha256=dU3ekOjjNKxRS-RjUXJZ7PBwmJeIe-5MhcMYCiyVu4w,5472
74
77
  code_puppy/command_line/mcp/install_command.py,sha256=lmUyMUWtkGuy1SOQRHjQgt8mD3t1agVMQfEL5_TOzTM,8364
75
- code_puppy/command_line/mcp/install_menu.py,sha256=lUg7x43aK4NRIS3XrPhvhmcQwjyNb-rzrL-2GL6oYiw,24558
78
+ code_puppy/command_line/mcp/install_menu.py,sha256=GVNR7SJbheGLFc_r9N3CT1AT024ptzsEcj1cRnp4U3g,24769
76
79
  code_puppy/command_line/mcp/list_command.py,sha256=UKQFPlhT9qGMCyG5VKjvnSMzDDtfAhIaKU_eErgZJDg,3181
77
80
  code_puppy/command_line/mcp/logs_command.py,sha256=IZzOadnI2ch6j4AcdjuHwJYJWKw1_K1rrCh9_aVK94k,7759
78
81
  code_puppy/command_line/mcp/remove_command.py,sha256=hyU_tKJWfyLnmufrFVLwlF0qFEbghXBVMOvSgWvaEgA,2755
@@ -112,23 +115,35 @@ code_puppy/messaging/message_queue.py,sha256=e-viZxacBoNSxRJnCJ4hU4vzsSI3oX_rN58
112
115
  code_puppy/messaging/messages.py,sha256=vNenUTgeZLk2clH4-BLcj44vpzDMmAsOrbwn_msaCVw,16351
113
116
  code_puppy/messaging/queue_console.py,sha256=T0U_V1tdN6hd9DLokp-HCk0mhu8Ivpfajha368CBZrU,9983
114
117
  code_puppy/messaging/renderers.py,sha256=GHVtMnxE1pJ-yrcRjacY81JcjlHRz3UVHzp-ohN-CGE,12058
115
- code_puppy/messaging/rich_renderer.py,sha256=Kln4L3Lt-KD0orCav9CBxK0Ggz1u8eV4HbohcUvyENk,34215
118
+ code_puppy/messaging/rich_renderer.py,sha256=YMj5bdZSjufzFL6kNUuNhsoI_NfXUfvWBQ1FDWPw2Ho,37480
116
119
  code_puppy/messaging/spinner/__init__.py,sha256=KpK5tJqq9YnN3wklqvdH0BQmuwYnT83Mp4tPfQa9RqI,1664
117
120
  code_puppy/messaging/spinner/console_spinner.py,sha256=YIReuWPD01YPy58FqWdMDWj2QhauTUxKo675Ub4-eDA,8451
118
121
  code_puppy/messaging/spinner/spinner_base.py,sha256=JiQDAhCfwrWUFunb8Xcj1caEl34JJY7Bcio7mDeckSc,2694
119
122
  code_puppy/plugins/__init__.py,sha256=gWgrXWoFpl-3Mxz2DAvxKW6SkCWrOnw-hKsY9O7nHcI,6710
120
123
  code_puppy/plugins/oauth_puppy_html.py,sha256=Wpa-V_NlRiBAvo_OXHuR7wvOH_jSt8L9HSFGiab6xI0,13058
124
+ code_puppy/plugins/antigravity_oauth/__init__.py,sha256=1miHihSqRNXO20Vh_Gn9M3Aa2szh0gtdSCaKKj9nq0Q,362
125
+ code_puppy/plugins/antigravity_oauth/accounts.py,sha256=GQit2-K24bsopmTZyscFUq3M0cAEO5WutHWnipVdgz8,14304
126
+ code_puppy/plugins/antigravity_oauth/antigravity_model.py,sha256=FgZtXHsyTIX0wcJB7ivcdFd5DpRLqDFO_idcvMuDKtc,25336
127
+ code_puppy/plugins/antigravity_oauth/config.py,sha256=BoQgqf5I2XoHWnBBo9vhCIc_XwPj9Mbp0Z95ygWwt78,1362
128
+ code_puppy/plugins/antigravity_oauth/constants.py,sha256=qsrA10JJvzNuY0OobvvwCQcoGpILBninllcUUMKkUrQ,4644
129
+ code_puppy/plugins/antigravity_oauth/oauth.py,sha256=ZHXJtZP63l6brOpX1WdLfuUClIleA79-4y36YUJc6Wo,15137
130
+ code_puppy/plugins/antigravity_oauth/register_callbacks.py,sha256=uKIvfzH-dXj1g_5_gbD1FFgJ_fOYlsFtt5UL1EGqBc0,13121
131
+ code_puppy/plugins/antigravity_oauth/storage.py,sha256=LW1DkY6Z-GRbBDrIitT6glKemZptp3NzldIrLRqTAK0,8971
132
+ code_puppy/plugins/antigravity_oauth/test_plugin.py,sha256=n0kjFG8Vt2n1j0GgTRSdSyhF0t9xxE8Ht60SH5CSwzw,11027
133
+ code_puppy/plugins/antigravity_oauth/token.py,sha256=WbiFCkrZvChpGXvwIYsJMgqU9xdJ81KwR062lFlnL3U,5038
134
+ code_puppy/plugins/antigravity_oauth/transport.py,sha256=yZztRm8NHWemAtv7aVKsHdCQtU9BJKAd9RcqF91ZQOw,27689
135
+ code_puppy/plugins/antigravity_oauth/utils.py,sha256=mXHRv0l07r27VjtSsIy9rlpkUheP88RaM4x4M0O1mMY,5401
121
136
  code_puppy/plugins/chatgpt_oauth/__init__.py,sha256=Kjc6Hsz1sWvMD2OdAlWZvJRiKJSj4fx22boa-aVFKjA,189
122
137
  code_puppy/plugins/chatgpt_oauth/config.py,sha256=H_wAH9Duyn8WH2Kq8oe72uda-_4qu1uXLPun_SDdtsk,2023
123
138
  code_puppy/plugins/chatgpt_oauth/oauth_flow.py,sha256=i-CP2gpzEBT3ogUt-oTMexiP2on41N6PbRGIy2lZF30,11028
124
- code_puppy/plugins/chatgpt_oauth/register_callbacks.py,sha256=-JB1isODQ7v2Kn2alnSIg3mPjqnC-wTfsMO_G12V7iU,2872
139
+ code_puppy/plugins/chatgpt_oauth/register_callbacks.py,sha256=oPfAOdh5hp3Jg3tK5ylk1sy0ydxBebK9a9w1EL1dw9I,2965
125
140
  code_puppy/plugins/chatgpt_oauth/test_plugin.py,sha256=oHX7Eb_Hb4rgRpOWdhtFp8Jj6_FDuvXQITRPiNy4tRo,9622
126
141
  code_puppy/plugins/chatgpt_oauth/utils.py,sha256=fzpsCQOv0kqPWmG5vNEV_GLSUrMQh8cF7tdIjSOt1Dc,16504
127
142
  code_puppy/plugins/claude_code_oauth/README.md,sha256=76nHhMlhk61DZa5g0Q2fc0AtpplLmpbwuWFZt7PHH5g,5458
128
143
  code_puppy/plugins/claude_code_oauth/SETUP.md,sha256=lnGzofPLogBy3oPPFLv5_cZ7vjg_GYrIyYnF-EoTJKg,3278
129
144
  code_puppy/plugins/claude_code_oauth/__init__.py,sha256=mCcOU-wM7LNCDjr-w-WLPzom8nTF1UNt4nqxGE6Rt0k,187
130
145
  code_puppy/plugins/claude_code_oauth/config.py,sha256=DjGySCkvjSGZds6DYErLMAi3TItt8iSLGvyJN98nSEM,2013
131
- code_puppy/plugins/claude_code_oauth/register_callbacks.py,sha256=0NeX1hhkYIlVfPmjZ1xmcf1yueDAJh_FMUmvJlxSO-E,10057
146
+ code_puppy/plugins/claude_code_oauth/register_callbacks.py,sha256=g8sl-i7jIOF6OFALeaLqTF3mS4tD8GR_FCzvPjVw2js,10165
132
147
  code_puppy/plugins/claude_code_oauth/test_plugin.py,sha256=yQy4EeZl4bjrcog1d8BjknoDTRK75mRXXvkSQJYSSEM,9286
133
148
  code_puppy/plugins/claude_code_oauth/utils.py,sha256=wDaOU21zB3y6PWkuMXwE4mFjQuffyDae-vXysPTS-w8,13438
134
149
  code_puppy/plugins/customizable_commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -144,7 +159,7 @@ code_puppy/plugins/shell_safety/register_callbacks.py,sha256=W3v664RR48Fdbbbltf_
144
159
  code_puppy/prompts/codex_system_prompt.md,sha256=hEFTCziroLqZmqNle5kG34A8kvTteOWezCiVrAEKhE0,24400
145
160
  code_puppy/tools/__init__.py,sha256=BVTZ85jLHgDANwOnUSOz3UDlp8VQDq4DoGF23BRlyWw,6032
146
161
  code_puppy/tools/agent_tools.py,sha256=snBI6FlFtR03CbYKXwu53R48c_fRSuDIwcNdVUruLcA,21020
147
- code_puppy/tools/command_runner.py,sha256=Sz2AI9CCE3fUcFv-86p1BB5tBkt_UbrPNi57Tfk031E,45281
162
+ code_puppy/tools/command_runner.py,sha256=4RlgPWWE2Mk35t69QJWR4Md4etMGLR2rFSZAKrNohU4,44917
148
163
  code_puppy/tools/common.py,sha256=IboS6sbwN4a3FzHdfsZJtEFiyDUCszevI6LpH14ydEk,40561
149
164
  code_puppy/tools/file_modifications.py,sha256=vz9n7R0AGDSdLUArZr_55yJLkyI30M8zreAppxIx02M,29380
150
165
  code_puppy/tools/file_operations.py,sha256=CqhpuBnOFOcQCIYXOujskxq2VMLWYJhibYrH0YcPSfA,35692
@@ -159,10 +174,10 @@ code_puppy/tools/browser/browser_scripts.py,sha256=sNb8eLEyzhasy5hV4B9OjM8yIVMLV
159
174
  code_puppy/tools/browser/browser_workflows.py,sha256=nitW42vCf0ieTX1gLabozTugNQ8phtoFzZbiAhw1V90,6491
160
175
  code_puppy/tools/browser/camoufox_manager.py,sha256=RZjGOEftE5sI_tsercUyXFSZI2wpStXf-q0PdYh2G3I,8680
161
176
  code_puppy/tools/browser/vqa_agent.py,sha256=DBn9HKloILqJSTSdNZzH_PYWT0B2h9VwmY6akFQI_uU,2913
162
- code_puppy-0.0.325.data/data/code_puppy/models.json,sha256=IPABdOrDw2OZJxa0XGBWSWmBRerV6_pIEmKVLRtUbAk,3105
163
- code_puppy-0.0.325.data/data/code_puppy/models_dev_api.json,sha256=wHjkj-IM_fx1oHki6-GqtOoCrRMR0ScK0f-Iz0UEcy8,548187
164
- code_puppy-0.0.325.dist-info/METADATA,sha256=wo7WPKOxHwhkioUQNvZCOVzyOPClCRR3oBwQxesHVQA,28030
165
- code_puppy-0.0.325.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
166
- code_puppy-0.0.325.dist-info/entry_points.txt,sha256=Tp4eQC99WY3HOKd3sdvb22vZODRq0XkZVNpXOag_KdI,91
167
- code_puppy-0.0.325.dist-info/licenses/LICENSE,sha256=31u8x0SPgdOq3izJX41kgFazWsM43zPEF9eskzqbJMY,1075
168
- code_puppy-0.0.325.dist-info/RECORD,,
177
+ code_puppy-0.0.336.data/data/code_puppy/models.json,sha256=IPABdOrDw2OZJxa0XGBWSWmBRerV6_pIEmKVLRtUbAk,3105
178
+ code_puppy-0.0.336.data/data/code_puppy/models_dev_api.json,sha256=wHjkj-IM_fx1oHki6-GqtOoCrRMR0ScK0f-Iz0UEcy8,548187
179
+ code_puppy-0.0.336.dist-info/METADATA,sha256=K0YyE2O8F9-nMuMdbs2rAovJHJmtQox98_r4beIjGPA,28854
180
+ code_puppy-0.0.336.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
181
+ code_puppy-0.0.336.dist-info/entry_points.txt,sha256=Tp4eQC99WY3HOKd3sdvb22vZODRq0XkZVNpXOag_KdI,91
182
+ code_puppy-0.0.336.dist-info/licenses/LICENSE,sha256=31u8x0SPgdOq3izJX41kgFazWsM43zPEF9eskzqbJMY,1075
183
+ code_puppy-0.0.336.dist-info/RECORD,,