diff --git a/renderer/src/routes/(registry)/registry-group_.$name.tsx b/renderer/src/routes/(registry)/registry-group_.$name.tsx
index 6110aee25..f9371d077 100644
--- a/renderer/src/routes/(registry)/registry-group_.$name.tsx
+++ b/renderer/src/routes/(registry)/registry-group_.$name.tsx
@@ -43,6 +43,20 @@ function RegistryGroupDetail() {
const hasServers =
Object.keys(group?.servers ?? {}).length > 0 ||
Object.keys(group?.remote_servers ?? {}).length > 0
+ const groupServers = [
+ ...Object.entries(group?.servers ?? {}).map(([key, srv]) => ({
+ key: `local-${key}`,
+ server: srv as RegistryImageMetadata,
+ })),
+ ...Object.entries(group?.remote_servers ?? {}).map(([key, srv]) => ({
+ key: `remote-${key}`,
+ server: srv as RegistryRemoteServerMetadata,
+ })),
+ ].sort((a, b) =>
+ (a.server.name ?? '').localeCompare(b.server.name ?? '', undefined, {
+ sensitivity: 'base',
+ })
+ )
return (
@@ -73,26 +87,14 @@ function RegistryGroupDetail() {
- {Object.entries(group?.servers ?? {}).map(
- ([key, srv]: [string, RegistryImageMetadata]) => (
-
-
- {srv.name}
-
- {srv.description}
-
- )
- )}
- {Object.entries(group?.remote_servers ?? {}).map(
- ([key, srv]: [string, RegistryRemoteServerMetadata]) => (
-
-
- {srv.name}
-
- {srv.description}
-
- )
- )}
+ {groupServers.map(({ key, server }) => (
+
+
+ {server.name}
+
+ {server.description}
+
+ ))}
diff --git a/renderer/src/routes/__tests__/registry-group_.$name.test.tsx b/renderer/src/routes/__tests__/registry-group_.$name.test.tsx
index e5cbbe95e..b0dd96334 100644
--- a/renderer/src/routes/__tests__/registry-group_.$name.test.tsx
+++ b/renderer/src/routes/__tests__/registry-group_.$name.test.tsx
@@ -255,6 +255,9 @@ describe('Registry Group Detail Route', () => {
const bodyRows = allRows.slice(1) // skip header row
expect(bodyRows).toHaveLength(3)
+ expect(
+ bodyRows.map((row) => within(row).getAllByRole('cell')[0]?.textContent)
+ ).toEqual(['anthropic-server', 'huggingface-remote', 'openai-server'])
expect(screen.getByText('openai-server')).toBeVisible()
expect(screen.getByText('OpenAI API integration for Claude')).toBeVisible()