code-puppy 0.0.203__tar.gz → 0.0.204__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 (130) hide show
  1. {code_puppy-0.0.203 → code_puppy-0.0.204}/PKG-INFO +1 -1
  2. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/agent_manager.py +34 -5
  3. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/main.py +7 -1
  4. {code_puppy-0.0.203 → code_puppy-0.0.204}/pyproject.toml +1 -1
  5. {code_puppy-0.0.203 → code_puppy-0.0.204}/.gitignore +0 -0
  6. {code_puppy-0.0.203 → code_puppy-0.0.204}/LICENSE +0 -0
  7. {code_puppy-0.0.203 → code_puppy-0.0.204}/README.md +0 -0
  8. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/__init__.py +0 -0
  9. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/__main__.py +0 -0
  10. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/__init__.py +0 -0
  11. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/agent_c_reviewer.py +0 -0
  12. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/agent_code_puppy.py +0 -0
  13. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/agent_code_reviewer.py +0 -0
  14. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/agent_cpp_reviewer.py +0 -0
  15. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/agent_creator_agent.py +0 -0
  16. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/agent_golang_reviewer.py +0 -0
  17. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/agent_javascript_reviewer.py +0 -0
  18. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/agent_python_reviewer.py +0 -0
  19. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/agent_qa_expert.py +0 -0
  20. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/agent_qa_kitten.py +0 -0
  21. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/agent_security_auditor.py +0 -0
  22. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/agent_typescript_reviewer.py +0 -0
  23. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/base_agent.py +0 -0
  24. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/agents/json_agent.py +0 -0
  25. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/callbacks.py +0 -0
  26. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/__init__.py +0 -0
  27. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/attachments.py +0 -0
  28. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/command_handler.py +0 -0
  29. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/file_path_completion.py +0 -0
  30. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/load_context_completion.py +0 -0
  31. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/__init__.py +0 -0
  32. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/add_command.py +0 -0
  33. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/base.py +0 -0
  34. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/handler.py +0 -0
  35. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/help_command.py +0 -0
  36. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/install_command.py +0 -0
  37. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/list_command.py +0 -0
  38. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/logs_command.py +0 -0
  39. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/remove_command.py +0 -0
  40. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/restart_command.py +0 -0
  41. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/search_command.py +0 -0
  42. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/start_all_command.py +0 -0
  43. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/start_command.py +0 -0
  44. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/status_command.py +0 -0
  45. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
  46. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/stop_command.py +0 -0
  47. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/test_command.py +0 -0
  48. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/utils.py +0 -0
  49. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
  50. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/model_picker_completion.py +0 -0
  51. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/motd.py +0 -0
  52. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
  53. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/command_line/utils.py +0 -0
  54. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/config.py +0 -0
  55. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/http_utils.py +0 -0
  56. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/__init__.py +0 -0
  57. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/async_lifecycle.py +0 -0
  58. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/blocking_startup.py +0 -0
  59. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/captured_stdio_server.py +0 -0
  60. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/circuit_breaker.py +0 -0
  61. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/config_wizard.py +0 -0
  62. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/dashboard.py +0 -0
  63. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/error_isolation.py +0 -0
  64. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/examples/retry_example.py +0 -0
  65. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/health_monitor.py +0 -0
  66. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/managed_server.py +0 -0
  67. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/manager.py +0 -0
  68. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/registry.py +0 -0
  69. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/retry_manager.py +0 -0
  70. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/server_registry_catalog.py +0 -0
  71. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/status_tracker.py +0 -0
  72. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/mcp_/system_tools.py +0 -0
  73. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/messaging/__init__.py +0 -0
  74. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/messaging/message_queue.py +0 -0
  75. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/messaging/queue_console.py +0 -0
  76. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/messaging/renderers.py +0 -0
  77. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/messaging/spinner/__init__.py +0 -0
  78. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/messaging/spinner/console_spinner.py +0 -0
  79. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/messaging/spinner/spinner_base.py +0 -0
  80. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/messaging/spinner/textual_spinner.py +0 -0
  81. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/model_factory.py +0 -0
  82. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/models.json +0 -0
  83. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/plugins/__init__.py +0 -0
  84. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
  85. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/reopenable_async_client.py +0 -0
  86. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/round_robin_model.py +0 -0
  87. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/session_storage.py +0 -0
  88. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/status_display.py +0 -0
  89. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/summarization_agent.py +0 -0
  90. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/__init__.py +0 -0
  91. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/agent_tools.py +0 -0
  92. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/browser/__init__.py +0 -0
  93. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/browser/browser_control.py +0 -0
  94. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/browser/browser_interactions.py +0 -0
  95. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/browser/browser_locators.py +0 -0
  96. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/browser/browser_navigation.py +0 -0
  97. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/browser/browser_screenshot.py +0 -0
  98. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/browser/browser_scripts.py +0 -0
  99. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/browser/browser_workflows.py +0 -0
  100. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/browser/camoufox_manager.py +0 -0
  101. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/browser/vqa_agent.py +0 -0
  102. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/command_runner.py +0 -0
  103. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/common.py +0 -0
  104. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/file_modifications.py +0 -0
  105. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/file_operations.py +0 -0
  106. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tools/tools_content.py +0 -0
  107. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/__init__.py +0 -0
  108. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/app.py +0 -0
  109. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/components/__init__.py +0 -0
  110. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/components/chat_view.py +0 -0
  111. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/components/command_history_modal.py +0 -0
  112. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/components/copy_button.py +0 -0
  113. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/components/custom_widgets.py +0 -0
  114. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/components/human_input_modal.py +0 -0
  115. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/components/input_area.py +0 -0
  116. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/components/sidebar.py +0 -0
  117. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/components/status_bar.py +0 -0
  118. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/messages.py +0 -0
  119. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/models/__init__.py +0 -0
  120. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/models/chat_message.py +0 -0
  121. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/models/command_history.py +0 -0
  122. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/models/enums.py +0 -0
  123. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/screens/__init__.py +0 -0
  124. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/screens/autosave_picker.py +0 -0
  125. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/screens/help.py +0 -0
  126. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/screens/mcp_install_wizard.py +0 -0
  127. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/screens/settings.py +0 -0
  128. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui/screens/tools.py +0 -0
  129. {code_puppy-0.0.203 → code_puppy-0.0.204}/code_puppy/tui_state.py +0 -0
  130. {code_puppy-0.0.203 → code_puppy-0.0.204}/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.203
3
+ Version: 0.0.204
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
@@ -51,21 +51,50 @@ def get_terminal_session_id() -> str:
51
51
 
52
52
 
53
53
  def _is_process_alive(pid: int) -> bool:
54
- """Check if a process with the given PID is still alive.
54
+ """Check if a process with the given PID is still alive, cross-platform.
55
55
 
56
56
  Args:
57
57
  pid: Process ID to check
58
58
 
59
59
  Returns:
60
- bool: True if process exists, False otherwise
60
+ bool: True if process likely exists, False otherwise
61
61
  """
62
62
  try:
63
- # On Unix: os.kill(pid, 0) raises OSError if process doesn't exist
64
- # On Windows: This also works with signal 0
65
- os.kill(pid, 0)
63
+ if os.name == "nt":
64
+ # Windows: use OpenProcess to probe liveness safely
65
+ import ctypes
66
+ from ctypes import wintypes
67
+
68
+ PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
69
+ kernel32 = ctypes.windll.kernel32 # type: ignore[attr-defined]
70
+ kernel32.OpenProcess.argtypes = [wintypes.DWORD, wintypes.BOOL, wintypes.DWORD]
71
+ kernel32.OpenProcess.restype = wintypes.HANDLE
72
+ handle = kernel32.OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, False, int(pid))
73
+ if handle:
74
+ kernel32.CloseHandle(handle)
75
+ return True
76
+ # If access denied, process likely exists but we can't query it
77
+ last_error = kernel32.GetLastError()
78
+ # ERROR_ACCESS_DENIED = 5
79
+ if last_error == 5:
80
+ return True
81
+ return False
82
+ else:
83
+ # Unix-like: signal 0 does not deliver a signal but checks existence
84
+ os.kill(int(pid), 0)
85
+ return True
86
+ except PermissionError:
87
+ # No permission to signal -> process exists
66
88
  return True
67
89
  except (OSError, ProcessLookupError):
90
+ # Process does not exist
91
+ return False
92
+ except ValueError:
93
+ # Invalid signal or pid format
68
94
  return False
95
+ except Exception:
96
+ # Be conservative – don't crash session cleanup due to platform quirks
97
+ return True
69
98
 
70
99
 
71
100
  def _cleanup_dead_sessions(sessions: dict[str, str]) -> dict[str, str]:
@@ -421,7 +421,13 @@ async def interactive_mode(message_renderer, initial_command: str = None) -> Non
421
421
 
422
422
  # Handle / commands based on cleaned prompt (after stripping attachments)
423
423
  if cleaned_for_commands.startswith("/"):
424
- command_result = handle_command(cleaned_for_commands)
424
+ try:
425
+ command_result = handle_command(cleaned_for_commands)
426
+ except Exception as e:
427
+ from code_puppy.messaging import emit_error
428
+ emit_error(f"Command error: {e}")
429
+ # Continue interactive loop instead of exiting
430
+ continue
425
431
  if command_result is True:
426
432
  continue
427
433
  elif isinstance(command_result, str):
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "code-puppy"
7
- version = "0.0.203"
7
+ version = "0.0.204"
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