newcode 0.1.7__tar.gz → 0.1.8__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.
- {newcode-0.1.7 → newcode-0.1.8}/PKG-INFO +2 -2
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/__init__.py +1 -1
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_c_reviewer.py +2 -2
- newcode-0.1.7/code_puppy/agents/agent_code_puppy.py → newcode-0.1.8/code_puppy/agents/agent_code_agent.py +2 -2
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_code_reviewer.py +2 -2
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_cpp_reviewer.py +3 -3
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_golang_reviewer.py +7 -7
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_javascript_reviewer.py +3 -3
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_manager.py +4 -4
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_planning.py +2 -2
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_python_programmer.py +5 -7
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_python_reviewer.py +3 -3
- newcode-0.1.7/code_puppy/agents/agent_qa_kitten.py → newcode-0.1.8/code_puppy/agents/agent_qa_browser.py +9 -9
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_qa_expert.py +2 -2
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_scheduler.py +2 -2
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_security_auditor.py +3 -3
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_typescript_reviewer.py +3 -3
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/base_agent.py +17 -17
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/config.py +2 -2
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/scheduler/scheduler_wizard.py +1 -1
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/scheduler/config.py +1 -1
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/scheduler/executor.py +6 -6
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/status_display.py +10 -10
- {newcode-0.1.7 → newcode-0.1.8}/pyproject.toml +4 -2
- {newcode-0.1.7 → newcode-0.1.8}/.gitignore +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/LICENSE +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/README.md +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/__main__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_creator_agent.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_pack_leader.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/agent_terminal_qa.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/event_stream_handler.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/json_agent.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/pack/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/pack/bloodhound.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/pack/husky.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/pack/retriever.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/pack/shepherd.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/pack/terrier.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/pack/watchdog.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/prompt_reviewer.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/agents/subagent_stream_handler.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/api/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/api/app.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/api/main.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/api/pty_manager.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/api/routers/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/api/routers/agents.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/api/routers/commands.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/api/routers/config.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/api/routers/sessions.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/api/templates/terminal.html +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/api/websocket.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/chatgpt_codex_client.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/claude_cache_client.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/cli_runner.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/add_model_menu.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/agent_menu.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/attachments.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/autosave_menu.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/clipboard.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/colors_menu.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/command_handler.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/command_registry.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/config_commands.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/core_commands.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/diff_menu.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/file_path_completion.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/load_context_completion.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/base.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/catalog_server_installer.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/custom_server_form.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/custom_server_installer.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/edit_command.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/handler.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/help_command.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/install_command.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/install_menu.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/list_command.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/logs_command.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/remove_command.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/restart_command.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/search_command.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/start_all_command.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/start_command.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/status_command.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/stop_all_command.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/stop_command.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/test_command.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/utils.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp/wizard_utils.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/mcp_completion.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/model_picker_completion.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/model_settings_menu.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/motd.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/onboarding_slides.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/onboarding_wizard.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/pin_command_completion.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/prompt_toolkit_completion.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/session_commands.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/skills_completion.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/uc_menu.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/utils.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/command_line/wiggum_state.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/error_logging.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/gemini_code_assist.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/gemini_model.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/hook_engine/README.md +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/hook_engine/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/hook_engine/aliases.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/hook_engine/engine.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/hook_engine/executor.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/hook_engine/matcher.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/hook_engine/models.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/hook_engine/registry.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/hook_engine/validator.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/http_utils.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/keymap.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/main.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/async_lifecycle.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/blocking_startup.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/captured_stdio_server.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/circuit_breaker.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/config_wizard.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/dashboard.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/error_isolation.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/examples/retry_example.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/health_monitor.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/managed_server.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/manager.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/mcp_logs.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/registry.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/retry_manager.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/server_registry_catalog.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/status_tracker.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_/system_tools.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_prompts/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/mcp_prompts/hook_creator.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/messaging/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/messaging/bus.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/messaging/commands.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/messaging/markdown_patches.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/messaging/message_queue.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/messaging/messages.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/messaging/queue_console.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/messaging/renderers.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/messaging/rich_renderer.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/messaging/spinner/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/messaging/spinner/console_spinner.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/messaging/spinner/spinner_base.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/messaging/subagent_console.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/model_factory.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/model_switching.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/model_utils.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/models.json +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/models_dev_api.json +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/models_dev_parser.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/agent_skills/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/agent_skills/config.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/agent_skills/discovery.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/agent_skills/downloader.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/agent_skills/installer.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/agent_skills/metadata.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/agent_skills/prompt_builder.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/agent_skills/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/agent_skills/remote_catalog.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/agent_skills/skill_catalog.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/agent_skills/skills_install_menu.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/agent_skills/skills_menu.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/antigravity_oauth/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/antigravity_oauth/accounts.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/antigravity_oauth/antigravity_model.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/antigravity_oauth/config.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/antigravity_oauth/constants.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/antigravity_oauth/oauth.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/antigravity_oauth/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/antigravity_oauth/storage.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/antigravity_oauth/test_plugin.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/antigravity_oauth/token.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/antigravity_oauth/transport.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/antigravity_oauth/utils.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/chatgpt_oauth/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/chatgpt_oauth/config.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/chatgpt_oauth/oauth_flow.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/chatgpt_oauth/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/chatgpt_oauth/test_plugin.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/chatgpt_oauth/utils.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/claude_code_hooks/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/claude_code_hooks/config.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/claude_code_hooks/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/claude_code_oauth/README.md +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/claude_code_oauth/SETUP.md +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/claude_code_oauth/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/claude_code_oauth/config.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/claude_code_oauth/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/claude_code_oauth/test_plugin.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/claude_code_oauth/utils.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/customizable_commands/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/customizable_commands/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/example_custom_command/README.md +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/example_custom_command/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/file_permission_handler/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/file_permission_handler/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/frontend_emitter/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/frontend_emitter/emitter.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/frontend_emitter/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/hook_creator/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/hook_creator/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/hook_manager/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/hook_manager/config.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/hook_manager/hooks_menu.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/hook_manager/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/oauth_puppy_html.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/scheduler/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/scheduler/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/scheduler/scheduler_menu.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/shell_safety/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/shell_safety/agent_shell_safety.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/shell_safety/command_cache.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/shell_safety/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/synthetic_status/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/synthetic_status/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/synthetic_status/status_api.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/universal_constructor/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/universal_constructor/models.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/universal_constructor/register_callbacks.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/universal_constructor/registry.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/plugins/universal_constructor/sandbox.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/prompts/antigravity_system_prompt.md +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/pydantic_patches.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/reopenable_async_client.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/round_robin_model.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/scheduler/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/scheduler/__main__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/scheduler/cli.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/scheduler/daemon.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/scheduler/platform.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/scheduler/platform_unix.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/scheduler/platform_win.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/session_storage.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/summarization_agent.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/terminal_utils.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/agent_tools.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/ask_user_question/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/ask_user_question/constants.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/ask_user_question/demo_tui.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/ask_user_question/handler.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/ask_user_question/models.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/ask_user_question/registration.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/ask_user_question/renderers.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/ask_user_question/terminal_ui.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/ask_user_question/theme.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/ask_user_question/tui_loop.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/browser/__init__.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/browser/browser_control.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/browser/browser_interactions.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/browser/browser_locators.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/browser/browser_manager.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/browser/browser_navigation.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/browser/browser_screenshot.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/browser/browser_scripts.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/browser/browser_workflows.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/browser/chromium_terminal_manager.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/browser/terminal_command_tools.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/browser/terminal_screenshot_tools.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/browser/terminal_tools.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/command_runner.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/common.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/display.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/file_modifications.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/file_operations.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/scheduler_tools.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/skills_tools.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/subagent_context.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/tools_content.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/tools/universal_constructor.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/uvx_detection.py +0 -0
- {newcode-0.1.7 → newcode-0.1.8}/code_puppy/version_checker.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: newcode
|
|
3
|
-
Version: 0.1.
|
|
4
|
-
Summary: AI-powered code generation agent
|
|
3
|
+
Version: 0.1.8
|
|
4
|
+
Summary: AI-powered code generation agent platform
|
|
5
5
|
Project-URL: repository, https://github.com/janfeddersen-wq/new_code
|
|
6
6
|
Project-URL: HomePage, https://github.com/janfeddersen-wq/new_code
|
|
7
7
|
Project-URL: Upstream, https://github.com/mpfaffenberger/code_puppy
|
|
@@ -31,7 +31,7 @@ class CReviewerAgent(BaseAgent):
|
|
|
31
31
|
|
|
32
32
|
def get_system_prompt(self) -> str:
|
|
33
33
|
return """
|
|
34
|
-
You are
|
|
34
|
+
You are a C systems code reviewer. Think C99/C11 in the trenches: kernels, drivers, embedded firmware, high-performance network stacks. Be direct and never compromise on correctness.
|
|
35
35
|
|
|
36
36
|
Mission profile:
|
|
37
37
|
- Review only `.c`/`.h` files with meaningful code diffs. Skip untouched files or mechanical formatting changes.
|
|
@@ -150,5 +150,5 @@ Agent collaboration:
|
|
|
150
150
|
- Use list_agents to discover specialists for domain-specific concerns (embedded, networking, etc.)
|
|
151
151
|
- Always explain why you're invoking another agent and what specific expertise you need
|
|
152
152
|
|
|
153
|
-
You're the C review
|
|
153
|
+
You're the C review agent for this CLI. Be thorough, relentless about low-level rigor, and helpful.
|
|
154
154
|
"""
|
|
@@ -6,12 +6,12 @@ from .. import callbacks
|
|
|
6
6
|
from .base_agent import BaseAgent
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
class
|
|
9
|
+
class CodeAgent(BaseAgent):
|
|
10
10
|
"""Code Agent - The default general-purpose code agent."""
|
|
11
11
|
|
|
12
12
|
@property
|
|
13
13
|
def name(self) -> str:
|
|
14
|
-
return "code-
|
|
14
|
+
return "code-agent"
|
|
15
15
|
|
|
16
16
|
@property
|
|
17
17
|
def display_name(self) -> str:
|
|
@@ -31,7 +31,7 @@ class CodeQualityReviewerAgent(BaseAgent):
|
|
|
31
31
|
|
|
32
32
|
def get_system_prompt(self) -> str:
|
|
33
33
|
return """
|
|
34
|
-
You are
|
|
34
|
+
You are a general-purpose code reviewer. Security-first, performance-aware, best-practices obsessed. Keep the feedback clear and razor sharp.
|
|
35
35
|
|
|
36
36
|
Mission scope:
|
|
37
37
|
- Review only files with substantive code or config changes. Skip untouched or trivial reformatting noise.
|
|
@@ -85,5 +85,5 @@ Agent collaboration:
|
|
|
85
85
|
- Always explain what expertise you need when involving other agents
|
|
86
86
|
- Act as a coordinator when multiple specialist reviews are required
|
|
87
87
|
|
|
88
|
-
You're the default quality-and-security reviewer for this CLI. Stay
|
|
88
|
+
You're the default quality-and-security reviewer for this CLI. Stay thorough and keep teams shipping safe and maintainable code.
|
|
89
89
|
"""
|
|
@@ -29,7 +29,7 @@ class CppReviewerAgent(BaseAgent):
|
|
|
29
29
|
|
|
30
30
|
def get_system_prompt(self) -> str:
|
|
31
31
|
return """
|
|
32
|
-
You are
|
|
32
|
+
You are a C++ code reviewer. You live for zero-overhead abstractions, predictable performance, and ruthless safety. Be direct and constructive.
|
|
33
33
|
|
|
34
34
|
Mission priorities:
|
|
35
35
|
- Review only `.cpp`/`.cc`/`.cxx`/`.hpp`/`.hh`/`.hxx` files with meaningful code diffs. Skip untouched headers/impls or formatting-only changes.
|
|
@@ -99,7 +99,7 @@ Security Hardening Checklist:
|
|
|
99
99
|
- [ ] Type safety: avoid void*, use templates or variants
|
|
100
100
|
|
|
101
101
|
Feedback protocol:
|
|
102
|
-
- Be
|
|
102
|
+
- Be direct yet precise. "Consider …" keeps morale high while delivering the truth.
|
|
103
103
|
- Group related feedback; reference exact lines like `src/core/foo.cpp:128`. No ranges, no hand-waving.
|
|
104
104
|
- Surface assumptions ("Assuming SSE4.2 is available…") so humans can confirm.
|
|
105
105
|
- If the change is rock-solid, say so and highlight the wins.
|
|
@@ -127,5 +127,5 @@ Agent collaboration:
|
|
|
127
127
|
- Use list_agents to find domain experts (graphics, embedded, scientific computing)
|
|
128
128
|
- Always articulate what specific expertise you need when invoking other agents
|
|
129
129
|
|
|
130
|
-
You're the C++ review
|
|
130
|
+
You're the C++ review agent for this CLI. Be thorough, relentless about quality, and helpful.
|
|
131
131
|
"""
|
|
@@ -31,11 +31,11 @@ class GolangReviewerAgent(BaseAgent):
|
|
|
31
31
|
|
|
32
32
|
def get_system_prompt(self) -> str:
|
|
33
33
|
return """
|
|
34
|
-
You are an expert Golang reviewer
|
|
34
|
+
You are an expert Golang code reviewer. Focus only on the Go code that changed, provide constructive feedback, and keep it razor sharp without name-dropping any specific humans.
|
|
35
35
|
|
|
36
36
|
Mission profile:
|
|
37
|
-
- Review only tracked `.go` files with real code diffs. If a file is untouched or only whitespace/comments changed,
|
|
38
|
-
- Ignore every non-Go file: `.yml`, `.yaml`, `.md`, `.json`, `.txt`, `Dockerfile`, `LICENSE`, `README.md`, etc. If someone tries to sneak one in,
|
|
37
|
+
- Review only tracked `.go` files with real code diffs. If a file is untouched or only whitespace/comments changed, skip it.
|
|
38
|
+
- Ignore every non-Go file: `.yml`, `.yaml`, `.md`, `.json`, `.txt`, `Dockerfile`, `LICENSE`, `README.md`, etc. If someone tries to sneak one in, skip it.
|
|
39
39
|
- Live by `Effective Go` (https://go.dev/doc/effective_go) and the `Google Go Style Guide` (https://google.github.io/styleguide/go/).
|
|
40
40
|
- Enforce gofmt/goimports cleanliness, make sure `go vet`, `staticcheck`, `golangci-lint`, and `go fmt` would be happy, and flag any missing `//nolint` justifications.
|
|
41
41
|
- You are the guardian of SOLID, DRY, YAGNI, and the Zen of Python (yes, even here). Call out violations with precision.
|
|
@@ -46,10 +46,10 @@ Per Go file that actually matters:
|
|
|
46
46
|
3. Sprinkle genuine praise when a change slaps—great naming, clean abstractions, smart concurrency, tests that cover real edge cases.
|
|
47
47
|
|
|
48
48
|
Review etiquette:
|
|
49
|
-
- Stay concise, organized, and focused on impact. Group similar findings
|
|
49
|
+
- Stay concise, organized, and focused on impact. Group similar findings for easy consumption.
|
|
50
50
|
- Flag missing tests or weak coverage when it matters. Suggest concrete test names or scenarios using `go test -v`, `go test -race`, `go test -cover`.
|
|
51
|
-
- Prefer positive phrasing: "Consider" beats "Don’t".
|
|
52
|
-
- If everything looks
|
|
51
|
+
- Prefer positive phrasing: "Consider" beats "Don’t". Be constructive and thorough.
|
|
52
|
+
- If everything looks good, say so explicitly and call out strengths.
|
|
53
53
|
- Always mention residual risks or assumptions you made when you can’t fully verify something.
|
|
54
54
|
- Recommend specific Go tools: `go mod tidy`, `go mod verify`, `go generate`, `pprof` profiling.
|
|
55
55
|
|
|
@@ -144,7 +144,7 @@ Toolchain integration:
|
|
|
144
144
|
- Enable `pprof` profiling for performance analysis
|
|
145
145
|
- Use `go generate` for code generation patterns
|
|
146
146
|
|
|
147
|
-
You are the Golang review
|
|
147
|
+
You are the Golang review agent for this CLI. Be precise and helpful.
|
|
148
148
|
- When concurrency primitives show up, double-check for race hazards, context cancellation, and proper error propagation.
|
|
149
149
|
- If performance or allocation pressure might bite, call it out and suggest profiling or benchmarks.
|
|
150
150
|
"""
|
|
@@ -16,7 +16,7 @@ class JavaScriptReviewerAgent(BaseAgent):
|
|
|
16
16
|
|
|
17
17
|
@property
|
|
18
18
|
def description(self) -> str:
|
|
19
|
-
return "
|
|
19
|
+
return "Thorough JavaScript reviewer enforcing modern patterns and runtime sanity"
|
|
20
20
|
|
|
21
21
|
def get_available_tools(self) -> list[str]:
|
|
22
22
|
"""Reviewers need read-only inspection helpers plus agent collaboration."""
|
|
@@ -31,7 +31,7 @@ class JavaScriptReviewerAgent(BaseAgent):
|
|
|
31
31
|
|
|
32
32
|
def get_system_prompt(self) -> str:
|
|
33
33
|
return """
|
|
34
|
-
You are
|
|
34
|
+
You are a JavaScript code reviewer. Be thorough and honest about runtime risks, async issues, and bundle bloat.
|
|
35
35
|
|
|
36
36
|
Mission focus:
|
|
37
37
|
- Review only `.js`/`.mjs`/`.cjs` files (and `.jsx`) with real code changes. Skip untouched files or pure prettier churn.
|
|
@@ -155,5 +155,5 @@ Agent collaboration:
|
|
|
155
155
|
- Use list_agents to find specialists for specific frameworks (React, Vue, Angular) or deployment concerns
|
|
156
156
|
- Always articulate what specific JavaScript/Node expertise you need when invoking other agents
|
|
157
157
|
|
|
158
|
-
You're the JavaScript review
|
|
158
|
+
You're the JavaScript review agent for this CLI. Be thorough, obsessive about quality, and helpful.
|
|
159
159
|
"""
|
|
@@ -382,7 +382,7 @@ def get_current_agent_name() -> str:
|
|
|
382
382
|
|
|
383
383
|
Returns:
|
|
384
384
|
The name of the current agent for this session.
|
|
385
|
-
Priority: session agent > config default > 'code-
|
|
385
|
+
Priority: session agent > config default > 'code-agent'.
|
|
386
386
|
"""
|
|
387
387
|
_ensure_session_cache_loaded()
|
|
388
388
|
session_id = get_terminal_session_id()
|
|
@@ -469,9 +469,9 @@ def load_agent(agent_name: str) -> BaseAgent:
|
|
|
469
469
|
_discover_agents(message_group_id=message_group_id)
|
|
470
470
|
|
|
471
471
|
if agent_name not in _AGENT_REGISTRY:
|
|
472
|
-
# Fallback to code-
|
|
473
|
-
if "code-
|
|
474
|
-
agent_name = "code-
|
|
472
|
+
# Fallback to code-agent if agent not found
|
|
473
|
+
if "code-agent" in _AGENT_REGISTRY:
|
|
474
|
+
agent_name = "code-agent"
|
|
475
475
|
else:
|
|
476
476
|
raise ValueError(
|
|
477
477
|
f"Agent '{agent_name}' not found and no fallback available"
|
|
@@ -79,9 +79,9 @@ Your core responsibility is to:
|
|
|
79
79
|
|
|
80
80
|
### Step 4: Agent Coordination
|
|
81
81
|
- Recommend which specialized agents should handle specific tasks:
|
|
82
|
-
- Code generation: code-
|
|
82
|
+
- Code generation: code-agent
|
|
83
83
|
- Security review: security-auditor
|
|
84
|
-
- Quality assurance: qa-
|
|
84
|
+
- Quality assurance: qa-browser (only for web development) or qa-expert (for all other domains)
|
|
85
85
|
- Language-specific reviews: python-reviewer, javascript-reviewer, etc.
|
|
86
86
|
- File permissions: file-permission-handler
|
|
87
87
|
|
|
@@ -35,7 +35,7 @@ class PythonProgrammerAgent(BaseAgent):
|
|
|
35
35
|
|
|
36
36
|
def get_system_prompt(self) -> str:
|
|
37
37
|
return """
|
|
38
|
-
You are a Python programming
|
|
38
|
+
You are a Python programming specialist. You write Pythonic code and excel at async patterns. Your mission is to craft production-ready Python solutions that follow best practices.
|
|
39
39
|
|
|
40
40
|
Your Python superpowers include:
|
|
41
41
|
|
|
@@ -145,11 +145,9 @@ Code Quality Checklist (mentally verify for each change):
|
|
|
145
145
|
- [ ] Proper error handling and logging
|
|
146
146
|
- [ ] Documentation is clear and accurate
|
|
147
147
|
|
|
148
|
-
Your
|
|
149
|
-
- Be
|
|
150
|
-
-
|
|
151
|
-
- Be pedantic about best practices but explain WHY they matter
|
|
152
|
-
- Celebrate good code: "Now THAT'S some Pythonic poetry!"
|
|
148
|
+
Your Approach:
|
|
149
|
+
- Be thorough about Python but honest about code quality
|
|
150
|
+
- Be rigorous about best practices and explain WHY they matter
|
|
153
151
|
- When suggesting improvements, provide concrete examples
|
|
154
152
|
- Always explain the "why" behind your recommendations
|
|
155
153
|
- Stay current with Python trends but prioritize proven patterns
|
|
@@ -160,5 +158,5 @@ Tool Usage:
|
|
|
160
158
|
- Use read_file and grep to understand existing codebases
|
|
161
159
|
Remember: You're not just writing code - you're crafting maintainable, performant, and secure Python solutions that will make future developers (and your future self) grateful. Every line should have purpose, every function should have clarity, and every module should have cohesion.
|
|
162
160
|
|
|
163
|
-
|
|
161
|
+
Write clean, maintainable, and performant Python.
|
|
164
162
|
"""
|
|
@@ -31,7 +31,7 @@ class PythonReviewerAgent(BaseAgent):
|
|
|
31
31
|
|
|
32
32
|
def get_system_prompt(self) -> str:
|
|
33
33
|
return """
|
|
34
|
-
You are a senior Python reviewer
|
|
34
|
+
You are a senior Python code reviewer. Guard code quality rigorously and stay laser-focused on meaningful diff hunks.
|
|
35
35
|
|
|
36
36
|
Mission parameters:
|
|
37
37
|
- Review only `.py` files with substantive code changes. Skip untouched files or pure formatting/whitespace churn.
|
|
@@ -56,7 +56,7 @@ Review heuristics:
|
|
|
56
56
|
- Packaging & deployment: entry points with `setuptools`/`poetry`, dependency pinning with `pip-tools`, wheel friendliness, CLI ergonomics with `click`/`typer`, containerization with Docker multi-stage builds.
|
|
57
57
|
|
|
58
58
|
Feedback style:
|
|
59
|
-
- Be
|
|
59
|
+
- Be direct but precise. “Consider …” beats “This is wrong.”
|
|
60
60
|
- Group related issues; reference exact lines (`path/to/file.py:123`). No ranges, no hand-wavy “somewhere in here.”
|
|
61
61
|
- Call out unknowns or assumptions so humans can double-check.
|
|
62
62
|
- If everything looks shipshape, declare victory and highlight why.
|
|
@@ -85,5 +85,5 @@ Agent collaboration:
|
|
|
85
85
|
- Use list_agents to discover specialists for specific domains (ML, devops, databases)
|
|
86
86
|
- Always explain what specific Python expertise you need when collaborating with other agents
|
|
87
87
|
|
|
88
|
-
You're the Python review
|
|
88
|
+
You're the Python review agent for this CLI. Be opinionated, kind, and relentlessly helpful.
|
|
89
89
|
"""
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
"""
|
|
1
|
+
"""QA Browser - Playwright-powered browser automation agent."""
|
|
2
2
|
|
|
3
3
|
from .base_agent import BaseAgent
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
class
|
|
7
|
-
"""
|
|
6
|
+
class QABrowserAgent(BaseAgent):
|
|
7
|
+
"""QA Browser - Advanced browser automation with Playwright."""
|
|
8
8
|
|
|
9
9
|
@property
|
|
10
10
|
def name(self) -> str:
|
|
11
|
-
return "qa-
|
|
11
|
+
return "qa-browser"
|
|
12
12
|
|
|
13
13
|
@property
|
|
14
14
|
def display_name(self) -> str:
|
|
15
|
-
return "
|
|
15
|
+
return "QA Browser"
|
|
16
16
|
|
|
17
17
|
@property
|
|
18
18
|
def description(self) -> str:
|
|
19
19
|
return "Advanced web browser automation and quality assurance testing using Playwright with visual analysis capabilities"
|
|
20
20
|
|
|
21
21
|
def get_available_tools(self) -> list[str]:
|
|
22
|
-
"""Get the list of tools available to
|
|
22
|
+
"""Get the list of tools available to QA Browser."""
|
|
23
23
|
return [
|
|
24
24
|
# Browser control and initialization
|
|
25
25
|
"browser_initialize",
|
|
@@ -71,9 +71,9 @@ class QualityAssuranceKittenAgent(BaseAgent):
|
|
|
71
71
|
]
|
|
72
72
|
|
|
73
73
|
def get_system_prompt(self) -> str:
|
|
74
|
-
"""Get
|
|
74
|
+
"""Get QA Browser's specialized system prompt."""
|
|
75
75
|
return """
|
|
76
|
-
You are
|
|
76
|
+
You are QA Browser, an advanced autonomous browser automation and QA testing agent powered by Playwright.
|
|
77
77
|
|
|
78
78
|
You specialize in:
|
|
79
79
|
🎯 **Quality Assurance Testing** - automated testing of web applications and user workflows
|
|
@@ -202,5 +202,5 @@ For any browser task, follow this approach:
|
|
|
202
202
|
- **Follow accessibility best practices** - your automation should work for everyone
|
|
203
203
|
- **Document your successes** - Save working patterns with browser_save_workflow for future reuse
|
|
204
204
|
|
|
205
|
-
Your browser automation should be reliable, maintainable, and accessible. You are a meticulous QA engineer who catches bugs before users do
|
|
205
|
+
Your browser automation should be reliable, maintainable, and accessible. You are a meticulous QA engineer who catches bugs before users do.
|
|
206
206
|
"""
|
|
@@ -31,7 +31,7 @@ class QAExpertAgent(BaseAgent):
|
|
|
31
31
|
|
|
32
32
|
def get_system_prompt(self) -> str:
|
|
33
33
|
return """
|
|
34
|
-
You are
|
|
34
|
+
You are a QA expert. Risk-based mindset, defect-prevention first, automation evangelist. Push teams to ship with confidence.
|
|
35
35
|
|
|
36
36
|
Mission charter:
|
|
37
37
|
- Review only files/artifacts tied to quality: tests, configs, pipelines, docs, code touching critical risk areas.
|
|
@@ -158,5 +158,5 @@ Agent collaboration:
|
|
|
158
158
|
- Always articulate what specific testing expertise you need when involving other agents
|
|
159
159
|
- Coordinate multiple reviewers when comprehensive quality assessment is needed
|
|
160
160
|
|
|
161
|
-
You're the QA
|
|
161
|
+
You're the QA agent for this CLI. Stay relentless about quality and make sure every release is thoroughly validated.
|
|
162
162
|
"""
|
|
@@ -63,7 +63,7 @@ You can help users:
|
|
|
63
63
|
|
|
64
64
|
- Tasks are stored in `~/.code_puppy/scheduled_tasks.json`
|
|
65
65
|
- A background daemon checks for tasks to run based on their schedule
|
|
66
|
-
- Each task runs: `
|
|
66
|
+
- Each task runs: `newcode -p <prompt> --model <model> --agent <agent>`
|
|
67
67
|
- Output is saved to log files in `~/.code_puppy/scheduler_logs/`
|
|
68
68
|
|
|
69
69
|
## Schedule Types
|
|
@@ -75,7 +75,7 @@ You can help users:
|
|
|
75
75
|
## Available Agents to Suggest
|
|
76
76
|
|
|
77
77
|
When users ask about automation, suggest appropriate agents:
|
|
78
|
-
- `code-
|
|
78
|
+
- `code-agent` - General coding tasks
|
|
79
79
|
- `code-reviewer` or `python-reviewer` - Code review tasks
|
|
80
80
|
- `security-auditor` - Security scanning
|
|
81
81
|
- `qa-expert` - Quality assurance checks
|
|
@@ -31,7 +31,7 @@ class SecurityAuditorAgent(BaseAgent):
|
|
|
31
31
|
|
|
32
32
|
def get_system_prompt(self) -> str:
|
|
33
33
|
return """
|
|
34
|
-
You are
|
|
34
|
+
You are a security auditor. Objective, risk-driven, compliance-savvy. Mix clarity with actionable guidance so teams actually fix things.
|
|
35
35
|
|
|
36
36
|
Audit mandate:
|
|
37
37
|
- Scope only the files and configs tied to security posture: auth, access control, crypto, infrastructure as code, policies, logs, pipeline guards.
|
|
@@ -61,7 +61,7 @@ Evidence & documentation:
|
|
|
61
61
|
Reporting etiquette:
|
|
62
62
|
- Be concise but complete: risk description, impact, likelihood, affected assets, recommendation.
|
|
63
63
|
- Suggest remediation phases: immediate quick win, medium-term fix, long-term strategic guardrail.
|
|
64
|
-
- Call out positive controls or improvements observed—security teams deserve
|
|
64
|
+
- Call out positive controls or improvements observed—security teams deserve recognition too.
|
|
65
65
|
|
|
66
66
|
Security toolchain integration:
|
|
67
67
|
- SAST tools: `semgrep --config=auto`, `codeql database analyze`, SonarQube security rules, `bandit -r .` (Python), `gosec ./...` (Go), `eslint --plugin security`
|
|
@@ -176,5 +176,5 @@ Agent collaboration:
|
|
|
176
176
|
- Always explain what specific security expertise you need when collaborating with other agents
|
|
177
177
|
- Provide actionable remediation guidance that other reviewers can implement
|
|
178
178
|
|
|
179
|
-
You're the security audit
|
|
179
|
+
You're the security audit agent for this CLI. Stay independent, stay constructive, and keep the whole team safe.
|
|
180
180
|
"""
|
|
@@ -31,7 +31,7 @@ class TypeScriptReviewerAgent(BaseAgent):
|
|
|
31
31
|
|
|
32
32
|
def get_system_prompt(self) -> str:
|
|
33
33
|
return """
|
|
34
|
-
You are an elite TypeScript reviewer
|
|
34
|
+
You are an elite TypeScript code reviewer. Defend type soundness, DX, and runtime sanity with unwavering rigor.
|
|
35
35
|
|
|
36
36
|
Mission directives:
|
|
37
37
|
- Review only `.ts`/`.tsx` files (and `.mts`/`.cts`) with substantive code changes. Skip untouched files or cosmetic reformatting.
|
|
@@ -55,7 +55,7 @@ Review heuristics:
|
|
|
55
55
|
- Security: input validation, auth guards, CSRF/CSR token handling, SSR data leaks, and sanitization for DOM APIs.
|
|
56
56
|
|
|
57
57
|
Feedback style:
|
|
58
|
-
- Be
|
|
58
|
+
- Be direct but constructive. “Consider …” or “Maybe try …” keeps the feedback actionable.
|
|
59
59
|
- Group related feedback; cite precise lines like `src/components/Foo.tsx:42`. No ranges, no vibes-only feedback.
|
|
60
60
|
- Flag unknowns or assumptions explicitly so humans know what to double-check.
|
|
61
61
|
- If nothing smells funky, celebrate and spotlight strengths.
|
|
@@ -161,5 +161,5 @@ Agent collaboration:
|
|
|
161
161
|
- Always articulate what specific TypeScript expertise you need when collaborating with other agents
|
|
162
162
|
- Ensure type safety collaboration catches runtime issues before deployment
|
|
163
163
|
|
|
164
|
-
You're the TypeScript review
|
|
164
|
+
You're the TypeScript review agent for this CLI. Be thorough, rigorous about quality, and helpful.
|
|
165
165
|
"""
|
|
@@ -150,8 +150,8 @@ class BaseAgent(ABC):
|
|
|
150
150
|
# Agent construction cache
|
|
151
151
|
self._code_generation_agent = None
|
|
152
152
|
self._last_model_name: Optional[str] = None
|
|
153
|
-
#
|
|
154
|
-
self.
|
|
153
|
+
# Agent rules loaded lazily
|
|
154
|
+
self._agent_rules: Optional[str] = None
|
|
155
155
|
self.cur_model: pydantic_ai.models.Model
|
|
156
156
|
# Cache for MCP tool definitions (for token estimation)
|
|
157
157
|
# This is populated after the first successful run when MCP tools are retrieved
|
|
@@ -1175,7 +1175,7 @@ class BaseAgent(ABC):
|
|
|
1175
1175
|
return run_summarization_sync(instructions, message_history)
|
|
1176
1176
|
|
|
1177
1177
|
# ===== Agent wiring formerly in code_puppy/agent.py =====
|
|
1178
|
-
def
|
|
1178
|
+
def load_agent_rules(self) -> Optional[str]:
|
|
1179
1179
|
"""Load AGENT(S).md from both global config and project directory.
|
|
1180
1180
|
|
|
1181
1181
|
Checks for AGENTS.md/AGENT.md/agents.md/agent.md in this order:
|
|
@@ -1185,8 +1185,8 @@ class BaseAgent(ABC):
|
|
|
1185
1185
|
If both exist, they are combined with global rules first, then project rules.
|
|
1186
1186
|
This allows project-specific rules to override or extend global rules.
|
|
1187
1187
|
"""
|
|
1188
|
-
if self.
|
|
1189
|
-
return self.
|
|
1188
|
+
if self._agent_rules is not None:
|
|
1189
|
+
return self._agent_rules
|
|
1190
1190
|
from pathlib import Path
|
|
1191
1191
|
|
|
1192
1192
|
possible_paths = ["AGENTS.md", "AGENT.md", "agents.md", "agent.md"]
|
|
@@ -1212,8 +1212,8 @@ class BaseAgent(ABC):
|
|
|
1212
1212
|
# Combine global and project rules
|
|
1213
1213
|
# Global rules come first, project rules second (allowing project to override)
|
|
1214
1214
|
rules = [r for r in [global_rules, project_rules] if r]
|
|
1215
|
-
self.
|
|
1216
|
-
return self.
|
|
1215
|
+
self._agent_rules = "\n\n".join(rules) if rules else None
|
|
1216
|
+
return self._agent_rules
|
|
1217
1217
|
|
|
1218
1218
|
def load_mcp_servers(self, extra_headers: Optional[Dict[str, str]] = None):
|
|
1219
1219
|
"""Load MCP servers through the manager and return pydantic-ai compatible servers.
|
|
@@ -1317,9 +1317,9 @@ class BaseAgent(ABC):
|
|
|
1317
1317
|
)
|
|
1318
1318
|
|
|
1319
1319
|
instructions = self.get_full_system_prompt()
|
|
1320
|
-
|
|
1321
|
-
if
|
|
1322
|
-
instructions += f"\n{
|
|
1320
|
+
agent_rules = self.load_agent_rules()
|
|
1321
|
+
if agent_rules:
|
|
1322
|
+
instructions += f"\n{agent_rules}"
|
|
1323
1323
|
|
|
1324
1324
|
mcp_servers = self.load_mcp_servers()
|
|
1325
1325
|
|
|
@@ -1485,9 +1485,9 @@ class BaseAgent(ABC):
|
|
|
1485
1485
|
)
|
|
1486
1486
|
|
|
1487
1487
|
instructions = self.get_full_system_prompt()
|
|
1488
|
-
|
|
1489
|
-
if
|
|
1490
|
-
instructions += f"\n{
|
|
1488
|
+
agent_rules = self.load_agent_rules()
|
|
1489
|
+
if agent_rules:
|
|
1490
|
+
instructions += f"\n{agent_rules}"
|
|
1491
1491
|
|
|
1492
1492
|
mcp_servers = getattr(self, "_mcp_servers", []) or []
|
|
1493
1493
|
model_settings = make_model_settings(resolved_model_name)
|
|
@@ -1664,7 +1664,7 @@ class BaseAgent(ABC):
|
|
|
1664
1664
|
)
|
|
1665
1665
|
|
|
1666
1666
|
thread = threading.Thread(
|
|
1667
|
-
target=listener, name="
|
|
1667
|
+
target=listener, name="key-listener", daemon=True
|
|
1668
1668
|
)
|
|
1669
1669
|
thread.start()
|
|
1670
1670
|
return thread
|
|
@@ -1823,9 +1823,9 @@ class BaseAgent(ABC):
|
|
|
1823
1823
|
should_prepend = len(self.get_message_history()) == 0
|
|
1824
1824
|
if should_prepend:
|
|
1825
1825
|
system_prompt = self.get_full_system_prompt()
|
|
1826
|
-
|
|
1827
|
-
if
|
|
1828
|
-
system_prompt += f"\n{
|
|
1826
|
+
agent_rules = self.load_agent_rules()
|
|
1827
|
+
if agent_rules:
|
|
1828
|
+
system_prompt += f"\n{agent_rules}"
|
|
1829
1829
|
|
|
1830
1830
|
prepared = prepare_prompt_for_model(
|
|
1831
1831
|
model_name=self.get_model_name(),
|
|
@@ -1763,9 +1763,9 @@ def get_default_agent() -> str:
|
|
|
1763
1763
|
Get the default agent name from puppy.cfg.
|
|
1764
1764
|
|
|
1765
1765
|
Returns:
|
|
1766
|
-
str: The default agent name, or "code-
|
|
1766
|
+
str: The default agent name, or "code-agent" if not set.
|
|
1767
1767
|
"""
|
|
1768
|
-
return get_value("default_agent") or "code-
|
|
1768
|
+
return get_value("default_agent") or "code-agent"
|
|
1769
1769
|
|
|
1770
1770
|
|
|
1771
1771
|
def set_default_agent(agent_name: str) -> None:
|
|
@@ -176,7 +176,7 @@ def get_available_agents_list() -> List[Tuple[str, str]]:
|
|
|
176
176
|
result.append((agent_name, desc))
|
|
177
177
|
return result
|
|
178
178
|
except Exception:
|
|
179
|
-
return [("code-
|
|
179
|
+
return [("code-agent", "Default agent")]
|
|
180
180
|
|
|
181
181
|
|
|
182
182
|
def get_available_models_list() -> List[str]:
|
|
@@ -27,7 +27,7 @@ class ScheduledTask:
|
|
|
27
27
|
id: str = field(default_factory=lambda: str(uuid.uuid4())[:8])
|
|
28
28
|
name: str = ""
|
|
29
29
|
prompt: str = ""
|
|
30
|
-
agent: str = "code-
|
|
30
|
+
agent: str = "code-agent"
|
|
31
31
|
model: str = "" # Uses default if empty
|
|
32
32
|
schedule_type: str = "interval" # "interval", "cron", "daily", "hourly"
|
|
33
33
|
schedule_value: str = "1h" # e.g., "30m", "1h", "0 9 * * *" for cron
|
|
@@ -18,14 +18,14 @@ from code_puppy.scheduler.config import (
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
def get_code_puppy_command() -> str:
|
|
21
|
-
"""Get the path to the
|
|
22
|
-
# Try to find
|
|
21
|
+
"""Get the path to the newcode executable."""
|
|
22
|
+
# Try to find newcode in the same environment as this script
|
|
23
23
|
if sys.platform == "win32":
|
|
24
|
-
# On Windows, look for
|
|
25
|
-
return "
|
|
24
|
+
# On Windows, look for newcode.exe or use python -m
|
|
25
|
+
return "newcode"
|
|
26
26
|
else:
|
|
27
|
-
# On Unix,
|
|
28
|
-
return "
|
|
27
|
+
# On Unix, newcode should be in PATH if installed
|
|
28
|
+
return "newcode"
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
def execute_task(task: ScheduledTask) -> Tuple[bool, int, str]:
|
|
@@ -35,16 +35,16 @@ class StatusDisplay:
|
|
|
35
35
|
"Wagging tail...",
|
|
36
36
|
"Pawsing for a moment...",
|
|
37
37
|
"Chasing tail...",
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
38
|
+
"Analyzing...",
|
|
39
|
+
"Processing...",
|
|
40
|
+
"Searching...",
|
|
41
|
+
"Evaluating...",
|
|
42
|
+
"Computing...",
|
|
43
|
+
"Reasoning...",
|
|
44
|
+
"Working...",
|
|
45
|
+
"Thinking...",
|
|
46
|
+
"Generating...",
|
|
47
|
+
"Resolving...",
|
|
48
48
|
]
|
|
49
49
|
self.current_message_index = 0
|
|
50
50
|
self.spinner = Spinner("dots", text="")
|
|
@@ -4,8 +4,8 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "newcode"
|
|
7
|
-
version = "0.1.
|
|
8
|
-
description = "AI-powered code generation agent
|
|
7
|
+
version = "0.1.8"
|
|
8
|
+
description = "AI-powered code generation agent platform"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11,<3.14"
|
|
11
11
|
dependencies = [
|
|
@@ -37,6 +37,7 @@ dev-dependencies = [
|
|
|
37
37
|
"pytest>=8.3.4",
|
|
38
38
|
"pytest-cov>=6.1.1",
|
|
39
39
|
"pytest-asyncio>=0.23.1",
|
|
40
|
+
"pytest-xdist>=3.5.0",
|
|
40
41
|
"ruff>=0.11.11",
|
|
41
42
|
"pexpect>=4.9.0",
|
|
42
43
|
]
|
|
@@ -100,6 +101,7 @@ dev = [
|
|
|
100
101
|
"pytest>=8.3.4",
|
|
101
102
|
"pytest-cov>=6.1.1",
|
|
102
103
|
"pytest-asyncio>=0.23.1",
|
|
104
|
+
"pytest-xdist>=3.5.0",
|
|
103
105
|
"ruff>=0.11.11",
|
|
104
106
|
"pexpect>=4.9.0",
|
|
105
107
|
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|