From 04198c2a5e9418ce30fdffc34b575636b804f1bf Mon Sep 17 00:00:00 2001 From: Michael Panchenko Date: Wed, 13 May 2026 18:53:12 +0200 Subject: [PATCH] Removed check_onboarding_performed, instead add a hint to activation message --- src/serena/agent.py | 3 ++ .../generated/generated_prompt_factory.py | 40 +++++++++++-------- .../resources/config/modes/no-memories.yml | 1 - .../resources/config/modes/no-onboarding.yml | 1 - src/serena/tools/tools_base.py | 1 + src/serena/tools/workflow_tools.py | 33 +-------------- .../typescript/test_repo/.serena/project.yml | 1 - 7 files changed, 29 insertions(+), 51 deletions(-) diff --git a/src/serena/agent.py b/src/serena/agent.py index db67577d..5b1543fb 100644 --- a/src/serena/agent.py +++ b/src/serena/agent.py @@ -47,6 +47,7 @@ from serena.task_executor import TaskExecutor from serena.tools import ( ActivateProjectTool, GetCurrentConfigTool, + OnboardingTool, OpenDashboardTool, ReadMemoryTool, ReplaceContentTool, @@ -981,6 +982,8 @@ class SerenaAgent: f"\n{json.dumps(project_memories.to_dict())}\n" + "Use the `read_memory` tool to read these memories later if they are relevant to the task." ) + elif self._active_tools.contains_tool_class(OnboardingTool): + msg += "Onboarding has not been performed yet, you should call Serena's `onboarding` tool now to set up project memories." # add prompts for modes that were dynamically activated by the project modes_with_prompts = self._project_prompt_status.get_modes_with_prompts_to_be_provided_for_project_activation(session_id) diff --git a/src/serena/generated/generated_prompt_factory.py b/src/serena/generated/generated_prompt_factory.py index fedf4142..2a43e586 100644 --- a/src/serena/generated/generated_prompt_factory.py +++ b/src/serena/generated/generated_prompt_factory.py @@ -14,31 +14,39 @@ class PromptFactory(PromptFactoryBase): """ def get_info_jet_brains_debug_repl_template_string(self) -> str: - return self.get_prompt_template_string('info_jet_brains_debug_repl') - + return self.get_prompt_template_string("info_jet_brains_debug_repl") + def create_info_jet_brains_debug_repl(self) -> str: - return self._render_prompt('info_jet_brains_debug_repl', locals()) + return self._render_prompt("info_jet_brains_debug_repl", locals()) def get_onboarding_prompt_template_string(self) -> str: - return self.get_prompt_template_string('onboarding_prompt') - + return self.get_prompt_template_string("onboarding_prompt") + def create_onboarding_prompt(self, *, memory_maintenance_name: Any, system: Any) -> str: - return self._render_prompt('onboarding_prompt', locals()) + return self._render_prompt("onboarding_prompt", locals()) def get_connection_prompt_template_string(self) -> str: - return self.get_prompt_template_string('connection_prompt') - + return self.get_prompt_template_string("connection_prompt") + def create_connection_prompt(self) -> str: - return self._render_prompt('connection_prompt', locals()) + return self._render_prompt("connection_prompt", locals()) def get_system_prompt_template_string(self) -> str: - return self.get_prompt_template_string('system_prompt') - - def create_system_prompt(self, *, available_markers: Any, available_tools: Any, context_system_prompt: Any, global_memories_list: Any, mode_system_prompts: Any) -> str: - return self._render_prompt('system_prompt', locals()) + return self.get_prompt_template_string("system_prompt") + + def create_system_prompt( + self, + *, + available_markers: Any, + available_tools: Any, + context_system_prompt: Any, + global_memories_list: Any, + mode_system_prompts: Any, + ) -> str: + return self._render_prompt("system_prompt", locals()) def get_cc_system_prompt_override_template_string(self) -> str: - return self.get_prompt_template_string('cc_system_prompt_override') - + return self.get_prompt_template_string("cc_system_prompt_override") + def create_cc_system_prompt_override(self) -> str: - return self._render_prompt('cc_system_prompt_override', locals()) + return self._render_prompt("cc_system_prompt_override", locals()) diff --git a/src/serena/resources/config/modes/no-memories.yml b/src/serena/resources/config/modes/no-memories.yml index 08602141..d4175eef 100644 --- a/src/serena/resources/config/modes/no-memories.yml +++ b/src/serena/resources/config/modes/no-memories.yml @@ -9,4 +9,3 @@ excluded_tools: - rename_memory - list_memories - onboarding - - check_onboarding_performed diff --git a/src/serena/resources/config/modes/no-onboarding.yml b/src/serena/resources/config/modes/no-onboarding.yml index 4b893eff..d441b5d3 100644 --- a/src/serena/resources/config/modes/no-onboarding.yml +++ b/src/serena/resources/config/modes/no-onboarding.yml @@ -3,4 +3,3 @@ prompt: | The onboarding process is not applied. excluded_tools: - onboarding - - check_onboarding_performed diff --git a/src/serena/tools/tools_base.py b/src/serena/tools/tools_base.py index 565a4055..33b47d15 100644 --- a/src/serena/tools/tools_base.py +++ b/src/serena/tools/tools_base.py @@ -528,6 +528,7 @@ class ToolRegistry: "summarize_changes", "think_about_whether_you_are_done", "switch_modes", + "check_onboarding_performed", ] def __init__(self) -> None: diff --git a/src/serena/tools/workflow_tools.py b/src/serena/tools/workflow_tools.py index 7d5942d1..18ed224b 100644 --- a/src/serena/tools/workflow_tools.py +++ b/src/serena/tools/workflow_tools.py @@ -4,38 +4,7 @@ Tools supporting the general workflow of the agent import platform -from serena.tools import ReadMemoryTool, Tool, ToolMarkerDoesNotRequireActiveProject, ToolMarkerOptional, WriteMemoryTool - - -class CheckOnboardingPerformedTool(Tool): - """ - Checks whether project onboarding was already performed. - """ - - def apply(self) -> str: - """ - Checks whether project onboarding was already performed. - You should always call this tool before beginning to actually work on the project/after activating a project. - """ - read_memory_tool_available = self.agent.tool_is_exposed(ReadMemoryTool.get_name_from_cls()) - perform_onboarding_tool_available = self.agent.tool_is_exposed(OnboardingTool.get_name_from_cls()) - - if not read_memory_tool_available: - return "Memory reading tool not activated, skipping onboarding check." - project_memories = self.memories_manager.list_project_memories() - if len(project_memories) == 0: - msg = "Onboarding not performed yet (no memories available). " - if perform_onboarding_tool_available: - msg += "You should perform onboarding by calling the `onboarding` tool before proceeding with the task. " - else: - # Not reporting the list of memories here, as they were already reported at project activation - # (with the system prompt if the project was activated at startup) - msg = ( - f"Onboarding was already performed: {len(project_memories)} project memories are available. " - "Consider reading memories if they appear relevant to the task at hand." - ) - msg += " If you have not read the 'Serena Instructions Manual', do so now." - return msg +from serena.tools import Tool, ToolMarkerDoesNotRequireActiveProject, ToolMarkerOptional, WriteMemoryTool class OnboardingTool(Tool): diff --git a/test/resources/repos/typescript/test_repo/.serena/project.yml b/test/resources/repos/typescript/test_repo/.serena/project.yml index 942b95a1..090b7b46 100644 --- a/test/resources/repos/typescript/test_repo/.serena/project.yml +++ b/test/resources/repos/typescript/test_repo/.serena/project.yml @@ -7,7 +7,6 @@ # execute `uv run scripts/print_tool_overview.py`. # # * `activate_project`: Activates a project by name. -# * `check_onboarding_performed`: Checks whether project onboarding was already performed. # * `create_text_file`: Creates/overwrites a file in the project directory. # * `delete_lines`: Deletes a range of lines within a file. # * `delete_memory`: Deletes a memory from Serena's project-specific memory store.