diff options
| author | soryu <soryu@soryu.co> | 2026-02-20 00:46:21 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-02-20 00:46:21 +0000 |
| commit | aa974c4888851f10c782e07b9d9bff7a6f1aef15 (patch) | |
| tree | b1cd40dedeaff64fe447fdd9c6c1000870b6a536 /makima/frontend/src/components/directives | |
| parent | ed84d7ec5ece272a2cb8dabd36cbd6074df0887e (diff) | |
| download | soryu-aa974c4888851f10c782e07b9d9bff7a6f1aef15.tar.gz soryu-aa974c4888851f10c782e07b9d9bff7a6f1aef15.zip | |
fix: reconcile:on blocking, pending question notifications, and infra improvements (#73)
* feat: soryu-co/soryu - makima: Fix contracts page overflow - constrain layout to viewport height
* feat: soryu-co/soryu - makima: Add git fetch to create_worktree and improve completion prompt merge conflict handling
* WIP: heartbeat checkpoint
* feat: soryu-co/soryu - makima: Add pending question notification badge to directive sidebar and nav
* feat: soryu-co/soryu - makima: Fix reconcile:on blocking - make phaseguard poll indefinitely instead of returning immediately
Diffstat (limited to 'makima/frontend/src/components/directives')
| -rw-r--r-- | makima/frontend/src/components/directives/DirectiveList.tsx | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/makima/frontend/src/components/directives/DirectiveList.tsx b/makima/frontend/src/components/directives/DirectiveList.tsx index 6393ea7..6a9c486 100644 --- a/makima/frontend/src/components/directives/DirectiveList.tsx +++ b/makima/frontend/src/components/directives/DirectiveList.tsx @@ -1,4 +1,6 @@ +import { useMemo } from "react"; import type { DirectiveSummary, DirectiveStatus } from "../../lib/api"; +import { useSupervisorQuestions } from "../../contexts/SupervisorQuestionsContext"; const STATUS_BADGE: Record<DirectiveStatus, { color: string; label: string }> = { draft: { color: "text-[#7788aa] border-[#2a3a5a]", label: "DRAFT" }, @@ -16,6 +18,18 @@ interface DirectiveListProps { } export function DirectiveList({ directives, selectedId, onSelect, onCreate }: DirectiveListProps) { + const { pendingQuestions } = useSupervisorQuestions(); + + const questionsPerDirective = useMemo(() => { + const counts = new Map<string, number>(); + for (const q of pendingQuestions) { + if (q.directiveId) { + counts.set(q.directiveId, (counts.get(q.directiveId) || 0) + 1); + } + } + return counts; + }, [pendingQuestions]); + return ( <div className="flex flex-col h-full"> <div className="flex items-center justify-between px-3 py-2 border-b border-dashed border-[rgba(117,170,252,0.2)]"> @@ -55,6 +69,9 @@ export function DirectiveList({ directives, selectedId, onSelect, onCreate }: Di <span className="text-[12px] font-mono text-white truncate pr-2"> {d.title} </span> + {questionsPerDirective.has(d.id) && ( + <span className="inline-block w-2.5 h-2.5 rounded-full bg-amber-400 animate-pulse shrink-0" title={`${questionsPerDirective.get(d.id)} pending question(s)`} /> + )} <span className={`text-[9px] font-mono ${badge.color} border rounded px-1.5 py-0.5 shrink-0`} > |
