code-puppy 0.0.207__py3-none-any.whl → 0.0.208__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- code_puppy/agents/agent_c_reviewer.py +1 -3
- code_puppy/agents/agent_manager.py +8 -2
- code_puppy/agents/base_agent.py +3 -1
- code_puppy/command_line/command_handler.py +8 -4
- code_puppy/config.py +5 -5
- code_puppy/main.py +20 -8
- code_puppy/messaging/spinner/spinner_base.py +1 -3
- code_puppy/model_factory.py +7 -7
- code_puppy/session_storage.py +6 -2
- code_puppy/tools/browser/camoufox_manager.py +1 -2
- code_puppy/tui/app.py +9 -6
- code_puppy/tui/screens/autosave_picker.py +11 -2
- {code_puppy-0.0.207.dist-info → code_puppy-0.0.208.dist-info}/METADATA +1 -1
- {code_puppy-0.0.207.dist-info → code_puppy-0.0.208.dist-info}/RECORD +18 -18
- {code_puppy-0.0.207.data → code_puppy-0.0.208.data}/data/code_puppy/models.json +0 -0
- {code_puppy-0.0.207.dist-info → code_puppy-0.0.208.dist-info}/WHEEL +0 -0
- {code_puppy-0.0.207.dist-info → code_puppy-0.0.208.dist-info}/entry_points.txt +0 -0
- {code_puppy-0.0.207.dist-info → code_puppy-0.0.208.dist-info}/licenses/LICENSE +0 -0
@@ -16,9 +16,7 @@ class CReviewerAgent(BaseAgent):
|
|
16
16
|
|
17
17
|
@property
|
18
18
|
def description(self) -> str:
|
19
|
-
return
|
20
|
-
"Hardcore C systems reviewer obsessed with determinism, perf, and safety"
|
21
|
-
)
|
19
|
+
return "Hardcore C systems reviewer obsessed with determinism, perf, and safety"
|
22
20
|
|
23
21
|
def get_available_tools(self) -> list[str]:
|
24
22
|
"""Reviewers only need read-only inspection helpers."""
|
@@ -67,9 +67,15 @@ def _is_process_alive(pid: int) -> bool:
|
|
67
67
|
|
68
68
|
PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
|
69
69
|
kernel32 = ctypes.windll.kernel32 # type: ignore[attr-defined]
|
70
|
-
kernel32.OpenProcess.argtypes = [
|
70
|
+
kernel32.OpenProcess.argtypes = [
|
71
|
+
wintypes.DWORD,
|
72
|
+
wintypes.BOOL,
|
73
|
+
wintypes.DWORD,
|
74
|
+
]
|
71
75
|
kernel32.OpenProcess.restype = wintypes.HANDLE
|
72
|
-
handle = kernel32.OpenProcess(
|
76
|
+
handle = kernel32.OpenProcess(
|
77
|
+
PROCESS_QUERY_LIMITED_INFORMATION, False, int(pid)
|
78
|
+
)
|
73
79
|
if handle:
|
74
80
|
kernel32.CloseHandle(handle)
|
75
81
|
return True
|
code_puppy/agents/base_agent.py
CHANGED
@@ -928,7 +928,9 @@ class BaseAgent(ABC):
|
|
928
928
|
"""
|
929
929
|
group_id = str(uuid.uuid4())
|
930
930
|
# Avoid double-loading: reuse existing agent if already built
|
931
|
-
pydantic_agent =
|
931
|
+
pydantic_agent = (
|
932
|
+
self._code_generation_agent or self.reload_code_generation_agent()
|
933
|
+
)
|
932
934
|
|
933
935
|
# Build combined prompt payload when attachments are provided.
|
934
936
|
attachment_parts: List[Any] = []
|
@@ -33,7 +33,10 @@ def get_commands_help():
|
|
33
33
|
("/exit, /quit", "Exit interactive mode"),
|
34
34
|
("/generate-pr-description [@dir]", "Generate comprehensive PR description"),
|
35
35
|
("/model, /m <model>", "Set active model"),
|
36
|
-
(
|
36
|
+
(
|
37
|
+
"/reasoning <low|medium|high>",
|
38
|
+
"Set OpenAI reasoning effort for GPT-5 models",
|
39
|
+
),
|
37
40
|
("/pin_model <agent> <model>", "Pin a specific model to an agent"),
|
38
41
|
("/mcp", "Manage MCP servers (list, start, stop, status, etc.)"),
|
39
42
|
("/motd", "Show the latest message of the day (MOTD)"),
|
@@ -134,6 +137,7 @@ def _ensure_plugins_loaded() -> None:
|
|
134
137
|
|
135
138
|
def handle_command(command: str):
|
136
139
|
from code_puppy.messaging import emit_error, emit_info, emit_success, emit_warning
|
140
|
+
|
137
141
|
_ensure_plugins_loaded()
|
138
142
|
|
139
143
|
"""
|
@@ -318,6 +322,7 @@ def handle_command(command: str):
|
|
318
322
|
get_current_autosave_session_name,
|
319
323
|
rotate_autosave_id,
|
320
324
|
)
|
325
|
+
|
321
326
|
if len(tokens) == 1 or tokens[1] == "id":
|
322
327
|
sid = get_current_autosave_id()
|
323
328
|
emit_info(
|
@@ -619,9 +624,7 @@ def handle_command(command: str):
|
|
619
624
|
if is_json_agent and hasattr(current_agent, "refresh_config"):
|
620
625
|
current_agent.refresh_config()
|
621
626
|
current_agent.reload_code_generation_agent()
|
622
|
-
emit_info(
|
623
|
-
f"Active agent reloaded with pinned model '{model_name}'"
|
624
|
-
)
|
627
|
+
emit_info(f"Active agent reloaded with pinned model '{model_name}'")
|
625
628
|
except Exception as reload_error:
|
626
629
|
emit_warning(
|
627
630
|
f"Pinned model applied but reload failed: {reload_error}"
|
@@ -733,6 +736,7 @@ def handle_command(command: str):
|
|
733
736
|
# Rotate autosave id to avoid overwriting any existing autosave
|
734
737
|
try:
|
735
738
|
from code_puppy.config import rotate_autosave_id
|
739
|
+
|
736
740
|
new_id = rotate_autosave_id()
|
737
741
|
autosave_info = f"\n[dim]Autosave session rotated to: {new_id}[/dim]"
|
738
742
|
except Exception:
|
code_puppy/config.py
CHANGED
@@ -697,7 +697,7 @@ def get_auto_save_session() -> bool:
|
|
697
697
|
|
698
698
|
def set_auto_save_session(enabled: bool):
|
699
699
|
"""Sets the auto_save_session configuration value.
|
700
|
-
|
700
|
+
|
701
701
|
Args:
|
702
702
|
enabled: Whether to enable auto-saving of sessions
|
703
703
|
"""
|
@@ -721,7 +721,7 @@ def get_max_saved_sessions() -> int:
|
|
721
721
|
|
722
722
|
def set_max_saved_sessions(max_sessions: int):
|
723
723
|
"""Sets the max_saved_sessions configuration value.
|
724
|
-
|
724
|
+
|
725
725
|
Args:
|
726
726
|
max_sessions: Maximum number of sessions to keep (0 for unlimited)
|
727
727
|
"""
|
@@ -733,14 +733,14 @@ def get_current_autosave_id() -> str:
|
|
733
733
|
global _CURRENT_AUTOSAVE_ID
|
734
734
|
if not _CURRENT_AUTOSAVE_ID:
|
735
735
|
# Use a full timestamp so tests and UX can predict the name if needed
|
736
|
-
_CURRENT_AUTOSAVE_ID = datetime.datetime.now().strftime(
|
736
|
+
_CURRENT_AUTOSAVE_ID = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
|
737
737
|
return _CURRENT_AUTOSAVE_ID
|
738
738
|
|
739
739
|
|
740
740
|
def rotate_autosave_id() -> str:
|
741
741
|
"""Force a new autosave session ID and return it."""
|
742
742
|
global _CURRENT_AUTOSAVE_ID
|
743
|
-
_CURRENT_AUTOSAVE_ID = datetime.datetime.now().strftime(
|
743
|
+
_CURRENT_AUTOSAVE_ID = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
|
744
744
|
return _CURRENT_AUTOSAVE_ID
|
745
745
|
|
746
746
|
|
@@ -758,7 +758,7 @@ def set_current_autosave_from_session_name(session_name: str) -> str:
|
|
758
758
|
global _CURRENT_AUTOSAVE_ID
|
759
759
|
prefix = "auto_session_"
|
760
760
|
if session_name.startswith(prefix):
|
761
|
-
_CURRENT_AUTOSAVE_ID = session_name[len(prefix):]
|
761
|
+
_CURRENT_AUTOSAVE_ID = session_name[len(prefix) :]
|
762
762
|
else:
|
763
763
|
_CURRENT_AUTOSAVE_ID = session_name
|
764
764
|
return _CURRENT_AUTOSAVE_ID
|
code_puppy/main.py
CHANGED
@@ -175,15 +175,22 @@ async def main():
|
|
175
175
|
|
176
176
|
# Handle agent selection from command line
|
177
177
|
if args.agent:
|
178
|
-
from code_puppy.agents.agent_manager import
|
178
|
+
from code_puppy.agents.agent_manager import (
|
179
|
+
set_current_agent,
|
180
|
+
get_available_agents,
|
181
|
+
)
|
179
182
|
|
180
183
|
agent_name = args.agent.lower()
|
181
184
|
try:
|
182
185
|
# First check if the agent exists by getting available agents
|
183
186
|
available_agents = get_available_agents()
|
184
187
|
if agent_name not in available_agents:
|
185
|
-
emit_system_message(
|
186
|
-
|
188
|
+
emit_system_message(
|
189
|
+
f"[bold red]Error:[/bold red] Agent '{agent_name}' not found"
|
190
|
+
)
|
191
|
+
emit_system_message(
|
192
|
+
f"Available agents: {', '.join(available_agents.keys())}"
|
193
|
+
)
|
187
194
|
sys.exit(1)
|
188
195
|
|
189
196
|
# Agent exists, set it
|
@@ -192,7 +199,7 @@ async def main():
|
|
192
199
|
except Exception as e:
|
193
200
|
emit_system_message(f"[bold red]Error setting agent:[/bold red] {str(e)}")
|
194
201
|
sys.exit(1)
|
195
|
-
|
202
|
+
|
196
203
|
current_version = __version__
|
197
204
|
|
198
205
|
no_version_update = os.getenv("NO_VERSION_UPDATE", "").lower() in (
|
@@ -291,7 +298,6 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
|
|
291
298
|
|
292
299
|
emit_info("[bold cyan]Initializing agent...[/bold cyan]")
|
293
300
|
|
294
|
-
|
295
301
|
# Initialize the runtime agent manager
|
296
302
|
if initial_command:
|
297
303
|
from code_puppy.agents import get_current_agent
|
@@ -405,7 +411,11 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
|
|
405
411
|
|
406
412
|
# Check for clear command (supports both `clear` and `/clear`)
|
407
413
|
if task.strip().lower() in ("clear", "/clear"):
|
408
|
-
from code_puppy.messaging import
|
414
|
+
from code_puppy.messaging import (
|
415
|
+
emit_info,
|
416
|
+
emit_system_message,
|
417
|
+
emit_warning,
|
418
|
+
)
|
409
419
|
|
410
420
|
agent = get_current_agent()
|
411
421
|
new_session_id = finalize_autosave_session()
|
@@ -425,6 +435,7 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
|
|
425
435
|
command_result = handle_command(cleaned_for_commands)
|
426
436
|
except Exception as e:
|
427
437
|
from code_puppy.messaging import emit_error
|
438
|
+
|
428
439
|
emit_error(f"Command error: {e}")
|
429
440
|
# Continue interactive loop instead of exiting
|
430
441
|
continue
|
@@ -465,13 +476,14 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
|
|
465
476
|
|
466
477
|
# Auto-save session if enabled
|
467
478
|
from code_puppy.config import auto_save_session_if_enabled
|
479
|
+
|
468
480
|
auto_save_session_if_enabled()
|
469
481
|
|
470
482
|
# Ensure console output is flushed before next prompt
|
471
483
|
# This fixes the issue where prompt doesn't appear after agent response
|
472
484
|
display_console.file.flush() if hasattr(
|
473
485
|
display_console.file, "flush"
|
474
|
-
|
486
|
+
) else None
|
475
487
|
import time
|
476
488
|
|
477
489
|
time.sleep(0.1) # Brief pause to ensure all messages are rendered
|
@@ -655,4 +667,4 @@ def main_entry():
|
|
655
667
|
|
656
668
|
|
657
669
|
if __name__ == "__main__":
|
658
|
-
main_entry()
|
670
|
+
main_entry()
|
code_puppy/model_factory.py
CHANGED
@@ -33,7 +33,7 @@ from .round_robin_model import RoundRobinModel
|
|
33
33
|
|
34
34
|
class ZaiChatModel(OpenAIChatModel):
|
35
35
|
def _process_response(self, response):
|
36
|
-
response.object =
|
36
|
+
response.object = "chat.completion"
|
37
37
|
return super()._process_response(response)
|
38
38
|
|
39
39
|
|
@@ -248,18 +248,18 @@ class ModelFactory:
|
|
248
248
|
zai_model = ZaiChatModel(
|
249
249
|
model_name=model_config["name"],
|
250
250
|
provider=OpenAIProvider(
|
251
|
-
api_key=os.getenv(
|
252
|
-
base_url=
|
253
|
-
)
|
251
|
+
api_key=os.getenv("ZAI_API_KEY"),
|
252
|
+
base_url="https://api.z.ai/api/coding/paas/v4",
|
253
|
+
),
|
254
254
|
)
|
255
255
|
return zai_model
|
256
256
|
elif model_type == "zai_api":
|
257
257
|
zai_model = ZaiChatModel(
|
258
258
|
model_name=model_config["name"],
|
259
259
|
provider=OpenAIProvider(
|
260
|
-
api_key=os.getenv(
|
261
|
-
base_url=
|
262
|
-
)
|
260
|
+
api_key=os.getenv("ZAI_API_KEY"),
|
261
|
+
base_url="https://api.z.ai/api/paas/v4/",
|
262
|
+
),
|
263
263
|
)
|
264
264
|
return zai_model
|
265
265
|
elif model_type == "custom_gemini":
|
code_puppy/session_storage.py
CHANGED
@@ -190,7 +190,9 @@ async def restore_autosave_interactively(base_dir: Path) -> None:
|
|
190
190
|
for idx, (name, timestamp, message_count) in enumerate(page_entries, start=1):
|
191
191
|
timestamp_display = timestamp or "unknown time"
|
192
192
|
message_display = (
|
193
|
-
f"{message_count} messages"
|
193
|
+
f"{message_count} messages"
|
194
|
+
if message_count is not None
|
195
|
+
else "unknown size"
|
194
196
|
)
|
195
197
|
emit_system_message(
|
196
198
|
f" [{idx}] {name} ({message_display}, saved at {timestamp_display})"
|
@@ -200,7 +202,9 @@ async def restore_autosave_interactively(base_dir: Path) -> None:
|
|
200
202
|
page_count = (total + PAGE_SIZE - 1) // PAGE_SIZE
|
201
203
|
is_last_page = (page + 1) >= page_count
|
202
204
|
remaining = total - (page * PAGE_SIZE + len(page_entries))
|
203
|
-
summary =
|
205
|
+
summary = (
|
206
|
+
f" and {remaining} more" if (remaining > 0 and not is_last_page) else ""
|
207
|
+
)
|
204
208
|
label = "Return to first page" if is_last_page else f"Next page{summary}"
|
205
209
|
emit_system_message(f" [6] {label}")
|
206
210
|
emit_system_message(" [Enter] Skip loading autosave")
|
@@ -1,7 +1,7 @@
|
|
1
1
|
"""Camoufox browser manager - privacy-focused Firefox automation."""
|
2
2
|
|
3
3
|
from pathlib import Path
|
4
|
-
from typing import Optional
|
4
|
+
from typing import Optional
|
5
5
|
|
6
6
|
import camoufox
|
7
7
|
from camoufox.addons import DefaultAddons
|
@@ -10,7 +10,6 @@ from camoufox.locale import ALLOW_GEOIP, download_mmdb
|
|
10
10
|
from camoufox.pkgman import CamoufoxFetcher, camoufox_path
|
11
11
|
from playwright.async_api import Browser, BrowserContext, Page
|
12
12
|
|
13
|
-
_MIN_VIEWPORT_DIMENSION = 640
|
14
13
|
|
15
14
|
from code_puppy.messaging import emit_info
|
16
15
|
|
code_puppy/tui/app.py
CHANGED
@@ -176,11 +176,11 @@ class CodePuppyTUI(App):
|
|
176
176
|
# Start the message renderer EARLY to catch startup messages
|
177
177
|
# Using call_after_refresh to start it as soon as possible after mount
|
178
178
|
self.call_after_refresh(self.start_message_renderer_sync)
|
179
|
-
|
179
|
+
|
180
180
|
# Kick off a non-blocking preload of the agent/model so the
|
181
181
|
# status bar shows loading before first prompt
|
182
182
|
self.call_after_refresh(self.preload_agent_on_startup)
|
183
|
-
|
183
|
+
|
184
184
|
# After preload, offer to restore an autosave session (like interactive mode)
|
185
185
|
self.call_after_refresh(self.maybe_prompt_restore_autosave)
|
186
186
|
|
@@ -205,7 +205,7 @@ class CodePuppyTUI(App):
|
|
205
205
|
tight_lines = []
|
206
206
|
last_blank = False
|
207
207
|
for ln in lines:
|
208
|
-
is_blank =
|
208
|
+
is_blank = ln == ""
|
209
209
|
if is_blank and last_blank:
|
210
210
|
continue
|
211
211
|
tight_lines.append(ln)
|
@@ -522,6 +522,7 @@ class CodePuppyTUI(App):
|
|
522
522
|
# Auto-save session if enabled (mirror --interactive)
|
523
523
|
try:
|
524
524
|
from code_puppy.config import auto_save_session_if_enabled
|
525
|
+
|
525
526
|
auto_save_session_if_enabled()
|
526
527
|
except Exception:
|
527
528
|
pass
|
@@ -969,10 +970,12 @@ class CodePuppyTUI(App):
|
|
969
970
|
async def maybe_prompt_restore_autosave(self) -> None:
|
970
971
|
"""Offer to restore an autosave session at startup (TUI version)."""
|
971
972
|
try:
|
972
|
-
import asyncio
|
973
973
|
from pathlib import Path
|
974
974
|
|
975
|
-
from code_puppy.config import
|
975
|
+
from code_puppy.config import (
|
976
|
+
AUTOSAVE_DIR,
|
977
|
+
set_current_autosave_from_session_name,
|
978
|
+
)
|
976
979
|
from code_puppy.session_storage import list_sessions, load_session
|
977
980
|
|
978
981
|
base_dir = Path(AUTOSAVE_DIR)
|
@@ -1032,7 +1035,7 @@ class CodePuppyTUI(App):
|
|
1032
1035
|
# Use Textual's push_screen with a result callback
|
1033
1036
|
def on_picker_result(result_name=None):
|
1034
1037
|
# Schedule async handler to avoid blocking UI
|
1035
|
-
|
1038
|
+
|
1036
1039
|
self.run_worker(handle_result(result_name), exclusive=False)
|
1037
1040
|
|
1038
1041
|
self.push_screen(picker, on_picker_result)
|
@@ -2,6 +2,7 @@
|
|
2
2
|
Autosave Picker modal for TUI.
|
3
3
|
Lists recent autosave sessions and lets the user load one.
|
4
4
|
"""
|
5
|
+
|
5
6
|
from __future__ import annotations
|
6
7
|
|
7
8
|
import json
|
@@ -122,7 +123,11 @@ class AutosavePicker(ModalScreen):
|
|
122
123
|
|
123
124
|
for entry in self.entries[:50]:
|
124
125
|
ts = entry.timestamp or "unknown time"
|
125
|
-
count =
|
126
|
+
count = (
|
127
|
+
f"{entry.message_count} msgs"
|
128
|
+
if entry.message_count is not None
|
129
|
+
else "unknown size"
|
130
|
+
)
|
126
131
|
label = f"{entry.name} — {count}, saved at {ts}"
|
127
132
|
self.list_view.append(ListItem(Static(label)))
|
128
133
|
|
@@ -138,7 +143,11 @@ class AutosavePicker(ModalScreen):
|
|
138
143
|
# populate items
|
139
144
|
for entry in self.entries[:50]: # cap to avoid long lists
|
140
145
|
ts = entry.timestamp or "unknown time"
|
141
|
-
count =
|
146
|
+
count = (
|
147
|
+
f"{entry.message_count} msgs"
|
148
|
+
if entry.message_count is not None
|
149
|
+
else "unknown size"
|
150
|
+
)
|
142
151
|
label = f"{entry.name} — {count}, saved at {ts}"
|
143
152
|
self.list_view.append(ListItem(Static(label)))
|
144
153
|
yield self.list_view
|
@@ -1,37 +1,37 @@
|
|
1
1
|
code_puppy/__init__.py,sha256=ehbM1-wMjNmOXk_DBhhJECFyBv2dRHwwo7ucjHeM68E,107
|
2
2
|
code_puppy/__main__.py,sha256=pDVssJOWP8A83iFkxMLY9YteHYat0EyWDQqMkKHpWp4,203
|
3
3
|
code_puppy/callbacks.py,sha256=ukSgVFaEO68o6J09qFwDrnmNanrVv3toTLQhS504Meo,6162
|
4
|
-
code_puppy/config.py,sha256=
|
4
|
+
code_puppy/config.py,sha256=ZeBdSYPRFCdQiMwcovLO14pP3UuANbyfXgQNCgUgKqI,26554
|
5
5
|
code_puppy/http_utils.py,sha256=Hd9bx0nWTmCSRSQxMYF4Hh91bYB1zghqaheNRhHxabM,8957
|
6
|
-
code_puppy/main.py,sha256=
|
7
|
-
code_puppy/model_factory.py,sha256=
|
6
|
+
code_puppy/main.py,sha256=i4zcHFyNh7ytrQGLfcbnqXdp2fkso0QKzzosQXVWLgA,24200
|
7
|
+
code_puppy/model_factory.py,sha256=t7D45JETQGVQxXewo_Ha-_RYmpkes486Gn7BbldeVas,15401
|
8
8
|
code_puppy/models.json,sha256=iZjnV2kZ2ri9eICeVLAoSC_zyUPpWp9G2AHR8QsbfDs,2815
|
9
9
|
code_puppy/reopenable_async_client.py,sha256=4UJRaMp5np8cbef9F0zKQ7TPKOfyf5U-Kv-0zYUWDho,8274
|
10
10
|
code_puppy/round_robin_model.py,sha256=UEfw-Ix7GpNRWSxxuJtA-EE4_A46KXjMgFRciprfLmg,5634
|
11
|
-
code_puppy/session_storage.py,sha256=
|
11
|
+
code_puppy/session_storage.py,sha256=rDumPxvUz0VGNfeWxgl7SHs0Slu4W_WiKwYHWN525mc,9659
|
12
12
|
code_puppy/status_display.py,sha256=F6eEAkGePDp4StM2BWj-uLLQTDGtJrf0IufzCeP1rRg,8336
|
13
13
|
code_puppy/summarization_agent.py,sha256=LnObgtLmM6N4z2553XXQlXAOf8R1BPSNmFSfXkjpivg,3211
|
14
14
|
code_puppy/tui_state.py,sha256=TT76XBVapKj6fKjFzz6oxCONeN_BZwcMILxxZcxu6-Y,1171
|
15
15
|
code_puppy/version_checker.py,sha256=bjLDmgGPrl7XnYwX1u13O8uFlsfikV90PK6nbA9Z9QU,1150
|
16
16
|
code_puppy/agents/__init__.py,sha256=PtPB7Z5MSwmUKipgt_qxvIuGggcuVaYwNbnp1UP4tPc,518
|
17
|
-
code_puppy/agents/agent_c_reviewer.py,sha256=
|
17
|
+
code_puppy/agents/agent_c_reviewer.py,sha256=fTgiD9P4FfhxkfVnEonp684gIqFKFIm7r5f70tVEwBc,5020
|
18
18
|
code_puppy/agents/agent_code_puppy.py,sha256=vk25J5YSjt30ItfML8KyQc5QR8QumBv5_U8RhqaXUz4,7973
|
19
19
|
code_puppy/agents/agent_code_reviewer.py,sha256=8XHktiFrOVeFZ81WIefuTPQw_IzcNddm4bk46mW46ok,4003
|
20
20
|
code_puppy/agents/agent_cpp_reviewer.py,sha256=H4INgJo2OJ84QT7bfTkw4s1Ml7luwokhAgTsdig2TQQ,3653
|
21
21
|
code_puppy/agents/agent_creator_agent.py,sha256=IiwVirB6uoIeGOmtetut9eDv6o055ykND3V-fvyA8Lw,23042
|
22
22
|
code_puppy/agents/agent_golang_reviewer.py,sha256=-OMuT8hkapVf2Oox46Ck9SRHlsfd8ab8uefbVfdW72M,3348
|
23
23
|
code_puppy/agents/agent_javascript_reviewer.py,sha256=5YC4kRSvorcNgObjHjD2Rrgnvf8jlKhPqWdjOMjU9A0,3636
|
24
|
-
code_puppy/agents/agent_manager.py,sha256
|
24
|
+
code_puppy/agents/agent_manager.py,sha256=RppmDEo4YP87WV66JACZhqAsGwjwAu3zfJNihakMvZE,12883
|
25
25
|
code_puppy/agents/agent_python_reviewer.py,sha256=D0M3VA12QKdsyg2zIBI2FECxz0IP2fSIfg24xGzDhw0,3837
|
26
26
|
code_puppy/agents/agent_qa_expert.py,sha256=wCGXzuAVElT5c-QigQVb8JX9Gw0JmViCUQQnADMSbVc,3796
|
27
27
|
code_puppy/agents/agent_qa_kitten.py,sha256=5PeFFSwCFlTUvP6h5bGntx0xv5NmRwBiw0HnMqY8nLI,9107
|
28
28
|
code_puppy/agents/agent_security_auditor.py,sha256=ADafi2x4gqXw6m-Nch5vjiKjO0Urcbj0x4zxHti3gDw,3712
|
29
29
|
code_puppy/agents/agent_typescript_reviewer.py,sha256=EDY1mFkVpuJ1BPXsJFu2wQ2pfAV-90ipc_8w9ymrKPg,4054
|
30
|
-
code_puppy/agents/base_agent.py,sha256=
|
30
|
+
code_puppy/agents/base_agent.py,sha256=_xpaLv_b6wJRcjV3ED-V01MVLynnceQwIP21wM7QpEE,41433
|
31
31
|
code_puppy/agents/json_agent.py,sha256=lhopDJDoiSGHvD8A6t50hi9ZBoNRKgUywfxd0Po_Dzc,4886
|
32
32
|
code_puppy/command_line/__init__.py,sha256=y7WeRemfYppk8KVbCGeAIiTuiOszIURCDjOMZv_YRmU,45
|
33
33
|
code_puppy/command_line/attachments.py,sha256=eOf0zqBWnoAgC1FhWOkOyLjx_es0HGEFQ6EV1ZZuc1c,12934
|
34
|
-
code_puppy/command_line/command_handler.py,sha256=
|
34
|
+
code_puppy/command_line/command_handler.py,sha256=S42khEdRyMrWFgN3X5NyMTu1M15K3hEmrtLGyPdjqYc,31606
|
35
35
|
code_puppy/command_line/file_path_completion.py,sha256=gw8NpIxa6GOpczUJRyh7VNZwoXKKn-yvCqit7h2y6Gg,2931
|
36
36
|
code_puppy/command_line/load_context_completion.py,sha256=6eZxV6Bs-EFwZjN93V8ZDZUC-6RaWxvtZk-04Wtikyw,2240
|
37
37
|
code_puppy/command_line/model_picker_completion.py,sha256=uqwpbMYnCcWUZZ10Y4pMBKBfW52wQ-KdML2PO4Xjwr0,4501
|
@@ -80,7 +80,7 @@ code_puppy/messaging/queue_console.py,sha256=hf32bKfAOdAaxYuARnmDuWhq4ET77xMWDvu
|
|
80
80
|
code_puppy/messaging/renderers.py,sha256=9VOpVmu7emyyg1CXgm17u4IzMNcLHvueBl7G14pLQho,16123
|
81
81
|
code_puppy/messaging/spinner/__init__.py,sha256=2yskPQz_hVcUjlK2nNlPdprgCbP56kjdgtOvwWiFUF0,1744
|
82
82
|
code_puppy/messaging/spinner/console_spinner.py,sha256=POwPdJvJE5bJ5ZWUJcEp5iouQjaS0Urw8aWE0YQELxM,7099
|
83
|
-
code_puppy/messaging/spinner/spinner_base.py,sha256=
|
83
|
+
code_puppy/messaging/spinner/spinner_base.py,sha256=JiQDAhCfwrWUFunb8Xcj1caEl34JJY7Bcio7mDeckSc,2694
|
84
84
|
code_puppy/messaging/spinner/textual_spinner.py,sha256=NQsRtbSJoeNz-zGcxrORZ_joJ0CVJlJ0f1ESGryJXIc,3671
|
85
85
|
code_puppy/plugins/__init__.py,sha256=fksDqMUiXPJ5WNuMsYsVR8ulueQRCXPlvECEyicHPtQ,1312
|
86
86
|
code_puppy/plugins/example_custom_command/register_callbacks.py,sha256=Cy3ScPy9wLyqobVBK06ObOpvlHGDyGBSvSZToTj1IcE,1680
|
@@ -99,10 +99,10 @@ code_puppy/tools/browser/browser_navigation.py,sha256=Tj_fNcM3KGpkM2UTKcGQX8BpI3
|
|
99
99
|
code_puppy/tools/browser/browser_screenshot.py,sha256=YU4olUqxhqyK3_pBC0BtU6A7_EEtiRlh6saj93nkKAg,8258
|
100
100
|
code_puppy/tools/browser/browser_scripts.py,sha256=MMO5KRjdrhuLOoJGoKGG1jm6UAqhFhUznz02aWqhMAE,15065
|
101
101
|
code_puppy/tools/browser/browser_workflows.py,sha256=jplJ1T60W3G4-dhVJX-CXkm9sskUH_Qzp0Dj-oubvrE,6142
|
102
|
-
code_puppy/tools/browser/camoufox_manager.py,sha256=
|
102
|
+
code_puppy/tools/browser/camoufox_manager.py,sha256=93l8KtKEZFbItYsvPK-LPf6ag940nnTROLgNRmH3J3I,7729
|
103
103
|
code_puppy/tools/browser/vqa_agent.py,sha256=0GMDgJAK728rIuSQxAVytFSNagjo0LCjCUxBTm3w9Po,1952
|
104
104
|
code_puppy/tui/__init__.py,sha256=XesAxIn32zLPOmvpR2wIDxDAnnJr81a5pBJB4cZp1Xs,321
|
105
|
-
code_puppy/tui/app.py,sha256=
|
105
|
+
code_puppy/tui/app.py,sha256=WBVMnjztK_Poc5S7ZfBEX91oSZmgZBTP6owDX5WnyrU,44254
|
106
106
|
code_puppy/tui/messages.py,sha256=zQoToWI0eWdT36NEsY6RdCFzcDfAmfvoPlHv8jiCbgo,720
|
107
107
|
code_puppy/tui/components/__init__.py,sha256=uj5pnk3s6SEN3SbFI0ZnzaA2KK1NNg8TfUj6U-Z732U,455
|
108
108
|
code_puppy/tui/components/chat_view.py,sha256=Ff6uM6J0yENISNAOYroX7F-JL73_ajUUcP5IZSf2mng,19914
|
@@ -118,14 +118,14 @@ code_puppy/tui/models/chat_message.py,sha256=2fSqsl4EHKgGsi_cVKWBbFq1NQwZyledGuJ
|
|
118
118
|
code_puppy/tui/models/command_history.py,sha256=bPWr_xnyQvjG5tPg_5pwqlEzn2fR170HlvBJwAXRpAE,2895
|
119
119
|
code_puppy/tui/models/enums.py,sha256=1ulsei95Gxy4r1sk-m-Sm5rdmejYCGRI-YtUwJmKFfM,501
|
120
120
|
code_puppy/tui/screens/__init__.py,sha256=qxiJKyO3MKCNdPjUuHA2-Pnpda0JN20n7e9sU25eC9M,352
|
121
|
-
code_puppy/tui/screens/autosave_picker.py,sha256=
|
121
|
+
code_puppy/tui/screens/autosave_picker.py,sha256=OW3d-GrrGINzwdY3h13mJSQjaH5Kej9sU1Xq8IIgIJI,5577
|
122
122
|
code_puppy/tui/screens/help.py,sha256=eJuPaOOCp7ZSUlecearqsuX6caxWv7NQszUh0tZJjBM,3232
|
123
123
|
code_puppy/tui/screens/mcp_install_wizard.py,sha256=vObpQwLbXjQsxmSg-WCasoev1usEi0pollKnL0SHu9U,27693
|
124
124
|
code_puppy/tui/screens/settings.py,sha256=EoMxiguyeF0srwV1bj4_MG9rrxkNthh6TdTNsxnXLfE,11460
|
125
125
|
code_puppy/tui/screens/tools.py,sha256=3pr2Xkpa9Js6Yhf1A3_wQVRzFOui-KDB82LwrsdBtyk,1715
|
126
|
-
code_puppy-0.0.
|
127
|
-
code_puppy-0.0.
|
128
|
-
code_puppy-0.0.
|
129
|
-
code_puppy-0.0.
|
130
|
-
code_puppy-0.0.
|
131
|
-
code_puppy-0.0.
|
126
|
+
code_puppy-0.0.208.data/data/code_puppy/models.json,sha256=iZjnV2kZ2ri9eICeVLAoSC_zyUPpWp9G2AHR8QsbfDs,2815
|
127
|
+
code_puppy-0.0.208.dist-info/METADATA,sha256=av_guE1oZMt5G2CsKQxsdsrkdeO35bYkbPDVi9tz0u0,21312
|
128
|
+
code_puppy-0.0.208.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
129
|
+
code_puppy-0.0.208.dist-info/entry_points.txt,sha256=Tp4eQC99WY3HOKd3sdvb22vZODRq0XkZVNpXOag_KdI,91
|
130
|
+
code_puppy-0.0.208.dist-info/licenses/LICENSE,sha256=31u8x0SPgdOq3izJX41kgFazWsM43zPEF9eskzqbJMY,1075
|
131
|
+
code_puppy-0.0.208.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|