Improve issue and approvals UI: parent chain, project names, approval details

shared:
- Add IssueAncestor type and ancestors?: IssueAncestor[] to Issue interface

IssueDetail:
- Show clickable parent chain breadcrumb above issue title when issue has parents
- Ancestors rendered root-first (reversed from API order) with chevron separators

IssueProperties:
- Project field now shows project name with a link instead of raw UUID
- Assignee field now links to agent detail page
- Parent field shows immediate parent title (from ancestors[0]) with link
- Show request depth when > 0

Approvals:
- Pending/All filter tabs with pending count badge
- HireAgentPayload renders name, role, title, capabilities, adapter type
- CeoStrategyPayload renders plan/description text in a monospace block
- Decision note shown when present
- Requester agent name shown in header
- Approve button uses green styling; empty state with icon

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Forgotten
2026-02-17 20:16:57 -06:00
parent fb8a77a53b
commit 0b9bea667c
5 changed files with 331 additions and 54 deletions

View File

@@ -1,7 +1,7 @@
export type { Company } from "./company.js";
export type { Agent, AgentKeyCreated } from "./agent.js";
export type { Project } from "./project.js";
export type { Issue, IssueComment } from "./issue.js";
export type { Issue, IssueComment, IssueAncestor } from "./issue.js";
export type { Goal } from "./goal.js";
export type { Approval } from "./approval.js";
export type { CostEvent, CostSummary } from "./cost.js";

View File

@@ -1,11 +1,23 @@
import type { IssuePriority, IssueStatus } from "../constants.js";
export interface IssueAncestor {
id: string;
title: string;
description: string | null;
status: string;
priority: string;
assigneeAgentId: string | null;
projectId: string | null;
goalId: string | null;
}
export interface Issue {
id: string;
companyId: string;
projectId: string | null;
goalId: string | null;
parentId: string | null;
ancestors?: IssueAncestor[];
title: string;
description: string | null;
status: IssueStatus;