code-puppy 0.0.190__tar.gz → 0.0.192__tar.gz

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 (127) hide show
  1. {code_puppy-0.0.190 → code_puppy-0.0.192}/PKG-INFO +1 -1
  2. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/base_agent.py +6 -2
  3. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/command_handler.py +34 -0
  4. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/prompt_toolkit_completion.py +3 -5
  5. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/config.py +21 -0
  6. {code_puppy-0.0.190 → code_puppy-0.0.192}/pyproject.toml +1 -1
  7. {code_puppy-0.0.190 → code_puppy-0.0.192}/.gitignore +0 -0
  8. {code_puppy-0.0.190 → code_puppy-0.0.192}/LICENSE +0 -0
  9. {code_puppy-0.0.190 → code_puppy-0.0.192}/README.md +0 -0
  10. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/__init__.py +0 -0
  11. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/__main__.py +0 -0
  12. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/__init__.py +0 -0
  13. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/agent_c_reviewer.py +0 -0
  14. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/agent_code_puppy.py +0 -0
  15. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/agent_code_reviewer.py +0 -0
  16. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/agent_cpp_reviewer.py +0 -0
  17. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/agent_creator_agent.py +0 -0
  18. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/agent_golang_reviewer.py +0 -0
  19. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/agent_javascript_reviewer.py +0 -0
  20. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/agent_manager.py +0 -0
  21. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/agent_python_reviewer.py +0 -0
  22. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/agent_qa_expert.py +0 -0
  23. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/agent_qa_kitten.py +0 -0
  24. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/agent_security_auditor.py +0 -0
  25. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/agent_typescript_reviewer.py +0 -0
  26. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/agents/json_agent.py +0 -0
  27. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/callbacks.py +0 -0
  28. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/__init__.py +0 -0
  29. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/file_path_completion.py +0 -0
  30. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/load_context_completion.py +0 -0
  31. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/__init__.py +0 -0
  32. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/add_command.py +0 -0
  33. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/base.py +0 -0
  34. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/handler.py +0 -0
  35. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/help_command.py +0 -0
  36. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/install_command.py +0 -0
  37. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/list_command.py +0 -0
  38. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/logs_command.py +0 -0
  39. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/remove_command.py +0 -0
  40. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/restart_command.py +0 -0
  41. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/search_command.py +0 -0
  42. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/start_all_command.py +0 -0
  43. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/start_command.py +0 -0
  44. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/status_command.py +0 -0
  45. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
  46. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/stop_command.py +0 -0
  47. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/test_command.py +0 -0
  48. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/utils.py +0 -0
  49. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
  50. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/model_picker_completion.py +0 -0
  51. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/motd.py +0 -0
  52. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/command_line/utils.py +0 -0
  53. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/http_utils.py +0 -0
  54. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/main.py +0 -0
  55. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/__init__.py +0 -0
  56. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/async_lifecycle.py +0 -0
  57. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/blocking_startup.py +0 -0
  58. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/captured_stdio_server.py +0 -0
  59. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/circuit_breaker.py +0 -0
  60. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/config_wizard.py +0 -0
  61. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/dashboard.py +0 -0
  62. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/error_isolation.py +0 -0
  63. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/examples/retry_example.py +0 -0
  64. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/health_monitor.py +0 -0
  65. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/managed_server.py +0 -0
  66. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/manager.py +0 -0
  67. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/registry.py +0 -0
  68. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/retry_manager.py +0 -0
  69. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/server_registry_catalog.py +0 -0
  70. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/status_tracker.py +0 -0
  71. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/mcp_/system_tools.py +0 -0
  72. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/messaging/__init__.py +0 -0
  73. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/messaging/message_queue.py +0 -0
  74. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/messaging/queue_console.py +0 -0
  75. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/messaging/renderers.py +0 -0
  76. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/messaging/spinner/__init__.py +0 -0
  77. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/messaging/spinner/console_spinner.py +0 -0
  78. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/messaging/spinner/spinner_base.py +0 -0
  79. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/messaging/spinner/textual_spinner.py +0 -0
  80. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/model_factory.py +0 -0
  81. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/models.json +0 -0
  82. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/plugins/__init__.py +0 -0
  83. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
  84. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/reopenable_async_client.py +0 -0
  85. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/round_robin_model.py +0 -0
  86. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/status_display.py +0 -0
  87. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/summarization_agent.py +0 -0
  88. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/__init__.py +0 -0
  89. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/agent_tools.py +0 -0
  90. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/browser/__init__.py +0 -0
  91. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/browser/browser_control.py +0 -0
  92. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/browser/browser_interactions.py +0 -0
  93. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/browser/browser_locators.py +0 -0
  94. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/browser/browser_navigation.py +0 -0
  95. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/browser/browser_screenshot.py +0 -0
  96. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/browser/browser_scripts.py +0 -0
  97. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/browser/browser_workflows.py +0 -0
  98. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/browser/camoufox_manager.py +0 -0
  99. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/browser/vqa_agent.py +0 -0
  100. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/command_runner.py +0 -0
  101. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/common.py +0 -0
  102. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/file_modifications.py +0 -0
  103. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/file_operations.py +0 -0
  104. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tools/tools_content.py +0 -0
  105. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/__init__.py +0 -0
  106. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/app.py +0 -0
  107. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/components/__init__.py +0 -0
  108. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/components/chat_view.py +0 -0
  109. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/components/command_history_modal.py +0 -0
  110. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/components/copy_button.py +0 -0
  111. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/components/custom_widgets.py +0 -0
  112. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/components/human_input_modal.py +0 -0
  113. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/components/input_area.py +0 -0
  114. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/components/sidebar.py +0 -0
  115. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/components/status_bar.py +0 -0
  116. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/messages.py +0 -0
  117. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/models/__init__.py +0 -0
  118. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/models/chat_message.py +0 -0
  119. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/models/command_history.py +0 -0
  120. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/models/enums.py +0 -0
  121. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/screens/__init__.py +0 -0
  122. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/screens/help.py +0 -0
  123. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/screens/mcp_install_wizard.py +0 -0
  124. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/screens/settings.py +0 -0
  125. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui/screens/tools.py +0 -0
  126. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/tui_state.py +0 -0
  127. {code_puppy-0.0.190 → code_puppy-0.0.192}/code_puppy/version_checker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: code-puppy
3
- Version: 0.0.190
3
+ Version: 0.0.192
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
@@ -31,9 +31,11 @@ from code_puppy.config import (
31
31
  get_compaction_strategy,
32
32
  get_compaction_threshold,
33
33
  get_global_model_name,
34
+ get_openai_reasoning_effort,
34
35
  get_protected_token_count,
35
36
  get_value,
36
- load_mcp_server_configs, get_message_limit,
37
+ load_mcp_server_configs,
38
+ get_message_limit,
37
39
  )
38
40
  from code_puppy.mcp_ import ServerConfig, get_mcp_manager
39
41
  from code_puppy.messaging import (
@@ -829,7 +831,9 @@ class BaseAgent(ABC):
829
831
 
830
832
  model_settings: ModelSettings = ModelSettings(**model_settings_dict)
831
833
  if "gpt-5" in model_name:
832
- model_settings_dict["openai_reasoning_effort"] = "medium"
834
+ model_settings_dict["openai_reasoning_effort"] = (
835
+ get_openai_reasoning_effort()
836
+ )
833
837
  model_settings_dict["extra_body"] = {"verbosity": "low"}
834
838
  model_settings = OpenAIModelSettings(**model_settings_dict)
835
839
 
@@ -42,6 +42,10 @@ def get_commands_help():
42
42
  help_lines.append(
43
43
  Text("/model, /m", style="cyan") + Text(" <model> Set active model")
44
44
  )
45
+ help_lines.append(
46
+ Text("/reasoning", style="cyan")
47
+ + Text(" <low|medium|high> Set OpenAI reasoning effort for GPT-5 models")
48
+ )
45
49
  help_lines.append(
46
50
  Text("/pin_model", style="cyan")
47
51
  + Text(" <agent> <model> Pin a specific model to an agent")
@@ -267,6 +271,7 @@ def handle_command(command: str):
267
271
  from code_puppy.config import (
268
272
  get_compaction_strategy,
269
273
  get_compaction_threshold,
274
+ get_openai_reasoning_effort,
270
275
  get_owner_name,
271
276
  get_protected_token_count,
272
277
  get_puppy_name,
@@ -294,11 +299,40 @@ def handle_command(command: str):
294
299
  [bold]protected_tokens:[/bold] [cyan]{protected_tokens:,}[/cyan] recent tokens preserved
295
300
  [bold]compaction_threshold:[/bold] [cyan]{compaction_threshold:.1%}[/cyan] context usage triggers compaction
296
301
  [bold]compaction_strategy:[/bold] [cyan]{compaction_strategy}[/cyan] (summarization or truncation)
302
+ [bold]reasoning_effort:[/bold] [cyan]{get_openai_reasoning_effort()}[/cyan]
297
303
 
298
304
  """
299
305
  emit_info(status_msg)
300
306
  return True
301
307
 
308
+ if command.startswith("/reasoning"):
309
+ tokens = command.split()
310
+ if len(tokens) != 2:
311
+ emit_warning("Usage: /reasoning <low|medium|high>")
312
+ return True
313
+
314
+ effort = tokens[1]
315
+ try:
316
+ from code_puppy.config import set_openai_reasoning_effort
317
+
318
+ set_openai_reasoning_effort(effort)
319
+ except ValueError as exc:
320
+ emit_error(str(exc))
321
+ return True
322
+
323
+ from code_puppy.config import get_openai_reasoning_effort
324
+
325
+ normalized_effort = get_openai_reasoning_effort()
326
+
327
+ from code_puppy.agents.agent_manager import get_current_agent
328
+
329
+ agent = get_current_agent()
330
+ agent.reload_code_generation_agent()
331
+ emit_success(
332
+ f"Reasoning effort set to '{normalized_effort}' and active agent reloaded"
333
+ )
334
+ return True
335
+
302
336
  if command.startswith("/set"):
303
337
  # Syntax: /set KEY=VALUE or /set KEY VALUE
304
338
  from code_puppy.config import set_config_value
@@ -14,6 +14,7 @@ from prompt_toolkit import PromptSession
14
14
  from prompt_toolkit.completion import Completer, Completion, merge_completers
15
15
  from prompt_toolkit.formatted_text import FormattedText
16
16
  from prompt_toolkit.history import FileHistory
17
+ from prompt_toolkit.filters import is_searching
17
18
  from prompt_toolkit.key_binding import KeyBindings
18
19
  from prompt_toolkit.keys import Keys
19
20
  from prompt_toolkit.styles import Style
@@ -207,12 +208,9 @@ async def get_input_with_combined_completion(
207
208
  event.app.current_buffer.insert_text("\n")
208
209
 
209
210
  # Override the default enter behavior to check for shift
210
- @bindings.add("enter")
211
+ @bindings.add("enter", filter=~is_searching)
211
212
  def _(event):
212
- """Accept input or insert newline depending on shift key."""
213
- # Check if shift is pressed - this comes from key press event data
214
- # Using a key sequence like Alt+Enter is more reliable than detecting shift
215
- # So we'll use the default behavior for Enter
213
+ """Accept input only when we're not in an interactive search buffer."""
216
214
  event.current_buffer.validate_and_handle()
217
215
 
218
216
  @bindings.add(Keys.Escape)
@@ -120,6 +120,7 @@ def get_config_keys():
120
120
  "compaction_threshold",
121
121
  "message_limit",
122
122
  "allow_recursion",
123
+ "openai_reasoning_effort",
123
124
  ]
124
125
  config = configparser.ConfigParser()
125
126
  config.read(CONFIG_FILE)
@@ -366,6 +367,26 @@ def set_puppy_token(token: str):
366
367
  set_config_value("puppy_token", token)
367
368
 
368
369
 
370
+ def get_openai_reasoning_effort() -> str:
371
+ """Return the configured OpenAI reasoning effort (low, medium, high)."""
372
+ allowed_values = {"low", "medium", "high"}
373
+ configured = (get_value("openai_reasoning_effort") or "medium").strip().lower()
374
+ if configured not in allowed_values:
375
+ return "medium"
376
+ return configured
377
+
378
+
379
+ def set_openai_reasoning_effort(value: str) -> None:
380
+ """Persist the OpenAI reasoning effort ensuring it remains within allowed values."""
381
+ allowed_values = {"low", "medium", "high"}
382
+ normalized = (value or "").strip().lower()
383
+ if normalized not in allowed_values:
384
+ raise ValueError(
385
+ f"Invalid reasoning effort '{value}'. Allowed: {', '.join(sorted(allowed_values))}"
386
+ )
387
+ set_config_value("openai_reasoning_effort", normalized)
388
+
389
+
369
390
  def normalize_command_history():
370
391
  """
371
392
  Normalize the command history file by converting old format timestamps to the new format.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "code-puppy"
7
- version = "0.0.190"
7
+ version = "0.0.192"
8
8
  description = "Code generation agent"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
File without changes
File without changes
File without changes