code-puppy 0.0.356__py3-none-any.whl → 0.0.357__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 (30) hide show
  1. code_puppy/agents/agent_qa_kitten.py +10 -5
  2. code_puppy/agents/agent_terminal_qa.py +323 -0
  3. code_puppy/api/app.py +79 -2
  4. code_puppy/api/routers/commands.py +21 -2
  5. code_puppy/api/routers/sessions.py +49 -8
  6. code_puppy/config.py +5 -2
  7. code_puppy/tools/__init__.py +37 -0
  8. code_puppy/tools/agent_tools.py +26 -1
  9. code_puppy/tools/browser/__init__.py +41 -0
  10. code_puppy/tools/browser/browser_control.py +6 -6
  11. code_puppy/tools/browser/browser_interactions.py +21 -20
  12. code_puppy/tools/browser/browser_locators.py +9 -9
  13. code_puppy/tools/browser/browser_navigation.py +7 -7
  14. code_puppy/tools/browser/browser_screenshot.py +60 -135
  15. code_puppy/tools/browser/browser_screenshot_vqa.py +195 -0
  16. code_puppy/tools/browser/browser_scripts.py +15 -13
  17. code_puppy/tools/browser/camoufox_manager.py +226 -64
  18. code_puppy/tools/browser/chromium_terminal_manager.py +259 -0
  19. code_puppy/tools/browser/terminal_command_tools.py +521 -0
  20. code_puppy/tools/browser/terminal_screenshot_tools.py +520 -0
  21. code_puppy/tools/browser/terminal_tools.py +525 -0
  22. code_puppy/tools/browser/vqa_agent.py +138 -34
  23. code_puppy/tools/command_runner.py +0 -1
  24. {code_puppy-0.0.356.dist-info → code_puppy-0.0.357.dist-info}/METADATA +1 -1
  25. {code_puppy-0.0.356.dist-info → code_puppy-0.0.357.dist-info}/RECORD +30 -24
  26. {code_puppy-0.0.356.data → code_puppy-0.0.357.data}/data/code_puppy/models.json +0 -0
  27. {code_puppy-0.0.356.data → code_puppy-0.0.357.data}/data/code_puppy/models_dev_api.json +0 -0
  28. {code_puppy-0.0.356.dist-info → code_puppy-0.0.357.dist-info}/WHEEL +0 -0
  29. {code_puppy-0.0.356.dist-info → code_puppy-0.0.357.dist-info}/entry_points.txt +0 -0
  30. {code_puppy-0.0.356.dist-info → code_puppy-0.0.357.dist-info}/licenses/LICENSE +0 -0
@@ -2,10 +2,12 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from functools import lru_cache
5
+ from collections.abc import AsyncIterable
6
+ from typing import Any
6
7
 
7
8
  from pydantic import BaseModel, Field
8
- from pydantic_ai import Agent, BinaryContent
9
+ from pydantic_ai import Agent, BinaryContent, PartDeltaEvent, PartStartEvent, RunContext
10
+ from pydantic_ai.messages import TextPart, TextPartDelta
9
11
 
10
12
  from code_puppy.config import get_use_dbos, get_vqa_model_name
11
13
 
@@ -18,73 +20,175 @@ class VisualAnalysisResult(BaseModel):
18
20
  observations: str
19
21
 
20
22
 
21
- def _get_vqa_instructions() -> str:
22
- """Get the system instructions for the VQA agent."""
23
- return (
24
- "You are a visual analysis specialist. Answer the user's question about the provided image. "
25
- "Always respond using the structured schema: answer, confidence (0-1 float), observations. "
26
- "Confidence reflects how certain you are about the answer. Observations should include useful, concise context."
27
- )
23
+ DEFAULT_VQA_INSTRUCTIONS = (
24
+ "You are a visual analysis specialist. Answer the user's question about the provided image. "
25
+ "Always respond using the structured schema: answer, confidence (0-1 float), observations. "
26
+ "Confidence reflects how certain you are about the answer. Observations should include useful, concise context."
27
+ )
28
28
 
29
29
 
30
- @lru_cache(maxsize=1)
31
- def _load_vqa_agent(model_name: str) -> Agent[None, VisualAnalysisResult]:
32
- """Create a cached agent instance for visual analysis."""
30
+ async def run_vqa_analysis(
31
+ question: str,
32
+ image_bytes: bytes,
33
+ media_type: str = "image/png",
34
+ ) -> str:
35
+ """Execute the VQA agent asynchronously against screenshot bytes.
36
+
37
+ Follows the same pattern as agent_tools.py for prompt preparation
38
+ and model configuration.
39
+
40
+ Args:
41
+ question: The question to ask about the image.
42
+ image_bytes: The raw image bytes.
43
+ media_type: The MIME type of the image (default: "image/png").
44
+ system_prompt: Optional custom system prompt. If None, uses default VQA instructions.
45
+
46
+ Returns:
47
+ str: The answer from the VQA analysis.
48
+ """
49
+ from code_puppy import callbacks
33
50
  from code_puppy.model_factory import ModelFactory
34
51
  from code_puppy.model_utils import prepare_prompt_for_model
35
52
 
53
+ # Get model configuration
54
+ model_name = get_vqa_model_name()
36
55
  models_config = ModelFactory.load_config()
37
56
  model = ModelFactory.get_model(model_name, models_config)
38
57
 
39
- # Handle claude-code models: swap instructions (prompt prepending happens in run_vqa_analysis)
40
- instructions = _get_vqa_instructions()
58
+ # Build instructions: custom system_prompt or default VQA instructions
59
+ instructions = DEFAULT_VQA_INSTRUCTIONS
60
+
61
+ # Apply prompt additions (like file permission handling) - same as agent_tools.py
62
+ prompt_additions = callbacks.on_load_prompt()
63
+ if prompt_additions:
64
+ instructions += "\n" + "\n".join(prompt_additions)
65
+
66
+ # Handle claude-code models: swap instructions, prepend system prompt to user question
67
+ # Following the exact pattern from agent_tools.py
41
68
  prepared = prepare_prompt_for_model(
42
- model_name, instructions, "", prepend_system_to_user=False
69
+ model_name, instructions, question, prepend_system_to_user=True
43
70
  )
44
71
  instructions = prepared.instructions
72
+ question = prepared.user_prompt
45
73
 
74
+ # Create the VQA agent with string output
46
75
  vqa_agent = Agent(
47
76
  model=model,
48
77
  instructions=instructions,
49
- output_type=VisualAnalysisResult,
50
- retries=2,
51
78
  )
52
79
 
80
+ # Wrap with DBOS if enabled
53
81
  if get_use_dbos():
54
82
  from pydantic_ai.durable_exec.dbos import DBOSAgent
55
83
 
56
- dbos_agent = DBOSAgent(vqa_agent, name="vqa-agent")
57
- return dbos_agent
84
+ vqa_agent = DBOSAgent(vqa_agent, name="vqa-agent")
58
85
 
59
- return vqa_agent
86
+ # Run the agent with the image
87
+ result = await vqa_agent.run(
88
+ [
89
+ question,
90
+ BinaryContent(data=image_bytes, media_type=media_type),
91
+ ]
92
+ )
93
+ return result.output
60
94
 
61
95
 
62
- def _get_vqa_agent() -> Agent[None, VisualAnalysisResult]:
63
- """Return a cached VQA agent configured with the current model."""
64
- model_name = get_vqa_model_name()
65
- # lru_cache keyed by model_name ensures refresh when configuration changes
66
- return _load_vqa_agent(model_name)
96
+ def _create_vqa_stream_handler(
97
+ accumulator: list[str],
98
+ ):
99
+ """Create an event stream handler that accumulates text.
100
+
101
+ Args:
102
+ accumulator: List to accumulate text chunks into (pass empty list).
103
+
104
+ Returns:
105
+ Async event stream handler function.
106
+ """
107
+
108
+ async def vqa_event_stream_handler(
109
+ ctx: RunContext,
110
+ events: AsyncIterable[Any],
111
+ ) -> None:
112
+ """Handle streaming events - print text as it arrives."""
113
+ async for event in events:
114
+ # Handle text part start - might have initial content
115
+ if isinstance(event, PartStartEvent):
116
+ if isinstance(event.part, TextPart) and event.part.content:
117
+ accumulator.append(event.part.content)
67
118
 
119
+ # Handle text deltas - the streaming bits
120
+ elif isinstance(event, PartDeltaEvent):
121
+ if isinstance(event.delta, TextPartDelta) and event.delta.content_delta:
122
+ accumulator.append(event.delta.content_delta)
68
123
 
69
- def run_vqa_analysis(
124
+ return vqa_event_stream_handler
125
+
126
+
127
+ async def run_vqa_analysis_stream(
70
128
  question: str,
71
129
  image_bytes: bytes,
72
130
  media_type: str = "image/png",
73
- ) -> VisualAnalysisResult:
74
- """Execute the VQA agent synchronously against screenshot bytes."""
75
- from code_puppy.model_utils import prepare_prompt_for_model
131
+ ) -> str:
132
+ """Execute the VQA agent with streaming output.
76
133
 
77
- agent = _get_vqa_agent()
134
+ Streams text to console as it arrives and accumulates the full response.
78
135
 
79
- # Handle claude-code models: prepend system prompt to user question
136
+ Args:
137
+ question: The question to ask about the image.
138
+ image_bytes: The raw image bytes.
139
+ media_type: The MIME type of the image (default: "image/png").
140
+
141
+ Returns:
142
+ str: The accumulated answer from the VQA analysis.
143
+ """
144
+ from code_puppy import callbacks
145
+ from code_puppy.model_factory import ModelFactory
146
+ from code_puppy.model_utils import prepare_prompt_for_model
147
+
148
+ # Get model configuration
80
149
  model_name = get_vqa_model_name()
81
- prepared = prepare_prompt_for_model(model_name, _get_vqa_instructions(), question)
150
+ models_config = ModelFactory.load_config()
151
+ model = ModelFactory.get_model(model_name, models_config)
152
+
153
+ # Build instructions
154
+ instructions = DEFAULT_VQA_INSTRUCTIONS
155
+
156
+ # Apply prompt additions (like file permission handling)
157
+ prompt_additions = callbacks.on_load_prompt()
158
+ if prompt_additions:
159
+ instructions += "\n" + "\n".join(prompt_additions)
160
+
161
+ # Handle claude-code models: swap instructions, prepend system prompt to user question
162
+ prepared = prepare_prompt_for_model(
163
+ model_name, instructions, question, prepend_system_to_user=True
164
+ )
165
+ instructions = prepared.instructions
82
166
  question = prepared.user_prompt
83
167
 
84
- result = agent.run_sync(
168
+ # Create the VQA agent
169
+ vqa_agent = Agent(
170
+ model=model,
171
+ instructions=instructions,
172
+ )
173
+
174
+ # Wrap with DBOS if enabled
175
+ if get_use_dbos():
176
+ from pydantic_ai.durable_exec.dbos import DBOSAgent
177
+
178
+ vqa_agent = DBOSAgent(vqa_agent, name="vqa-agent-stream")
179
+
180
+ # Accumulator for streamed text (use list to allow mutation in handler)
181
+ accumulated_chunks: list[str] = []
182
+
183
+ # Create the stream handler
184
+ stream_handler = _create_vqa_stream_handler(accumulated_chunks)
185
+
186
+ # Run the agent with event_stream_handler
187
+ result = await vqa_agent.run(
85
188
  [
86
189
  question,
87
190
  BinaryContent(data=image_bytes, media_type=media_type),
88
- ]
191
+ ],
192
+ event_stream_handler=stream_handler,
89
193
  )
90
194
  return result.output
@@ -1071,7 +1071,6 @@ async def run_shell_command(
1071
1071
  error="Another command is currently awaiting confirmation",
1072
1072
  )
1073
1073
 
1074
-
1075
1074
  # Get puppy name for personalized messages
1076
1075
  from code_puppy.config import get_puppy_name
1077
1076
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-puppy
3
- Version: 0.0.356
3
+ Version: 0.0.357
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
@@ -4,7 +4,7 @@ code_puppy/callbacks.py,sha256=Pp0VyeXJBEtk-N_RSWr5pbveelovsdLUiJ4f11dzwGw,10775
4
4
  code_puppy/chatgpt_codex_client.py,sha256=Om0ANB_kpHubhCwNzF9ENf8RvKBqs0IYzBLl_SNw0Vk,9833
5
5
  code_puppy/claude_cache_client.py,sha256=Gl6um5ZaKpcnxOvoFSM8Lwm_Vu4-VyWz8Nli8DnRLa4,22508
6
6
  code_puppy/cli_runner.py,sha256=w5CLKgQYYaT7My3Cga2StXYol-u6DBxNzzUuhhsfhsA,34952
7
- code_puppy/config.py,sha256=1bga5PP_usHkxRx2Vqaz_s820YhADo9K8R5pcaE9O90,54338
7
+ code_puppy/config.py,sha256=gwOK-WDuYBzJKwyGCFALJiW0pstiA39pRDm1O1zFek4,54528
8
8
  code_puppy/error_logging.py,sha256=a80OILCUtJhexI6a9GM-r5LqIdjvSRzggfgPp2jv1X0,3297
9
9
  code_puppy/gemini_code_assist.py,sha256=KGS7sO5OLc83nDF3xxS-QiU6vxW9vcm6hmzilu79Ef8,13867
10
10
  code_puppy/http_utils.py,sha256=H3N5Qz2B1CcsGUYOycGWAqoNMr2P1NCVluKX3aRwRqI,10358
@@ -38,8 +38,9 @@ code_puppy/agents/agent_planning.py,sha256=6q3s5qCko2FcUfaLzImOFNDi0H61WBc2PNtsO
38
38
  code_puppy/agents/agent_python_programmer.py,sha256=R-7XoGIFJ58EY9LE9mWGcQQ8gSsMzi-1HD6wigJQPL8,6846
39
39
  code_puppy/agents/agent_python_reviewer.py,sha256=J8lqzoKJlohs8NWMbgUpHXNt1bXHNIkuGjzLd9Af8qE,5854
40
40
  code_puppy/agents/agent_qa_expert.py,sha256=5Ikb4U3SZQknUEfwlHZiyZXKqnffnOTQagr_wrkUkPk,10125
41
- code_puppy/agents/agent_qa_kitten.py,sha256=5PeFFSwCFlTUvP6h5bGntx0xv5NmRwBiw0HnMqY8nLI,9107
41
+ code_puppy/agents/agent_qa_kitten.py,sha256=bjQdAPL_VMjSDn012mHQgnduuQkGG0JeXuC3T1KrU6g,9372
42
42
  code_puppy/agents/agent_security_auditor.py,sha256=SpiYNA0XAsIwBj7S2_EQPRslRUmF_-b89pIJyW7DYtY,12022
43
+ code_puppy/agents/agent_terminal_qa.py,sha256=U-iyP7OBWdAmchW_oUU8k6asH2aignTMmgqqYDyf-ms,10343
43
44
  code_puppy/agents/agent_typescript_reviewer.py,sha256=vsnpp98xg6cIoFAEJrRTUM_i4wLEWGm5nJxs6fhHobM,10275
44
45
  code_puppy/agents/base_agent.py,sha256=oKlX9CEIWSvdXyQDVi9F1jauA6rjKleY_n6044Ux5DY,73840
45
46
  code_puppy/agents/event_stream_handler.py,sha256=HM62_THZpMVnqKIB6Vbo6IwmJt6Kjoc3YbyRy2FclA4,13805
@@ -54,15 +55,15 @@ code_puppy/agents/pack/shepherd.py,sha256=gSsPAj7MV_AaiSUWNNoFLW0C932ToctJl2X9yS
54
55
  code_puppy/agents/pack/terrier.py,sha256=bw0f5g0fmIMVsVZsBYwDrIUwMhldg1U7tzGk1EHhgK0,7935
55
56
  code_puppy/agents/pack/watchdog.py,sha256=xgiyrGgMdf8CNJoZ0bPqZ_oZBc6cu6It8d_jeNONiy4,10039
56
57
  code_puppy/api/__init__.py,sha256=q0VZ5PgiCjEL2xWPVsElwAffDscJ6JtbbIhYFmw3TA4,357
57
- code_puppy/api/app.py,sha256=4imfbatGX0h2rIUfo4vP2H4XLOvutM0D_EJMd_dQAf8,2868
58
+ code_puppy/api/app.py,sha256=J7a0jfSJ1kqS0t3wt0AaCEGqIroVsXtVoVcbJi0Ag5k,5456
58
59
  code_puppy/api/main.py,sha256=ycWD5_aWwdOQ2GPnqsQC-BjINNx_Qie6xFyjr9gYofI,453
59
60
  code_puppy/api/pty_manager.py,sha256=P-SB9yuMlrwfgedV6VkzWDtGBMKAxnqV-RysQubhrS8,13714
60
61
  code_puppy/api/websocket.py,sha256=j_96B2k2XQ-KGsNqGZqTjUeUH8NkDGfgSs32Bj4C634,5360
61
62
  code_puppy/api/routers/__init__.py,sha256=-ifjlIm_yeFQ27vIC6OzeQFJZjnUF1e6xbFK1aNG798,430
62
63
  code_puppy/api/routers/agents.py,sha256=Lshn89lIBi49if6GoJDBZQ2_8l7JfgAUy4gvYXlfmws,939
63
- code_puppy/api/routers/commands.py,sha256=kl3ouYIg6DRWgPIDmDnN6RXJzyeQqUrh8cm1jR_eG1M,5821
64
+ code_puppy/api/routers/commands.py,sha256=HRvsYmjrUL_tha7-nKFBEJhGRfUlCspKkngwLU8TQ6Y,6513
64
65
  code_puppy/api/routers/config.py,sha256=uDUFYZqki0fQd0U5EHpfTgqlZaRFfmhPyWrIHXNBX3A,2005
65
- code_puppy/api/routers/sessions.py,sha256=KeTKXLj0BjPMvnSU91LmNgc0coQ7QdRRn8puqdvknsc,5346
66
+ code_puppy/api/routers/sessions.py,sha256=GqYRT7IJYPpEdTseLF3FIpbvvD86lIqwwPswL31D9Wc,6786
66
67
  code_puppy/api/templates/terminal.html,sha256=9alh6tTbLyXPDjBvkXw8nEWPXB-m_LIceGGRYpSLuyo,13125
67
68
  code_puppy/command_line/__init__.py,sha256=y7WeRemfYppk8KVbCGeAIiTuiOszIURCDjOMZv_YRmU,45
68
69
  code_puppy/command_line/add_model_menu.py,sha256=CpURhxPvUhLHLBV_uwH1ODfJ-WAcGklvlsjEf5Vfvg4,43255
@@ -183,29 +184,34 @@ code_puppy/plugins/shell_safety/command_cache.py,sha256=adYtSPNVOZfW_6dQdtEihO6E
183
184
  code_puppy/plugins/shell_safety/register_callbacks.py,sha256=W3v664RR48Fdbbbltf_NnX22_Ahw2AvAOtvXvWc7KxQ,7322
184
185
  code_puppy/prompts/antigravity_system_prompt.md,sha256=ZaTfRyY57ttROyZMmOBtqZQu1to7sdTNTv8_0fTgPNw,6807
185
186
  code_puppy/prompts/codex_system_prompt.md,sha256=hEFTCziroLqZmqNle5kG34A8kvTteOWezCiVrAEKhE0,24400
186
- code_puppy/tools/__init__.py,sha256=eQY-GL2ToV9IdRKlrnWlcPLyncJyU1VGZxq9yy0twNI,6137
187
- code_puppy/tools/agent_tools.py,sha256=z9Uj65aqIZ4etyq6mtH05DQEbA6dWSWAN-wH8RSmdXg,24476
188
- code_puppy/tools/command_runner.py,sha256=OLwPUNicgiHfQj6Ux4SaVNYmX425VbMjrv-DsxZ9e_M,50996
187
+ code_puppy/tools/__init__.py,sha256=WC1DO3OeTVSibpvIIoyfdxbeeC0oigiBSUqpmdw8G4o,7615
188
+ code_puppy/tools/agent_tools.py,sha256=XvBQ_IPa4NHLmIA2mdyPwy9GPlYGQwhtdn-w_3i239g,25517
189
+ code_puppy/tools/command_runner.py,sha256=Sresr_ykou_c2V1sKoNxqrqCQovKF5yDiQJ8r3E9lak,50995
189
190
  code_puppy/tools/common.py,sha256=lVtF94cn6jtC5YKfitV7L3rk37Ts2gMoHLQrqDFD2E4,46411
190
191
  code_puppy/tools/display.py,sha256=-ulDyq55178f8O_TAEmnxGoy_ZdFkbHBw-W4ul851GM,2675
191
192
  code_puppy/tools/file_modifications.py,sha256=vz9n7R0AGDSdLUArZr_55yJLkyI30M8zreAppxIx02M,29380
192
193
  code_puppy/tools/file_operations.py,sha256=CqhpuBnOFOcQCIYXOujskxq2VMLWYJhibYrH0YcPSfA,35692
193
194
  code_puppy/tools/subagent_context.py,sha256=zsiKV3B3DxZ_Y5IHHhtE-SMFDg_jMrY7Hi6r5LH--IU,4781
194
195
  code_puppy/tools/tools_content.py,sha256=bsBqW-ppd1XNAS_g50B3UHDQBWEALC1UneH6-afz1zo,2365
195
- code_puppy/tools/browser/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
196
- code_puppy/tools/browser/browser_control.py,sha256=MWBv_WR_A6wmm1NJCYFGQGRyYhTLplL4J0_ECZD0IhE,8388
197
- code_puppy/tools/browser/browser_interactions.py,sha256=AGQkAtNl2YI9aS9jM1KgYoMywVDhPOZSV6yf1b5yeyE,16517
198
- code_puppy/tools/browser/browser_locators.py,sha256=U7a6fi1LdCiIImeVhm0_VKn0WZ1A2DnpR6eSroXgQkg,19114
199
- code_puppy/tools/browser/browser_navigation.py,sha256=sX0EIACIUVjWvod_aJpqzDznPbhrBaMRYWBapRNsHr0,7367
200
- code_puppy/tools/browser/browser_screenshot.py,sha256=7jeG5N4-OkpRPY3JMwOrsJjutYV8wRYF6R8sjg5LawU,8132
201
- code_puppy/tools/browser/browser_scripts.py,sha256=sNb8eLEyzhasy5hV4B9OjM8yIVMLVEMRcQ4K77ABjRI,14564
196
+ code_puppy/tools/browser/__init__.py,sha256=HqP5_AKL9IuaXeGLhL_Y799DBU28QZBd2x5ISKJlprc,1097
197
+ code_puppy/tools/browser/browser_control.py,sha256=YntpjfWTIv0TDlAO5BqTV_hDbUBw-8wmMn29K3TDQo0,8430
198
+ code_puppy/tools/browser/browser_interactions.py,sha256=ZyJmA2-ZtIATF76uGMt08cfVaYiqg7W2-cHfAzNI0F8,16775
199
+ code_puppy/tools/browser/browser_locators.py,sha256=sxXNm-K087poeSp7Um5Gc1sZxb7HlSZOu0F0r2b0ty8,19177
200
+ code_puppy/tools/browser/browser_navigation.py,sha256=RJdG14UXtA6wz4PNLw2Tqeu4oUDQilOyNbyTjgIFCrY,7416
201
+ code_puppy/tools/browser/browser_screenshot.py,sha256=POlHDG7WJbjF3uBPUD7X2elAs-CKP9Dq7UQ7UZyvZGQ,5666
202
+ code_puppy/tools/browser/browser_screenshot_vqa.py,sha256=DBdQuV7eIaJX2Qy_liwitfakIzrcVziB-zAGIngM5GE,7349
203
+ code_puppy/tools/browser/browser_scripts.py,sha256=CYWdQMtjKTNvJNSCkB2vGo-MOzmT_gw2oFMGtkfuzuA,14779
202
204
  code_puppy/tools/browser/browser_workflows.py,sha256=nitW42vCf0ieTX1gLabozTugNQ8phtoFzZbiAhw1V90,6491
203
- code_puppy/tools/browser/camoufox_manager.py,sha256=RZjGOEftE5sI_tsercUyXFSZI2wpStXf-q0PdYh2G3I,8680
204
- code_puppy/tools/browser/vqa_agent.py,sha256=BZzpwPinMH-dsOBMvPVYJzDZ6fu3TlIARygcwIva9w4,2917
205
- code_puppy-0.0.356.data/data/code_puppy/models.json,sha256=FMQdE_yvP_8y0xxt3K918UkFL9cZMYAqW1SfXcQkU_k,3105
206
- code_puppy-0.0.356.data/data/code_puppy/models_dev_api.json,sha256=wHjkj-IM_fx1oHki6-GqtOoCrRMR0ScK0f-Iz0UEcy8,548187
207
- code_puppy-0.0.356.dist-info/METADATA,sha256=Yda4z2GGJVpp8rZTMmj5XNsqnQSMRaSrNV-_x1fNgKU,27614
208
- code_puppy-0.0.356.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
209
- code_puppy-0.0.356.dist-info/entry_points.txt,sha256=Tp4eQC99WY3HOKd3sdvb22vZODRq0XkZVNpXOag_KdI,91
210
- code_puppy-0.0.356.dist-info/licenses/LICENSE,sha256=31u8x0SPgdOq3izJX41kgFazWsM43zPEF9eskzqbJMY,1075
211
- code_puppy-0.0.356.dist-info/RECORD,,
205
+ code_puppy/tools/browser/camoufox_manager.py,sha256=WIr98SrGeC5jd6jX5tjhFR6A3janqV4tq9Mbznnlh44,13920
206
+ code_puppy/tools/browser/chromium_terminal_manager.py,sha256=w1thQ_ACb6oV45L93TSqPQD0o0cTh3FqT5I9zcOOWlM,8226
207
+ code_puppy/tools/browser/terminal_command_tools.py,sha256=9byOZku-dwvTtCl532xt7Lumed_jTn0sLvUe_X75XCQ,19068
208
+ code_puppy/tools/browser/terminal_screenshot_tools.py,sha256=DAqzlqOoTfQZCKKeXccElrrY7s2CwSblvBV7A6A2GYw,17224
209
+ code_puppy/tools/browser/terminal_tools.py,sha256=F5LjVH3udSCFHmqC3O1UJLoLozZFZsEdX42jOmkqkW0,17853
210
+ code_puppy/tools/browser/vqa_agent.py,sha256=0IbS1X3l8ADZI9pGcJbKFoN0-ZuTJa8QvHZ_hGKBKRM,6339
211
+ code_puppy-0.0.357.data/data/code_puppy/models.json,sha256=FMQdE_yvP_8y0xxt3K918UkFL9cZMYAqW1SfXcQkU_k,3105
212
+ code_puppy-0.0.357.data/data/code_puppy/models_dev_api.json,sha256=wHjkj-IM_fx1oHki6-GqtOoCrRMR0ScK0f-Iz0UEcy8,548187
213
+ code_puppy-0.0.357.dist-info/METADATA,sha256=czyAX-ExI8J1C2WqFxnPakQofzpUXqX5r2-Y1WIL34E,27614
214
+ code_puppy-0.0.357.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
215
+ code_puppy-0.0.357.dist-info/entry_points.txt,sha256=Tp4eQC99WY3HOKd3sdvb22vZODRq0XkZVNpXOag_KdI,91
216
+ code_puppy-0.0.357.dist-info/licenses/LICENSE,sha256=31u8x0SPgdOq3izJX41kgFazWsM43zPEF9eskzqbJMY,1075
217
+ code_puppy-0.0.357.dist-info/RECORD,,