newcode 0.1.7__tar.gz → 0.1.9__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.9}/.gitignore +1 -1
- {newcode-0.1.7 → newcode-0.1.9}/PKG-INFO +5 -5
- {newcode-0.1.7 → newcode-0.1.9}/README.md +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/__main__.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/__init__.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_c_reviewer.py +2 -2
- newcode-0.1.7/code_puppy/agents/agent_code_puppy.py → newcode-0.1.9/newcode/agents/agent_code_agent.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_code_reviewer.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_cpp_reviewer.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_creator_agent.py +6 -8
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_golang_reviewer.py +7 -7
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_javascript_reviewer.py +5 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_manager.py +13 -13
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_pack_leader.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_planning.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_python_programmer.py +5 -7
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_python_reviewer.py +3 -3
- newcode-0.1.7/code_puppy/agents/agent_qa_kitten.py → newcode-0.1.9/newcode/agents/agent_qa_browser.py +9 -9
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_qa_expert.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_scheduler.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_security_auditor.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_typescript_reviewer.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/base_agent.py +43 -45
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/event_stream_handler.py +5 -5
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/json_agent.py +5 -5
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/pack/bloodhound.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/pack/husky.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/pack/retriever.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/pack/shepherd.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/pack/terrier.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/pack/watchdog.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/prompt_reviewer.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/subagent_stream_handler.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/api/__init__.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/api/app.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/api/main.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/api/routers/__init__.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/api/routers/agents.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/api/routers/commands.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/api/routers/config.py +5 -5
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/api/routers/sessions.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/api/websocket.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/claude_cache_client.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/cli_runner.py +81 -82
- newcode-0.1.9/newcode/command_line/__init__.py +1 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/add_model_menu.py +6 -6
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/agent_menu.py +8 -8
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/autosave_menu.py +7 -9
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/colors_menu.py +7 -11
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/command_handler.py +15 -15
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/config_commands.py +43 -43
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/core_commands.py +40 -40
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/diff_menu.py +5 -5
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/load_context_completion.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/base.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/catalog_server_installer.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/custom_server_form.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/custom_server_installer.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/edit_command.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/handler.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/help_command.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/install_command.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/install_menu.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/list_command.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/logs_command.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/remove_command.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/restart_command.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/search_command.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/start_all_command.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/start_command.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/status_command.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/stop_all_command.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/stop_command.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/test_command.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/utils.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/wizard_utils.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp_completion.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/model_picker_completion.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/model_settings_menu.py +5 -5
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/motd.py +5 -7
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/onboarding_slides.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/onboarding_wizard.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/pin_command_completion.py +7 -7
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/prompt_toolkit_completion.py +16 -16
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/session_commands.py +17 -17
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/skills_completion.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/uc_menu.py +6 -6
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/config.py +25 -25
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/error_logging.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/hook_engine/README.md +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/hook_engine/aliases.py +7 -7
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/hook_engine/matcher.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/http_utils.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/keymap.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/main.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/blocking_startup.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/captured_stdio_server.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/config_wizard.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/examples/retry_example.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/managed_server.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/manager.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/mcp_logs.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/registry.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/server_registry_catalog.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_prompts/hook_creator.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/messaging/__init__.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/messaging/message_queue.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/messaging/messages.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/messaging/queue_console.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/messaging/rich_renderer.py +23 -17
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/messaging/spinner/__init__.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/messaging/spinner/console_spinner.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/messaging/spinner/spinner_base.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/messaging/subagent_console.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/model_factory.py +13 -13
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/model_switching.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/model_utils.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/models_dev_parser.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/__init__.py +6 -6
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/agent_skills/__init__.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/agent_skills/config.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/agent_skills/discovery.py +5 -5
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/agent_skills/downloader.py +6 -6
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/agent_skills/prompt_builder.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/agent_skills/register_callbacks.py +9 -9
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/agent_skills/remote_catalog.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/agent_skills/skill_catalog.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/agent_skills/skills_install_menu.py +7 -7
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/agent_skills/skills_menu.py +10 -10
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/antigravity_oauth/antigravity_model.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/antigravity_oauth/config.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/antigravity_oauth/register_callbacks.py +6 -6
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/antigravity_oauth/transport.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/antigravity_oauth/utils.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/chatgpt_oauth/config.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/chatgpt_oauth/oauth_flow.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/chatgpt_oauth/register_callbacks.py +5 -5
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/chatgpt_oauth/test_plugin.py +8 -8
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/claude_code_hooks/config.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/claude_code_hooks/register_callbacks.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/claude_code_oauth/SETUP.md +5 -5
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/claude_code_oauth/config.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/claude_code_oauth/register_callbacks.py +9 -9
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/claude_code_oauth/test_plugin.py +8 -8
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/customizable_commands/register_callbacks.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/example_custom_command/README.md +17 -17
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/example_custom_command/register_callbacks.py +2 -2
- newcode-0.1.9/newcode/plugins/file_permission_handler/__init__.py +4 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/file_permission_handler/register_callbacks.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/frontend_emitter/__init__.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/frontend_emitter/emitter.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/frontend_emitter/register_callbacks.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/hook_creator/register_callbacks.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/hook_manager/config.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/hook_manager/hooks_menu.py +6 -6
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/hook_manager/register_callbacks.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/scheduler/register_callbacks.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/scheduler/scheduler_menu.py +12 -14
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/scheduler/scheduler_wizard.py +10 -10
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/shell_safety/agent_shell_safety.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/shell_safety/register_callbacks.py +6 -6
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/synthetic_status/register_callbacks.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/synthetic_status/status_api.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/universal_constructor/__init__.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/universal_constructor/register_callbacks.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/pydantic_patches.py +8 -8
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/scheduler/__init__.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/scheduler/__main__.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/scheduler/cli.py +7 -7
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/scheduler/config.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/scheduler/daemon.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/scheduler/executor.py +12 -12
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/scheduler/platform.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/session_storage.py +5 -5
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/status_display.py +12 -12
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/summarization_agent.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/__init__.py +23 -23
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/agent_tools.py +18 -18
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/ask_user_question/__init__.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/ask_user_question/demo_tui.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/ask_user_question/handler.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/ask_user_question/terminal_ui.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/ask_user_question/theme.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/browser/__init__.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/browser/browser_control.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/browser/browser_interactions.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/browser/browser_locators.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/browser/browser_manager.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/browser/browser_navigation.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/browser/browser_screenshot.py +3 -5
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/browser/browser_scripts.py +2 -2
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/browser/browser_workflows.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/browser/chromium_terminal_manager.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/browser/terminal_command_tools.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/browser/terminal_screenshot_tools.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/browser/terminal_tools.py +6 -7
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/command_runner.py +10 -10
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/common.py +12 -12
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/display.py +3 -3
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/file_modifications.py +13 -13
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/file_operations.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/scheduler_tools.py +17 -17
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/skills_tools.py +7 -7
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/subagent_context.py +1 -1
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/universal_constructor.py +12 -12
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/uvx_detection.py +4 -4
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/version_checker.py +2 -2
- {newcode-0.1.7 → newcode-0.1.9}/pyproject.toml +16 -14
- newcode-0.1.7/code_puppy/command_line/__init__.py +0 -1
- newcode-0.1.7/code_puppy/plugins/file_permission_handler/__init__.py +0 -4
- {newcode-0.1.7 → newcode-0.1.9}/LICENSE +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/agent_terminal_qa.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/agents/pack/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/api/pty_manager.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/api/templates/terminal.html +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/callbacks.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/chatgpt_codex_client.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/attachments.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/clipboard.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/command_registry.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/file_path_completion.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/mcp/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/utils.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/command_line/wiggum_state.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/gemini_code_assist.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/gemini_model.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/hook_engine/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/hook_engine/engine.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/hook_engine/executor.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/hook_engine/models.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/hook_engine/registry.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/hook_engine/validator.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/async_lifecycle.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/circuit_breaker.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/dashboard.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/error_isolation.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/health_monitor.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/retry_manager.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/status_tracker.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_/system_tools.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/mcp_prompts/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/messaging/bus.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/messaging/commands.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/messaging/markdown_patches.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/messaging/renderers.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/models.json +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/models_dev_api.json +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/agent_skills/installer.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/agent_skills/metadata.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/antigravity_oauth/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/antigravity_oauth/accounts.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/antigravity_oauth/constants.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/antigravity_oauth/oauth.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/antigravity_oauth/storage.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/antigravity_oauth/test_plugin.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/antigravity_oauth/token.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/chatgpt_oauth/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/chatgpt_oauth/utils.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/claude_code_hooks/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/claude_code_oauth/README.md +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/claude_code_oauth/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/claude_code_oauth/token_refresh_heartbeat.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/claude_code_oauth/utils.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/customizable_commands/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/hook_creator/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/hook_manager/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/oauth_puppy_html.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/scheduler/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/shell_safety/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/shell_safety/command_cache.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/synthetic_status/__init__.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/universal_constructor/models.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/universal_constructor/registry.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/plugins/universal_constructor/sandbox.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/prompts/antigravity_system_prompt.md +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/reopenable_async_client.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/round_robin_model.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/scheduler/platform_unix.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/scheduler/platform_win.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/terminal_utils.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/ask_user_question/constants.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/ask_user_question/models.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/ask_user_question/registration.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/ask_user_question/renderers.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/ask_user_question/tui_loop.py +0 -0
- {newcode-0.1.7/code_puppy → newcode-0.1.9/newcode}/tools/tools_content.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.9
|
|
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
|
|
@@ -45,7 +45,7 @@ Description-Content-Type: text/markdown
|
|
|
45
45
|
|
|
46
46
|
An AI-powered code generation and modification agent for the terminal.
|
|
47
47
|
|
|
48
|
-
NewCode is a fork of [code-puppy](https://github.com/mpfaffenberger/
|
|
48
|
+
NewCode is a fork of [code-puppy](https://github.com/mpfaffenberger/newcode) by Michael Pfaffenberger, customized for the fedstew workflow. We wanted a clean, professional CLI agent with opinionated defaults, streamlined prompts, and a focus on practical code generation without the playful branding.
|
|
49
49
|
|
|
50
50
|
## What changed from code-puppy
|
|
51
51
|
|
|
@@ -100,7 +100,7 @@ On first run, you'll be guided through a setup wizard to configure your API keys
|
|
|
100
100
|
|
|
101
101
|
## Configuration
|
|
102
102
|
|
|
103
|
-
Configuration is stored in `~/.config/
|
|
103
|
+
Configuration is stored in `~/.config/newcode/puppy.cfg` (XDG-compliant paths). The setup wizard handles initial configuration. You can also use CLI commands:
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
106
|
# Inside the agent REPL:
|
|
@@ -147,7 +147,7 @@ ruff format --check .
|
|
|
147
147
|
|
|
148
148
|
## Credits
|
|
149
149
|
|
|
150
|
-
This project is a fork of [code-puppy](https://github.com/mpfaffenberger/
|
|
150
|
+
This project is a fork of [code-puppy](https://github.com/mpfaffenberger/newcode) by [Michael Pfaffenberger](https://github.com/mpfaffenberger), licensed under the MIT License. We are grateful for the original work and the open-source foundation it provides.
|
|
151
151
|
|
|
152
152
|
## License
|
|
153
153
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
An AI-powered code generation and modification agent for the terminal.
|
|
4
4
|
|
|
5
|
-
NewCode is a fork of [code-puppy](https://github.com/mpfaffenberger/
|
|
5
|
+
NewCode is a fork of [code-puppy](https://github.com/mpfaffenberger/newcode) by Michael Pfaffenberger, customized for the fedstew workflow. We wanted a clean, professional CLI agent with opinionated defaults, streamlined prompts, and a focus on practical code generation without the playful branding.
|
|
6
6
|
|
|
7
7
|
## What changed from code-puppy
|
|
8
8
|
|
|
@@ -57,7 +57,7 @@ On first run, you'll be guided through a setup wizard to configure your API keys
|
|
|
57
57
|
|
|
58
58
|
## Configuration
|
|
59
59
|
|
|
60
|
-
Configuration is stored in `~/.config/
|
|
60
|
+
Configuration is stored in `~/.config/newcode/puppy.cfg` (XDG-compliant paths). The setup wizard handles initial configuration. You can also use CLI commands:
|
|
61
61
|
|
|
62
62
|
```bash
|
|
63
63
|
# Inside the agent REPL:
|
|
@@ -104,7 +104,7 @@ ruff format --check .
|
|
|
104
104
|
|
|
105
105
|
## Credits
|
|
106
106
|
|
|
107
|
-
This project is a fork of [code-puppy](https://github.com/mpfaffenberger/
|
|
107
|
+
This project is a fork of [code-puppy](https://github.com/mpfaffenberger/newcode) by [Michael Pfaffenberger](https://github.com/mpfaffenberger), licensed under the MIT License. We are grateful for the original work and the open-source foundation it provides.
|
|
108
108
|
|
|
109
109
|
## License
|
|
110
110
|
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"""
|
|
2
2
|
Entry point for running newcode as a module.
|
|
3
3
|
|
|
4
|
-
This allows the package to be run with: python -m
|
|
4
|
+
This allows the package to be run with: python -m newcode
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
from
|
|
7
|
+
from newcode.main import main_entry
|
|
8
8
|
|
|
9
9
|
if __name__ == "__main__":
|
|
10
10
|
main_entry()
|
|
@@ -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
|
"""
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"""Code Agent - The default code generation agent."""
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from newcode.config import get_agent_name, get_user_name
|
|
4
4
|
|
|
5
5
|
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
|
"""
|
|
@@ -4,9 +4,9 @@ import json
|
|
|
4
4
|
import os
|
|
5
5
|
from typing import Dict, List, Optional
|
|
6
6
|
|
|
7
|
-
from
|
|
8
|
-
from
|
|
9
|
-
from
|
|
7
|
+
from newcode.config import get_user_agents_directory
|
|
8
|
+
from newcode.model_factory import ModelFactory
|
|
9
|
+
from newcode.tools import get_available_tool_names
|
|
10
10
|
|
|
11
11
|
from .base_agent import BaseAgent
|
|
12
12
|
|
|
@@ -33,7 +33,7 @@ class AgentCreatorAgent(BaseAgent):
|
|
|
33
33
|
# Also get Universal Constructor tools (custom tools created by users)
|
|
34
34
|
uc_tools_info = []
|
|
35
35
|
try:
|
|
36
|
-
from
|
|
36
|
+
from newcode.plugins.universal_constructor.registry import get_registry
|
|
37
37
|
|
|
38
38
|
registry = get_registry()
|
|
39
39
|
uc_tools = registry.list_tools(include_disabled=True)
|
|
@@ -49,9 +49,7 @@ class AgentCreatorAgent(BaseAgent):
|
|
|
49
49
|
if uc_tools_info:
|
|
50
50
|
uc_tools_section = "\n".join(uc_tools_info)
|
|
51
51
|
else:
|
|
52
|
-
uc_tools_section =
|
|
53
|
-
"No custom UC tools created yet."
|
|
54
|
-
)
|
|
52
|
+
uc_tools_section = "No custom UC tools created yet."
|
|
55
53
|
|
|
56
54
|
# Load available models dynamically
|
|
57
55
|
models_config = ModelFactory.load_config()
|
|
@@ -509,7 +507,7 @@ Your goal is to take users from idea to working agent in one smooth conversation
|
|
|
509
507
|
|
|
510
508
|
def get_available_tools(self) -> List[str]:
|
|
511
509
|
"""Get all tools needed for agent creation."""
|
|
512
|
-
from
|
|
510
|
+
from newcode.config import get_universal_constructor_enabled
|
|
513
511
|
|
|
514
512
|
tools = [
|
|
515
513
|
"list_files",
|
|
@@ -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,9 @@ class JavaScriptReviewerAgent(BaseAgent):
|
|
|
16
16
|
|
|
17
17
|
@property
|
|
18
18
|
def description(self) -> str:
|
|
19
|
-
return
|
|
19
|
+
return (
|
|
20
|
+
"Thorough JavaScript reviewer enforcing modern patterns and runtime sanity"
|
|
21
|
+
)
|
|
20
22
|
|
|
21
23
|
def get_available_tools(self) -> list[str]:
|
|
22
24
|
"""Reviewers need read-only inspection helpers plus agent collaboration."""
|
|
@@ -31,7 +33,7 @@ class JavaScriptReviewerAgent(BaseAgent):
|
|
|
31
33
|
|
|
32
34
|
def get_system_prompt(self) -> str:
|
|
33
35
|
return """
|
|
34
|
-
You are
|
|
36
|
+
You are a JavaScript code reviewer. Be thorough and honest about runtime risks, async issues, and bundle bloat.
|
|
35
37
|
|
|
36
38
|
Mission focus:
|
|
37
39
|
- Review only `.js`/`.mjs`/`.cjs` files (and `.jsx`) with real code changes. Skip untouched files or pure prettier churn.
|
|
@@ -155,5 +157,5 @@ Agent collaboration:
|
|
|
155
157
|
- Use list_agents to find specialists for specific frameworks (React, Vue, Angular) or deployment concerns
|
|
156
158
|
- Always articulate what specific JavaScript/Node expertise you need when invoking other agents
|
|
157
159
|
|
|
158
|
-
You're the JavaScript review
|
|
160
|
+
You're the JavaScript review agent for this CLI. Be thorough, obsessive about quality, and helpful.
|
|
159
161
|
"""
|
|
@@ -12,10 +12,10 @@ from typing import Dict, List, Optional, Type, Union
|
|
|
12
12
|
|
|
13
13
|
from pydantic_ai.messages import ModelMessage
|
|
14
14
|
|
|
15
|
-
from
|
|
16
|
-
from
|
|
17
|
-
from
|
|
18
|
-
from
|
|
15
|
+
from newcode.agents.base_agent import BaseAgent
|
|
16
|
+
from newcode.agents.json_agent import JSONAgent, discover_json_agents
|
|
17
|
+
from newcode.callbacks import on_agent_reload, on_register_agents
|
|
18
|
+
from newcode.messaging import emit_success, emit_warning
|
|
19
19
|
|
|
20
20
|
# Registry of available agents (Python classes and JSON file paths)
|
|
21
21
|
_AGENT_REGISTRY: Dict[str, Union[Type[BaseAgent], str]] = {}
|
|
@@ -194,7 +194,7 @@ def _discover_agents(message_group_id: Optional[str] = None):
|
|
|
194
194
|
_AGENT_REGISTRY.clear()
|
|
195
195
|
|
|
196
196
|
# 1. Discover Python agent classes in the agents package
|
|
197
|
-
import
|
|
197
|
+
import newcode.agents as agents_package
|
|
198
198
|
|
|
199
199
|
# Iterate through all modules in the agents package
|
|
200
200
|
for _, modname, _ in pkgutil.iter_modules(agents_package.__path__):
|
|
@@ -207,7 +207,7 @@ def _discover_agents(message_group_id: Optional[str] = None):
|
|
|
207
207
|
|
|
208
208
|
try:
|
|
209
209
|
# Import the module
|
|
210
|
-
module = importlib.import_module(f"
|
|
210
|
+
module = importlib.import_module(f"newcode.agents.{modname}")
|
|
211
211
|
|
|
212
212
|
# Look for BaseAgent subclasses
|
|
213
213
|
for attr_name in dir(module):
|
|
@@ -236,7 +236,7 @@ def _discover_agents(message_group_id: Optional[str] = None):
|
|
|
236
236
|
|
|
237
237
|
try:
|
|
238
238
|
# Import the sub-package
|
|
239
|
-
subpkg = importlib.import_module(f"
|
|
239
|
+
subpkg = importlib.import_module(f"newcode.agents.{subpkg_name}")
|
|
240
240
|
|
|
241
241
|
# Iterate through modules in the sub-package
|
|
242
242
|
if not hasattr(subpkg, "__path__"):
|
|
@@ -249,7 +249,7 @@ def _discover_agents(message_group_id: Optional[str] = None):
|
|
|
249
249
|
try:
|
|
250
250
|
# Import the submodule
|
|
251
251
|
module = importlib.import_module(
|
|
252
|
-
f"
|
|
252
|
+
f"newcode.agents.{subpkg_name}.{modname}"
|
|
253
253
|
)
|
|
254
254
|
|
|
255
255
|
# Look for BaseAgent subclasses
|
|
@@ -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"
|
|
@@ -574,7 +574,7 @@ def _build_clone_display_name(display_name: str, clone_index: int) -> str:
|
|
|
574
574
|
|
|
575
575
|
def _filter_available_tools(tool_names: List[str]) -> List[str]:
|
|
576
576
|
"""Filter a tool list to only available tool names."""
|
|
577
|
-
from
|
|
577
|
+
from newcode.tools import get_available_tool_names
|
|
578
578
|
|
|
579
579
|
available_tools = set(get_available_tool_names())
|
|
580
580
|
return [tool for tool in tool_names if tool in available_tools]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"""Planning Agent - Breaks down complex tasks into actionable steps with strategic roadmapping."""
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from newcode.config import get_agent_name
|
|
4
4
|
|
|
5
5
|
from .. import callbacks
|
|
6
6
|
from .base_agent import BaseAgent
|
|
@@ -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
|
"""
|
|
@@ -61,10 +61,10 @@ You can help users:
|
|
|
61
61
|
|
|
62
62
|
## How Scheduling Works
|
|
63
63
|
|
|
64
|
-
- Tasks are stored in `~/.
|
|
64
|
+
- Tasks are stored in `~/.newcode/scheduled_tasks.json`
|
|
65
65
|
- A background daemon checks for tasks to run based on their schedule
|
|
66
|
-
- Each task runs: `
|
|
67
|
-
- Output is saved to log files in `~/.
|
|
66
|
+
- Each task runs: `newcode -p <prompt> --model <model> --agent <agent>`
|
|
67
|
+
- Output is saved to log files in `~/.newcode/scheduler_logs/`
|
|
68
68
|
|
|
69
69
|
## Schedule Types
|
|
70
70
|
|
|
@@ -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
|
"""
|