Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 1 addition & 6 deletions apps/cli/src/commands/results/serve.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3213,14 +3213,12 @@ export function createApp(
/** Convert a ProjectEntry to snake_case wire format. */
function projectEntryToWire(entry: {
id: string;
name: string;
path: string;
addedAt: string;
lastOpenedAt: string;
}) {
return {
id: entry.id,
name: entry.name,
path: entry.path,
added_at: entry.addedAt,
last_opened_at: entry.lastOpenedAt,
Expand Down Expand Up @@ -3317,7 +3315,6 @@ export function createApp(
const summary = await summarizeProjectRunMetas(project);
return c.json({
id: project.id,
name: project.name,
path: project.path,
run_count: summary.runCount,
pass_rate: summary.passRate,
Expand Down Expand Up @@ -3353,7 +3350,6 @@ export function createApp(
tag_revision: string;
source: 'local' | 'remote';
project_id: string;
project_name: string;
}> = [];

for (const p of registry.projects) {
Expand Down Expand Up @@ -3407,7 +3403,6 @@ export function createApp(
...(runtimeSource && { runtime_source: runtimeSource }),
...tagFields,
project_id: p.id,
project_name: p.name,
});
}
} catch {
Expand Down Expand Up @@ -3783,7 +3778,7 @@ export const resultsServeCommand = command({
if (add) {
try {
const entry = addProject(add);
console.log(`Registered project: ${entry.name} (${entry.id}) at ${entry.path}`);
console.log(`Registered project: ${entry.id} at ${entry.path}`);
} catch (err) {
console.error(`Error: ${(err as Error).message}`);
process.exit(1);
Expand Down
9 changes: 0 additions & 9 deletions apps/cli/test/commands/results/serve.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -673,14 +673,12 @@ describe('serve app', () => {
expect(create.status).toBe(201);
const created = (await create.json()) as {
id: string;
name: string;
path: string;
added_at: string;
last_opened_at: string;
};
expect(created).toMatchObject({
id: 'project-to-register',
name: 'project-to-register',
path: projectDir,
});
expect(created.added_at).toBeTruthy();
Expand Down Expand Up @@ -2152,7 +2150,6 @@ describe('serve app', () => {
projects: [
{
id: 'project-no-publish',
name: 'Project No Publish',
path: projectDir,
results: {
repo: `file://${remoteDir}`,
Expand Down Expand Up @@ -2276,7 +2273,6 @@ describe('serve app', () => {
projects: [
{
id: 'agentv',
name: 'AgentV',
path: projectDir,
results: {
repo: 'EntityProcess/agentv-examples-eval-results',
Expand Down Expand Up @@ -2328,7 +2324,6 @@ describe('serve app', () => {
projects: [
{
id: 'project-sync-pull',
name: 'Project Sync Pull',
path: projectDir,
results: {
repo: `file://${remoteDir}`,
Expand Down Expand Up @@ -2405,7 +2400,6 @@ describe('serve app', () => {
projects: [
{
id: 'project-sync-push',
name: 'Project Sync Push',
path: projectDir,
results: {
repo: `file://${remoteDir}`,
Expand Down Expand Up @@ -2473,7 +2467,6 @@ describe('serve app', () => {
projects: [
{
id: 'project-sync-offline',
name: 'Project Sync Offline',
path: projectDir,
results: {
repo: missingRemoteUrl,
Expand Down Expand Up @@ -2531,7 +2524,6 @@ describe('serve app', () => {
projects: [
{
id: 'project-sync-conflict',
name: 'Project Sync Conflict',
path: projectDir,
results: {
repo: `file://${remoteDir}`,
Expand Down Expand Up @@ -2657,7 +2649,6 @@ describe('serve app', () => {
projects: [
{
id: 'project-confirm-merge',
name: 'Project Confirm Merge',
path: projectDir,
results: {
repo: `file://${remoteDir}`,
Expand Down
12 changes: 3 additions & 9 deletions apps/dashboard/src/components/Breadcrumbs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@

import { Link, useMatches } from '@tanstack/react-router';

import { useProjectList } from '~/lib/api';
import {
categoryPath,
evalPath,
Expand All @@ -17,7 +16,6 @@ import {
runPath,
suitePath,
} from '~/lib/navigation';
import { type ProjectDisplayEntry, resolveProjectDisplayName } from '~/lib/project-display-name';
import { useSidebarContext } from '~/lib/sidebar-context';

interface BreadcrumbSegment {
Expand All @@ -34,10 +32,7 @@ export function formatBreadcrumbRunLabel(runId: string | undefined): string {
return timestamp?.[0] ?? candidate;
}

function deriveSegments(
matches: ReturnType<typeof useMatches>,
projects: readonly ProjectDisplayEntry[] = [],
): BreadcrumbSegment[] {
function deriveSegments(matches: ReturnType<typeof useMatches>): BreadcrumbSegment[] {
const segments: BreadcrumbSegment[] = [];

// Skip the root match (index 0)
Expand All @@ -49,7 +44,7 @@ function deriveSegments(
if (routeId === '/' || routeId === '/_layout') continue;

if (routeId.includes('/projects/$projectId') && params.projectId) {
const label = resolveProjectDisplayName(params.projectId, projects);
const label = params.projectId;
const to = projectHomePath(params.projectId);
if (!segments.some((s) => s.to === to)) {
segments.push({
Expand Down Expand Up @@ -172,8 +167,7 @@ function deriveSegments(
export function Breadcrumbs() {
const matches = useMatches();
const { toggle } = useSidebarContext();
const { data: projectData } = useProjectList();
const segments = deriveSegments(matches, projectData?.projects);
const segments = deriveSegments(matches);
const hasTrail = segments.length > 0;

return (
Expand Down
8 changes: 4 additions & 4 deletions apps/dashboard/src/components/ProjectCard.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ export function ProjectCard({ project, canRemove = false, onRemove }: ProjectCar
<div className="flex items-start justify-between">
<div className="min-w-0 flex-1 pr-10">
<h3 className="truncate text-lg font-semibold text-white group-hover:text-cyan-400">
{project.name}
{project.id}
</h3>
<p className="mt-1 truncate text-xs text-gray-500">{project.path}</p>
</div>
Expand Down Expand Up @@ -161,7 +161,7 @@ export function ProjectCard({ project, canRemove = false, onRemove }: ProjectCar
aria-haspopup="menu"
aria-expanded={menuOpen}
aria-controls={menuOpen ? menuId : undefined}
aria-label={`Open ${project.name} project menu`}
aria-label={`Open ${project.id} project menu`}
onClick={() => setMenuOpen((open) => !open)}
className="flex h-8 w-8 items-center justify-center rounded-md text-lg leading-none text-gray-500 transition-colors hover:bg-gray-800 hover:text-gray-200 focus:outline-none focus:ring-1 focus:ring-cyan-500"
>
Expand All @@ -172,7 +172,7 @@ export function ProjectCard({ project, canRemove = false, onRemove }: ProjectCar
ref={menuRef}
id={menuId}
role="menu"
aria-label={`${project.name} actions`}
aria-label={`${project.id} actions`}
className="absolute right-0 top-10 w-44 overflow-hidden rounded-md border border-gray-800 bg-gray-950 py-1 shadow-xl"
>
<button
Expand Down Expand Up @@ -211,7 +211,7 @@ export function ProjectCard({ project, canRemove = false, onRemove }: ProjectCar
</div>
<div className="space-y-3 p-4">
<p className="text-sm text-gray-300">
Remove <span className="font-medium text-white">{project.name}</span> from this
Remove <span className="font-medium text-white">{project.id}</span> from this
Dashboard registry.
</p>
<p className="text-sm text-gray-500">
Expand Down
2 changes: 0 additions & 2 deletions apps/dashboard/src/lib/api.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ describe('dashboard API boundary mapping', () => {
it('maps add-project wire keys to camelCase UI data', async () => {
const calls = stubJsonResponse({
id: 'demo',
name: 'demo',
path: '/tmp/demo',
added_at: '2026-06-19T05:00:00.000Z',
last_opened_at: '2026-06-19T05:00:00.000Z',
Expand All @@ -63,7 +62,6 @@ describe('dashboard API boundary mapping', () => {
});
expect(result).toEqual({
id: 'demo',
name: 'demo',
path: '/tmp/demo',
addedAt: '2026-06-19T05:00:00.000Z',
lastOpenedAt: '2026-06-19T05:00:00.000Z',
Expand Down
1 change: 0 additions & 1 deletion apps/dashboard/src/lib/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,6 @@ export async function addProjectApi(projectPath: string): Promise<ProjectEntry>
const body = (await res.json()) as ProjectEntryWire;
return {
id: body.id,
name: body.name,
path: body.path,
addedAt: body.added_at,
lastOpenedAt: body.last_opened_at,
Expand Down
23 changes: 0 additions & 23 deletions apps/dashboard/src/lib/project-display-name.test.ts

This file was deleted.

21 changes: 0 additions & 21 deletions apps/dashboard/src/lib/project-display-name.ts

This file was deleted.

4 changes: 0 additions & 4 deletions apps/dashboard/src/lib/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ export interface RunMeta {
*/
on_remote?: boolean;
project_id?: string;
project_name?: string;
/** Optional user-assigned tags from the run's sidecar tags.json. */
tags?: string[];
/** Tags currently present in the remote results repo before local metadata overlays. */
Expand Down Expand Up @@ -596,7 +595,6 @@ export interface RemoteStatusResponse {

export interface ProjectSummary {
id: string;
name: string;
path: string;
added_at: string;
last_opened_at: string;
Expand All @@ -612,15 +610,13 @@ export interface ProjectListResponse {

export interface ProjectEntry {
id: string;
name: string;
path: string;
addedAt: string;
lastOpenedAt: string;
}

export interface ProjectEntryWire {
id: string;
name: string;
path: string;
added_at: string;
last_opened_at: string;
Expand Down
4 changes: 2 additions & 2 deletions apps/dashboard/src/routes/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ function ProjectsDashboard() {
}
: current,
);
setProjectMessage(`Project removed from Dashboard: ${project.name}. Files were left on disk.`);
setProjectMessage(`Project removed from Dashboard: ${project.id}. Files were left on disk.`);
void queryClient.invalidateQueries({ queryKey: ['projects'] });
}

Expand Down Expand Up @@ -210,7 +210,7 @@ function ProjectsDashboard() {
open={showAddProject}
onClose={() => setShowAddProject(false)}
onAdded={(project) => {
setProjectMessage(`Project registered: ${project.name}`);
setProjectMessage(`Project registered: ${project.id}`);
void queryClient.invalidateQueries({ queryKey: ['projects'] });
}}
/>
Expand Down
5 changes: 1 addition & 4 deletions apps/dashboard/src/routes/projects/$projectId.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,9 @@ import {
syncRemoteResultsApi,
useEvalRuns,
useInfiniteProjectRunList,
useProjectList,
useRemoteStatus,
useStudioConfig,
} from '~/lib/api';
import { resolveProjectDisplayName } from '~/lib/project-display-name';
import {
buildProjectSyncErrorFeedback,
buildProjectSyncFeedback,
Expand Down Expand Up @@ -54,9 +52,8 @@ function ProjectHomePage() {
const navigate = useNavigate();
const [showRunEval, setShowRunEval] = useState(false);
const { data: config } = useStudioConfig(projectId);
const { data: projectData } = useProjectList();
const isReadOnly = config?.read_only === true;
const projectName = resolveProjectDisplayName(projectId, projectData?.projects);
const projectName = projectId;

const activeTab: TabId = tabs.some((t) => t.id === tab) ? (tab as TabId) : 'runs';
const activeTabTitle = tabs.find((t) => t.id === activeTab)?.title ?? 'Recent Runs';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -703,7 +703,6 @@ For local workspaces, put portable registry defaults in `$AGENTV_HOME/config.yam
```yaml
projects:
- id: agentv
name: AgentV
path: /home/user/projects/agentv
results:
path: /home/user/agentv-results
Expand Down
5 changes: 0 additions & 5 deletions apps/web/src/content/docs/docs/tools/dashboard.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,6 @@ To register a remote repo and keep it synced automatically, add the source repo
```yaml
projects:
- id: my-evals
name: My Evals
repo: https://github.com/example/my-evals.git
path: /srv/agentv/my-evals
branch: main
Expand Down Expand Up @@ -278,7 +277,6 @@ For a registered project, put results repo settings on that project's entry in `
```yaml
projects:
- id: agentv
name: AgentV
repo: https://github.com/EntityProcess/agentv.git
path: /home/entity/projects/EntityProcess/agentv
branch: main
Expand All @@ -296,7 +294,6 @@ For a separate results repository, set `results.repo` and an optional managed cl
```yaml
projects:
- id: agentv
name: AgentV
path: /home/entity/projects/EntityProcess/agentv
results:
repo: git@github.com:EntityProcess/agentv-examples-eval-results.git
Expand Down Expand Up @@ -331,7 +328,6 @@ Before:
```yaml
projects:
- id: agentv
name: AgentV
path: /home/entity/projects/EntityProcess/agentv
source:
url: https://github.com/EntityProcess/agentv
Expand All @@ -348,7 +344,6 @@ After:
```yaml
projects:
- id: agentv
name: AgentV
repo: https://github.com/EntityProcess/agentv.git
path: /home/entity/projects/EntityProcess/agentv
branch: main
Expand Down
Loading
Loading