diff --git a/apps/api/src/api/tool/tool_instances.py b/apps/api/src/api/tool/tool_instances.py index 77f159c..5206d08 100644 --- a/apps/api/src/api/tool/tool_instances.py +++ b/apps/api/src/api/tool/tool_instances.py @@ -853,19 +853,31 @@ async def create_instance( # Generate unique name instance_name = f"{tool_type.name}-{repo.name}-{uuid.uuid4().hex[:8]}" - # Auto-generate display name with numbering when duplicates exist + # Auto-generate display name with scoped numbering. + # When a workspace is provided, use workspace name + tool type. + # Otherwise fall back to repo name + tool type. if data.display_name: instance_display = data.display_name else: - auto_name = f"{_project.name} / {repo.name} / {tool_type.display_name}" - result = await session.execute( - select(ToolInstance).where( - ToolInstance.project_id == project_id, - ToolInstance.repository_id == repo_id, - ToolInstance.tool_type_id == tool_type_id, - ToolInstance.owner_id == user_id, + scope_name = workspace.name if workspace else repo.name + auto_name = f"{scope_name} / {tool_type.display_name}" + + if workspace: + count_query = ( + select(ToolInstance) + .where(ToolInstance.workspace_id == workspace_id) + .where(ToolInstance.tool_type_id == tool_type_id) + .where(ToolInstance.owner_id == user_id) ) - ) + else: + count_query = ( + select(ToolInstance) + .where(ToolInstance.repository_id == repo_id) + .where(ToolInstance.tool_type_id == tool_type_id) + .where(ToolInstance.owner_id == user_id) + ) + + result = await session.execute(count_query) existing_count = len(result.scalars().all()) if existing_count > 0: instance_display = f"{auto_name} #{existing_count + 1}"